Vous devriez tous être familiarisés avec la séquence de Conway (alias la séquence «regarder et dire») :
1
11
21
1211
111221
312211
etc
Vous pouvez également commencer par n'importe quel nombre arbitraire comme point de départ. Soit f(s)
l'élément suivant de la séquence. Maintenant, pour chaque donnée que s
nous pouvons trouver f(s)
. L'inverse n'est pas aussi trivial: il n'est pas pour tout y
possible de trouver le prédécesseur s
tel que f(s) = y
. Par exemple, y = 1
nous ne pouvons pas trouver un prédécesseur. Mais si y
a une même longueur que vous pouvez le diviser en paires de chiffres qui décrivent chacun une partie d'un prédécesseur:
513211 divides in 51,32,11
so: 51 comes from 11111
32 comes from 222
11 comes from 1
put together: 111112221
Ainsi, de cette façon, nous pouvons définir un prédécesseur unique pour chaque y
longueur paire.
Remarque : Le «prédécesseur» s
défini de cette façon ne satisfait généralement PAS f(s) = y
.
Objectif
Écrivez un extrait de fonction / programme qui accepte une chaîne de chiffres en entrée qui
- calcule l'élément suivant de la séquence Conway si la longueur de la chaîne d'entrée est impaire
- calcule le prédécesseur de la chaîne d'entrée comme défini ci-dessus si la longueur de la chaîne d'entrée est paire .
Le code le plus court en octets gagne.
Questions récentes basées sur les séquences de look-and-say:
513111
divise en51
,32
et11
?11111111111111
? Selon vos spécifications, ce serait le cas1111111
. Vous devez modifier vos spécifications pour définir une réponse raisonnable à cela.11111111111111
n'a tout simplement aucun prédécesseur. C'est une entrée illégale.Réponses:
CJam,
4645444342 octetsTestez-le ici. Il prend le numéro sur STDIN et imprime le résultat sur STDOUT.
la source
si
->~
= 45Rubis,
125 120 119101 octetsEntrée de chaîne prise par la fonction
f
:Développé avec des notes:
la source
Prolog - 170 octets
Cet extrait définit la fonction
(-)/2
. Vous pouvez l'invoquer commeIl semble qu'il n'y ait qu'une seule longueur dans cette séquence avec une parité impaire: l'initiale
[1]
.Lisible:
la source
Python: 139 caractères
cas de test unique
la source
s)] if
às)]if
.2 else
Haskell,
134 128115S'il doit provenir de stdin / stdout, ajoutez
main=interact l
pour150 144131 caractères au total. La fonction est appeléel
.la source
l "11"
au travail, je reçois une exception avecl "111"
oul "1111111111111"
Perl - 98 octets
La taille de toutes ces instructions de contrôle me dérange, mais je suis assez content de la façon dont les expressions rationnelles ont fonctionné.
Non compressé:
la source
Erlang, 205
La fonction principale est f, en prenant l'entrée sous forme de chaîne Erlang et en renvoyant également la sortie sous forme de chaîne.
La fonction peut être raccourcie de 15 octets (190) en supprimant l'exigence de casse de plus de 9 caractères identiques.
f
les appelsg
qui calculent le prédécesseur récursivement, et si le nombre de caractères est impair (trouvé à la fin du calcul), il appelle la fonctioni
qui, associée àh
, calcule l'élément suivant.la source
Haskell, 105
Je pense que c'est bien, il s'est avéré ne pas utiliser de fonctions d'assistance :-).
la source
|x:y:z<-r
- Je ne savais absolument pas que tu pouvais faire ça. Ce est tellement cool!APL (45)
Oui, c'est une définition de fonction valide, même avec
∊
l'extérieur.la source
Java 7, Score =
252235 octetsOui, c'est encore Java; la pire langue de golf au monde. Cette approche utilise des chaînes. Les entiers arbitrairement grands sont pris en charge en java mais prendraient beaucoup plus de place pour coder.
Appelez avec
f(intputString)
. Renvoie la chaîne correspondante.Golfé:
Golfed Expanded avec code de structure:
Partiellement golfé:
Complètement élargi:
Pour exécuter, compilez d'abord la deuxième entrée avec:
javac LookAndSayExpandedGolfed.java
Exécutez ensuite avec:
java LookAndSayExpandedGolfed
Edit: Correction d'une erreur.
la source
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4 at java.lang.String.charAt(String.java:658)
--1
censé l'être--i
?513211
->11111
.Javascript (dans le navigateur, ES5, IE8 +), 152
Peut être raccourci de 4 caractères si vous ignorez var, ou quelques autres caractères avec d'autres globaux intermédiaires non protégés, mais supposons que nous ne sommes pas de mauvais programmeurs pendant une minute.
Le passage à la fonction de syntaxe courte ES6 avec argument et valeur de retour au lieu d'utiliser l'invite, l'alerte pour IO peut économiser plus.
JSFiddle ici: http://jsfiddle.net/86L1w6Lk/
la source
var
s ... nous sommes tous de "mauvais programmeurs" ici. ;)Python 3 - 159 octets
la source
Cobra - 217
(186 si je peux supposer qu'une
use
déclarationSystem.Text.RegularExpressions
existe ailleurs)la source
JavaScript (ES6) 85
En utilisant une expression régulière, remplacez par fonction. Expression différente et fonction différente selon que la longueur d'entrée est paire ou impaire.
la source