Diberikan string di mana baris pertama berisi spasi dan satu periode ( .
, "bola"), diikuti oleh garis yang berisi spasi, garis miring ke depan ( /
), dan garis miring terbalik ( \
), tentukan kolom mana bola akan mendarat setelah jatuh dari posisi awalnya . Masing-masing /
memindahkannya ke kiri sebanyak 1 kolom dan masing-masing \
memindahkannya ke kanan sebanyak 1 kolom.
Masukan sampel
.
/ \ \
/ /
\ \/ \
\ /\
\ /\ \
\ /
Output sampel
Bola dimulai pada kolom 5, hits /
on line 3, maka tiga \
's pada garis 5 sampai 7 untuk posisi akhir:
7
Perhatikan bahwa kolom 1-diindeks, sebagian besar untuk konsistensi dengan konvensi editor teks.
Kasus tepi
Jika bola menyentuh a /
di kolom pertama, bola itu selamanya macet di kolom tidak ada 0. Program Anda harus menangani ini dengan benar dengan mencetak 0
.
Jika bola menyentuh kedua sisi \/
pola, hasilnya tidak ditentukan. Program Anda diizinkan untuk mengakhiri tanpa output, loop tanpa batas, atau mencetak pesan kesalahan (solusi saya mencetak -1
), tetapi tidak boleh mencetak apa pun yang dapat dianggap sebagai output yang valid.
Jika bola menyentuh tebasan kiri dalam suatu \\
pola, bola seharusnya berakhir tepat di bawah tebasan kanan, bukan ke kanan. Solusi yang awalnya saya bayangkan adalah cenderung salah, jadi jangan pergi jalan itu!
Mungkin ada atau mungkin tidak ada spasi setelah .
atau yang terakhir /
atau \
pada setiap baris. Program Anda seharusnya tidak mengandalkan padding yang tersedia. Pada catatan yang sama, mungkin ada atau tidak ada baris yang mengikuti baris pertama.
Anda dapat mengasumsikan bahwa baris pertama akan memiliki nol atau lebih banyak ruang dan tepat satu .
. Baris berikutnya, jika ada, akan memiliki nol atau lebih banyak ruang dan nol atau lebih garis miring.
Detail implementasi
Program Anda dapat membaca dari file (ditentukan sebagai argumen baris perintah) atau membaca dari input standar, sesuai keinginan Anda.
Program Anda harus menampilkan satu nomor ke keluaran standar. (Ya, garis belakang baru baik-baik saja. Ya, jumlahnya mungkin memiliki lebih dari satu digit.)
Uji kasus
Memasukkan:
.
Keluaran:
1
Perhatikan bahwa input di sini persis satu byte. Ini adalah kasus terkecil yang harus Anda tangani.
Memasukkan:
. \ \ \ \
Keluaran:
6
Perhatikan bahwa tidak ada spasi setelah garis miring ini.
Memasukkan:
. / /\\ / \ //\ \/// // \\/ \/\ /\/
Keluaran:
0
Memasukkan:
. / / / \\\ /\\ / \
Keluaran:
1
Memasukkan:
. \ / / \
Keluaran:
4
Memasukkan:
. \ \/\/\/
Keluaran:
(anything but a nonnegative number)
Kata penutup
Pertanyaan ini mirip dengan Mensimulasikan komputer jenis bola biliar (berbasis gravitasi) , tetapi secara signifikan lebih sederhana, sehingga mudah-mudahan itu akan menarik minat lebih banyak.
Saya punya solusi 169 karakter dengan Python. Saya yakin pegolf berbakat di sini bisa merobek rekor itu berkeping-keping. : ^)
Ini kode-golf , jadi jawaban terpendek dalam karakter akan diterima pada akhir bulan!
sumber
Jawaban:
Python, 143B
Menggunakan trik lekukan spasi / tab. Saya belum melakukan sesuatu yang sangat pintar di sini.
F
adalah indeks saat ini,l
adalah garis saat ini;z
tidak terdefinisi sehingga melempar pengecualian, yang jelas bukan bilangan bulat positif, menangani\/
situasi.sumber
05AB1E , 37 byte
Input sebagai string multi-line. Keluaran
\/
jika bola macet.Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
CJam, 61 byte
Jika aturan tentang
\/
dicabut (dan kami tidak diharuskan menanganinya), ini bisa disingkat menjadi 41 byte:sumber
Java 10,
213208190 byteMelemparkan pembagian dengan kesalahan nol saat kita terjebak di dalam a
\/
.-5 byte berkat @EdgyNerd .
Penjelasan:
Coba di sini.
sumber
Python 3 , 124 byte
Cobalah online!
Juga berfungsi di Python 2.
Penjelasan
sumber
J , 95 byte
Cobalah online!
Mengembalikan tak terhingga
_
ketika bola macet. Kehilangan banyak byte yang menangani case khusus itu. Kalau tidak, itu lebih merupakan pengurangan sederhana dari baris. Pasti bisa bermain golf lebih lanjut.sumber