Étant donné une liste d'entiers séparés par des espaces, votre tâche consiste à trouver le prochain entier dans la séquence. Chaque nombre entier dans la séquence est le résultat de l' application d' une opération mathématique unique ( +
, -
, *
ou /
) à l'entier précédent, et chaque séquence est composée d'un nombre variable de ces opérations (mais pas plus de 10). Aucune séquence ne dépassera la moitié de la longueur de la séquence d'entiers, vous devrez donc faire apparaître chaque séquence d'opérations au moins deux fois pour confirmation.
L'entrée se fera via stdin (ou prompt
pour les solutions JavaScript).
Voici quelques exemples explicatifs.
Contribution:
1 3 5 7 9 11
Production:
13
Assez facile, celui-ci. Toutes les valeurs sont la valeur précédente +2
.
Contribution:
1 3 2 4 3 5 4 6 5 7 6
Sortie:
8
Deux étapes dans cette séquence, +2
alors -1
.
Contribution:
2 6 7 3 9 10 6 18 19 15 45 46
Production:
42
Trois étapes - *3
, +1
, -4
.
Cas de test
Voici quelques cas de test supplémentaires:
Contribution:
1024 512 256 128 64 32 16
Production:
8
Contribution:
1 3 9 8 24 72 71 213 639
Production:
638
Contribution:
1 2 3 4 5 2 3 4 5 6 3 4 5 6 7
Production:
4
Contribution:
1 2 4 1 3 9 5 8 32 27 28 56 53 55 165 161 164 656 651 652 1304
Production:
1301
J'ai une solution Scala non golfée (42 lignes) que je posterai dans quelques jours.
C'est le golf de code - la réponse la plus courte l'emporte.
Réponses:
Golfscript,
203138 caractèresCela utilise beaucoup plus de
if
s qu'un programme Golfscript standard, et son fonctionnement est assez cryptique, alors voici une version commentée (mais non dissociée autrement que par l'ajout d'espaces et de commentaires):Ma soumission originale était la suivante à 88 caractères:
Cependant, cela essaie de calculer les opérations à partir de la première occurrence de chacune, donc si l'opération est une multiplication ou une division et que l'argument la première fois est 0, elle se casse.
la source
Haskell,
276261259257243 caractèresVoici ma solution inefficace. Il fonctionne sur des entiers illimités (et bornés). Cette solution se trouve fonctionner correctement avec une division non exacte (par exemple:)
5 / 2 = 2
.Comment ça marche: je crée toutes les séquences possibles d'opérations (possibles). Ensuite, je teste la séquence de nombres entrée pour voir si la séquence générée créera l'entrée. Si c'est le cas, renvoyez le numéro suivant de la séquence. Le code renvoie toujours une réponse dérivée d'une séquence d'opérations la plus courte. Cela se produit car la liste des séquences d'opérations est générée dans cet ordre. C'est arbitraire (mais cohérent) de décider entre les liens. Par exemple, le code renvoie
6
ou8
pour la séquence2 4
.Non golfé:
la source
Control.Monad -> Monad
possible? Et que diriez-vousinteract$show.n.q read.words
Python,
333366...315303278269261246 caractèresCrée une opération avec la première paire de nombres et vérifie-la sur les autres paires. Stocke toutes les opérations et si toutes réussissent, applique alors l'opération appropriée sur le dernier élément de la liste.
Modifié: passe le test diabolique :-) Maintenant, recherchez l'opération sur toutes les positions.
la source
0 0 1 2 3 6 7 14
0 0 0 0 1 0 0 0 0 1
ne sort pas0
.lambda x:x+b-a
->(b-a).__add__
. Dommage que ce ne soit qu'un seul personnage, j'apprends tellement de choses sur python en les faisant.l
implicitement global sauve beaucoup: pastie.org/2416407Python,
309305295279 caractèresGère tous les cas de test d'origine, ainsi que celui de Peter Taylor
0 0 1 2 3 6 7 14
:Non golfé, avec sortie de débogage (très utile pour vérifier l'exactitude):
Usage:
la source
v<1
travaille sûrement comme gardien.Rubis 1,9
(437)(521)(447)(477)Fonctionne pour tous les cas de test, y compris le "mal". Je jouerai au golf plus tard.
EDIT: J'ai réalisé qu'il y avait un autre cas que je ne traitais pas correctement - lorsque la suite doit utiliser l'opération "mystère". La séquence
2 0 0 -2 -4 -6
renvoyait initialement 0 au lieu de -12. J'ai maintenant corrigé cela.EDIT: correction de quelques cas supplémentaires et réduction du code à 447.
EDIT: Ugh. J'ai dû ajouter du code pour gérer d'autres séquences "diaboliques" telles que
0 0 0 6 18 6 12
la source
Scala
Voici la solution que j'ai trouvée:
Non golfé:
la source
echo "0 0 1 2 3 6 7 14" | scala Sequence
garde l'écran noir.scala Sequence
, puis entrez la séquence et appuyez sur Entrée.Scala 936
non golfé:
Échoue lamentablement sur Peter Taylor
h
, mais je ne vois pas la possibilité de guérir le programme dans un délai raisonnable.la source
-
comme un cas spécial+
et/
comme un cas spécial*
? Ma façon de passer l'entrée de Peter Taylor (et similaire) était de couper le premier numéro de la séquence et d'essayer à nouveau. Je n'ai pas encore eu le temps de voir comment fonctionne votre programme pour savoir si cela pourrait vous aider.-1, 0, 0, 1, 2, 3, 6, 7, 14
aura besoin d'une guérison différente.