Pohon pembagi estetis adalah pohon pembagi input n
yang, untuk setiap nomor komposit m
, memiliki dua anak simpul yang merupakan pasangan pembagi yang paling dekat dengan akar kuadrat dari m
. Simpul kiri harus pembagi yang lebih kecil m
dan simpul kanan harus pembagi yang lebih besar m
. Bilangan prima di pohon seharusnya tidak memiliki simpul anak. Pohon Anda mungkin dalam bentuk seni teks atau gambar. Aturan untuk output seni teks adalah sebagai berikut.
Aturan jarak
Untuk menghapus node di pohon, kami memiliki aturan berikut:
- Node pada kedalaman tertentu dari root semua harus berada pada baris teks yang sama dalam output.
/ \ TIDAK / \ / \ / 3 2 3 2
- Untuk node kiri, cabang yang masuk harus di kanan atas jika node adalah angka satu digit, yang lain, tepat di atas digit terakhir. Contoh:
/ DAN / 3 720
- Untuk node kanan, cabang yang masuk harus di kiri atas jika node adalah angka satu digit, atau di atas angka pertama. Contoh:
\ AND \ 7 243
- Untuk cabang kiri yang keluar, cabang harus mulai satu ruang di sebelah kiri nomor. Contoh:
275 / 11
- Untuk cabang kanan keluar, cabang harus mulai satu ruang di sebelah kanan nomor. Contoh:
275 \ 25
- Setiap dua node pada tingkat pohon yang sama harus memiliki minimal dua ruang di antara mereka. Pada saat yang sama, setiap dua sub pohon pada tingkat pohon yang sama harus memiliki ruang sesedikit mungkin di antara mereka.
Pohon ini tidak berfungsi karena sub pohon ** ** terlalu dekat. 504 / \ / \ / \ / \ 21 24 / \. / \ / \. / \ 3 7. 4 6 . / \ / \ .2 2 2 3 Sementara pohon ini memang memiliki ruang yang cukup di antara cabang-cabangnya. 504 / \ / \ / \ / \ / \ 21 ... 24 / \ ... / \ / \ ... / \ 3 7 ... 4 6 ... / \ / \ ... 2 2 2 3
- Jika ada dua sub pohon yang terlalu berdekatan pada pohon, mereka dapat dipisahkan dengan menambahkan satu baris cabang
/\
ke pohon di atas orang tua.
441 / \ Baris terakhir belum diisi dan kami sudah kehabisan ruang. 21 21 / \ / \ Tambahkan baris cabang lainnya 441 / \ Hampir, tetapi 7 dan 3 terlalu berdekatan. / \ Satu baris lagi harus melakukannya. 21 21 / \ / \ 3 7 3 7 Tambahkan baris cabang lainnya 441 / \ Dan kita sudah selesai. / \ / \ 21 21 / \ / \ 3 7 3 7
Contohnya
Sebagai contoh lengkap, pohon pembagi 24 akan terlihat seperti ini:
24
/ \
/ \
4 6
/ \ / \
2 2 2 3
4 dan 6 adalah pasangan pembagi paling dekat dengan akar kuadrat dari 24. 4 ada di sebelah kiri, karena lebih kecil. Pada baris berikutnya, angka 2 di sebelah kiri 3, karena lebih kecil.
Pohon pembagi untuk 63 akan terlihat seperti:
63 and NOT like this 63
/ \ / \
7 9 3 21
/ \ / \
3 3 7 3
Pada pohon yang salah, 3 dan 21 bukan pasangan pembagi yang paling dekat dengan akar kuadrat dari 63, dan 3 dan 7 tidak diurutkan dengan benar. Namun, penempatan cabang pada 21 benar.
Untuk 42, Anda harus memiliki:
42 and NOT 42
/ \ / \
6 7 21 2
/ \ / \
2 3 3 7
Mari kita lihat 720. Perhatikan bahwa kita membutuhkan lima tingkat cabang dari 720
sehingga sub pohon 24
dan 30
spasi benar. Juga, perhatikan bahwa 24
dan 30
memiliki dua tingkat cabang karena 4
dan 6
memiliki simpul anak yang perlu spasi yang benar dan simpul anak 30
perlu berada pada tingkat yang sama dengan simpul anak-anak 24
.
720
/ \
/ \
/ \
/ \
/ \
24 30
/ \ / \
/ \ / \
4 6 5 6
/ \ / \ / \
2 2 2 3 2 3
Tantangan
- Tugas Anda adalah untuk membangun pohon pembagi yang ditata secara estetika dan ditempatkan dengan benar untuk input
n
, di manan
bilangan bulat positif lebih besar dari 1. - Output Anda mungkin berisi spasi awal dan akhir dan baris baru awal dan akhir, tetapi sebaliknya harus sesuai dengan aturan spasi yang diberikan di atas.
- Output Anda diperbolehkan menjadi: seni teks, gambar (format lain yang akan ditambahkan, jika perlu).
- Untuk gambar, pastikan simpul pohon Anda memiliki jarak yang baik, dan simpul pada ketinggian yang sama di pohon berada pada ketinggian yang sama pada gambar.
- Ini kode golf. Jumlah byte terkecil (atau setara) menang.
Penghargaan kepada Stewie Griffin karena memikirkan ide ini, dan banyak terima kasih kepada Peter Taylor, Martin Ender, Mego, dan Eyss Iʀᴋ atas bantuan mereka dalam menulis ulang spesifikasi. Seperti biasa, setiap saran atau koreksi sangat dihargai. Semoga berhasil dan bermain golf dengan baik!
Lebih banyak kasus uji:
2
4
/ \
2 2
20
/ \
4 5
/ \
2 2
323
/ \
17 19
362880
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
576 630
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
24 24 21 30
/ \ / \ / \ / \
/ \ / \ / \ / \
4 6 4 6 3 7 5 6
/ \ / \ / \ / \ / \
2 2 2 3 2 2 2 3 2 3
1286250
/ \
/ \
/ \
/ \
/ \
1050 1225
/ \ / \
/ \ / \
/ \ / \
30 35 35 35
/ \ / \ / \ / \
5 6 5 7 5 7 5 7
/ \
2 3