Das Programm sollte jede Buchstabenkombination (Kleinbuchstaben oder Großbuchstaben, es spielt keine Rolle) in alphabetischer Reihenfolge drucken. Es muss mit beginnen a
und die letzte gedruckte Kombination sollte sein password
.
Die Ausgabe sollte sein:
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
Antworten:
Perl, 19 Zeichen
Verwendet Zeilenumbrüche als Begrenzer (siehe Erläuterung oben). Führen Sie mit
perl -M5.010
(oder nurperl -E 'say for a..password'
) aus, um die Perl 5.10+say
-Funktion zu aktivieren . Per Meta zählt dies nicht als zusätzliche Zeichen.(Wenn Sie auf Leerzeichen als Begrenzer bestehen,
$,=$";say a..password
sind diese Zeichen nur zwei Zeichen länger. Sie sind jedoch auch sehr langsam und speicherintensiv, sodass sie in der Praxis unbrauchbar werden, da vor dem Drucken versucht wird, die gesamte Liste im Speicher zu erstellen.)quelle
Ruby, 33 Zeichen (optimale aber längere Version)
Ich mag das
'a'.upto('password')
; es sagt dir genau, was es tut. Ruby ist so großartig und ausdrucksstark.:D
Wäre natürlich
print c,' '
auch viel übersichtlicher, aber mit$>
zwei Zeichen kürzer.Ruby,
2925 Zeichen (langsame Version)Dieser ist kürzer, aber es werden alle Token gleichzeitig gedruckt, daher dauert die Ausführung sehr lange!
quelle
(?a..'password').to_a
kann um[*?a..'password']
Perl,
333224 ZeichenEine Lösung in 32 Zeichen:
Dazu gibt es nicht viel zu sagen. Ich könnte dies auf 27 Zeichen reduzieren, wenn ich anstelle von Leerzeichen Zeilenumbrüche verwenden könnte, um die Einträge zu trennen.
Ilmari Karonen weist darauf hin, dass
..
interne Anrufe++
, also eine bessere Lösung (25 Zeichen) wäre:Im Folgenden finden Sie eine Lösung mit 24 Zeichen, die die Befehlszeilenoptionen von Perl nutzt:
Die Regeln zum Zählen von Perl-Flags sind hier für diejenigen, die mit ihnen nicht vertraut sind.
Natürlich ist die 21-Zeichen-Lösung von Ilmari noch kürzer, aber es ist ein Computer erforderlich, der ein Array von 129.052.722.140 Zeichenfolgen zuordnen kann.
quelle
.$"
stattdessen," "
einen Charakter speichern?Perl 6, 20 Zeichen
Sie brauchen keine anderen Dinge
quelle
Python 2, 91
quelle
PHP
383736 ZeichenSie müssen die Kodierung auf ISO 8859-1 einstellen und Warnungen deaktivieren.
quelle
$w
wird anfänglich auf 'a' gesetzt und dann inkrementiert, bis sie den ersten Wert nach 'password' erreicht (die letzte Zeichenfolge wird nicht gedruckt).for
Schleife. Dieser Code enthält nichts Seltsames, mit Ausnahme der letzten zwei Zeichen, bei denen es sich um ein bitweise invertiertes Leerzeichen handelt. Wie auch immer, ja, ich habe es bis zu einem kürzeren Wort getestet.passwoqs
bispassword
. Da die Codierung von Codepad nicht ISO 8859-1 ist, musste ich durch~ß
ein Leerzeichen ersetzen .$w<passwore
anstelle von speichern$w!=passwore
.Ruby (40 Zeichen)
Interpretieren Sie eine Folge von z Buchstaben als Zahl in Basis 26 mit a = 1, b = 2, ..., z = 26.
"Passwort" kann man sich also als die Zahl N = vorstellen
Wenn wir
s = "a"
(das heißt: 1) lassen und (N-1) anrufen,s.succ!
ist s"password"
(N). Mit anderen Worten ist N = 1 + (N-1).Um zu beweisen, dass die Berechnung von N korrekt ist, betrachten Sie für ein Beispiel, das schneller ausgeführt wird,
"pass"
als das Ziel, wo N istund
Da wir auch drucken wollen
"a"
, brauchen wirAlso zurück zum vollen "Passwort".
N = 129052722140
, Verlassen:Ich suchte nach einer kompakteren Form
129052722140 == 0x1e0c2443db
, konnte aber keine finden.(Aktualisiert, um den Mangel an Druck zu beheben
"a"
, dank Cary.)quelle
N
anstelle von verwendetN-1
habe! Danke, ich werde das Problem beheben. (Obwohl 129052722140 eine interessante Nummer für Google ist :).)s=?a
,s.succ!
bei "b" beginnt.s=?a
und erhaltenN-1
Sie 'b c ... password'; mits =
<backtick> undN
du bekommst 'ein b ... Passwort'. Der SO forderte zunächst die Ausgabe an'a'
. Das ist alles.Javascript, 73
Hier ist eine 73-stellige Version des @ Briguys-Codes, in der nur Buchstabenkombinationen gedruckt werden
for(i=s=0;1982613533018>i++;s=i.toString(36))/\d/.test(s)||console.log(s)
quelle
APL (Dyalog),
4634Theoretisch würde es bis zum PASSWORT gedruckt, aber nach ZZZZ ist ein Fehler aufgetreten: 5-dimensionales Array ist einfach zu großartig.
EDIT: Muss zu lange her sein, seit ich das letzte Mal mit APL rumgespielt habe. Wie konnte ich es wagen, den Identitätsvergleich zu verpassen (
≡
) !!!Erläuterung
{...}
: Deklariert eine Funktion, die ...⎕A∘.,⍵
: das äußere Produkt die Verkettung übernimmt (jede Kombination eines Elements des linken Operanden, das mit einem Element des rechten Operanden verkettet ist, genau wie das kartesische Produkt) zwischen den 26 Großbuchstaben alpha (⎕A
) und dem Argument (⍵
){...}¨
: Und für jedes Element der Ergebnismenge stecken Sie das in eine Funktion, die ...⍞←⍵
: es ausgibt'PASSWORD '≡
und vergleicht mit'PASSWORD '
→
: Wenn der Vergleich true (1
) ergibt , brechen Sie das Programm ab.⍵
: Andernfalls geben Sie einfach die gedruckte Zeichenfolge zurück.∇
: Endlich kehrt die äußere Funktion von selbst zurück.(Dann nehmen Sie das äußere Produkt über Concat zwischen dem 26-Alpha und dem 26-Alpha, was alle 2-Buchstaben-Kombinationen ergibt, und dann das äußere Produkt über Concat zwischen den 2-Buchstaben-Kombinationen und dem 26-Alpha usw. ... Bis Sie PASSWORT erreichen, das den Abbruch auslöst)
' '
: Der Funke!! Dieser Kick-Start der rekursiven Funktion mit dem Leerzeichen.quelle
Python 2 -
153 152 151149 BytesEin Byte mit GROSSBUCHSTABEN und ein Byte mit Zeilenumbrüchen anstelle von Leerzeichen gespeichert.
quelle
Golfscript 41
Aus
'z'+1 == 'aa'
logischen Gründen kann Golfscript diesen nicht gewinnen.168036262484,
Array von 0 bis 168036262483 erstellen(;
lass die 0 fallen{
..}%
über Array iterieren27base
Element in Basis-27-Array konvertieren{96+}%
Addiere 96 zu jeder Ziffer' '+
In Zeichenfolge konvertieren und am Ende ein Leerzeichen einfügen.96?0<*
Verkürzen Sie den String auf Null, wenn er das Zeichen 96 enthältquelle
In Ruby,
3940...oder
129052722140
. (Edit: Früher hatte ich129052722
. Ich hatte einige Ziffern beim Ausschneiden und Einfügen verloren. Vorherige hex (0x7B13032
) war für falsche Nummer.). Entlehnta=?`
aus @Doorknob , um ein Zeichen speichert.quelle
a=?`
, das Problem zu beheben , es sieht irgendwie komisch aus und hat am Ende ein zusätzliches Leerzeichen, aber zumindest funktioniert es: 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
Es ist einfach zu bestätigen, dass dies korrekt ist, indem Sie nur einige Sequenzen ausdrucken.Javascript:
5756 Zeichen (danke C5H8NNaO4)Hier ist eine Lösung, die Zahlen als mögliche Zeichen enthält ("0", "1", "2", .., "passwor9", "passwora", "passworb", "passworc", "password")
Hier ist eine Übung zum Testen (mit nur den letzten 100 Iterationen, damit Ihr Browser nicht blockiert).
quelle
print every **letter** combination
sowieso, speichere einen Charakter:{} -> ;
Haskell, 101
quelle
Befunge (72)
Gibt die Zeichenfolgen 'a' bis 'password' aus, die durch Leerzeichen getrennt sind, und wird dann beendet.
Unten finden Sie eine Version, die nur die ersten 9 * 9 = 81 Wörter ('a' bis 'dd') zum Vergleich ausgibt. Dies
99*
ist die Anzahl der durchzuführenden Iterationen.quelle
JavaScript
8076Geige - stoppt bei "pa".
Dies wiederholt jedoch die Dinge.
quelle
i=s=0
, um drei weitere Zeichen zu speichern.var
?i
war ein globales vor; Jetzts
ist eine globale. Normalerweise können Sie beide Globals im Codegolf behalten.