Inspiriert von einem Mem, das ich heute früher gesehen habe.
Herausforderungsbeschreibung
Betrachten Sie ein unendliches Alphabetraster:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
...
Nehmen Sie ein Wort ( CODEGOLF
in diesem Beispiel) und machen Sie es zu einer Untersequenz des Rasters. Ersetzen Sie nicht verwendete Buchstaben durch ein Leerzeichen und entfernen Sie die Buchstaben am Ende des unendlichen Rasters insgesamt:
C O
DE G O
L
F
Beispiele
STACKEXCHANGE
ST
A C K
E X
C H
A N
G
E
ZYXWVUTSRQPONMLKJIHGFEDCBA
Z
Y
X
W
V
U
T
S
R
Q
P
O
N
M
L
K
J
I
H
G
F
E
D
C
B
A
F
F
ANTIDISESTABLISHMENTARIANISM
A N T
I
D I S
E ST
AB L
I S
H M
E N T
A R
I
A N
I S
M
Anmerkungen
- Nachgestellte Leerzeichen sind zulässig.
- Sie müssen
die letzteZeile nicht mit Leerzeichen auffüllen. Wenn die Eingabe beispielsweise lautetABC
, können Sie nurABC
ohne 23 nachgestellte Leerzeichen ausgeben . - Sie können davon ausgehen, dass die Eingabe mit
[A-Z]+
Regex übereinstimmt . - Alternativ können Sie auch Kleinbuchstaben verwenden. In diesem Fall stimmt die Ausgabe überein
[a-z]+
. - Sie müssen eine neue Zeile verwenden (
\n
,\r\n
oder gleichwertig) Linien zu trennen, dh eine Liste von Strings ist nicht eine richtige Ausgabeformat. - Dies ist eine Code-Golf- Herausforderung, also mach deinen Code so kurz wie möglich!
BALLOON
(zwei benachbarte Zeichen, die gleich sind).Antworten:
Schale , 15 Bytes
Probieren Sie es online!
Erläuterung
quelle
Java 10,
161159152 Bytes-2 Bytes dank @Nevay .
-7 Byte direkt drucken, anstatt einen String zurückzugeben und auf Java 10 zu konvertieren.
Erläuterung: "
Probieren Sie es hier aus.
Der erste Teil der Methode teilt das Eingabewort in Teile mit einem Trennzeichen.
Zum Beispiel:
CODEGOLF
→CO;DEGO;L;F
oderBALLOON
→B;AL;LO;O;N
.Der zweite Teil durchläuft diese Teile und ersetzt mit der Regex
[^...]
alles, was nicht mit einem Leerzeichen übereinstimmt.Zum Beispiel
.replaceAll("[^CO]"," ")
verlässt dasC
undO
und ersetzt alles andere durch ein Leerzeichen.quelle
B;AL;LO;O;N
?for(char c:s)x+=p<(p=c)?c:";"+c;
.C (gcc) , 69 Bytes
Probieren Sie es online!
quelle
Perl 5 , 44 Bytes
40 Byte Code + 4 für
-lF
.Probieren Sie es online!
quelle
Python 2 , 92 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 79
Bearbeiten Da ein führender Zeilenumbruch akzeptiert wird, kann ich 2 Bytes einsparen
Für 1 Byte mehr kann ich Eingaben in Klein- oder Großbuchstaben akzeptieren:
Weniger golfen
Prüfung
quelle
\n
Zeilen in Backticks für -1 Byte durch eine wörtliche Newline ersetzen.MATL ,
2423 BytesVerwendet Kleinbuchstaben.
Probieren Sie es bei MATL Online!
Erläuterung
quelle
Japt ,
1816 Bytes-2 Bytes dank @Shaggy
Nur Eingabe in Großbuchstaben.
Probieren Sie es online!
Erläuterung
Wechseln Sie zu alternativen Variablen, wobei
B
das Großbuchstaben ist.Teilen Sie die Eingabezeichenfolge auf Zeichen auf, bei denen das erste größer oder gleich (
¨
) dem zweiten ist.Ordnen Sie jede Partition der Funktion zu. Dabei
X
handelt es sich um die aktuelle Partition.Ordnen Sie jedes Zeichen im Großbuchstaben dem folgenden zu, wobei
Z
es sich um den aktuellen Buchstaben handelt.Entfernen Sie alle Buchstaben in der aktuellen Partition aus dem aktuellen Buchstaben. Wenn der aktuelle Buchstabe in der aktuellen Partition enthalten ist, führt dies zu einer leeren Zeichenfolge.
Wenn dies der Fall ist (keine leere Zeichenfolge), geben Sie ein Leerzeichen (
S
) zurück, andernfalls den aktuellen Buchstaben.Verbinden Sie das Ergebnis der vorherigen Zeile mit Zeilenumbrüchen und drucken Sie das Ergebnis aus.
quelle
r"[^{Z}]"S
scheint ein bisschen lächerlich, aber ich kann auch keinen besseren Weg finden ...kX
!kX ?S:Z
umoX ªS
zwei Bytes zu speichernPyth, 18 Bytes
Probieren Sie es hier aus.
Führender Zeilenumbruch in der Ausgabe, Kleinbuchstaben.
quelle
Jelly , 19 Bytes
Probieren Sie es online!
quelle
OI<1®;
->>2\0;
um ein Byte zu speichern (ich habe es auch>2\0;œṗµØAf€ȯ€⁶µ€Y
für 18 getan , was ich persönlich einfacher zu analysieren finde)BALLOON
oder so.<2\1;¬
; Naja.C (gcc)
9163 Bytes-28 dank nur ASCII
Probieren Sie es online!
Bisherige:
Ja, es gibt eine kürzere Lösung, aber ich habe festgestellt, nachdem ich diese geschrieben habe ... Probieren Sie es online aus!
quelle
Mathematica, 101 Bytes
Split
die Eingabe in streng ansteigende Buchstabenfolgen durch Vergleich benachbarter Buchstaben mitOrder
. WennOrder[x,y] == 1
, dannx
stehty
im Alphabet und kann somit in der gleichen Zeile stehen.Erstellen Sie für jede Buchstabenfolge ein Muster, das den Zeichenfolgen
Except
für diese Buchstaben entspricht.#|##
ist eine Abkürzung fürAlternatives
. Ersetzen Sie Buchstaben von, dieAlphabet
dem Muster entsprechen, durch Leerzeichen.Illustration der Zwischenschritte:
quelle
Golfscript,
2221 BytesProbieren Sie es online!
-1 Byte dank sorgfältiger abschließender Neudefinition des Einbaus
n
.Erklärung (mit einer etwas anderen Version):
quelle
Netzhaut , 80 Bytes
Probieren Sie es online!
Es gibt immer genau eine führende Zeile. Der Code stellt dem Wort etwas klobig das Alphabet voran, zusammen mit einer Markierung (Semikolon). Anschließend wird die Markierung auf den ersten Buchstaben des Wortes verschoben, während alle anderen Buchstaben in Leerzeichen umgewandelt werden. Es wird auch der erste Buchstabe des Wortes entfernt. Dies wird solange wiederholt, bis der erste Buchstabe des Wortes nicht mehr hinter dem Marker steht. Anschließend werden diese Markierung und der Rest des Alphabets gelöscht und durch eine neue Zeile und das Alphabet erneut durch eine Markierung ersetzt. Dies wird so oft wiederholt, bis das eingegebene Wort leer ist. Anschließend werden das letzte Alphabet und die letzte Markierung entfernt, sodass die gewünschte Ausgabe erhalten bleibt.
quelle
05AB1E , 18 Bytes
Probieren Sie es online!
05AB1E
ć
(Extrakt 1) hinterlässt nach dem Extrahieren des letzten Elements einen leeren String / eine leere Liste auf dem Stack. Diese Lösung wäre 1-2 Bytes kürzer, wenn es das nicht gäbe.quelle
ð,
Bedeutet eigentlich "Leerzeichen und Zeilenumbruch drucken".Retina ,
130126 BytesProbieren Sie es online! Bearbeiten: 4 Bytes mit dem Alphabet-Generator von @ MartinEnder gespeichert. Erläuterung:
Füge das Alphabet an.
Richten Sie so viele Buchstaben wie möglich an ihrer Position im Alphabet aus.
Beginnen Sie eine neue Zeile vor dem ersten Buchstaben, der nicht ausgerichtet werden konnte.
Löschen Sie das Alphabet, aber wiederholen Sie alles, bis keine falsch ausgerichteten Buchstaben mehr vorhanden sind.
quelle
q / kdb + ,
4845 BytesLösung:
Probieren Sie es online!
Hinweis: Die Verknüpfung ist mit einem K (oK) -Port dieser Lösung verbunden, da für q / kdb + kein TIO vorhanden ist.
Beispiele:
Erläuterung:
Q wird von rechts nach links interpretiert. Die Lösung ist in zwei Teile geteilt. Teilen Sie zuerst die Zeichenfolge auf, wobei das nächste Zeichen kleiner oder gleich dem aktuellen ist:
"STACKEXCHANGE"
->"ST","ACK","EX","CH","AN","G","E"
Nehmen Sie dann eine Zeichenfolge mit 26 Leerzeichen und wenden Sie die Eingabe an den Indexen an, an denen die Eingabe im Alphabet angezeigt wird, und drucken Sie auf stdout.
"__________________________"
->__________________ST______
Nervenzusammenbruch:
Anmerkungen:
quelle
Powershell,
7063 Bytes-7 Bytes danke @Veskah
Probieren Sie es online!
Erläuterung:
Für jedes Zeichen im splatted Argument:
$x
und$x
Löschwert (rv
ist ein Alias für Remove-Variable ), wenn ein Code des aktuellen Zeichens kleiner oder gleichwertig (-le
) mit einem Code des vorherigen Zeichens ist.$x
und speichern Sie es$x
. Außerdem wird ein vorheriger Zeichenwert aktualisiert.Letzte Ausgabe
$x
.quelle
|% *ht
um einige Bytes zu speichern, sieht aber so aus, als wäre es ausgeglichen.Jelly ,
2421 Bytes3 Bytes dank Erik dem Outgolfer.
Probieren Sie es online!
quelle
SOGL V0.12 , 22 Bytes
Probieren Sie es hier aus!
quelle
JavaScript (ES6), 87 Byte
Akzeptiert Groß- oder Kleinschreibung. Die Ausgabe entspricht dem Fall der Eingabe.
Tests
Code-Snippet anzeigen
quelle
Haskell,
81 7473 BytesDank Laikoni 1 Byte gespart !
Probieren Sie es online aus.
Haskell Umarmungen Optimierungen
Mit dem Hugs-Interpreter kann ich ein weiteres Byte speichern, indem ich Folgendes
(!cycle$['A'..'Z']++"\n")
anstelle von: tue(!cycle(['A'..'Z']++"\n"))
, aber ersteres gefällt GHC nicht . (Dies ist jetzt veraltet. Laikoni hat diese Zeile bereits so umgeschrieben, dass 1 Byte gespart wurde.)Anscheinend erfordert Hugs auch keine runden Klammern um den Listenmustervergleicher, sodass ich zwei weitere Bytes einsparen könnte, die von:
q@(w:y)!(x:z)
bis gehenq@(w:y)!x:z
.quelle
a=['A'..'Z']++'\n':a;(!a)
. Interessant bis jetzt, dass Hugs etwas lockerere Regeln zu haben scheint.a=...:a
Trick. Vielen Dank!Python 3 ,
87-85BytesProbieren Sie es online!
quelle
J , 39 Bytes
Probieren Sie es online!
quelle
Kohle , 15 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
APL (Dyalog Classic) , 20 Byte
Probieren Sie es online!
quelle
K (NGN / k) ,
2928 BytesProbieren Sie es online!
{
}
Funktion mit Argumentx
>':x
Ist es für jedes Zeichen größer als das vorherige?~
negieren&
wo (bei welchen indizes) haben wir wahr(
)_x
Schneiden Siex
an diesen Indizes, und geben Sie eine Liste von Zeichenfolgen zurück{
}'
für jede dieser Saitendas englische Alphabet
x?
Finden Sie den Index des ersten Vorkommens jedes Buchstabens inx
, verwenden Sie0N
(einen speziellen "Null" -Wert), wenn er nicht gefunden wirdx@
Indexx
damit; Indizieren mit0N
Rückgaben" "
, sodass wir eine Zeichenfolge der Länge 26 erhalten, in der sich die Buchstaben vonx
an ihren alphabetischen Positionen befinden und alles andere Leerzeichen sindquelle
R ,
129117 BytesProbieren Sie es online!
Erklärung (ungolfed):
quelle
R , 95 Bytes
Durchlaufen Sie das Großbuchstaben einfach wiederholt, während Sie einen Zähler um 1 vorrücken, wenn Sie den Buchstaben an der Zählerposition des Wortes finden und den Buchstaben ausdrucken, andernfalls ein Leerzeichen.
Probieren Sie es online!
quelle
GolfScript , 37 Bytes
Probieren Sie es online!
Ich habe ein Golfscript unter einem anderen Namen geschrieben, aber es hatte eine falsche Ausgabe.
quelle