Saya selalu menyukai layar yang penuh dengan piksel berwarna acak. Mereka menarik untuk dilihat dan program-program yang menggambarnya menyenangkan untuk ditonton.
Tantangan
Isi layar Anda, atau jendela grafis, dengan piksel berwarna.
Aturan
- Program Anda harus memiliki kesempatan yang sama untuk memilih semua warna (yaitu dalam kisaran
#000000
hingga#FFFFFF
), atau semua warna yang dapat ditampilkan pada sistem Anda. - Program Anda harus terus menampilkan piksel acak hingga berhenti secara manual (tidak dapat dihentikan dengan sendirinya).
- Piksel dapat berukuran berapa saja, selama output Anda memiliki setidaknya 40x40 "piksel".
- Program Anda harus berjalan dengan kecepatan sedemikian rupa sehingga dapat mengganti setiap piksel di layar / jendela setidaknya sekali setelah berjalan selama tiga menit.
- Program Anda harus memilih warna dan titik yang benar-benar acak untuk diganti, yaitu acak dengan semua titik / warna yang memiliki kemungkinan yang sama. Itu tidak bisa hanya terlihat acak. Itu harus menggunakan pRNG atau lebih baik, dan hasilnya tidak bisa sama setiap waktu.
- Program Anda harus memiliki kesempatan yang sama untuk memilih semua warna setiap iterasi .
- Program Anda harus mengganti hanya satu piksel sekaligus.
- Program Anda tidak dapat menggunakan internet atau sistem file Anda (
/dev/random
dan/dev/urandom
dikecualikan).
Contoh
Output Anda dapat terlihat seperti ini jika dihentikan secara acak:
Pemenang
Jawaban terpendek di setiap bahasa menang. Selamat bersenang-senang!
It must use a pRNG or better
Jawaban:
Minecraft 1.12 Redstone Command Blocks,
4.3552.872 byte(Ukuran ditentukan oleh ukuran file blok struktur yang disimpan.)
Berikut ini adalah ikhtisar YouTube lengkap , tetapi saya akan mencoba menguraikan kode di bawah ini.
Pengaturan rutin:
Ini mengatur grid 40x40 dudukan baju besi Minecraft. Armor stand diperlukan karena Minecraft tidak memiliki cara untuk mengganti variabel menjadi koordinat dunia . Jadi solusinya adalah merujuk ke lokasi entitas stand armor ini.
Dudukan pelindung bernama ini pada dasarnya adalah "kursor" kita untuk menempatkan semua dudukan pelindung yang kita butuhkan. Blok redstone pada langkah terakhir "memberi kekuatan" pada blok terdekat (termasuk blok perintah kami), jadi mulailah dari loop berikutnya:
Pada titik ini kisi kami selesai:
Pemilih Warna Acak
Pengulang ungu di bagian tengah gambar ini memilih warna acak melalui perintah berikut:
"@R []" itu adalah saus ajaib, ia memilih entitas acak di dunia yang cocok dengan kondisi yang diberikan . Dalam hal ini, ia menemukan dudukan pelindung di dalam radius 9 blok , dan kami telah menyiapkan 16 dudukan pelindung, satu untuk setiap warna wol. Di bawah warna yang dipilih, ini menempatkan blok redstone (yang mendukung dua blok perintah di kedua sisi).
Pemilih Piksel Acak
Menempatkan blok redstone di bawah warna wol yang dipilih memicu dua blok perintah lagi:
Baris pertama ini menggunakan perintah @r magic yang sama untuk memilih dudukan pelindung di seluruh peta (tanpa batasan radius, sehingga mencakup kisi 40x40), dan menempatkan wol warna yang dipilih di atas kepalanya. X menentukan warna, dan berkisar dari 0 hingga 15. Perintah kedua menghapus blok redstone sehingga siap untuk pergi lagi.
Saya memiliki 5 blok repeater ungu, dan redstone bekerja di "ticks" 20 kali per detik, jadi saya menempatkan 100 piksel per detik (dikurangi beberapa warna yang tumpang tindih). Saya sudah menghitung waktunya, dan saya biasanya menutup seluruh kotak dalam waktu sekitar 3 menit.
Ini menyenangkan, saya akan mencoba mencari tantangan lain yang mungkin juga berfungsi di Minecraft. Terima kasih banyak untuk lorgon111 untuk seri tutorial Blok Perintah YouTube- nya .
EDIT: Melakukan beberapa pengurangan serius dalam ukuran struktur yang disimpan, sekarang di 2.872 byte yang disimpan :
Diuji dengan menarik struktur yang diselamatkan ke dunia baru, semuanya masih berfungsi seperti yang dirancang.
EDIT 2 : Tautan Dropbox hanya-baca ke file struktur NBT
Walk through ada di video YouTube saya , tetapi berikut adalah langkah-langkahnya:
\structures
folder baru yang Anda buat di bawah save dunia saat ini./give @p structure_block
, dan/tp @p -12, 56, -22
untuk melompat ke tempat yang tepat untuk memulai.sumber
shortest answer in each language wins
dan ini adalah jawaban terpendek di Minecraft: P dapatkan tambahan +15sh + ffmpeg, 52 byte
Apakah ffmpeg dianggap sebagai esolang? : D
Sayangnya pix_fmt diperlukan, karena ffmpeg default ke yuv420p. Itu gagal "harus memiliki kemungkinan yang sama dari setiap warna piksel yang mungkin" persyaratan. Nyaman,
cif
adalah jalan pintas untuk ukuran video yang cukup besar yang menggunakan lebih sedikit ruang dari "40x40".Tidak mengherankan, mengoptimalkan gif ini dengan gifsicle sama sekali tidak melakukan apa pun. Ini 4MiB.
sumber
C pada POSIX,
98969592 byte-3 Terima kasih kepada Tas
Ini memilih antara 16 warna (abu-abu gelap, merah, hijau, biru, oranye, cyan, ungu, abu-abu muda, hitam, merah muda, biru muda, kuning, cyan muda, magenta, putih) dan mencetaknya langsung ke terminal.
Perhatikan bahwa jika GPU Anda terlalu lambat, ini mungkin terlihat seperti memperbarui seluruh layar sekaligus. Ini sebenarnya akan pixel demi pixel, tetapi C cepat.
Solusi alternatif yang membuat warna lebih berbeda:
Bukti bahwa ia berjalan piksel demi piksel (tangkapan layar dari program alternatif):
Wow, itu terlihat hampir 3 dimensi ...
sumber
;
bisa dikompilasi dengan benar tetapi tampaknya bekerja lebih dari itu! B-)while
kefor
.#define r rand()
dan kemudian menggunakanr%40, r%40, r%2, r%8
JS + HTML
162 + 32 (194)124 + 13 (137) byteTerima kasih kepada Luke dan komentator lainnya karena telah menyelamatkan saya banyak byte.
sumber
<canvas id=c>
harus cukup karena saya pikir ukuran default untuk-canvas
elemen adalah300 x 150 px
dan melebihi "ukuran viewport" Anda99 x 99 px
. Bagaimanapun, solusi yang bagus.2d
. (Tidak yakin bagaimana memformat ini, tetapi jika "2d" adalah templat literal, tidak perlu tanda kurung.) (Menghapus saran saya sebelumnya.)with
pernyataan untuk menyingkirkan semua contohb.
:r=n=>n*Math.random()|0 setInterval("with(c.getContext`2d`)fillStyle='#'+r(2**24).toString(16),fillRect(r(99),r(99),1,1)")
MATL, 28 byte
Cobalah di MATL Online . Saya telah menambahkan jeda setengah detik (
.5Y.
) ke versi ini.Penjelasan
sumber
TI-BASIC (84 + C (S) E saja),
3735 byteKarena keterbatasan perangkat keras, ini pada akhirnya akan macet, karena setiap kali sebuah program bersarang dalam sebuah program di TI-BASIC , 15 KB RAM dialokasikan untuk "menyimpan bookmark" di program induk. Ini akan bekerja dengan baik pada kalkulator "teoretis" dengan RAM tak terbatas, tetapi jika kita ingin itu berjalan tanpa batas pada kalkulator nyata, kita bisa membungkusnya dalam satu
While 1
lingkaran untuk tambahan 2 byte:Kalkulator keluarga TI-83 dengan layar warna (TI 84 + CE dan CSE) mendukung 15 warna. Mereka memiliki kode warna
10
melalui24
. Ini menggilir semua piksel dalam kotak 120 x 120 (5!
) dan memberikan masing-masing warna acak.Hasil:
sumber
5!
jika saya ingin 120 piksel.For(
1 byte,Pxl-On(
adalah 1 byte,randInt(
adalah 2 byte, dll.MATLAB, 56 byte
Outputnya terlihat seperti gambar di bawah ini. Satu "piksel" berubah pada satu waktu, dan hanya satu dari warna RGB yang berubah.
Mengapa? Warna dalam MATLAB direpresentasikan sebagai 3D-matrix, satu layer untuk R, G dan B. Kode di atas hanya mengubah satu layer per iterasi. Semua piksel dan semua lapisan dapat diubah, jadi jika Anda menunggu sedikit semua warna sama-sama mungkin di semua posisi.
Tambahkan
pause(t)
di dalam loop untuk menjedat
detik di antara setiap gambar.Anda harus menghentikannya dengan Ctrl+ C.
sumber
where
Your program must have an equal chance of picking all colors/points each iteration
. Apakah program Anda memenuhi ini?Bash + coreutils,
5956 byte\e[48;5;COLORm
adalah jalan keluar dari warna latar belakang.Setiap "pixel" memiliki peluang untuk berada dalam kisaran [0..16777215] setiap waktu.
sumber
jot
:for((;;)){ printf "\e[48;5;`jot -r 1 0 16777215`m ";}
Javascript + HTML 118 + 13 (131 byte)
#7
bukan warna yang valid, atau#777
dan#777777
warna yang sama (2x peluang)sumber
Excel VBA,
13110285 BytesFungsi jendela langsung VBE anonim yang menggunakan fungsi pembantu (lihat di bawah) untuk menampilkan array sel berwarna acak ke rentang
A1:AN40
objek lembar aktif.Catatan: Solusi ini terbatas untuk penginstalan MS Excel 32-Bit (dan karenanya Office secara keseluruhan) karena
8^8
tidak dapat dikompilasi pada VBA versi 64-BitOutput Sampel
Versi sebelumnya
Fungsi Penolong
Menghasilkan int acak dalam kisaran [0,255]
sumber
C #,
369288287 byteDisimpan 88 byte berkat @CodyGray.
Program lengkap yang dapat menangani layar dan ukurannya lalu mulai menggambar piksel secara acak. Perhatikan bahwa ini dapat membuat kartu grafis Anda berhenti ketika dijalankan. Juga jika layar atau kontrol memutuskan untuk mengecat kapan saja piksel akan hilang dan harus digambar ulang.
Catatan: Saat menjalankan tetap fokus pada jendela untuk membunuhnya Anda harus Alt + F4 atau tekan tombol tutup dan melakukannya ketika Anda tidak dapat melihat layar agak sulit.
Saya tidak bisa merekam ini berfungsi, dengan ScreenToGif, karena itu terus memaksa pengecatan ulang sehingga piksel akan dihapus. Namun, berikut adalah tangkapan layar yang berjalan setelah sekitar 10-15 detik, lebih lama dan saya pikir saya mungkin menghentikan PC saya! Kesenjangan di sudut kanan atas adalah di mana layar memaksa pengecatan ulang saat saya mengambil tangkapan layar.
Versi Lengkap / Terformat:
Versi untuk
308227226 byte yang hanya mengacu pada wilayah 0-40:Contoh output untuk yang ini:
sumber
Graphics.FromHwnd((IntPtr)0)
juga akan bekerja, dan jauh lebih pendek dari P / MemohonGetDC
. Tentu saja, kode Anda masih seperti Tas , dan membocorkan sumber daya seperti orang gila, itulah sebabnya ia membuat mesin Anda berhenti hanya setelah waktu berjalan yang singkat.GetDC
tidak kembaliIntPtr.Zero
jadi mengirim ituFromHdc
tidak akan berfungsi.FromHdc
, saya menyarankan Anda meneleponFromHwnd
. Perhatikan bahwa ketika Anda meneleponGetDC
untuk mendapatkan DC untuk pegangan jendela, Anda meneruskan sebuah pointer NULL (0) sebagai pegangan jendela.C # Console,
233220189188 byteMenggunakan "semua" (windows) 16 warna konsol.
Terima kasih atas "fitur" untuk dapat alias kelas di C # melalui
using
arahan.Edit # 1
Menghapus beberapa spasi.
Nol yang dihapus dari Random.Next ()
Pergi ke
namespace system{...}
Edit # 2
Ukuran minimum kisi adalah 40x40
Satu byte dengan mendeklarasikan Random in for header loop
Dihapus
public
dari metode UtamaEdit # 3
Ternyata
using C=Console;
adalah tidak yang terbaik yang ada.using static Console
mirip dengan cara VB.Net untuk kelas "Impor"Saya menyerah: TheLethalCoder membuat ini terjadi
Kode asli untuk mengadaptasi ukuran jendela pada 207 byte:
Gambar asli:
sumber
namespace System
harus menyimpan byte,r.Next
dapat menghapus nol saya percaya, Hapus spasi putih yang tidak relevan,namespace System{}
lebih pendek dariusing System;
. Mau jelaskan?Main
. Kenangan tak berdasar adalah yang terbaik!Memproses, 90 byte
diperluas dan berkomentar:
Idealnya saya bisa menggunakan indeks piksel, bukan x, lokasi y, tetapi
pixels[]
akses Pengolahan membutuhkanloadPixels()
pra danupdatePixels()
posting, karenanya penggunaanset()
.point()
akan bekerja juga, tetapi memiliki lebih banyak karakter dan membutuhkanstroke()
. Area acak sebenarnya 99x99 untuk menyimpan beberapa byte (bukan 100x100), tetapi itu harus mencakup 40x40 dengan setiap piksel di area tersebut untuk diganti.Perlin noise () digunakan sebagai ganti random () untuk menjaganya agar lebih pseudo-random dan byte lebih pendek. Nilai tersebut dihitung sekali, tetapi digunakan dua kali: sekali untuk posisi acak, kemudian lagi untuk warna.
Warnanya sebenarnya
ARGB
(00000000 untuk FFFFFFFF) (bukan RGB) (poin bonus?: D).sumber
set()
adalah trik yang sangat rapi dan bisa sangat berguna untuk Tips bermain golf dalam ProsesPython, 133 byte
Saya tidak yakin apakah ini cocok dengan spesifikasi, karena itu ada di atas kanvas di area 40x40.
Coba online - versi tanpa
eval
, yang tidak berfungsi di Trinketsumber
colormode
adalah1.0
tidak255
.colormode
dan tidak akan memilikinya: /dot(1,R(0,255),R(0,255),R(0,255))
tidak berhasil juga?dot
dimaksudkan untuk menerima(width,*color)
. Ini bukan Python: pJavaScript menggunakan Canvas
340 316324 bytesversi lengkap
sumber
Memproses, 112 byte
Saya tidak dapat menjamin bahwa setiap piksel diganti setiap 3 menit, tetapi ketika melihatnya tampaknya akan melakukannya. Setidaknya kemungkinan hilang satu piksel, dari total 1600, memperbarui satu acak 30x per detik, total 5400 pembaruan per 3 menit, membuatnya tidak mungkin bahwa seseorang akan terjawab.
Tidak Disatukan:
Program ini sangat mudah. Buka jendela pada 40x40 piksel, dan setiap frame (default 30 per detik) mendapatkan warna acak, dan menggambar titik pada koordinat acak antara 0 dan parameter. 40 untuk koordinat piksel, 255 untuk warna.
sumber
size(40,40);
dan perubahanpoint
kepoint(random(99),random(99));
? (Atau 100 jika 99 tidak bekerja)size
fungsi HARUS menjadi baris kode pertama dalam fungsi pengaturan (alasan mengapa rumit), jadi saya tidak bisa menyiasatinya. Saya dapat mengubah semua kejadian dari 40 menjadi 99, saya tidak melakukannya karena tidak menghemat ruang. Saya terutama menggunakan ukuran minimum untuk meningkatkan peluang bahwa setiap piksel akan di-refresh dalam periode 3 menitsetup()
fungsi pada versi terbaru dari Memproses pada mesin saya berfungsi dengan baik tanpa kesalahan.HTML + SVG + PHP, 245 Bytes
Diperluas
Contoh untuk Output tanpa meta tag dan dalam versi yang lebih besar
sumber
C ++ pada Windows, 125 byte
Baris baru diperlukan dan termasuk dalam hitungan byte.
Loops selamanya, secara acak memilih posisi antara 0 dan 255 (inklusif) untuk nilai baris dan kolom, menetapkan nilai R, G, B acak antara 0-255 (inklusif)
sumber
#include
s. (Dan ya, ada kompiler non-Visual Studio C untuk Windows.)Python 3.6 + Tkinter, 281 byte
sumber
tkinter
perpustakaan standar, Anda tidak perlu memasukkannya di headerc.create_image((20,20),i) File "C:\Python36\lib\tkinter\__init__.py", line 2483, in create_image return self._create('image', args, kw) File "C:\Python36\lib\tkinter\__init__.py", line 2474, in _create *(args + self._options(cnf, kw)))) _tkinter.TclError: unknown option "pyimage1"
JavaScript (ES7) + HTML menggunakan SVG, 129 + 10 = 139 byte
Versi SVG, sangat terinspirasi oleh pendekatan @ Octopus
<canvas>
.JS
HTML
Karena Stack Snippet suka memecahkan skrip dengan mengurai
<rect>
tag, inilah CodePen .sumber
6502 Majelis, 92 byte
Keluaran:
Penjelasan:
sumber
LOGO, 71 byte
Satu-satunya bahasa yang saya tahu, tidak esoterik / dirancang khusus untuk codegolfing, dan memiliki
forever
fungsi. Ada ide dimap
pihaknya?sumber
shortC ,
6656 byte-10 byte terima kasih kepada Dr. Rand. : P
Tidak ada tautan TIO karena Anda jelas tidak dapat mencetak ke jenis terminal yang diperlukan secara online ini.
sumber
Perl (on * nix), 69 byte
The
\x1b
s adalah karakter escape literal.Bergantung pada
stty
perintah dan bekerja dengan baik pada OS X.Mirip dengan pendekatan lain, tapi saya suka kombinasi semua params menjadi satu panggilan untuk
printf
jadi saya pikir akan berbagi. Membunuh terminal saya.Dua kali lebih banyak piksel, 83 byte
Pendekatan ini menggunakan blok unicode
▄
dan warna foreground dan latar belakang acak yang memberikan piksel lebih persegi. Membunuh terminal saya juga, tetapi terlihat lebih keren.sumber
\e
. Dan di StackExchange ini dapat diwakili oleh␛
.-e
! Saya juga perlu menaikkan jumlah byte yang satu dengan unicode. Ups! Terima kasih atas pengingatnya!Bash, 104 byte
The
\e
s adalah karakter escape literal.Ini adalah cukup banyak terjemahan dari pengajuan Perl saya, tetapi menggunakan sintaks gaya bom bash fork! Tidak sepintar entri bash lain yang menulis langsung ke layar aku takut.
Lebih banyak piksel, 130 byte
Sama seperti jawaban Perl saya, ini menggunakan karakter unicode untuk latar depan dan warna latar belakang setiap piksel juga.
sumber
"\e[48;5;%im"
. Mengapa 48 dan 5 diperlukan?\e[48;2;RRR;GGG;BBBm
tetapi sangat sedikit emulator terminal mendukungnya ... :(38;5
menunjukkan latar depan dan48;5
latar belakang. misc.flogisoft.com/bash/tip_colors_and_formattingbahasa mesin x86 (mode real) untuk IBM PC,
2019 byteIni membutuhkan prosesor dengan
rdrand
instruksi dan adaptor VGA (nyata atau ditiru). Di atas dapat disalin ke blok boot atau file MS-DOS * .COM.Untuk mencoba ini, kompilasi yang berikut dan simpan output ke file seperti
floppy.img
dan boot gambar pada mesin virtual.sumber
Super Chip (48) ?, 12 byte
Saya tidak yakin dengan nama pastinya, tetapi saya harus menggunakan ini sebagai ganti Chip-8 yang normal karena keterbatasan piksel 40x40.
sumber
QBIC , 34 byte
Sayangnya, QBIC tidak menetapkan
SCREEN
mode secara default, sehingga memakan beberapa byte.PSET
adalah perintah ilegal dalam konteks grafis default QBIC.Penjelasan
Output sampel
@Anonim menemukan kesalahan dalam
rnd()
fungsi QBIC . Memperbaiki yang memberikan output di bawah ini. Terima kasih!sumber
FUNCTION getRandomNumber! (Bottom!, Top!) ↵ RANDOMIZE TIMER 'this sets the random number generator ↵ IF Bottom > Top THEN ... END IF ↵ getRandomNumber = INT((Top - Bottom + 1) * RND + Bottom) ↵ END FUNCTION
Nomor acak Anda hanya berupa hash dari waktu saat ini.6502 Majelis, 582 byte
Wah, ini menyenangkan. Apakah kurang lebih sama dengan solusi BASIC Applesoft saya.
sumber
Powershell,
128126124 byte-2 byte terima kasih @Veskah
Keluaran:
Output kode VS:
sumber