Sah dies in einer PHP-Herausforderung. Das Ziel ist es, ein Schachbrett mit 64 Feldern (8 * 8) mit der minimalen Menge an Code zu erstellen. Ganz einfach, ich habe meine in PHP in 356 Bytes erstellt (nicht beeindruckend, ich weiß) und ich würde gerne ein paar andere Ansätze sehen. Dies kann in einer Sprache Ihrer Wahl gemacht werden, solange Sie es vanille halten, also keine Importe. Die kleinste Byteanzahl gewinnt.
Die Ausgabe sollte folgendermaßen aussehen:
Und mein Code:
<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);}
Oder lesbar:
<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);
}
Bearbeiten:
Entschuldigung, ich war anfangs nicht sehr spezifisch:
- Quadrate sollten 50px * 50px haben, mit Ausnahme von Vektorbildern.
- Ausgabeformat oder -größe sind nicht relevant und es muss sich nicht um ein Bild handeln.
- Zu Evaluierungszwecken muss die Ausgabe sichtbar sein, z. B. in einer Bilddatei oder einem Screenshot
- Nach dem Posten der Challenge wurden keine Bibliotheken geschrieben
code-golf
graphical-output
Bruno
quelle
quelle
Antworten:
Oktave,
20 bis18 BytesVielen Dank an @Bruno für das Abschneiden von 2 Bytes.
Ergebnis:
Diese Antwort verwendet eine Technik, die hier zu finden ist . Es basiert auch auf der automatischen Skalierung von Bildern in Octave in Abhängigkeit von der Größe des Figurenfensters.
quelle
vim,
47464443durchgestrichen 44 ist immer noch regulär 44 ...
Ausgaben im NetPPM-Format (PBM):
quelle
<C-p>
in vim zu versuchen, ohne ein Wort zu tippen ... das ist wirklich praktisch!CSS, 244 Bytes
Code-Snippet anzeigen
Erläuterung: Ein linearer Farbverlauf mit einer Diagonale von 100 x 100 Pixel wird mit vier Blenden erstellt, sodass der größte Teil des Farbverlaufs bis auf zwei dreieckige 50-Pixel-Ecken transparent ist. (Siehe unten Schnipsel). Durch Hinzufügen eines zweiten Farbverlaufs mit einem Versatz von 50 x 50 Pixel werden die fehlenden Hälften der Quadrate ausgefüllt. Wenn Sie den Körper vergrößern, kann sich das resultierende Muster wiederholen, um das gesamte Schachbrett auszufüllen.
Code-Snippet anzeigen
quelle
}
.html{background:#fff}
? Standardmäßig setzen 99% der Browser den Hintergrund auf weiß, afaikMathematica, 34 Bytes
Die Ausgabe ist ein Vektorbild und ist in einem Rahmen umgeben.
Anstatt 32 Rechtecke richtig zu positionieren, können wir einfach eine binäre Matrix generieren und
ArrayPlot
für uns arbeiten lassen:quelle
GenerateChessBoardWithColorsAsParameters[ColorBlack, ColorWhite, 8, 8, 50, 50]
funktioniert nicht? ;)Mathematica,
817255 BytesDas Bild ist von einer früheren Version, sieht aber immer noch gleich aus.
quelle
Oktave, 48 Bytes
Dies funktioniert genauso wie meine Matlab-Antwort , aber es gibt keine
spiral
in Octave. Stattdessen verwenden wir eine Funktion, die Matlab nicht bietet: Wir können die Zuweisung von verwendent
bereits als Ausdruck verwenden und später verwendent
erneut in demselben Ausdruck verwenden.(Dies ist die neu skalierte Version, ich möchte die Antworten hier nicht überladen =)
quelle
Pure Bash (keine externen Dienstprogramme), 133
Ich habe den Kommentar von @ Doorknob als Herausforderung gesehen. Es ist ein bisschen lang, aber hier geht:
Die Ausgabe erfolgt im TXT-Format von Imagemagick . Beachten Sie, dass dies reine Bash ist. Weder Imagemagick noch andere externe Dienstprogramme werden erstellt, um diese Ausgabe zu generieren. Die Ausgabe kann jedoch in eine TXT-Datei umgeleitet und mit dem
display
Dienstprogramm ImageMagick angezeigt werden :Dieses Bildformat ist schön, da es sich nicht nur um reinen Text handelt, sondern auch nur um eine Liste aller Pixel (x, y und Farbwert), eines pro Zeile. Es ist ziemlich einfach, alle Pixelwerte in einer großen Schleife arithmetisch abzuleiten.
Vorherige Antwort, 167
Die Ausgabe erfolgt im X_PixMap-Text-Image-Dateiformat , das auch mit ImageMagick angezeigt werden kann
display
Dienstprogramm .Beachten Sie, dass ich so viel wie möglich aus dem XPM-Format genommen habe, sodass
display
es immer noch akzeptiert wird. Mit Ausnahme der doppelten Anführungszeichen um jede Zeile konnte ich das gesamte c- Boilerplate herausnehmen"
. Keine Ahnung, welche anderen - wenn überhaupt - Dienstprogramme dies akzeptieren werden.quelle
PowerShell + Browser Ihrer Wahl,
149143 BytesDie Unfähigkeit, Importe zu verwenden, ist sehr schwierig, da alle GDI-Aufrufe (dh das, was PowerShell zum Zeichnen verwendet) hinter den Importen in .NET vergraben sind ...
Bearbeiten - 6 Bytes dank @NotThatCharles gespeichert
Hierbei werden zwei for-Schleifen von verwendet
1..8
, um einen großen HTML-String zu generieren, der dem bereitgestellten PHP-Beispiel ähnelt, und ihn in der Pipeline auszugeben. Bei jedem Durchlauf berechnen wir, ob;background:#000
die schwarzen Hintergründe angehängt werden sollen, indem wir unsere aktuelle Position auf dem Board modulo 2 einnehmen.Um dies zu verwenden, leiten Sie die Ausgabe in eine Datei Ihrer Wahl um (z. B. mit etwas Ähnlichem
> chessboard.htm
) und starten Sie diese dann in einem Browser Ihrer Wahl. Für den Screenshot unten habe ich "c.htm" und Firefox verwendet.quelle
white
undblack
kann sein#fff
und#000
... aber warum sich die Mühe machen, Weiß anzugeben?(";background:#000","")[($a+$_)%2]
stattdessen.PHP + CSS + HTML, 136 Bytes
Den Tisch auf eine höhere Ebene bringen:
Es generiert den folgenden Code:
Es hängt stark von der Freundlichkeit des Browsers und von CSS ab.
quelle
++$i<9
durch@++$i<9
. Damit dies auch ohne funktioniert<?php
, muss die Direktive vorhanden seinshort_open_tags=On
, die in einigen Umgebungen standardmäßig verwendet wird. Lesen Sie mehr auf stackoverflow.com/a/2185331/2729937Gelee, 26 Bytes
Da Jelly keine eingebauten Bilder unterstützt, drucken wir ein PPM-Bild.
Probieren Sie es online! (kleinere Karte für Geschwindigkeit, Roh-PPM)
Ergebnisse
Wie es funktioniert
Nicht konkurrierende Version (24 Bytes)
Der neueste Jelly-Interpreter vor diesem Beitrag wurde nicht
x
richtig vektorisiert . Mit der neuesten Version können 2 zusätzliche Bytes gespeichert werden.Der einzige Unterschied besteht darin, dass sich
x50
eine flache Liste ergibt (wobei jedes Originalelement 50 Mal wiederholt wird), sodass diesF
nicht mehr erforderlich ist.quelle
;
... ein wenig eingeschlafen ;)MATL , 11 (27) Bytes
Dies ergibt die folgende Abbildung. Es hat keine innere Größe; es wird automatisch abhängig von der Größe des Figurenfensters skaliert. Dies scheint die Herausforderung zuzulassen.
Erläuterung
Wenn die automatische Skalierung nicht zulässig ist:
erzeugt die folgende Abbildung mit 50x50-Pixel-Quadraten
Erläuterung
quelle
Pyth,
2826 BytesErläuterung
Python-Äquivalent
Probieren Sie es hier aus (nur die Farbwerte)
Ausgabe:
quelle
Matlab, 47 (24) Bytes
Dies funktioniert genauso wie meine Octave-Antwort , aber ich konnte verwenden,
spiral
was ein Byte sparte.spiral(n)
erstellt einenxn
Matrix und füllt sie spiralförmig mit den erstenn^2
ganzen Zahlen.Wenn Vektorgrafiken erlaubt sind, könnten wir das in 24 Bytes machen:
(Dies ist die neu skalierte Version, ich möchte die Antworten hier nicht überladen =)
quelle
FFmpeg, 78
82 100BytesEndlich bin ich dazu gekommen, das Board zu putzen.
Älter :
Wird mit Fehler beendet, aber nach der Erstellung des Bildes unten.
(Board hat etwas Staub gesammelt)
quelle
CJam, 27 Bytes
Probieren Sie es online! (kleinere Karte für Geschwindigkeit, Roh-PPM)
Ergebnisse
Wie es funktioniert
quelle
HTML mit utf-8 - 66b
▚ ist ein kurzer direkter utf für die Entität & # 9626;
Unicode-Zeichen "QUADRANT OBEN LINKS UND UNTEN RECHTS" (U + 259A)
albern ich war auf der suche nach einer 1 utf-8 char lösung - wäre ... 1b!
quelle
▞
stattdessen, damit das linke obere Quadrat weiß ist, wie bei einem Standardschachbrett. Verwenden Sie auch<pre>
anstelle von,<div>
damit Sie anstelle von Zeilenumbrüche verwenden können<br>
.▚
für 3 Bytes mit UTF-8-Codierung zählt. In Zukunft können Sie verwenden diese Ihren UTF-8 Byte Count zu überprüfenPHP,
166158155 BytesFunktioniert in PHP 7.0.2 (Short-Tags aktiviert) und Chrome 48.0.2564.97 m
quelle
bgcolor=0
, um den schwarzen Hintergrund zu generieren. Das sollte eine Menge Bytes einsparen! Und stattdessen$v%2==0
verwenden$v&1
, die ein paar Bytes rasieren sollte.PHP> = 5,4,
175159149116 BytesAnmerkungen
quelle
<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
durch@++$i<65
, da Sie wegen der Warnungen besorgt sind. Dies bedeutet, dass Sie$m=$i=0
auf nur$m=0
2 Bytes reduzieren können . Stattdessenecho 'a'.'b'.'c';
können Sie tunecho 'a','b','c';
. Dies bedeutet , dassecho
kannecho'<td style="width:50px;height:50px;background:#',($i+$m)%2?'':'000','">';
man mehr 2 Byte zu speichern. Außerdem erfordern HTML-Attribute keine Anführungszeichen. Entfernen Sie sie und speichern Sie 2 Bytes. Außerdem gibt es ein viel kürzeresbgcolor
Attribut, das mehr Bytes reduziert! Sie können einprint()
in verwendenfor
, um noch mehr Bytes zu sparen!($i+$m)%2
mit$i+@$m&1
, was mir erlaubt , dass zu entfernen$m=0
. Vor mir konnte ich Ihre entfernenif
und durch eine Trenaroperation ersetzen. Um noch mehr zu sparen , habe ich Ihre entferntstyle
und die Eigenschaftenwidth
und hinzugefügtheight
. Um noch mehr auf die Hacky-Seite zu bringen, habe ich0
mithilfe der Eigenschaft herausgefunden, dass Chrome 48.0.2564.103 m Schwarz verwendet, wenn die Hintergrundfarbe "Schwarz" istbgcolor
. Dadurch konnte ich immer mehr reduzieren! Mehr Ermäßigungen sind besser!JavaScript, 150
Dies kann auf jeden Fall Golf gespielt werden. Es wird HTML erstellt.
quelle
iKe , 24 Bytes
Der Kern der Technik besteht darin, eine Liste von x-Koordinaten zu generieren, diese zu divmodieren und dann ein Gleichheitsprodukt zu verwenden, um eine geeignete Bitmap zu generieren. Zur Veranschaulichung kleinere Beispiele verwenden:
versuche es hier . Technisch funktioniert iKe auf einer logischen Leinwand mit 160 x 160 Pixeln. Im Vollbildmodus (der Standardeinstellung, wenn Sie einem gespeicherten Link folgen) wird dies jedoch um das Dreifache erhöht. Ich denke, dies folgt immer noch dem Grundgedanken der Frage, da das Programm eine viel größere Bitmap mit der gleichen Zeichenanzahl zusammenstellen könnte. es kommt nur auf eine willkürliche Anzeigebeschränkung an.
Aktualisieren:
iKe ist nicht in erster Linie für das Golfen gedacht, aber das Live-Codieren profitiert immer noch von der Kürze und den vernünftigen Standardeinstellungen. Als Ergebnis des Herumbastelns an diesem Problem habe ich beschlossen, die Verwendung einer Standardpalette zuzulassen, wenn keine bereitgestellt wird. Diese spezielle Lösung könnte nun ausgedrückt werden mit:
Speichern von (nicht auswählbaren) 3 Bytes.
quelle
Ruby with Shoes, 97 Zeichen
Beispielausgabe:
quelle
Lua + LÖVE,
138113112106 ZeichenBeispielausgabe:
quelle
//
Integer-Divisionsoperator, aber anscheinend gibt es noch kein LÖVE, das mit einem LuaJIT ausgestattet ist. ☹GIMP, 539 Bytes
Ungolfed Scheme script-fu:
Erstellen Sie im Stapelmodus ein leeres Bild, erstellen Sie eine rechteckige Auswahl von 50 x 50, füllen Sie es aus und bewegen Sie es dann wiederholt um das Bild, wobei Sie Quadrate ausfüllen. Dann speichern
c.png
und beenden.Ausgabe:
quelle
J,
3331 BytesIch habe einen Trick mit Binär verwendet.
... weil 43605 in binär 1010101001010101 ist (wir verwenden
#:
primitive, um es zu bekommen). Primitive$
formt dieses Array von Binärziffern in eine Matrix, die mit den Dimensionen angegeben wird8 8
. Undviewmat
ist nur eine Systembibliothek.Das Fenster ist in der Größe vollständig veränderbar.
Vielen Dank an @FrownyFrog für die Kürzung auf:
quelle
viewmat 8$#:170 85
ist 1 Byte kürzerviewmat#:8$170 85
Excel VBA, 82 Bytes
Anonyme VBE-
A1:H8
Direktfensterfunktion , die keine Eingabe annimmt und ein Schachbrettmuster in den Bereich des ActiveSheet-Objekts ausgibtDiese Funktion erstellt zunächst 4 schwarze Spalten im Bereich
B1:B8,D1:D8,F1:F8,H1:H8
und versetzt dann die Färbung in Zeilen2,4,6 and 8
um eine Zelle nach links.Beispielausgabe
quelle
Perl 5 - 80
Erzeugt eine .PBM-Datei:
quelle
PowerShell + GDI, 346 Byte
(Zeilenumbrüche zählen wie Semikolon, daher werden Zeilenumbrüche zur besseren Lesbarkeit verwendet.)
Im Gegensatz zu meiner anderen Antwort verwendet diese die .NET-Assemblys, um GDI + aufzurufen -Funktionsaufrufen. Interessanterweise ist es ungefähr doppelt so lang.
Die ersten beiden Zeilen laden die Assemblys
System.Windows.Forms
undSystem.Drawing
. Das erste wird für das Literalfenster und die Zeichenfläche verwendet, das zweite für das Zeichenobjekt (in diesem Code ein Pinsel), mit dem die Grafiken auf der Zeichenfläche erstellt werden.Wir erstellen dann unser Formular
$f
mit der nächsten Zeile und setzen seinwidth
undheight
sein450
. Beachten Sie, dass dies nicht der50*8
Fall ist , da diese Zahlen dem Rand des Formularfensters entsprechen, einschließlich der Titelleiste, der Schaltfläche zum Schließen usw.In der nächsten Zeile wird unsere Zeichenfläche erstellt,
$g
indem der leere Konstruktor aufgerufen wird. Dies entspricht standardmäßig der oberen linken Ecke des Nicht-Systembereichs des Formulars0,0
und nimmt nach rechts und unten zu, was für unsere Anforderungen perfekt ist.Die nächste Zeile ist der eigentliche Aufruf, mit dem die Grafiken gezeichnet werden
$f.add_paint({...})
. Wir konstruieren die Grafikaufrufe, indem wir eine Double-for-Schleife von jeder äußeren Schleife ausführen0..7
und eine Hilfsvariable$y
durch diese führen. In jeder inneren Schleife weisen wir unsere Leinwand an.FillRectangle(...,...)
, unsere Quadrate zu zeichnen. Der erste Parameter erstellt ein neuesSolidBrush
mit einer Farbe, die davon abhängt, wo wir uns auf dem Board befinden. Andere Optionen können Schraffuren, Verläufe usw. sein. Der zweite Parameter ist ein neuesRectangle
Objekt, das an den angegebenen x-$_*50
und$y*50
Koordinaten beginnt und sich50
in jede Richtung erstreckt. Denken Sie daran, dass0,0
das oben links ist.In der letzten Zeile wird nur die Ausgabe mit angezeigt
.showDialog()
.Beachten Sie, dass das Schließen des Popup-Formulars ein Objekt von weiterleitet, da wir ein Formularobjekt erstellen und PowerShell sich ausschließlich um die Pipeline handelt , da dies technisch der Benutzer getan hat. Da wir mit diesem Ergebnis nichts erfassen oder anderweitig etwas unternehmen, wird das Wort STDOUT angezeigt, wenn das Programm beendet wird, da es in der Pipeline verblieben ist.
System.Enum.DialogResult
Cancel
Cancel
quelle
WÄHLEN. ,
88448278 BytesSicher, es ist lang, aber die ersten beiden Versionen, die ich für diese Aufgabe erstellt habe, waren doppelt so lang.
Ausgabe:
Wie es funktioniert:
Hier ist das Programm, mit dem es generiert wurde:
Mit anderen Worten, Schleife n von 0 bis 63, Zeichnen eines Quadrats bei (n% 8-4) + (n // 8-4) i, wenn (-1) ^ (n // 8 + n% 8) nicht ist positiv.
quelle
JavaScript (ES6), 147
quelle
Python, 57 Bytes
c
ist eine Linie von 50 weißen und 50 schwarzen Pixeln,200*c
ist eine Reihe mit einem weißen in der Frontseite,200*c[::-1]
die Rückseite.Ausgabe als PPM, Verwendung:
quelle