APL, 36 34 39 36 33 29 27
*+/x={(∇⍣(⊃x>¯1↑⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Выведите, 1если Кейт, в 0противном случае
GolfScript снова бьет!
редактировать
+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Использование правого сокращения (⊢/ ) вместо 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 и выведите сумму полученного двоичного кода. массив.
редактировать
1=+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Добавлены 2 символа :-( чтобы сделать вывод, 0если ввод однозначный
Еще одно редактирование
+/x=¯1↓{(∇⍣(x>⊢/⍵))1↓⍵,+/⍵}⍎¨⍕x←⎕
объяснение
Функция теперь удаляет первое число ( 1↓) из массива вместо взятия last ⍴⍕x( ↑⍨-⍴⍕x).
Однако такой подход 1=не позволяет обрабатывать однозначные числа. Так что теперь он удаляет последнее число из массива, прежде чем проверять равенство x, добавляя 1 символ
Вы догадались: РЕДАКТИРОВАТЬ
+/x=1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
Сравнивает xс вновь добавленным элементом вместо старого последнего элемента, поэтому отбрасывает первый (а не последний) элемент перед проверкой равенства наx , сохранив знак минус. Сохраняет еще 3 с помощью другой формы оператора Power ( ⍣)
И появляется ответ с 25 знаками (Orz)
Последнее редактирование
x∊1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
Не могу поверить, что я пропустил это.
Больше не могу играть в гольф.