Вызов
Учитывая целое число, делимое на 9 и одну пропущенную цифру, найдите пропущенную цифру.
Недостающая цифра может быть представлена любым символом, кроме цифр 0-9, если она соответствует.
Если пропущенная цифра может быть 0 или 9, выведите что-нибудь для обозначения этого.
Предположим, что пользователь достаточно умен, чтобы поставить только одну пропущенную цифру, один номер и т. Д.
Тестовые случаи
В тестовых случаях отсутствующая цифра представлена знаком вопроса
123? -> 3
?999 -> 0 or 9
?0023 -> 4
000?1 -> 8
code-golf
math
arithmetic
NK1406
источник
источник
0
? А как насчет[0, 9]
(массив или список из 2 чисел)??
возможный вход?Ответы:
Python , 21 байт
Попробуйте онлайн!
Я имел обыкновение
I
представлять отсутствующую цифру.источник
Алиса , 12 байт
Попробуйте онлайн!
Выводится,
0
если результат может быть 0 или 9.объяснение
источник
&
Может быть удалено, поскольку режим кардинального интерпретирует исходный ввод как в большинстве 2 целых чисел.JavaScript (ES6), 40 байт
Выходы 9, если могут быть 0 или 9.
источник
f=
; анонимные функции вполне допустимы.Japt, 7 байт
Попробовал несколько решений, но самое короткое было похоже на большинство других, за исключением того, что нам не нужно заменять
?
в начале.Может принимать любой нечисловой символ в качестве отсутствующей цифры. Выходы ,
0
когда решение может быть то , что или9
.Попытайся
объяснение
Неявный ввод строки
U
.¬
разбивает на массив отдельных символов,x
уменьшает массив путем добавления игнорирования любых нечисловых элементов,*J
умножает каждый элемент на -1 иu9
получает положительный модуль результата.источник
JavaScript (ES6), 18 байт
Ожидается
+
как отсутствующая цифра. Возвращает9
на 0 или 9 .Контрольные примеры
Показать фрагмент кода
источник
05AB1E ,
76 байтовВывод
0
означает, что результатом может быть 0 или 9 .Попробуйте онлайн! или как тестовый набор
объяснение
источник
Python 2 ,
444135 байт-6 байт благодаря RiaD
Попробуйте онлайн!
Пользователи
]
за отсутствующей цифрой.Выводится,
0
если пропущенная цифра может быть 0 или 9.источник
0
9%9 == 0
Pyth,
97 байтИспользует пробел в качестве разделителя и возвращает 0, если результатом может быть 0 или 9.
Попробуйте онлайн
объяснение
источник
Пролог (SWI) , 59 байт
Попробуйте онлайн!
Yay для логического программирования!
объяснение
Сначала мы создаем предикат
*
, который сохраняется при применении к нулю и пустому списку. Наш предикат также сохраняется, когда начало списка находится между 0 и 9, и когда мы добавляем ведущую цифру мод 9, предикат удерживается.Затем мы определяем
+
этот предикат0
как первый аргумент. То есть мы хотим, чтобы цифровая сумма была кратна 9.Пролог выполняет всю основную работу по поиску решений для нас.
источник
Befunge-93 , 16 байт
Попробуйте онлайн!
Однолинейная версия ответа Джеймса Холдернесса «Befunge», в котором удается сбрить два байта. Это по существу сжимает код до одной строки, меняет направление и использует тот факт, что Befunge не пропускает конец строки. Он предложил мне опубликовать отдельный ответ с объяснением. Код принимает * как представление отсутствующей цифры и выводит 9 для 0 или 9.
Как это работает
*
(ASCII-значение 42) было выбрано в качестве пропущенного символа, поскольку оно противодействует начальному значению цифры, 3.источник
LaTeX, много байтов (
1000628614)LaTeX, неразборчиво (
348334 байта)LaTeX, 132 байта
В этом коде допускается только пробел в качестве неизвестной цифры.
источник
J ,
1412 байт-2 байта благодаря @BolceBussiere
Я, честно говоря, не знаю, почему
"."0
интерпретирует?
как 0, но так поступает с моим переводчиком и с TIO, поэтому я не собираюсь подвергать это сомнению. (Обновление: см. Комментарии для объяснения почему).Этот подход очень просто берет сумму цифр, отрицает ее, вычитая из 9, и берет ее по модулю 9.
Попробуйте онлайн!
источник
Желе ,
1196 байтобъяснение
Выход 0 означает, что результатом может быть 0 или 9.
Попробуйте онлайн!
Сохранено 2 байта благодаря г-ну Xcoder . При использовании Every quick (
€
) во время оценки разбиение числа на цифры было излишним.Сохранено 3 байта благодаря Денису . Можно поразрядно ИЛИ вводить с 0 вместо ручного анализа ввода как числа, удаляя начальные нули и не цифры.
источник
|0
работает вместоfØDV€
.Swift , 51 байт
Попробуйте онлайн!
источник
Befunge-93 (PyFunge) ,
2221 байтЯ понял, что мне не нужно использовать
?
для представления отсутствующей цифры, поэтому я использовал одну, кратную 9, после вычитания 48:x
это позволило мне выйти из игры
3+
, но сэкономило только 1 байт из-за длины первая строка перед условной :(Порт моего ответа Befunge-98: еще
5 байтов, чтобы проверить, достигли ли мы EOF, еще
1 байт, чтобы нажать 48 (
"0"
против'0
), еще1 байт, чтобы напечатать ответ
.@
,и еще 1 байт, потому что второй строка содержит пробел
в общей сложности еще 8 байтов.
Попробуйте онлайн!
Выводится,
0
если пропущенная цифра может быть 0 или 9.Это работает только в интерпретаторе PyFunge по причинам, объясненным ниже.
объяснение
Большая часть этого объяснения скопирована из моего объяснения Befunge-98 , так как эта программа очень похожа на эту. бесстыдная вилка
В первой строке программы мы суммируем цифры, включая x, который рассматривается как 72 из-за значения ASCII. Тем не менее, сумма будет такой же, как только мы изменим на 9, так что это не имеет значения.
Если бы мы просто изменили на 9, мы остались бы с неправильной цифрой, потому что мы хотим
9 - (sum % 9)
. Однако, мы можем сделать лучше, чем9\-
, что бы вычесть остаток из 9: если мы сделаем сумму отрицательной перед моддингом на 9, мы получим положительный результат, эквивалентный9 - (sum % 9)
некоторым интерпретаторам. Это то, что требует от нас использования интерпретаторов PyFunge как для Befunge 93, так и для 98, поскольку это единственный TIO, который делает это. Другие дают нам значение между -8 и 8 вместо 0 и 8источник
Befunge-98 (PyFunge) ,
1513 байтЯ понял, что мне не нужно использовать
?
для представления отсутствующей цифры, поэтому я использовал одну, кратную 9, после вычитания 48:x
Это позволило мне играть в гольф
3+
.Попробуйте онлайн!
Используется
x
как отсутствующая цифра, потому что ее значение ASCII делится на 9 после вычитания 48 (и это хорошо, потому что его обычно используют как переменную в математике).Выходы через код выхода (потому что
q
на один байт короче.@
)Выходы,
0
если пропущенная цифра может быть 0 или 9.Это работает только в интерпретаторе PyFunge по причинам, объясненным ниже.
объяснение
В первой строке программы мы суммируем цифры, включая
x
, который рассматривается как 72 из-за его значения ASCII. Тем не менее, сумма будет такой же, как только мы изменим на 9, так что это не имеет значения.Если бы мы просто изменили на 9, мы остались бы с неправильной цифрой, потому что мы хотим
9 - (sum % 9)
. Однако, мы можем сделать лучше, чем9\-
, что бы вычесть остаток из 9: если мы сделаем сумму отрицательной перед моддингом на 9, мы получим положительный результат, эквивалентный9 - (sum % 9)
некоторым интерпретаторам . Это то, что требует от нас использования интерпретаторов PyFunge как для Befunge 93, так и для 98, поскольку это единственный TIO, который делает это. Другие дают нам значение между -8 и 8 вместо 0 и 8.источник
Рубин , 22 байта
Использует
'
(подойдет любой символ, расстояние до0
которого делится на «0», включая0
самого себя).Выход
0
означает либо0
или9
.Попробуйте онлайн!
объяснение
источник
Рубин ,
46, 41 байт-5 благодаря @Unihedron
Попробуйте онлайн!
источник
chars
вместо.split(//)
2. мы'<'
можем заменить на?<
chars
Befunge-93,
28271918 байтНужно отдать должное Mistah Figgins , чей ответ PyFunge показал мне, что вам не нужна специальная проверка на отсутствие символа, если вы просто убедитесь, что значение ASCII кратно девяти.
Дополнительная благодарность Джо Кингу, который показал, что вам не нужно полностью преобразовывать символы в их числовые эквиваленты, и вы можете просто вычесть 3, чтобы получить значение, относящееся к основанию 9 (ASCII
0
минус 3 равно 45, кратно 9) ,Попробуйте онлайн!
Чтобы это работало, вы должны использовать символ
*
для пропущенной цифры (есть и другие, которые также могут работать, но это лучше).Выводится,
9
если пропущенная цифра может быть 0 или 9.объяснение
По сути, мы рассчитываем сумму всех цифр плюс 45 за цифру (которая в конечном итоге будет отменена, когда мы модифицируем с 9). Эта сумма вычитается из 3 (наша начальная сумма), а дополнительные 39 вычитаются из отсутствующей цифры (ASCII
*
минус три). Опять же, что 3 минус 39 кратно 9, так что мы отменяем, когда мы мод с 9.Итак, в конце мы вычисляем отрицательную сумму всех цифр, мод 9, плюс 9, т.е.
И это дает нам недостающую цифру.
источник
Befunge-98 (PyFunge) , 8 байт
Попробуйте онлайн!
Выходы через код выхода. Как и в случае с ответом Mistah Figgin , он работает только с Pyfunge, где отрицательное число mod 9 становится положительным. Использует х в качестве отсутствующей цифры.
источник
PowerShell , 40 байт
Попробуйте онлайн! или проверить все контрольные примеры
Принимает участие как
'123x'
в$a
. Создаст диапазон0
для9
и использованияWhere-Object
(здесь сокращенно|?
) , чтобы вытащить эти целые числа , которые соответствуют пункту. Предложение принимает$a
, выполняет регулярное выражение-replace
для заменыx
текущей цифры$_
и получает мод 9 с%9
. Таким образом, если 9 делится поровну, это будет ноль. Мы берем булево-не-его значение, которое превращает нули в истинность, а все остальное ложно, так что удовлетворяет предложению Where-Object. Эти результаты остаются в конвейере, а вывод неявным.источник
Haskell , 35 байт
Попробуйте онлайн!
источник
Сетчатка ,
353425 байтЕсли это
?
возможно0 or 9
, результат отображается как9
.Попробуйте онлайн
объяснение
источник
\d
можно изменить на справедливую,.
а следующую - на$*
.?
когда написал это.Perl 5 , 23 байта
Попробуйте онлайн!
Не важно, какой символ обозначает пропущенную цифру, если она не является цифрой.
источник
Tcl, 53 байта
Как и в случае с другими ответами, это делается короче, если не сказать явно «0 или 9».
Вместо этого результат «9» означает либо 0, либо 9.
Попробуйте онлайн!
объяснение
Это работает довольно просто. Он использует регулярное выражение для:
вопросительные знакибез цифрЗатем он оценивает 9 - (sum_of_digits mod 9), чтобы получить окончательное значение в 1..9, которое оно затем
puts
.Ведущий 0 (в
0$argv
) требуется только в том случае, если вопросительный знак стоит первым на входе; ведущий знак плюс в преобразованной последовательности не является проблемой дляexpr
.источник
Pyth , 8 байт
Попробуйте онлайн!
Использует
I
вместо?
.источник
APL (Dyalog) , 13 байт
Попробуйте онлайн!
Недостающая цифра есть
⍬
.источник
брейкфук , 50 байт
Попробуйте онлайн!
Печатает 9 для 0 или 9. Отсутствующий символ представлен:
Как это работает
Пропущенный символ должен быть символом с модом 9 4, +3, потому что мы вычитаем 3 из нормальных цифр и +1 для инициализации всего как 1.
В качестве примечания, в коде много неэффективности ради игры в гольф, поскольку каждая цифра будет сбрасывать итоговые 5 раз каждый, а не только один раз, если я вычел 48 вместо 3.
источник
> <> ,
3533252115 байтВывод
0
означает, что результатом может быть 0 или 9 .Попробуйте онлайн!
Сохраненные 6 байт благодаря Джо Кингу , используя
'
для представления недостающих цифр.источник
'
символ вместо?
Java 8,
3634 байтаВозвращает,
9
когда оба0
и9
действительны.Объяснение:
Попробуйте онлайн.
источник