Es scheint, als ob in letzter Zeit eine Menge Jimmys in den Tod gefallen sind, wie hier zu sehen ist und wo Sie gefragt wurden, ob Jimmy fallen würde. Es ist an der Zeit, diesem Wahnsinn ein Ende zu setzen und zu versuchen, Jimmy zu retten.
Jimmy hat drei Körperteile /
, o
und \
wie diese angeordnet sind
/o\
Plattformen sind mit vertreten -
. Jimmy fällt von der Plattform, wenn sich zwei oder mehr Körperteile nicht direkt über einer Plattform befinden.
Einige Beispiele:
/o\
- -------
Jimmy gleicht aus, da alle Körperteile über a liegen -
.
/o\
------ ---
Jimmy wird ausgeglichen, da zwei Körperteile über -
s liegen.
/o\
-- ---- --
Jimmy gleicht aus, obwohl sie auf zwei Plattformen aufgeteilt sind
/o\
-
Jimmy wird nicht ausbalanciert, da sich zwei Körperteile nicht über einer Plattform befinden.
Da mein Plattformvorrat zur Neige geht, habe ich nur Plattformen mit einer Länge von 5, und es ist wichtig, dass wir so wenig wie möglich verwenden.
Ihre Aufgabe ist es, eine Eingabe von Jimmys zu übernehmen und eine Reihe von Plattformen auszugeben, die alle Jimmys in der Eingabe speichern. Ihre Ausgabe muss so wenige Plattformen wie möglich verwenden, aber jede Plattform muss eine -
Breite von 5 haben .
Beachten Sie, dass die Regel für eine Plattformbreite von 5 -
bedeutet, dass zwischen jeder Plattform ein Leerzeichen eingefügt werden muss. ----------
ist in der Ausgabe nicht gültig, da sie als Plattform der Länge 10 und nicht als zwei Plattformen der Länge 5 betrachtet wird.
Testfälle
/o\ /o\/o\ // input
----- ----- // output
/o\ /o\
----- -----
/o\ /o\ // same input as above
----- ----- // this is also valid output
/o\ /o\
-----
Es gelten Standardregeln.
Dies ist Code-Golf, möge die kürzeste Antwort gewinnen!
Antworten:
Charcoal ,
1715 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Wiederholen, während die Cursorposition kürzer als die Länge der Eingabe ist.
Wenn das Zeichen an dieser Position in der Eingabe ein
o
oder ein\
ist, drucken Sie 5-
s.Gehe zum nächsten Charakter und garantiere so mindestens einen Abstand zwischen den Plattformen.
Vorherige 17-Byte-Lösung ist IMHO mehr "Charcoal-y".
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Die Ausgabe schließt die Eingabe ein, wodurch die Richtigkeit der Lösung demonstriert wird. Erläuterung:
Gib die Eingabe aus und gehe zum Anfang der nächsten Zeile.
Durchlaufen Sie alle Zeichen der Eingabe, um sicherzustellen, dass kein Jimmy übersehen wird.
Schauen Sie sich das Zeichen über dem Cursor an. Wenn es keine gibt, oder wenn es ein Leerzeichen ist, oder
/
nichts tun, sonst 5-
s drucken .Gehe zum nächsten Charakter und garantiere so mindestens einen Abstand zwischen den Plattformen.
quelle
Python 2 ,
7067 BytesProbieren Sie es online!
-3 Bytes dank Kevin Cruijssen & Neil
Nicht der Schönste, nicht sicher, wie er mit den Resten besser umgehen soll ...
Leider können wir nicht beide Enden jeder Plattform mit einem einzigen
re.sub
Aufruf durch Leerzeichen ersetzen , da bei zwei Plattformen, die einen Abstand voneinander haben, die Lücke zwischen ihnen nur einmal übereinstimmen kann. Eine Lookahead / Lookbehind-Behauptung hilft nicht weiter, da alles, was mit diesen Behauptungen übereinstimmt, nicht ersetzt wird.Mit einer einzigen
re.sub
Referenz:Python 3.8 (Vorabversion) , 78 Byte
Probieren Sie es online!
quelle
/
und dann das ersetzen[^ ]
.JavaScript (ES6),
56 5554 ByteProbieren Sie es online!
Oder 47 Bytes, wenn die Rückgabe eines Array von Zeichen zulässig ist.
quelle
Python 3 ,
158164160 BytesProbieren Sie es online!
Dies ist meine erste Code-Golf-Antwort und ich bin froh, dass es sich um eine Jimmy-Frage handelt!
Erläuterung:
a=input();r=""
: Eingabe aufnehmen und neuen String initialisierenr
.for i,c in enumerate(a):
: Über die Eingabe aufzählen.try:r[i] ... except:
: Überprüfen Sie, obr[i]
vorhanden - wenn nicht, verarbeiten Sie denexcept
Block.if c in"/o":
: Überprüfe, ob der aktuelle Charakter in Jimmys ersten beiden Körperteilen ist.r+=(a[i+5<len(a)and i+5or len(a)-1]=="o"and" "or"")+"----- "
: Wenn ja, fügen Sie ein neues Segment hinzu. Fügen Sie ein Leerzeichen vor unserem neuen Segment ein, wenn ein weiterer Jimmy-Kopf aus fünf Zeichen besteht.else:r+=" "
: Andernfalls fügen Sie einfach ein Leerzeichen hinzu.print(r)
: Drucken Sie unser Endergebnis.quelle
Netzhaut ,
2321 Bytes-2 Bytes dank @Neil .
Enthält ein einzelnes Leerzeichen in der zweiten, vierten und sechsten Zeile.
Port von @negativeSeven 's Python 2 Antwort , also stelle sicher, dass du ihn positiv bewertest!
Probieren Sie es online aus.
Erläuterung:
Ersetze alle
"/"
durch" "
:Fügen Sie 5 nachstehende Leerzeichen hinzu:
Ersetzen Sie alle Teilzeichenfolgen der Größe sechs, die nicht mit einem Leerzeichen beginnen, durch
"----- "
:quelle
\S
anstelle von verwenden[^ ]
?Gelee , 35 Bytes
Probieren Sie es online!
Eine monadische Verknüpfung, die die Eingabe als Zeichenfolge verwendet und eine Jelly-Zeichenfolge mit den Plattformen zurückgibt.
Lässt sich von der Antwort von @ negativeseven inspirieren .
quelle
05AB1E ,
2524 BytesPort of @negativeSevens Python 2-Antwort , also stelle sicher, dass du ihn positiv bewertest!
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Japt ,
2322 BytesEine Portierung von Arnauld's JS-Lösung, die ich einfach zu erschöpft bin, um sie vollständig zu testen. Wenn es ungültig ist, kann ein Diamant bitte löschen?
Versuch es
quelle