Целые цифры арифметических таблиц

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

Правила соревнований:

  • Конечные новые строки и конечные пробелы не являются обязательными
  • Горизонтальные и вертикальные линии в тестовых случаях являются необязательными. Я только добавил их для лучшей читаемости.
  • Пробелы между каждым результатом НЕ являются необязательными.
  • Символ для арифметики может быть другим, если ясно, какой это. Т.е. ×или ·вместо *умножения; ÷вместо /деления; и т.д.
    И пока это один символ, извините за Python **.
  • Формат ввода гибкий. Вы можете выбрать индекс от 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или разделяют / mod 0, но вам придется обойти это. Что касается вашего второго вопроса: Да, конечно, пока цифры находятся в тех же столбцах / строках, вы можете использовать столько пробелов, сколько захотите.
Кевин Круйссен,
Важен ли порядок аргументов для некоммутативных операций?
Адам
@ Адам Итак вы имеете в виду вы будете выводить сетку для y-x, y/x, y^xи y%xвместо того x-y, x/y, x^yи x%y? Хм, я думаю, это может быть хорошо. Я отредактирую это в ответе; до тех пор, пока вы будете последовательны для всех шести из них (так нет y-xи x/yв том же ответе).
Кевин Круйссен

Ответы:

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 байт.

Нил
источник
Очень круто, как вы добавили дополнительные операнды, такие как OR и AND, в свой тестовый фрагмент. +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)

Ungolfed:

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
}

Выход:

оператор +

оператор -

оператор *

оператор /

оператор ^

оператор%

Steadybox
источник
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.

ElPedro
источник
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.против 1.0и E(c)in Rпротив -1<E(c)<102 байта
Фелипе Nardi Батисты
1
x+b>0против x>0 or b>0и "b%s(x*1.)"%('**',i)[i<'^']против"b"+('**',i)[i<'^']+"(x*1.)"
Фелипе Нарди Батиста
1
есть один набор дополнительных паренов (, )в вашем соединении на 223 байта
Фелипе Нарди Батиста,
4

Mathematica, 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(например, ±"^") и возвращающую Gridобъект, который выглядит точно так же, как последний результат в OP.

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

Python 3, 343 335 363 362 байта

Самое печальное в этом то, что ответ Java бьет меня ... Я буду играть в гольф утром.

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]))

ReplIT

-8 байтов, переключаясь на понимание списка, а не двойной цикл
+28 байтов, чтобы избежать крайнего случая 0 ^ 0. -.-
-1 байт, изменив ==0на <1благодаря @StewieGriffin

HyperNeutrino
источник
« Самое печальное в этом то, что ответ Java бьет меня ... » Эта часть заставила меня хихикнуть. XD Мне нравится, как вы проверяете длину числа, чтобы определить, находится ли оно в диапазоне 0-9. Кстати, ммм ... Я заметил одну ошибку в вашем Repl. В настоящее время выводит **вместо ^возведения в степень. (Кроме того, вам разрешено вводить **, но не выводить его в таблицу результатов. В настоящее время у вас все наоборот.)
Кевин Круйссен,
1
@KevinCruijssen Упс. Исправлено успешно, без изменения количества байтов. Спасибо что подметил это!
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;}

Не использует горизонтальные / вертикальные линии, а символы соответствуют отображаемым в challenge-examples ( +-*/^%).
В 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.
Frozn
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 - по модулю.

Попробуйте онлайн!

объяснение

Придет позже (возможно). , , , А пока немного лакомых кусочков: является оператором возведения в степень,! является оператором деления, а & является оператором мод.

РЕДАКТИРОВАТЬ: Часть объема может быть потому, что большинство (?) Из других ответов используют eval, который Haskell не имеет без длительного импорта.

РЕДАКТИРОВАТЬ 2: Спасибо Орджан Йохансен за -31 байт (Wow!) От кода и -6 байт от функции! Также изменил некоторые из 11 с на 10 с целью обеспечения согласованности. Попробуйте обновленную версию онлайн!

EDIT3: тот же человек, еще семнадцать байтов! Попробуйте обновленную, обновленную версию онлайн!

Общее отображаемое имя
источник
1
Более короткие !тесты: e<-a`div`b,e*b==a=eили (e,0)<-a`divMod`b=e.
Орджан Йохансен,
1
Более короткая функция:(zipWith(#)"+-*/^%"[(+),(-),(*),(!),(?),(&)]!!)
Орджан Йохансен
Обратные тесты + "стандартный" трюк в гольф дает last$f k:[' '|k<0||k>9]. Наконец, (возможно), [0..9]достаточно долго, чтобы платить, чтобы определить его как имя при использовании его дважды.
Орджан Йохансен,
Нет, еще один: k<-[o x y]короче чем let.
Орджан Йохансен,
Одним словом: вау! :)
Общее отображаемое имя
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

'+' прибавление

'-' Sbtraction

'*' умножение

'/' разделение

'**' Возведение

'%' Модульное

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

+ прибавление

- Sbtraction

* умножение

// разделение

** Возведение

% Модульное

объяснение

сохраняя range(10)переменную r, мы можем получить первую строку вывода формата

operator 0 1 2 3 4 5 6 7 8 9

сопоставляя каждое int в rстроку и соединяя список строк ['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
Извините, но я отказался от моего возражения, как только увидел, добавлю его снова, как только у вас
появится
Спасибо! Но Python 2 печатает int и python 3 печатает float, если вы используете '/' в качестве ввода. Для Python 3 вы должны использовать '//'. Я ясно упомянул это.
Киртана Прабхакаран
И кажется, что кто-то редактирует мою ссылку, и ссылка на python 2 была изменена на python 3. Я отменил ее сейчас.
Keerthana Прабхакаран
У меня была эта проблема раньше. Это потому, что у вас есть 2 ссылки TOI на одной странице. При нажатии на любую ссылку откроется первое найденное определение ссылки. Чтобы обойти это, переименуйте вторую ссылку, чтобы «попробовать онлайн 3» или что-то еще, а также переименуйте определение ссылки. Должно работать нормально тогда.
ElPedro
2

APL (Dyalog) , 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 modulo ( ) имеет обратные аргументы по сравнению с большинством других языков. В противном случае было бы только 41 байт :

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

Попробуйте онлайн!

Адам
источник
Вот это да! и после всей моей тяжелой работы над моим ответом на Python. Справедливо.
ElPedro
1

р , 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трюк из-за %%оператора мод. Буду продолжать урезать это, когда у меня будет шанс, это все еще очень неуклюже, имея дело с особыми случаями.

CriminallyVulgar
источник
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 байт без оценки

вход + - / % * ^

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

BC Math Functions

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)
Кевин Круйссен
источник