Tulis program (atau fungsi) yang menggunakan bilangan bulat positif.
Jika inputnya adalah 1
, cetak (atau kembalikan) dua berlian yang berdekatan berdampingan, masing-masing dengan panjang sisi 1 garis miring:
/\/\
\/\/
Untuk setiap input yang N
lebih besar dari 1, lihat output untuk N-1
dan untuk setiap pasangan berlian tetangga, masukkan berlian baru di antara mereka yang panjang sisi adalah jumlah dari panjang sisi kedua tetangga. Cetak (atau kembalikan) pola berlian baru ini.
Jadi ketika 2
input, kita melihat output untuk 1
dan dapat melihat bahwa ada dua berlian tetangga, keduanya dengan panjang sisi 1. Jadi kita memasukkan panjang sisi 2 (1 + 1) berlian di antaranya:
/\
/\/ \/\
\/\ /\/
\/
Untuk input, 3
kita melihat output untuk 2
dan menambahkan dua berlian dengan panjang sisi 3 (1 + 2 dan 2 + 1) di antara dua pasang berlian tetangga:
/\ /\
/ \ /\ / \
/\/ \/ \/ \/\
\/\ /\ /\ /\/
\ / \/ \ /
\/ \/
Melanjutkan polanya, output untuk 4
adalah:
/\ /\
/\ / \ / \ /\
/ \ /\ / \ / \ /\ / \
/ \ / \ / \ /\ / \ / \ / \
/\/ \/ \/ \/ \/ \/ \/ \/\
\/\ /\ /\ /\ /\ /\ /\ /\/
\ / \ / \ / \/ \ / \ / \ /
\ / \/ \ / \ / \/ \ /
\/ \ / \ / \/
\/ \/
Dan seterusnya.
Output Anda mungkin memiliki spasi tambahan pada garis apa pun tetapi hanya hingga satu baris tambahan (dan tidak ada baris baru).
Kode terpendek dalam byte menang.
Jawaban:
Pyth,
5049 byteDemonstrasi
Penjelasan:
sumber
u.iGsM.:G2tQjT9
di saya (parsial) solusi. Saya tidak pernah melihat jawaban Anda ...Common Lisp, 425
Contoh
Tidak disatukan
sumber
CJam,
595857 byteTerima kasih kepada @ MartinBüttner untuk bermain golf 1 byte.
Cobalah online di juru bahasa CJam .
Ide
Untuk input 3 , misalnya, kami hasilkan
dengan memutar senarnya
\
dan mengganti beberapa garis miring terbalik dengan garis miring.Kemudian, kita zip array yang dihasilkan (transpos baris dan kolom) untuk mendapatkan bagian bawah dari output yang diinginkan
Bagian atas adalah byte per byte sama dengan bagian bawah secara terbalik.
Kode
sumber
Rev 1: Ruby 170
Metode baru menghindari membuat berlian besar dan mengurangi.
Rev 0: Ruby, 187
Ukuran berlian dihitung sesuai dengan hubungan perulangan dari https://oeis.org/A002487 Jadi kami membuat array yang
a
berisi semua elemen untuk semua baris dari 1 hinggan
. Kami hanya tertarik pada1<<n-1
elemen terakhir (Ruby memungkinkan kami untuk mendapatkannya dari array menggunakan indeks negatif, -1 menjadi elemen terakhir dalam array), ditambah inital1
dari posisi 0.Baris demi baris dan berlian demi berlian, kami menggambar deretan karakter untuk berlian terbesar, kemudian memotong kolom tengah untuk mendapatkan baris untuk berlian yang dibutuhkan. Rev 1 lebih pendek, tetapi saya menyukai metode ini.
Aritmatika modular digunakan untuk membungkus sehingga ekspresi yang sama menambahkan semua
/
secara langsung dan juga satu ekspresi menambahkan semua\
secara langsung.Tidak digabungkan dalam program uji
sumber