pengantar
Kemarin saya melihat puzzle ulang tahun . Selamat !!
Juga minggu ini saya menonton sebuah episode acara TV Bones di mana mayat ditemukan terkubur di bawah pohon. Untuk menghitung waktu kematian, mereka menghitung cincin pohon.
Lingkaran pohon terbentuk karena pohon tumbuh lebih lambat selama musim dingin dan lebih cepat selama musim panas. Dengan demikian Anda dapat menghitung usia pohon dengan menghitung cincin. Anda juga dapat melihat peristiwa alam seperti musim hujan atau kemarau.
Tantangan
Diberikan bilangan bulat n >= 1
sebagai input, tulis program lengkap untuk menampilkan cincin usia pohon.
Karena cincin dapat berubah bentuk menggunakan tiga karakter yang berbeda ('0', '*', '+') untuk menunjukkan siklus iklim.
Usia 1
0
Usia 2
***
*0*
***
Umur 3 tahun
+++++
+***+
+*0*+
+***+
+++++
Usia 4
0000000
0+++++0
0+***+0
0+*0*+0
0+***+0
0+++++0
0000000
Ukuran pohon adalah kuadrat sisi 2*n - 1
Kemenangan
Kode terpendek dalam byte menang.
('0', '*', '+')
jadi 5 tahun adalah*
Jawaban:
K5,
2730262522 bytePendekatan ini secara iteratif "membungkus" inti (dimulai dengan
"0"
) di keempat sisi menggunakan beberapa karakter lain ({4(|+y,)/x}
). Urutan pembungkus musiman ditentukan oleh3!
urutan modulo 3 ( ). Agak sulit untuk membuat alasnya berbaris tepat.edit:
Alternatif ini membangun seluruh array persegi panjang sekaligus dari rentang eksklusif yang disediakan (
!
) terbalik dan bergabung dengan dirinya sendiri setelah menjatuhkan item (t,1_|t:|
). Kami kemudian mengambil maksimum produk kartesius (u|\:u:
), mengambil seluruh modulo matriks 3 (3!
) dan indeks ke dalam array karakter.Beraksi:
sumber
BBC Basic, 93 byte
Kata kunci yang disingkat sangat membantu di sini. Pada baris 2, saya menggunakan
VDU
perintah (setara dengan Cputchar()
) untuk mencetak setiap karakter. Ini jauh lebih efisien daripadaP.MID$("0*+",p MOD3+1,1)
.Ini sedang berjalan di BeebEm3 pada Mac:
sumber
CJam, 25 byte
Uji di sini.
Penjelasan
sumber
Matlab, 63 byte
Contoh:
sumber
Python 2, 83 byte
Mencetak baris demi baris. Setiap baris dipotong menjadi tiga bagian:
Untuk
n=4
:Kami menghasilkan bagian kiri secara terbalik sebagai
w
, mengkloning2*i
waktu karakter terakhirnya , lalu menambahkan versi asli tanpa karakter pertama.sumber
Python 2, 83 byte
Jika kita menganggap pohon sebagai kisi koordinat, simbol di
(i,j)
ditentukan olehmax(abs(i),abs(j))%3
, atau setaramax(i,-i,j,-j)%3
. Untuk setiap barisi
, kami bergabung dan mencetak simbol di baris itu.sumber
R
dua kali, dan ini lebih lama dari 5 karakter, jadi tugas menang.Pyth, 23 byte
Cobalah online: Demonstrasi
Penjelasan:
sumber
MATLAB,
807873 byteTerima kasih Luis Mendo karena membantu saya mencukur 5 byte!
Contoh
Penjelasan Tidak Disatukan dan Kode
Catatan Kecil
bwdist
adalah fungsi yang merupakan bagian dari kotak alat pemrosesan gambar, dan hanya dapat dijalankan di MATLAB. Oktaf (IIRC) belumbwdist
diimplementasikan sehingga ini tidak dapat dijalankan dalam Oktaf.sumber
eye
dan gandakan elemen-bijaksana denganrot90
versi ed-nya untuk menghasilkan matriks "seed":I=eye(2*input('')-1);a='0*+';a(mod(bwdist(I.*rot90(I),'chessboard'),3)+1)
Python 2, 134 byte
sumber
Perl, 118 byte
Lebih banyak yang harus dilakukan, tetapi versi dasar untuk saat ini. Sekarang dengan kepatuhan spesifikasi ekstra yang lezat.
Pemakaian:
sumber
Matlab 92
sumber
Sed,
277252 karakter(251 kode karakter + 1 opsi baris perintah karakter.)
Diharapkan input dalam format unary .
Contoh dijalankan:
sumber
JavaScript (ES6), 114
Menggunakan lansiran untuk keluaran - font proporsional buruk dan hasilnya jelek. Dalam cuplikan di bawah ini lansiran dialihkan ke badan yang terpotong, memberikan hasil yang lebih baik. Baris baru di dalam backticks signifikan dan diperhitungkan.
Tes menjalankan cuplikan di Firefox.
sumber
Test running the snippet in Firefox
tetapi jelas saya hanya bercanda, Chrome (tidak ada versi Chrome) tidak sesuai dengan EcmaScritpt 6, tidak ada=>
fungsinya....
. Masih jauh dari ES6Ruby, 85 karakter
Contoh dijalankan:
sumber
Moonscript - 104 byte
sumber
C, 138 byte
Fungsi
t
mengambil satu parameter integer - usia.Tidak disatukan (dengan
main
fungsi untuk dengan mudah menjalankan yang di atas):The
stdlib.h
mungkin diperlukan pada beberapa sistem, karena tanpa itu jenis kembalinya fungsi dideklarasikancalloc
akan default keint
. Karenaint
danchar*
tidak harus memiliki ukuran yang sama, pointer yang tidak valid dapat ditulisc
. Dalam kebanyakan sistem 32-bit keduanyachar*
danint
memiliki ukuran yang sama, tetapi ini tidak berlaku untuk sistem 64-bit.sumber