Ternyata iya! Dalam tiga langkah mudah.
Langkah 1
Misalkan f ( n ) menunjukkan fungsi penghitungan prime (jumlah bilangan prima kurang dari atau sama dengan n ).
Tentukan urutan bilangan bulat s ( n ) sebagai berikut. Untuk setiap bilangan bulat positif n ,
- Prakarsai t ke n .
- Selama t bukan prima atau 1, ganti t dengan f ( t ) dan iterate.
- Jumlah iterasi adalah s ( n ).
Proses berulang dijamin berakhir karena f ( n ) < n untuk semua n .
Pertimbangkan misalnya n = 25. Kami memulai semua t = 25. Karena ini bukan bilangan prima atau 1, kami menghitung f (25), yaitu 9. Ini menjadi nilai baru untuk t . Ini bukan prima atau 1, jadi kami melanjutkan: f (9) adalah 4. Kami melanjutkan lagi: f (4) adalah 2. Karena ini adalah prima, kami berhenti di sini. Kami telah melakukan 3 iterasi (dari 25 menjadi 9, lalu ke 4, lalu ke 2). Jadi s (25) adalah 3.
40 syarat pertama dari urutan adalah sebagai berikut. Urutannya bukan di OEIS.
0 0 0 1 0 1 0 2 2 2 0 1 0 2 2 2 0 1 0 3 3 3 0 3 3 3 3 3 0 3 0 1 1 1 1 1 0 2 2 2
Langkah 2
Mengingat positif aneh bilangan bulat N , membangun sebuah array N × N (matriks) dengan menggulungnya urutan terbatas s (1), s (2), ..., s ( N 2 ) untuk membentuk persegi luar spiral . Sebagai contoh, diberikan N = 5 spiral adalah
s(21) s(22) s(23) s(24) s(25)
s(20) s(7) s(8) s(9) s(10)
s(19) s(6) s(1) s(2) s(11)
s(18) s(5) s(4) s(3) s(12)
s(17) s(16) s(15) s(14) s(13)
atau, menggantikan nilai-nilai,
3 3 0 3 3
3 0 2 2 2
0 1 0 0 0
1 0 1 0 1
0 2 2 2 0
Langkah 3
Mewakili susunan N × N sebagai gambar dengan peta warna abu-abu, atau dengan beberapa peta warna lain sesuai selera Anda. Peta harus bertahap, sehingga urutan angka sesuai dengan urutan warna yang terlihat jelas. Kasus uji di bawah ini menunjukkan beberapa contoh peta warna.
Tantangan
Mengingat positif aneh bilangan bulat N , menghasilkan gambar yang dijelaskan di atas.
Aturan
Spiral harus keluar, tetapi bisa searah atau berlawanan arah jarum jam, dan dapat mulai bergerak ke kanan (seperti dalam contoh di atas), kiri, bawah atau atas.
Timbangan sumbu horizontal dan vertikal tidak harus sama. Label sumbu, bilah warna, dan elemen serupa juga opsional. Selama spiral dapat dilihat dengan jelas, gambar tersebut valid.
Gambar dapat dihasilkan dengan salah satu cara standar . Secara khusus, gambar dapat ditampilkan di layar, atau file grafik dapat diproduksi, atau array nilai RGB dapat dihasilkan. Jika menghasilkan file atau array, silakan posting contoh seperti apa saat ditampilkan.
Sarana input dan format fleksibel seperti biasa . Sebuah program atau fungsi dapat disediakan . Celah standar dilarang .
Kode terpendek dalam byte menang.
Uji kasus
Gambar berikut (klik untuk resolusi penuh) sesuai dengan beberapa nilai dari N . Spiral jam, spiral ke kanan pertama digunakan, seperti pada contoh di atas. Gambar juga menggambarkan beberapa peta warna yang valid.
sumber
s(n)
dapat dimasukkan ke dalam beberapa fungsi fungsi / paket tanpa dimodifikasi (saya pikirimshow
dalam matplotlib dapat menangani ini misalnya) apakah ini bentuk output yang dapat diterima?imshow
tidakimshow
itu.Jawaban:
Dyalog APL, 94 byte
mengasumsikan
⎕IO=0
output untuk n = 701 (dikonversi dari .pgm ke .png):
sumber
MATLAB -
197185178175184163162148142140 byteMencukur 12 byte, terima kasih kepada Ander dan Andras, dan terima kasih banyak kepada Luis karena telah menyatukan keduanya. Bercukur 16 berkat Remco, 6 berkat flawr
Hasil untuk
N=301
(F(301)
):Penjelasan:
sumber
Bahasa Wolfram (Mathematica) , 124 byte
Terima kasih kepada Martin Ender untuk menghemat 12 byte!
Cobalah online!
Gambar yang dihasilkan adalah:
Formula bentuk tertutup dari nilai spiral yang diambil langsung dari jawaban saya ini.
sumber
#/2-.5
menghemat satu byte.p
hingga Anda membutuhkannya:...,{y,p=(1-#)/2,-p},{x,p,-p}
MATLAB:
115114110 byteSatu liner (berjalan di R2016b + sebagai fungsi dalam skrip ) 115 byte
Menempatkan fungsi dalam file terpisah, seperti yang disarankan oleh flawr, dan menggunakan 1 byte tambahan per aturan file tambahan
Dalam file tersebut
s.m
, 64 +1 byte untuk kode + fileJendela perintah untuk didefinisikan
I
, 45 byteTotal: 110 byte
Ini menggunakan rekursi alih-alih
while
perulangan seperti implementasi MATLAB lainnya ( gnovice , Adriaan ). Jalankan sebagai skrip (dalam R2016b atau lebih baru), ini mendefinisikan fungsiI
yang dapat dijalankan sepertiI(n)
.Versi terstruktur:
Contoh:
Catatan:
Saya mencoba membuat
s
fungsi anonim juga, tentu saja itu akan mengurangi jumlah secara signifikan. Namun, ada 2 masalah:Rekursi tak terbatas sulit untuk dihindari ketika menggunakan fungsi anonim, karena MATLAB tidak memiliki operator ternary untuk menawarkan kondisi istirahat. Membentuk operator ternary semacam (lihat di bawah) juga biaya byte karena kita membutuhkan kondisi dua kali.
Anda harus meneruskan fungsi anonim ke dirinya sendiri jika bersifat rekursif (lihat di sini ) yang menambahkan byte.
Yang paling dekat saya dengan ini menggunakan baris berikut, mungkin dapat diubah untuk bekerja:
sumber
MATLAB -
126121 * byteSaya mencoba pendekatan yang lebih vektor daripada Adriaan dan mampu mencukur lebih banyak byte. Inilah solusi single-line:
Dan inilah solusi yang diformat dengan baik:
* Catatan: jika Anda bersedia untuk memungkinkan crapton metrik iterasi yang tidak perlu, Anda dapat mengubah baris
while any(i),
kefor m=v,
dan Hemat 5 byte.sumber
cumsum
untuk membuat vektor dan menghindarinnz(primes(...)
while any(i)
denganfor m=M
. Siapa yang peduli jika kode ini membutuhkan waktu berjam-jam untuk berjalan :-)n^2
atau tidaknya iterasi akan terasa sakit! ;)Python 3,
299265 byteDisimpan 5 byte berkat memformat saran dari Jonathan Frech dan NoOneIsHere. Menghapus 34 byte tambahan dengan menghapus definisi fungsi yang hanya dipanggil sekali.
Ini sedikit lebih lama daripada yang lain, karena python tidak memiliki perintah untuk menentukan primeness, atau spiral array. Namun berjalan relatif cepat, sekitar satu menit
n = 700
.Uji dengan
sumber
import
dan*
.J, 121 Bytes
Mendefinisikan suatu fungsi:
sumber
R, 231 byte
Sedikit kurang golf:
Fungsi anonim. Keluaran dalam jendela grafis. Skala berada pada skala merah dengan naungan tergelap sama dengan 0 dan nilai yang lebih jelas meningkatkan nuansa.
Hasil untuk n = 101:
sumber