Backstory
Penafian: Dapat berisi informasi buatan tentang kanguru.
Kanguru melewati beberapa tahap perkembangan. Seiring bertambahnya usia dan semakin kuat, mereka bisa melompat lebih tinggi dan lebih lama, dan mereka bisa melompat lebih banyak sebelum mereka lapar.
Pada tahap 1 , kanguru sangat kecil dan tidak bisa melompat sama sekali. Meskipun demikian, secara konstan membutuhkan makanan. Kita bisa mewakili pola aktivitas kanguru tahap 1 seperti ini.
o
Pada tahap 2 , kanguru dapat membuat lompatan kecil, tetapi tidak lebih dari 2 sebelum lapar. Kita bisa mewakili pola aktivitas kanguru tahap 2 seperti ini.
o o
o o o
Setelah tahap 2 kangguru membaik dengan cepat. Pada setiap tahap selanjutnya, kanguru dapat melompat sedikit lebih tinggi (1 unit dalam representasi grafis) dan dua kali lebih banyak. Misalnya, pola aktivitas kanguru tahap 3 terlihat seperti ini.
o o o o
o o o o o o o o
o o o o o
Untuk tahap n , pola aktivitas terdiri dari 2 n-1 V-berbentuk melompat dari ketinggian n .
Misalnya, untuk tahap 4 , ada 8 lompatan tinggi 4 .
o o o o o o o o
o o o o o o o o o o o o o o o o
o o o o o o o o o o o o o o o o
o o o o o o o o o
Tugas
Menulis sebuah program penuh atau fungsi yang mengambil bilangan bulat positif n sebagai masukan dan cetak atau mengembalikan ASCII seni representasi dari tahap n pola aktivitas kanguru.
Ruang putih dan kode pelarian ANSI yang diperbolehkan diperbolehkan, selama polanya terlihat persis seperti yang digambarkan di atas.
Jika Anda memilih fungsi yang mengembalikan output, itu harus mengembalikan string atau karakter array yang menampilkan output yang tepat saat dicetak. Mengembalikan array string tidak diizinkan.
Anda dapat menggunakan karakter apa pun yang dapat dicetak dan bukan spasi putih o
, asalkan konsisten dalam pola aktivitas dan melintasi semua pola dalam jawaban Anda.
Ini adalah kode-golf ; semoga jawaban tersingkat dalam byte menang!
o
. Bisakah Anda menggunakan karakter apa pun untuk mewakili spasi (asalkan berbeda?)?Jawaban:
05AB1E ,
1210 bytePenjelasan:
Menggunakan pengkodean CP-1252 . Cobalah online!
sumber
MATLAB,
92 90 8684 byteCobalah online!
eye
menciptakan matriks identitas. Jika kita membalik dan menggabungkan yang asli yaitu[fliplr(p),p]
kita mendapatkan (untukn=3
):Dengan
repmat(...,1,2^n/2)
kami ulangi2^(n-1)
kali ini dan dapatkanDari ini kami hanya menghapus kolom yang tidak perlu, dengan
A(:,n+1:n:end)=[];
sumber
Arang , 14 byte
Cobalah online!
Penjelasan
Nλ
memasukkan bilangan bulat ke dalamλ
.P^
adalah cetak multi arah (SE dan SW) dari×λo
(perkalian stringλ
dengano
). KemudianF⁻λ¹
jalankan a untukλ - 1
kali loop , di mana‖O→
mencerminkan semuanya ke kanan dengan tumpang tindih.sumber
P^
adalah cetak multi-arah (SE dan SW) " Keren, itu adalah sesuatu yang jarang Anda lihat dalam bahasa pemrograman!Python 2 , 87 byte
Cobalah online!
Menggunakan rumus untuk koordinat
(i,j)
yang berisi lingkaran, lalu bergabung dan mencetak kisi. Ada banyak aroma golf di sini -''.join
, dua rentang bersarang,for
lebihexec
, jadi mungkin ada perbaikan.sumber
Python 2,
8381 byteCobalah online!
sumber
exec
trik dapat menyimpan beberapa lagi.Befunge,
9891 byteIni menggunakan a
,
di tempato
, karena itu memungkinkan kita untuk menyimpan beberapa byte.Cobalah online!
Penjelasan
Dengan diberi nomor tahap, n , kita mulai dengan menghitung tiga parameter pola berikut:
The jump_len dinormalkan untuk menghindari itu menjadi nol untuk tahap 1 kanguru dengan:
Kita kemudian dapat menampilkan pola lompatan dengan mengulangi koordinat x dan y dari area output, dan menghitung karakter yang sesuai untuk output untuk setiap lokasi. The y koordinat menghitung turun dari n - 1 ke 0, dan x mengkoordinasikan jumlah turun dari lebar - 1 ke 0. Kami menentukan apakah sebuah titik yang perlu ditampilkan dengan rumus berikut:
The show_dot boolean digunakan sebagai indeks tabel untuk menentukan karakter yang sebenarnya untuk output pada setiap lokasi. Untuk menghemat ruang, kita menggunakan awal baris terakhir sumber sebagai tabel itu, itulah sebabnya
o
karakter kita akhirnya menjadi a,
.sumber
J ,
2825 byteDisimpan 3 byte berkat @ Conor O'Brien .
Ini didasarkan pada trik palindrome dari solusi @ muddyfish .
Cobalah online!
Penjelasan
sumber
' o'{~3 :'(}."1,.~|."1)^:y=i.y'
. Saya berharap bisa menemukan cara untuk menghapus kata kerja eksplisit itu ... Sial^:
.u&v
cukup bagus.Pyke, 11 byte
Coba di sini!
sumber
Haskell , 100 byte
Cobalah online! Penggunaan:
k 3
.Penjelasan:
Diberikan satu baris
r
, satu kolomc
danm = 2(n-1)
satuo
diatur jikac mod m
sama denganr
ataum-r
. Pemahaman daftar terluar menetapkan rentangr
darin-1
ke0
, yang berikutnya menetapkan rentangc
dari0
kem*2^(n-1)
dan tindakan paling dalam sebagai pengembalian bersyarat'o'
jika formula di atas dipenuhi dan' '
sebaliknya. Ini menghasilkan daftar string yang diubah menjadi string baris baru yang dipisahkan olehunlines
. Untukn=1
fungsi menghasilkan kesalahan pembagian-oleh-nol, jadi kasus ini ditangani secara eksplisit di baris pertama.sumber
['o'|mod c m`elem`[m-r,r]]
bagian itu!C #,
180, 173171 byteTidak akan memenangkan ini, memposting untuk kontestan C # lainnya sebagai sesuatu yang dapat mereka kalahkan.
program lengkap:
sunting: -7 byte terima kasih kepada @KevinCruijssen
sunting: -2 byte, disederhanakan jika
sumber
,i
; Anda dapat menggunakan kembalii
alih-alihn-1
setelah if-check;||
bisa|
;j++
dapat dihapus dan++
dapat ditambahkan kej
. Jadi total:(n)=>{var s=new string[n];for(int x=0,a=1,j=0,i;j<=Math.Pow(2,n)*(n*n-n);){i=j++%n;s[n-i-1]+=x%n==i?'o':' ';if(i==n-1){x+=a;a*=x==i|x==0?-1:1;}}return string.Join("\n",s);};
( 173 bytes )||
dan&&
kemudian menyimpannya dalam program yang lengkap.Pyth , 30 byte
Program yang mengambil input bilangan bulat dan mencetak hasilnya. Gunakan tanda kutip
"
sebagai gantio
.Cobalah online!
Bagaimana itu bekerja
sumber
Python 2 ,
11511310898 byteCobalah online!
Menggunakan
range(-n+1,n-1)
untuk membuat jumlah ruang mutlak antara bagian bawah dano
untuk menghasilkandan kemudian menambahkan lebih banyak salinan, memutar semuanya 90º dan menambahkan yang terakhir
o
di kanan bawahsumber
J ,
5847 byteDisimpan 11 byte menggunakan ide matriks identitas dari solusi @ flawr .
Cobalah online!
Aplikasi langsung dari definisi.
Penjelasan
Untuk
n = 3
, membuat matriks identitas pesanan n .Lalu cermin untuk membuatnya
Ulangi itu 2 n -1 kali dan jatuhkan kepala setiap baris pada duplikat
Gunakan nilai-nilai itu sebagai indeks ke dalam array char
[' ', 'o']
untuk menghasilkan array char 2dsumber
JavaScript (ES6), 83 byte
sumber
Jelly , 11 byte
TryItOnline!
Bagaimana?
Karakter yang dapat dicetak yang digunakan adalah
0
.Mengembangkan metode jawaban Dennis untuk pertanyaan sebelumnya tentang masalah kanguru.
sumber
ŒḄ¡Ṭ€z0o⁶ṚY
,.MATL, 27 byte
Cobalah di MATL Online
sumber
Python 3 , 177 byte
Cobalah online!
sumber
Perl 6 ,
1049388 byteSisipan
o
ke dalam array 2D, lalu cetak.sumber
05AB1E , 16 byte
Cobalah online!
Kenapa dan bagaimana?
sumber
Java 8, 254 byte
Golf:
Tidak Disatukan:
Output program:
sumber
PHP, 157 byte
Tidak Disatukan:
sumber
'o'
dengan1
dan setiap''
dengan0
. Semoga berhasil, Juga, ruang dapat diganti olehO
atau9
. Yang penting adalah polanya, sesuai aturan. Tapi verifikasi dulu