Jimmy butuh bantuanmu!

17

Sepertinya baru-baru ini, ada banyak Jimmys jatuh ke kematian mereka, seperti dapat dilihat di sini , dan di sini di mana Anda diminta untuk menentukan apakah Jimmy akan jatuh. Sudah saatnya kita menghentikan kegilaan ini dan mencoba menyelamatkan Jimmy.

Jimmy memiliki tiga bagian tubuh /, odan \diatur seperti ini

/o\

Platform diwakili dengan -. Jimmy akan jatuh dari platform mereka jika mereka memiliki dua atau lebih bagian tubuh yang tidak langsung di atas platform.

Beberapa contoh:

   /o\
- -------

Jimmy akan menyeimbangkan karena semua bagian tubuh mereka di atas a -.

   /o\
    ------   ---

Jimmy akan seimbang karena dua bagian tubuh berada di atas -s.

 /o\
-- ----  --

Jimmy akan menyeimbangkan meskipun mereka terbagi antara dua platform

  /o\
   -

Jimmy tidak akan seimbang karena dua bagian tubuh tidak berada di atas platform.


Karena persediaan platform saya hampir habis, saya hanya memiliki platform dengan panjang 5, dan penting kami menggunakan sesedikit mungkin.

Tugas Anda adalah mengambil input Jimmys dan mengeluarkan serangkaian platform yang akan menyimpan semua Jimmys dalam input. Output Anda harus menggunakan platform sesedikit mungkin, tetapi setiap platform harus memiliki -lebar 5 's.

Perhatikan bahwa aturan platform menjadi 5 -lebar, berarti setiap platform harus memiliki ruang di antara mereka. ----------tidak valid dalam output karena akan dianggap sebagai platform dengan panjang 10 dan bukan dua platform dengan panjang 5.

Test Case

/o\  /o\/o\    // input
----- -----    // output
/o\           /o\
-----       -----
/o\           /o\      // same input as above
-----          -----   // this is also valid output
    /o\ /o\
     -----

Aturan standar berlaku.

Ini kode-golf, semoga jawaban terpendek menang!

Quinn
sumber
2
@ Veskah selama semua Jimmys disimpan menggunakan platform sesedikit mungkin, posisinya tidak masalah, sehingga akan ada beberapa output yang valid untuk setiap input. Tidak ada kondisi pada berapa banyak Jimmys akan ada dalam input, string kosong akan menjadi input yang valid.
Quinn
3
Test case 4 terlihat seperti wajah yang menakutkan
Expired Data
2
Tindak lanjut: tempatkan Jimmys sebanyak mungkin di platform sedemikian rupa sehingga tidak akan jatuh.
val berkata Reinstate Monica
2
@val yang sebenarnya adalah salah satu pertanyaan terkait - saya menindaklanjuti setelah itu: P
Quinn
7
Saya bisa melihat begitu banyak tindak lanjut Jimmy di masa depan.
Hubungkan chargerAnda

Jawaban:

2

Arang , 17 15 byte

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

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

W‹ⅈLθ«

Ulangi saat posisi kursor kurang dari panjang input.

×⁵№o\§θⅈ

Jika karakter pada posisi itu dalam input adalah oatau \kemudian cetak 5 -s.

Pindah ke karakter berikutnya, sehingga menjamin setidaknya satu ruang antar platform.

Solusi 17-byte sebelumnya adalah IMHO lebih banyak "Charcoal-y".

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Output meliputi input, dengan demikian menunjukkan kebenaran solusi. Penjelasan:

θ⸿

Cetak input dan lanjutkan ke awal baris berikutnya.

Fθ«

Ulangi setiap karakter input untuk memastikan tidak ada Jimmy yang terlewat.

×⁵¬№ /⊟KD²↑

Lihatlah karakter di atas kursor. Jika tidak ada, atau jika itu ruang atau /, maka jangan lakukan apa pun, jika tidak cetak 5 -dtk.

Pindah ke karakter berikutnya, sehingga menjamin setidaknya satu ruang antar platform.

Neil
sumber
7

Python 2 , 70 67 byte

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

Cobalah online!

-3 byte terima kasih kepada Kevin Cruijssen & Neil

Bukan yang tercantik, tidak yakin bagaimana cara menangani tebasan sisa itu dengan lebih baik ...

Sayangnya, kami tidak dapat mengganti kedua ujung setiap platform dengan spasi menggunakan satu re.subpanggilan, karena dalam kasus 2 platform terpisah satu ruang, jarak antara keduanya tidak dapat dicocokkan lebih dari sekali. Pernyataan yang terlihat / terlihat di belakang pernyataan tidak akan membantu, karena apa pun yang cocok dengan pernyataan itu tidak akan diganti.

Menggunakan satu re.subreferensi:

Python 3.8 (pra-rilis) , 78 byte

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

Cobalah online!

negatif tujuh
sumber
69 byte dengan terlebih dahulu mengganti /dan kemudian [^ ].
Kevin Cruijssen
@ Neil menyarankan golf pada jawaban Retina saya juga bekerja untuk Anda: 67 byte .
Kevin Cruijssen
4

JavaScript (ES6),  56 55  54 byte

s=>[...s+1e4].map(c=>(s--?s:s=c>{}&&5)?'-':' ').join``

Cobalah online!

Atau 47 byte jika mengembalikan array karakter dapat diterima.

Arnauld
sumber
2

Python 3 , 158 164 160 byte

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)

Cobalah online!

Ini adalah jawaban golf kode pertama saya, dan saya senang ada pertanyaan Jimmy!

Penjelasan:

  • a=input();r="": Ambil input dan inisialisasi string baru r.

  • for i,c in enumerate(a):: Hitung lebih dari input.

  • try:r[i] ... except:: Lihat jika r[i]ada - jika tidak, proses exceptblok.

  • if c in"/o":: Periksa apakah karakter saat ini ada di dua bagian tubuh pertama Jimmy.

  • r+=(a[i+5<len(a)and i+5or len(a)-1]=="o"and" "or"")+"----- ": Jika demikian, tambahkan segmen baru. Tambahkan spasi sebelum segmen baru kami jika kepala Jimmy lain hadir dalam lima karakter.

  • else:r+=" ": Kalau tidak, tambahkan saja spasi.

  • print(r): Cetak hasil akhir kami.

hubungkan charger Anda
sumber
Cukup dekat, tapi saya pikir ini sebenarnya tidak berfungsi untuk semua kasus uji. Seharusnya menggunakan platform sesedikit mungkin dan contoh terakhir Anda menggunakan 2 ketika itu bisa dilakukan dengan 1
Quinn
@Quinn Shoot. Kesalahan, non-bersaing sampai saya memperbaikinya.
connectyourcharger
@connectyourcharger "tidak bersaing" tidak memvalidasi solusi yang tidak valid. Saya sarankan menghapusnya jika Anda tidak akan memperbaikinya untuk beberapa waktu (misalnya beberapa menit berikutnya).
Erik the Outgolfer
@ Quinn, aku memperbaikinya sekarang.
connectyourcharger
@connectyourcharger Anda Bagus!
Quinn
2

Retina , 23 21 byte

/

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

-2 byte terima kasih kepada @Neil .

Berisi ruang trailing tunggal pada baris kedua, keempat, dan keenam.

Port of @negativeSeven 's Python 2 menjawab , jadi pastikan untuk membesarkannya!

Cobalah online.

Penjelasan:

Ganti semua "/"dengan " ":

/
 

Tambahkan 5 spasi tambahan:

$
5* 

Ganti semua substring ukuran enam yang tidak dimulai dengan spasi dengan "----- ":

\S.{5}
5*- 
Kevin Cruijssen
sumber
Bisakah Anda menggunakan \Sbukan [^ ]?
Neil
@Neil Ah, tentu saja. Terima kasih!
Kevin Cruijssen
1

Jelly , 35 byte

;3x5¤;0;ṛṫ6ɗ
;⁶x5¤e€⁾o\œṡ1ç/$ÐLị⁾- 

Cobalah online!

Tautan monadik yang mengambil input sebagai string dan mengembalikan string Jelly dengan platform.

Mengambil inspirasi dari jawaban @ negativeseven .

Nick Kennedy
sumber
1

05AB1E , 25 24 byte

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

Port of @negativeSeven 's Python 2 menjawab , jadi pastikan untuk membesarkannya!

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

ð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 "---- "
Kevin Cruijssen
sumber
1

Japt , 23 22 byte

Sebuah port dari solusi JS Arnauld yang terlalu lelah untuk diuji sepenuhnya. Jika itu tidak valid, bisakah Diamond dihapus?

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

Cobalah

Shaggy
sumber