Jimmy butuh sepasang sepatu baru!

13

Jimmy telah memiliki sibuk minggu lalu dengan semua ini platform dan tali , dan miskin jimmy bahkan tidak memiliki kaki atau kaki untuk berdiri di atas!


Tugas Anda adalah mengambil seutas tali berisi beberapa Jimmy dan memberi mereka sepatu dan kaki!

Dapatkan input dalam bentuk String Jimmy

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

hanya mengandung /o\dan

beri masing-masing Jimmy di input sepasang kaki yang terlihat seperti ini:

 /o\
_/ \_

Ubah string mengambang kepala Jimmy yang dimasukkan menjadi Jimmy dengan tali kaki, seperti:

// Input

       /o\   /o\          /o\

// Output

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

Jika 2 Jimmys berdekatan, mereka harus pindah untuk memberi ruang, Jimmys akan selalu bergerak ke kanan untuk memberi ruang bagi Jimmys lain.

// Input

/o\/o\

// Output

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

Jimmys lain yang jauh tidak boleh dipindahkan kecuali jika diperlukan

// Input

/o\/o\      /o\

// Output

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

// Input

/o\/o\    /o\

// Output

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

Aturan dan celah standar berlaku,

Ini kode-golf, jadi mungkin jawaban terpendek menang.

Quinn
sumber
Test case yang disarankan:, /o\<sp>/o\<sp><sp><sp><sp><sp><sp><sp><sp>/o\/o\implementasi saya saat ini gagal karena memindahkan dua Jimmies terakhir ke kiri bukannya kanan .. Namun, semua test case Anda berhasil.
Kevin Cruijssen

Jawaban:

3

Python 2 , 131 120 115 114 121 118 byte

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)

Cobalah online!

4 byte thx ke movatica ; 10 byte hilang untuk perbaikan bug.

Chas Brown
sumber
1
o+=2-len(g)menghemat satu byte
movatica
118 byte
movatica
1
@movatica: ada bug, tetapi diimbangi dengan suntingan Anda :).
Chas Brown
3

Ruby -p , 77 75 byte

Aturan "jangan pindahkan Jimmy jika tidak diperlukan" adalah cobaan berat untuk diselesaikan, tetapi saya pikir itu berhasil dengan baik. Lebih pendek dari Python sedikit (pada saat penulisan), setidaknya.

-2 byte dari rekursif.

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

Cobalah online!

Nilai Tinta
sumber
Bisakah Anda menggunakan \S+di tempat \/\S*?
rekursif
3

PowerShell , 96 byte

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

Cobalah online!

Belum dibuka:

$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
sumber
2

Python 2 , 152 148 140 byte

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

Cobalah online!

TFeld
sumber
2

Arang , 28 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

 

Cetak spasi untuk mengalahkan margin kiri otomatis Charcoal.

F⌕Aθ/«

Lingkarkan semua lengan kiri.

J∧ι⊖ι¹

Lompat ke lokasi kaki kiri yang diinginkan. Perhatikan bahwa Arang tidak memiliki masalah menggambar (-1, 1), tetapi pertanyaannya tidak memungkinkan, jadi kita harus berhati-hati untuk menghindari menggambar di posisi negatif.

WKK→

Bergerak melewati semua output yang ada.

P_/ \_M↗/o\

Keluarkan kaki dan kemudian pindah untuk menampilkan Jimmy.

Neil
sumber
2

Retina ,40 37 byte

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

Cobalah online!

Berkat Value Ink untuk bermain golf 3 byte.

jimmy23013
sumber
4
Nikmati sepatu baru Anda!
Quinn
1
Yah, mencoba berpura-pura tantangan ini tidak ada untuk sementara waktu. (Tidak ada hubungannya dengan Jimmy itu.)
jimmy23013
Saya percaya pencocokan pola yang saya gunakan dalam jawaban Ruby saya (\\ ?|^)(/\S*) ?lebih pendek daripada yang ada di baris pertama Anda dan harus memberikan hasil yang sama (mungkin; Saya tidak tahu sama sekali Retina)
Nilai Tinta
2

Stax , 29 28 24 25 byte

¢▄▌ß╙EVäN»0►,δñï◙,Θ╙BÅhΓ?

Jalankan dan debug itu

Ada bug dalam solusi 24 byte yang menyebabkan beberapa kesalahan off-by-1 dalam beberapa kasus.

rekursif
sumber
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))

Cobalah online!

Arnauld
sumber