Ini adalah versi ASCII dari tantangan ini . Posting awal dipisahkan per permintaan oleh Martin Ender
pengantar
Mirip dengan Urutan Fibonacci, Urutan Padovan ( OEIS A000931 ) adalah urutan angka yang dihasilkan dengan menambahkan istilah sebelumnya dalam urutan. Nilai awal didefinisikan sebagai:
P(0) = P(1) = P(2) = 1
Istilah 0, 1, dan 2 semuanya 1. Relasi perulangan dinyatakan di bawah ini:
P(n) = P(n - 2) + P(n - 3)
Dengan demikian, ia menghasilkan urutan berikut:
1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12, 16, 21, 28, 37, 49, 65, 86, 114, 151, 200, 265, 351, ...
Menggunakan angka-angka ini sebagai panjang sisi dari segitiga sama sisi menghasilkan spiral yang bagus ketika Anda menempatkan semuanya, seperti Fibonacci Spiral:
Gambar milik Wikipedia
Tugas
Tugas Anda adalah menulis program yang membuat ulang spiral ini dengan seni ASCII, dengan input yang sesuai dengan istilah mana. Karena segitiga dengan panjang sisi 1 (1 karakter) tidak mungkin direpresentasikan dengan baik di ASCII, panjang sisi telah dilebarkan oleh faktor 2. Dengan demikian, segitiga dengan panjang sisi 1 sebenarnya direpresentasikan seperti:
/\
/__\
Jadi, misalnya, jika inputnya 5 (istilah ke-5), outputnya harus:
/\
/ \
/ \
/______\
\ /\
\ /__\
\ /\ /
\/__\/
5 istilah pertama adalah 1, 1, 1, 2, 2, sehingga segitiga memiliki panjang sisi 2, 2, 2, 4, 4 karena pelebaran. Contoh lain untuk input 8:
__________
/\ /\
/ \ / \
/ \ / \
/______\ / \
\ /\ / \
\ /__\/ \
\ /\ / \
\/__\/______________\
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\/
Aturan
- Anda harus mencetak hasilnya, dan input harus berupa bilangan bulat yang sesuai dengan nomor term
- Mengejar dan memimpin baris baru diizinkan, membuntuti spasi setelah garis juga diizinkan
- Kiriman Anda harus dapat menangani setidaknya hingga jangka waktu 10 (9)
- Kiriman Anda harus berupa program atau fungsi lengkap yang mengambil input dan mencetak hasilnya
- Rotasi output diperbolehkan, dalam kelipatan 60 derajat, tetapi ukuran segitiga harus tetap sama, bersama dengan representasi
- Berlawanan arah jarum jam juga diperbolehkan
- Celah standar dilarang
Anda dapat berasumsi bahwa input akan> 0 dan format input yang benar akan diberikan.
Mencetak gol
Ini adalah kode-golf , jadi kode terpendek dalam byte menang. Selamat Tahun Baru semuanya!
Jawaban:
Befunge,
871836798 bytesCobalah online!
Seperti yang sering terjadi pada Befunge, triknya adalah dengan algoritme yang memungkinkan kita untuk merender pola dari atas ke bawah, karena tidak layak untuk merendernya terlebih dahulu dengan ruang terbatas yang tersedia.
Cara ini bekerja adalah dengan terlebih dahulu membangun struktur data sederhana yang mewakili tepi yang diperlukan untuk menggambar spiral. Tahap kedua kemudian mem-parsing struktur itu dari atas ke bawah, menampilkan fragmen tepi yang diperlukan untuk setiap baris output.
Dengan menggunakan teknik ini, kami dapat mendukung hingga n = 15 dalam implementasi referensi sebelum kami mulai mengalami masalah overflow dalam sel memori 8-bit. Penerjemah dengan ukuran sel yang lebih besar harus dapat mendukung hingga n = 25 sebelum kehabisan memori.
sumber
pergi, 768 byte
Ini tentu saja tidak optimal, tetapi itu bukan awal yang buruk. Saya tahu itu mungkin agak sederhana untuk standar golf, tapi itu menyenangkan dan saya harap tidak keberatan jika saya meninggalkan beberapa catatan untuk diri sendiri di masa depan.
Bagaimana itu bekerja
Pada dasarnya saya mensimulasikan 'menggambar kura-kura' seperti di LOGO pada kisi pixel ASCII, tetapi kura-kura hanya dapat melakukan tiga perintah ini:
Sekarang untuk setiap segitiga, saya pergi seperti ini, di mana P adalah 2x nomor Padovan ke-n:
'Fd' keempat berarti saya menelusuri kembali sisi pertama setiap segitiga. Ini membantu untuk kembali ke titik awal yang bagus untuk segitiga berikutnya. Setengah kanan belok memastikan bahwa segitiga berikutnya akan berada dalam orientasi yang tepat.
Untuk bermain golf kura-kura, saya menyimpan 5 variabel keadaan dalam array 态: posisi x, posisi y, kecepatan x, kecepatan y, dan 'rune menggambar'. Pada setiap frame animasi, x + = x kecepatan, y + = y kecepatan, dan rune ditarik.
Lalu saya mengatur tabel 表 yang memberitahu bagaimana sebenarnya melakukan belokan. Kode gilirannya rumit karena cara seni ASCII bekerja. Ini bukan gerakan langsung seperti pada layar piksel. Arah kura-kura, ditentukan oleh kecepatan x dan y, menentukan perubahan yang diperlukan untuk mendapatkan belokan agar terlihat benar.
Untuk mengubahnya, ia melihat kecepatan x dan y saat ini, dan menggabungkannya ke dalam indeks.
Indeks ini digunakan untuk mencari satu set 5 nilai dalam tabel 表. Kelima nilai dalam tabel 表 kemudian ditambahkan ke masing-masing dari 5 variabel dalam keadaan 态. Penyu kemudian secara efektif berbalik, dan siap untuk 'fd' berikutnya.
Untuk rth, setengah dari belokan kanan, ada bagian terpisah dari tabel 表. Diimbangi oleh entri 7 * 5, atau 35, dari tabel pertama di 表.
Terakhir saya melakukan beberapa pengkodean sederhana dari integer tabel menjadi string ascii.
Saya tahu saya bisa 'menyimpan byte' dengan menghapus Hanzi tapi seperti saya katakan, ini tidak optimal dan ada lebih banyak golf yang mungkin ... Saya akan menghapusnya ketika tidak ada optimasi lain yang mungkin. Hanzi itu sebenarnya memiliki makna yang longgar berdasarkan pada makna sebenarnya, dan meskipun saya tidak tahu bahasa Cina, itu membantu saya berpikir tentang program tersebut.
Untuk menguji kode Anda perlu file golang lengkap, dengan header ini
dan catatan kaki ini
Terima kasih
sumber