Anda bertanggung jawab untuk membangun jalan bebas hambatan baru. Namun, itu mengarah melalui tanah pegunungan dan karena itu membutuhkan banyak jembatan dan terowongan. Jalan bebas hambatan itu sendiri harus tetap di satu tingkat.
Memasukkan
Anda diberikan deskripsi ASCII kasar tentang bagaimana pegunungan terlihat seperti pada input standar, seperti berikut ini:
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/ \/ \ / \
_ / \ /\ / \
\ / \ / \ / \ /\
\ / \ / \/ \/ \
\ / \ /
\/ \/
Di _
kolom pertama menandai awal dan tingkat jalan. Rentang gunung berdekatan dan jika segmen terakhir akan menjadi jembatan, ia memiliki jumlah karakter yang genap.
Anda dapat mengasumsikan bahwa garis input tidak lebih dari 100 karakter dan tidak ada lebih dari 15 baris. Setiap baris memiliki panjang yang sama yang mungkin ruang-empuk di ujungnya. Jalan tidak pernah dimulai dalam gunung atau jembatan. Hal pertama yang mengikuti ubin jalan di input adalah kemiringan ke bawah atau ke atas.
Keluaran
Outputnya adalah pegunungan yang sama, kecuali sekarang ada jalan di mana sebelumnya hanya permulaannya. Output diberikan pada output standar.
Untuk ini ada banyak aturan:
Jalan harus dimulai dari tempat yang ditunjukkan pada input dan tetap pada level yang sama. Untuk membuatnya lebih mudah, kami telah menyiapkan sejumlah ubin jalan utama yang terlihat seperti ini
_
:_______ \ / \/\/
Jalan harus memanjang hingga ujung pegunungan (yaitu panjang jalur input menentukan seberapa jauh jalan itu berjalan).
Terowongan harus dibor setiap kali gunung berada di mana jalan harus dilalui. Terowongan lurus melewati gunung dan meninggalkan lubang di awal dan di akhir (yaitu sebuah terowongan menggantikan kemiringan gunung dengan tanda kurung tutup di awal dan tanda kurung pembuka di ujungnya).
Terowongan pergi, well, sebuah terowongan di gunung yang biasanya memiliki langit-langit. Untungnya, ubin jalan utama kami dapat digunakan untuk memperkuat langit-langit sehingga terowongan tidak runtuh (garis di atas terowongan harus digunakan
_
untuk memperkuat terowongan):/\ / \ /____\ ___)______(__ \/ \/
Terowongan tidak perlu diperkuat ketika gunung tidak cukup tinggi di atasnya. Kedengarannya aneh bagi saya juga, tetapi saya telah diberitahu bahwa ubin jalan premade cukup kuat untuk menahan bahkan ketika ditempatkan dalam kasus itu (tidak ada langit-langit terowongan digambar ketika ada lereng tepat di atas terowongan):
/\ /\/__\ ___)______(__ \/ \/
Jembatan dibutuhkan setiap kali jalan harus melewati jurang. Untuk jembatan pendek ubin jalan premade cukup kuat tetapi masih memerlukan sedikit dukungan di awal dan akhir jembatan (kemiringan ke bawah pertama di bawah jembatan dan kemiringan ke atas terakhir digantikan oleh
Y
sehingga ada balok penyangga untuk jembatan ):_____ Y Y \/
Jembatan yang lebih panjang membutuhkan dukungan tambahan. Jembatan panjang adalah salah satu yang memiliki lebih dari enam ubin jalan yang tidak didukung dalam satu baris. Jembatan panjang membutuhkan pilar di tengahnya. Pilar mudah dibangun dengan prebuilt kami pilar balok yang terlihat seperti ini:
|
. Setiap pilar membutuhkan dua pilar dan mereka memanjang hingga ke dasar jurang:_____________________________ Y || Y \ /\ || /\ /\/ \ /\ / \||/ \ /\/ \/ \/ \/ \/
Karena input hanya mewakili sebagian dari seluruh pegunungan yang harus dibangun melalui jalan bebas hambatan, maka jalan itu bisa berakhir secara tiba-tiba di tengah jembatan atau terowongan. Aturan jembatan panjang masih berlaku untuk segmen akhir dan Anda dapat mengasumsikan bahwa bagian pertama di luar input yang diberikan mendukung jembatan lagi.
Mengikuti aturan di atas, kami mendapatkan yang berikut untuk input kami:
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/____\/______________\ /__\
_________)______________________(________)(____)____(______
Y Y Y Y Y Y Y YY
\ / \ / \/ \/ \
\ / \ /
\/ \/
Kode terpendek menurut jumlah karakter menang. Trailing whitespace di baris diabaikan untuk validasi.
Masukan sampel 1
_
\ /\
\ / \
\ / \
\ /\ / \ /\ /
\ /\ / \ / \ /\ /\/ \ /
\ / \ / \/ \ / \/ \/\ /
\/ \ / \ / \/
\ / \/
\/
Output sampel 1
____________________________________________________________
Y || YY ||
\ || / \ ||
\ || / \ ||
\ || /\ / \ || /\ /
\ /\ || / \ / \ /\ |/\/ \ /
\ / \ || / \/ \ / \/ \/\ /
\/ \ || / \ / \/
\||/ \/
\/
Masukan sampel 2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/ \/ \ / \ / \ /
_/ \ / \/ \/
\ /
\ /\/
\ /\ /
\/ \ /
\ /
\/
Keluaran sampel 2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/____\/________\ /__________________\ /__\ /____
_)________________(__________________)____________________()____()_____
Y || Y
\ || /\/
\ /\ || /
\/ \|| /
\| /
\/
Catatan
Ruang tertinggal dalam keluaran diabaikan untuk dibandingkan dengan solusi referensi.
Kondisi menang
Kode terpendek menang, seperti kebiasaan dalam golf. Dalam kasus seri, solusi sebelumnya menang.
Uji kasus
Ada dua skrip pengujian, yang berisi kasus pengujian yang identik:
Doa dalam kedua kasus:, <test script> <my program> [arguments]
misalnya ./test ruby bridges.rb
atau ./test.ps1 ./bridges.exe
.
Catatan lain
Tugas ini adalah bagian dari kontes golf yang diadakan di universitas saya selama 2011-W24. Nilai dan bahasa kontestan kami adalah sebagai berikut:
- 304 - Perl
- 343 - C
- 375 - C
- 648 - Python
Solusi kami sendiri (terima kasih kepada Ventero) adalah
- 262 - Ruby
Jawaban:
Perl,
210195194193 karaktermemperbarui
Gagasan yang sama, tetapi diterapkan sangat berbeda, untuk sebagian besar.
Jalankan dengan
perl -p0
(4 karakter dihitung untuk sakelar).Ini juga membutuhkan perubahan pada skrip uji bash, agar tidak mengutip terlalu banyak argumen:
BTW, saya sangat menghargai skrip tes, @ Joey.
berkomentar:
suntingan :
{3,}
" dengan 3 spasi literal dan+
kuantifier, untuk menyimpan karakter lain1while(...)
formulir, di mana saya bisa menghilangkan titik koma di akhir skripasli (lihat riwayat untuk versi yang dikomentari)
Saya sengaja tidak melihat solusi Perl @ Howard sampai milik saya bekerja, tetapi saya dapat meningkatkan golf saya dengan melihat sesudahnya.
Secara khusus, regexps untuk langit-langit terowongan dan memperluas pilar membantu. Bagus sekali, Howard.
Sebaliknya, alternatif saya untuk mendapatkan panjang garis, menggunakan $ _ implisit untuk cetakan, meninggalkan titik koma akhir, dan menghapus baris baru dapat mempersingkat Howard menjadi 222 karakter.
sumber
bash
skrip uji terima kasih kepada Ventero. Saya baru saja mengambil apa yang dia buat dan menamparnya sampai bekerja agak ;-)Perl, 234 karakter
Ini adalah solusi perl regex-only. Itu melewati semua kasus uji yang diberikan.
Versi identik tetapi lebih mudah dibaca menunjukkan langkah-langkah yang diambil untuk mendapatkan hasilnya:
sumber
C ++,
662622598 karakter, 4 barisIni harusnya, saya sudah menguji ini dengan skrip PowerShell sehingga harus ok ...
Edit 1
Mengganti semua konstanta karakter dengan angka, menghapus panggilan berurutan ke std :: cout + beberapa perubahan kecil lainnya.
Edit 2
edit terakhir, hanya untuk membuatnya kurang dari 600. Mengambil g [t] [f] sebagai #define dan memindahkan beberapa hal.
sumber
#define
std::
?Ruby,
382356353 karakterSaya berpikir untuk mencoba solusi non-regex.
Penghemat ruang terbesar di sini adalah menggunakan kondisional
||
operator alih-alihif - elsif - end
. Jadi alih-alih menulisif(a) lorem_ipsum end
saya sudah menulis!a||lopem_ipsum
. Blok yang lebih besar dapat dimasukkan menggunakan tanda kurung!a||(block)
. Jika kondisinya termasuk&&
operator maka mereka harus dinegasikan dengan menggunakan tanda kurung dan a!
atau dengan menggunakan hukum De Morgan.Dan ini sama dengan lebih banyak kata
sumber
Scala, 462 karakter
Tidak terlalu kompetitif, tetapi saya telah belajar banyak tentang ekspresi reguler hari ini. :-)
sumber
Erlang, 1182 karakter
Tidak kompetitif sama sekali. Sejujurnya, saya hanya tertarik untuk menghasilkan beberapa seni ascii yang bagus, tidak begitu banyak dalam bermain golf. Perhatikan bahwa ini tidak menggunakan ekspresi reguler, sebagai gantinya, saya menulis mesin keadaan sendiri. Ini juga akan memerlukan perbaikan overquoting dalam skrip shell, yang disebutkan dalam solusi perl di atas.
sumber
Powershell,
300295 287 byte-8 byte memperbaiki mengintip dari jawaban DCharness'es .
Script tes tidak digabungkan:
Keluaran:
Komik penjelasan:
sumber