Ini kepalaku:
\ /-- -|
/ -\ | | |
\ \ \ \ |
--\ | \ | |
/ |--| / / |
/|- //--| / |
| | || //\ |
| \ /| // \ |
Ini terdiri dari delapan rambut. Rambutku terlalu panjang. Harap potong setiap untai individu hingga panjang yang saya tentukan.
Memasukkan
Daya tarik utama di bagian ini adalah kepala rambut yang sebenarnya. Berikut adalah representasi grafis, kode warna, bersama dengan animasi , untuk yang malas:
Dan di sini adalah spesifikasi lengkap untuk apa set rambut:
- Rambut individu, yang akan kita sebut helai , akan terbuat dari
/
,\
,|
, dan-
karakter ASCII, selanjutnya dikenal sebagai atom . - Seluruh kepala pendengaran (semua helai digabungkan) akan menjadi
c
kolom denganr
baris, di manac
≥ 1 danr
≥ 2. - Setiap helai akan ...
- mulai dari baris terakhir dari kepala (baris
r
- 1). - memiliki panjang di
l
manal
≥ 2.
- mulai dari baris terakhir dari kepala (baris
- Helai dapat diuraikan dengan metode berikut:
- Mulai dari bagian bawah untaian. Ini akan menjadi
/
,|
atau\
atom, yang akan kita sebut akar . (Helai diurai dari kiri ke kanan, dipesan oleh root.) - Temukan atom yang mengarah ke akar.
- Sebuah
|
atom menunjuk ke atas dan ke bawah. Sebuah-
atom menunjuk ke kiri dan ke kanan (tetapi tidak pernah bisa menunjuk ke akar karena hanya akar yang bisa berada di baris paling bawah). Sebuah/
atom menunjuk ke kiri dan ke kanan, dan sebuah\
atom melakukan yang sebaliknya. - Akan selalu ada tepat satu atom yang mengarah ke atom akar.
- Sebuah
- Temukan atom yang tidak digunakan (yang belum menjadi bagian dari untaian) yang mengarah ke atom ini dan juga tidak di bawah atom ini (rambut tidak bisa tumbuh ke bawah, tetapi ke samping tidak apa-apa).
- Jika ada nol, Anda telah mencapai ujung untaian!
- Jika ada, ini adalah atom untai berikutnya. Ulangi langkah 3 dengan atom ini. (Atom ini sekarang ditandai sebagai "digunakan" untuk keperluan langkah 3, karena merupakan bagian dari untaian.)
- Tidak akan pernah ada banyak atom yang tidak digunakan di sini pada titik mana pun di kepala.
- Mulai dari bagian bawah untaian. Ini akan menjadi
The format masukan akan menjadi:
- Kepala rambut. Dapat berupa input apa adanya (input multiline dengan baris baru literal), atau dengan pembatas pilihan Anda menggantikan baris baru. Perhatikan bahwa kepala akan selalu berbentuk persegi panjang; yaitu trailing whitespace akan ditambahkan seperlunya (rambut garis lurus yang aneh di sebelah kanan hanya untuk menghilangkan whitespace trailing tambahan untuk menghindari kebingungan).
- Angka ≥ 1 menentukan berapa banyak rambut untuk dipotong. Ini akan dijelaskan secara rinci di bagian selanjutnya.
Anda dapat menerima input ke suatu fungsi, menggunakan STDIN / STDOUT, dll. (Apa pun yang masuk akal ).
Keluaran
Output Anda akan menjadi kepala rambut dengan potongan rambut diterapkan. Untuk memberikan potongan rambut, cukup kurangi panjang setiap helai rambut dengan jumlah yang ditentukan (yang akan selalu 1 atau lebih besar), mulai dari titik akhir rambut bergerak ke arah akar. Namun, selalu biarkan root tetap utuh!
Ini contoh sederhana. Katakan input untuk kepala adalah
\
/
|
|
Dengan input kedua 2
, Anda akan memotong dua atom dari untai dan mendapatkan hasil
|
|
Dan dengan input 42
, output hanya akan menjadi
|
Perhatikan bahwa spasi putih sebelum dan sesudah kepala sama sekali tidak relevan; Anda dapat memotong baris baru atau Anda dapat menambahkan lebih banyak lapisan. Tidak masalah, asalkan kepalanya tetap utuh. (Anda dapat melakukan apa pun yang Anda inginkan dengan mengikuti spasi juga.)
Uji Kasus
Untuk semua kasus uji, contoh yang disajikan pada awal posting ini akan digunakan.
Panjang potong rambut = 1:
/- |
/ \ | |
\ \ \ \ |
--\ | \ | |
/ |-- / / |
|- //--| / |
| | || // |
| \ /| // \ |
Panjang 3:
|
\ |
--\ | \ |
/ |-- / / |
|- // | / |
| || // |
| \ /| // \ |
Panjang 7:
|- / |
| | / |
| \ /| // \ |
Panjang 1337:
| \ /| // \ |
Mencetak gol
Ini adalah kode-golf , jadi kode terpendek dalam byte akan menang!
-
untai ketiga dari kiri di titik|
keempat dari kiri-
, tidak apa itu menunjuk ke . Misalnya,|
tidak menunjuk ke/
dalam untai pertama, tetapi menunjuk ke oleh/
. (Ya, saya tahu ini membingungkan; saya harus mengulang GIF beberapa kali karena saya bingung sendiri!) Cara yang lebih mudah untuk memahami ini mungkin hanya dengan melihat bagian atas untaian kedua.-
harus bergabung ke untai keempat , bukan yang ketiga.Jawaban:
JavaScript (E6) 195
212 222 232Menggunakan fungsi rekursif R untuk menemukan jalur setiap untai dan menandai posisi mulai dari 1 untuk yang paling jauh dari root. Maka mudah, dalam pass kedua, untuk mengganti posisi yang ditandai lebih rendah dengan kosong.
Tes di konsol FireFox / FireBug
Keluaran
sumber