Tantangan saya cenderung sedikit keras dan tidak menarik. Jadi di sini sesuatu yang mudah dan menyenangkan.
Urutan Alcuin
Urutan Alcuin A(n)
didefinisikan dengan menghitung segitiga. A(n)
adalah jumlah segitiga dengan sisi bilangan bulat dan keliling n
. Urutan ini disebut setelah Alcuin of York.
Beberapa elemen pertama dari urutan ini, dimulai dengan n = 0
adalah:
0, 0, 0, 1, 0, 1, 1, 2, 1, 3, 2, 4, 3, 5, 4, 7, 5, 8, 7, 10, 8, ...
Misalnya A(9) = 3
, karena satu-satunya segitiga dengan sisi bilangan bulat dan perimeter 9
adalah 1 - 4 - 4
, 3 - 3 - 3
dan 2 - 3 - 4
. Anda dapat melihat 3 segitiga yang valid di bawah.
Ada beberapa pola yang cukup menarik dalam urutan ini. Misalnya A(2*k) = A(2*k - 3)
.
Untuk informasi lebih lanjut, lihat A005044 tentang OEIS.
Tantangan
Tetapi tantangan Anda adalah tentang representasi biner dari angka-angka ini. Jika kita mengonversi setiap nomor urut ke representasi binernya, memasukkannya ke dalam vektor kolom dan membariskannya, itu menciptakan gambar biner yang cukup menarik.
Dalam gambar berikut ini Anda dapat melihat representasi biner dari nomor urut A(0), A(1), ..., A(149)
. Di kolom pertama Anda bisa melihat representasi biner A(1)
, di kolom kedua representasi A(1)
, dan seterusnya.
Anda dapat melihat semacam pola berulang dalam gambar ini. Bahkan terlihat seperti fraktal, jika Anda melihat misalnya pada gambar dengan nomor urut A(600), A(601), ..., A(899)
.
Tugas Anda adalah menghasilkan gambar seperti itu. Fungsi Anda, skrip Anda akan menerima dua bilangan bulat 0 <= m < n
, dan harus menghasilkan gambar biner dari urutan Alcuin A(m), A(m+1), A(m+2), ..., A(n-2), A(n-1)
. Jadi input 0, 150
menghasilkan gambar pertama, input 600, 900
gambar kedua.
Anda dapat menggunakan format grafis populer yang Anda inginkan. Katakanlah setiap format yang dapat dikonversi ke png menggunakan image.online-convert.com . Atau, Anda dapat menampilkan gambar di layar. Tidak ada baris putih terdepan yang diizinkan!
Ini adalah kode-golf. Jadi kode terpendek (dalam byte) menang.
white=1 and black=0
atau sebaliknya?white=0 and black=1
. Jadi sebaliknya.A(0)
menghasilkan kolom putih,A(9)=3
menghasilkan kolom putih dengan 2 piksel hitam di bagian bawah.0,0,0,1,0,2
sementara daftar di awal pertanyaan mengatakan0,0,0,1,0,1
.Jawaban:
J (
5245 (Codepage 437))Ini akan diizinkan (saya pikir)
Hex dump
(Tidak ada yang istimewa sebenarnya, kotak hitam adalah DB 16 atau 219 10 dalam codepage 437.)
Pemakaian
Ini menghasilkan sebagai berikut (Tag kode mengacaukannya dengan menambahkan spasi di antara baris):
Di konsol J standar, tidak ada spasi di antara baris, jadi saya sebut aturan 'Atau, Anda dapat menampilkan gambar di layar.' (Tidak ada yang mengatakan bahwa gambar ini harus direpresentasikan sebagai format gambar yang masuk akal secara internal)
EDIT: Jconsole (sebagai kebalikan dari JQT) menggunakan codepage 437 sebagai default, dan DOES membuat persegi panjang dengan benar saat menggunakannya dari string.
sumber
Mathematica,
12612212189 byteIni mendefinisikan fungsi yang tidak disebutkan namanya mengambil dua bilangan bulat sebagai parameter dan menampilkan gambar di layar. Memplot setiap kotak sebagai satu piksel, tetapi jika Anda suka, Anda sebenarnya dapat memperbesar.
Saya sekarang menggunakan formula eksplisit yang diberikan dalam artikel OEIS (yang pertama di bagian Mathematica, terima kasih kepada David Carraher karena menunjukkannya). Ini juga sangat cepat sekarang.
Ini kode indentasi dengan beberapa komentar:
Ini adalah output untuk
0, 600
:sumber
Image[1 - Thread@IntegerDigits[ l = Round[If[EvenQ[#], #^2, (# + 3)^2]/48] & /@ Range@##, 2, \[LeftCeiling]2~Log~Max@l\[RightCeiling]]] &
CJam (
56 5553 karakter) / GolfScript (64 karakter)CJam:
GolfScript:
Keduanya menghasilkan output dalam format NetPBM, dan mereka pada dasarnya adalah port satu sama lain.
Pembedahan
Terima kasih kepada Pengoptimal untuk CJam 56 -> 53.
sumber
'PoXq~{_1&3*+_*24+48/}%>_:e>2b,\2_$#f+2fbz(,@@]e_N*
Pyth -
1016059Output a
.pbm
. Kemungkinan bisa bermain golf lebih banyak.Sangat ungolfed karena saya akan menerjemahkan ke Pyth.Penjelasan selanjutnya datang. Sekarang lihat kode Python yang setara.Ia menggunakan algoritma OEIS untuk menghitung urutan dan kemudian mengubahnya menjadi biner, mengisi angka-angka, melakukan rotasi matriks, dan memformatnya menjadi
pbm
gambar. Karena saya tidak menggunakan kekerasan, ini sangat cepat.Berikut ini
600,900
contohnya:Coba di sini online .
sumber
R -
127125Saya tidak yakin apakah ini sepenuhnya mematuhi aturan. Itu tidak menampilkan gambar ke file, tetapi itu membuat raster dan plot ke perangkat output.
Saya menemukan formula yang sama dengan Martin, tetapi di sini .
Ini menggunakan fungsi yang tidak disebutkan namanya.
Jalankan sebagai berikut
Menghasilkan plot berikut
sumber
raster
ke namespace, karenaraster()
satu-satunya di sana khusus untuk paket itu. Sebaliknya lakukan sajaraster::raster(...)
.Python 2
+ PIL,255184Versi pertama saya menggunakan PIL untuk menampilkan gambar:
Versi baru hanya menghasilkan gambar PPM b & w di stdout:
sumber
for
. Anda dapat menghindari orangtua di sekitarx%2
dengan mengubah urutan kex%2*...
. Lebih pendek untuk tidak mendefinisikan cetak sebagai fungsi dan hanya menggunakan duafor
loop bersarang , gunakanprint ...,
untuk menghindari baris baru dan kosongprint
untuk memulai baris baru. Trik untuk memaksa ekspansi biner memiliki panjangh
tanpazfill
adalah menambahkan2**h
, lalu mengekstrakh
digit terakhir .JAVASCRIPT - 291
Kode:
Penjelasan:
Hasil:
Ya hasilnya terbalik, tapi itu karena
0,0
dijs canvas
kiri atas. : 3Demo:
Demo di jsfiddle
sumber