Diese Herausforderung ist eine Hommage an den Gewinner von Best Picture bei den Oscars 2017, La La Land Moonlight !
Schreiben Sie eine Funktion / ein Programm, die / das eine Zeichenfolge verwendet, die nur Buchstaben enthält [A-Za-z]
, die vier in Sätzen .,'?
und Leerzeichen des Alltags üblichen Symbole , und die die Zeichenfolge im Stil von La La Land ausgibt.
Um genauer zu sein, nehmen Sie die Buchstaben bis einschließlich der ersten Vokalgruppe und drucken / geben Sie sie zweimal aus, wobei Sie jedes Mal ein Leerzeichen hinzufügen, und drucken / geben Sie dann die gesamte Zeichenfolge aus. y ist ein Vokal in dieser Herausforderung. Zeichensetzung und Großschreibung sollten beibehalten werden.
Sie können davon ausgehen, dass alle Zeichenfolgen mindestens einen Vokal enthalten und dass alle Zeichenfolgen mit einem Buchstaben beginnen.
Testfälle:
Land
La La Land
Moonlight
Moo Moo Moonlight
quEueIng
quEueI quEueI quEueIng
This isn't a single word.
Thi Thi This isn't a single word.
It's fun to play golf
I I It's fun to play golf
Ooo
Ooo Ooo Ooo
I'm okay
I I I'm okay
Hmm, no. There will be at least one vowel, but it can be anywhere.
Hmm, no Hmm, no Hmm, no. There will be at least one vowel, but it can be anywhere.
Why is y a vowel?
Why Why Why is y a vowel?
Das ist Code-Golf, also gewinnt der kürzeste Code in jeder Sprache. Erklärungen sind erwünscht , auch in den Hauptsprachen.
MOONLIGHT
. Und nur zum Spaß:Why did the chicken cross the road?
Antworten:
Sed 30 Bytes
quelle
*
anstelle von verwenden\+
?05AB1E ,
231918 BytesDank Okx 1 Byte gespeichert .
Probieren Sie es online! oder als Testsuite
Erläuterung
quelle
Jelly ,
24 22 20 1914 Bytes-5 Bytes mit einem Trick aus Emignas genialer Antwort (10 in der isVowel-Liste suchen)
Probieren Sie es online! (nicht ganz sicher, wie man eine Testsuite für dieses vollständige Programm erstellt)
15- Byte-Alternative:
Hier ist die vollständige Testsuite.
Wie?
quelle
Python, 61 Bytes
Hier kommt die erste nicht auf Regex basierende Sprache (mit Regex).
1 Byte dank Neil gespeichert .
quelle
JavaScript (ES6), 40
46Bearbeiten Sie 5 + 1 Bytes, die als @Arnauld gespeichert wurden
Übermäßig lang im Vergleich zu anderen mit dem gleichen Trick (wie üblich)
quelle
'$& $& $&'
- ich vergesse immer die speziellen Dollarzeichen. Danke. Leider ist es jetzt wirklich eine Antwort auf Martins Retina.^
wird in der Retina benötigt, die - glaube ich - standardmäßig nach allen Übereinstimmungen sucht. Aber brauchen wir das hier wirklich?x=>(y=/.*?[aeiouy]+/i.exec(x)+' ')+y+x
Retina , 24 Bytes
Probieren Sie es online!
quelle
Batch, 180 Bytes
Implementiert eine Zustandsmaschine.
g
Verfolgt, ob wir jemals einen Vokal gesehen haben, so wissen wir, ob der aktuelle Buchstabe ausgegeben oder mit dem nächsten Buchstaben fortgefahren werden soll, wenn er kein Vokal ist.quelle
PowerShell ,
4647413938 ByteProbieren Sie es online!
Vielen Dank an Maarten Bamelis für die Fehlerbehebung
6 Bytes dank Rynant gespart
23 Bytes dank Joey gespeichertquelle
Rubin,
313230 BytesZwei Bytes gespart dank GB und Cyoce.
quelle
PHP,
5554 BytesAnmerkung: Die codierte Version verwendet die IBM-850-Codierung.
Laufen Sie wie folgt:
Erläuterung
Nur ein regulärer Ausdruck, der mit einem beliebigen Zeichen am Anfang der Zeichenfolge ersetzt wird, gefolgt von einer beliebigen Anzahl von Vokalen (verwenden Sie die
i
Option für Groß- / Kleinschreibung). Diese Erfassungsgruppe wird dann zweimal gedruckt, gefolgt von der gesamten Zeichenfolge.Optimierungen
-R
, um$argn
verfügbar zu machen (Thx Titus)quelle
Javascript (ES6), 38 Byte
quelle
Perl, 25 + 1 (
-p
Flagge)quelle
Perl 6 , 30 Bytes
Probieren Sie es online!
quelle
{S:i/.*?<[aeiouy]>+/$/ $/ $//}
C
202196195193190180i,j,k,m,n;f(char*a){if((a[i/12]-"AEIOUY"[i++%6])%32==0)k=n=24-(i%12);else if(k&&!n--){m=j=(i-13)/12;for(i=0;i<j*2;)printf("%c%c",a[i%j],(i==j-1)*32),i++;printf(" %s", a);}m?:f(a);}
Probieren Sie es online!
Was bleibt zum Golfen:
• Zwei Ausdrucke in einen zusammenfalten.
• Das Drucken meines Leerzeichens kann in geändert werden
%*c
Ich bin mir sicher, dass das Logik .• Ich benutze Bedingungen, die irgendwie entfernt werden können
•
j=(i-13)/12
kann wahrscheinlich verkürzt werden.• [AY] bedingte Überprüfungen, ob
==0
dies normalerweise nicht erforderlich ist, obwohl ich gerade dabei bin (ich habe versucht, das If-else zu wechseln und das Ganze zu==0
verwerfen, aber das erfordert das Hinzufügen von {Klammern} und das Erhöhen der Bytegröße)Tricks, die ich zum Golfspielen benutzt habe:
• Kombinierte Suche nach Double-for-Loop-Strings mit Modulo für die x-Achse und Integer-Division für die y-Achse (Eingabe-String vs. Vokal-String). (Die X-Achse wird zweimal wiederholt, bevor sie einmal auf der Y-Achse iteriert wird. Das erste Mal mit [AZ] und das zweite Mal mit [az], wobei der Zeichenwert 32 als Differenz verwendet wird.
• Umgangen werden muss "[AY] und [ay]", indem nur der Abstand zwischen Zeichensätzen und Modulo 32 genommen wird. Auf diese Weise wird der Abstand 0 (AA) oder der Abstand 32 (aA).
• Wiederverwenden von Integer-Variablen, die nicht mehr als Boolesche Variablen verwendet werden.
• Rufen Sie eine Funktion mit derselben Zeichenfolge rekursiv auf, um sie zu verarbeiten und eine zweite for-Schleife zu vermeiden.
• Setzen Sie BOOL-Werte auf die Logik zum Setzen einer anderen Variablen. (zB bool = i = 5;), um beide mit einer Klappe zu schlagen.
• Ternary Empty-True-Exploit-Missbrauch. (GCC)
Lesbares Format:
10 Bytes dank Keyu Gan abgeschlagen (in Kommentaren)
quelle
j=(i-13)/12
Kann wahrscheinlich verkürzt werden.i=j=k=m=n=0;
?i,j,k,m,n;
für die Initialisierung verwenden.MATL, 33 Bytes
Probieren Sie es bei MATL Online aus
Erläuterung
quelle
'(^.*?[yY%s]+)'13Y2YD'$1 '8:)YX
speichert 2 Bytes'(^.*?[%s]+)'19Y2YD'$1 '8:)YX
speichert weitere 219Y2
existierte nicht, als diese Antwort leider eingereicht wurdeV ,
21, 20 BytesProbieren Sie es online!
Erläuterung:
Hexdump:
Alternative Version (21 Byte):
Probieren Sie es online!
Dies nutzt die lächerliche Regex-Komprimierung und schafft es immer noch, von den anderen Golfsprachen in den Arsch getreten zu werden. Als Referenz ist dies ungefähr zwei Drittel der Länge der regulären "unkomprimierten" Version, nämlich:
Erläuterung:
Hier ist ein Hexdump:
quelle
Python 3 ,
7568 BytesProbieren Sie es online!
Erläuterung:
Generiert einen booleschen Wert für jedes Zeichen in der Eingabezeichenfolge, basierend darauf, ob es sich um einen Vokal handelt oder nicht, und ermittelt den niedrigsten Index des
0
ersten Nicht-Vokals (ohne das erste Zeichen). Die Teilzeichenfolge wird zweimal an diesen Index zurückgegeben, getrennt durch Leerzeichen und die ursprüngliche Zeichenfolge.quelle
Clojure,
192188181 Bytes-4 Bytes durch Inlining
first-sp-pred
(whoops).-7 Bytes durch Entfernen einiger fehlender Leerzeichen
Das war weitaus herausfordernder als ich gedacht hatte! Ich analysiere die Zeichenfolge manuell ... da ich mich noch nicht mit Regex beschäftigt habe: /
Informationen zur Aufschlüsselung finden Sie im Pre-Golf-Code:
quelle
Python 3 ,
10196 BytesProbieren Sie es online!
eine nicht-reguläre Lösung
Kommentiert:
quelle
w=c in a
durchw=c in'aAeEiIoOuUyY'
Ohm , 19 Bytes (CP437), nicht konkurrierend
Neue Sprache, und als solche musste ich einige neue Funktionen hinzufügen, um diese Arbeit zu machen, was diese leider nicht wettbewerbsfähig macht (weil Lücken).
Erläuterung:
quelle
Q
), Subarray-Suche ( ), String-u
/ Array-Slicing (├
) und Vokalkonstanten (αv
undαy
).PHP,
69 6553 Bytesbenötigt PHP 5.3 oder neuer. Laufen Sie als Pipe mit
-F
oder probieren Sie einige Versionen online aus .4 Bytes gespart (und den Code korrigiert) mit Regex, der von @aross gestohlen wurde;
10 weitere mit
preg_filter
stattpreg_match
und-F
und zwei mit verbesserter Regex.
7581 Bytes für eine Nicht-Regex-Version:benötigt PHP 5 oder neuer; ersetzen
?:
mit?1:
für ältere PHP. Laufen Sie mit-nR
Nervenzusammenbruch
quelle
This isn't a single word
T T This isn't a single word.
i
Modifikator, der die Groß- und Kleinschreibung des Regex unempfindlich macht. Die andere Version überprüfte nur Kleinbuchstaben. Fest.R, 49 Bytes
sub("(.*?[aeiouy]+)","\\1 \\1 \\1",scan(,""),T,T)
Regex-basiertes Ersetzen, stimmen Sie alles ab, bis kein Vokal mehr vorhanden ist, erfassen Sie es und ersetzen Sie es dreimal von selbst.
scan
Warten Sie auf eine Typeneingabedouble
, damit dercharacter
Typ verwendet wird. Wir müssen ihm zwei Argumente geben. Das erste ist die Standard-Leerzeichenfolge für stdin, und das zweite ist in der R-Auswertung nur zulässig,c
da siecharacter
in diesem Kontext nicht mehrdeutig ist .T
steht fürTRUE
und speichere ein Zeichen als 4. und 5. Parameter, um zu sagen, dass Groß- und Kleinschreibung ignoriert und PCRE verwendet werden soll (die Gier ist nicht mit der regulären Syntax identisch).4 Bytes mit freundlicher Genehmigung von Sumner18 zusammen mit dem Tio- Link zum laufenden Code gespeichert
quelle
Java 8,
147140 BytesGolf gespielt:
Ungolfed:
Hinweis: Das Literal
2
im Code ist der Wert vonjava.util.regex.Pattern.CASE_INSENSITIVE
.quelle
import java.util.regex.*;
, um einige Bytes zu speichern.C, 123 Bytes
Anrufen als:
quelle
Pyke , 22 Bytes
Probieren Sie es online!
Dies ist 4 Bytes länger als es eigentlich sein sollte, wenn ich einen kürzeren Weg implementiert hätte, um Vokale einschließlich zu erhalten
y
.quelle
Retina, 24 Bytes
Probieren Sie es online aus
quelle
Python 3 ,
130102 BytesProbieren Sie es online!
Verwendet keinerlei Funktion und keine externen Bibliotheken! (Es sei denn, Druck und Eingabe gelten als Funktionen, die sie ausführen).
Funktioniert so, dass es zu Beginn des Titels aus den Konsonanten in die 'Vokalzone' gelangt. Befindet es sich in der Vokalzone und erkennt einen Konsonanten, wird der Titel gedruckt.
28 Bytes dank @LliwTelracs gespart
quelle
MATLAB / Octave,
5851 Bytes7 Bytes gespart dank @HughNolan
Erstellt eine anonyme Funktion mit dem Namen,
ans
die durch Übergabe einer Zeichenfolge aufgerufen werden kann:ans('Land')
Online Demo
Aus Gründen der MATLAB-Kompatibilität
$0
sollte anstelle$1
der obigen Funktion verwendet werden.quelle
@(x)regexprep(x,'^.*?[aeiouyAEIOUY]+','$0 $0 $0 ');
- Auch Matlab scheint seltsamerweise $ 0 statt $ 1 zu verwendenC (GCC) ,
111110 BytesProbieren Sie es online!
Dies nutzt nur Bibliotheksfunktionen
strspn()
undstrcspn()
und nutzt die Reihenfolge , in der gcc Funktionsparameter auswertet. Etwas weniger golfenDanke an @gastropner für -1.
quelle
Pyth - 24 Bytes
Test Suite .
quelle
y
?