Вызов:
Выведите «целочисленные цифры» одной из следующих шести арифметических таблиц на основе входных данных:
- дополнение ( +
);
- вычитание ( -
);
- умножение ( *
);
- деление ( /
);
- возведение в степень ( ^
);
- Операция по модулю ( %
).
Правила:
- Что я определяю как «целые цифры»: Каждый результат арифметического операнда , который является точно один из следующих вариантов :
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
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
в том же ответе).Ответы:
Japt , 45 байт
Сотрудничал с @ETHproductions
Запустите его онлайн!
Принимает ввод как:
"+"
для дополнения"-"
для вычитания"*"
для умножения"/"
для деления"p"
для возведения в степень"%"
по модулюПояснение (с расширенными ярлыками):
источник
JavaScript (ES7), 128 байт
Специальный корпус
0^0
обошелся мне в 8 байт.источник
^
), но спасибо!Язык сценариев работы Flashpoint ,
343333303301 байтЗвоните с:
Ungolfed:
Выход:
оператор +
оператор -
оператор *
оператор /
оператор ^
оператор%
источник
Python 2 ,
240231226224203202200197 байтовПопробуйте онлайн!
Принимает ввод как "+", "-", "*", "/", "^" или "%".
Правки
-9-16 с благодарностью @FelipeNardiBatista за отличные советыДо 221 с большей помощью от @FelipeNardiBatista, а затем до 203 с проигрышем
and E(c)==int(E(c))
. Если мы проверяем , еслиE(c)
вrange(10)
это всегда будет целое число , если оно есть. Нет необходимости в повторной проверке.Это имеет идти ниже 200 без перехода на Python 3 и объявления
P=print
. Есть идеи? Я всегда рад учиться.Yesss! Я знал, что это можно сделать. 197. Время спать. Я провел достаточно времени на этом. Спасибо за интересный вызов @KevinCruijssen.
источник
('**',i)[i<'^']
и(i<'^'or x>0 or b>0)
сохраняет 4 байтаa=i=input()
сfor z in R:a+=' '+`z`
некоторыми дополнительными сохраненными байтамиa=i+' 0 1 2 3 4 5 6 7 8 9'
1.
против1.0
иE(c)in R
против-1<E(c)<10
2 байтаx+b>0
противx>0 or b>0
и"b%s(x*1.)"%('**',i)[i<'^']
против"b"+('**',i)[i<'^']+"(x*1.)"
(
,)
в вашем соединении на 223 байтаMathematica, 150 байт
Определяет унарную функцию,
±
принимающую один из символов в+-*/^%
качестве входных данныхi
(например,±"^"
) и возвращающуюGrid
объект, который выглядит точно так же, как последний результат в OP.<|Thread[Characters@"+-*/^%"->{Plus,#-#2&,1##&,#/#2&,Power,Mod}]|>
#-#2&,1##&,#/#2&
привязывает к каждому возможному входному символу соответствующую (листируемую) двоичную функцию (где есть версии для гольфаSubtract,Times,Divide
); поэтому<|...|>[i][r,#]
вычисляет двоичную операцию со всеми возможными первыми аргументами и#
в качестве второго аргумента.If[0<=#<=9,#]/._@__->""&
преобразует каждый результат в aNull
или,""
если это не однозначный результат (/._@__->""
необходимо, потому что некоторые результаты, например,1/0
не могут быть обработаны неравенствами0<=#<=9
). Наконец, мы добавляем различные верхние и нижние колонтитулы и отображаем ответ.источник
0^0
. Mathematica ничего не выводит по умолчанию для этого крайнего случая?0^0
вIndeterminate
, который дает нам несчастный невычисленного результат вIf[0<=Indeterminate<=9, Indeterminate]
середине вычисления; но/._@__->""
это правило, которое принимает любую неоцененную функцию и ее аргументы и заменяет ее невидимой строкой.#^0=1
и0^#
= 0`0^0
. Хорошо сейчас и удобно для этой задачи. :) Кстати, ваша ссылка не работает.Я получаю сообщение об ошибке, что у меня нет разрешения на доступ к нему.±"^"
.Python 3,
343335363362 байтаСамое печальное в этом то, что ответ Java бьет меня ... Я буду играть в гольф утром.
ReplIT
-8 байтов, переключаясь на понимание списка, а не двойной цикл
+28 байтов, чтобы избежать крайнего случая
0 ^ 0
. -.--1 байт, изменив
==0
на<1
благодаря @StewieGriffinисточник
0-9
. Кстати, ммм ... Я заметил одну ошибку в вашем Repl. В настоящее время выводит**
вместо^
возведения в степень. (Кроме того, вам разрешено вводить**
, но не выводить его в таблицу результатов. В настоящее время у вас все наоборот.)Java 7,
312305 байтНе использует горизонтальные / вертикальные линии, а символы соответствуют отображаемым в challenge-examples (
+-*/^%
).В
0-5
качестве входных данных используется индекс для шести математических операндов.-7 байт благодаря @Frozn .
Объяснение:
Тестовый код:
Попробуй это здесь.
источник
b
какdouble
наp
и избавитьсяr
путем присвоения значения цепного тройным кb
.Haskell,
230199182 +534746 + 1 байт разделителя =284247232229 байтФункция
(zipWith y[(+),(-),(*),(!),(?),(&)]"+-*/^%"!!)
, которая занимает 53 байта, где 0 - сложение, 1 - вычитание, 2 - умножение, 3 - деление, 4 - возведение в степень, а 5 - по модулю.Попробуйте онлайн!
объяснение
Придет позже (возможно). , , , А пока немного лакомых кусочков: является оператором возведения в степень,! является оператором деления, а & является оператором мод.
РЕДАКТИРОВАТЬ: Часть объема может быть потому, что большинство (?) Из других ответов используют eval, который Haskell не имеет без длительного импорта.
РЕДАКТИРОВАТЬ 2: Спасибо Орджан Йохансен за -31 байт (Wow!) От кода и -6 байт от функции! Также изменил некоторые из 11 с на 10 с целью обеспечения согласованности. Попробуйте обновленную версию онлайн!
EDIT3: тот же человек, еще семнадцать байтов! Попробуйте обновленную, обновленную версию онлайн!
источник
!
тесты:e<-a`div`b,e*b==a=e
или(e,0)<-a`divMod`b=e
.(zipWith(#)"+-*/^%"[(+),(-),(*),(!),(?),(&)]!!)
last$f k:[' '|k<0||k>9]
. Наконец, (возможно),[0..9]
достаточно долго, чтобы платить, чтобы определить его как имя при использовании его дважды.k<-[o x y]
короче чемlet
.Python 2 , 197 байт
Попробуйте онлайн!
Вход: Python 2
'+'
прибавление'-'
Sbtraction'*'
умножение'/'
разделение'**'
Возведение'%'
МодульноеPython 3 , 200 байт
Попробуйте онлайн!
Вход: Python 3
+
прибавление-
Sbtraction*
умножение//
разделение**
Возведение%
Модульноеобъяснение
сохраняя
range(10)
переменнуюr
, мы можем получить первую строку вывода форматасопоставляя каждое int в
r
строку и соединяя список строк['0','1','2','3','4','5','6','7','8','9']
с пробеломs
сp
операторомС этим, для каждого
i
вr
(диапазоне), для каждойj
оценкиi
иj
с вашим операторомздесь исключение может быть выдано, если не обработано - деление или модуль на 0. Чтобы обработать этот случай (
i and(j%i==0 and'/'==p or'%'==p)
) и формат вывода, описанный в формулировке проблемы (результат для каждой оценки не должен быть отрицательным числом или числом, большим чем 10 -eval("j"+p+"i")in r
),Таким образом печатая арифметическую таблицу!
Удачного кодирования!
источник
APL (Dyalog) ,
6876 байтТребуется
⎕IO←0
по умолчанию во многих системах. Запрашивает ввод и ожидает один символ, представляющий операнд.Попробуйте онлайн!
Большая часть кода состоит в том, чтобы обойти результаты этого APL
÷0
и0*0
и противодействовать тому, что|
аргумент APL modulo ( ) имеет обратные аргументы по сравнению с большинством других языков. В противном случае было бы только 41 байт :Попробуйте онлайн!
источник
р ,
194177 байтПереключение на 17 байт для манипулирования выходом матрицы
Попробуйте онлайн!
Переход на этот подход имеет некоторые недостатки, а именно: его нельзя оптимизировать с помощью
pryr
и немного неудобно для настройки исходной матрицы, но он может быть идеально выведен с некоторыми концевыми пробелами в первой строке.Я все еще должен использовать
substr
трюк из-за%%
оператора мод. Буду продолжать урезать это, когда у меня будет шанс, это все еще очень неуклюже, имея дело с особыми случаями.источник
PHP, 191 байт
**
вместо^
ввода+ - / % * **
Онлайн версия обеих версий
PHP, 245 байт без оценки
вход
+ - / % * ^
использовать
bcpowmod($c,1,$r)
вместо того,bcmod($c,$r)
потому что мне нужен третий параметр во входных данных деления.$c**1%$r==$c%$r
BC Math Functions
источник
05AB1E ,
5655 байтВыходы без линий и с обратными
x
иy
. Ввод / вывод используется+
,-
,*
,/
,m
,%
.Попробуйте онлайн или проверьте все таблицы .
21 байт используются для исправления крайних случаев
/0
,%0
и0^0
, в результате которых0
,0
и ,1
соответственно , в 05AB1E .. Вот без этой части ( 34 байта ):Попробуйте онлайн или попробуйте все таблицы .
Объяснение:
источник