Jimmy braucht ein neues Paar Schuhe!

12

Jimmy war letzte Woche mit all diesen Plattformen und Seilen beschäftigt , und der arme Jimmy hat nicht einmal Beine oder Füße, auf denen er stehen kann!


Ihre Aufgabe ist es, eine Schnur mit mehreren Jimmys zu nehmen und ihnen Beine und Schuhe zu geben!

Erhalten Sie Eingaben in Form eines Jimmy-Strings

Jimmy String => /o\ /o\ /o\

enthält nur /o\und

Geben Sie jedem Jimmy in der Eingabe ein Paar Füße, die so aussehen:

 /o\
_/ \_

Verwandeln Sie die eingegebene Jimmy-Saite mit schwebendem Kopf wie folgt in Jimmy mit Fußsaite:

// Input

       /o\   /o\          /o\

// Output

       /o\   /o\          /o\
      _/ \_ _/ \_        _/ \_

Wenn 2 Jimmys nahe beieinander liegen, müssen sie sich bewegen, um Platz zu schaffen. Jimmys bewegt sich immer nach rechts, um Platz für andere Jimmys zu schaffen.

// Input

/o\/o\

// Output

 /o\  /o\
_/ \__/ \_

Andere Jimmys, die weiter entfernt sind, dürfen nur bewegt werden, wenn dies erforderlich ist

// Input

/o\/o\      /o\

// Output

 /o\  /o\   /o\
_/ \__/ \_ _/ \_

// Input

/o\/o\    /o\

// Output

 /o\  /o\  /o\
_/ \__/ \__/ \_

Es gelten Standardregeln und Lücken,

Dies ist Code-Golf, also kann die kürzeste Antwort gewinnen.

Quinn
quelle
Vorgeschlagener Testfall: /o\<sp>/o\<sp><sp><sp><sp><sp><sp><sp><sp>/o\/o\Meine aktuelle Implementierung schlägt fehl, da die letzten beiden Jimmies nach links statt nach rechts verschoben werden. Alle Ihre Testfälle sind jedoch erfolgreich.
Kevin Cruijssen

Antworten:

3

Python 2 , 131 120 115 114 121 118 Bytes

o=1;W=[]
for g in map(len,input().split('/o\\')):W+=[' '*(g-o)];o=max(o-g,0)+2
for q in' /o\ ','_/ \_':print q.join(W)

Probieren Sie es online aus!

4 Bytes danke an movatica ; 10 Bytes für die Fehlerbehebung verloren.

Chas Brown
quelle
1
o+=2-len(g)spart Ihnen ein Byte
movatica
118 Bytes
movatica
1
@movatica: Es gab einen Fehler, der jedoch durch Ihre Änderungen ausgeglichen wurde :).
Chas Brown
3

Ruby -p , 77 75 Bytes

Die Regel "Jimmy nicht bewegen, wenn sie nicht gebraucht wird" war eine ziemliche Tortur, aber ich denke, sie hat ganz gut geklappt. Zumindest um einiges kürzer als Python (zum Zeitpunkt des Schreibens).

-2 Bytes von rekursiv.

r=/(\\ ?|^)(\S+) ?/
gsub(r){"#$1 #$2"}while~r
puts$_
gsub(/ .o. ?/,'_/ \_')

Probieren Sie es online aus!

Wert Tinte
quelle
Könnten Sie \S+anstelle von verwenden \/\S*?
rekursiv
3

PowerShell , 96 Byte

($o=$args-split'/o.'|%{' '*($w=($l+=$_.Length-1)*($l-gt0));$l-=$w+1})-join' /o\ '
$o-join'_/ \_'

Probieren Sie es online aus!

Abgerollt:

$o=$args-split'/o.'|%{
    $len += $_.Length-1
    $width = $len*($len-gt0)    # len or 0, if len < 0
    ' '*$width
    $len -= $width+1
}
# $o is array of space strings now
$o-join' /o\ '
$o-join'_/ \_'
mazzy
quelle
2

Python 2 , 152 148 140 Bytes

o=[-4]
for i,c in enumerate(input()):o+=[max(i,o[-1]+5)]*('/'==c)
for s in' /o\ ','_/ \_':print''.join('%*s'%(b-a,s)for a,b in zip(o,o[1:]))

Probieren Sie es online aus!

TFeld
quelle
2

Holzkohle , 28 Bytes

 F⌕Aθ/«J∧ι⊖ι¹WKK→P_/ \_M↗/o\

Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:

 

Drucken Sie ein Leerzeichen, um den automatischen linken Rand von Charcoal zu umgehen.

F⌕Aθ/«

Schlaufe über alle linken Arme.

J∧ι⊖ι¹

Springe zum gewünschten linken Fuß. Beachten Sie, dass Holzkohle kein Problem beim Zeichnen hat (-1, 1), aber die Frage lässt dies nicht zu. Daher müssen wir darauf achten, das Zeichnen an negativen Positionen zu vermeiden.

WKK→

Gehen Sie an einer vorhandenen Ausgabe vorbei.

P_/ \_M↗/o\

Geben Sie die Füße aus und bewegen Sie sich dann, um den Jimmy auszugeben.

Neil
quelle
2

Netzhaut ,40 37 Bytes

\+`(^|\S.)(/\S*) ?
$1 $2
 /o. ?
_/ \_

Probieren Sie es online aus!

Vielen Dank an Value Ink für das Golfen von 3 Bytes.

jimmy23013
quelle
4
Viel Spaß mit deinen neuen Schuhen!
Quinn
1
Nun, versucht vorzutäuschen, dass diese Herausforderungen für eine Weile nicht existieren. (Keine Beziehung zu diesem Jimmy.)
Jimmy23013
Ich glaube, die Musterübereinstimmung, die ich in meiner Ruby-Antwort verwendet habe, (\\ ?|^)(/\S*) ?ist kürzer als die in Ihrer ersten Zeile und sollte die gleichen Ergebnisse liefern (wahrscheinlich; ich kenne Retina überhaupt nicht)
Value Ink
1

JavaScript (ES6), 107 Byte

s=>` /o\\ 
_/ \\_`.replace(/.*/g,j=>s.split(/.o./).map(s=>s.slice(n,l=s.length,n=n>l?n-l+2:2),n=1).join(j))

Probieren Sie es online aus!

Arnauld
quelle