Anak laki-laki dan perempuan sangat senang melihat Fifty Shades of Grey di layar perak, kami hanya ingin kode tanpa merasa terganggu, jadi inilah tantangan untuk memilih otak kita.
Kamu harus:
- Cetak di layar lima puluh kotak diisi masing-masing dengan warna abu-abu yang berbeda
- Jika bahasa pilihan Anda tidak memiliki kemampuan pemrosesan gambar , Anda dapat menampilkan file gambar
- Kotak harus terlihat, setidaknya 20 x 20 piksel
- Anda tidak dapat menggunakan angka acak kecuali Anda memastikan setiap warna unik.
- Anda tidak dapat terhubung ke layanan apa pun melalui jaringan apa pun
- Anda tidak dapat membaca file apa pun di program Anda.
- Anda tidak dapat menggunakan perpustakaan apa pun dari perpustakaan standar bahasa pilihan Anda.
Ini kode golf sehingga kode terpendek menang.
code-golf
graphical-output
jsedano
sumber
sumber
Jawaban:
MATLAB, 24 byte
Upaya kedua, sekarang benar-benar sesuai dengan aturan.
'I' adalah singkatan dari 'InitialMagnification', tetapi tampaknya Matlab akan melengkapi nama secara otomatis dalam pasangan nama / nilai. Tentu itu trik golf yang bagus!
sumber
Mathematica, 30 byte
Berikut ini adalah pendekatan Mathematica lainnya:
atau
Yang pertama hanya menciptakan sebuah array
dan yang kedua
Kemudian,
ArrayPlot
plot mereka sebagai kisi dan, secara default, menggunakan skala abu-abu untuk memvisualisasikan nilai.sumber
ArrayPlot
.ArrayPlot@{Range@50}
, yang hanya 20 byte.CJam - 23 (tidak ada output grafis aktual)
Karena CJam tidak dapat menggambar di layar (belum?), Saya menulis sebuah program yang menampilkan gambar dalam format pgm biasa .
Simpan output ke file bernama 50.pgm dan buka dengan penampil gambar / editor.
Cobalah online
Hasilnya terlihat seperti ini:
Penjelasan:
sumber
No line should be longer than 70 characters.
Mathematica
72 61 59 43 3534 byteVersi saat ini (34 byte)
Versi sebelumnya (59 byte), terima kasih kepada Martin Büttner.
Batas biru ditambahkan untuk menyorot posisi kotak.
Jumlah kotak:
Upaya pertama (72 byte)
Jika kotak bisa tumpang tindih. Seperti dicatat Zgarb, ada kemungkinan jauh bahwa satu kotak akan menyembunyikan yang lain.
sumber
Sage -
26243529 karakterIni terlihat seperti ini:
Usaha-usaha sebelumnya : pertama aku
Matrix([range(50)]).plot()
, lalumatrix_plot([range(50)])
. Ini terlihat seperti ini:Pengguna @ flawr menunjukkan bahwa kuadrat yang dihasilkan dengan pengaturan default terlalu kecil. Menambahkan
figsize
opsi memperbaikinya, tetapi 6 karakter lebih panjang dari versi 5x10 di bagian atas jawaban ini:sumber
R,
47 42 39 38 37 3635 byteDengan asumsi mereka diizinkan untuk tumpang tindih, ini berfungsi.
Symbols
membutuhkan vektor yang menampung ukuran untuk setiap kotak, dan saya menghemat ruang dengan menggunakan kembali vektor yang sama untuk semua parameter fungsi. Kotak terbesar selalu selebar 1 inci. Dengan kisaran 50:99 sebagai bilangan bulat, kuadrat terkecil akan memiliki lebar sekitar setengah inci, jadi 36 piksel pada 72 dpi.Terima kasih kepada semua orang atas komentar dan sarannya, saya cukup baru untuk R jadi ini semua sangat mendidik.
Versi sebelumnya:
Gambar sebelumnya:
sumber
symbols(x<-50:99,sq=x,bg=gray(x/99))
f = function (a, b) { a; b}
dan kemudian meneleponf(x <- 5, x)
. Ini berfungsi seperti yang diharapkan. Setelah Anda membalikkan argumen dalamf
definisi (danrm(x)
), itu tidak berfungsi lagi.symbols(x,,,x<-50:99,bg=gray(x/99))
Jawa - 180
Cukup mudah, hanya menggambar kotak.
Dengan jeda baris:
sumber
int i;
alih-alihint i=1
tetapi kemudian menggunakan++i
pada penggunaan pertamai
alih-alihi++
dalam kejadian terakhir, akan menghemat 2 byte. BTW: Aku bahkan tidak tahu kamu bisa membuat program java tanpaclass MyClass ... public static void main(...
!!!BBC BASIC, 57
Kuadrat harus setidaknya 20 piksel tetapi tidak ada yang mengatakan bahwa mereka harus memiliki ukuran yang sama, jadi saya kira ini memenuhi syarat.
Dimungkinkan untuk mempersingkat ini dengan menggunakan kode VDU tingkat rendah. Tetapi mengubah dari pola ini ke pola yang kurang menarik sepertinya tidak akan membuatnya lebih pendek.
sumber
F.n=51TO2S.-1V.19;-1,n,n,n:RECTANGLEFILL0,0,n*20N.
ipython 2, 54 byte
Yang terbaik yang bisa saya lakukan adalah dengan program ipython. Memulai ipython dengan
ipython -pylab
dan menjalankan program ini akan menampilkan grafik dengan 50 nuansa abu-abu dalam 50 kotak:Keluaran:
Solusi 2:
Berikut adalah program lain (61 byte):
yang menampilkan jendela berikut:
sumber
JavaScript (
72,70, 67 byte)72: asli (meminjam
■
penggunaan pintar dari jawaban Sphinxxx ):70: mencuri tanpa malu-malu dari Ismael Miguel (yang pantas menerima suara), yang lebih pendek untuk loop dan memungkinkan browser untuk memperbaiki karena kurangnya # melanjutkan kode warna ...
67 byte (65 karakter): menukar entitas untuk karakter unicode:
sumber
i=51
. Jika saya menghitung dengan benar, hanya ada 49 kotak?for(i=0;i++<50;)document.write('<font color=#'+i+i+i+' size=7>■')
atau yang serupa. Belum diuji tetapi mungkin berhasil!#
karakter untuk memiliki solusi panjang 70-byte.for(i=90;i;)document.write('<font color=#'+i+i+i--+' size=7>■')
- TETAPI setidaknya pada pengaturan default browser saya (OSX / Chrome) kotaknya sedikit lebih kecil dari 20x20 piksel, jadi solusi berbasis ■ ini dipertanyakan.C ++,
9883 karakterOke, Anda akan membutuhkan emulator terminal yang mendukung warna asli. Untuk mac os ada build malam hari dari iTerm2, misalnya. Untuk unix saya percaya konsole mendukungnya. Berikut daftar, untuk berjaga-jaga: https://gist.github.com/XVilka/8346728#now-supporting-truecolor
Kompilasi dengan g ++ (\ e bergantung pada kompiler).
Agar kotak memiliki area yang cukup, Anda harus mengubah ukuran font terminal Anda.
Menggunakan pustaka C sebagai ganti C ++ memungkinkan untuk mencukur beberapa karakter.
C,
6158 karakterIni adalah program yang sama tetapi dalam C, yang mengasumsikan deklarasi fungsi yang tidak diketik untuk mengembalikan int, dan yang tidak perlu menyertakan beberapa fungsi pustaka standar, seperti dalam hal ini, printf. Disarankan oleh @cartographer. Tiga karakter lebih sedikit berkat @ user3601420
Kompilasi dengan beberapa peringatan (untuk mengasumsikan tipe pengembalian utama menjadi int dan untuk secara implisit termasuk deklarasi printf).
sumber
int
di depan utama dan mengkompilasinya dengan hanya beberapa peringatan dengan gcc.i
argumen pertama menjadi utama, seperti pada:main(i){for(i=51;i--;)printf(...
\e
→\33
Python 2,
125115104 byteOutput sampel:
Penyu tua yang baik. Ini adalah satu-satunya metode yang dapat saya pikirkan dalam Python yang mencetak gambar ke layar hanya menggunakan perpustakaan standar.
Bentuk penyu persegi hanya 21 sampai 21, yang sangat nyaman. Ini bisa dilihat dengan menggali melalui
turtle.py
:Jika Anda memiliki monitor beresolusi tinggi atau tidak keberatan beberapa kotak berada di luar layar, maka ini adalah 93 byte:
Demo
(Demo ini menggunakan Skulpt dengan mengadaptasi snippet yang ditemukan di sini . Ini hanya termasuk untuk memberikan gambaran tentang apa yang dilakukan kode - saya harus memodifikasi beberapa bit untuk membuatnya bekerja.)
Tampilkan cuplikan kode
sumber
J (
434140383329 karakter)Setelah saran dari randomra .
Solusi ini tidak menampilkan apa pun karena pustaka standar J tidak mengandung rutinitas GUI. Sebagai gantinya, saya menghasilkan gambar dan menulisnya ke output standar. Outputnya diacak, memastikan semua corak berbeda. Berikut adalah beberapa contoh output dan gambar dikonversi ke png dan diputar 90 ° untuk memudahkan penglihatan:
sumber
50
dari header ke bagian dihasilkan dengan menggunakan 50 * 50 kotak menghemat 1 byte:1!:2&4'P2 50 2500 ',":(,*:#i.)50
.1!:2&4'P2 ',":(,*:,],*:#i.)50
untuk 29 karakter! Btwplot
bukan bagian dari perpustakaan J standar?plot
adalah salah satu paket tambahan yang dapat Anda unduh dari manajer paket. Saya tidak akan melihatnya sebagai bagian dari perpustakaan standar .Excel vba, 81
Di jendela langsung:
pada lembar aktif:
{81 shades hanya kode sebanyak 50}
sumber
cells(i,j)
Anda butuhkani>0
danj>0
.For i=1 To 50:Cells(i,1).Interior.Color=RGB(i*5,i*5,i*5):Next
R ,
3732 karakter 1 :Namun, tampilan untuk ini terlihat ... meh (gambar diputar 90 ° agar lebih sesuai dengan teks; dikompresi, panjang sisi persegi asli> 20px):
Berikut adalah versi yang lebih bagus yang memplot kotak dalam urutan acak di dalam matriks (50 karakter):
(Dan ya, tiga kotak yang berdekatan dengan warna yang tampaknya identik sebenarnya adalah tiga warna abu-abu yang berbeda.)
1 Ya, jawaban R lainnya,
dan bahkan tidak terpendek(sekarang yang terpendek untuk R) - permintaan maaf. Saya hilang cukup render di R.sumber
image(matrix(1:50,5),c=gray(1:50/51))
Matlab 35 berkat sanchis
Matlab 36
Menampilkan 50 kotak diisi dengan nilai abu-abu 1 hingga 50 dan 2 persegi panjang tambahan diisi dengan nilai abu-abu 0 dan 51:
Matlab, 45
sumber
JavaScript, 87
90byteOutput ini kuadratkan ke HTML, karena itu adalah satu-satunya metode output grafis JavaScript. Terima kasih kepada edc65 untuk mencukur 3 byte.
sumber
for(i=90;i>40;)document.write('<p style=background:#'+i+i+i--+';height:9ex;width:9ex>')
. Tidak dapat menggunakan satu digit karena abu-abu tidak akan unik (# 111 warna sama dengan # 111111)1cm
atau 19mm
akan lebih baik dan lebih banyak didukung. Tanpa mengubah jumlah byte Anda.PHP,
968874 byteTerima kasih kepada Ismael Miguel karena telah menghemat 22 byte!
Menulis 50
<p>
detik dengan tinggi dan lebar 9mm (yang seharusnya lebih besar dari 20px pada sebagian besar layar), saling ditumpuk, semuanya dengan sedikit perbedaan warna.Hasil yang dihasilkan (gambar diperbesar dan diputar 90 °):
sumber
Matlab - 33 byte
Meskipun perintah verbose, hasilnya masih cukup kompak. Ini terlihat sedikit lebih baik jika Anda mengganti
surf
dengansurface
tetapi biaya 3 karakter.Jika Anda tidak melihat kotak abu-abu ke-50 itu karena itu sedikit lebih besar dari yang lain!
sumber
ndgrid
! (Kurang dari 2 byte). Dan, apakah setiap kotak abu-abu yang berbeda ?Javascript (
7771 byte):Jawaban ini tidak lagi berbasis IE11. Ini berfungsi karena browser mengubah kode warna yang buruk menjadi kode yang dapat digunakan (dengan menambahkan
#
nomornya).Ini kodenya:
Firefox masih memiliki kebiasaan membuat lingkaran.
(Suntingan kecil: Diubah
for(i=61;i-->9;)
menjadifor(i=59;i-->9;)
karena menghasilkan 52 kotak)Jawaban lama:
Ini didasarkan pada jawaban PHP saya , dan menggunakan cara yang hampir sama untuk membuat kotak:
Bukan jawaban terpendek, tetapi perlu ditambahkan di sini.
Solusi ini tidak kompatibel dengan Chrome (menghasilkan banyak warna hijau) dan Firefox (hasil yang sama, tetapi menghasilkan lingkaran? OO WTH?)
Karena ini adalah kode-golf, solusi yang bekerja dengan versi tertentu atau perangkat lunak tertentu dapat diterima.
sumber
<hr>
, mungkin untuk membuatnya terlihat lebih halus. Tidak tahu apa yang terjadi dengan warna. Pokoknya minta +1 saya untuk membingungkan saya.Piet- 2 * 103 = 206
Ini unik karena kode sumber dan hasilnya memenuhi tantangan:
Sebagian besar dekoratif, jadi saya hanya menghitung dua baris teratas, yang berdiri sendiri saja. Output ppm skala abu-abu seperti yang dilakukan beberapa orang lain.
sumber
JavaScript - 70 byte
sumber
font:3em a
ataufont-size:3em
. Saya downvoting yang ini karena ukuran kotak. Sampai kamu memperbaikinya.i--
bukani-=1
.<b>
tag. Itu tidak akan mengubah kode dengan cara apa pun, kecuali memastikan bahwa teks akan menjadi hitam. Ini bukan persyaratan, tetapi mungkin ide yang bagus.Memproses, 66 karakter:
sumber
PHP (
62606372716259 byte):Saya telah membuat yang terpendek yang dapat saya temukan:
Ini persis kode yang sama dengan jawaban Javascript saya (dengan 71 byte) .
Tapi JAUH lebih pendek!
Ini memiliki kekhasan di Firefox: alih-alih kuadrat, Firefox membuat lingkaran ! (Go kegilaan!)
Othen dari itu, semua browser menghasilkan warna yang tepat (bahkan dengan hilang
#
padacolor
atribut).Pengiriman dan daftar perubahan tidak valid :
Jawaban lama, dengan 62 byte.
Semua warna selaras sempurna.
Solusi ini tidak akan berfungsi untuk Chrome (akan menghasilkan kotak dengan banyak warna) dan Firefox (yang membuat lingkaran ya. Lingkaran dengan
<hr>
! Penggaris horizontal adalah lingkaran di Firefox!).Anda dapat mengujinya di IE11 dan itu harus baik-baik saja.
(cukup dihapus dari atas)
Saya telah memperhatikan sesuatu yang mengerikan: Itu menghasilkan
#111
bukan#010101
untuk beberapa warna.Ini berarti bahwa beberapa warna berulang.
Karena itu, saya harus mengorbankan beberapa byte:
Menghasilkan 50 warna dengan urutan sempurna, dari yang lebih terang ke yang lebih gelap.
Karena titik yang benar dibuat oleh @ edc65 , saya harus menambahkan
width=20
, untuk menghasilkan kotak yang sempurna .Mengurangi satu byte lebih dengan mengganti
f!=$c
denganf>$c
, yang bekerja dengan sempurna.Versi final, tanpa
width=20
:Ini tidak valid karena diperlukan untuk kotak keluaran.
Ini menghasilkan nuansa dari terang ke gelap.
Dikurangi 1 byte dengan beralih ke
while
loop, seperti ini:Solusi pertama:
Ini tidak memiliki nuansa yang tertata rapi, tetapi ada 50 yang berbeda.
Tidak ada yang menyatakan bahwa mereka harus dipesan, tetapi ada persyaratan ukuran.
Saya harap saya bisa mengurangi lebih banyak.
Anda dapat mengujinya di http://writecodeonline.com/php/ (klik "Tampilkan sebagai HTML").
sumber
CSS (87 karakter)
Gunakan animasi;)
Versi runnable lebih panjang karena Webkit masih membutuhkan awalan vendor. :(
Jika kami diizinkan
<a>
elemen acak dan kosong , kami bisa mendapatkannya hanya 72 karakter:Lihat? CSS adalah bahasa pemrograman yang sah!
sumber
R, 36 byte
Saya bisa membuat jawaban freekvd lebih pendek sepele.
(Maaf karena tidak membuat komentar di bawah solusinya. Stackexchange tidak mengizinkan saya untuk memberikan komentar, memilih dll).
sumber
PostScript, 34 byte
Dalam penyandian ISO-Latin-1:
Ini setara dengan biner untuk:
(Ini mengasumsikan bahwa Anda menggunakannya pada perangkat yang memiliki setidaknya 1000 poin [= 10 inci = 25,4 cm] lebar.)
sumber
0f 4e 75 a3 ...
.DrRacket - 83
Hanya demi menjalankan DrRacket 1 tahun setelah "Pengantar Desain Program Sistematik".
EDIT :
sumber
2htdp/image
kehtdp/image
, ganti string"solid"
ke simbol'solid
. Untuk penghematan yang lebih besar, ubah(range 9 209 4)
ke(range 50)
: nuansa abu-abu hanya perlu berbeda, tidak mudah dibedakan dengan mata manusia!for/set
:(require htdp/image)(for/set([i 50])(rectangle 50 50'solid(make-color i i i)))
C # - 173
Menggunakan LINQPAD
Diperluas :
Keluaran :
sumber
for(int i=0;i<250;i+=5)
dan kemudianFromArgb(i,i,i)
danRectangle(i*4,0,20,20)
memberikan 168FillRectangle()
memiliki kelebihan yang mengambil koordinat persegi panjang secara langsung, sehingga Anda dapat menghapusnew Rectangle()
dan pergi dengan 153JavaScript, 152 byte.
Oke, jadi mungkin ini bukan solusi terbaik tapi ini milik saya.
Ini adalah output dengan css float left (hanya supaya lebih mudah untuk menghitung kotak) dan tanpa:
sumber
var
kata kunci dan menghapus spasi yang tidak perlu. Harap sertakan juga nama bahasa dan jumlah byte dalam jawaban Anda.var
kata kunci.c+=5
sebagai gantic=c+5
. Anda juga dapat menyimpan 2 karakter dengan meletakkann=c.toString()
di akhir baris sebelumnya, dan kemudian baris itu di akhir baris sebelumnya lagi. Jadi baris kedua Anda adalahfunction w(){if(c<250){n=c.toString()
px
untuk tinggi dan lebar.