Ihr Programm muss als Eingabe eine Zeichenzeile wie folgt verwenden:
@+.0
Und geben Sie die Zeichen sortiert nach ihrer Dunkelheit wie folgt aus:
.+0@
Bedarf:
Sie müssen für die Dunkelheitserkennung eine Schriftart mit einem Leerzeichen verwenden.
Sie müssen herausfinden, wie viele Pixel jedes Zeichen einnimmt. Sie müssen das Zeichen tatsächlich zeichnen und die Pixel zählen, dh Sie können nicht nur Pixelmengen fest codieren.
- Als konkretere Regel: Wenn Sie die Schriftarten gewechselt haben, sollte Ihr Programm weiterhin funktionieren. Darüber hinaus sollte Ihr Programm in der Lage sein, Schriftarten zu wechseln, indem Sie einfach eine Variable, einen Wert oder eine Zeichenfolge im Code ändern.
Wenn Sie Antialiasing verwenden, müssen Sie Pixel als Prozentsätze eines vollständig schwarzen Pixels zählen. Beispielsweise zählt ein
rgb(32, 32, 32)
Pixel als 1/8 eines vollen Pixels. Ignorieren Sie diese Regel, wenn Ihre Charaktere nicht voreingenommen sind.Nach dem Zählen der Pixel müssen Sie die Zeichen nach der Anzahl der Pixel sortieren und in der angegebenen Reihenfolge ausgeben.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
Antworten:
Mathematica,
112 110108 BytesDies kann wahrscheinlich noch weiter golfen werden. Angenommen, die Zeichenfolge befindet sich in der Variablen s.
Und verwendet jetzt eine korrekte Syntax, um eine Liste nach einer anderen Liste zu sortieren.
Glückliche Testfälle -> "Oh ja, das funktioniert" -> Facepalm
Danke für die scharfen Augen, David Carraher.
Update: OCR A wurde durch Menlo ersetzt, da mir auf OSX klar wurde, dass der Name der OCR A-Schriftfamilie tatsächlich OCR A Std ist. Also sortierte ich eine Standardschriftart anstatt der eigentlichen. Menlo ist mit der gleichen Byteanzahl auch monospaced, also kein Nettogewinn oder -verlust.
Ich habe einen gehosteten CDF-Export des Notebooks eingerichtet , damit Sie den Code bei Bedarf in Aktion sehen können. Ich überlege noch, wie ich web-gehosteten CDFs etwas Interaktivität hinzufügen kann, es ist also vorerst nur statisch.
Ausgabe für
s = FromCharacterCode /@ Range[33, 135];
mit "Courier"Ausgabe für dasselbe, aber mit FontFamily "Monospace":
Beachten Sie, dass die Endergebnisse in der internen Schriftart von MM und nicht in der zu sortierenden Schriftart angezeigt werden. Daher sehen Sie die Unterschiede in der ausgewählten Schriftart, die sich in der Sortierung widerspiegeln. Der CDF-Link zeigt jedoch beides für die Vervollständiger.
Ungolfed-Code:
quelle
"" <> (FromCharacterCode /@ Range[33, 135])
StringJoin@SortBy[Characters@"@+.0",ImageData@Binarize@Rasterize@Style[#,FontFamily->"Monospace"]~Total~2&]
Bash + ImageMagick:
164147148 ZeichenProbelauf:
Trennzeichen werden zwischen Graugruppen eingefügt. Zeichen mit identischer Graustufe werden nicht getrennt:
quelle
sort
QBasic, 259 Bytes
Ich habe das aus Spaß gemacht, daher entspricht es in gewisser Weise nicht den Regeln. Es wird keine Liste von Zeichen benötigt, sondern es werden alle Zeichen von 32 bis 255 gedruckt und stattdessen verwendet. Wenn Sie wirklich eine Version sehen möchten, die dieser Regel entspricht, teilen Sie mir dies bitte mit.
Es fällt auch eine andere technische Besonderheit aus: "Darüber hinaus sollte Ihr Programm in der Lage sein, Schriftarten zu wechseln, indem Sie einfach eine Variable, einen Wert oder eine Zeichenfolge im Code ändern." Es gibt keine einfache Möglichkeit, dies aus QBasic heraus zu tun. Das Programm funktioniert natürlich mit jeder Codepage Ihrer Wahl.
Schließlich könnte ich ein paar Zeichen wegpressen (meistens Leerzeichen, die die QBasic IDE hilfreich einfügt), aber es lohnt sich wahrscheinlich nicht, da diese Antwort ohnehin keine Gewinnchance hat.
quelle
Javascript + Canvas und Browser-DOM (
280237235 Bytes)Aktualisierte Version mit Vorschlägen von Fors und Zahnbürste in Kommentaren:
Mehr lesbare Version:
Kann vielleicht mehr golfen werden.
Ich bin neu auf dieser Website, daher bin ich mir nicht sicher, wie Eingaben normalerweise für Javascript-Antworten gelesen werden. Ich gehe davon aus, dass die Eingabe in einer Variablen namens enthalten ist
s
. Wenn dies nicht in Ordnung ist, aktualisiere ich die Antwort und die Zeichenanzahl.JSFiddle der aktualisierten Version.
JSFiddle der ersten Version .
quelle
c
unds
sind unnötig (a=document.createElement('canvas').getContext('2d')
undy+=a.getImageData(0,0,30,30).data[i]
), das Element muss nicht angehängt werden, die Nullinitialisierung vony
kann mit der voni
(i=y=0
) kombiniert werden , das Nachinkrement voni
kann mit dem Hinzufügen vony
(for(...;y+=...[i++]);
) und der Schriftart kombiniert werden Monaco ist einzeilig und hat einen kürzeren Namen als Courier.prompt()
; aber das ist auch in ordnung.y=i=0;
und änderna.fillText(x,0,20)
zua.fillText(x,y=i=0,20)
.PHP, 298 Zeichen
Ich habe ein paar Zeilenumbrüche hinzugefügt, damit Sie es in seiner ganzen Scheußlichkeit sehen können:
Dieser Code verwendet die in PHP integrierten GD-Schriftarten. Das zweite Argument von
imagechar()
wählt die Schriftart aus (Zahlen von 1 bis 5 sind gültig).Beispiel:
Wenn Sie über den oben gezeigten Code Folgendes einfügen, können Sie die Liste der Zeichen in Ihrem Webbrowser bereitstellen.
quelle
imagecreatetruecolor
, können Sie die erste Zuordnung löschen und den Funktionsnamen direkt in der zweiten für -11 verwenden.[]
stattarray()
. undforeach($a as$v)
funktioniert auchAGB
Dies ist der zweithärteste Code, den ich je für einen Taschenrechner geschrieben habe. Es gibt keine fest codierten Pixelwerte, sondern zeichnet den Text in eine Grafik und durchläuft eine Schleife, um jedes Pixel zu zählen.
Eingang
Ausgabe
quelle
Java -
468 450444@+.0abcdefghijklmnopqrstuvwxyz
->.irl+jcvtfxyzsuonkheaqpdb0wgm@
Ungolfed:
quelle
Nachschrift, 381
Hier ist etwas ganz anderes, nur zum Spaß. Da die meisten Schriften ohnehin Vektoren sind, ist das 'Zählen von Pixeln' ein wenig seltsam, nicht wahr? Das Berechnen der Glyphenformfläche ist zwar korrekt, aber nicht so einfach. Eine Alternative ist das Scannen eines Rechtecks und das Zählen von "Treffern", wenn sich ein Punkt innerhalb einer Glyphenform befindet. Postscript verfügt über Operatoren für diese Art von Prüfungen. Das Scannen und Testen von Insideness ist jedoch nur eine seltsame Methode zum Zählen von Pixeln.
.
Und hier sind die Ergebnisse für 3 verschiedene Schriftarten (Auswahl, die oben nicht kommentiert werden kann):
quelle
Perl (mit GD) (159)
Verwendung:
bearbeiten: auf 159 Zeichen gekürzt
quelle
Java, 584
Wow ... Dies war keine gute Sprache, um dies zu tun.
Verwendung:
Dieses Setup führt zu:
Die einzige Zeile, die hier erklärt werden muss:
Dann bringt dieses letzte Stück es zusammen ...
Durchlaufen Sie alle Punkte und addieren Sie die Anzahl der Punkte. Diese Dichteinformation wird an den Komparator zurückgegeben und zum Sortieren verwendet.
quelle
R, 195 Zeichen
Mit Kommentaren eingerückt:
Beispiel:
Da die Schriftarten in R-Plots plattformabhängig sind, kann ich nicht garantieren, dass sie auf einem PC funktionieren, aber auf einem Mac (OS X 10.7.5, R 2.14.2).
quelle
SmileBASIC,
179176173 BytesVerwendet die aktuell geladene Schriftart. Schriften können mit geladen werden
LOAD"GRPF:filename"
.Mehr lesbarer Code:
quelle
PHP - 485
Demo:
Code:
quelle
Python + Freetype-py: 147
quelle