Es ist Winter und die Zeit des Jahres ist gekommen, in der es langsam kalt wird (und in Kürze komische bunte Kopftücher auftauchen). Schreiben wir einen Code, um Avatar-Bilder und andere Bilder einzufrieren, damit sie zum Thema passen!
Eingang
Die Eingabe für Einsendungen bei dieser Herausforderung sollte ein Bild (das Bild, das eingefroren werden soll) und eine Zahl (der Schwellenwert, der später erläutert wird) sein.
Sie können das Bild so eingeben, wie es Ihre Sprache unterstützt (Dateipfad oder URL als Argument, Übernahme aus der Zwischenablage, Ziehen und Ablegen eines Bildes usw.) und in jedem hier aufgeführten Format , das Farben in RGB ausdrückt (Sie) kann stattdessen RGBA unterstützen / erfordern, wenn Sie möchten, aber dies ist keine Voraussetzung).
Sie können die Nummer auch wie gewünscht eingeben (Befehlszeilenargument, STDIN, Eingabedialog usw.), mit Ausnahme der Hardcodierung in Ihrem Programm (z. B. n=10
). Wenn Sie einen Dateipfad / URL für das Bild verwenden, muss dieser ebenfalls auf diese Weise eingegeben werden.
Ausgabe
Das Programm muss das Bild gemäß der folgenden Beschreibung verarbeiten und es dann wie gewünscht ausgeben (in eine Datei, auf dem Bildschirm anzeigen, in die Zwischenablage kopieren usw.).
Beschreibung
Einreichungen sollten das Bild mit den folgenden drei Schritten verarbeiten. n
bezieht sich auf die Nummer, die Ihr Programm als Eingabe zusammen mit dem Bild erhalten hat.
Wenden Sie eine Unschärfe des Radius
n
auf das Eingabebild an, indem Sie die R-, G- und B-Werte jedes Pixels durch die durchschnittlichen R-, G- und B-Werte aller Pixel innerhalb eines Manhattan-Abstandes vonn
Pixeln ersetzen und alle außerhalb der Grenzen liegenden Koordinaten ignorieren. (Dh alle Pixel, bei denen die Summe der Differenz in X und der Differenz in Y kleiner oder gleich istn
.)(Hinweis: Ich habe für die obigen Bilder eine Gaußsche Unschärfe verwendet, da es eine praktische integrierte Funktion gab, sodass Ihre Bilder möglicherweise etwas anders aussehen.)
Stellen Sie jedes Pixel auf ein zufälliges Pixel in einem Abstand von
n/2
Pixeln ein ("Abstand" wird auf dieselbe Weise wie im vorherigen Schritt definiert).Dies sollte durch Durchlaufen des Bildes und Einstellen jedes Pixels auf ein zufälliges Pixel in diesem Bereich erfolgen, sodass einige Pixel möglicherweise vollständig verschwinden und andere dupliziert werden.
Alle Änderungen müssen gleichzeitig wirksam werden. Verwenden Sie mit anderen Worten die alten Werte der Pixel (nach Schritt 1, aber vor diesem Schritt) und nicht die neuen Werte, nachdem Sie sie auf ein zufälliges Pixel festgelegt haben.
Multiplizieren Sie den "blauen" RGB-Wert jedes Pixels mit 1,5, begrenzen Sie ihn auf 255 (oder auf einen beliebigen Maximalwert für ein Pixelband) und runden Sie ihn ab.
Regeln
Sie können in Ihre Sprache integrierte Bildbibliotheken / Bildverarbeitungsfunktionen verwenden. Sie dürfen jedoch keine Funktionen verwenden, die eine der drei in der Beschreibung genannten Hauptaufgaben ausführen. Beispielsweise können Sie keine
blur
Funktion verwenden, aber einegetPixel
Funktion ist in Ordnung.Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
quelle
dx <= n && dy <= n
ist eine genaue Darstellung der Entfernung von Manhattan, nicht wahr?Antworten:
Python 2 - 326
339 358Nimmt Eingaben vom Benutzer entgegen. Dann erst Datei
n
.Hier könnte wohl noch viel mehr golfen werden: P Danke an @ SP3000 für die Golfideen!
Beispieleingabe: (Windows)
Edit : Bug behoben, bei dem Blau propagiert wurde (Martin mit n = 20 ist kein Fluss mehr; _;)
Martin mit n = 2:
Martin mit n = 10:
Martin mit n = 20:
quelle
Python 2 - 617 Bytes
EDIT: Golf einige, sieht aus wie FryAmTheEggMan hat mich aber geschlagen :)
quelle
Java - 1009 Bytes
Ich dachte, ich könnte es besser machen ...
Martin mit n = 5:
n = 20:
Ich mit 10:
quelle
k&0xFF00
? Darüber hinaus können Sie nicht255
anstelle von verwenden0xFF
?C, 429 (391 + 38 für die Definition von Flags)
Eingabeformat:
pam
Datei ohne Kommentare oder zusätzliches Leerzeichen in der Kopfzeile, Inhalt wird über STDIN übergeben.n
Argumente sind erforderlich (sie können alles sein).Ausgabeformat:
pam
Datei in STDOUT.Kompilieren:
-Wl,--stack,33554432
erhöht die Stapelgröße; Dies kann je nach Größe des zu verarbeitenden Bilds geändert oder entfernt werden (das Programm benötigt eine Stapelgröße, die größer ist als die doppelte Anzahl von Pixel mal 4).-funsigned-char
hat gcc verwendungunsigned char
stattsigned char
fürchar
. Der C-Standard erlaubt eine dieser Optionen, und diese Option wird nur hier benötigt, weil gccsigned char
standardmäßig verwendet.Ausführen (n = 5):
Hinweis: Wenn unter Windows kompilieren
stdio.h
,fcntl.h
undio.h
müssen enthalten sein, und der folgende Code zu Beginn des hinzugefügt ,main()
damit das Programm zum Lesen / Schreiben zu STDIN / STDOUT als binäre, nicht Text, ströme (dies ist irrelevant auf Linux, aber Windows verwendet\r\n
statt\n
für Textströme).Kommentierte Version
Martin mit n = 10:
Martin mit n = 20:
Martin mit n = 100:
quelle
R, 440 Zeichen
Mit Zeilenumbrüchen zur besseren Lesbarkeit:
Beispieleingabe:
f(2,"avatar.png")
Ergebnisse mit n = 2
... mit n = 10
... mit n = 20
quelle