Bilangan spiral adalah kisi tak terbatas yang kuadrat kiri atas memiliki angka 1. Berikut adalah lima lapisan pertama spiral:
Tugas Anda adalah mencari tahu angka dalam baris y dan kolom x.
Contoh:
Input: 2 3
Out : 8
Input: 1 1
Out : 1
Input: 4 2
Out : 15
catatan:
- Bahasa pemrograman apa pun diizinkan.
- Ini adalah tantangan kode-golf sehingga kode terpendek menang.
- Semoga berhasil!
Jawaban:
C (gcc),
4443 byteCobalah online!
Spiral memiliki beberapa "lengan":
Posisi terletak di lengan (ditugaskan ke variabel ). Kemudian, angka terbesar pada lengan adalah , yang bergantian antara berada di posisi kiri bawah dan kanan atas pada lengan. Mengurangkan dari memberikan urutan bergerak sepanjang lengan , jadi kami memilih tanda yang sesuai berdasarkan paritas , sesuaikan dengan untuk mendapatkan urutan mulai dari 0, dan kurangi nilai ini dari .( x , y) n n 2 x y - n + 1 , - n + 2 , … , - 1 , 0 , 1 , … , n - 1 , n - 2 n n n - 1 n 2maks ( x , y) n n2 x y - n + 1 , - n + 2 , … , - 1 , 0 , 1 , … , n - 1 , n - 2 n n n - 1 n2
z
Terima kasih kepada Tn. Xcoder untuk menghemat satu byte.
sumber
f(x,y,z){z=x>y?x:y;z=z*z-~(z%2?x-y:y-x)-z;}
menghemat 1 byte.f(1, 1)
mengembalikan nilai1
. Bagian Footer loop melalui x = 1 hingga 5 dan y = 1 hingga 5, memanggil fungsi untuk semua nilai tersebut, dan mencetak outputnya dalam kisi, untuk menunjukkan bahwa fungsi ini benar untuk semua input yang ditunjukkan dalam pertanyaan.Python,
545049 byte-4 byte terima kasih kepada @ChasBrown
-1 byte, terima kasih kepada @Shaggy
Cobalah secara Online!
Pertama kali bermain golf! Saya lebih dari sadar ini tidak optimal, tetapi apa pun.
Pada dasarnya berjalan pada prinsip yang sama dengan kode @Doorknob C.
sumber
def f(a,b):
pendekatan, lihat di sini .M**2
bisa diganti denganM*M
.MATL , 15 byte
Cobalah online!
Kumpulkan dan cetak sebagai matriks
Bagaimana?
Sunting: Teknik yang sama dengan jawaban @ Doorknob, baru tiba dengan berbeda.
Perbedaan antara elemen diagonal spiral adalah urutan aritmatika . Jumlah dari syarat ini adalah (dengan rumus AP biasa). Jumlah ini, bertambah 1, memberikan elemen diagonal pada posisi .n n ( n - 1 ) ( n , n )0,2,4,6,8,… n n(n−1) (n,n)
Mengingat , kami menemukan maksimum dari keduanya, yang merupakan "lapisan" dari spiral yang dimiliki titik ini. Kemudian, kami menemukan nilai diagonal dari lapisan itu sebagai . Untuk layer genap, nilai at adalah , untuk layer ganjil .v = n ( n - 1 ) + 1 ( x , y ) v + x - y v - x + y(x,y) v=n(n−1)+1 (x,y) v+x−y v−x+y
Alternatif solusi 21 byte:
Cobalah online!
Mengumpulkan dan mencetak sebagai matriks
Dari hal di atas, kita tahu bahwa fungsi yang kita inginkan adalah
di mana .m=max(x,y)
Beberapa perhitungan dasar akan menunjukkan bahwa satu ekspresi untuk maks dua angka adalah
Memasukkan satu ke yang lain, kami menemukan bahwa satu bentuk alternatif untuk adalah:f
di mana .k=abs(x−y)+x+y
Ini adalah fungsi yang diterapkan oleh solusi.
sumber
Japt , 16 byte
Diadaptasi dari solusi Doorknob selama beberapa gelas bir.
Cobalah
Penjelasan
sumber
Pyth, 20 byte
Suite uji
Terjemahan Rushabh Mehta yang hampir secara literal menjawab .
Penjelasan:sumber
Jelly , 13 byte
Cobalah online!
Menggunakan metode Doorknob . Terlalu lama.
sumber
»Ḃ-*×_‘+»²_»ʋ
Jelly ,
1312 byteCobalah online!
Menghitung istilah diagonal dengan
²_’Ṁ
dan menambah / mengurangi nilai indeks yang benar denganṀḂḤ’×I
.sumber
Brain-Flak , 76 byte
Cobalah online!
sumber
05AB1E ,
1211 byte-1 byte berkat @Emigna berubah
Èi
menjadiG
.Port of @sundar 's MATL answer , jadi pastikan untuk mengunggah dia!
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Èi
bisa jadiG
.Pascal (FPC) , 90 byte
Cobalah online!
Port of Doorknob menjawab , tetapi jawaban sundar memberi saya ide
z mod 2*2-1
yang kemudian saya ubah1and z*2-1
untuk menghilangkan ruang.sumber
Mathematica 34 byte
begitu:
(*
54
*)
sumber
Julia 1.0 , 35 byte
Cobalah online!
sumber
JavaScript (ES6), 46 byte
sumber
Java (JDK 10) , 39 byte
Cobalah online!
Kredit
sumber