(Terinspirasi saat menggambar di papan menghapus kering)
Tantangan:
Diberikan string input yang berisi karakter yang mewakili warna berbeda dari spidol kering pada papan tulis, menampilkan urutan penggambarannya, dari awal hingga akhir.
Memasukkan:
String yang berisi warna marker penghapus kering yang diwakili oleh huruf alfabet (huruf atas berbeda dari huruf kecil, Anda dapat mengganti karakter apa pun yang digunakan dalam contoh saya selama setiap warna memiliki huruf yang berbeda). Sisa papan tulis akan menjadi ruang putih. Hanya akan ada satu garis dari setiap warna per papan. Tidak akan ada input di mana semua baris saling tumpang tindih (Lihat test case 4
). Semua garis akan lurus dan horizontal atau vertikal.
Keluaran:
Urutan garis digambar di papan tulis, dari yang pertama ditarik hingga yang terakhir. Jika ada beberapa solusi untuk input apa pun, Anda dapat mengeluarkan salah satu dari mereka. Outputnya dapat diformat lagi yang Anda inginkan: string karakter tunggal atau dipisahkan oleh spasi, baris baru, dll. Selama karakter yang digunakan cocok dengan yang digunakan dalam input Anda.
Kasus uji:
Input 1:
R
R
BBRBB
R
Output 1:
BR
Input 2:
GY
GY
RRRRGYRRR
GY
GY
BBBBBBBB
GY
GY
Output 2:
RGYB // or RYGB
Input 3:
R P
R P
AAAARAAAAPA
R P
R P
GGGGRGGG P
R
Output 3:
AGPR // or APGR
Input 4:
O Y
RRRYR
O Y
GOGGG
O Y
Keluaran 4:
// Undefined, does not need to be handled by your program
Input 5:
YYYB
B
B
Output 5:
// YB or BY
Aturan:
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
Jawaban:
Perl, 103 + 2 = 105 byte
Jalankan dengan
-n0
(penalti 2 byte).Penjelasan:
Satu sedikit kehalusan di sini datang dengan input seperti ini:
Lihatlah baris keempat di sini. Jika urutan penulisan adalah BACBD, mungkin akan ada garis horizontal
B
di sana tanpa melanggar asumsi masalah (selain itu hanya ada satu baris dari setiap warna, sesuatu yang tidak kami periksa). Untuk mengatasi ini, kami memastikan di regex terakhir bahwa setiap baris dimulai dengan huruf (atau digit atau garis bawah, tetapi itu tidak mungkin), dan bergantung pada kenyataan bahwa garis paralel akan ditemukan dari kiri ke kanan dan atas -to-bottom (karena regex akan menemukan kecocokan pertama dalam string). Dengan demikian, karakter pertama dari setiap baris yang ambigu di sini akan ditimpa sebelum garis itu sendiri dilihat sebagai pertandingan, dan yang mencegah pencocokan regex.sumber
perl -n0E '/.*/;for$i(/(\S)(?=(?:(?:.{@{+}})?(?:\1| ))*(?!.*\1))/gs){/.*/;unless(/$i+[^$i\s]+$i/||/$i(.{@{+}}[^$i ])+.{@{+}}$i/s){$r="$i$r";s/$i/ /g;last}}/\S/?redo:say$r'
(yang membutuhkan jalur input harus benar-benar empuk dengan spasi untuk semua panjang yang sama))Python 2, 199 byte
Ini berakhir jauh lebih lama daripada yang saya pikir awalnya. Terlepas dari
rindex
saya bisa melihat ini sebagai program yang sangat bagus untuk diterjemahkan ke dalam Pyth.Mengambil daftar garis dan menampilkan daftar karakter. Kode menghasilkan permutasi secara rekursif, memastikan bahwa tidak ada garis yang ditarik yang seharusnya ditarik di atas garis saat ini.
Kode ini menyalahgunakan banyak fitur Python, misalnya mengambil
w
kekuatan boolean, menguji set kosong dengan memeriksa subset dari{0}
(karena set saya tidak pernah mengandung non-string), dan favorit saya, membedakan daftar dariNone
dengan memeriksa apakah itu representasi lebih besar dariZ
.Kode yang dijelaskan
sumber