APL, 36 34 39 36 33 29 27
*+/x={(∇⍣(⊃x>¯1↑⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Sortie 1si Keith, 0sinon
GolfScript frappe à nouveau !!
Éditer
+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Utilisation de Right-reduction ( ⊢/) au lieu de Take moins 1 (¯1↑ ), en sauvant directement 1 caractère et indirectement 1 en Disclose ( ⊃)
Explication
⍎¨⍕x←⎕ prend l'entrée évaluée (traitée comme un nombre) et l'affecte à x . Le convertit en un tableau de caractères (alias "chaîne" dans d'autres langues), et parcourt chaque caractère (chiffre), le convertissant en un nombre. Il en résulte donc un tableau numérique des chiffres.
{(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}est la fonction principale de "boucle":
+/⍵↑⍨-⍴⍕xprend le dernier ⍴⍕x(nombre de chiffres x) du tableau et les additionne.
⍵,le concatène à la fin du tableau.
(x>⊢/⍵)vérifier si le dernier nombre du tableau (qui n'a pas encore été +/⍵↑⍨-⍴⍕xconcaténé) est plus petit que xet renvoie 1ou 0
∇⍣exécute cette fonction sur le nouveau tableau autant de fois. Donc, si le dernier nombre est inférieur à x, cette fonction se reproduit. Sinon, renvoyez simplement le nouveau tableau
Après l'exécution de la fonction, le tableau contient les sommes jusqu'au point où 2 des nombres sont supérieurs ou égaux x(par exemple 14va générer 1 4 5 9 14 23, 13va générer 1 3 4 7 11 18 29)
Enfin vérifier si chaque nombre est égal xet sortir la somme du binaire résultant tableau.
Éditer
1=+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Ajout de 2 caractères :-( pour faire une sortie 0si l'entrée est à un chiffre
Encore un autre montage
+/x=¯1↓{(∇⍣(x>⊢/⍵))1↓⍵,+/⍵}⍎¨⍕x←⎕
Explication
La fonction supprime maintenant le premier nombre ( 1↓) du tableau au lieu de prendre le dernier ⍴⍕x( ↑⍨-⍴⍕x).
Cependant, cette approche 1=ne permet pas de gérer des nombres à un chiffre. Donc, il supprime maintenant le dernier nombre du tableau avant de vérifier l'égalité x, en ajoutant 1 caractère
Vous l'avez deviné: EDIT
+/x=1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
Se compare xà l'élément nouvellement ajouté au lieu de l'ancien dernier élément, donc laisser tomber le premier (au lieu du dernier) élément avant de vérifier l'égalité xest suffisant, en enregistrant un signe moins. Enregistre 3 autres en utilisant une autre forme de l'opérateur Power ( ⍣)
Et une réponse gs de 25 caractères apparaît (Orz)
Dernière modification
x∊1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
Je ne peux pas croire que j'ai raté ça.
Je ne peux plus jouer au golf.