APL, 36 34 39 36 33 29 27
*+/x={(∇⍣(⊃x>¯1↑⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Salida 1
si Keith, de lo 0
contrario
¡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":
+/⍵↑⍨-⍴⍕x
toma 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 +/⍵↑⍨-⍴⍕x
concatenado) es menor x
y devuelve 1
o 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
, 13
generará 1 3 4 7 11 18 29
)
Finalmente, compruebe si cada número es igual x
y genera la suma del binario resultante formación.
Editar
1=+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Se agregaron 2 caracteres :-( para hacer la salida 0
si 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 x
con el elemento recién agregado en lugar del último elemento anterior, por lo que x
es 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.