Aufgabe
Wenn Sie einen String als Eingabe angeben, besteht Ihre Aufgabe darin, 42
nur dann auszugeben , wenn der Eingabe-String genau wie folgt lautet :
abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz
Es kann jeden anderen Wert ausgeben, einen Fehler erzeugen oder überhaupt nicht ausgegeben werden, wenn die Eingabe nicht der oben genannten Zeichenfolge entspricht.
Gewinnkriterium
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
abbcccddddeeeee...zzabc
genügt nicht , dass ich nehme an, und ich kann einige Programme sehen gibt ja auf diesem Eingang.Antworten:
Golfscript, 20
mit neuer Zeile, 21 Zeichen (von Nabb)
Eigentlich hat Nabb meine geschlagen, hier ist die Originallösung für mit neuer Leitung, 22 Zeichen
Dies erzeugt einfach eine Quellzeichenfolge und vergleicht sie nur mit der Zeichenfolge von stdin.
quelle
26,{).[96+]*}%n+=42`*
für 21 (inkl. newline).n+
weil das Array nicht flach ist. Sie müssen entweder Ihre ursprünglichen 20 Zeichen beibehalten oder a hinzufügen~
, um die inneren Begriffe des Arrays zu reduzieren.Ruby 1.9,
46 4239 ZeichenAngenommen, die Eingabe wird nicht mit einem Zeilenumbruch abgeschlossen.
quelle
C-Programm -
7889Bearbeiten: 42 nicht drucken, wenn zusätzliche Zeichen vorhanden sind.
Angenommen, die Eingabe enthält keine nachgestellte Newline.
Wenn das Präfix nicht übereinstimmt, wird das Programm beendet. Wenn das Präfix übereinstimmt, aber 1-3 zusätzliche Zeichen vorhanden sind, wird 2 gedruckt. Andernfalls wird ein undefiniertes Verhalten erzeugt.
Dies kann durch Ändern
exit(1)
von um ein Zeichen verkürzt werdenfork()
. Vergessen Sie nicht, alle offenen Dokumente zu speichern, falls Ihr System aus irgendeinem Grund abstürzt.quelle
PHP (60)
Angenommen, die Eingabe erfolgt in der Befehlszeile:
Erläuterung : Sie können die Zeichenfolge als Dreieckstruktur anzeigen.
Die Linie
j
beginnt am Indexi = j*(j+1)/2
(das ist die Dreieckszahlformel). Das Lösen der quadratischen Gleichung führt dazu, dass der Indexi
online istj = int((sqrt(8*i+1)-1)/2)
und daher Zeichen enthält97 + int((sqrt(8*i+1)-1)/2)
. Der0-350
Indexbereich ermöglicht es uns, dies zu vereinfachen, dies96.5 + sqrt(2*(i+1))
gilt jedoch nicht mehr für größere Werte.Bearbeiten : Auf die Kommandozeilen-Eingabe umgestellt, wie in den Kommentaren vorgeschlagen.
Bearbeiten : Verwendet einen bedingten Operator, um ein Zeichen zu speichern
quelle
$s.=chr(96.5+sqrt($i+=2));
funktioniert?Perl,
35-43Benötigt Perl 5.10 oder neuer (ausgeführt mit
-E
), keine Zeilenumbrüche in der Eingabe.Ich mochte meine regex Nebenwirkungen besser, aber der kürzere Code hat gesprochen. Hier ist es als Andenken. Auch für Perl 5.10 oder höher gedacht, jedoch nur für erweiterte / experimentelle reguläre Ausdrücke. Daher ist nur eine
p
Befehlszeilenoption erforderlich.quelle
$a++."{$b}"
anstatt nur$a++.$b
?05AB1E , 7 Bytes (nicht konkurrierend)
Probieren Sie es online!
Erläuterung
Mache einfach einige Herausforderungen durch, um 05AB1E (und das Golfen im Allgemeinen) zu lernen. Diese Herausforderung wurde gestern als aktiv markiert und ich habe eine kurze Lösung gefunden. Warum also nicht teilen? :)
quelle
Haskell-Programm -
71676457Nimmt keine nachgestellte Zeile an und gibt auch keine aus.
Verwendungszweck:
quelle
zipWith
stoppt , wenn das Ende der kürzeren Liste erreicht, können Sie ersetzen['a'..'z']
mit['a'..]
3 Zeichen speichern.[c|c<-['a'..'z'],_<-['a'..c]]
J, 29
Beispiel:
quelle
D: 94 Zeichen
Mehr leserlich:
quelle
Delphi,
164,132Dieser erstellt eine Zeichenfolge und vergleicht sie nur mit dem ersten Befehlszeilenargument. Es ist kürzer und weniger knifflig als meine andere Vorlage:
(Beachten Sie , dass diese Version geht davon aus, dass die
c
undi
Variablen bei 0 initialisiert beginnen, wie es der Fall in meiner Version von Delphi ist (2010).)Wie meine andere Übermittlung benötigt diese weniger Zeichen, wenn der Stringaufbau nicht in einer Funktion stattfindet, wie ich es zuvor getan habe:
Delphi, 181
Beachten Sie, dass für die Ausgabe kein Zeilenumbruch erforderlich ist, sodass aus WriteLn () Write () wurde.quelle
PHP - 45 Zeichen
Ich bin überrascht, dass niemand eine Antwort gepostet hat, die Hashing verwendet hat. Es ist eine sehr größeneffiziente Methode zum Testen der exakten Saite.
Die Daten können nur schwer kopiert / eingefügt werden, da sich in der Mitte des Codes ein Null-Byte befindet. Hier ist ein Hex-Dump des Codes zu Testzwecken.
quelle
Scala 79
quelle
Pyth, 14
Erstellt einfach die erforderliche Zeichenfolge, vergleicht sie mit der Eingabe und multipliziert sie mit 42.
quelle
m
mir Probleme ...m
die auf jedes Element seiner Eingabe eine Funktion anwendet. Die Eingabe istG
das Alphabet.xGd
Findet die Position desd
Buchstabens im Alphabet imG
Alphabet.h
erhöht das um eins und*d
repliziert den Charakter so oft. Kombiniert außerhalb derm
Funktions
die resultierende Liste von Zeichenfolgen zu einer einzelnen Zeichenfolge undqz
prüft dann , ob das Ergebnis mit der Eingabe übereinstimmt. Boolesche Werte werden als "0
Falsch" und "1
Wahr" dargestellt. Dies*42
ergibt den Wert "42
Wahr" und "0
Falsch".Brachylog (2), 15 Bytes, Sprachnachstellung
Probieren Sie es online!
Und nun zu einer Antwort, die nach einem ganz anderen Prinzip funktioniert als die meisten, die hier zu sehen sind. Dies ist eine Funktionsübermittlung (die Frage gibt nicht an, welche Art von Übermittlung gewünscht wird, aber Funktionen sind standardmäßig zulässig).
Erläuterung
Diese Antwort definiert eine Art von Zeichenfolge: Diejenigen, die a) alle Kleinbuchstaben des Alphabets enthalten, b) in sortierter Reihenfolge sind und c) für die die Anzahl der Vorkommen jedes Zeichens in der Zeichenfolge eine Folge von aufeinanderfolgenden ergibt Ganzzahlen ab 1. (Es sollte klar sein, dass es viele solcher Zeichenfolgen gibt, aber die Zeichenfolge, die wir in Sonderfällen verwenden möchten, ist die kürzeste.) Wenn die Zeichenfolge diese Kriterien erfüllt, addieren wir 16 zur Anzahl der unterschiedlichen Zeichen in Zeichenfolge; Dies ergibt 42, wenn die Zeichenkette diejenige ist, die wir in einem Sonderfall fragen, und mindestens 43 in allen anderen Fällen. (Wenn die Zeichenfolge eines der Kriterien für die Zugehörigkeit zur Kategorie nicht erfüllt, endet die Funktion mit einem Fehler. Dies ähnelt dem Auslösen einer Ausnahme.)
So interpretieren Sie den Quellcode:
quelle
R,
6058Danke für den Vorschlag von @giusppe
quelle
paste
ist hier in Ordnung, und Sie könnenscan(,"")
anstelle von verwendenreadline()
.Python (84)
Nimmt eine abschließende neue Zeile am Ende der Eingabe an.
quelle
raw_input
stattdessen verwendensys.stdin.read
?raw_input
liest nur eine einzelne Zeile; Ich war mir nicht sicher, ob "die Eingabe" immer eine einzelne Zeile sein würde oder ob die Eingabe in späteren Zeilen disqualifiziert werden könnte.Python - 62 Zeichen
quelle
print("".join(x*chr(x+96)for x in range(27))==input())*42
.Perl,
4946 Zeichenzur Verwendung in einem Programm, nicht in der Befehlszeile
$..=chr($+96)x$ for 1..26;$.eq(pop)&&print '42'Grüße
rbo
Bearbeiten: Idee aus Ventero gerissen
quelle
PHP
928887 ZeichenBEARBEITEN
Ersetzt
$j<0
mit$j
undreturn $b==$a?42:0;
mitecho $b==$a?42:0;
Ersetzt
echo $b==$a?42:0;
durchecho($b==$a)*42;
quelle
ECLiPSe Prolog - 173
quelle
JavaScript (91
939498102116)Verwendung: Gibt
a('string')
zurück,42
wenn gemäß Spezifikation gültig, oder0
.http://jsfiddle.net/g25M3/6/
Bearbeiten :
var
Zwei Leerzeichen in entfernt und entferntfor (
.Edit 2 : Geändert
j>0
zuj
, undreturn (z==r)?42:0;
zureturn z==r?42:0
Bearbeiten 3 : Initialisieren
i
miti=''
, ändern(z==r)?42:0
zu(z==r)*42
Edit 4 : Ändern
for(;i<27;i++)
zuwhile(i++<26)
Edit 5 : Ändern
i=r='';while(i++<26)
zufor(i=r='';i++<26;)
undfor(j=i;j;j--)
zufor(j=i;j--;)
quelle
var
Variablen deklarieren;)for (
.return(z==r)?42:0;
mitreturn z==r?42:0
j>0
könnte nurj
ich denke sein.JavaScript 1.8, 99 Zeichen
Ich wage dich, einen Sinn daraus zu machen :)
quelle
PHP - 59
Es wird vorausgesetzt, dass mindestens 1 Eingang über cli bereitgestellt wird
Es funktioniert mehr oder weniger, mit der Ausnahme, dass md5 technisch mit dem Hashing-Algorithmus dupliziert werden kann.
quelle
PowerShell v2 +, 47 Byte
Erstellt einen Bereich
1..26
, füttert diesen durch eine Schleife mit|%{...}
. Bei jeder Iteration verwenden wir den Komma-Operator , um ein Array-Literal des Stroms[char]
multipliziert mit der aktuellen Schleifennummer zu erstellen. Wir-join
konstruieren dann alle zusammen den Stringabbcccdddd...
und verwenden dann einen-ceq
Vergleich mit Groß- und Kleinschreibung gegen unsere Eingabe$args
, was entweder$TRUE
oder ergibt$FALSE
. In PowerShell können boolesche Werte implizit als1
oder umgewandelt werden0
, was hier mit der geschieht42*
. Wird ausgedruckt,42
wenn die Eingabe ist,abbccc...zzzzzzzzzzzzzzzzzzzzzzzzzz
und wird0
sonst ausgegeben .quelle
K, 26 Bytes
Vielen Dank
quelle
{$[x~.Q.a@&1+!26;42;]}
für 22 Bytes.42*(&!27)~-96+"j"$
für 18 Bytes (Portierung meiner OK- Antwort).VBA 91
Es gab keine VBA-Antworten, aber das funktioniert:
quelle
o="":For i=1To 26:o=o &String(i,Chr(i+96)):Next:?-42*([A1]=o)
A1
als Eingabe.APL (Dyalog) ,
1817 BytesProbieren Sie es online!
Vier offensichtliche Bytes können gespeichert werden, wenn wir Großbuchstaben verwenden dürfen.
42
42/⍨
if (lit. repliziert von)⍞
Zeicheneingabe≡
ist identisch mit819⌶
die Kleinbuchstaben⎕A
Ein Lphabet/⍨
repliziert von⍳
eins durch26
26quelle
Clojure - 61 Zeichen
Nutzt die folgenden Fakten aus:
quelle
Javascript 144
Kann wahrscheinlich deutlich verbessert werden, Rekursion war mir schon immer ein Kopf weit.
Komprimiert
Weniger komprimiert
quelle
Delphi, 127
Dieser liest die Zeichenkette von der Eingabe, vergleicht sie, schreibt 42, wenn die Eingabe bis zur letzten übereinstimmt
z
.Delphi, 157
Delphi, 188
Diese Version verwendet keine Funktion, die im Vergleich zur vorherigen Version dieser Technik einige Zeichen spart:
Delphi, 213
Leider etwas lang, hauptsächlich wegen der langen Schlüsselwörter von Delphi und der Notwendigkeit, Konsolenanwendungen zu initialisieren, bevor sie Ausgaben schreiben können.Beachten Sie auch, dass ich CmdLine um 77 Zeichen erhöht habe, da dies der Offset war, den ich zum Überspringen meines lokalen ausführbaren Pfads benötigte (Delphi hat keinen direkten Argumentzeiger). Passen Sie es an Ihre eigenen Einstellungen an (kann zu 1 Zeichen weniger führen, wenn der Versatz <10 ist).
quelle
program a;
Zeile auch weglassen . Und die Klammernb^<>Char(c)
,i>0
undi=27
können entfernt werden.if i>0then
würde kompilieren!)