APL, 36 34 39 36 33 29 27
*+/x={(∇⍣(⊃x>¯1↑⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Sortie 1
si Keith, 0
sinon
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":
+/⍵↑⍨-⍴⍕x
prend 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é +/⍵↑⍨-⍴⍕x
concaténé) est plus petit que x
et renvoie 1
ou 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 14
va générer 1 4 5 9 14 23
, 13
va générer 1 3 4 7 11 18 29
)
Enfin vérifier si chaque nombre est égal x
et sortir la somme du binaire résultant tableau.
Éditer
1=+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
Ajout de 2 caractères :-( pour faire une sortie 0
si 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é x
est 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.