Hintergrund / Beschreibung
Hinweis: Wie @HelkaHomba hervorhebt, sind die tatsächlichen GitHub-Identicons nicht zufällig, sondern basieren auf dem Hash eines Benutzernamens
Der Standard-GitHub-Avatar ist ein 5 x 5 Pixel großes Bild. Eine Farbe wird zufällig ausgewählt und dann werden zufällige Pixel auf einer Seite (rechts oder links, Größe 2x5) mit dieser Farbe ausgefüllt. Dann wird diese Seite kopiert und quer zur y-Achse auf die andere Seite gedreht. Die verbleibenden Pixel, die nicht ausgefüllt werden, sind # F0F0F0 oder rgb (240, 240, 240).
Die Pixel der mittleren Spalte (Größe 1x5) werden dann zufällig mit derselben Farbe wie zuvor ausgefüllt.
Ausgabe
Hinweis: Bei dieser Herausforderung ignorieren wir den Platz, der die GitHub-Avatare einschließt
Das Programm sollte eine 5x5 Pixel große Bilddatei ausgeben. Siehe http://meta.codegolf.stackexchange.com/a/9095/42499 für Einzelheiten
Beispiele
Hinweis: Diese wurden offensichtlich von 5 x 5 vergrößert, damit Sie sie sehen können
Viel Glück!
quelle
Antworten:
Pyth - 27 Bytes
Funktioniert natürlich nicht online, aber Sie können hier Farbcodes drucken lassen .
quelle
Perl 5 , 77 Bytes
Dies ist nicht konkurrierend, da es nur eine 256-Farben-Palette hat, nur auf Terminals funktioniert, die ANSI-Escape-Codes unterstützen und kein quadratisches 5-Pixel-Bild ausgeben Nieder.
Hinweis: Das
\e
ist eigentlich ASCII-Zeichen\x1B
.Verwendung
Erläuterung
Nichts besonders Schlaues außer vielleicht:
$-
diese Option, um die Farbnummer für die Verwendung in der Escape-Sequenz automatisch zu runden$n=0|rand 254
.Beispielausgabe
quelle
MATL ,
3629 BytesDadurch wird das Ergebnis in einer Datei gespeichert
a.png
.Durch Ersetzen
'a'
durch2
im Code wird das Bild angezeigt (vergrößert), anstatt eine Datei zu speichern:Hier ist eine Beispielausgabe:
Erläuterung
quelle
Eigentlich 53 Bytes
Probieren Sie es online!
Ist eigentlich schlecht bei der Stringverarbeitung. Ich glaube, das habe ich schon mal erwähnt. Dieses Programm gibt mit CP437 ein P6-Netpbm-Image wie folgt aus:
Dies kann mit ImageMagick in ein PNG konvertiert werden:
Skalierte PNG-Version:
Erläuterung:
quelle
ppm
Bild.Python,
167164155148 BytesAusgabe als ppm
range(5)
bis" "*5
print
map
da nurstr(p)
verwendet wurdeexec""*5
stattdessenfor _ in " "*5:
Einige Verbesserungen gegenüber altem, stringbasiertem Code:
quelle
Swift 2.3,
593585 BytesAktualisieren
Schnelle 3, 551 Bytes
Ich bin bei WWDC und habe gerade die Xcode 8 Beta mit Swift 3 erhalten. Apple hat einige der CoreGraphics-Aufrufe "schneller" gemacht, und ich bin in der Lage, den Bytecount zu reduzieren.
Swift 2 Code Ungolfed:
Diese Antwort setzt voraus, dass UIKit verfügbar ist und das Cocoa Touch-Framework verwendet.
Einige beispielhafte Ausgabebilder:
Ich weiß, dass ich mit den meisten anderen Antworten nicht mithalten kann, aber ich wollte dies als persönliche Herausforderung versuchen. Es gibt definitiv Raum für Verbesserungen mit dieser Antwort, aber ich denke, es wird schwierig sein, dies unter ein paar hundert Bytes zu bringen, aufgrund der Länge der Namen der UIKit- und CoreGraphics-Bildschreibmethoden. Ich habe mich entschieden, eine tatsächliche PNG-Datei anstelle von PPM-Werten als Übung für mich zu schreiben, aber kürzere Antworten wären definitiv möglich, wenn ich das PPM-Format verwenden würde.
Ich beginne bereits als Verlust, indem ich eine Variable deklarieren muss, mit der gesät
srand48
werden solltime
. Ich habe dies vorgezogenarc4random()
oderarc4random_uniform()
weil ich damit letztendlich mehr Bytes verlieren würde. Ich setze den Befehl ein,drand48
um eine zufällige Farbe zu erzeugen, und wähle aus, wann eine Farbe in ein Pixel geschrieben werden soll.CGSize
vsCGSizeMake
undCGRect
vsCGRectMake
:Ich wechsle zwischen den Inline-C-API-Funktionen und ihren Swift-Erweiterungen, um den jeweils kürzesten Konstruktor zu finden.
CGSizeMake
am Ende kürzer alsCGSize()
undCGRect
am Ende kürzer alsCGRectMake()
:Ich müsste
CGFloat
sx
undy
aufgrund der Art der for-Schleife erstellen . Ich bin wirklich nicht begeistert von der 2D-Schleife und den Gleichheitsprüfungen, aber ich hatte wirklich Mühe, einen kürzeren Weg zu finden. Hier ist definitiv Platz für ein paar Bytes.Das Aufrufen
CGContextFillRects
mit einem Array vonCGRect
Strukturen ist billiger als dasCGContextFillRect
zweimalige Aufrufen mit zwei verschiedenen Werten. Daher spare ich mit dem Array und dem Zeiger ein paar Bytes.Ich spare auch 27 Bytes, indem ich nicht anrufe
UIGraphicsEndImageContext()
. Während dies normalerweise ein "Fehler" im Produktionscode ist, ist dies für dieses Spielzeugprogramm nicht erforderlich.Farben:
Farben sind auch ein Problem, da ich
UIColor
Objekte erstelle , aberCGColor
für jedes Pixel einen undurchsichtigen Typ schreiben muss . Der kürzeste Code, den ich zum Erstellen einer zufälligen Farbe gefunden habe, bestand darin, denUIColor
Konstruktor zu verwenden und denCGColor
daraus zu erhaltenUIColor
. Das gleiche gilt für Weiß. Wenn ich das Cocoa-Framework anstelle von Cocoa Touch verwende, kann ich möglicherweise einige Bytes mithilfe von speichern.CGColorGetConstantColor()
Leider ist diese Methode im Cocoa Touch-SDK nicht verfügbar.Schreiben in die Datei:
Das Schreiben in eine Datei dauert fast 100 Bytes. Ich bin mir nicht sicher, wie ich das überhaupt optimieren soll. Abhängig von Ihren Berechtigungen müssen Sie auf einigen Systemen möglicherweise das Dokumentverzeichnis verwenden, das noch länger ist:
Auf jeden Fall offen für weitere Optimierungen.
Edit 1: Speichert ein paar Bytes, indem einige Variablendeklarationen neu angeordnet werden.
quelle
Mathematica,
1051029894 Bytes
ist der Transponierungsoperator .Edit 1: Gespeichert 3 Bytes durch Ersetzen
Round
+RandomReal
mitRandomInteger
Edit 2: Gespeicherte 4 Bytes durch den Austausch
RandomInteger
mitRandomChoice
Edit 3: 4 Bytes durch Ersetzen von
RandomColor
undGrayLevel
mit gespeichertRandomReal
quelle
MATLAB, 102 Bytes
Hallo, das ist meine Matlab-Lösung:
Die Eingabe
x
der Funktion ist der Name der Ausgabedatei. Beispielsweise:Erzeugt ein PNG-Bild mit dem Namen 'output.png'.
Hier die Ergebnisse einiger Ausführungen dieses Codes.
quelle
Dyalog APL,
4342 Bytes'P3',5 5 256,∊(3⍴240)(?3⍴256)[⌈(⊢+⌽)?5 5⍴0]
'P3',5 5a,∊(3⍴240)(?3⍴a←256)[⌈(⊢+⌽)?5 5⍴0]
Rechts nach links:
?5 5⍴0
erzeugt eine 5 × 5 Matrix von Zufallszahlen zwischen 0 und 1 ( aber niemals 0 oder 1) )(⊢+⌽)
ist ein Zug, der die Matrix mit ihrer Reflektion hinzufügt⌈
Obergrenze, gibt 1 oder 2 für jedes Element zurück(3⍴240)(?3⍴256)
Farben - weißlich und zufällig[ ]
Verwenden Sie jedes Element der Matrix als Index in Farben'P3',5 5 256,∊
Abflachen und Header hinzufügenquelle
PHP, 236 Bytes
Ich weiß, dass dies eine alte Herausforderung ist, aber ich fordere mich einfach gerne selbst heraus.
Ungolfed:
Beispielausgabe:
quelle
Javascript ES6, 296 Bytes
Hinweis: Erstellt keine Datei, zeichnet auf eine Zeichenfläche.
Sehen Sie es in Aktion in diesem JS Fiddle .
quelle