Compte à rebours
Votre objectif pour ce défi de code-golf est de décompter et de recycler les nombres. Laissez-moi expliquer.
Votre application lit d'abord un nombre, soit comme argument de programme, soit en utilisant stdin. Ensuite, vous devrez simplement décompter comme ceci:
10 9 8 7 6
( par ordre décroissant )
Mais attendez, il y a plus!
Recyclage
Il y a des situations où nous pouvons imprimer chaque numéro, mais ne pas énumérer tous les numéros, nous pouvons recycler! Permettez-moi de donner un exemple rapide:
Input: 110
Output: 11091081071061051041031021010099... etc
Recycled: 10 1
Nous avons maintenant répertorié tous les nombres, 110, 109, 108, mais nous avons recyclé un 0 et un 1 .
Un autre exemple:
Input: 9900
Output: 9900989989897989698959894... etc
Recycled: 9 98
Défi de golf de code
- Lire un nombre (argument ou stdin)
- Afficher le compte à rebours dans l' ordre décroissant tout en recyclant tous les nombres possibles (vers stdout ou file)
- Arrêtez-vous lorsque vous atteignez 1 OU au moment où vous avez recyclé 0 à 9 (quoi qu'il arrive en premier)
Exemple simple (jusqu'à 1 atteint):
Input: 15
Output: 15141312110987654321
(Notice the 110 instead of 1110)
Exemple plus avancé (tous recyclés):
Input: 110
Output: 110910810710610510410310210100998979695949392919089887868584838281807978776757473727170696867665646362616059585756554535251504948474645443424140393837363534332313029282726252423221
Recycled: 10 9 8 7 6 5 4 3 2
(We've recycled all 0-9)
Réponses:
T-SQL -
291277267217199191166 166158153145142128117Après avoir abordé cela d'une manière nouvelle, j'ai réussi à descendre à 145 (142 après quelques ajustements mineurs), pas trop minable. Cela signifie que je pourrai peut-être concourir pour l'argent ou le bronze. ^^
Cela n'imprime pas une liste, il sélectionne les résultats. La question n'a jamais donné de détails sur la sortie, donc ça devrait aller. Cela a toujours la même limite de 100 sur l'entrée, en partie parce que j'abuse du fait que chaque 11ème terme sous 100 perd un caractère et en partie à cause de la limite de récursivité par défaut de 100 sur les expressions de table communes.
la source
Python 143
147Le retrait de premier niveau est l'espace, le deuxième niveau est le caractère de tabulation.
la source
p=o=''
des paramètres optionnels à la fonction; vous pouvez utiliser*
pourand
dansn and r<1023
ou peut - être mêmer<1023*n
;while x-1:
peut raser un espace commewhile~-x
. En outre, il peut être plus court d'utiliser un ensemble de chiffres plutôt qu'un masque de bits pour stocker les chiffres qui ont été utilisés.Haskell,
154149147145128120119117 octetsl'ajout de la vérification du recyclage coûte beaucoup de caractères ... soupir
golfé un peu en se rappelant quels chiffres n'étaient pas encore recyclés et en s'arrêtant lorsque la liste est vide. puis joué un peu plus au golf en passant à la récursivité explicite et à quelques autres tours.
exemple de sortie:
la source
Python 2:
119117Marquer cela comme un wiki communautaire parce que c'est juste une version plus golfée de la réponse de Will .
la source
d=s,={''}
marche?d=s,={''}
est équivalent àd={''}; s,={''}
.s,={''}
utilise le décompression de séquence, une fonctionnalité plus couramment utilisée dans les instructions telles quea, b = (b, a)
, mais vous pouvez également l'utiliser pour extraire le seul élément d'une séquence à élément unique.len(d)%11*n
, bien qu'il semble que ce soit discutable avec vous en utilisant une boucle d'exécution.set()
qu'un ensemble à un seul élément{x}
. Ainsi, flornquake l'initialise avec un membre de remplissage et vérifie s'il a tous les dix chiffres en voyant s'il a onze éléments. Étant donné que la chaîne vide doit être initialisée danss
, elle est conçue pour servir de membre de remplissage, en combinant ces initialisations pour enregistrer les caractères.len(d)%11*n
aurait été bien. :)Rubis,
145139130 octetsApproche similaire à celle de Will, sauf que je n'utilise pas un masque de bits, mais un tableau de chiffres inutilisés à la place. L'entrée se fait via STDIN.
Il existe une version alternative à la
while
place detimes
mais quoi que j'essaye, le nombre d'octets est le même:la source
CJam,
8077655754 CaractèresProbablement pas du tout optimisé, maisaprès beaucoup d'optimisations et de débogage, voici la conversion directe de ma réponse ES6 dans CJam:Essayez-le en ligne ici . La fonction prend le nombre comme STDIN et sort le compte à rebours recyclé, s'arrêtant entre les deux si le recyclage est terminé.
Je vais essayer de jouer au golf plus loin.
Comment ça fonctionne:
L'idée de base est que pour chaque numéro de compte à rebours C, vérifiez si les premiers chiffres H sont égaux aux derniers chiffres H de la chaîne résultante, où H va du nombre de chiffres de C à 0
la source
JavaScript ES6,
149146 caractèresCes personnages verbeux, beaucoup, wow.
Exécutez-le dans la dernière console Web de Firefox.
Après l'exécution, il crée une méthode
C
que vous pouvez utiliser commeMISE À JOUR : Parfois, l'ancien simple
return
est plus court que la fermeture de la fonction flèche :)la source