APL, 36 34 39 36 33 29 27
*+/x={(∇⍣(⊃x>¯1↑⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Salida 1si Keith, de lo 0contrario
¡GolfScript ataca de nuevo!
Editar
+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Uso de reducción a la derecha (⊢/ ) en lugar de Take menos 1 ( ¯1↑), guarda directamente 1 carácter e indirectamente salva 1 de Disclose ( ⊃)
Explicación
⍎¨⍕x←⎕ toma la entrada evaluada (tratada como un número) y la asigna a x . Lo convierte en una matriz de caracteres (también conocido como "cadena" en otros idiomas) y recorre cada carácter (dígito), convirtiéndolo en un número. Entonces esto resulta en una matriz numérica de los dígitos.
{(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}es la función principal de "bucle":
+/⍵↑⍨-⍴⍕xtoma los últimos números ⍴⍕x(no. de dígitos x) de la matriz y los suma.
⍵,lo concatena al final de la matriz.
(x>⊢/⍵)compruebe si el último número en la matriz (que aún no se ha +/⍵↑⍨-⍴⍕xconcatenado) es menor xy devuelve 1o 0
∇⍣ejecuta esta función en la nueva matriz muchas veces. Entonces, si el último número es menor que x, esta función se repite. De lo contrario, solo devuelva la nueva matriz
Después de ejecutar la función, la matriz contiene las sumas hasta el punto en que 2 de los números son mayores o iguales que x(por ejemplo 14, generará 1 4 5 9 14 23, 13generará 1 3 4 7 11 18 29)
Finalmente, compruebe si cada número es igual xy genera la suma del binario resultante formación.
Editar
1=+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Se agregaron 2 caracteres :-( para hacer la salida 0si la entrada es de un dígito
Otra edición más
+/x=¯1↓{(∇⍣(x>⊢/⍵))1↓⍵,+/⍵}⍎¨⍕x←⎕
Explicación
La función ahora elimina el primer número ( 1↓) de la matriz en lugar de tomar el último ⍴⍕x( ↑⍨-⍴⍕x).
Sin embargo, este enfoque 1=no es adecuado para manejar números de un solo dígito. Por lo tanto, ahora suelta el último número de la matriz antes de verificar la igualdad x, agregando 1 carácter
Lo has adivinado: EDITAR
+/x=1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
Se compara xcon el elemento recién agregado en lugar del último elemento anterior, por lo que xes suficiente colocar el primer elemento (en lugar del último) antes de verificar la igualdad , guardando un signo menos. Guarda otros 3 utilizando otra forma del operador Power ( ⍣)
Y aparece una respuesta de 25 char gs (Orz)
Última edición
x∊1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
No puedo creer que me haya perdido eso.
No puedo jugar más al golf.