Dies ist ein bisschen ähnlich wie bei diesem staubbedeckten Einstieg, aber ich hoffe, dass mein Dreh es einzigartig genug macht. Ich konnte nichts finden, was mich davon abhält, dies zu veröffentlichen, aber da draußen ist ziemlich viel Meer.
Sowieso! Die Herausforderung:
Ihr Code erhält eine Zeichenfolge. Es konvertiert dies in eine ASCII-artige Version des gleichen Strings, jedoch mit einem Haken.
Eingabetransformation
- Die einzigen unterstützten Zeichen sind AZ und 0-9
- Kleinbuchstaben werden in Großbuchstaben umgewandelt
- Alles andere wird stillschweigend entfernt
Charakterzeichnung
- Jedes "Pixel" der vergrößerten Schrift wird aus der Eingabezeichenfolge gezeichnet
- Das n-te Pixel entspricht dem n-ten Zeichen in der Eingabezeichenfolge. Wenn n größer als die Länge der Eingabezeichenfolge ist, setzen Sie den Zeilenumbruch auf den Anfang zurück
- Einzelne Buchstaben werden von links nach rechts und von oben nach unten gezeichnet
- Nachfolgende Buchstaben nehmen ihren "Pixelzeichen" -Index dort auf, wo der letzte Buchstabe aufgehört hat (z. B. bei einer Eingabelänge von 10, wenn der erste Buchstabe 9 Pixel hatte, wird das erste Pixel des zweiten Buchstabens mit dem 10. Eingabezeichen, dem zweiten, gezeichnet Pixel wird mit dem 1. eingegebenen Zeichen gezeichnet)
- Jeder Buchstabe wird in einem 5x5-Raster gezeichnet, das vollständig mit Leerzeichen aufgefüllt ist. Die Schriftart, die Sie verwenden möchten, finden Sie in diesem Pastebin oder etwas weiter unten in diesem Beitrag
- Jeder Buchstabe wird in derselben Zeile gezeichnet, sodass die Gesamtzahl der Zeilenumbrüche in Ihrer Ausgabe 4 beträgt
- Jeder Buchstabe wird durch 2 Spalten mit Leerzeichen getrennt
Die Schriftart
000
0 00
0 0 0
00 0
000
111
1
1
1
11111
2222
2
222
2
22222
3333
3
333
3
3333
44
4 4
44444
4
4
55555
5
5555
5
5555
6666
6
6666
6 6
666
77777
7
7
7
7
888
8 8
888
8 8
888
999
9 9
9999
9
9999
AAA
A A
AAAAA
A A
A A
BBBB
B B
BBBB
B B
BBBB
CCCC
C
C
C
CCCC
DDDD
D D
D D
D D
DDDD
EEEEE
E
EEE
E
EEEEE
FFFFF
F
FFF
F
F
GGGG
G
G GG
G G
GGGG
H H
H H
HHHHH
H H
H H
IIIII
I
I
I
IIIII
JJJJJ
J
J
J
JJ
K K
K K
KKK
K K
K K
L
L
L
L
LLLLL
M M
MM MM
M M M
M M
M M
N N
NN N
N N N
N NN
N N
OOO
O O
O O
O O
OOO
PPPP
P P
PPPP
P
P
QQ
Q Q
Q QQ
Q Q
QQ Q
RRRR
R R
RRRR
R R
R R
SSSS
S
SSS
S
SSSS
TTTTT
T
T
T
T
U U
U U
U U
U U
UUU
V V
V V
V V
V V
V
W W
W W
W W W
WW WW
W W
X X
X X
X
X X
X X
Y Y
Y Y
Y
Y
Y
ZZZZZ
Z
Z
Z
ZZZZZ
Ja, ich weiß, dass die 4 und Q hässlich sind
Ein Beispiel
Eingang
0123456789
Ausgabe
012 567 6789 0123 34 45678 9012 34567 234 567
3 45 8 0 4 5 6 9 3 8 5 6 8 9
6 7 8 9 123 567 78901 0123 4567 9 789 0123
90 1 0 4 8 2 4 8 9 0 0 1 4
234 12345 56789 9012 3 5678 012 1 234 5678
Ein anderes Beispiel
Eingang
a3 B'2
Ausgabe
A3B B2A3 2A3B 2A3B
2 A B 2 A 2
3B2A3 2A3 3B2A A3B
B 2 B 3 B 2
A 3 2A3B 2A3B A3B2A
Standardlücken sind verboten. Code Golf, damit kein grünes Häkchen gegeben wird.
[A-Z\d]
- ich glaube nicht, dass das Filtern ungültiger Zeichen der Herausforderung etwas hinzufügt.Antworten:
Python 2 ,
413411373364352345 Bytes-1 Byte dank Kevin Cruijssen .
-9 Bytes dank Jo King .
-1 Byte danke an Lynn .
Der Datenstring enthält nicht druckbare, maskierte Versionen.
Probieren Sie es online!
Da jedes Zeichen 25 Pixel hat, kann es leicht in 25 Bit codiert werden. Die Zahl der Basis 126
'uM\x04<L\x10x\x14Se#ye\x0f>El4NpD@$\tgh>\x1d\x10\x15I,\x0em]a\x0e\x03B>e\x15,\x0c]\x03?kFL\x01\x0byglxV!\x18\x16\x0c\x0b\x10\x0b%w832wGj%uT{Hr*K,*[P\n6.&ED#T\x0c}^\x1c\x0fD\x17LI&p7\x17f\\d`*\x01l\x1bG\x12!Fac\x05\x08\x0eG\rz?!\x1aA'
codiert alle Zeichen, die0
von den niedrigstwertigen 25 Bits,1
den nächsten 25 Bits undZ
den 25 höchstwertigen Bits codiert werden. Ein einzelnes Zeichen wird in der folgenden Reihenfolge codiert:(
00
ist das niedrigstwertige Bit,25
das höchstwertige)Leerzeichen werden durch eine Null codiert, Nicht-Leerzeichen durch eine Eins. Beispiel :
Ungolfed
Probieren Sie es online!
quelle
+' '
sollte auch so sein+' '
. Trotzdem nette Antwort, also +1 von mir..upper()
irgendwo, sonst werden die inneren Buchstaben klein geschrieben>1
.APL (Dyalog Unicode) ,
228225224214 BytesVolles Programm. Fordert stdin zur Eingabe eines Strings auf. Druckt nach Standard. Etwa die Hälfte des Codes entschlüsselt nur das verschlüsselte Alphabet.
_
…_
Repräsentiert den folgenden 143-Byte-LZ4-codierten String in Anführungszeichen:"⊥\u0004pæ€}€\\⊃⌿Æ€â<Å€∧€ÀÆ€Ð┬:Ëcü\u0000≥ðè⊤õ⍨¢∧·èý\u0005þÐÕ\u001EÐ :\u001Eè⌊×ßi[B⊂ɫoãà oéìÐ⍙⊃Ý∣à)≥èB⊃\u001B\u001F⊥ä{⌿⍨ G⍺\u001B⌿Æ\u001F∇x└îR`:└è→⊂\u0000ê∧⍒\u0003ɫqè$$ÛD⊥â∊\u001B\u001Eéu|\u001B@4A|⍪┌nàkááЀ€€€€€€"
Probieren Sie es online!
_
…_
143-Byte-LZ4-codierte Zeichenfolge in Anführungszeichen⎕AV⍳
Hinweise dazu im A tomic V ector (der Zeichensatz)¯125+
addiere -125 dazu (um signierte 8-Bit-Ganzzahlen zu erhalten)¯1(219⌶)
LZ4 dekomprimieren0(220⌶)
Deserialisieren in ein boolesches Array mit 36 Layern, 5 Zeilen und 5 Spalten(
…)⌷
Indizieren Sie dies mit den folgenden Indizes:⎕A
Großbuchstabe A Lphabet⎕D,
vorangestellt wird, die D igitsa←
Laden ina
(für ein Lphabet)(
…)∩
Schnittpunkt von Folgendem und dem (entfernt ungültige Eingaben):⍞
Eingabeaufforderung für Texteingabe über stdin (Konsole)1(819⌶)
Falte in Großbuchstaben (819
sieht aus wieBig
, 1 ist für ja groß im Gegensatz zu klein)i←
store ini
(für i Nput)a⍳
Hinweise dazu ina
⊂
einschließen (um zu indizieren, dass jede die führende Koordinate darstellt)t←
Speichern int
(für t ext),
Ravel (Abflachen)r←
speichern inr
(für r avelled)+/
Summe (dh Anzahl der Zeichen, die zum Malen des Kunstwerks benötigt werden)i⍴⍨
zyklisch r die Eingabe zu dieser Länge eshaper\
erweitern Sie das; füge ein Leerzeichen bei 0s ein, verbrauche Buchstaben bei 1s(
…) ⍴` zu folgender Form umformen:⍴t
die Form des Textes↓
Teilen Sie das N-mal-5-mal-5-Array in eine N-mal-5-Matrix von Kunstlinien auf⍉
In eine 5-mal-N-Matrix von Kunstzeilen transponieren (dies richtet die entsprechenden Zeilen der Zeichen aus)Standardmäßig trennt APL einfache Elemente eines verschachtelten Arrays mit zwei Leerzeichen.
quelle
Python 2 , 428 Bytes
Probieren Sie es online!
Die Buchstaben sind wie folgt codiert:
Jeder eindeutige Teil (es gibt 23) wird in Binärdaten konvertiert, und eine 1 wird davor hinzugefügt. Dann wird es zur Basis 36 konvertiert.
Die resultierenden Basis-36-Zahlen sind:
Die Initiale
1
wird entfernt, so dass wir ein einzelnes Zeichen haben:Jeder Buchstabe (
A-Z0-9
) wird dann in fünf dieser neuen Zeichen codiert.In fünf Listen:
Um die Eingabe einem Index in diesen Listen zuzuordnen, wird die Ordnungszahl geändert:
Da die Ordnungszahlen nicht 0-35, sondern leicht gemischt sind, werden die 5 Listen neu angeordnet und verkettet:
Für jedes Zeichen in der Eingabe werden 5 Buchstaben gefunden und in Ints (base36) umgewandelt:
Wenn die Nummer darunter ist
30
,36
wird hinzugefügt (die fehlenden haben1
wir früher entfernt)Dann wird die Zahl wieder in binär umgewandelt und
0
s und1
s werden inund umgewandelt
.
. Am Ende der Konvertierung werden zwei Leerzeichen hinzugefügt.Z.B.
Für jedes
.
im Ergebnis wird es durch das nächste Zeichen aus der Eingabe ersetzt (iteriert vonx
).quelle
Java 8,
917907 BytesWird es von hier aus Golf spielen, um die aktuelle Byteanzahl hoffentlich mindestens zu halbieren.
Probieren Sie es online aus.
Erläuterung:
quelle
i=-1
Innere des Lambda habe. Aber vielleicht irre ich mich und es ist laut Meta nicht erlaubt? BEARBEITEN: Ähnliches geschieht ziemlich oft in C-Antworten.int i;f->{for(;i++<10;)print(i);}
ist 1 Byte kürzer alsf->{for(int i=0;i++<10;)print(i);}
.i=-1
in der Lambda-Funktion befindet. Ihr Beispiel funktioniert nicht, wenn Sie dasselbe Lambda zweimal ausführen, meins, was hier der Hauptunterschied ist.int i;f->{for(i=0;i++<10;)print(i);}
wäre zum Beispiel erlaubt (wenn auch nicht wirklich kürzer).Japt v2.0a0
-R
,213211210209206193191190 BytesBeinhaltet ein Leerzeichen in jeder Zeile.
Probieren Sie es aus oder testen Sie alle Zeichen (die zusätzlichen Bytes sind darauf zurückzuführen, dass TIO Japt v2 noch nicht unterstützt).
Erläuterung
Nachschlagwerk
Jede Gruppe von 4 Zeichen in der Zeichenfolge (
...
hier dargestellt, um Platz zu sparen und weil sie eine Reihe von nicht druckbaren Zeichen enthält) ist die binäre Darstellung jedes Zeichens (0
für Leerzeichen,1
für Zeichen), wobei die Zeilenumbrüche entfernt und in die Basis 100 konvertiert werden.Beispiel
Der Code
quelle
Ruby , 366 Bytes
Probieren Sie es online!
Dies kann viel Golf gespielt werden, aber jetzt sind mir die Zeit und die Ideen ausgegangen. Es war schwieriger als ich zuerst dachte, nur um es zum Laufen zu bringen.
Wie es funktioniert:
Es ist nicht so schwer zu verstehen, ich erkläre nur, wie das Alphabet mit einem Beispiel codiert ist. Jede Zeile jedes Zeichens wird in binär und dann in base-36 konvertiert.
Im ersten Schritt werden alle nicht alphanumerischen Zeichen aus der Eingabezeichenfolge entfernt.
Dann erstelle ich eine Nachschlagetabelle für das endgültige Rendering, weil ich Zeile für Zeile drucken möchte.
Danach erstelle ich in der alphabetischen Zeile das binäre Muster der Buchstaben.
Schließlich ersetze ich 0 durch Leerzeichen und 1 durch Zeichen aus der Nachschlagetabelle.
Fühlen Sie sich frei, weiter Golf zu spielen. Ich weiß, dass dies 20 bis 30 Byte kürzer sein könnte (mit gsub anstelle von tr usw.), aber ich bin jetzt nicht daran interessiert, es sei denn, ich kann die Alphabet-Tabelle drastisch verkleinern.
quelle
Kohle ,
172164 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Stellen Sie die Ziffern dem vordefinierten Großbuchstaben voran.
Großschreibung der Eingabe und Herausfiltern aller nicht unterstützten Zeichen.
Schleife über die restlichen Zeichen.
Durchlaufen Sie jede Zeile und drucken Sie implizit jedes Ergebnis in einer eigenen Zeile.
Die komprimierte Zeichenfolge ist die große Ganzzahlkonstante von @ ovs, die in binäre Werte umgewandelt und umgekehrt wird. Es wird dann in 180 Teilzeichenfolgen mit 5 Zeichen aufgeteilt, und die relevante Teilzeichenfolge für das aktuelle Zeichen und die aktuelle Zeile wird dann durchgeschleift.
Wenn das Bit gesetzt wurde, wird das nächste Zeichen der gefilterten Eingabe zyklisch gedruckt, andernfalls wird ein Leerzeichen gedruckt.
Positionieren Sie den Cursor so, dass das nächste Zeichen gedruckt werden kann.
quelle
Perl 5 mit
-nlaF/[^A-Za-z0-9]+|/
247 BytesProbieren Sie es online!
Erläuterung
Zuerst wird eine Nachschlagetabelle unter
%l
Verwendung derpack
ed-Daten erstellt. Diese Daten sind eine 900-Bit-Binärzeichenfolge jedes Zeichens, gepackt als 25-Bit-Binärzeichenfolge (gespeichert als 113 Byte - nur 1 Byte mehr als Kohle!), Ähnlich wie bei einigen anderen AntwortenA
:was
0
für Raum und1
fürA
ist:und ohne die Zeilenumbrüche ist:
Sobald die Suche initialisiert ist, iterieren wir über jedes gültige Zeichen in
@F
(das mit Perls-a
utosplit-Option aufgefüllt wird), das an jedes der 5 Elemente der Liste@;
für jede Zeile im Array aus der Suche angehängt wird, und ersetzen alle1
s durchuc$F[$i++%@F]
das$i
th Zeichen (Modulo,@F
das die Länge von ist@F
) konvertiert inu
pperc
ase, und alle0
s mit$"
denen standardmäßig Leerzeichen verwendet werden. Sobald jeder Index in@;
für jedes Zeichen in ausgefüllt ist@F
, wirdsay
jede Zeile mit einer nachfolgenden neuen Zeile gedruckt.Hinweis : Die Zeichenfolge danach
unpack
enthält nicht druckbare Elemente, die mit der\xXX
Notation maskiert werden . Überprüfung für die Punktzahl von 247 .quelle
SOGL V0.12 ,
165164163 BytesProbieren Sie es hier aus!
Erläuterung:
quelle
JavaScript (Node.js) ,
365347 ByteDank @Scoots 1 Byte gespeichert
Gibt ein Array mit 5 Zeichenfolgen zurück. Enthält ein führendes Leerzeichen in jeder Zeile.
3736 Bytes gehen verloren, wenn alles in Großbuchstaben umgewandelt und abgeglichen wird[A-Z0-9]
: - /Probieren Sie es online!
Zeichenkodierung
Zeichen werden verkehrt herum codiert und unter Verwendung des ASCII-Bereichs [35..114] in eine benutzerdefinierte Basis 80 mit einem Versatz von 4 konvertiert .
Die Werte 35 bis 79 werden direkt dem entsprechenden ASCII-Zeichen zugeordnet, während die Werte 0 bis 34 den Zeichen 80 bis 114 zugeordnet werden . Dies ermöglicht die Dekodierung mit dem ASCII-Code modulo 80 .
Zum Beispiel wird 'F' wie folgt codiert
"RZW["
:Ausgehend von i = v = 4 wird es wie folgt in eine 25-Bit-Ganzzahl zurückdecodiert:
Im vollständigen Code verarbeiten wir tatsächlich ein unbeschränktes Stück () des codierten Streams, was bedeutet, dass wir wahrscheinlich mehr als vier Mal wiederholt werden . Dies ist kein Problem, da alle Iterationen mit i <0 nur den Dezimalteil des Ergebnisses betreffen, der von den unmittelbar folgenden bitweisen Operationen ohnehin ignoriert wird.
Probieren Sie es online!
quelle
toUpperCase
mit deri
Flagge in der RegEx ersetzen ?[A-Z\d]
stattdessen übereinstimmen[A-Z0-9]
?C (gcc) ,
792690 BytesProbieren Sie es online!
Schaffte es, diese unter 800 mit einer variablen Wiederverwendung zu drücken. Sie haben sich dafür entschieden, die Schriftart als Array vonint
s zu speichern , da das Speichern als eine lange Zeichenfolge eine attraktive Idee war. Viele der 8-Bit-Blöcke der Schriftart waren also keine nützlichen ASCII-Zeichen, die die Escape-Codes in Anspruch nahmen mehr Zeichen als dasint
Array.Bearbeiten: Wurde unter 700, nachdem ich schließlich zu einer Zeichenfolgencodierung gewechselt hatte - etwas inspiriert von vielen der anderen Antworten hier. Ich habe eine Base-92-Darstellung unter Verwendung (der meisten) der druckbaren ASCII-Zeichen zusammengeschustert. Die Darstellung enthält Backslashes, bei denen ein zusätzlicher Escape-Punkt erforderlich ist, der jedoch nur einmal in der Schriftart vorkommt.
Abgesehen davon ist nicht viel zu auffällig - die Eingabe (bestehend aus dem ersten Befehlszeilenargument) wird in ein Stack-Array kopiert, abzüglich aller Zeichen, die nicht in der Schriftart enthalten sind, und wobei Kleinbuchstaben durch deren ersetzt werden In Großbuchstaben wird das "Pixel" -Zeichen berechnet, mit dem jeder vollständige Buchstabe beginnt (die Verwendung
__builtin_popcount
hat einen schmerzhaft langen Namen, war aber immer noch besser als jede andere Methode, mit Bits zu rechnen, die ich mir vorstellen konnte), und dann wird zeilenweise gedruckt. Der Compiler gibt in Warnungen natürlich ein Mehrfaches der Programmlänge aus.Unten etwas entgolfet für Ihr Sehvergnügen:
quelle
Excel VBA, 816 Bytes
Eine anonyme VBE-Direktfensterfunktion, die Eingaben aus dem Bereich entgegennimmt
[A1]
und Ausgaben an die Konsole weiterleitet.Soweit mir bekannt ist, ist dies die erste VBA-Antwort, die die
base64
Komprimierung verwendet.Hinweis: Diese Antwort ist abhängig von der
Microsoft XML, v3.0
VBA-Referenz abBeispiel I / O
Ungolfed und erklärt
Der größte Teil dieser Lösung speichert die große Schrift als 64er Basiszeichenfolge. Dies geschieht, indem zuerst die Schrift in eine Binärschrift umgewandelt wird, wobei
1
ein Ein-Pixel und0
ein Aus-Pixel dargestellt werden. Beispielsweise0
wird dies als dargestelltMit diesem Ansatz kann die alphanumerische Zeichenfolge dann als dargestellt werden
Diese Segmente wurden verkettet und in MSXML Base 64 (Rendering) konvertiert
Die folgende Unterroutine nimmt dies, konvertiert zurück in binär und verwendet diese Referenz, um eine Ausgabezeichenfolge Zeile für Zeile zu erstellen, wobei zuerst die oberen 5 Pixel jedes Zeichens, dann die zweite Zeile usw. abgerufen werden, bis die Zeichenfolge erstellt ist .
Das Unterprogramm durchläuft dann die Ausgabezeichenfolge und ersetzt die Ein-Pixel durch Zeichen aus der Eingabezeichenfolge.
quelle
K (ngn / k) ,
230231 Bytes(+1 Byte nach einem Sprachwechsel impl)
Probieren Sie es online!
Dabei
a
handelt es sich um ein Zeichenfolgenliteral in Anführungszeichen, das die Schriftart codiert. K sieht Strings als Sequenzen von Bytes, daher ist ein Programm, das ein solches Literal enthält, gültig, kann aber nicht auf TIO ausgeführt werden, da sein HTML-Formular versucht, es als UTF-8 zu interpretieren und es durcheinander zu bringen.Die Byteanzahl wird wie folgt berechnet:
119 berichtet von TIO
-2 zum Benennen der Funktion
f:
-1 für den Platzhalter
a
2 für ein paar Anführungszeichen
""
113 für die Länge des Zeichenfolgenliteral,
a
das keine Zeichen enthält, die ein Escapezeichen erfordernquelle