Учитывая положительное целое число, выведите истинное / ложное значение относительно того, может ли число съесть само себя.
правила
Самая левая голова, правая - хвост
Если голова больше или равна хвосту, голова съедает хвост, и новая голова становится их суммой.
Если то голова заменяется .
нельзя игнорировать, однако входной номер никогда не будет иметь начальных нулей.
Пример:
number=2632
head-2, tail-2
2632 -> 463
head-4, tail-3
463 -> 76
head-7, tail-6
76 -> 3
If only one digit remains in the end, the number can eat itself.
Если в какой-то момент голова не может съесть хвост, ответ будет ложным.
number=6724
072
False (0<2)
Тестовые случаи:
True:
[2632, 92258, 60282, 38410,3210, 2302, 2742, 8628, 6793, 1, 2, 10, 100, 55, 121]
False:
[6724, 47, 472, 60247, 33265, 79350, 83147, 93101, 57088, 69513, 62738, 54754, 23931, 7164, 5289, 3435, 3949, 8630, 5018, 6715, 340, 2194]
Это код-гольф, поэтому выигрывает самый короткий код.
code-golf
decision-problem
Ведант Кандой
источник
источник
Ответы:
JavaScript (ES6),
52 5150 байтСохранено 1 байт благодаря @tsh
Принимает ввод в виде строки. Возвращает логическое значение.
Попробуйте онлайн!
комментарии
источник
f=n=>n>[n%10]?f(-(-n[0]-n)%10+n.slice(1,-1)):!n[1]
Желе , 11 байт
Попробуйте онлайн!
Как это работает
источник
Perl 6 ,
6362 байтаПопробуйте онлайн!
Объяснение:
источник
Java (JDK) , 83 байта
Попробуйте онлайн!
кредиты
источник
/10
и%10
в цикле. Так хорошо сделано, победив ответы Python; +1 от меня. :)r+=
вr=
и?1:0
к?1:r
.r=1
r&=h<n%10?0:r;return r;
Mathematica, 62 байта
Сначала вызывает
IntegerDigits
вход, чтобы получить список его цифр, а затем повторно применяет следующее правило:Правило применяется до тех пор, пока шаблон больше не совпадает, и в этом случае либо остается только одна цифра (правда), либо голова меньше хвоста (ложь).
Вместо вызова
Length[__]==1
мы можем сохранить несколько байтов с0(__)=={0}
, умножив все элементы в списке,0
а затем сравнив их со списком{0}
.источник
Python 3 , 50 байт
Первая строка украдена из ответа Чёрной Совы Кая .
Попробуйте онлайн!
Выход через код выхода. Сбой (1) для ложных входов и завершение (0) для правдивых входов.
источник
p%10<k>q
не генерирует NameError ifp%10 >= k
?p%10<k>q
делает так же, какp%10<k and k>q
.Python 2 ,
1058281 байтПопробуйте онлайн!
Большое спасибо за огромное -23 от @ ØrjanJohansen
Спасибо @VedantKandoi (и @ ØrjanJohansen) за еще один -1
источник
for
с обратным срезом, а также делать%10
только при тестировании: попробуйте онлайн!if i[0]<i[-1]:x=0
а затемelse:....
. @ ØrjanJohansen, в твоем ответе тоже.True
случаев, но не для всехFalse
.Брахилог , 23 байта
Попробуйте онлайн!
Это 1-байтовое сохранение по сравнению с решением Fatalize . Это использует рекурсивный подход вместо итеративного
объяснение
источник
APL (Dyalog Unicode) , 33 байта SBCS
Функция анонимного неявного префикса, принимающая строку в качестве аргумента.
Попробуйте онлайн!
⍎¨
оценивать каждый символ (это дает нам список цифр){
…}
Примените к этому следующее «dfn»;⍵
это аргумент (список цифр):⌽⍵
изменить аргумент⊃
выбрать первый элемент (это хвост)t←
назначитьt
(для т аила)⍵<
для каждой из исходных цифр посмотрите, не меньше ли это⊃
выберите первое истинное / ложное:
если так:0
вернуть ложь⋄
тогда:3::
если с этого момента происходит ошибка индекса (вне пределов):1
вернуть истину¯1↓⍵
сбросить последнюю цифру⊢
привести к этому (отделяет1
и¯1
поэтому они не будут формировать один массив)t+@1
добавить хвост к первой цифре (голова)10|
мод-10∇
рекурсиюКак только мы нажмем одну цифру,
¯1↓
этот список@1
будет пустым, что приведет к ошибке индекса, поскольку первая цифра отсутствует, в результате чего функция вернет true.источник
Python 3 , 77 байт
Попробуйте онлайн!
И мое старое решение с рекурсивным подходом
Python 3 , 90 байт
Попробуйте онлайн!
Принимает ввод в виде строки.
источник
Брахилог , 24 байта
Попробуйте онлайн!
Мне следует изменить
ⁱ
поведение по умолчанию так, чтобы оно повторялось неизвестное количество раз (в настоящее время оно повторяется 1 раз по умолчанию, что совершенно бесполезно). Мне тогда не понадобится[…];I[…]⁾
, экономя 3 байтаобъяснение
Эта программа содержит некрасивую вилку внутри вилки. Существует также некоторая сантехника, необходимая для работы со списками цифр, а не чисел (потому что, если мы удалим голову и хвост, у
76
нас останется0
, что не сработает вопреки тому, с чем[7,6]
мы в итоге окажемся[]
).источник
,
я мог бы удалить 1 байт. Попробуйте онлайн!Haskell,
706460 байтВвод принимается в виде строки.
Попробуйте онлайн!
Изменить: -6 байт, используя хитрость @ Laikoni в использовании
||
вместо отдельных охранников. Еще 4 байта благодаря @Laikoni.источник
read[l b]
может быть толькоread b
потому, что в любом случае вы смотрите только на последнюю цифру. Экономит еще 4 байта благодаря встроенной функцииlast
: попробуйте онлайн!Perl 5 , 64 байта
Попробуйте онлайн!
источник
Python 2 ,
7567 байтПопробуйте онлайн!
Рекурсивный лямбда-подход. Принимает ввод в виде строки. Большое спасибо Денису за сохранение 8 байт!
источник
Haskell ,
6964 байтаПопробуйте онлайн! Пример использования:
f 2632
доходностьTrue
.Изменить: -5 байт, потому что
mod (h + mod n 10) 10 = mod (h + n) 10
источник
||
, которое помогло мне сократить мой ответ тоже. Благодарность!Рубин, 139 байт
Попробуйте онлайн!(имеет дополнительный код для обработки ввода, так как это функция)
Ungolfed код:
источник
Сетчатка 0.8.2 , 42 байта
Попробуйте онлайн! Ссылка включает тестовые случаи. Объяснение:
Преобразовать цифры в одинарные и вставить разделители.
Если последняя цифра не больше первой, сложите их вместе.
Уменьшите по модулю 10, если это необходимо.
Повторяйте, пока последняя цифра не станет больше первой или пока не останется только одна цифра.
Проверьте, остается ли только одна цифра.
источник
05AB1E ,
262524 байтаВозможно, можно играть в гольф немного больше. Это кажется слишком длинным, но, возможно, проблема в том, что код сложнее, чем я думал раньше.
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
C ++ (gcc) , 144 байта
Попробуйте онлайн!
В первый раз я пытаюсь что-то вроде этого, поэтому, если я отформатировал что-то неправильно, пожалуйста, дайте мне знать Я не на 100% уверен в правилах для таких вещей, как использование пространства имен для удаления 5 байтов "std ::", поэтому я оставил это.
Ungolfed:
источник
#include
заявления. Тем не менее, я бы предложил программирование в поддиалекте C ++ средств std lib с#include "std_lib_facilities.h"
prepended, что также делает ausing namespace std;
. Этот заголовок был написан автором языка назад (последняя версия - 2010) для студентов, плохо знакомых с C ++.#import<string>
. Попробуйте онлайн!#!/usr/bin/sh
newlinegcc -include "std_lib_facilities.h" $@
- если я найду курс C ++, который предоставляет этот сценарий оболочки, будет ли это учитываться?-include iostream
это действительно 144 байта.C #, 114 байт
Попробуйте онлайн
источник
C (gcc) (с string.h) ,
110108 байтПопробуйте онлайн!
Все еще относительно новый для PPCG, поэтому правильный синтаксис для связи библиотек как нового языка мне чужд. Также обратите внимание, что функция возвращает 0 или 1 для false / true, и для печати, которая приводит к stdout, требуется stdio. Если мы педантичны и упражнение требует результата, язык требует stdio .
Концептуально похож на ответ @ BenH, но в C, так что слава, где они должны (Добро пожаловать в PPCG, кстати), но с использованием рекурсии. Он также использует арифметику указателя массива, потому что грязный код короче, чем чистый код.
Функция является хвостовой рекурсивной, с условиями выхода, если первое число не может скушать последнее или длина равна 1, возвращая соответственно false или true. Эти значения можно найти, разыменовав указатель на C-String (который дает символ) в начале и конце строки, и выполнив сравнение с ними. Арифметика указателя делается, чтобы найти конец строки. наконец, последний символ «стирается», заменяя его нулевым терминатором (0).
Возможно, что арифметика модуля может быть сокращена на один или два байта, но я уже нуждаюсь в душе после этой манипуляции указателем.
Безголовая версия здесь
Обновление: сохранил два байта, заменив c == 1 на! C. По сути, это c == 0. Он будет работать дополнительное время и без необходимости удваивает себя перед удалением, но сохраняет два байта. Побочным эффектом является строка нулевой или нулевой длины, которая не вызовет бесконечной рекурсии (хотя мы не должны получать нулевые строки, так как в упражнении указаны положительные целые числа).
источник
gcc
- хотя предупреждения будут сгенерированы,gcc
вы с радостью скомпилируете ваш код без#include
s. Кроме того, вы можете сохранить 4 байта с помощью-DR=return
. Наконец, в вашем тестовом коде\0
s не нужны, так как строка буквально уже включает их неявно.b=case1?res1:case2?res2:res_else;
то же самое, что иif(case1)return res1;if(case2)return res2;return res_else;
c
: вы можете определить, равна ли строка нулевой длинеhead-tail
.Powershell, 89 байт
Важный! Скрипт вызывает себя рекурсивно. Так что сохраните скрипт как
g.ps1
файл в текущем каталоге. Также вы можете вызвать переменную блока скрипта вместо файла скрипта (см. Тестовый скрипт ниже). Это звонки имеет одинаковую длину.Примечание 1: скрипт использует ленивую оценку логических операторов
-or
и-and
. Если"$args"-notmatch'(.)(.*)(.)'
есть,True
то правильное подвыражение-or
не оценивается. Кроме того, если($m=$Matches).1-ge$m.3
есть,False
то правильное подвыражение также-and
не оценивается. Поэтому мы избегаем бесконечной рекурсии.Примечание 2: Регулярное выражение
'(.)(.*)(.)'
не содержит начальный и конечный якоря, потому что выражение(.*)
по умолчанию является жадным.Тестовый скрипт
Выход:
Powershell, 90 байт
Нет рекурсии. Отсутствие зависимости имени файла и имени блока скриптов.
Powershell неявно преобразует правый операнд в тип левого операнда. Поэтому
$s-ge$s%10
вычисляет правый операнд$s%10
какinteger
и сравнивает его какstring
тип левого операндаstring
. И2+$s[0]+$s
преобразует символ$s[0]
и строку$s
вinteger
потому что левый операнд2
является целым числом.$s|% S*g 1($s.Length-2)
это ярлык для$s.Substring(1,($s.Length-2))
источник
C # (интерактивный компилятор Visual C #) , 69 байт
Попробуйте онлайн!
Успех или неудача определяется наличием или отсутствием исключения . Ввод в форме строки.
Менее гольф ...
Есть пара дополнительных байтов, чтобы иметь дело с преобразованием между символами и цифрами, но в целом это не сильно повлияло на размер.
источник
Perl 5
-pF
, 53 байтаПопробуйте онлайн!
источник
Брахилог , 18 байт
Попробуйте онлайн!
Принимает три байта прочь решений Fatalize просто в силе недетерминистического superscriptless
ⁱ
существующего в настоящее время, но теряет еще три, делая неопределенно Jelly вдохновленных вещей ,z₁
чтобы избежать использованияc
,g
или дажеh
. (Также вдохновленный попыткой и неудачей использовать другую новую функцию:ʰ
метапредикат.)источник
PowerShell ,
9491 байтПопробуйте онлайн!
Тестовый скрипт
Ungolfed код:
источник
$n[0]
своеfor
заявление - достаточно просто проверить$n
.-6
вместо этого,-96
потому что достаточноreturn
и сохранить 7 байтовparam($n)
илиfunction f($n)
.["1","2","3"]
неверный ввод, но"123"
есть. если у @VedantKandoi есть проблема с этим, я определенно могу изменить это!