APL, 36 34 39 36 33 29 27
*+/x={(∇⍣(⊃x>¯1↑⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Saída 1se Keith, 0caso contrário
GolfScript ataca novamente !!
Editar
+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Usando Redução à direita ( ⊢/) em vez de Obter menos 1 ( ¯1↑), economizando diretamente 1 caractere e indiretamente economizando 1 em Divulgar ( ⊃)
Explicação
⍎¨⍕x←⎕pega a entrada avaliada (tratada como um número) e a atribui a x. Converte-o em uma matriz de caracteres (também conhecida como "string" em outros idiomas) e percorre cada caractere (dígito), convertendo-o em um número. Portanto, isso resulta em uma matriz numérica dos dígitos.
{(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}é a principal função do "loop":
+/⍵↑⍨-⍴⍕xpega o último ⍴⍕x(número de dígitos x) da matriz e os soma.
⍵,concatena até o final da matriz.
(x>⊢/⍵)verifique se o último número na matriz (que ainda não foi +/⍵↑⍨-⍴⍕xconcatenado) é menor que xe retorna 1ou 0
∇⍣executa essa função na nova matriz várias vezes. Portanto, se o último número for menor que x, essa função se repetirá. Caso contrário, basta retornar a nova matriz
Após a execução da função, a matriz contém as somas até o ponto em que 2 dos números são maiores ou iguais a x(por exemplo 14, gerará 1 4 5 9 14 23, 13gerará 1 3 4 7 11 18 29).
Finalmente, verifique se cada número é igual xe produza a soma do binário resultante. array.
Editar
1=+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Foram adicionados 2 caracteres :-( para gerar saída 0se a entrada for de um dígito
Mais uma edição
+/x=¯1↓{(∇⍣(x>⊢/⍵))1↓⍵,+/⍵}⍎¨⍕x←⎕
Explicação
A função agora elimina o primeiro número ( 1↓) da matriz em vez de pegar o último ⍴⍕x( ↑⍨-⍴⍕x).
No entanto, essa abordagem 1=não é adequada para lidar com números de um dígito. Agora, ele remove o último número da matriz antes de verificar a igualdade x, adicionando 1 caractere
Você adivinhou: EDITAR
+/x=1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
Compara xcom o item recém-adicionado em vez do último item antigo; portanto x, basta soltar o primeiro (em vez do último) antes de verificar a igualdade , salvando um sinal de menos. Salva outros 3 usando outra forma do operador Power ( ⍣)
E uma resposta de 25 char gs aparece (Orz)
Última edição
x∊1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
Não posso acreditar que perdi isso.
Não posso mais jogar golfe.