APL, 36 34 39 36 33 29 27
*+/x={(∇⍣(⊃x>¯1↑⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Saída 1
se Keith, 0
caso 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":
+/⍵↑⍨-⍴⍕x
pega 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 +/⍵↑⍨-⍴⍕x
concatenado) é menor que x
e retorna 1
ou 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
, 13
gerará 1 3 4 7 11 18 29
).
Finalmente, verifique se cada número é igual x
e produza a soma do binário resultante. array.
Editar
1=+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Foram adicionados 2 caracteres :-( para gerar saída 0
se 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 x
com 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.