Terinspirasi oleh Golf saya alfabet ASCII , yang tantangannya (hampir) terbalik langsung.
Tugas:
Ambil string teks ASCII-art dan output konten teks sebagai teks ASCII biasa.
Memasukkan:
String teks ASCII-art.
Input hanya akan berisi instance karakter ASCII #
, spasi, dan 4 atau 5 baris baru (baris tambahan tambahan opsional). Semua garis memiliki panjang yang sama. (Yaitu, huruf ASCII-art terakhir diisi dengan spasi tambahan.) Anda dapat menggunakan beberapa karakter ASCII yang dapat dicetak lainnya alih-alih#
dalam input jika diinginkan.
Input akan berisi huruf A-Z
ASCII-art dan spasi ASCII-art (blok spasi 5x5). Tidak ada tanda baca. Hanya ada satu baris teks ASCII-art (5 baris aktual). Tidak akan ada jejak atau ruang seni ASCII terkemuka, juga tidak akan ada ruang seni ASCII yang berdekatan.
Ukuran huruf adalah 5x5 karakter. Ada spasi 1x5 antara setiap huruf. Spasi antar kata adalah blok spasi 5x5 (spasi + 1x5 di setiap sisi, karena itu hanya huruf lain). Tidak akan ada ruang 1x5 di akhir atau di awal, hanya di antara huruf ASCII-art.
Keluaran:
String yang berisi teks sebagai karakter ASCII A-Z
+ spasi. Outputnya bisa dalam huruf kecil juga, jika itu entah bagaimana lebih mudah untuk solusi Anda. Kasing campuran juga diperbolehkan.
Surat-surat ASCII-art:
### #### ### #### ##### ##### ### # # ##### ##### # # # # #
# # # # # # # # # # # # # # # # # # ## ##
##### #### # # # #### #### # ## ##### # # ### # # # #
# # # # # # # # # # # # # # # # # # # # # #
# # #### ### #### ##### # ### # # ##### ### # # ##### # #
# # ### #### ### #### ### ##### # # # # # # # # # # #####
## # # # # # # # # # # # # # # # # # # # # # #
# # # # # #### # # #### ### # # # # # # # # # # #
# ## # # # # # # # # # # # # # ## ## # # # #
# # ### # ## # # # ### # ### # # # # # # #####
Ruang angkasa:
|
| A 5x5 square of spaces.
| (Padded with |s to make it appear in this post.)
|
|
Contoh:
Memasukkan:
# # ##### # # ### # # ### #### # ####
# # # # # # # # # # # # # # # #
##### #### # # # # # # # # # #### # # #
# # # # # # # ## ## # # # # # # #
# # ##### ##### ##### ### # # ### # # ##### ####
Keluaran: HELLO WORLD
Memasukkan:
### ### ### ##### #####
# # # # # # #
##### ### # # #
# # # # # # #
# # ### ### ##### #####
Keluaran: ASCII
Memasukkan:
#### #### ### ###
# # # # # # #
#### #### # # ##
# # # # # #
# # ### ###
Keluaran: PPCG
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jawaban:
Jelly ,
50 4442 byteCobalah online! (perhatikan argumen tidak memerlukan baris baru, tetapi karena memimpin dan mengikuti baris baru tidak berpengaruh, saya memasukkan satu untuk membuat string multiline lebih mudah dibaca oleh manusia)
Hasil adalah kasus campuran (sebagaimana diizinkan oleh OP dalam komentar ).
Bagaimana?
Pisahkan pada baris baru, transpos, dan bergabung bersama sub-irisan dari (hingga) enam bersama-sama untuk mendapatkan representasi karakter dan membalikkan masing-masing (menyamakan konversi basis kemudian untuk karakter akhir dari panjang 25 ke yang lain dari panjang 30). Kemudian peta
'#'
dan' '
ke satu dan nol masing-masing menggunakan fakta yang'#'
memiliki ordinal aneh sementara' '
memiliki satu genap. Membaca masing-masing seolah-olah itu adalah angka tujuh dasar. Secara efektif mengambil modulo 81 dari masing-masing (untuk menghasilkan 27 nilai unik untuk 27 kasus yang mungkin), dan akhirnya indeks menjadi "string ajaib" dengan karakter yang benar pada indeks yang benar (pengindeksan modulo digunakan dengan string ajaib panjang 81 untuk menyimpan 2 byte).Berikut adalah "string ajaib" yang saya buat bersama dengan pola regex (case-insensitive) yang diperlukan untuk mencocokkan (saya menambahkan "ed" untuk membuatnya panjang 81):
Karena itu dapat dikompresi, cari sebelas sub-irisan sebagai kata-kata dalam kamus Jelly (sebagian besar menggunakan standar ruang terdepan):
yang menghasilkan string terkompresi Jelly,
“¥ŒƲVĊ⁾|W£⁼³ƭÇuʋụzḢĖ0ḢẆẠØsĠỌỊ»
Sisa kode berfungsi sebagai berikut:
sumber
Python 2 ,
405335234182171 byteCobalah online!
Akhirnya lebih pendek dari JS
sumber
[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
sumber
(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:
sumber
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
sumber
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 Bytessumber
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')
sumber
C,
225209 bytesThanks to @ceilingcat for saving 16 bytes!
Try it online!
sumber