Так как числа и последовательности Фибоначчи кажутся популярной темой для гольф-кода, я подумал, что это может быть забавная задача - кодировать гольф с числами Кейта .
Поэтому я предлагаю задачу, состоящую в том, чтобы создать функцию, которая принимает целое число и возвращает true или false в зависимости от того, является число Кейтом или нет.
Подробнее о числах Кейта
В развлекательной математике число Кейта или число повторяющихся чисел (сокращение от повторяющихся цифр, подобных Фибоначчи) представляет собой число в следующей целочисленной последовательности: 14, 19, 28, 47, 61, 75, 197, 742, 1104, 1537, 2208, 2580,…
У Numberphile есть видео, объясняющее, как рассчитать число Кейта. Но в основном вы берете цифры номера. Сложите их вместе, а затем возьмите последние цифры исходного числа и добавьте их к сумме расчета, промойте и повторите. И пример, чтобы было понятно.
14
1 + 4 = 5
4 + 5 = 9
5 + 9 = 14
вход
Целое число
Выход
Истинно, если число является числом Кейта. Ложь, если это не ..
true
/false
или это может быть что-то правдивое / фальшивое ?Ответы:
GolfScript (
3125 символов)Вводится как целое число сверху стека. Выходное значение равно 0 (false) или 1 (true). Демо онлайн, в котором перечислены номера Кейта до 100.
источник
0>
. К сожалению я могу +1 только один раз.Питон (
7875)n=n[1:]+[sum(n)]
делает всю магию. Он берет каждый элемент, но первый элементn
, привязывается к суммеn
(с первым элементом), а затем устанавливает его наn
.Я хотел бы, чтобы вы могли вызвать
list
целое число и разделить цифры.Возвращает
False
на всех входах ниже 10. Может быть на 8 символов короче, если он вернулсяTrue
.источник
n[0]
вместоn[-1]
.print 9<a==n[0]
.n=n[1:]+[sum(n)]
может статьn=n[1:]+sum(n),
GolfScript,
3229 символовРеализация GolfScript, которую можно протестировать онлайн . Входные данные задаются как верхний элемент в стеке и возвращают 0 (т. Е. False) или 1 соответственно.
источник
APL,
36343936332927Выведите,
1
если Кейт, в0
противном случаеGolfScript снова бьет!
редактировать
Использование правого сокращения (
⊢/
) вместо Take минус 1 (¯1↑
), непосредственно сохраняя 1 символ и косвенно сохраняет 1 от Disclose (⊃
)объяснение
⍎¨⍕x←⎕
принимает оцененный ввод (рассматривается как число) и присваивает егоx
. Преобразует его в массив символов (также называемый «строка» в других языках) и циклически перебирает каждый символ (цифру), преобразовывая его в число. Таким образом, это приводит к числовому массиву цифр.{(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}
является основной функцией цикла:+/⍵↑⍨-⍴⍕x
берет последние⍴⍕x
(количество цифр вx
) числа из массива и суммирует их.⍵,
объединяет его до конца массива.(x>⊢/⍵)
проверить,+/⍵↑⍨-⍴⍕x
не меньше ли последнее число в массиве (которое еще не объединено)x
и возвращает1
или0
∇⍣
выполняет эту функцию для нового массива много раз. Поэтому, если последнее число меньше, чемx
эта функция повторяется. В противном случае просто верните новый массивПосле выполнения функции массив содержит суммы до точки, где 2 числа больше или равны
x
(например14
, сгенерируют1 4 5 9 14 23
,13
сгенерируют1 3 4 7 11 18 29
).Наконец, проверьте, равно ли каждое число
x
и выведите сумму полученного двоичного кода. массив.редактировать
Добавлены 2 символа :-( чтобы сделать вывод,
0
если ввод однозначныйЕще одно редактирование
объяснение
Функция теперь удаляет первое число (
1↓
) из массива вместо взятия last⍴⍕x
(↑⍨-⍴⍕x
).Однако такой подход
1=
не позволяет обрабатывать однозначные числа. Так что теперь он удаляет последнее число из массива, прежде чем проверять равенствоx
, добавляя 1 символВы догадались: РЕДАКТИРОВАТЬ
Сравнивает
x
с вновь добавленным элементом вместо старого последнего элемента, поэтому отбрасывает первый (а не последний) элемент перед проверкой равенства наx
, сохранив знак минус. Сохраняет еще 3 с помощью другой формы оператора Power (⍣
)И появляется ответ с 25 знаками (Orz)
Последнее редактирование
Не могу поверить, что я пропустил это.
Больше не могу играть в гольф.
источник
x∊{1↓⍵,+/⍵}⍣{x≤⊃⍺}⍎¨⍕x←⎕
. В степенной функции⍺
это значение «после».Common Lisp, 134
CL иногда может быть совершенно нечитаемым.
Некоторое форматирование, чтобы избежать горизонтальной прокрутки:
Тестовое задание:
источник
F # - 184 символа
Я надеюсь, что все в порядке, что я буду участвовать в моем собственном соревновании.
Редактировать Исправлена ошибка, связанная с небольшими числами.
источник
К, 55
,
источник
PowerShell:
12012812311111097$i=read-host
принимает данные от пользователя, сохраняет их в $ i.$j=(
...)-split''|?{$_}
разбивает цифры из $ i в массив и сохраняет его в $ j.While($x-lt$i)
устанавливает выполнение следующего цикла Фибоначчи, пока переменная суммы, $ x, не достигнет или не превысит $ i.$x=0
обнуляет $ x, поэтому он готов к использованию для суммирования (необходимо, когда цикл возвращается).$j|%{$x+=$_}
использует цикл ForEach-Object для суммирования значений из $ j в $ x.$null,$j=$j+$x
сдвигает значения в $ j влево, отбрасывая первое, добавляя $ x.$x-eq$i
после завершения цикла while проверяется, равно ли значение суммы, $ x, начальному значению, $ i - обычно указывает число Кейта.-and$x-gt9
делает недействительными однозначные числа, ноль и отрицательные числа, которые не могут быть числами Кейта.Этот скрипт немного "грязный". Он может корректно обрабатывать остатки $ i и $ j, но вам нужно очистить $ x между запусками.
источник
-ne''
так, что это просто?{$_}
.$i=read-host;$j=$i-split''|?{$_}'
на$j=($i=read-host)-split''|?{$_}
.Руби, 82
Подозреваю, что Python - лучший инструмент для этого.
источник
С, 123
тест через жгут:
дает:
источник
i=(i+n-1)%n;t=g[i];g[i]=s;s=s*2-t;
сi+=n-1;t=g[i%n];g[i%n]=s;s+=s-t;
и сохранить два символа.R 116
Плагиат Python:
источник
Perl, 90
Веселое упражнение! Я знаю, что это старый пост, но я заметил, что perl отсутствует!
Я уверен, что смогу улучшить способ, которым я построю это, переварив другие ответы более тщательно, так что я, вероятно, вернусь к этому!
источник
Smalltalk - 136 символов
Отправить этот блок
value:
источник
Ява - 1437
источник
Python3 104
И это функция;)
источник
Питон - 116 символов
Не совсем эксперт в Codegolf, так что у вас есть моя первая попытка.
Сделайте 2 изменения для функции:
print
наreturn
x
в качестве параметраPS Я второй @ beary605 - добавить встроенную для разделения цифр / символов / что угодно.
источник
Рубин (с ООП)
источник