Pengantar:
Ketika kita berpikir tentang Ladybugs, kita biasanya memikirkan bug oranye merah atau gelap dengan bintik-bintik hitam. Meskipun ini tidak perlu benar, karena ada juga hitam dengan kepik berbintik merah / oranye , atau kepik tanpa bintik sama sekali , kami terutama membayangkan kepik seperti Asian Ladybug ini:
Hal lain yang perlu diperhatikan adalah bahwa bintik-bintik pada ladybugs hampir selalu simetris. Dan di situlah tantangan ini masuk.
Tantangan:
Diberikan bilangan bulat n( >= 0), mengeluarkan kepik seni ASCII berikut ini satu atau beberapa kali, dengan bintik-bintik simetris yang terbagi rata antara kedua sisi, serta dua atau lebih kepik.
Berikut adalah tata letak kepik default:
_V_
/(@I@)\
/ | \
| | |
\ | /
''-!-''
Jika n=0, kami menampilkan kepik seperti di atas.
Ketika nlebih besar dari nol, kami mengisi ruang bug ASCII-art dengan huruf kecil o, atau mengganti |di tengah dengan modal O. Tujuannya adalah untuk membuat nperubahan pada ladybug 'kosong', sambil tetap menghasilkan output simetris (per ladybug), dan menghasilkan sesedikit mungkin ladybug.
Jadi output yang valid untuk n=1adalah:
_V_
/(@I@)\
/ O \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| | |
\ O /
''-!-''
Tetapi ini tidak valid:
_V_
/(@I@)\
/ | \
| o | |
\ | /
''-!-''
Output yang valid untuk n=2adalah:
_V_
/(@I@)\
/ O \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ O \
| | |
\ O /
''-!-''
_V_
/(@I@)\
/ o|o \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| o | o |
\ | /
''-!-''
etc. There are a lot of possible outputs.
Yang pertama nyang tidak mungkin masuk ke ladybug lagi adalah n=24. Dalam hal ini Anda harus membaginya secara merata menjadi dua ladybugs (Anda dapat memilih apakah akan mengeluarkannya bersebelahan, atau di bawah satu sama lain - dengan opsional satu spasi atau satu baris baru di antaranya). Sebagai contoh:
_V_ _V_
/(@I@)\ /(@I@)\
/o o|o o\ /o o|o o\
|o o | o o||o o | o o|
\o o|o o/ \o o|o o/
''-!-'' ''-!-''
ATAU:
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
Aturan tantangan:
nakan berada dalam kisaran0-1000.- Anda dapat memilih untuk output ke STDOUT, kembali sebagai String atau array / daftar 2D-char, dll. Panggilan Anda.
- Memimpin baris baru atau ruang putih yang tidak perlu tidak diizinkan. Trailing white-space dan satu trailing new-line diperbolehkan.
- Seperti disebutkan di atas, ketika dua atau lebih ladybugs diperlukan, Anda dapat memilih apakah akan mengeluarkannya di samping satu sama lain atau di bawah satu sama lain (atau gabungan keduanya ..)
- Ketika dua atau lebih kepik dicetak bersebelahan, ruang opsional tunggal di antaranya diperbolehkan. Ketika dua atau lebih kepik dicetak satu sama lain, satu baris baru opsional di antaranya diperbolehkan.
- Anda dapat memilih tata letak kepik pada langkah apa pun selama urutan, selama asimetris dan sama dengan input
n. - Karena tujuannya adalah untuk memiliki
nperubahan DAN sesedikit mungkin kepik, Anda akan mulai menggunakan lebih dari satu kepik ketika di atasn=23. Tata letak kepik ini tidak harus sama. Bahkan, ini bahkan tidak mungkin untuk beberapa input, sepertin=25ataun=50untuk menyebutkan dua. - Selain itu, terkadang tidak mungkin untuk membagi titik secara merata di antara dua atau lebih kepik. Dalam hal ini Anda harus membaginya secara merata, dengan paling banyak selisih 1 di antaranya.
Jadi n=50, mengingat dua aturan terakhir, ini akan menjadi kemungkinan hasil yang valid (di mana bug pertama memiliki 16 tempat, dan dua lainnya memiliki 17):
_V_ _V_ _V_
/(@I@)\ /(@I@)\ /(@I@)\
/oooOooo\ / O \ /o oOo o\
|ooooOoooo||ooooOoooo||o ooOoo o|
\ | / \oooOooo/ \o oOo o/
''-!-'' ''-!-'' ''-!-''
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program lengkap. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
odan Osebagai gantinya. Saya telah mengubah kata-katanya sedikit.
n=50contoh, saya percaya bahwa maksud Anda bug pertama memiliki 16 tempat dan dua lainnya masing-masing memiliki 17.


Kita mulai dengan menginisialisasi baris baru dan
Selanjutnya kita membaca di sejumlah tempat dari stdin dan menghitung jumlah kepik yang diperlukan.
Kita kemudian dapat memulai loop luar untuk set bug, menghitung jumlah tempat untuk ladybug berikutnya yang akan dirender.
Untuk setiap ladybug, kami menghitung apakah titik pusat besar perlu ditampilkan (jika
Demikian pula, kami menghitung apakah pasangan tempat besar lainnya perlu ditampilkan (jika
Bagian terakhir dari inisialisasi tabel pencarian adalah loop yang menghitung titik kecil mana yang perlu ditampilkan. Intinya algoritma itu adalah: jika
Selanjutnya kita dorong representasi string yang dikodekan dari ladybug ke stack. Ini pada dasarnya hanya string sederhana, tetapi menjadi sedikit berbelit-belit ketika saya mencoba untuk memerasnya ke dalam celah dalam kode sehingga sumber akan membentuk persegi panjang.
Pada titik ini, kami siap memulai loop keluaran, memproses karakter satu per satu, mengonversi case khusus (bintik, garis putus, dll.) Melalui tabel pencarian yang dibuat sebelumnya.
Akhirnya kami memeriksa apakah kami telah menampilkan semua kepik yang diperlukan, jika tidak, lanjutkan kembali ke awal lingkaran luar.