Tantangan ini untuk menghormati lampu Natal yang norak di rumah mertua saya.
Tantangannya adalah membuat keluaran grafis yang menunjukkan dekorasi dalam "waktu nyata".
Video (gif atau format lain) akan memiliki "lampu" vertikal dan horizontal n-by-m . 5 <= m, n <= 40 . Ukuran dan resolusi bingkai dapat bervariasi tergantung pada n dan m , tetapi harus setidaknya 50x50 piksel untuk n, m = 5 (grafik vektor OK). Gambar dengan n=6
dan m=5
akan terlihat seperti ini:
Dekorasi:
Warna:
Semua lampu akan memiliki salah satu dari berikut 6 RGB-warna {255,0,0}
, {0,255,0}
, {0,0,255}
, {255,255,0}
, {0,255,255}
dan {255,0,255}
.
Animasi:
n
danm
akan diambil sebagai input pada format apa pun yang masuk akal dan dalam urutan yang Anda suka- Gambar akan berubah setiap
dt = 25 ms
. Penyimpangan baik-baik saja jika itu karena "faktor luar" seperti keterbatasan dalam penerjemah, komputer lambat dll.- Jika tidak mungkin untuk mengatur langkah waktu secara manual, maka langkah waktu default diterima.
- Semua lampu akan berwarna merah (
{255,0,0}
) padat=0
. - Selalu ada peluang 5% bahwa cahaya pertama (kiri atas) akan berubah warna. Semua warna (kecuali warna yang dimilikinya saat ini) harus memiliki kemungkinan yang sama.
Setiap cahaya (kecuali yang pertama) akan mendapatkan warna cahaya ke kiri. Jika cahaya berada di paling kiri maka akan mendapatkan warna cahaya di paling kanan pada baris di atas. Lampu diberi nomor seperti yang ditunjukkan di bawah ini. Nomor cahaya
k
akan mendapatkan warna nomor cahayak-1
.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Keluaran harus secara teori dijalankan selamanya (kecuali bahasa / penerjemah Anda memiliki batasan yang mencegah hal ini).
- Harap berikan sampel minimal 5 detik, lebih disukai dalam jawabannya (ini adalah dorongan, bukan persyaratan). (Tautan ke TIO atau yang serupa tentu saja juga OK: D)
- Frame, sumbu, garis kisi, dll diterima.
6-oleh-5
15-kali-30
r,g,y,b,
dll lebih pendek dalam beberapa bahasa.drawnow
ketika saya menerapkan ini di MATLAB, karena hasilnya terlalu lambat. Saya pikir jawabannya harus: Jika itu adalah pilihan desain bahwa penerjemah memiliki resolusi waktu minimum tetap> = 25 ms maka tidak apa-apa. Jika itu karena implementasi yang buruk / sederhana, penerjemah online yang kelebihan beban / lambat dll. Maka itu tidak OK.Jawaban:
JavaScript / CSS / HTML, 436 byte
sumber
Mathematica,
186161158 bytesPenjelasan
Buat papan awal dalam 1D, diisi dengan warna merah. Simpan itu di
b
.Jeda selama 25 ms
Jika bilangan real acak (pseudo-) kurang dari 0,06, ganti elemen pertama
b
dengan panjang sampel acak3
dari daftar{1,1,0,0}
. (Yaitu salah satu dari{1, 1, 0}, {1, 0, 1}, {1, 0, 0}, {0, 1, 1}, {0, 1, 0}, {0, 0, 1}
)Putar siklik ke kanan.
Ubah nilai sel pertama ke nilai sel kedua (yaitu membatalkan pergeseran sel pertama)
Partisi
b
menjadi (tinggi).Jadikan itu menjadi gambar dinamis (terus-menerus memperbarui), yang lebarnya 50 (lebar)
Versi otomat seluler (186 byte)
Contoh Output (input: 16, 10)
sumber
MATLAB,
255210 byteIni golf pertama saya, jadi mungkin ada perbaikan yang harus dilakukan.
Terima kasih kepada Luis karena membantu saya menghemat 45 byte :)
Penjelasan:
Sayangnya, ini tidak menyimpan animasi, itu hanya menjalankannya. Untuk menyimpannya, saya memerlukan program tangkapan layar, atau menulis ulang semuanya menggunakan
imwrite
. Sebagai gantinya, saya akan memberikan dua gambar yang menunjukkan waktu yang berbeda, untukn=15,m=30
.sumber
dec2bin([4 2 1 6 3 5])-48
alih-alih[1 0 0;0 1 0;0 0 1;1 1 0; 0 1 1;1 0 1]
..95
bukannya0.95
. Anda juga dapat menggantinya.95
dengan.94
dan menyingkirkank=k(k~=r);
(karena 0,94 + 0,06 / 6 = 0,95; lihat jawaban saya untuk penjelasan yang lebih terperinci)c=dec2bin(1:6)-48
karena pesanan tidak pentingMATL ,
5247 byteInput adalah sebuah array
[ncols nrows]
. Output adalah gambar dengan grafik vektor.Contoh dijalankan selama 15 cols × 10 baris:
Bagaimana itu bekerja
Jeda waktu telah diatur ke 15 ms (untuk jumlah byte yang sama dengan 25 ms) untuk mencoba mengkompensasi waktu pemrosesan.
Untuk mempertahankan warna dengan probabilitas 19/20 (ubah dengan 1/20), kami melanjutkan sebagai berikut:
Dengan demikian probabilitas menjaga warna adalah 47/50 + 3 / (50 * 6) = 19/20.
sumber
MATLAB,
153147 byteCatatan : GIF yang ditampilkan adalah versi yang lebih lama, yang bagus karena tidak menampilkan sumbu (lihat riwayat edit), tetapi sangat lambat karena implementasi
imshow
. Untuk versi saat ini, jawaban MATLAB Chelsea G. atau jawaban Luis Mendo MATL menunjukkan hasil yang sama dengan versi saya saat ini.Ukuran diambil sebagai
2x1
vektor, jadi panggil misalnya:Jawaban ini mengeksploitasi seluk-beluk bahasa MATLAB. Sebagai contoh,
x
diinisialisasi sebagaim x n
matriks nol, tetapi yang disebut pengindeksan linear memungkinkan untuk pergeseran melingkar dengan indeks 1-dimensi. Lemah mengetik memungkinkan untuk perkalian dengan logika, sehinggaif
pernyataan dihindari (trik saya banyak digunakan kembali pada masa pemrograman dengan kalkulator TI-84). Meskipun colormap dibaca dengan menggunakan baris, MATLAB memperlakukannya sebagai matriks normal, sehinggaeye(3)
dapat digunakan untuk membuat merah, hijau dan biru, dan1-eye(3)
tiga warna lainnya. Sederhanareshape
membawa vektor linier kembali ke bentuk matriks, yang dipetakan ke warna yang diinginkan menggunakanind2rgb
. Akhirnya,imagesc
, menunjukkan gambar, ditampilkan pada ukuran gambar default (yang cukup besar untuk persyaratan). Seperti keberuntungan akan memilikinya,imagesc
tidak keberatan nilai berada di luar rentang yang ditentukan, sehinggaeye
dapat digunakan untuk menginisialisasi matriks karena keduanya1
dan0
dianggap merah.sumber
Python 3.6 (316 Bytes)
Menggunakan kode warna ANSI dan string literal berformat baru dari Python 3.6 ( PEP 489 ) (
f"{X}"
keajaiban).Kalau tidak, itu hanya cukup dasar, tetapi python dikaburkan. Lebar dan Tinggi dilewatkan sebagai argumen pada baris perintah.
sumber
w,h=map(int,sys.argv[1:])
, membongkar karya dengan iterable (dengan ukuran yang tepat), panggilan ke daftar berlebihan."\x1b["
=>"\33["
(menggunakan octal alih-alih hex escapes), maka singkatan X dan string format sebenarnya membuatnya lebih lama (dan dengan menghilangkanf""
Anda mendapatkan kompatibilitas dengan python3). (ini akan membawanya ke 301 byte).{x}
sekali ... tetapi Anda masih menang dengan menyingkirkanX
.