Inspirowany przez Golfa alfabet ASCII , którego wyzwanie jest (prawie) odwrotne.
Zadanie:
Weź ciąg tekstu ASCII-art i wyślij jego treść jako zwykły tekst ASCII.
Wkład:
Ciąg tekstu ASCII-art.
Dane wejściowe będą zawierać tylko wystąpienia znaku ASCII #
, spacje oraz 4 lub 5 nowych linii (końcowy nowy znak jest opcjonalny). Wszystkie linie mają tę samą długość. (Oznacza to, że ostatnia litera ASCII-art jest wypełniona końcowymi spacjami). Możesz użyć innego drukowalnego znaku ASCII zamiast#
na wejściu, jeśli chcesz.
Dane wejściowe będą zawierać litery A-Z
ASCII-art i spacje ASCII-art (blok 5 x 5 białych znaków). Bez interpunkcji. Jest tylko jeden wiersz tekstu ASCII-art (5 wierszy rzeczywistych). Nie będzie żadnych spacji ani wiodących przestrzeni ASCII-art, ani sąsiadujących przestrzeni ASCII-art.
Rozmiar liter to 5 x 5 znaków. Między każdą literą jest spacja 1x5. Odstęp między słowami to blok białych znaków 5x5 (+ 1x5 spacji po każdej stronie, ponieważ jest to tylko kolejna litera). Na końcu lub na początku nie będzie miejsca 1x5, tylko między literami ASCII-art.
Wydajność:
Ciąg zawierający tekst jako znaki ASCII A-Z
+ spacje. Dane wyjściowe mogą być również pisane małymi literami, jeśli jest to w jakiś sposób łatwiejsze dla twojego rozwiązania. Dozwolone są również przypadki mieszane.
Litery ASCII-art:
### #### ### #### ##### ##### ### # # ##### ##### # # # # #
# # # # # # # # # # # # # # # # # # ## ##
##### #### # # # #### #### # ## ##### # # ### # # # #
# # # # # # # # # # # # # # # # # # # # # #
# # #### ### #### ##### # ### # # ##### ### # # ##### # #
# # ### #### ### #### ### ##### # # # # # # # # # # #####
## # # # # # # # # # # # # # # # # # # # # # #
# # # # # #### # # #### ### # # # # # # # # # # #
# ## # # # # # # # # # # # # # ## ## # # # #
# # ### # ## # # # ### # ### # # # # # # #####
Przestrzeń:
|
| A 5x5 square of spaces.
| (Padded with |s to make it appear in this post.)
|
|
Przykłady:
Wkład:
# # ##### # # ### # # ### #### # ####
# # # # # # # # # # # # # # # #
##### #### # # # # # # # # # #### # # #
# # # # # # # ## ## # # # # # # #
# # ##### ##### ##### ### # # ### # # ##### ####
Wydajność: HELLO WORLD
Wkład:
### ### ### ##### #####
# # # # # # #
##### ### # # #
# # # # # # #
# # ### ### ##### #####
Wydajność: ASCII
Wkład:
#### #### ### ###
# # # # # # #
#### #### # # ##
# # # # # #
# # ### ###
Wydajność: PPCG
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Odpowiedzi:
Galaretka ,
50 4442 bajtówWypróbuj online! (zauważ, że argument nie wymaga wiodącego nowego wiersza, ale ponieważ początkowe i końcowe nowe wiersze nie mają żadnego efektu, umieściłem jeden, aby łańcuch wielowierszowy był bardziej czytelny dla człowieka)
Wyniki są zróżnicowane (jak dopuszcza OP w komentarzu ).
W jaki sposób?
Dzieli na nowe linie, transponuje i łączy ze sobą podsegmenty (do) sześciu, aby uzyskać reprezentacje znaków i odwraca każdą (równoważąc późniejszą konwersję podstawową dla końcowego znaku o długości 25 do wszystkich pozostałych o długości 30). Następnie mapuje
'#'
i' '
jeden i zero, odpowiednio wykorzystując fakt, że'#'
ma dziwny porządkowa natomiast' '
ma jeszcze jedną. Czyta każdy tak, jakby to była podstawowa liczba siedem. Skutecznie bierze modulo 81 każdego z nich (w celu uzyskania 27 unikalnych wartości dla 27 możliwych przypadków), a na koniec indeksuje do „magicznego ciągu” z poprawnymi znakami o właściwych indeksach (indeksowanie modulo jest stosowane z ciągiem magicznym o długości 81, aby zapisać 2 bajty).Oto „magiczny ciąg”, który utworzyłem wraz z (bez rozróżniania wielkości liter) wzorem wyrażenia regularnego, który musiał dopasować (dodałem „ed”, aby uzyskać długość 81):
W związku z tym można go skompresować, wyszukując jedenaście podtekstów jako słów w słowniku Jelly (większość z nich używa domyślnej spacji wiodącej):
co skutkuje skompresowanym sznurkiem galaretki,
“¥ŒƲVĊ⁾|W£⁼³ƭÇuʋụzḢĖ0ḢẆẠØsĠỌỊ»
Reszta kodu działa w następujący sposób:
źródło
Python 2 ,
405335234182171 bajtówWypróbuj online!
Wreszcie krótszy niż JS
źródło
[0,2,3,7,...]
and' UBGOTA...
split it, and use some sort of mapping.0:' ',2:'U',3:'V'...
looks so long,,, there are so many:'',
. (I know you had something similar in the original post, but with very long numbers.JavaScript (ES6),
204186184182 bytesSaved 18 bytes thanks to Neil
Saved 2 bytes thanks to ETHproductions
Saved 2 bytes thanks to YairRand
Breakdown:
162144142140 bytes of codeDemo
Show code snippet
źródło
(a=s.split`\n`)[0].replace(/......?/g,
withsubstr(n,5)
and without thejoin
of course.c=>0|c>' '
, and another withp+='0b'+...
\n
in input is invalid. However, I think you can use template literal with actual newline as input, just like you are doing in thesplit
method.\n
in a string literal at the call site in the code is okay, because the actual string that is passed to the function includes only the newline character, not both\` and
n. Passing a string that contains
\` andn
as separate adjacent characters would not be okay.Bash + ImageMagick + Tesseract, 161 bytes
I wanted to try the approach suggested by @stewie-griffin and went for bash + ImageMagick (to convert a string to an image) and Tesseract (to do the OCR). Here's my code, which works for the 'HELLO WORLD' testcase, but fails the other ones. Maybe some tweaking to the parameters (font, font size, kerning, spacing) helps.
Just copy-paste the ascii art into the commandline after running the command. Finish your input by pressing ^d.
Current output for the test cases:
źródło
Scala,
184181 bytesA magic string + modulo solution based on
hashCode
:)Try online (Scalafiddle)
More readable :
Explanations
'#'
or' '
)% 106 % 79 % 47
) are applied to associate a number ∈[0; 47[
for each ASCII character (see explanations below)How to get the magic string ?
First, I represented all letters like this :
Then, I created an alphabet containing ASCII representations of all characters :
Example :
becomes
For each letter, an absolute hashcode was computed (all hashcodes are distinct) :
Then I tried to decrease each code, but always respecting the fact that each code must be unique (the list grouped by the code must have 27 elements, 1 for each letter). So I tried the first 200 modulus :
I found
106
as the first modulo to be applied :I repeated the previous steps until the smallest modulo. I found :
Note : The last modulo I chose (
47
) is not the smallest here :%106%79%47%44
(13 characters instead of%106%79%47
= 10 characters). So in bytes, the code should have had the same size as the one I gotNext, I applied the consecutive modulus (
% 79 % 47
) to the lastcodes
, to get the definitive codes associated to each letter :Finally, to construct the magic string :
Example : The letter
A
above is associated to 46 (380997542 % 106 % 79 % 47
), and the 46th element of the magic string is A :)Test cases
HELLO WORLD :
ASCII :
PPCG :
Edits
.
beforemap
,toArray
andmkString
źródło
PHP, 294 Bytes
Try it online!
Expanded
Converting the Input to an image format
@Stevie Griffin search a solution to get this from an image. I think he want not really the image format I have use.
SVG can contains HTML parts if then included in a foreignObject. So I put a pre Element in a SVG.
Image Output
Solving from Image Changes
SVG is machine readable so after saving the SVG as "i.svg" you need only replace
$_GET[0]
withpreg_replace("#(^.*e>)(.*)(</p.*$)#s","$2",join(file("i.svg")))
in the way with normal input + 55 Bytesźródło
Powershell,
152146 bytesTest script:
Output:
Note:
$t|% s*g $c,5|% t*y|%{$s+=$s+$_}
is shortcut for$t.substring($c,5).toCharArray()|%{$s+=$s+$_}
("abcd","efgh").substring(1,2)
returns the array("bc","de")
("bc","de").toCharArray()
returns the array('b','c','d','e')
źródło
C,
225209 bytesThanks to @ceilingcat for saving 16 bytes!
Try it online!
źródło