Jimmy braucht deine Hilfe!


17

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 /, ound \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!


2
@Veskah Solange alle Jimmys auf den wenigsten möglichen Plattformen gespeichert sind, spielt die Position keine Rolle. Daher gibt es für jede Eingabe mehrere gültige Ausgaben. Es gibt keine Bedingung dafür, wie viele Jimmys in der Eingabe enthalten sein werden. Eine leere Zeichenfolge wäre eine gültige Eingabe.
Quinn

3
Testfall 4 sieht aus wie ein gruseliges Gesicht
abgelaufene Daten

2
Follow-up: Platzieren Sie so viele Jimmys wie möglich auf Plattformen, damit sie nicht herunterfallen.
Val sagt Reinstate Monica

2
@val das ist eigentlich eine der verknüpften Fragen - ich habe danach nachgearbeitet: P
Quinn

7
Ich kann so viele Jimmy-Follow-ups in der Zukunft sehen.
connectyourcharger

Antworten:


2

Charcoal , 17 15 Bytes

W‹ⅈLθ«×⁵№o\§θⅈ→

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:

W‹ⅈLθ«

Wiederholen, während die Cursorposition kürzer als die Länge der Eingabe ist.

×⁵№o\§θⅈ

Wenn das Zeichen an dieser Position in der Eingabe ein ooder 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".

θ⸿Fθ«×⁵¬№ /⊟KD²↑→

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.

Fθ«

Durchlaufen Sie alle Zeichen der Eingabe, um sicherzustellen, dass kein Jimmy übersehen wird.

×⁵¬№ /⊟KD²↑

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.


7

Python 2 , 70 67 Bytes

lambda s:S('/',' ',S("\S.{5}","----- ",s+' '*5))
import re;S=re.sub

Probieren 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.subAufruf 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.subReferenz:

Python 3.8 (Vorabversion) , 78 Byte

lambda s:[s:=re.sub(".[^/ -].{5}"," ----- ",s+"  ",1)for c in s][-1]
import re

Probieren Sie es online!


69 Bytes, indem Sie zuerst das /und dann das ersetzen [^ ].
Kevin Cruijssen

@ Neils Golfvorschlag auf meiner Retina-Antwort funktioniert auch bei Ihnen: 67 Bytes .
Kevin Cruijssen


2

Python 3 , 158 164 160 Bytes

a=input();r=""
for i,c in enumerate(a):
 try:r[i]
 except:
  if c in"/o":
   r+=(a[i+5<len(a)and i+5or len(a)-1]=="o"and" "or"")+"----- "
  else:r+=" "
print(r)

Probieren 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 initialisieren r.

  • for i,c in enumerate(a):: Über die Eingabe aufzählen.

  • try:r[i] ... except:: Überprüfen Sie, ob r[i]vorhanden - wenn nicht, verarbeiten Sie den exceptBlock.

  • 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.


Ziemlich nah dran, aber ich denke, das funktioniert nicht für alle Testfälle. Es sollte so wenig Plattformen wie möglich verwenden und Ihr letztes Beispiel verwendet 2, wenn dies mit 1
Quinn

@ Quinn schießen. Err, nicht konkurrierend, bis ich das behebe.
connectyourcharger

@connectyourcharger "nicht konkurrierend" validiert keine ungültige Lösung. Ich empfehle, es zu löschen, wenn Sie es für einige Zeit nicht reparieren (z. B. in den nächsten Minuten).
Erik der Outgolfer

@Quinn Ich habe es jetzt behoben.
connectyourcharger

@connectyourcharger Schön!
Quinn

2

Netzhaut , 23 21 Bytes

/

$
5* 
\S.{5}
5*- 

-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:

$
5* 

Ersetzen Sie alle Teilzeichenfolgen der Größe sechs, die nicht mit einem Leerzeichen beginnen, durch "----- ":

\S.{5}
5*- 

Können Sie \Sanstelle von verwenden [^ ]?
Neil

@ Neil Ah, natürlich. Vielen Dank!
Kevin Cruijssen


1

05AB1E , 25 24 Bytes

ð5׫'/ð:DŒ6ùʒнðÊ}'-5×ð«:

Port 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:

ð5׫                      # Append 5 trailing spaces to the (implicit) input-string
    '/ð:                 '# Replace all "/" with a space
        D                 # Duplicate the string
         Œ                # Get all substrings of this
          6ù              # Only leave those of length 6
            ʒ   }         # Filter it further by:
             нðÊ          #  Only keep those which do NOT start with a space
                 '-5×ð«  '# Push a string of 5 "-" appended with a space: "----- "
                       :  # Replace in the initially duplicated string all substrings 
                          # remaining in the list with this "---- "

1

Japt , 23 22 Bytes

Eine 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?

+L² £=U´?U:X>M©5)?'-:S

Versuch es

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.