Inspiriert von Golf me ein ASCII-Alphabet , von dem diese Herausforderung (fast) eine direkte Umkehrung ist.
Aufgabe:
Nehmen Sie eine ASCII-Zeichenfolge und geben Sie den Textinhalt als normalen ASCII-Text aus.
Eingang:
Zeichenfolge aus ASCII-Kunsttext.
Die Eingabe enthält nur ASCII-Zeichen #
, Leerzeichen und 4 oder 5 Zeilenumbrüche (ein abschließender Zeilenumbruch ist optional). Alle Zeilen haben die gleiche Länge. (Das heißt, der letzte ASCII-Zeichenbuchstabe wird mit nachgestellten Leerzeichen aufgefüllt.) Sie können anstelle #
der Eingabe ein anderes druckbares ASCII-Zeichen verwenden, wenn Sie dies wünschen.
Die Eingabe enthält ASCII-Kunst-Buchstaben A-Z
und ASCII-Kunst-Leerzeichen (ein 5x5-Block mit Leerzeichen). Keine Interpunktion. Es gibt nur eine Zeile ASCII-Text (5 tatsächliche Zeilen). Es gibt keine nachgestellten oder führenden ASCII-Zeichenbereiche und keine benachbarten ASCII-Zeichenbereiche.
Die Buchstabengröße beträgt 5x5 Zeichen. Zwischen jedem Buchstaben steht ein Leerzeichen von 1x5. Das Leerzeichen zwischen den Wörtern ist ein 5x5-Whitespace-Block (+ 1x5-Leerzeichen auf jeder Seite, da es sich nur um einen anderen Buchstaben handelt). Es wird am Ende oder am Anfang kein 1x5-Leerzeichen geben, nur zwischen ASCII-Zeichen.
Ausgabe:
Zeichenfolge, die den Text als ASCII-Zeichen A-Z
+ Leerzeichen enthält. Die Ausgabe kann auch in Kleinbuchstaben erfolgen, wenn dies für Ihre Lösung einfacher ist. Ein gemischter Fall ist ebenfalls zulässig.
Die ASCII-Art Buchstaben:
### #### ### #### ##### ##### ### # # ##### ##### # # # # #
# # # # # # # # # # # # # # # # # # ## ##
##### #### # # # #### #### # ## ##### # # ### # # # #
# # # # # # # # # # # # # # # # # # # # # #
# # #### ### #### ##### # ### # # ##### ### # # ##### # #
# # ### #### ### #### ### ##### # # # # # # # # # # #####
## # # # # # # # # # # # # # # # # # # # # # #
# # # # # #### # # #### ### # # # # # # # # # # #
# ## # # # # # # # # # # # # # ## ## # # # #
# # ### # ## # # # ### # ### # # # # # # #####
Der Raum:
|
| A 5x5 square of spaces.
| (Padded with |s to make it appear in this post.)
|
|
Beispiele:
Eingang:
# # ##### # # ### # # ### #### # ####
# # # # # # # # # # # # # # # #
##### #### # # # # # # # # # #### # # #
# # # # # # # ## ## # # # # # # #
# # ##### ##### ##### ### # # ### # # ##### ####
Ausgabe: HELLO WORLD
Eingang:
### ### ### ##### #####
# # # # # # #
##### ### # # #
# # # # # # #
# # ### ### ##### #####
Ausgabe: ASCII
Eingang:
#### #### ### ###
# # # # # # #
#### #### # # ##
# # # # # #
# # ### ###
Ausgabe: PPCG
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Antworten:
Jelly ,
50 4442 BytesProbieren Sie es online! (Beachten Sie, dass für das Argument kein Zeilenumbruch erforderlich ist. Da Zeilenumbrüche am Anfang und am Ende keine Auswirkungen haben, habe ich einen eingefügt, um die Lesbarkeit der mehrzeiligen Zeichenfolge zu verbessern.)
Die Ergebnisse sind gemischte Groß- und Kleinschreibung (wie vom OP in einem Kommentar zugelassen ).
Wie?
Teilt neue Zeilen, transponiert und fügt Unterschichten von (bis zu) sechs zusammen, um die Zeichendarstellungen zu erhalten, und kehrt jede um (wobei die spätere Basisumwandlung für das letzte Zeichen der Länge 25 allen anderen Zeichen der Länge 30 gleichgesetzt wird). Dann ordnet
'#'
und' '
auf eins bzw. null zu, wobei die Tatsache verwendet wird, dass'#'
eine ungerade Ordnungszahl vorliegt, während' '
eine gerade Eins vorliegt . Liest jedes als wäre es eine Zahl zur Basis sieben. Nimmt effektiv Modulo 81 von jedem (um 27 eindeutige Werte für die 27 möglichen Fälle zu erhalten) und indiziert schließlich eine "magische Zeichenfolge" mit den richtigen Zeichen an den richtigen Indizes (Modulo-Indizierung wird mit einer magischen Zeichenfolge der Länge 81 verwendet, um zu speichern 2 Bytes).Hier ist die "magische Zeichenfolge", die ich zusammen mit einem Regex-Muster (ohne Berücksichtigung der Groß- und Kleinschreibung) erstellt habe, das übereinstimmen musste (ich habe "ed" hinzugefügt, damit es die Länge 81 hat):
Als solches kann es komprimiert werden, indem elf Sub-Slices als Wörter in Jellys Wörterbuch nachgeschlagen werden (die meisten verwenden die Standardeinstellung für das führende Leerzeichen):
was zu der Jelly komprimierten Saite führt,
“¥ŒƲVĊ⁾|W£⁼³ƭÇuʋụzḢĖ0ḢẆẠØsĠỌỊ»
Der Rest des Codes funktioniert wie folgt:
quelle
Python 2 ,
405335234182171 BytesProbieren Sie es online!
Endlich kürzer als JS
quelle
[0,2,3,7,...]
und' UBGOTA...
teilen Sie es, und eine Art von Mapping zu verwenden.0:' ',2:'U',3:'V'...
sieht so lang aus ,,, es gibt so viele:'',
. (Ich weiß, Sie hatten etwas Ähnliches im ursprünglichen Beitrag, aber mit sehr langen Zahlen.JavaScript (ES6),
204186184182 Byte18 Bytes dank Neil
gespeichert 2 Bytes dank ETHproductions
gespeichert 2 Bytes dank YairRand gespeichert
Nervenzusammenbruch:
162144142140 Byte CodeDemo
Code-Snippet anzeigen
quelle
(a=s.split`\n`)[0].replace(/......?/g,
mitsubstr(n,5)
und ohnejoin
natürlich eine ganze Reihe von Bytes speichern .c=>0|c>' '
und ein weiteres mitp+='0b'+...
\n
Eingabe ungültig. Ich denke jedoch, Sie können Vorlagenliteral mit tatsächlichen Zeilenumbrüchen als Eingabe verwenden, genau wie Sie es in dersplit
Methode tun .\n
eines Zeichenfolgenliteral an der Aufrufstelle im Code ist in Ordnung, da die tatsächliche Zeichenfolge, die an die Funktion übergeben wird, nur das Zeilenvorschubzeichen enthält, nicht sowohl\` and
n. Passing a string that contains
\ 'als auchn
als separate benachbarte Zeichen.Bash + ImageMagick + Tesseract , 161 Bytes
Ich wollte den von @ stewie-griffin vorgeschlagenen Ansatz ausprobieren und entschied mich für bash + ImageMagick (um einen String in ein Bild umzuwandeln) und Tesseract (um die OCR durchzuführen). Hier ist mein Code, der für den 'HELLO WORLD'-Testfall funktioniert, die anderen jedoch nicht. Vielleicht hilft eine Änderung der Parameter (Schriftart, Schriftgröße, Kerning, Abstand).
Kopieren Sie einfach die ASCII-Grafik in die Befehlszeile, nachdem Sie den Befehl ausgeführt haben. Beenden Sie Ihre Eingabe mit ^ d.
Stromausgang für die Testfälle:
quelle
Scala,
184181 BytesEine magische String + Modulo Lösung basierend auf
hashCode
:)Online versuchen (Scalafiddle)
Besser lesbar:
Erklärungen
'#'
oder enthalten' '
).% 106 % 79 % 47
) angewendet,[0; 47[
um jedem ASCII-Zeichen eine Zahl ∈ zuzuordnen (siehe Erläuterungen unten).Wie bekomme ich die magische Schnur?
Zuerst habe ich alle Buchstaben so dargestellt:
Dann habe ich ein Alphabet mit ASCII-Darstellungen aller Zeichen erstellt:
Beispiel
wird
Für jeden Buchstaben wurde ein absoluter Hashcode berechnet (alle Hashcodes sind unterschiedlich):
Dann habe ich versucht, jeden Code zu verringern, aber dabei immer darauf geachtet, dass jeder Code eindeutig sein muss (die durch den Code gruppierte Liste muss 27 Elemente enthalten, 1 für jeden Buchstaben). Also habe ich den ersten 200 Modul ausprobiert:
Ich fand
106
als erstes Modulo, das angewendet wurde:Ich habe die vorherigen Schritte bis zum kleinsten Modulo wiederholt. Ich fand :
Hinweis: Das zuletzt ausgewählte Modulo (
47
) ist hier nicht das kleinste:%106%79%47%44
(13 Zeichen statt%106%79%47
= 10 Zeichen). In Bytes hätte der Code also die gleiche Größe haben müssen wie der, den ich bekommen habeAls nächstes habe ich den konsekutiven Modul (
% 79 % 47
) auf den letzten angewendetcodes
, um die definitiven Codes zu erhalten, die jedem Buchstaben zugeordnet sind:Zum Schluss, um die magische Kette zu konstruieren:
Beispiel: Der Buchstabe
A
oben ist mit 46 (380997542 % 106 % 79 % 47
) verknüpft , und das 46. Element der magischen Zeichenfolge ist A :)Testfälle
HALLO WELT :
ASCII:
PPCG:
Bearbeitungen
.
vormap
,toArray
undmkString
quelle
PHP, 294 Bytes
Probieren Sie es online!
Erweitert
Konvertieren der Eingabe in ein Bildformat
@Stevie Griffin sucht nach einer Lösung, um dies von einem Bild zu erhalten. Ich denke, er möchte nicht wirklich das Bildformat, das ich verwendet habe.
SVG kann HTML-Teile enthalten, wenn diese in einem foreignObject enthalten sind. Also habe ich ein Pre-Element in eine SVG eingefügt.
Bildausgabe
Lösen von Bildänderungen
SVG ist maschinenlesbar so nach der SVG als „i.svg“ Speichern müssen Sie ersetzen nur
$_GET[0]
mitpreg_replace("#(^.*e>)(.*)(</p.*$)#s","$2",join(file("i.svg")))
der Art und Weise mit dem normalen Eingang + 55 Bytesquelle
Powershell,
152146 BytesTestskript:
Ausgabe:
Hinweis:
$t|% s*g $c,5|% t*y|%{$s+=$s+$_}
ist Abkürzung für$t.substring($c,5).toCharArray()|%{$s+=$s+$_}
("abcd","efgh").substring(1,2)
Gibt das Array zurück("bc","de")
("bc","de").toCharArray()
Gibt das Array zurück('b','c','d','e')
quelle
C,
225209 BytesVielen Dank an @ceilingcat für das Speichern von 16 Bytes!
Probieren Sie es online!
quelle