Kita bisa menggulung bilangan asli dalam spiral persegi panjang:
17--16--15--14--13
| |
18 5---4---3 12
| | | |
19 6 1---2 11
| | |
20 7---8---9--10
|
21--22--23--24--25
Tetapi sekarang setelah kita memilikinya di kotak persegi panjang kita bisa melepas spiral dalam urutan yang berbeda, misalnya pergi searah jarum jam, mulai dari utara:
17 16--15--14--13
| | |
18 5 4---3 12
| | | | |
19 6 1 2 11
| | | |
20 7---8---9 10
| |
21--22--23--24--25
Urutan yang dihasilkan jelas merupakan permutasi dari bilangan asli:
1, 4, 3, 2, 9, 8, 7, 6, 5, 16, 15, 14, 13, 12, 11, 10, 25, 24, 23, 22, 21, 20, 19, 18, 17, ...
Tugas Anda adalah untuk menghitung urutan ini. ( OEIS A020703 , tetapi peringatan spoiler: itu berisi definisi menarik lainnya dan beberapa rumus yang mungkin ingin Anda ketahui sendiri.)
Fakta menyenangkan: ke-8 pesanan yang mungkin dibatalkan memiliki entri OEIS mereka sendiri.
Tantangan
Dengan bilangan bulat positif n
, kembalikan n
elemen ke-5 dari urutan di atas.
Anda dapat menulis suatu program atau fungsi, mengambil input melalui STDIN (atau alternatif terdekat), argumen baris perintah atau argumen fungsi dan mengeluarkan hasilnya melalui STDOUT (atau alternatif terdekat), nilai pengembalian fungsi atau parameter fungsi (keluar).
Aturan standar kode-golf berlaku.
Uji Kasus
1 1
2 4
3 3
4 2
5 9
6 8
7 7
8 6
9 5
100 82
111 111
633 669
1000 986
5000 4942
9802 10000
10000 9802
Untuk daftar lengkap hingga dan termasuk n = 11131
melihat file-b pada OEIS .
sumber
jelly.py
dan mencari tahu rantai mana yang didukung.Japt,
201916 byteUji secara online!
Berdasarkan pengamatan itu
Atau, lebih tepatnya, itu
Saya tidak tahu apakah penjelasan ini ada di halaman OEIS, karena saya belum melihatnya.
sumber
Julia, 28 byte
Ini adalah fungsi lambda yang menerima integer dan mengembalikan integer. Untuk menyebutnya, tetapkan ke variabel.
Kami mendefinisikan m menjadi bilangan bulat terbesar sehingga m 2 ≤ n -1, yaitu akar kuadrat bilangan bulat dari n -1 (
isqrt
). Kita kemudian dapat menyederhanakan ekspresi OEIS 2 ( m + 1) m - n + 2 ke bawah menjadi 2 ( m 2 + m + 1) - n .Cobalah online
sumber
CJam, 14 byte
Menggunakan pendekatan Alex: di
2*(m^2+m+1)-n
manam = isqrt(n-1)
.sumber
ES7,
312826 byteSaya telah menemukan formula Alex secara mandiri tetapi saya tidak dapat membuktikannya karena saya tidak berada di dekat komputer pada saat itu.
Sunting: Disimpan 3 byte sebagian berkat @ETHproductions. Menyimpan 2 byte lebih lanjut.
sumber
n=>((m=--n**.5|0)+m*m)*2-n+1
akan bekerja, saya pikir.--n
di sana ...Pyth, 21 byte
Cobalah online!
Tidak ada yang mewah terjadi. Metode yang sama seperti pada jawaban JAPT.
sumber
MATL ,
1613 byteBerdasarkan jawaban Lynn CJam .
Cobalah online! (
Y[
telah diganti olehk
sesuai dengan perubahan bahasa)Ini menggunakan pendekatan yang berbeda dari jawaban lain ( 16 byte ):
Ini secara eksplisit menghasilkan dua matriks spiral (sebenarnya, versi terbalik secara vertikal, tetapi itu tidak mempengaruhi output). Yang pertama adalah
dan yang kedua melacak jalur yang dimodifikasi:
Untuk menemukan
n
nomor-urutan yang cukup untuk menemukann
dalam matriks kedua dan memilih nomor yang sesuai dalam yang pertama. Matriks harus cukup besar sehinggan
muncul, dan harus memiliki ukuran ganjil sehingga titik asal (angka1
) berada pada posisi yang sama di keduanya.Coba juga online ! (
6Y3
telah dipindahkan sesuai dengan perubahan bahasa)sumber
Brachylog , 20 byte
Ini menggunakan teknik yang sama seperti hampir semua jawaban lainnya.
Penjelasan
Fakta yang
=
agak menarik tentang jawaban ini adalah bahwa lebih mudah dan lebih pendek untuk menggunakan daripada tanda kurung.sumber