Widziałem to w wyzwaniu PHP. Celem jest stworzenie szachownicy z 64 kwadratami (8 * 8) z minimalną ilością kodu. To proste: stworzyłem mój w PHP w 356 bajtach (nie imponujący, wiem) i chciałbym zobaczyć inne podejścia. Można to zrobić w wybranym przez siebie języku, pod warunkiem, że pozostanie się waniliowym, więc nie będzie importu. Wygrywa najmniejsza liczba bajtów.
Dane wyjściowe powinny wyglądać następująco:
I mój kod:
<table><?php
$c='black';function p($c,$n){echo'<td style="width:50px;height:50px;background:'.$c.'"></td>';if($n==1){echo"<tr>";}}for($i=1;$i<=64;$i++){if($i%8==0&&$c=="black"){$c="white";$n=1;}elseif($i%8==0&&$c=="white"){$c="black";$n=1;}elseif(isset($n)&&$n==1){$n=0;}elseif($c=="black"){$n=0;$c="white";}elseif($c=="white"){$n=0;$c="black";}p($c,$n);}
Lub czytelny:
<table><tr>
<?php
$color = 'black';
function printcolor($color, $nl) {
echo '<td style="width:50px; height:50px; background:' . $color . '"></td>';
if ($nl == true) {
echo "</tr><tr>";
}
}
for ($i=1; $i<=64;$i++) {
if ($i % 8 == 0 && $color == "black") {
$color = "white";
$nl = true;
} elseif ($i % 8 == 0 && $color == "white") {
$color = "black";
$nl = true;
} elseif (isset($nl) && $nl == true) {
$nl = false;
} elseif ($color == "black") {
$nl = false;
$color = "white";
}
elseif ($color == "white") {
$nl = false;
$color = "black";
}
printcolor($color, $nl);
}
Edytować:
Przepraszam, ale na początku nie byłem bardzo szczegółowy:
- Kwadraty powinny mieć 50px * 50px, z wyjątkiem obrazów wektorowych.
- Format wyjściowy lub rozmiar nie jest istotny, ani nie musi być obrazem.
- Do celów oceny dane wyjściowe muszą być widoczne, na przykład w pliku obrazu lub na zrzucie ekranu
- Brak bibliotek napisanych po opublikowaniu wyzwania
code-golf
graphical-output
Bruno
źródło
źródło
Odpowiedzi:
Oktawa,
2018 bajtówDzięki @Bruno za zgolenie 2 bajtów.
Wynik:
W tej odpowiedzi użyto techniki znalezionej tutaj . Opiera się również na automatycznym skalowaniu obrazów w oktawie w zależności od wielkości okna figury.
źródło
vim,
47464443przekreślone 44 jest nadal regularne 44 ...
Dane wyjściowe w formacie NetPPM (PBM):
źródło
<C-p>
w vimie, zanim nie zacząłem pisać słowa ... to naprawdę przydatne!CSS, 244 bajty
Pokaż fragment kodu
Objaśnienie: Utworzono gradient liniowy o przekątnej 100 x 100 pikseli z czterema ogranicznikami, dzięki czemu większość gradientu jest przezroczysta, z wyjątkiem dwóch trójkątnych narożników 50 pikseli. (Zobacz poniżej fragment). Dodanie drugiego gradientu z przesunięciem 50x50px wypełnia brakujące połówki kwadratów. Zwiększenie rozmiaru ciała pozwala następnie powtórzyć powstały wzór, aby wypełnić całą szachownicę.
Pokaż fragment kodu
źródło
}
.html{background:#fff}
? Domyślnie 99% przeglądarek ustawia tło na białe,Mathematica, 34 bajty
Wyjście jest obrazem wektorowym i jest otoczone ramką.
Zamiast poprawnie ustawiać 32 prostokąty, możemy po prostu wygenerować macierz binarną i wykonać
ArrayPlot
dla nas pracę:źródło
GenerateChessBoardWithColorsAsParameters[ColorBlack, ColorWhite, 8, 8, 50, 50]
nie działa? ;)Mathematica,
817255 bajtówObraz jest z oceny poprzedniej wersji, ale nadal wygląda tak samo.
źródło
Oktawa, 48 bajtów
Działa to dokładnie tak samo, jak moja odpowiedź Matlab , ale nie ma jej
spiral
w Octave. Zamiast tego używamy funkcji, której Matlab nie ma: możemy użyć przypisaniat
już jako wyrażenia, a później użyćt
ponownie w tym samym wyrażeniu.(To jest przeskalowana wersja, nie chcę zaśmiecać tutaj odpowiedzi =)
źródło
Pure Bash (bez zewnętrznych narzędzi), 133
Widziałem komentarz @ Doorknob jako trochę wyzwanie. Jest trochę długi, ale oto:
Dane wyjściowe są w formacie .txt Imagemagick . Zauważ, że to czysty Bash. Ani Imagemagick, ani żadne inne zewnętrzne narzędzia nie są generowane do generowania tego wyniku. Dane wyjściowe można jednak przekierować do pliku .txt i wyświetlić za pomocą
display
narzędzia ImageMagick :Ten format obrazu jest fajny, ponieważ nie tylko jest to czysty tekst, to niewiele więcej niż lista wszystkich pikseli (x, y i wartość koloru), po jednym w wierszu. Dość arytmetycznie wyprowadzenie wszystkich wartości pikseli w jednej dużej pętli jest dość proste.
Poprzednia odpowiedź, 167
Dane wyjściowe są w formacie tekstowego pliku obrazu X_PixMap , który można również wyświetlać za pomocą
display
narzędzia ImageMagick .Uwaga: Wyciągnąłem tyle z formatu XPM, ile mogłem, aby
display
nadal go akceptować. Udało mi się wyjąć całą płytkę c z wyjątkiem"
podwójnych cudzysłowów wokół każdej linii. Nie mam pojęcia, jakie inne - jeśli w ogóle - narzędzia to zaakceptują.źródło
Wybrana przeglądarka PowerShell +,
149143 bajtyBrak możliwości użycia importu jest naprawdę trudny, ponieważ wszystkie wywołania GDI (tj. Rzeczy, które PowerShell używa do rysowania) są ukryte za importem w .NET ...
Edytuj - zapisano sześć bajtów dzięki @NotThatCharles
Używa dwóch pętli for
1..8
do wygenerowania dużego łańcucha HTML, podobnego do podanego przykładu PHP, i przesłania go do potoku. Za każdym razem obliczamy, czy dołączyć;background:#000
do czarnego tła, biorąc naszą obecną pozycję na module modulo 2.Aby użyć, przekieruj dane wyjściowe do wybranego pliku (np. Z czymś podobnym
> chessboard.htm
), a następnie uruchom go w wybranej przeglądarce. Poniższy zrzut ekranu użyłem „c.htm” i Firefoksa.źródło
white
iblack
może być#fff
i#000
... ale po co zawracać sobie głowę określaniem bieli?(";background:#000","")[($a+$_)%2]
zamiast tego.PHP + CSS + HTML, 136 bytes
Taking the table aproach to a higher level:
Generuje następujący kod:
W dużej mierze opiera się na uprzejmości przeglądarek i CSS.
źródło
++$i<9
z@++$i<9
. Ponadto, aby działał bez niego<?php
, należy mieć dyrektywęshort_open_tags=On
, która jest domyślna w niektórych środowiskach. Czytaj więcej na stackoverflow.com/a/2185331/2729937Galaretka, 26 bajtów
Ponieważ Jelly nie obsługuje wbudowanych obrazów, drukujemy obraz PPM.
Wypróbuj online! (smaller board for speed, raw PPM)
Wyniki
Jak to działa
Wersja niekonkurencyjna (24 bajty)
Najnowszy interpreter Jelly poprzedzający ten post nie został
x
poprawnie wektoryzowany . W najnowszej wersji można zapisać 2 dodatkowe bajty.The only difference is that
x50
yields a flat list (with every original element repeated 50 times), soF
is no longer necessary.źródło
;
...;)MATL , 11 (27) bajtów
Daje to następujący rysunek. Nie ma wewnętrznego rozmiaru; jest automatycznie skalowany w zależności od wielkości okna figury. Wydaje się, że na to pozwala wyzwanie.
Wyjaśnienie
Jeśli automatyczne skalowanie nie jest dozwolone:
tworzy następujący rysunek z kwadratami 50 x 50 pikseli
Wyjaśnienie
źródło
Pyth,
2826 bajtówWyjaśnienie
Odpowiednik w języku Python
Try it here (just the colour values)
Output:
źródło
Matlab, 47 (24) bytes
This works exactly the same as my Octave answer, but I was able to use
spiral
which saved one byte.spiral(n)
makes annxn
matrix and fills it spiraling with the firstn^2
integers.If vectorgraphics are allowed, we could do it in 24 bytes:
(This is the rescaled version, I do not want to clutter the answers here=)
źródło
FFmpeg, 78
82 100bytesFinally got around to cleaning the board.
Older:
Will exit with error, but after producing image below.
(board's collected some dust)
źródło
CJam, 27 bytes
Try it online! (smaller board for speed, raw PPM)
Results
How it works
źródło
HTML with utf-8 - 66b
▚ is short-direct utf for entity &# 9626 ;
Unicode Character 'QUADRANT UPPER LEFT AND LOWER RIGHT' (U+259A)
silly me, was looking for a 1 utf-8 char solution -would have been... 1b!
źródło
▞
instead so that the top-left square is white like on a standard chessboard. Also, use<pre>
instead of<div>
so that you can use newlines instead of<br>
.▚
counts for 3 bytes using UTF-8 encoding. In the future, you can use this to check your UTF-8 Byte CountPHP,
166158155 bytesWorks in PHP 7.0.2 (short-tags enabled) and Chrome 48.0.2564.97 m
źródło
bgcolor=0
to generate the black background. That should shave off a ton of bytes! And instead of$v%2==0
, use$v&1
, which should shave a few bytes.PHP >=5.4,
175159149116 BytesNotes
źródło
<table><tr><?php for(;++$i<65;){echo'<td style="width:50px;height:50px;background:#'.(($i+$m)%2?'000':'').'"></td>';if($i%8<1){echo"</tr><tr>";$m=!$m;}}
TR
.++$i<65
with@++$i<65
, since you are worried about the warnings. This means that you can reduce$m=$i=0
to just$m=0
, saving you 2 bytes. Instead ofecho 'a'.'b'.'c';
, you can doecho 'a','b','c';
. This means that yourecho
can beecho'<td style="width:50px;height:50px;background:#',($i+$m)%2?'':'000','">';
saving you more 2 bytes. Also, HTML attributes don't require quotes. Remove them and sabe 2 bytes. Also, there's a much shorterbgcolor
attribute, that reduces more bytes! You can use aprint()
in thefor
to save even more bytes!($i+$m)%2
with$i+@$m&1
, which allowed me to remove that$m=0
. Ahead, I've been able to remove yourif
, and replaced it with a trenary operation. To save even more, I've removed yourstyle
and added the propertieswidth
andheight
. To get even more into the hacky side, I've figured that Chrome 48.0.2564.103 m uses black if the background color is0
, using the propertybgcolor
. That allowed me to ever reduce more! More reductions is better!JavaScript, 150
This can definitely be golfed. It creates HTML.
źródło
iKe, 24 bytes
The core of the technique is to generate a list of x coordinates, divmod them and then take an equality cross-product to generate an appropriate bitmap. Using smaller examples for illustrative purposes:
try it here. Technically iKe works on a logical 160x160 pixel canvas, but in full-screen mode (the default when following a saved link) this is upscaled by 3x. I think this is still following the spirit of the question, as the program could assemble a much larger bitmap with the same character count; it just comes down to an arbitrary display limitation.
Update:
iKe isn't primarily designed for golf, but livecoding still benefits from brevity and sane defaults. As a result of tinkering with this problem, I've decided to permit it to use a default palette if none is provided. This particular solution could now be expressed with:
Saving (an ineligible) 3 bytes.
źródło
Ruby with Shoes, 97 characters
Sample output:
źródło
Lua + LÖVE,
138113112106 charactersSample output:
źródło
//
integer division operator, but apparently there is still no LÖVE built with a LuaJIT featuring it. ☹GIMP, 539 bytes
Ungolfed Scheme script-fu:
In batch mode, create a blank image, create a 50x50 rectangular selection, fill it, and then repeatedly move it around the image, filling in squares. Then save to
c.png
and exit.Output:
źródło
J,
3331 bytesI used a trick with binary.
... because 43605 in binary is 1010101001010101 (we use
#:
primitive to get it). Primitive$
shapes this array of binary digits into a matrix specified with the dimensions8 8
. Andviewmat
is just a system library.The window is fully resizable.
Thanks to @FrownyFrog for shortening it to:
źródło
viewmat 8$#:170 85
is 1 byte shorterviewmat#:8$170 85
Excel VBA, 82 Bytes
Anonymous VBE immediate window function that takes no input and outputs a checkerboard to the range
A1:H8
on the ActiveSheet objectThis function works by first creating 4 black columns in the range
B1:B8,D1:D8,F1:F8,H1:H8
and then offsetting the coloring in rows2,4,6 and 8
to the left by one cell.Sample Output
źródło
Perl 5 - 80
Generates a .PBM file:
źródło
PowerShell + GDI, 346 bytes
(newlines count same as semicolon, so newlines for readability)
As opposed to my other answer, this one uses the .NET assemblies to call GDI+ function calls. Interestingly, it's about twice the length.
The first two lines load the
System.Windows.Forms
andSystem.Drawing
assemblies. The first is used for the literal window and the canvas thereon, the second is used for the drawing object (in this code, a brush) that create the graphics on the canvas.We then create our form
$f
with the next line, and set itswidth
andheight
to be450
. Note that this isn't50*8
, since these numbers correspond to the border-to-border edge of the forms window, including titlebar, the close button, etc.The next line creates our canvas
$g
by calling the empty constructor. This defaults to the upper-left of the non-system area of the form being equal to0,0
and increasing to the right and downward, perfect for our needs.The next line is the actual call that draws the graphics, with
$f.add_paint({...})
. We construct the graphics calls by double-for looping from0..7
and carrying a helper variable$y
through each outer loop. Each inner loop, we tell our canvas to.FillRectangle(...,...)
to draw our squares. The first parameter constructs a newSolidBrush
with a color based on where we're at on the board. Other options here could be a hatch, a gradient, etc. The second parameter is a newRectangle
object starting at the specified x$_*50
and$y*50
coordinates and extending for50
in each direction. Remember that0,0
is the top-left.The final line just displays the output with
.showDialog()
.Note that since we're creating a form object, and PowerShell is all about the pipeline, closing the pop-up form will pass along a
System.Enum.DialogResult
object ofCancel
, since that's technically what the user did. Since we're not capturing or otherwise doing anything with that result, the wordCancel
will be displayed to STDOUT when the program concludes, as it was left on the pipeline.źródło
SELECT.,
88448278 bytesSure it's long, but the first two versions I generated for this task were twice as long.
Output:
How it Works:
Here's the program used to generate it:
In other words, loop n from 0 to 63, drawing a square at (n%8-4) + (n//8-4)i if (-1)^(n//8 + n%8) is not positive.
źródło
JavaScript (ES6), 147
źródło
Python, 57 bytes
c
is a line of 50 white and 50 black pixels,200*c
is a row with a white in the front,200*c[::-1]
the reverse.Output as PPM, usage:
źródło