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←⎕
Не могу поверить, что я пропустил это.
Больше не могу играть в гольф.