Étant donné une chaîne de 1
et 2
de n'importe quelle longueur, écrivez du code (ne doit plus être une fonction , tout ira bien) qui calcule le nombre d'étapes nécessaires pour réduire la chaîne à une forme finale, en suivant ce critère:
Si votre chaîne est 112112
, cela signifie que vous devez imprimer un 1, deux 1 et un 2, comme ceci:
1112
. Lorsque vous effectuerez à nouveau l'opération, vous devrez imprimer un 1 et un 2. Vous obtenez 12
. Ensuite, vous imprimez un 2, obtenant 2
. C'est une forme finale, car cette chaîne ne va plus changer. Votre code sera affiché 3
, car vous avez eu besoin de 3 étapes pour accéder au formulaire final.
Autres règles
Si la chaîne a une longueur inégale, le dernier numéro reste intact.
Chaque chaîne qui ne peut plus changer (comme
222222
) est considérée comme une forme finale.Vous ne pouvez utiliser aucune source externe.
Votre code doit fonctionner avec chaque chaîne de
1
et2
.Le code le plus court gagne, car il s'agit du code-golf.
Votre code devrait imprimer à chaque étape.
Chaque méthode d'entrée ira bien.
Exemples
Input >> 122122122121212212
Your code has to print:
211222111111222
11222111222
122111222
2111222
111222
1222
222
Steps:7 (you can omit the "Steps")
---- ---- ---- ----
Input >> 22222221
Your code has to print:
22222211
2222221
2
---- ---- ---- ----
Input >> 2222
Your code has to print:
0
EDIT: Fortement édité. Désolé pour ça.
1 11 2
. Tous les deux nombres sont une paire: le premier nombre de la paire indique combien de fois rendre le deuxième nombre de la paire. Tout dernier chiffre impair sans partenaire de paire est rendu tel quel.Réponses:
Ruby 1.9+, 73 caractères
Je vois la règle sans regex comme idiote et arbitraire, alors voici unesolution basée sur les regex malveillantes:Essai:
La dernière ligne est le nombre d'étapes.
Edit: la restriction des regex a été supprimée par Vereos.
la source
C -
156154Mon premier golf de code ici!
Tester:
Production:
la source
GolfScript: 69 caractères
Chaque itération de la boucle interne trouve les 2 premiers nombres de la chaîne et les utilise pour former un bloc du formulaire
{num1 num2 '' + *}
. Lorsque ce bloc est évalué, nous obtenons la lecture souhaitée de ces nombres. Répétez cette opération jusqu'à ce qu'il n'y ait plus de caractères. Ensuite, répétez cette boucle tout en gardant une trace du nombre d'itérations et d'impression.Échantillon:
la source
Python - 126
Cela n'imprime pas la valeur d'entrée. Si nécessaire, déplacez-vous
print s;
vers la droite avantn="";
Remarque: vous avez dit "fonction", c'est donc une fonction. Voici une version qui n'est pas une fonction (127 caractères):
(Si je peux demander à l'utilisateur de coller le nombre, alors 118 (coller les données entre les guillemets sur la première ligne)):
Exemple d'exécution:
En prime, chacune de ces solutions fonctionne pour les chaînes contenant des nombres plus importants (jusqu'à 9), mais certaines chaînes produisent des sorties de plus en plus grandes (par exemple,
99
)la source
JavaScript, 107
(nécessite le support de la fonction flèche, par exemple comme dans Firefox)
s
est la chaîne d'entréeÀ chaque tour, nous utilisons l'expression régulière
.?.?
pour explosers
en un tableau de chaînes à deux caractères, puismap
ces chaînes dans leurs formes réduites et coller le tableau ensembler
stocke le résultat du cycle en cours pour comparaison avec le précédents
k
est le compteur rondNous abusons horriblement
prompt
(alias dep
) comme mécanisme d'entrée et de sortie, car il peut présenter un message à l'utilisateurla source
Perl - 50 (+2) octets
Nécessite des
-pl
commutateurs de ligne de commande.Exemple d'utilisation:
la source
PHP, 240
Exemple: http://skyleo.de/codegolf.php?i=211222111111222
Je suis un peu mauvais au codegolf ._. Peut-être que je ne devrais pas utiliser uniquement Java et PHP (et je devrais penser plus compliqué)
la source
str_split
car vous pouvez accéder à des caractères individuels dans une chaîne comme un tableau en PHP.R, 158
Exemple:
la source
MATHEMATICA, 117
la source
POWERSHELL, 2
Basé sur la réponse de Vereos "Vous pouvez utiliser n'importe quelle méthode de saisie pour raccourcir votre code" à ma question dans les commentaires de l'OP, le script suivant obtient le résultat:
Exemple d'exécution pour "122122122121212212":
Évidemment, ce n'est pas une entrée sérieuse - son but est d'illustrer mon point de vue que permettre à n'importe quelle méthode d'entrée peut banaliser le code réel nécessaire pour donner la réponse. Par conséquent, la méthode d'entrée doit être spécifiée plus rigoureusement.
la source
J, 41 caractères
En tant que fonction (ew parens! Pas très content d'eux):
Vue éclatée Exemple d'exécutionla source
Perl, 107 caractères
L'autre code Perl bat clairement cela, mais pour ce qu'il vaut, le voici. J'ai utilisé le commutateur -l au prix d'un caractère supplémentaire:
Une version plus lisible de cela:
la source