Intro
Pertimbangkan kisi-kisi karakter f A\/seperti
f f f
A
A / \
\ / A
A \/
/
\/
dimana:
fmewakili faucet yang menuangkan aliran air ke bawahAmembagi dua aliran air di atas sehingga tepat setengah ke kiri dan tepat setengah ke kanan\menggeser aliran air di atas ke kanan dengan satu unit/menggeser aliran air di atas ke kiri oleh satu unit- kombinasi
\/menciptakan palung dengan kapasitas tak terbatas yang mengumpulkan aliran air di atasnya [space]adalah ruang kosong yang bisa dilewati air
Dari sini kita dapat membayangkan jalan yang *akan diambil oleh air ( ) yang keluar dari faucet dan jatuh ke dalam bak atau keluar dari area grid:
f f f <-- first second and third faucets
* * *A*
* *A*/ \*
\*/ * *A <-- a '*' is not drawn to the right of this A because it would be out of the 9×7 bounds
* *A*\/ <-- upper trough
**/ *
\/ * <-- lower trough
Dengan asumsi 3 faucet menghasilkan jumlah air yang sama satu per satu kita bisa melihatnya
- Semua air keran pertama mengalir ke bak bawah.
- Setengah dari air keran kedua mengalir ke palung yang lebih rendah dan separuh lainnya terbelah antara palung yang lebih rendah dan jatuh dari kisi.
- Seperempat air keran ketiga mengalir ke palung yang lebih rendah, seperempat jatuh dari dasar grid, seperempat masuk ke palung atas, dan seperempat jatuh dari grid ke kanan.
Dari sini kita dapat mengatakan bahwa (1 + 3/4 + 1/4 + 1/4) / 3 = 75%air ditangkap oleh bak dan (1/4 + 1/4 + 1/4) / 3 = 25%jatuh dari grid.
Tantangan
Anda dapat menyelesaikan salah satu atau semua tantangan ini terkait dengan pengaturan aliran air ASCII ini. Semuanya adalah kode-golf, jawaban terpendek untuk setiap tantangan adalah pemenangnya. Jawaban yang diterima adalah orang yang paling menyelesaikan tantangan, dengan panjang kode total sebagai tie-breaker.
Tantangan 1
Tulis program yang menampilkan sebagian kecil air yang mengalir ke palung untuk kisi-kisi yang diberikan. Keluaran dari contoh di atas adalah sederhana 0.75.
Tantangan 2
Tulis sebuah program yang, dengan grid, menggambar *'s di tempat-tempat air mengalir seperti yang saya lakukan di atas. Anda tidak boleh menimpa apa pun selain karakter spasi dan kisi tidak boleh mengubah ukuran. Jadi untuk sesuatu seperti
f
/A
tidak ada yang perlu dilakukan karena, meskipun air mengalir di kedua sisi A, itu tidak dapat ditarik ke kiri tanpa melepas /dan tidak dapat ditarik ke kanan tanpa membuat grid 2 × 2 lebih besar.
Tantangan 3 (Diperbarui)
Tulis program yang menggunakan dua bilangan bulat non-negatif, total T dan jumlah untuk menjaga K (T> = K). Hasilkan dan gambarkan kisi-kisi dengan tepat fsehingga ketika faucet itu mencurahkan T unit air, tepatnya K akan mengalir ke bak. Jika tidak mungkin untuk melakukan ini dalam grid terbatas untuk pasangan (T, K) tertentu, maka output 'Mustahil'.
Klarifikasi (berlaku untuk semua tantangan)
- Input dapat melalui stdin, atau file, atau bahkan panggilan fungsi pada representasi string dari grid. Cukup jelaskan bagaimana menjalankan input yang berbeda.
- Output harus menuju stdout.
\AdanA/danAAjuga palung seperti yang Anda harapkan.- Grid w oleh h akan selalu berupa persegi panjang yang diformat dengan karakter w * h tanpa menghitung baris baru. Tidak akan ada spasi tambahan dan tidak ada kejadian
*. - Dimensi grid bisa sekecil 1 × 1 dan besar sewenang-wenang. (Cukup besar untuk alasan, int.maxValue atau sejenisnya adalah batas yang dapat diterima. Hal yang sama berlaku untuk T dan K.)
- Aliran di atas
fmengalir tepat melaluinya. - Keran bisa di mana saja, tidak hanya di baris atas.
Aselalu membagi jumlah air yang dituangkan tepat di setengahnya.
Catatan: Hal-hal seperti /Adan //sangat valid. Air tidak bebas mengalir antara karakter (meskipun untuk tantangan 2 tidak ada cukup ruang untuk menggambar).
Jadi, dalam pengaturan
ff
/A
Aliran kiri fmengalir turun, mengenai /dan bergeser ke kiri. Aliran kanan fmengalir ke bawah, mengenai A, setengah ke kanan dan setengah ke kiri antara Adan /.
misalnya
ff
**
*/A*
** *
** *
/Ajika air jatuh ke atas A. Untuk semua tantangan, akan baik untuk mengklarifikasi apakah \Apalung. Untuk tantangan ketiga, haruskah 3 unit jatuh pada Adiasumsikan terbelah 1.5 / 1.5(jadi input benar-benar bilangan rasional tunggal) atau itu 2 / 1, dalam hal mana pihak yang menerima 2?
Amaka kedua belah pihak mendapatkan 1,5. Terserah koder untuk memastikan presisi float tidak menjadi masalah.)
fs