Tulis sebuah program atau fungsi yang mengambil dalam bilangan bulat positif N dan mengeluarkan angka N pertama dari pola zigzag yang menguatkan ini, hanya menggunakan garis yang diperlukan:
26
25 27 .
10 24 28 .
9 11 23 29 .
2 8 12 22 30 44
1 3 7 13 21 31 43
4 6 14 20 32 42
5 15 19 33 41
16 18 34 40
17 35 39
36 38
37
Jadi, jika N adalah 1
output
1
Jika N adalah 2
, outputnya adalah
2
1
Jika N adalah 3
output
2
1 3
Jika N adalah 4
output
2
1 3
4
Jika N adalah 10
output
10
9
2 8
1 3 7
4 6
5
Jika N adalah 19
output
10
9 11
2 8 12
1 3 7 13
4 6 14
5 15 19
16 18
17
dan seterusnya.
Catatan
Setiap puncak atau palung zigzag mencapai titiknya satu garis lebih jauh dari garis dengan zigzag
1
daripada puncak atau palung sebelumnya.N tidak terbatas pada
44
. Zigzag tumbuh dalam pola yang sama dan N yang lebih besar harus didukung.Angka dengan banyak digit hanya boleh "menyentuh" di sudutnya, seperti yang digambarkan. Pastikan ini berfungsi saat N berada di
100
atas.Seharusnya tidak ada baris kosong (atau spasi saja) dalam output kecuali satu baris tambahan opsional.
Setiap garis dapat memiliki jumlah ruang trailing apa pun.
Mencetak gol
Kode terpendek dalam byte menang. Tiebreaker adalah jawaban sebelumnya.
Jawaban:
Jelly ,
413729 byteCobalah online!
Bagaimana itu bekerja
sumber
PHP,
211177164163 byteMemprediksi puncak dengan
$n
dan meningkatkan array secara dinamis di kedua arah, menggunakan($x, $y)
kursor keluaran.Bilangan disejajarkan dengan
str_pad()
dan hasil akhir adalahimplode()
array dari string ($g
).Uji secara online!
Pembaruan: dihapus 34 byte dengan menyingkirkan array_pad yang tidak diperlukan (). Update2: mengikuti @ masukkan nama pengguna, saran untuk mempersingkat lebih sedikit. Update3: mengikuti saran @ Lynn untuk menghemat satu byte lagi dengan ~ õ yang memaksakan penggunaan charset LATIN-1. (tidak tersedia di emulator PHP online jadi tidak termasuk di sana)
sumber
$arr = [];
, Anda dapat merujuk$arr[anything]
. Beberapa kasus akan menampilkan pemberitahuan tetapi diabaikan di sini. Perhatikan bahwa membaca hal-hal seperti ini mungkin tidak akan banyak membantu Anda untuk belajar bahasa. Komentar Anda membuat saya sadar bahwa saya bisa membuatnya lebih pendek karena pada awalnya saya pikir saya perlu menambahkan array saya tetapi saya tidak melakukannya. :)for($x=0,$d=-1,$h=$n=2,$y=$a=1;$a<=$argv[1];$y+=$d){$g[$y]=str_pad($g[$y],$x).$a;$x+=strlen($a);if($a++==$n){$h+=2;$n+=$h-1;$d*=-1;}}ksort($g);echo implode("⏎",$g);
(Ganti ⏎ dengan baris baru yang sebenarnya.)~õ
adalah alternatif dua-byte untuk"⏎"
.Pyth,
6053524642393836343231 byte39: Sekarang setara dengan versi Jelly-bug-fix , dan saya telah mengungguli versi pesaing Dennis!
38: Saya pernah bermain golf dengan Dennis!
36: Saya telah keluar main golf lagi Dennis!
34: Bahkan lebih rendah dari versi bug-fix-nya!
31: 32 -> 31 terima kasih kepada Dennis.
Cobalah online!
Bagaimana itu bekerja
sumber
MATLAB, 148 byte
Perhatikan bahwa spasi hilang dalam Oktaf, karena MATLAB mencetak karakter yang diindeks dengan
0
spasi, sementara oktaf tidak menghilangkan karakter itu.Penjelasan:
sumber
Haskell,
144142 byteContoh penggunaan:
Bagaimana itu bekerja:
Sunting: Terima kasih @Lynn untuk dua byte!
sumber
JavaScript (ES6), 213 byte
Dimana
\n
mewakili karakter baris baru literal. Penjelasan:Untuk mempersingkat
pow(-1,ceil(sqrt(i)))
saya menulis ulang karenasqrt(i-1)&1||-1
bagaimanapun ini tidak bekerja untuki=0
memperbaikinya sehingga saya menambahkan 1 tetapi ini kemudian membalik tanda hasil yang mengapa saya berakhir dengann-=
.sumber
Python 2, 137 byte
Lihat output di ideone .
sumber