Chłopcy i dziewczęta są podekscytowani widząc Pięćdziesiąt twarzy Greya na srebrnym ekranie, chcemy po prostu kodować bez kłopotów, więc oto wyzwanie, aby wybrać nasz mózg.
Musisz:
- Wydruk na ekranie pięćdziesiąt kwadratów wypełnionych każdym innym odcieniem szarości
- Jeśli wybrany język nie ma możliwości przetwarzania obrazu , możesz wydrukować plik obrazu
- Kwadraty muszą być widoczne, co najmniej 20 x 20 pikseli
- Nie możesz używać liczb losowych, chyba że upewnisz się, że każdy odcień jest unikalny.
- Nie można połączyć się z żadną usługą przez żadną sieć
- Nie możesz odczytać żadnych plików w swoim programie.
- Nie możesz używać żadnych bibliotek ze standardowych bibliotek wybranego języka.
To jest golf golfowy, więc wygrywa najkrótszy kod.
code-golf
graphical-output
Jsedano
źródło
źródło
Odpowiedzi:
MATLAB, 24 bajty
Druga próba, teraz faktycznie zgodna z zasadami.
„I” oznacza „InitialMagnification”, ale najwyraźniej Matlab będzie automatycznie uzupełniał nazwy w parach nazwa / wartość. Pewnie to dobra sztuczka golfowa!
źródło
Mathematica, 30 bajtów
Oto inne podejście Mathematica:
lub
Pierwszy tworzy po prostu tablicę
i drugi
Następnie
ArrayPlot
drukuje je jako siatkę i domyślnie używa skali szarości do wizualizacji wartości.źródło
ArrayPlot
.ArrayPlot@{Range@50}
, czyli tylko 20 bajtów.CJam - 23 (brak rzeczywistej wydajności graficznej)
Ponieważ CJam nie potrafi (jeszcze?) Rysować na ekranie, napisałem program, który wyświetla obraz w zwykłym formacie pgm .
Zapisz dane wyjściowe w pliku o nazwie 50.pgm i otwórz za pomocą przeglądarki / edytora obrazów.
Wypróbuj online
Wynik wygląda następująco:
Wyjaśnienie:
źródło
No line should be longer than 70 characters.
Mathematica
72 61 59 43 3534 bajtówAktualna wersja (34 bajty)
Wcześniejsza wersja (59 bajtów), dzięki Martin Büttner.
Dodano niebieskie obramowania, aby podświetlić pozycję kwadratów.
Ilość kwadratów:
Pierwsza próba (72 bajty)
Jeśli kwadraty mogą się nakładać. Jak zauważa Zgarb, istnieje niewielkie prawdopodobieństwo, że jeden kwadrat ukryje inny.
źródło
Sage -
26243529 znakówTo wygląda tak:
Poprzednie próby : Najpierw miałem
Matrix([range(50)]).plot()
, potemmatrix_plot([range(50)])
. Te wyglądały tak:Użytkownik @flawr wskazał, że kwadraty utworzone przy ustawieniach domyślnych są zbyt małe. Dodanie
figsize
opcji to naprawia, ale jest o 6 znaków dłuższe niż wersja 5x10 u góry tej odpowiedzi:źródło
R,
47 42 39 38 37 3635 bajtówZakładając, że mogą się nakładać, to działa.
Symbols
wymaga wektora, który utrzymuje rozmiar każdego kwadratu, a ja oszczędzam miejsce, ponownie wykorzystując ten sam wektor dla wszystkich parametrów funkcji. Największy kwadrat ma zawsze szerokość 1 cala. Przy 50:99 jako zakresie liczb całkowitych najmniejszy kwadrat będzie miał około pół cala szerokości, czyli 36 pikseli przy 72 dpi.Dzięki wszystkim za komentarze i sugestie, jestem całkiem nowy w R, więc to wszystko jest bardzo pouczające.
Poprzednie wersje:
Poprzednie zdjęcie:
źródło
symbols(x<-50:99,sq=x,bg=gray(x/99))
f = function (a, b) { a; b}
a następnie dzwoniącf(x <- 5, x)
. Działa to zgodnie z oczekiwaniami. Kiedy odwrócisz argumenty wf
definicji (irm(x)
), to już nie działa.symbols(x,,,x<-50:99,bg=gray(x/99))
Java - 180
Całkiem proste, po prostu rysowanie pól.
Z podziałami linii:
źródło
int i;
zamiast,int i=1
ale następnie użyć++i
przy pierwszym użyciui
zamiast zamiasti++
w ostatnim przypadku, zaoszczędziłby 2 bajty. BTW: Nawet nie wiedziałem, że możesz stworzyć program Java bezclass MyClass ... public static void main(...
!!!BBC BASIC, 57
Kwadraty muszą mieć co najmniej 20 pikseli, ale nie ma nic do powiedzenia, że muszą być tego samego rozmiaru, więc myślę, że to się kwalifikuje.
Można to skrócić, stosując więcej kodów VDU niskiego poziomu. Ale zmiana z tego wzoru na mniej interesujący raczej nie spowoduje skrócenia.
źródło
F.n=51TO2S.-1V.19;-1,n,n,n:RECTANGLEFILL0,0,n*20N.
ipython 2, 54 bajty
Najlepsze, co mogłem zrobić, to program ipython. Uruchomienie ipython
ipython -pylab
i uruchomienie tego programu pokaże wykres z 50 odcieniami szarości w 50 kwadratach:Wynik:
Rozwiązanie 2:
Oto inny program (61 bajtów):
wyświetla następujące okno:
źródło
JavaScript (
72,70, 67 bajtów)72: oryginał (pożyczenie sprytnego
■
użycia od odpowiedzi Sphinxxx ):70: kradzież bezwstydna przed Ismaelem Miguelem (który zasługuje na głosy), krótsza pętla i pozwalająca przeglądarce na poprawienie braku # kontynuowania kodu koloru ...
67 bajtów (65 znaków): zamiana encji na znak Unicode:
źródło
i=51
. Jeśli poprawnie policzyłem, jest tylko 49 kwadratów?for(i=0;i++<50;)document.write('<font color=#'+i+i+i+' size=7>■')
lub podobny. Nie przetestowano, ale może działać!#
znak, aby uzyskać rozwiązanie o długości 70 bajtów.for(i=90;i;)document.write('<font color=#'+i+i+i--+' size=7>■')
- ALE przynajmniej w domyślnych ustawieniach mojej przeglądarki (OSX / Chrome) pudełko jest nieco mniejsze niż 20x20 i tak piksele, więc te rozwiązania oparte na ■ są wątpliwe.C ++,
9883 znakówOk, więc potrzebujesz emulatora terminalu, który obsługuje prawdziwe kolory. Na przykład dla Mac OS dostępne są nocne wersje iTerm2. W przypadku Uniksa konsola go obsługuje. Oto lista, na wszelki wypadek: https://gist.github.com/XVilka/8346728#now-supporting-truecolor
Kompiluj za pomocą g ++ (\ e zależy od kompilatora).
Aby kwadraty miały wystarczającą powierzchnię, musisz zmienić rozmiar czcionki terminala.
Korzystanie z bibliotek C zamiast C ++ pozwala na golenie niektórych znaków.
C,
6158 znakówJest to ten sam program, ale w C, który zakłada, że deklaracje typu bez typu zwracają int, i który nie wymaga uwzględnienia niektórych standardowych funkcji bibliotecznych, takich jak w tym przypadku printf. Sugerowany przez @cartographer. Trzy znaki mniej dzięki @ user3601420
Kompiluje z kilkoma ostrzeżeniami (dla założenia, że typ zwracany przez main ma być int i domyślnie obejmuje deklarację printf).
źródło
int
przed main, i skompilować je za pomocą kilku ostrzeżeń za pomocą gcc.i
pierwszy argument na main, jak w:main(i){for(i=51;i--;)printf(...
\e
→\33
Python 2,
125115104 bajtówPrzykładowe dane wyjściowe:
Dobry stary żółw. To była jedyna metoda, o której mogłem pomyśleć w Pythonie, która drukuje obrazy na ekranie przy użyciu tylko standardowych bibliotek.
Kwadratowy żółw ma po prostu 21 na 21, co jest bardzo wygodne. Można to zobaczyć, przeglądając
turtle.py
:Jeśli masz monitor wysokiej rozdzielczości lub nie przeszkadza ci kilka kwadratów poza ekranem, to jest to 93 bajty:
Próbny
(To demo korzysta ze Skulpt'a , dostosowując znajdujący się tutaj fragment kodu. Jest on dołączony, aby dać wyobrażenie o tym, co robi kod - musiałem zmodyfikować kilka bitów, aby go uruchomić.)
Pokaż fragment kodu
źródło
J (
434140383329 znaków)Po sugestiach od randomra .
To rozwiązanie nie wyświetla niczego, ponieważ standardowa biblioteka J nie zawiera procedur GUI. Zamiast tego generuję obraz i zapisuję go na standardowym wyjściu. Wyjście jest losowe, dzięki czemu wszystkie odcienie są wyraźne. Oto kilka przykładowych danych wyjściowych, a obraz przekonwertowany na png i obrócony o 90 ° dla łatwiejszego oglądania:
źródło
50
z nagłówka do wygenerowanej strony przy użyciu 50 * 50 kwadratów oszczędza 1 bajt:1!:2&4'P2 50 2500 ',":(,*:#i.)50
.1!:2&4'P2 ',":(,*:,],*:#i.)50
dla 29 znaków! Btwplot
nie jest częścią standardowej biblioteki J?plot
jest jednym z pakietów pomocniczych, które można pobrać z menedżera pakietów. Z trudem postrzegałbym to jako część standardowej biblioteki .Excel vba, 81
W bezpośrednim oknie:
na aktywnym arkuszu:
{81 odcieni to tyle samo kodu co 50}
źródło
cells(i,j)
potrzebującychi>0
ij>0
.For i=1 To 50:Cells(i,1).Interior.Color=RGB(i*5,i*5,i*5):Next
R ,
3732 znaki 1 :Wygląda jednak na to… meh (obraz obrócony o 90 °, aby lepiej pasował do tekstu; skompresowana, oryginalna kwadratowa długość boku> 20 pikseli):
Oto ładniejsza wersja, która tworzy kwadraty w losowej kolejności w matrycy (50 znaków):
(I tak, trzy sąsiednie kwadraty o pozornie identycznych kolorach są w rzeczywistości trzema różnymi odcieniami szarości.)
1 Tak, kolejna odpowiedź R,
i nawet najkrótszy(teraz najkrótszy dla R) - przeprosiny. Brakowało mi ładnego renderowania w R.źródło
image(matrix(1:50,5),c=gray(1:50/51))
Matlab 35 dzięki sanchises
Matlab 36
Wyświetla 50 kwadratów wypełnionych szarymi wartościami od 1 do 50 i 2 dodatkowe prostokąty wypełnione szarymi wartościami 0 i 51:
Matlab, 45
źródło
JavaScript, 87
90bajtówTo generuje kwadraty do kodu HTML, ponieważ tak naprawdę jest to jedyna metoda JavaScript do wyświetlania grafiki. Dzięki edc65 do golenia 3 bajtów.
źródło
for(i=90;i>40;)document.write('<p style=background:#'+i+i+i--+';height:9ex;width:9ex>')
. Nie można używać pojedynczych cyfr, ponieważ szarości nie byłyby unikalne (# 111 tego samego koloru co # 111111)1cm
lub 19mm
byłoby lepsze i szerzej wspierane. Bez zmiany liczby bajtów.PHP,
968874 bajtówDzięki Ismael Miguel za uratowanie 22 bajtów!
Zapisuje 50
<p>
s przy 9 mm wysokości i szerokości (która powinna być większa niż 20 pikseli na większości ekranów), ułożonych jedna na drugiej, wszystkie z niewielką różnicą odcienia.Wygenerowany wynik (obraz jest pomniejszony i obrócony o 90 °):
źródło
Matlab - 33 bajty
Pomimo pełnych poleceń wynik jest nadal dość zwarty. To wygląda nieco lepiej, jeśli zastąpi
surf
sięsurface
jednak, że kosztuje 3 znaki.Jeśli nie zauważysz 50. szarego kwadratu, to dlatego, że jest on nieco większy od innych!
źródło
ndgrid
! (2 bajty mniej). I czy każdy kwadrat jest inny szary?JavaScript (
7771 bajtów):Ta odpowiedź nie jest już oparta na IE11. Działa, ponieważ przeglądarka przekształca złe kody kolorów na użyteczne (dodając
#
do liczby).Oto kod:
Firefox nadal ma dziwactwo tworzenia kręgów.
(Mała edycja: Zmieniono
for(i=61;i-->9;)
na,for(i=59;i-->9;)
ponieważ produkował 52 kwadraty)Stara odpowiedź:
Opiera się to na mojej odpowiedzi PHP i używa prawie tych samych sposobów tworzenia kwadratów:
Nie jest to najkrótsza odpowiedź, ale warto ją tutaj dodać.
To rozwiązanie nie jest kompatybilne z Chrome (produkuje wiele zielonych kolorów) i Firefox (ten sam wynik, ale generuje koła? OO WTH?)
Ponieważ jest to gra w golfa, dopuszczalne jest rozwiązanie działające z określoną wersją lub określonym oprogramowaniem.
źródło
<hr>
, prawdopodobnie, aby wyglądał bardziej gładko. Nie ma pojęcia, co dzieje się z kolorami. W każdym razie mam +1 za zaskoczenie mnie.Piet-2 * 103 = 206
Jest to wyjątkowe, ponieważ kod źródłowy i dane wyjściowe spełniają wyzwanie:
Większość z nich jest dekoracyjna, więc policzyłem tylko dwa górne rzędy, które same stoją w porządku. Wysyła ppm w skali szarości, tak jak niektóre inne.
źródło
JavaScript - 70 bajtów
źródło
font:3em a
lubfont-size:3em
. Głosuję za tym z powodu wielkości pudeł. Dopóki tego nie naprawisz.i--
zamiasti-=1
.<b>
tagu. Nie zmieni w żaden sposób kodu, z wyjątkiem upewnienia się, że tekst będzie czarny. Nie jest to wymagane, ale może być dobrym pomysłem.Przetwarzanie, 66 znaków:
źródło
PHP (
62606372716259 bajtów):Zrobiłem najkrótszy, jaki udało mi się znaleźć:
Jest to dokładnie ten sam kod, co moja odpowiedź Javascript (71 bajtów) .
Ale TAK DUŻO krótszy!
To dziwactwo w Firefoksie: zamiast kwadratów Firefox tworzy koła ! (Idź obłęd!)
Othen niż wszystkie przeglądarek wytworzenia odpowiedniego koloru (nawet z zaginionych
#
nacolor
atrybutu).Nieprawidłowe zgłoszenia i dziennik zmian :
Stara odpowiedź z 62 bajtami.
Wszystkie odcienie są idealnie dopasowane.
To rozwiązanie nie będzie działać w Chrome (będzie produkować kwadraty o wielu kolorach) i Firefox (co powoduje, że koła są wyłączone. Tak, koła z
<hr>
! Pozioma linijka to koło w Firefoksie!).Możesz to przetestować na IE11 i powinno być w porządku.
(po prostu usunięty z góry)
Zauważyłem coś okropnego: wyświetlał
#111
zamiast#010101
niektórych kolorów.Oznaczało to, że niektóre kolory się powtarzały.
Dlatego musiałem poświęcić kilka bajtów:
Odtwarza 50 odcieni w idealnej kolejności, od jaśniejszej do ciemniejszej.
Ze względu na prawidłowy punkt @ edc65 musiałem dodać
width=20
, aby uzyskać idealne kwadraty .Zmniejszono jeszcze jeden bajt, zastępując
f!=$c
gof>$c
, co działa idealnie.Wersja ostateczna bez
width=20
:Jest to nieprawidłowe, ponieważ wymagane jest wyprowadzanie kwadratów.
To powoduje, że odcienie stają się jaśniejsze lub ciemniejsze.
Zmniejszono 1 bajt, przełączając się na
while
pętlę:Pierwsze rozwiązanie:
Nie ma uporządkowanych odcieni, ale istnieje 50 różnych.
Nic nie wskazuje na to, że należy je zamówić, ale wymagana jest wielkość.
Mam nadzieję, że mogę to znacznie zmniejszyć.
Możesz to przetestować na stronie http://writecodeonline.com/php/ (kliknij „Wyświetl jako HTML”).
źródło
CSS (87 znaków)
Wykorzystuje animację;)
Wersja do uruchomienia jest dłuższa, ponieważ Webkit nadal potrzebuje prefiksu dostawcy. :(
Jeśli otrzymamy losowy, pusty
<a>
element, możemy ograniczyć go do 72 znaków:Widzieć? CSS to prawdziwy język programowania!
źródło
R, 36 bajtów
Potrafię skrócić odpowiedź freekvd w trywialny sposób.
(Przepraszam, że nie skomentowałem jego rozwiązania. Stackexchange nie pozwala mi jeszcze na komentowanie, głosowanie itp.).
źródło
PostScript, 34 bajty
W kodowaniu ISO-Latin-1:
Jest to binarny odpowiednik:
(Zakłada się, że używasz go na urządzeniu o szerokości co najmniej 1000 punktów [= 10 cali = 25,4 cm]).
źródło
0f 4e 75 a3 ...
. :) .DrRacket - 83
Tylko w celu uruchomienia DrRacket 1 rok po „Wstępie do systematycznego projektowania programów”.
EDYCJA :
źródło
2htdp/image
nahtdp/image
, zmień ciąg"solid"
na symbol'solid
. Dla większych oszczędności, zmień(range 9 209 4)
na(range 50)
: odcienie szarości są po prostu muszą być wyraźne, nie jest łatwo odróżnić dla ludzkiego oka!for/set
:(require htdp/image)(for/set([i 50])(rectangle 50 50'solid(make-color i i i)))
C # - 173
Korzystanie z LINQPAD
Rozszerzony :
Wyjście :
źródło
for(int i=0;i<250;i+=5)
a potemFromArgb(i,i,i)
iRectangle(i*4,0,20,20)
daje 168FillRectangle()
ma przeciążenie, które pobiera bezpośrednio współrzędne prostokąta, dzięki czemu można usunąćnew Rectangle()
i uciec z 153JavaScript, 152 bajty.
Okej, więc może to nie jest najlepsze rozwiązanie, ale tu jest moje.
Oto wynik z css float pozostawionym (tak, aby łatwiej było policzyć kwadraty) i bez:
źródło
var
usuwając wszystkie słowa kluczowe i usuwając niepotrzebne białe znaki. Ponadto w odpowiedzi należy podać nazwę języka i liczbę bajtów.var
słów kluczowych.c+=5
zamiastc=c+5
. Możesz także zapisać 2 znaki, umieszczając ponownien=c.toString()
na końcu poprzedniej linii, a następnie tę linię na końcu poprzedniej linii. Więc twoja druga linia tofunction w(){if(c<250){n=c.toString()
px
wysokość i szerokość.