Цілі числа-цифри арифметичних таблиць


17

Виклик:

Виведіть 'цілі цифри' однієї з наступних шести арифметичних таблиць на основі вхідних даних:
- додавання ( +);
- віднімання ( -);
- множення ( *);
- поділ ( /);
- експоненція ( ^);
- модульна операція ( %).

Правила:

  • Що я визначаю як «цілі цифри»: Кожен результат арифметичного операнда , який є точно один з наступних варіантів : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Це означає, що ви виключаєте кожен результат 10або вище, кожен результат -1або менший і кожен нецілий результат.
  • Як ми обчислюємо арифметичні результати: Спочатку використовуючи верхню цифру, а потім використовуючи операнд з лівою цифрою. Вам дозволяється робити це навпаки (тобто y/xзамість x/y), до тих пір, поки ви послідовні для всіх шести результатів! (Тож вам заборонено використовувати y-xта x/yв одній відповіді.)
  • Ми не виводимо нічого для поділу на 0 тестових випадків (для операційних таблиць поділу та модуля)
  • Ми нічого не виведемо для кращого випадку 0^0.

Вихід:

Тож виведіть наступне (формат таблиці дещо гнучкий (див. Нижче): тому рядки необов’язкові та в основному додаються для читабельності тестових випадків):

Доповнення:

+ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 1 2 3 4 5 6 7 8 9
1 | 1 2 3 4 5 6 7 8 9
2 | 2 3 4 5 6 7 8 9
3 | 3 4 5 6 7 8 9
4 | 4 5 6 7 8 9
5 | 5 6 7 8 9
6 | 6 7 8 9
7 | 7 8 9
8 | 8 9
9 | 9

Віднімання:

- | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 1 2 3 4 5 6 7 8 9
1 |   0 1 2 3 4 5 6 7 8
2 |     0 1 2 3 4 5 6 7
3 |       0 1 2 3 4 5 6
4 |         0 1 2 3 4 5
5 |           0 1 2 3 4
6 |             0 1 2 3
7 |               0 1 2
8 |                 0 1
9 |                   0

Множення:

* | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 0 0 0 0 0 0 0 0 0
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0 2 4 6 8
3 | 0 3 6 9
4 | 0 4 8
5 | 0 5
6 | 0 6
7 | 0 7
8 | 0 8
9 | 0 9

Відділ:

/ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0   1   2   3   4
3 | 0     1     2     3
4 | 0       1       2
5 | 0         1
6 | 0           1
7 | 0             1
8 | 0               1
9 | 0                 1

Експоненція:

^ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 |   1 1 1 1 1 1 1 1 1
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0 1 4 9
3 | 0 1 8
4 | 0 1
5 | 0 1
6 | 0 1
7 | 0 1
8 | 0 1
9 | 0 1

Модуло:

% | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 
1 | 0 0 0 0 0 0 0 0 0 0
2 | 0 1 0 1 0 1 0 1 0 1
3 | 0 1 2 0 1 2 0 1 2 0
4 | 0 1 2 3 0 1 2 3 0 1
5 | 0 1 2 3 4 0 1 2 3 4
6 | 0 1 2 3 4 5 0 1 2 3
7 | 0 1 2 3 4 5 6 0 1 2
8 | 0 1 2 3 4 5 6 7 0 1
9 | 0 1 2 3 4 5 6 7 8 0

Правила виклику:

  • Обмеження нових рядків та пробілів не є обов'язковим
  • Горизонтальні та вертикальні лінії в тестових випадках не є обов'язковими. Я лише додав їх для кращої читабельності.
  • Пробіли між кожним результатом НЕ обов'язкові.
  • Символ для арифметики може бути різним, якщо зрозуміло, який це. Тобто ×або ·замість *множення; ÷замість /поділу; і т.д.
    І поки це єдиний персонаж, так що вибач Пітон **.
  • Формат введення гнучкий. Ви можете вибрати індекс від 0-5 або 1-6 для відповідних шести таблиць; ви можете ввести символ операнда; і т. д. (На відміну від того, що ви відображаєте в результаті, вам дозволяється вводити цілі рядки або **у випадку Python.)
    Просто переконайтеся, що вказати, який формат вводу ви використовуєте у своїй відповіді!

Загальні правила:

  • Це , тому найкоротша відповідь у байтах виграє.
    Не дозволяйте мовам коду-гольфу відштовхувати вас від публікації відповідей з мов, що не кодують гольф. Спробуйте придумати якомога коротшу відповідь на "будь-яку" мову програмування.
  • Стандартні правила діють для вашої відповіді, тому вам дозволяється використовувати STDIN / STDOUT, функції / метод з відповідними параметрами, повноцінні програми. Твій дзвінок.
  • Лазівки за замовчуванням заборонені.
  • Якщо можливо, додайте посилання з тестом для вашого коду.
  • Також, будь ласка, додайте пояснення, якщо це необхідно.

† Приклад дійсного виводу без горизонтальних і вертикальних ліній, ÷ як символ, та використання y/xзамість x/y:

÷ 0 1 2 3 4 5 6 7 8 9
0   0 0 0 0 0 0 0 0 0
1   1
2   2 1
3   3   1
4   4 2   1
5   5       1
6   6 3 2     1
7   7           1
8   8 4   2       1
9   9   3           1

Чи давати результат добре для ділення на нуль, якщо це результат нашої мови? Наприклад, у APL, 0 ÷ 0 є 1 за замовчуванням, а N mod-0 - N? Можна також вибрати іншу схему, де ділення на нуль завжди дорівнює нулю.
Адам

Чи дозволено нам більше одного пробілу між стовпцями?
Адам

@ Adám Вибачте за останню відповідь. Щодо вашого першого питання: не вибачте. Я знаю, що деякі мови друкують 1, інші 0, інші - щось інше 0^0або ділити / мод 0, але вам доведеться обійти це. Що стосується вашого другого питання: Так, звичайно, якщо цифри все ще знаходяться в одних стовпцях / рядках, ви можете використовувати стільки пробілів, скільки вам потрібно.
Кевін Кройсейсен

Чи важливий порядок аргументів для некомутативних операцій?
Adám

@ Адам Отже ви маєте в виду ви будете виводити сітку для y-x, y/x, y^xі y%xзамість того x-y, x/y, x^yі x%y? Гм, мабуть, це може бути добре. Я відредагую його у відповіді; до тих пір, поки ви будете послідовними для всіх шести з них (так не y-xі x/yз однаковою відповіддю).
Kevin Cruijssen

Відповіді:


7

Japt , 45 байт

Співпраця з @ETHproductions

AÆAÇU¥'p«Z«XªOvZ+U+X)+P r"..+"SÃuXÃuAo uU)m¸·

Запустити його в Інтернеті!

Вводиться як:

"+" для доповнення

"-" для віднімання

"*" для множення

"/" для поділу

"p" для експоненції

"%" для модуля

Пояснення (із розширеними ярликами):

AÆ  AÇ  U¥ 'p«  Z«  Xª OvZ+U+X)+P r"..+"SÃ uXÃ uAo uU)m¸  ·
AoX{AoZ{U=='p&&!Z&&!X||OvZ+U+X)+P r"..+"S} uX} uAo uU)mqS qR

A                                                             // By default, 10 is assigned to A
 o                                                            // Create a range from [0...9]
  X{                                         }                // Iterate through the range, X becomes the iterative item
    Ao                                                        //   Create another range [0...9]
      Z{                                 }                    //   Iterate through the range, Z becomes the iterative item
                                                              //     Take:
        U=='p                                                 //       U (input) =="p"
             &&!Z                                             //       && Z != 0
                 &&!X                                         //       && X != 0
                     ||                                       //     If any of these turned out false, instead take
                       Ov                                     //       Japt Eval:
                         Z+U+X                                //         Z{Input}X
                              )+P                             //     Whichever it was, convert to a string
                                  r"..+"S                     //     Replace all strings of length 2 or more with " "
                                                              //     (this makes sure the result !== "false" and has length 1)
                                           uX                 //   Insert X (the row number) into the front of the row
                                               u              // Insert at the beginning the first row:
                                                Ao            //   [0...9]
                                                   uU)        //   with the input inserted at the beginning
                                                      mqS     // Join each item in the final array with " "
                                                          qR  // Join the final array with "\n"

8

JavaScript (ES7), 128 байт

f=
c=>[...c+`0123456789`].map((r,_,a)=>a.map(l=>l==c?r:r==c?l:/^\d$/.test(l=c<`^`?eval(l+c+r):l|c?l**r:l/r)?l:` `).join` `).join`
`
<select onchange=o.textContent=f(this.value)><option>><option>+<option>-<option>*<option>/<option>%<option>^<option>&<option>,<option>.</select><pre id=o>

Спеціальний корпус 0^0коштував мені 8 байт.


Дуже здорово, як ви додали додаткові операнди на зразок АБО та ІД у свій тестовий фрагмент. +1
Кевін Кройссен

@KevinCruijssen Мені довелося видалити АБО, щоб зберегти байт (усі інші оператори сортували раніше ^), але дякую!
Ніл

5

Операція Мова сценаріїв Flashpoint , 343 333 303 301 байт

f={o=_this;s=o+" 0 1 2 3 4 5 6 7 8 9\n";i=0;while{i<10}do{j=0;s=s+format["%1",i];if(i<1&&(o=="/"||o=="%"||o=="^"))then{if(o=="^")then{if(j<1)then{s=s+"  ";j=1}}else{s=s+"\n1";i=1}};while{j<10}do{r=call format["%1%2%3",j,o,i];if(r>9||r<0||r%1>0)then{r=" "};s=s+format[" %1",r];j=j+1};s=s+"\n";i=i+1};s}

Телефонуйте за допомогою:

hint ("+" call f)

Безумовно:

f=
{
    o=_this;
    s=o+" 0 1 2 3 4 5 6 7 8 9\n";
    i=0;
    while{i<10}do
    {
        j=0;
        s=s+format["%1",i];
        if(i<1&&(o=="/"||o=="%"||o=="^"))then
        {
            if(o=="^")then{if(j<1)then{s=s+"  ";j=1}}
            else{s=s+"\n1";i=1}
        };
        while{j<10}do
        {
            r=call format["%1%2%3",j,o,i];
            if(r>9||r<0||r%1>0)then{r=" "};
            s=s+format[" %1",r];
            j=j+1
        };
        s=s+"\n";
        i=i+1
    };
    s
}

Вихід:

оператор +

оператор -

оператор *

оператор /

оператор ^

% оператора


5

Python 2 , 240 231 226 224 203 202 200 197 байт

a=i=input()
R=range(10)
for z in R:a+=' '+`z`
print a
for x in R:
 try:
	d=`x`
	for b in R:c=eval("b%s(x*1.)"%('**',i)[i<'^']);d+=' '+(' ',`int(c)`)[(i<'^'or x+b>0)and c in R]
 except:pass
 print d

Спробуйте в Інтернеті!

Вводиться як один з "+", "-", "*", "/", "^" або "%".

Правки

-9 -16, завдяки @FelipeNardiBatista за чудові підказки

Вниз до 221 за допомогою додаткової допомоги від @FelipeNardiBatista, а потім до 203, програвши and E(c)==int(E(c)). Якщо ми перевіряємо, чи E(c)є в range(10)ньому, завжди буде ціле число, якщо воно є. Немає необхідності перевіряти дублікат.

Це має бути нижче 200, не перемикаючись на Python 3 та не оголошуючиP=print . Якісь ідеї? Я завжди радий вчитися.

Yesss! Я знав, що це можна зробити. 197. Час спати зараз. Я витратив достатньо часу на цей. Дякуємо за цікавий виклик @KevinCruijssen.


1
('**',i)[i<'^']і (i<'^'or x>0 or b>0)економить 4 байти
Феліпе Нарді Батіста

1
a=i=input()з for z in R:a+=' '+`z`додатковими байтами, збереженими протиa=i+' 0 1 2 3 4 5 6 7 8 9'
Феліпе Нарді Батіста

1
1.vs 1.0і E(c)in Rvs -1<E(c)<10за 2 байти
Феліпе Нарді Батіста

1
x+b>0vs x>0 or b>0і "b%s(x*1.)"%('**',i)[i<'^']vs"b"+('**',i)[i<'^']+"(x*1.)"
Феліпе Нарді Батіста

1
є один набір додаткових батьків (, )приєднавшись до 223 байтів
Феліпе Нарді Батіста

4

Математика, 150 байт

r=0~Range~9;p=Prepend;±i_:=Grid@p[p[If[0<=#<=9,#]/._@__->""&/@<|Thread[Characters@"+-*/^%"->{Plus,#-#2&,1##&,#/#2&,Power,Mod}]|>[i][r,#],#]&/@r,r~p~i]

Визначає функцію одинарної функції, яка ±бере один із символів +-*/^%як свій вхід i(наприклад, ±"^") і повертає aGrid об'єкт, який виглядає точно як останній вихід в ОП.

<|Thread[Characters@"+-*/^%"->{Plus,#-#2&,1##&,#/#2&,Power,Mod}]|>пов'язує з кожним можливим символом введення відповідну (перелічувану) бінарну функцію (де #-#2&,1##&,#/#2&є версії для гольфу Subtract,Times,Divide); тому <|...|>[i][r,#]обчислює двійкову операцію з усіма можливими першими аргументами і #як другий аргумент. If[0<=#<=9,#]/._@__->""&перетворює кожен результат у Nullабо, ""якщо це не одноцифровий результат ( /._@__->""необхідний, оскільки деякі результати, як-от, 1/0не можуть бути оброблені нерівностями 0<=#<=9). Нарешті, ми додаємо різні заголовки та колонтитули та відображаємо відповідь.


Приємна відповідь та пояснення. Чи є у вас, можливо, посилання "Спробуйте в Інтернеті"? І одне запитання / зауваження, я не бачу жодної згадки про правило крайового регістру: " Ми нічого не виведемо для0^0 кращого випадку . " Чи не виводить Mathematica за замовчуванням нічого для цього крайового випадку?
Кевін Кройсейсен

1
Я додав посилання вище. Mathematica оцінює 0^0в Indeterminate, який дає нам нещасний невичісленного результат в If[0<=Indeterminate<=9, Indeterminate]середині обчислення; але /._@__->""це правило, яке приймає будь-яку неоцінену функцію та її аргументи та змінює її на невидимий рядок.
Грег Мартін

Ну добре, тому Mathematica правильно повертає, що для цього виникають два суперечливих правила #^0=1і 0^#= 0` 0^0. Добре дотепер і зручно для цього виклику. :) До речі, ваше посилання, здається, не працює. Я отримую помилку, що я не маю дозволу на доступ до неї.
Кевін Крейссен

Гаразд, вам доведеться перейти на sandbox.open.wolframcloud.com і вставити код у себе, а потім викликати його за допомогою команди типу ±"^".
Грег Мартін

4

Пітон 3, 343 335 363 362 байт

Найсумніша частина цього в тому, що відповідь на Яву б’є мене ... Я буду гольфу ще вранці.

o=input()
r=range(10)
g=[['']*10 for i in r]
for x in r:
 for y in r:exec('if"/"!=o and(o!="%"or x)and(o!="**"or x or y):k=str(y'+o+'x);g[x][y]=k')
if'/'==o:
 for x in r:
  for y in r:
   if x and y%x<1:g[x][y]=str(round(y/x))
if'**'==o:o='^'
print('\n'.join([' '.join([o]+list(map(str,r)))]+[' '.join([str(q)]+[' 'if len(x)!=1else x for x in g[q]])for q in r]))

РЕПЛІТ

-8 байт шляхом переходу на розуміння списку, а не подвійного циклу
+28 байт, щоб уникнути крайового регістру 0 ^ 0. -.-
-1 байт шляхом зміни , ==0щоб <1завдяки @StewieGriffin


" Найсумніша частина цього в тому, що відповідь на Java мене б'є ... " Ця частина змусила мене хихикати .. xD Мені подобається, як ти перевіряєш довжину числа, щоб визначити, чи знаходиться вона в діапазоні 0-9. До речі, гм .. Я помітив одну помилку у вашому Repl. В даний час він виходить **замість ^експоненції. (Також вам дозволено вводити дані **, але не виводити їх у таблицю результатів. Наразі у вас це навпаки.)
Кевін Круїйсен

1
@KevinCruijssen Whoops. Виправлено успішно, без зміни кількості байтів. Дякуємо, що вказали на це!
HyperNeutrino

@StewieGriffin Так. Дякую.
HyperNeutrino

4

Java 7, 312 305 байт

String c(int o){String r=("+-*/^%".charAt(o))+" 0 1 2 3 4 5 6 7 8 9\n";for(int i=0,j,p;i<10;i++){r+=i+" ";for(j=0;j<10;r+=p<0|p>9?"  ":p+" ")p=p(o,i,j++);r+="\n";}return r;}int p(int o,int a,double b){b=o<1?b+a:o<2?b-a:o<3?b*a:o<4&a>0?b/a:o<5&(a!=0|b!=0)?Math.pow(b,a):a>0?b%a:-1;return b%1==0?(int)b:-1;}

Не використовує горизонтальних / вертикальних ліній, а символи відображаються у прикладах виклику ( +-*/^%).
Використовує індекс0-5 якості вхідного шість математичних операндів.

-7 байт завдяки @Frozn .

Пояснення:

String c(int o){                   // Method with integer parameter and String return-type
  String r = ("+-*/^%".charAt(o))  //  Get the current mathematical operand character based on the input index
    + " 0 1 2 3 4 5 6 7 8 9\n";    //  Append the column header and a new-line
  for(int i=0,j,p; i<10; i++){     //  Loop over the rows
    r += i+" ";                    //   Append the left-side row-nr
    for(j=0; j<10;                 //   Inner-loop over the columns of the current row
        r += p<0|p>9?"  ":p+" ")   //     And after every iteration, append the result with either a space or an integer
      p = p(o,i,j++);              //    Calculate the current sum-result
                                   //   End of inner-loop (implicit / single-line body)
    r+="\n";                       //   Append result with new-line
  }                                //  End of loop
  return r;                        //  Return result String
}                                  // End of method

int p(int o,int a,double b){       // Separate method with two integer and a double parameters and integer return-type
  b = o<1 ?                        //  If the given operand is 0:
       b+a                         //   Use addition
      : o<2 ?                      //  Els-if the given operand is 1:
       b-a                         //   Use subtraction
      : o<3 ?                      //  Else-if the given operand is 2:
       b*a                         //   Use multiplication
      : o<4 & a>0 ?                //  Else-if the given operand is 3 and `a` is above 0:
       b/a                         //   Use division
      : o<5 & (a!=0|b!=0) ?        //  Else-if the given operand is 4 and not both `a` and `b` are 0:
       Math.pow(b,a)               //   Use exponentiation
      : a>0 ?                      //  Else-if the given operand is 5:
       b%a                         //   Use modulo
      :                            //  Else:
       -1;                         //   Use -1 as result
  return b%1 == 0 ?                //  If the result is not a decimal number:
     (int)b                        //   Return the result
    :                              //  Else:
     -1;                           //   Return -1 as result
}                                  // End of separate method

Код тесту:

Спробуйте тут.

class M{
  String c(int o){String r=("+-*/^%".charAt(o))+" 0 1 2 3 4 5 6 7 8 9\n";for(int i=0,j,p;i<10;i++){r+=i+" ";for(j=0;j<10;r+=p<0|p>9?"  ":p+" ")p=p(o,i,j++);r+="\n";}return r;}int p(int o,int a,double b){b=o<1?b+a:o<2?b-a:o<3?b*a:o<4&a>0?b/a:o<5&(a!=0|b!=0)?Math.pow(b,a):a>0?b%a:-1;return b%1==0?(int)b:-1;}

  public static void main(String[]a){
    M m = new M();
    System.out.println(m.c(0)); // +
    System.out.println(m.c(1)); // -
    System.out.println(m.c(2)); // *
    System.out.println(m.c(3)); // /
    System.out.println(m.c(4)); // ^
    System.out.println(m.c(5)); // %
  }
}

1
Можливо, ви могли б перейти bяк doubleдо pта позбутися r, присвоївши значення прикутого трикутника b.
Фрозн

3

Haskell, 230 199 182 + 53 47 46 + 1 байт роздільника = 284 247 232 229 байт

f=head.show
g=[0..9]
h=(:" ")
y(%)s=unlines$(s:map f g>>=h):[f y:[last$' ':[f(x%y)|x%y`elem`g]|x<-g]>>=h|y<-g]
0?0=10;a?b=a^b
a!0=10;a!b|(e,0)<-a`divMod`b=e|1>0=10
a&0=10;a&b=mod a b

Функція є (zipWith y[(+),(-),(*),(!),(?),(&)]"+-*/^%"!!) , що поодинці займає 53 байти, де 0 - це додавання, 1 - віднімання, 2 - множення, 3 - ділення, 4 - експоненція, а 5 - модуль.

Спробуйте в Інтернеті!

Пояснення

Прийде пізніше (можливо). . . . Поки що деякі маленькі ласощі: - оператор експоненції,! - оператор поділу, а & - оператор мод.

EDIT: Частина основної маси може бути тому, що більшість (?) Інших відповідей використовують eval, якого Haskell не має без тривалого імпорту.

EDIT2: Дякую Ørjan Johansen за -31 байт (Ух!) Відключений від коду та -6 байт відключений від функції! Також змінено деякі з 11-х на 10-х для цілей послідовності.Спробуйте оновлену версію в Інтернеті!

EDIT3: Той самий чоловік, ще сімнадцять байтів! Спробуйте оновлену оновлену версію в Інтернеті!


1
Коротші !тести: e<-a`div`b,e*b==a=eабо (e,0)<-a`divMod`b=e.
Ørjan Johansen

1
Коротша функція:(zipWith(#)"+-*/^%"[(+),(-),(*),(!),(?),(&)]!!)
Ørjan Johansen

Повернення тестів + ​​"стандартний" гольф-хитрість дає last$f k:[' '|k<0||k>9]. Нарешті (можливо),[0..9] достатньо довго, щоб платити, щоб визначити його як ім'я при використанні його двічі.
Ørjan Johansen

Ні, ще один: k<-[o x y] коротший за a let.
Ørjan Johansen


2

Python 2 , 197 байт

p=input()
r=range(10)
s=' '
print p+s+s.join(map(str,r))
for i in r:print str(i)+s+s.join(eval(("s","str(j"+p+"i)")[i and(j%i==0 and'/'==p or'%'==p)or p in'**+-'and eval("j"+p+"i")in r])for j in r)

Спробуйте в Інтернеті!

Вхід: Python 2

'+' Доповнення

'-' Виділення

'*' Множення

'/' Відділ

'**' Експоненція

'%' Модуло

Python 3 , 200 байт

p=input()
r=range(10)
s=' '
print(p+s+s.join(map(str,r)))
for i in r:print(str(i)+s+s.join(eval(("s","str(j"+p+"i)")[i and(j%i==0 and'/'in p or'%'==p)or p in'**+-'and eval("j"+p+"i")in r])for j in r))

Спробуйте в Інтернеті!

Вхід: Python 3

+ Доповнення

- Виділення

* Множення

// Відділ

** Експоненція

% Модуло

Пояснення

зберігаючи range(10)змінну r, ми можемо отримати перший рядок виводу формату

operator 0 1 2 3 4 5 6 7 8 9

шляхом відображення кожного int in rstring та з'єднання списку рядків ['0','1','2','3','4','5','6','7','8','9']з простором sз pоператором

p+s+s.join(map(str,r)

З цим, для кожного iв r(діапазоні), для кожної jоцінки iта jз вашим оператором

eval("j"+p+"i")

тут може бути викинуто виняток, якщо необроблений - поділ або модуль на 0. Для обробки цього випадку ( i and(j%i==0 and'/'==p or'%'==p)) та формату виходу, описаного в заяві проблеми (результат для кожної оцінки не повинен бути від'ємним числом чи числом більше, ніж 10 - eval("j"+p+"i")in r),

i and(j%i==0 and'/'==p or'%'==p)or p in'**+-'and eval("j"+p+"i")in r

Таким чином друкуючи арифметичну таблицю!

Щасливе кодування!


Приємна відповідь Python 2. Здогадайтесь у 197 році, що робить нас рівними. Однак у мене знадобилося ще кілька спроб. Молодці. Незначна проблема. Для / в таблиці показано .0, а не цілі числа. Звичайно, це легко виправити :)
ElPedro

Вибачте, але я відкликав свою заявку, як тільки я побачив це, додамо його ще раз, коли у вас буде можливість виправити його :)
ElPedro

Дякую! Але Python 2 друкує int, а python 3 відбитки плавають, якщо ви використовуєте '/' в якості введення. Fir python 3, який ви повинні використовувати '//'. Я це чітко згадав.
Keerthana Prabhakaran

І, схоже, хтось редагує моє посилання, і те python 2 посилання було змінено на python 3. Я його повернув зараз.
Keerthana Prabhakaran

У мене була ця проблема раніше. Це тому, що у вас на одній сторінці є 2 посилання TOI. Після натискання будь-якого посилання воно відкриє перше визначення, яке воно знайде. Обведіть його, перейменувавши друге посилання на "спробуйте в Інтернеті 3" або щось інше, а також перейменуйте визначення посилання. Тоді слід добре працювати.
ElPedro

2

APL (Діалог) , 68 76 байт

Потрібно, ⎕IO←0що для багатьох систем за замовчуванням. Запрошує введення та очікує, що один символ, що представляє операнд.

t'|'=w←⎕
(w,n),n⍪⍉⍣t∘.{(⍺w⍵≡0'*'0)∨(t∧⍵≡0)∨⍺w0'÷':⍬
n∊⍨r←⍵(⍎w)⍺:r
⍬}⍨n←⍳10

Спробуйте в Інтернеті!

Значна частина коду полягає у тому, щоб обійти результати APL для ÷0та 0*0протидіяти тому, що модуль APL ( |) має свої аргументи зворотні порівняно з більшістю інших мов. Інакше було б лише 41 байт :

w←⎕
(w,n),n⍪∘.{0::⍬
÷n∊⍨r←⍵(⍎w)⍺:r}⍨n←⍳10

Спробуйте в Інтернеті!


Оце Так! і після всієї моєї важкої роботи над моєю відповіддю Python. Чесна гра.
ElPedro

1

R , 194 177 байт

-17 байт, що переходить на маніпулювання виведенням матриці

function(o){s=0:9
y=sapply(s,function(x)Reduce(o,x,init=s))
dimnames(y)=list(s,rep('',10))
y[!y%in%s|!is.finite(y)]=' '
if(o=='^')y[1]=' '
cat(substr(o,1,1),s)
print(y,quote=F)}

Спробуйте в Інтернеті!

Зміна цього підходу має деякі недоліки, а саме його неможливо оптимізувати за допомогою pryr оригінальної матриці, і це трохи незрозуміло для встановлення оригінальної матриці, але вона може бути ідеально виведена з деякими пробілами на першому рядку.

Мені все ж доводиться використовувати substrтрюк через %%мод-оператора. Буду продовжувати підстригати це, коли отримаю шанс, він все ще відчуває себе дуже незграбно, розглядаючи особливі справи.


0

PHP, 191 байт

**замість ^введення+ - / % * **

echo$k=$argn,$k=="**"?"":" ",join(" ",$d=range(0,9));foreach($d as$r){echo"\n$r";foreach($d as$c){echo" ";($k=="/"|($m=$k=="%"))&$r<1?print" ":eval("echo in_array($c$k$r,\$d)?$c$k$r:' ';");}}

Інтернет-версія обох версій

PHP, 245 байт без eval

вхід + - / % * ^

використання bcpowmod($c,1,$r) замістьbcmod($c,$r) що мені потрібен третій параметр у вході поділу. $c**1%$r==$c%$r

BC математичні функції

echo$k=$argn," ".join(" ",$d=range(0,9));foreach($d as$r){echo"\n$r";foreach($d as$c)echo" ",in_array($s=($k=="/"|($m=$k=="%"))&$r<1?-1:("bc".["+"=>add,"-"=>sub,"/"=>div,"*"=>mul,"^"=>pow,"%"=>powmod][$k])($c,$m?1:$r,$m?$r:9),$d)?round($s):" ";}

0

05AB1E , 56 55 байт

9ÝDãεðýì„/%Iåyθ_*I'mQyO_*~iðë.VD9ÝQàiïëð]«TôεN<š}®I:ðý»

Виходи без ліній і з оберненими xта y. Введення / висновок використовується +, -, *, /, m,% .

Спробуйте в Інтернеті або перевірте всі таблиці .

21 байт використовуються для виправлення крайніх випадків /0, %0і 0^0, в результаті яких 0, 0і , 1відповідно , в 05AB1E .. Ось без цієї частини ( 34 байта ):

9ÝDãεðýì.VD9ÝQàiïëð]«TôεN<š}®I:ðý»

Спробуйте в Інтернеті або спробуйте всі таблиці .

Пояснення:

9Ý                     # Push list [0,1,2,3,4,5,6,7,8,9]
  D                    # Duplicate it (for the header later on)
   ã                   # Take the cartesian product with itself (creating all pairs):
                       #  [[0,0],[0,1],[0,2],...,[9,7],[9,8],[9,9]]
ε                      # Map each pair `y` to:
 ðý                    #  Join the pairs with a space
   ì                   #  Prepend it before the (implicit) input-char 
 „/%Iå                 #   If the input is "/" or "%"
         *             #   and
      yθ_              #   The last value of the pair is exactly 0
                  ~    #  OR
          I'mQ        '#   If the input is "m"
                 *     #   and
              yO_      #   The sum of the pair is exactly 0 (thus [0,0])
 i                     #  If that is truthy:
  ð                    #   Push a space character " "
 ë                     #  Else:
  .V                   #   Execute the string as 05AB1E code
    D                  #   Duplicate the result
     9ÝQài             #   If it's in the list [0,1,2,3,4,5,6,7,8,9]:
          ï            #    Cast it to an integer to remove any trailing ".0"
                       #    (since dividing always results in a float)
         ë             #   Else:
          ð            #    Push a space character " "
]                      # Close both the if-else clauses and the map
 «                     # Merge the resulting list with the duplicated [0,1,2,3,4,5,6,7,8,9]
  Tô                   # Split the list in parts of size 10
    ε   }              # Map each list to:
     N<                #  Get the map-index + 1
       š               #  And prepend it at the front of the list
         ®I:           # Then replace the "-1" with the input-character
ðý                     # And finally join every inner list by spaces
  »                    # And join the entire string by newlines (which is output implicitly)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.