Kabel saya semua kusut!
Bukankah itu menjengkelkan saat kabel-kabel tersangkut? Yah, itu baru saja terjadi pada saya, jadi saya ingin membantu saya melepaskan mereka! Demi kenyamanan Anda, saya telah memutus semuanya dari perangkat, tetapi semuanya masih terhubung ke outlet. Tantangan Anda adalah mencari cara untuk menguraikannya!
Memasukkan
Input akan terdiri dari spasi, pipa, dan Xs (kedua kasus). Masukan akan terlihat seperti ini:
| | | |
X | |
| | x
| X |
| | | |
Huruf kapital X berarti bahwa kawat kiri memotong kawat kanan, dan huruf kecil x berarti sebaliknya. Baris pertama dan terakhir akan selalu | | | |...
. Anda dapat mengambil input sebagai string yang dipisahkan koma, array string, dll. Formatnya tidak ketat, asalkan masuk akal dan tidak mengandung informasi tambahan.
Keluaran
Untuk tantangan ini, saya tidak hanya perlu tahu berapa lama saya akan mengambil, saya perlu tahu persis apa yang harus dilakukan. Jadi, keluarkan daftar pasangan integer dengan karakter R atau L, case-sensitive, yang mewakili dua kabel untuk dilepaskan dan ke arah mana (R berarti kanan atas kiri, dan sebaliknya untuk L). Anda perlu memberi tahu saya cara untuk membukanya; Saya tidak bisa memikirkannya sendiri. Output juga cukup fleksibel, selama Anda menampilkan semua karakter pasangan integer + dalam urutan yang benar dan Anda tidak menampilkan teks omong kosong tambahan (tanda kurung, koma, dll. Baik-baik saja). Kabel bisa nol atau satu diindeks, tetapi indeks harus mulai dari kiri. Perhatikan bahwa Anda harus melepaskan dari bagian bawah, bukan bagian atas. Gaya keluaran harus konsisten, dan sebutkan bagaimana Anda menghasilkan jika tidak jelas. Kasus karakter tidak harus konsisten,
Output Sampel
Untuk contoh input di atas, hasilnya akan seperti:
2 3 R
3 4 L
1 2 R
Format keluaran di sini adalah daftar nilai-nilai yang dipisahkan spasi baris baru. Ini 1-diindeks.
Spesifikasi lebih lanjut
Adalah sah untuk memiliki X dan x ditumpuk secara vertikal satu sama lain dalam urutan apa pun. Karena saya malas, saya tidak ingin mengganti kabel secara tidak perlu, jadi jangan mengeluarkan apapun untuk kasus ini; jika saya menemukan itu, saya hanya akan menarik kabel dengan lembut untuk meluruskannya.
Ini juga berlaku untuk memiliki beberapa X dan x ditumpuk secara vertikal, dan selama tidak ada kawat yang terlibat dalam penyeberangan lainnya, saya tidak ingin ada gerakan tambahan (karena saya malas). Jadi, jika karakter X X x X x x
muncul di kolom tanpa penyeberangan lain, hasilnya harus tetap kosong!
Dalam hal ini tidak jelas, R menghilangkan X dan L menghilangkan x.
Mungkin ada dua penyeberangan kawat di baris yang sama, dalam hal ini urutan kedua swap ini tidak masalah. Anda tidak akan pernah mendapatkan sesuatu seperti | X X |
(ini tidak masuk akal karena menyiratkan bahwa kawat tengah sedang dilintasi kabel di kedua sisi kiri dan kanannya).
Tidak selalu ada persimpangan ...
Input bisa berupa satu pipa. Namun, input tidak akan pernah kosong.
Solusi valid terpendek menang pada 20 Desember!
Lebih banyak contoh
Seperti yang saya janjikan:
Contoh 1
Memasukkan
| | | | | |
| | X x
X | x |
| x | X
X X | |
| | | | | |
Keluaran
1 2 R
3 4 R
2 3 L
5 6 R
1 2 R
4 5 L
3 4 R
5 6 L
Contoh 2
Memasukkan
| | |
X |
| x
| | |
| X
| x
| | |
Keluaran
2 3 L
1 2 R
Contoh 3
Memasukkan
|
Output kosong. Ya, Anda harus berurusan dengan kasus ini.
Contoh 4
Memasukkan
| |
X
x
X
x
X
x
X
x
X
x
| |
Output kosong. Hanya untuk bersenang-senang :).
Contoh 5
Memasukkan
| |
X
X
x
X
x
x
| |
Output masih kosong ...
Jawaban:
Befunge, 173 byte
Input dibaca dari stdin dalam format persis yang diberikan dalam deskripsi tantangan, meskipun sangat penting bahwa setiap baris menjadi panjang yang benar dan baris terakhir harus menyertakan baris baru (yaitu bukan hanya EOF di akhir baris itu).
Cobalah online!
Ide dasar untuk solusi ini adalah bahwa kami memiliki "array" yang melacak jumlah twist untuk setiap kabel. Jadi setiap kali kita menemukan twist di satu arah, kita menambah hitungan untuk kabel terkait, sementara twist di arah lain akan menurunkan hitungan.
Pada saat yang sama ketika kami memproses lilitan untuk kabel tertentu, kami juga melihat jumlah lilitan untuk kabel di sebelah kiri dan kanannya. Jika salah satu dari mereka bukan nol, kita perlu "menyiram" tikungan-tikungan itu ke tumpukan, karena tidak mungkin lagi bagi mereka untuk diurai oleh tikungan-tikungan kemudian ke arah yang berlawanan.
Setelah baris input terakhir, aliran input mengembalikan EOF berulang kali, dan karakter EOF ini ditafsirkan sebagai tikungan di setiap kawat, setidaknya untuk keperluan pembilasan. Ini memaksa program untuk mem-flush jumlah yang beredar di array, tetapi tidak akan menghasilkan jumlah twist yang baru.
Setelah kami selesai memproses input, semua perintah untuk melepaskan kabel sekarang akan berada di stack. Ini berarti kita cukup mematikannya dalam urutan terbalik untuk mengeluarkan instruksi yang diperlukan untuk melepaskan kabel dari bawah ke atas.
sumber
Pyth -
2625 byteSangat mudah, mungkin saya bisa memfilter penyaringan.
Cobalah online di sini .
sumber
in
, memperbaiki, dan itu menyelamatkan saya byte jugaJavaScript (ES6), 178 byte
Mengambil input sebagai array string yang mewakili baris dan mengembalikan array array nilai misalnya
[[2, 3, "R"], [3, 4, "L"], [1, 2, "R"]]
. Pemesanan terbalik membantu dengan eliminasi.sumber
s
berasal? Saya menjalankannya di repl.it dan ia memberi tahu saya bahwa adaReferenceError: s is not defined
.Python 2,
244241 byteMengambil input sebagai daftar string
Contoh:
Memasukkan:
['| | | |', ' X | |', '| | x ', '| X |', ' x | |']
Keluaran:
[[1, 2, 'L'], [2, 3, 'R'], [3, 4, 'L'], [1, 2, 'R']]
Sunting: Diperbaiki untuk kasus:
Memasukkan:
['| | |', ' X |', ' X |', ' x |', '| X', ' X |', ' x |', ' x |', '| | |']
Keluaran:
[[1, 2, 'L'], [2, 3, 'R'], [1, 2, 'R']]
sumber