Aufgrund technischer Einschränkungen von Stack Exchange wird der Titel falsch gerendert. Der richtige Titel für diese Herausforderung ist
Mach ein
Word Icicle!
Word Icicle
Word cicle
ord cicle
ord icle
ord i le
or i le
or i l
or l
or
r
Die heutige Herausforderung besteht darin, aus dem Eingangswort Eiszapfen zu machen. Führen Sie die folgenden Schritte aus, wenn Sie eine Zeichenfolge mit vollständig druckbarem ASCII-Code und mindestens 2 Zeichen ohne Leerzeichen angeben:
Gibt den aktuellen Status der Zeichenfolge aus.
Ersetzen Sie das lexikalisch kleinste Zeichen (außer Leerzeichen) durch ein Leerzeichen. Wenn es einen Gleichstand gibt, ersetzen Sie das Zeichen ganz links.
Wiederholen Sie dies in aufeinanderfolgenden Zeilen, bis die Zeichenfolge nur noch 1 Zeichen ohne Leerzeichen enthält.
Dies erzeugt den Effekt, dass die Eingabezeichenfolge so aussieht, als würde sie schmelzen ...
I'm Melting!!!
I'm Melting !!
I'm Melting !
I'm Melting
I m Melting
m Melting
m elting
m lting
m ltin
m lt n
m t n
t n
t
Regeln
Nach einigen Iterationen wird Ihre Ausgabe mit ziemlicher Sicherheit nachgestellte Leerzeichen in jeder Zeile enthalten. Wenn Sie diese abschneiden möchten, ist dies zulässig.
Möglicherweise wird eine Leerzeile nachgestellt, jedoch nicht mehr.
Denken Sie daran, dass die Eingabe möglicherweise mehrere Leerzeichen enthält, diese werden jedoch alle effektiv übersprungen. Zum Beispiel sollte die Eingabe
a a
gebena a a
Sie können Eingaben als Liste von Zeichenfolgen verwenden, wenn Sie möchten. Für die Ausgabe können Sie eine Liste von Zeichenfolgen, eine einzelne Zeichenfolge mit Zeilenumbrüchen oder eine Zeichenmatrix / ein 2D-Array zurückgeben oder drucken. Im Allgemeinen bevorzuge ich zulässige E / A-Formate, sodass andere Formate höchstwahrscheinlich zulässig sind, solange sie konsistent sind und eindeutig der richtigen Ausgabe entsprechen. Im Zweifelsfall können Sie gerne nachfragen. Wie üblich sind vollständige Programme oder Funktionen zulässig.
Denken Sie daran, dies ist ein Wettbewerb, um die kürzeste Antwort in jeder Sprache zu geben! Wenn Sie in Java antworten möchten, versuchen Sie, die kürzeste Java-Antwort (in Byte) zu erstellen, die Sie können.
Testfälle
Hello World! -->
Hello World!
Hello World
ello World
ello orld
ello orl
llo orl
lo orl
o orl
o or
or
r
AbCdEfGhIjKlMnOpQrStUvWxYz -->
AbCdEfGhIjKlMnOpQrStUvWxYz
bCdEfGhIjKlMnOpQrStUvWxYz
b dEfGhIjKlMnOpQrStUvWxYz
b d fGhIjKlMnOpQrStUvWxYz
b d f hIjKlMnOpQrStUvWxYz
b d f h jKlMnOpQrStUvWxYz
b d f h j lMnOpQrStUvWxYz
b d f h j l nOpQrStUvWxYz
b d f h j l n pQrStUvWxYz
b d f h j l n p rStUvWxYz
b d f h j l n p r tUvWxYz
b d f h j l n p r t vWxYz
b d f h j l n p r t v xYz
b d f h j l n p r t v x z
d f h j l n p r t v x z
f h j l n p r t v x z
h j l n p r t v x z
j l n p r t v x z
l n p r t v x z
n p r t v x z
p r t v x z
r t v x z
t v x z
v x z
x z
z
PPCG is da BEST -->
PPCG is da BEST
PPCG is da EST
PP G is da EST
PP G is da ST
PP is da ST
P is da ST
is da ST
is da T
is da
is d
is
s
({({})({}[()])}{}) -->
({({})({}[()])}{})
{({})({}[()])}{})
{ {})({}[()])}{})
{ {}) {}[()])}{})
{ {}) {}[ )])}{})
{ {} {}[ )])}{})
{ {} {}[ ])}{})
{ {} {}[ ] }{})
{ {} {}[ ] }{}
{ {} {} ] }{}
{ {} {} }{}
{} {} }{}
} {} }{}
} } }{}
} } } }
} } }
} }
}
Antworten:
Python 2 ,
71-70Bytes-1 Byte dank ovs
Probieren Sie es online!
quelle
Retina , 28 Bytes
Probieren Sie es online! Erläuterung:
Wiederholen, solange der Eingabewert nicht leer ist.
Gibt den aktuellen Wert aus.
Führen Sie den Rest des Skripts für den Wert aus. Führen Sie dann das Ergebnis dieses Skripts als Skript für den Wert aus.
Sortieren Sie die Zeichen in der Reihenfolge.
Wählen Sie das erste nicht leere Zeichen aus und geben Sie ein Retina-Programm aus, das das erste literalische (
$\
) Vorkommen dieses Zeichens ($&
) durch ein Leerzeichen ersetzt (nachfolgendes Leerzeichen im Originalcode).quelle
APL (Dyalog Unicode) ,
1811 BytesProbieren Sie es online!
verwendet
⎕io←1
; gibt ein Array von Strings zurück (Vektor von Zeichenvektoren)quelle
∪
nötig?⍋∘⍋
:)05AB1E , 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
{ðKv=yð.;
war meins, nett.:
alle Zeichen, anstatt.;
die ersten zu ersetzen (dh sehen Sie, was Ihr 7-Byte mit dem!
im Testfall macht). Außerdem wird in der Abfrage ausdrücklich das Ausschließen von Leerzeichen angegeben, sodass Ihr 7-Byte-Code nicht für die Eingabe mit mehreren Leerzeichen geeignet ist. PS: Schöne Antwort, Luis! +1 von mir. :).;
. Ich erinnere mich buchstäblich, dass ich am 1. Mai dieses Jahres damit zu kämpfen hatte, jetzt, wo Sie es erwähnen.Pyth,
171413 BytesProbieren Sie es hier aus
quelle
sed
-rn
, 142143bytesProbieren Sie es online!
(Hinweis: Das Programm enthält Registerkarten.)
Da sed kein Konzept für die lexikografische Reihenfolge hat, musste ich den Satz druckbarer ASCII-Zeichen fest codieren, und es nimmt mehr als die Hälfte der Bytecount in Anspruch.
Wenn Sie sed 4.2.2 verwenden, wird bytecount um 2 reduziert, da dies unbenannte Labels zulässt. Probieren Sie es online aus!
-r
ermöglicht erweiterte reguläre Ausdrücke (Golfspieler)-n
Deaktiviert das implizite Drucken des Musterbereichs am Ende des ProgrammsDer Musterraum beginnt mit der Eingabe
:a
labela
, das ist die Hauptprogrammschleifep
Drucken Sie den Musterbereich (ausgefallener Name für den Puffer)Jetzt hängen wir den Satz druckbarer ASCII-Zeichen an (ohne Leerzeichen)
s/$/ ABCDEFGHIJKLMNOPQRSTUVWXYZ/
Fügen Sie eine Registerkarte als 1-Byte-Trennzeichen gefolgt vom Großbuchstaben hinzus<tab>
Ersatzzeichen (sed kann ein beliebiges Zeichen als Trennzeichen verwenden. In diesem Fall wird die Registerkarte verwendet, um ein Byte vor dem Entweichen aus dem Zeichen zu schützen./
)\w+$
Das Großbuchstaben haben wir gerade angehängt<tab>
mit!"#$%\&'()*+,-./0123456789:;<=>?@&[\\]^_\`\L&{|}~<tab>
Beachten Sie, dass\L&
es sich bei den übrigen Zeichen um die Kleinbuchstabenversion des Großbuchstaben handelt:b
Beschriftungb
: Entfernen Sie Zeichen aus dem Anfangssatz, die in der Eingabe nicht vorhanden sind/(.).* \1/!
wenn das erste Zeichen aus dem ASCII-Satz nicht in der Eingabe enthalten ists/ ./ /
entfernen Sie estb
Wiederholen,b
bis die Ersetzung fehlschlägts/(.)(.*) \1.*/ \2/
Ersetzen Sie das erste Zeichen im ASCII-Satz, das in der Eingabe vorhanden ist, durch ein Leerzeichen, und entfernen Sie den ASCII-Satzta
rekursierenquelle
sed
mindestens 4 Bytes sparte: Probieren Sie es online aus!Ruby ,
60585547 BytesProbieren Sie es online!
quelle
a-b=[' ']
unda-b
für eine schnelle -2 BytesR ,
140100 Bytes-40 bytes Danke an Giuseppe!
Probieren Sie es online!
Eine Lösung, die
outer
Giuseppes Magie verwendet, um richtig zu funktionieren, ist mit 104 Bytes länger. Inspiriert von dieser Antwort .Probieren Sie es online!
quelle
rank
!Python 3 , 71 Bytes
Probieren Sie es online!
-4 Bytes dank ovs
quelle
*bool({*a}-{" "})
anstelle vonif{*a}-{" "}else[a]
RecursionError
?if/else
Verknüpfungen,*bool
aber nicht, so ja, Rekursionsfehler wie Ovs sagtePython 2 ,
70696664 BytesProbieren Sie es online!
Danke für 2 Bytes von ovs via using
S and f()
anstelle vonif S:f()
quelle
...If there is a tie, replace the leftmost character...
Regel, das können Sie mitreplace(min(...),' ',1)
Gelee , 8 Bytes
Probieren Sie es online!
Idee
Die Grundidee besteht darin, die Spalten der gewünschten Ausgabe direkt zu erstellen, anstatt die Zeichenfolge zu manipulieren und alle Zwischenergebnisse zurückzugeben.
Wir beginnen mit der Nummerierung der Zeichen der Eingabezeichenfolge in der Reihenfolge, in der sie entfernt werden. Im Moment tun wir so, als würden Leerzeichen ebenfalls entfernt.
Jetzt erstellen wir die Spalten, indem wir jedes Zeichen anhand seines Index in dieser Aufzählung wiederholen.
Alles, was übrig bleibt, ist das Entfernen von Duplikaten, um die Leerzeichen zu berücksichtigen.
Code
quelle
Perl 5
-n
,3734 BytesDrei Bytes mit Hilfe von @TonHospel gelöscht
Probieren Sie es online!
quelle
\Q
allerdings für den letzten Testfall .... das habe ich auch beim ersten mal verpasst!say&&s/\Q$a/ / while($a)=sort/\S/g
. Auch richtig behandelt0
JavaScript,
676665 BytesWeil ich seit einiger Zeit nicht mehr betrunken Golf gespielt habe!
Probieren Sie es online aus
Vielen Dank an DanielIndie für den Hinweis auf 4 redundante Bytes, die das Bier enthielt!
quelle
K (NGN / k) ,
2624 BytesProbieren Sie es online!
quelle
{@[x;y;:;" "]}
hätte, hätte es sein können@[;;:;" "]
. Welche Version von k benutzt du? Ich bin nicht vertraut mit diesen:_ci _ic _dv
.C # (Visual C # Interactive Compiler) , 129 Byte
Probieren Sie es online!
quelle
c!=32
kann seinc>32
;c==32
kann seinc<33
; und(char)999
kann'¡'
(oder ein beliebiges anderes Zeichen oberhalb des druckbaren ASCII-Unicode-Bereichs) sein.while
,for
indem Sie das in ändern und dasvar s=ReadLine()
unds=s.Remove(i,1).Insert(i," ")
darin platzieren (daher werden die beiden Semikolons nicht mehr benötigt).Perl 5 mit
-nlF/\s|/
39 BytesDies könnte bedeuten, dass die Grenzen von Perls Flags überschritten werden, die nicht gezählt werden. In diesem Fall werde ich zur vorherigen Antwort zurückkehren.
Probieren Sie es online!
quelle
-n
Flag auf 35 Byte reduziertHaskell , 67 Bytes
Dank Laikoni 12 Bytes gespart
Probieren Sie es online!
Dieser endet in einem Fehler
Haskell ,
8379 BytesProbieren Sie es online!
Dieser endet in einem Fehler
Haskell , 86 Bytes
Probieren Sie es online!
Haskell ,
1009188 BytesProbieren Sie es online!
quelle
f s|(a,_:b)<-span(/=minimum(id=<<words s))s=putStrLn s>>f(a++' ':b)
Probieren Sie es online!id=<<
dass ziemlich cleverJavaScript (Node.js) ,
80 bis65 ByteProbieren Sie es online!
replace
Ich wusste nicht, dass ich String als String nehmen soll, nicht als regulärer Ausdruckquelle
K4 ,
282018 BytesLösung:
Beispiel:
Erläuterung:
Es ist dasselbe, was ngn tut. Suchen Sie nach Indizes, die zu einer aufsteigenden Liste führen, überschreiben Sie sie nacheinander mit
" "
und entfernen Sie doppelte Zeilen mit dem Häkchen:quelle
gcc 32 Bit,
6665 BytesVielen Dank für Jonathan Frech für -1 Byte
quelle
*p==i?...:0;
könnte wohl sein*p-i?0:...;
.*p-1||(...)
es die gleiche Länge hat)f(a)
kompiliert wird, daa
dies vom Typ sein solltechar*
, aber ich gehe davon aus, dass dies etwas mit Ihrer 32-Bit-GCC-Nutzung zu tun hat.char*p,i;f(long long a){for(i=31;++i;)for(p=a;*p;)*p==i?puts(a),*p=32:++p;}
auf tio (64bit) kann erklären, wie esf(a)
funktioniertMATLAB, 74 Bytes
Dies verwendet die 2-Ausgabe-Form der Funktion max (), um das kleinste Zeichen und seinen Index abzurufen, nachdem die Zeichenfolge in Nullwerte in den Leerzeichen und in 256 Zeichen für die druckbaren Zeichen umgewandelt wurde.
quelle
Common Lisp ,
240228224 BytesProbieren Sie es online!
Dies ist mein erstes Mal Posting.
Ich bin gerade dabei, lispeln zu lernen, also bin ich sicher, dass sich jemand etwas kürzeres als das vorstellen kann.
quelle
APL (Dyalog Unicode) , 39 Byte SBCS
Probieren Sie es online!
Dfn.
Wie?
quelle
V , 27 Bytes
Probieren Sie es online!
Hexdump:
quelle
PowerShell ,
103 bis99 ByteProbieren Sie es online!
Übernimmt die Eingabe als Zeichenfolge in
$a
. Wir durchlaufen dann eine Schleife von2
bis$a.length
(dh die entsprechende Anzahl von vertikalen Malen, die erforderlich sind, um alle Zeichen bis auf ein Zeichen zu entfernen). Bei jeder Iteration geben wir den aktuellen String aus und speichern ihn bequem$x
gleichzeitig ab. Wir bauen dann ein neues[regex]
Objekt,$p
attern , bestehend aus den verbleibenden Zeichen in$a
Darin sind-n
ote
Qual zum Raum,sort
ed, dann ist die0
ten davon.Wir setzen dann
$a
gleich einen neuen String des Regex-Objekts mit der.Replace
Methode$x
, den$p
attern im String durch ein Leerzeichen zu ersetzen" "
, aber nur die1
st-Übereinstimmung. Ja, diese Syntax ist komisch.Die Zeichenfolgen
Write-Output
verbleiben in der Pipeline, und implizit erhalten wir eine neue Zeile dazwischen sowie eine nachfolgende neue Zeile.quelle
Java (JDK 10) , 140 Byte
Probieren Sie es online!
Technisch gibt es eine leere Zeile, aber es ist nicht leer .
quelle
Stax , 9 Bytes
Führen Sie es aus und debuggen Sie es
Dies ist derselbe Algorithmus wie die 05AB1E-Lösung von Luis
quelle
MATL ,
1716 BytesProbieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
Excel VBA, 167 Byte
Eine anonyme VBE-Direktfensterfunktion, die Eingaben aus dem Bereich
[A1]
und Ausgaben in das VBE-Direktfenster übernimmt .Ungolfed und Kommentiert
quelle
Japt ,
3218 Bytes14 Bytes gespart dank Shaggy!
Probieren Sie es online!
quelle