Le programme doit imprimer chaque combinaison de lettres (en minuscules ou en majuscules, peu importe) dans l'ordre alphabétique. Il doit commencer par a
et la dernière combinaison imprimée doit être password
.
La sortie doit être:
a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ... passwora passworb passworc password
Réponses:
Perl, 19 caractères
Utilise les nouvelles lignes comme délimiteurs, comme indiqué ci-dessus. Exécutez avec
perl -M5.010
(ou tout simplementperl -E 'say for a..password'
) pour activer la fonction Perl 5.10+say
. Par méta , cela ne compte pas comme caractères supplémentaires.(Si vous insistez sur les espaces comme délimiteurs, il
$,=$";say a..password
ne reste que deux caractères. Cependant, c'est aussi très lent et gaspillant de la mémoire, au point d'être inutilisable en pratique, car il essaie de construire la liste entière en mémoire avant de l'imprimer.)la source
Ruby, 33 caractères (version optimale mais plus longue)
J'aime le
'a'.upto('password')
; il vous indique exactement ce qu'il fait. Ruby est génial et expressif comme ça.:D
Bien sûr,
print c,' '
serait également beaucoup plus clair, mais l'utilisation$>
est de deux caractères plus courte.Ruby,
2925 caractères (version lente)Celui-ci est plus court, mais il imprime tous les jetons en même temps, il faut donc beaucoup de temps pour courir!
la source
(?a..'password').to_a
peut être raccourci en[*?a..'password']
Perl,
333224 caractèresUne solution en 32 caractères:
Pas grand chose à dire sur celui-ci. Je pourrais réduire cela à 27 caractères si je pouvais utiliser des sauts de ligne au lieu d'espaces pour séparer les entrées.
Ilmari Karonen souligne que
..
les appels internes++
, donc une meilleure solution (25 caractères) serait:En tirant parti des options de ligne de commande de Perl, voici une solution équivalente à 24 caractères:
Les règles de comptage des drapeaux Perl sont là, pour ceux qui ne les connaissent pas.
Bien sûr, la solution à 21 caractères d'Ilmari est encore plus courte, mais elle nécessite une machine qui peut allouer un tableau de 129 052 722 140 chaînes.
la source
.$"
lieu de," "
sauver un personnage?Perl 6, 20 caractères
Tu n'as pas besoin d'autre chose
la source
Python 2, 91
la source
PHP
383736 caractèresVous devez définir le codage sur ISO 8859-1 et désactiver les avertissements.
la source
$w
est initialement définie sur «a» puis incrémentée jusqu'à ce qu'elle atteigne la première valeur après «mot de passe» (la dernière chaîne n'est pas imprimée).for
boucle régulière . Il n'y a rien d'étrange dans ce code, à l'exception des 2 derniers caractères, qui sont des espaces inversés au niveau du bit. Quoi qu'il en soit, oui, je l'ai testé jusqu'à un mot plus court.passwoqs
àpassword
. Parce que l'encodage du codepad n'est pas ISO 8859-1, j'ai dû le remplacer~ß
par un espace blanc.$w<passwore
au lieu de$w!=passwore
.Ruby (40 caractères)
Interpréter une chaîne de lettres az comme un nombre en base 26, avec a = 1, b = 2, ..., z = 26.
Le "mot de passe" peut donc être considéré comme le nombre N =
Si nous laissons
s = "a"
(c'est-à-dire: 1) et faisons (N-1) des appels às.succ!
, s sera"password"
(N). En d'autres termes, N = 1 + (N-1).Pour un exemple qui s'exécutera plus rapidement, pour prouver que le calcul de N est correct, considérez
"pass"
comme la cible, où N estet
Puisque nous voulons
"a"
aussi imprimer , nous avons besoinRevenons donc au "mot de passe" complet.
N = 129052722140
, en quittant:J'ai cherché une forme plus compacte
129052722140 == 0x1e0c2443db
mais je n'en ai pas trouvé.(Mis à jour pour corriger le manque d'impression
"a"
, grâce à Cary.)la source
N
au lieu deN-1
dans mes itérations! Merci, je vais modifier pour corriger. (Bien que 129052722140 soit un nombre intéressant pour Google :).)s=?a
,s.succ!
commence par «b».s=?a
etN-1
vous obtenez «b c ... mot de passe»; avecs =
<backtick> etN
vous obtenez 'un b ... mot de passe'. L'ER a demandé la sortie pour commencer'a'
. C'est tout.Javascript, 73
Voici une version à 73 caractères du code de @Briguys, qui imprime uniquement les combinaisons de lettres
for(i=s=0;1982613533018>i++;s=i.toString(36))/\d/.test(s)||console.log(s)
la source
APL (Dyalog),
4634Théoriquement, il s'imprimerait jusqu'à MOT DE PASSE, mais j'ai rencontré une erreur complète d'espace de travail après ZZZZ: le tableau à 5 dimensions est tout simplement trop génial.
EDIT: Cela a dû être trop long depuis la dernière fois que j'ai joué avec APL. Comment j'ai osé manquer la comparaison d'identité (
≡
) !!!Explication
{...}
: Déclare une fonction qui ...⎕A∘.,⍵
: Prend le produit externe sur la concaténation (Chaque combinaison d'un élément de l'opérande gauche concaténé avec un élément de l'opérande droit, tout comme le produit cartésien) entre les 26 alpha (⎕A
) majuscules ( ) et l'argument (⍵
){...}¨
: Et pour chaque élément de l'ensemble résultant, branchez-le dans une fonction qui ...⍞←⍵
: l'imprime'PASSWORD '≡
et le compare avec'PASSWORD '
→
: Si la comparaison renvoie true (1
), alors abandonnez le programme.⍵
: Sinon, renvoyez simplement la chaîne imprimée.∇
: Enfin, la fonction extérieure se recuit.(Ensuite, vous prenez le produit extérieur sur le concaténat entre le 26 alpha et le 26 alpha, qui donne toutes les combinaisons de 2 lettres, puis le produit extérieur sur le concaténat entre les combinaisons de 2 lettres et le 26 alpha, etc ... Jusqu'à ce que vous atteindre MOT DE PASSE qui déclenche l'abandon)
' '
: L'étincelle!! Cela lance la fonction récursive avec le caractère espace.la source
Python 2 -
153 152 151 151149 octetsUn octet enregistré en utilisant UPPERCASE et un en utilisant des sauts de ligne au lieu d'espaces.
la source
Golfscript 41
Par manque de
'z'+1 == 'aa'
logique, Golfscript ne peut pas gagner celui-ci.168036262484,
créer un tableau de 0 à 168036262483(;
laissez tomber le 0{
..}%
itérer sur le tableau27base
convertir l'élément en tableau de base 27{96+}%
ajouter 96 à chaque chiffre' '+
convertir en chaîne et ajouter un espace à la fin.96?0<*
tronquer la chaîne à zéro si elle contient le caractère 96la source
En rubis,
3940...ou
129052722140
. (Edit: anciennement je l'avais fait129052722
. J'avais perdu des chiffres à couper et coller. L'hex précédent (0x7B13032
) était pour un nombre incorrect.). Empruntéa=?`
à @Doorknob pour enregistrer un personnage.la source
a=?`
truc, ça a l'air un peu bizarre et a un espace supplémentaire à la fin mais au moins ça marche: PORD_BASE_ASCII = 'a'.ord-1; def nbr(word); len = word.size; word.split('').inject(0) {|t,c| offset = c.ord - ORD_BASE_ASCII; t + offset*(26**(len -= 1))}; end
Il est facile de confirmer que c'est correct en imprimant simplement certaines séquences.Javascript:
5756 caractères (merci C5H8NNaO4)Voici une solution qui inclut des nombres comme caractères possibles ("0", "1", "2", .., "passwor9", "passwora", "passworb", "passworc", "password")
Voici un violon pour les tests (avec seulement les 100 dernières itérations pour ne pas verrouiller votre navigateur).
la source
print every **letter** combination
Quoi qu'il en soit, enregistrez un personnage:{} -> ;
Haskell, 101
la source
Befunge (72)
Imprime les chaînes «a» à «mot de passe» séparées par des espaces, puis quitte.
Ci-dessous, une version qui n'imprime que les 9 * 9 = 81 premiers mots ('a' à 'dd'), pour comparaison. Le
99*
est le nombre d'itérations à effectuer.la source
JavaScript
8076violon - s'arrête à "pa".
cependant, cela répète les choses.
la source
i=s=0
pour enregistrer trois autres caractères.var
?i
était un monde avant;s
est maintenant un mondial. Vous pouvez simplement garder les deux mondiaux dans le golf de code, généralement.