Eingang
Der Name einer Datei im Raster-Grafikformat Ihrer Wahl. Das gewählte Format muss mindestens 8 Bit pro Kanal und 3 Kanäle unterstützen.
Ausgabe
Eine Datei im selben Format mit denselben Abmessungen und Pixeln wie die erste, deren Pixel jedoch in absteigender Reihenfolge der Häufigkeit ihres Auftretens gruppiert sind, sortiert von links nach rechts, von oben nach unten.
- Wenn bestimmte Farben von Pixeln gleich oft angezeigt werden, ist ihre Reihenfolge nicht angegeben.
- Sie dürfen die Eingabedatei nicht überschreiben (verwenden Sie einen anderen Dateinamen für die Ausgabe).
- Alle Bildverarbeitungsbibliotheken von Drittanbietern sind zulässig.
Beispiel
Gibt eine Ausgabe ähnlich wie:
Insbesondere in den unteren Teilen des Bildes können Abweichungen auftreten, da zwischen Farben gleicher Frequenz unterschiedliche Bindungen unterbrochen werden.
File
Objekt vom komplexen Typ verwenden ...? Das würde in einigen Sprachen einen großen Unterschied machen.Antworten:
J,
9481 BytesEine Funktion, die den Namen einer PNG-Datei (ohne Transparenzkanal) verwendet und das Ergebnis in den mit "o" vorangestellten Eingabedateinamen schreibt.
Methode
quelle
x
.y
Zeichen immer auf das Argument zu . (Wenn Sie eine Funktion mit zwei Argumenten definieren, auf die zugegriffen wird,x
undy
Sie keine Funktionen mit mehr Argumenten definieren können.)Mathematica,
125123 BytesDies definiert eine unbenannte Funktion, die den Dateinamen in einem beliebigen gängigen Bildformat verwendet und das Ergebnis in eine Datei mit demselben Namen schreibt, der jedoch vorangestellt ist
a
. Das Ergebnis sieht ein bisschen anders aus als das der OPs, da Mathematica dieSortBy
Bindungen standardmäßig sortiert, sodass die unteren Bits, in denen viele Bindungen auftreten, etwas ordentlicher aussehen:Die Implementierung selbst ist sehr einfach:
ImageData
um ein Raster mit Farbwerten zu erhalten.Join
um das Array zu reduzieren.Tally
um das Auftreten jeder Farbe zu zählen.SortBy[...,-Last@#&]
nach Frequenzen vom höchsten zum niedrigsten sortieren.ConstantArray
undJoin
die Tallies wieder zu erweitern.ArrayReshape
um die ursprüngliche Bildform wiederherzustellen (erhalten mitDimensions
).Image
um die Daten wieder in ein Bildobjekt zu konvertieren.Zu Ihrer Information, 22 Bytes werden für Datei-E / A verwendet. Eine äquivalente Version, die ein Bildobjekt akzeptiert und zurückgibt, hat eine Größe von 103 Byte:
quelle
Python2 / PIL,
244226225223222202186182170159Änderungsprotokoll
Code-Snippet anzeigen
Kürzere Version von stokastic , 123
Lass es uns wenigstens versuchen, obwohl es bereits geschlagen ist.
Es ist extrem langsam, Panda hat einige Minuten auf meinem Laptop verarbeitet.
Speichert mit einem Dateinamen, wobei der ursprüngliche Dateiname zweimal wiederholt wird.
quelle
i=open(raw_input());d=list(i.getdata());i.putdata(sorted(d,key=lambda D:d.count(D)));i.save('o.png')
, obwohl dies für große Bilder sehr, sehr langsam ist (ruft list.count für jedes Pixel auf).o.png
Python, 1197 Bytes
Das
png
Modul, das ich verwendet habe .quelle
C # 413
Komplettes Programm. Übergeben Sie den Dateinamen in die Befehlszeile, die Ausgabe wird im gleichen Format wie die Datei "o" gespeichert.
Einige nette Funktionen von linq wie SelectMany und Enumerable.Range werden nicht verwendet, da das Programm sauberer, aber länger wäre.
Lesbare Formatierung mit freundlicher Genehmigung von VS2010
quelle
{
Zeichen entfernen}
ZeichenPython 2: 191 Bytes
Hier ist mein Versuch. Ich dachte, ich könnte vielleicht etwas Platz sparen
Counter
, aber es war nicht so klein wie die Antwort von Pietu1998.Ausgabe von Panda
quelle