Golf cho tôi một bảng chữ cái ASCII


13

Bạn không thấy rằng đọc văn bản đơn giản là không đủ hấp dẫn? Cố gắng của chúng tôi

#####  ###   ###  ##### #####       ##### ##### #   # #####   #
#   # #     #   #   #     #           #   #      # #    #     #
#####  ###  #       #     #           #   ####    #     #     #
#   #     # #   #   #     #           #   #      # #    #      
#   #  ###   ###  ##### #####         #   ##### #   #   #     #

Lạ mắt hơn nhiều phải không? Nhưng nó khá dài để viết bằng tay, thật tuyệt vời nếu ai đó làm một chương trình làm điều đó cho tôi!

Nhiệm vụ của bạn , nếu bạn tình nguyện giúp tôi, sẽ là viết một chương trình hoặc một hàm [a-zA-Z\s\n]chỉ chứa một chuỗi , và xuất (hoặc trả lại) cách viết ascii của nó!

Bạn phải sử dụng bảng chữ cái sau để định dạng đầu ra của mình:

##### ####   ###  ####  ##### #####  ###  #   # ##### ##### #   # #     #   #
#   # #   # #   # #   # #     #     #     #   #   #     #   #  #  #     ## ##
##### ####  #     #   # ####  ####  #  ## #####   #     #   ###   #     # # #
#   # #   # #   # #   # #     #     #   # #   #   #   # #   # #   #     #   #
#   # ####   ###  ####  ##### #      ###  #   # ##### ###   #  #  ##### #   #

#   #  ###  ####   ###  ####   ###  ##### #   # #   # #   # #   # #   # #####
##  # #   # #   # #   # #   # #       #   #   # #   # #   #  # #   # #     #
# # # #   # ####  #   # ####   ###    #   #   #  # #  # # #   #     #     #
#  ## #   # #     #  ## ##        #   #   #   #  # #  ## ##  # #    #    #
#   #  ###  #      #### # #    ###    #    ###    #   #   # #   #   #   #####

Vũ trụ:

     |
     | it's a 5x5 square of spaces
     | but had to pad it with |s to make it appear in this post
     |
     |

Vì đây là phông chữ có chiều rộng cố định, ký tự khoảng trắng cũng được bao quanh bởi các khoảng trắng, dẫn đến khoảng cách 7 chiều rộng giữa hai chữ cái.

a b
     1234567       -- these numbers are just for the example, you don't have to output them
#####       #### 
#   #       #   #
#####       ####
#   #       #   #
#   #       ####

a  b
     1234567890123
#####             #### 
#   #             #   #
#####             ####
#   #             #   #
#   #             ####

Khi bạn gặp một dòng mới, như trong đầu vào

ascii
text

Chỉ cần đảm bảo tách hai khối văn bản bằng ít nhất một dòng trống

#####  ###   ###  ##### ##### 
#   # #     #   #   #     #   
#####  ###  #       #     #    
#   #     # #   #   #     #   
#   #  ###   ###  ##### ##### 

##### ##### #   # #####
  #   #      # #    #  
  #   ####    #     #  
  #   #      # #    #  
  #   ##### #   #   #  

Ngoài ra, bạn được phép thay thế #s bằng bất kỳ ký tự nào khác miễn là nó nằm trong phạm vi ASCII có thể in và không phải là khoảng trắng. Ví dụ, bạn có thể sử dụng As cho chữ A, Bcho chữ B và vv.

Vì đây là (và hơn thế nữa ), bài nộp chiến thắng sẽ là bài giải quyết thách thức này trong ít byte nhất có thể, hãy vui vẻ!


Là không gian 5 char cũng được bao quanh bởi các không gian đơn, hay đây là một phông chữ có chiều rộng thay đổi?
Adám

@ Adám bạn nói đúng, nó được bao quanh bởi các không gian, tôi sẽ cập nhật về điểm này
Katenkyo

Bằng cách nào đó chúng ta có thể truy xuất bảng chữ cái pixel làm đầu vào hay chúng ta phải xây dựng các ký tự đó trong đoạn mã được xếp hạng của mình?
Chỉ huy Byte

@ByteCommander Một phần (lớn) của thử thách này là về nén chuỗi, bạn phải tìm cách tốt nhất để nén bảng chữ cái này trong mã của mình, trong khi vẫn có thể truy xuất nó và sử dụng nó :). Vì vậy, có, nó được bao gồm trong mã đánh gôn của bạn và không thể được nhập vào chương trình của bạn
Katenkyo

@Katenkyo Aha, được thôi. Cảm ơn bạn đã làm rõ.
Chỉ huy Byte

Câu trả lời:


6

Python 3, 375 byte

f=lambda i:"\n\n".join("\n".join(map(" ".join,zip(*[[x.replace("0"," ")[a*5:a*5+5]for a in range(5)]for x in[["{:025b}".format(int(c,36))for c in'0 JPCFL J2UKE 92Y3Y J2KAM JOMCF JOMC0 92B72 AYP81 JFM3J JFMHO AZC7M AB6ZJ B5I5T B43N5 92YWE J2UJ4 92YY7 J2UQC 926UM JFM2S AYE5Q AY8G4 AYHKH AT6Q9 AT6KK AWU7'.split()][x!=" "and ord(x)-64]for x in j.upper()]])))for j in i.split("\n"))

Xem mã này chạy trên ideone.com.

Cùng một mã, nhưng bằng cách nào đó độc đáo thụt lề, định dạng và nhận xét:

f = lambda i: \

    # join multiline strings together using an empty line as separator:
    "\n\n".join(

        # join the string lines of one big output line together: 
        "\n".join(

            # join the corresponding rows of the letters together using " ":
            map(" ".join, zip(*

                # make a list (output line) of list (output characters) 
                # of strings (single character's rows):
                [

                    # replace 0s with spaces and split the bit strings into
                    # chunks of 5 characters - the rows of each letter:
                    [x.replace("0", " ")[a*5 : a*5+5] for a in range(5)]

                    for x in [

                        # split the space separated character codes and
                        # convert them from base 36 to 
                        # base 2 strings of length 25:
                        ["{:025b}".format(int(c, 36)) for c in

                         # the encoded font data (reformatted):
                         '0 JPCFL J2UKE 92Y3Y J2KAM JOMCF JOMC0 92B72 '
                         'AYP81 JFM3J JFMHO AZC7M AB6ZJ B5I5T B43N5 92YWE '
                         'J2UJ4 92YY7 J2UQC 926UM JFM2S AYE5Q AY8G4 AYHKH '
                         'AT6Q9 AT6KK AWU7'.split()]

                        # select element 0 if we want a space, else find
                        # out the index from the ASCII code of the letter:
                        [x != " " and ord(x) - 64] 

                        # repeat for every character in the input line:
                        for x in j.upper()
                    ]
                ]
            ))

        # repeat for every line in the input
        ) for j in i.split("\n")
    )

Tôi cũng đã quyết định sử dụng mã hóa cơ sở 36 vì đó là int()hỗ trợ nguyên bản tích hợp cao nhất của Python . Đây là một đoạn mã Python 3 ngắn mà tôi đã viết (chưa được chỉnh sửa) để chuyển đổi các định nghĩa phông chữ như trong câu hỏi thành mã 36 cơ sở: Trình chuyển đổi của tôi trên ideone.com

Kết quả bao gồm ký tự 1là pixel được kích hoạt và khoảng trắng là pixel bị tắt. Dưới đây là một ví dụ duy nhất:

Đầu vào (ngắt dòng như \n):

Hello World
Python rocks

Đầu ra:

1   1 11111 1     1      111        1   1  111  1111  1     1111 
1   1 1     1     1     1   1       1   1 1   1 1   1 1     1   1
11111 1111  1     1     1   1       1 1 1 1   1 1111  1     1   1
1   1 1     1     1     1   1       11 11 1   1 11    1     1   1
1   1 11111 11111 11111  111        1   1  111  1 1   11111 1111 

1111  1   1 11111 1   1  111  1   1       1111   111   111  1   1  111 
1   1  1 1    1   1   1 1   1 11  1       1   1 1   1 1   1 1  1  1    
1111    1     1   11111 1   1 1 1 1       1111  1   1 1     111    111 
1       1     1   1   1 1   1 1  11       11    1   1 1   1 1 1       1
1       1     1   1   1  111  1   1       1 1    111   111  1  1   111 

4

Clojure, 552 byte

(defn t[s](print(reduce #(str %1"\n"%2)(map #(apply str %)(let[a[:jpcfl :j2uke :92y3y :j2kam :jomcf :jomc0 :92b72 :ayp81 :jfm3j :jfmho :azc7m :ab6zj :b5i5t :b43n5 :92ywe :j2uj4 :92yy7 :j2uqc :926um :jfm2s :aye5q :ay8g4 :ayhkh :at6q9 :at6kk :je7mn :0]](map(fn[o](map #(str(.replace %"0"" ")"\n")(map(fn[w](reduce #(str %1(.substring %2 w(+ w 5))"0")""(map #(str(apply str(repeat(- 25(count %))"0"))%)(map #(Integer/toString(Integer/valueOf(name %)36)2)(map a(map #(if(= % \space)26(-(int %)97))(.toLowerCase o)))))))(range 0 25 5))))(.split s"\n")))))))

Mỗi chữ cái trong ascii được biểu diễn dưới dạng một chuỗi nhị phân có # - 1, dấu cách - 0. Sau đó, nó được chuyển đổi thành cơ sở 36 để chỉ mất 5 ký tự để lưu trữ + ":" để Clojure biết rằng nó nên được coi là biểu tượng. Sau đó, đầu vào được phân chia bằng ký hiệu dòng mới và với mỗi dòng, chúng tôi chuyển đổi một chữ cái trong 36 cơ sở trở lại cơ sở nhị phân và nhận các ký hiệu [0: 5] đầu tiên thêm các ký hiệu dòng mới, nhận các ký hiệu [5:10] tiếp theo, v.v.

Bạn có thể thấy nó chạy ở đây - https://ideone.com/y99ST5


1

SOGL , 137 byte (không cạnh tranh)

 °f`7-π⅛χ%sΤ↕ņLRΕ⅓9׀b∫rr(¶æKGTΧ3;■ΦΤg¼⁰¡Νg‽}○eΧ²Y∫Οαν⌡l′}¾(8╔ <%╤∙i.d↔ū∫Æo┌jyŗ▲δ⁶=╗$↑yōΛ3h¼╔◄┼)‘’«n.{5{ø}¹,uR{8+:Ahwha’#=?X’«@*}┼L@*┼}pøO

Giải trình:

...‘’«n.{5{ø}¹,uR{8+:Ahwha’#=?X’«@*}┼L@*┼}pøO
...‘                                           push a string with the letter data                            ["..."]
    ’«n                                        split in lengths of 25                                        [[".", ".", ".",...]]
       .{                                      repeat input times                                            [[".", ".", ".",...]]
         5{ø}                                  push 5 empty strings                                          [[".", ".", ".",...], "", "", "", "", ""]
             ¹                                 wrap those in an array                                        [[".", ".", ".",...], ["", "", "", "", ""]]
              ,                                get a string input                                            [[".", ".", ".",...], ["", "", "", "", ""], "Hello World"]
               u                               lowercase it                                                  [[".", ".", ".",...], ["", "", "", "", ""], "hello world"]
                R{                       }     itirate over the ordinals of the string                       [[".", ".", ".",...], ["", "", "", "", ""], 104]
                  8+                           add 8 to the ordinal                                          [[".", ".", ".",...], ["", "", "", "", ""], 112]
                    :A                         save on variable A                                            [[".", ".", ".",...], ["", "", "", "", ""], 112]
                      h                        swap 2 items one below the stack                              [["", "", "", "", ""], [".", ".", ".",...], 112]
                       w                       get the ord+8th item of the letter data array (modulo length) [["", "", "", "", ""], [".", ".", ".",...], "-----  -    -    -  -----"]
                        h                      swap 2 items one below the stack                              [[".", ".", ".",...], ["", "", "", "", ""], "-----  -    -    -  -----"]
                         a                     load the variable A                                           [[".", ".", ".",...], ["", "", "", "", ""], "-----  -    -    -  -----", 112]
                          ’#=?     }           if equals to 40 then                                          [[".", ".", ".",...], ["", "", "", "", ""], "----- -     -     - -----"] (temporalily switching to space case; it incorrectly picks "N" for space) 
                              X                delete the string                                             [[".", ".", ".",...], ["", "", "", "", ""]]
                               ’«@*            push a string with 25 spaces                                  [[".", ".", ".",...], ["", "", "", "", ""], "                         "]
                                    ┼          add the string vertically-then-horizontally to the array      [[".", ".", ".",...], ["", "", "", "", ""], ["-   -", "-   -", "-----", "-   -", "-   -"]] (back to "H")
                                     L@*       push a string with 10 spaces                                  [[".", ".", ".",...], ["", "", "", "", ""], ["-   -", "-   -", "-----", "-   -", "-   -"], "          "]
                                        ┼      add the string vertically-then-horizontally to the array      [[".", ".", ".",...], ["", "", "", "", ""], ["-   -  ", "-   -  ", "-----  ", "-   -  ", "-   -  "]]
                                          p    output the resulted line                                      [[".", ".", ".",...], ["", "", "", "", ""]]
                                           øO  append to output an empty line                                

lưu ý: hiện tại ngôn ngữ này thực sự không thể chấp nhận chuỗi đầu vào đa dòng vì vậy tôi đã yêu cầu nó nhập số và đọc các dòng x tiếp theo làm đầu vào.

Chuỗi đầu tiên là

"------ -  - -  - -  ----------- - -- - -- - - - -  --- -   --   --   - - - ------   --   --   - --- ------ - -- - -- - --   ------- -  - -  - -  -     --- -   --   -- - -  -- -----  -    -    -  ------   --   -------   --   --  ---   -------    -    -----  -    --  -  --    -----    -    -    -    ------ -     -   -   ---------- -     -     - ----- --- -   --   --   - --- ------ -  - -  - -   -    --- -   --   --  -- ---------- -- - - -- -   -    -   - - -- - -- - -   - -    -    ------    -    ----     -    -    ----- --     --     -  -- --   -----   -   -     - ------   - - -   -   - - -   --     -     --- -   -    -   --  --- - ---  --   -"

được nén bằng một từ điển tùy chỉnh sử dụng "" và "-" (nén có chế độ đặc biệt với "\ n - | / _" có sẵn để nén nhiều hơn!)
Nó chứa 25 ký tự cho mỗi ký tự theo thứ tự bảng chữ cái. họ được sắp xếp từ trên xuống rồi phải.
những ký tự đi như

16b
27c
38d . . .
49e
5af

và đó là cùng một cách thêm chúng vào một mảng.


Tôi chắc chắn sẽ kiểm tra xem điều này diễn ra như thế nào! Thay vì yêu cầu một đầu vào khác, điều gần nhất bạn có thể làm với các quy tắc ban đầu là yêu cầu một đầu vào dưới dạng foo\nbarcho các đầu vào đa dòng
Katenkyo

1

Powershell, 261 253 byte

$args-split'
'|%{$s=$_
0..5|%{$l=$_
-join($s|% *per|% t*y|%{$c='_ONO__NQ__QAQQNONON_QQQQQ?QQQQAAAQDDIA[SQQQQADQQQJJ(_OAQOOY_DDGAUUQOQONDQJUDD$QQQQAAQQDEEAQYQAYCPDQJ[JD"QONO_ANQ_GI_QQNA^ENDNDQQD?'[$l*26+$_-65+222*!($_-32)]
0..5|%{' #'[(+$c-shr$_)%2]}})}}

Kịch bản thử nghiệm:

$f = {

$args-split'
'|%{$s=$_
0..5|%{$l=$_
-join($s|% *per|% t*y|%{$c='_ONO__NQ__QAQQNONON_QQQQQ?QQQQAAAQDDIA[SQQQQADQQQJJ(_OAQOOY_DDGAUUQOQONDQJUDD$QQQQAAQQDEEAQYQAYCPDQJ[JD"QONO_ANQ_GI_QQNA^ENDNDQQD?'[$l*26+$_-65+222*!($_-32)]
0..5|%{' #'[(+$c-shr$_)%2]}})}}

}

&$f "ascii art
text"

Đầu ra:

#####  ###   ###  ##### #####       ##### ####  #####
#   # #     #   #   #     #         #   # #   #   #
#####  ###  #       #     #         ##### ####    #
#   #     # #   #   #     #         #   # ##      #
#   #  ###   ###  ##### #####       #   # # #     #

##### ##### #   # #####
  #   #      # #    #
  #   ####    #     #
  #   #      # #    #
  #   ##### #   #   #

Ghi chú:

$s|% *per|% t*y là lối tắt cho$s|% toUpper|% toCharArray

Về không gian:

Đối với mỗi ký tự của chuỗi nguồn, tập lệnh sẽ lấy một ký hiệu (mặt nạ bit) từ chuỗi ma thuật '_ONO__NQ...' . Tuy nhiên, chỉ số vượt ra ngoài chuỗi ma thuật cho một không gian. Trong trường hợp này, mặt nạ bit $ctrở nên trống rỗng. Nó có nghĩa là không cho tất cả các bit.

Về dòng trống:

Kịch bản hiển thị 6 hàng cho mỗi biểu tượng thay vì 5. Chỉ mục vượt ra ngoài chuỗi ma thuật cho một dòng trống. Vì vậy, hàng 6 chỉ chứa khoảng trắng.

Nó được nhìn thấy tốt nhất nếu bạn in một ký tự khác thay vì khoảng trắng. Ví dụ ·.

#####··###···###··#####·#####·······#####·####··#####·
#···#·#·····#···#···#·····#·········#···#·#···#···#···
#####··###··#·······#·····#·········#####·####····#···
#···#·····#·#···#···#·····#·········#···#·##······#···
#···#··###···###··#####·#####·······#···#·#·#·····#···
······················································
#####·#####·#···#·#####·
··#···#······#·#····#···
··#···####····#·····#···
··#···#······#·#····#···
··#···#####·#···#···#···
························

0

C (gcc) , 326 byte

Một cú đâm đầu tiên vào nó. Phải bao gồm stdio.h và string.h trên TIO, nhưng không cần thiết với MinGW.

char*p=0,*q;(*X)()=putchar;i,j;f(char*s){for(;p=strtok(p?0:strdup(s),"\n");X(10))for(i=0;i<5;i++,X(10))for(q=p;*q;q++,X(32))for(j=0;j<5;j++)X(((*q==32?0:"OAOAA?A?A?>A1A>?AAA?O1?1OO1?11>1IA>AAOAAO444OO4457A97591111OAKEAAACCIA>AAA>?A?11>AAIN?A?35>1>@>O4444AAAA>AA::4AAEKAA:4:AA:444O842O"[(toupper(*q)-65)*5+i]-48)>>j)&1?35:32);}

Hãy thử trực tuyến!


0

JavaScript (ES6), 292 287 278 byte

s=>s.split`
`.map(s=>`vfefvvehvvh1hhefefevhhhhhv
hhhh111h4491rjhhhh14hhhaa8
vf1hffpv4471llhfhfe4hal444
hhhh11hh4551hph1p3g4hara42
hfefv1ehv79vhhe1u5e4e4hh4v`.replace(/.{26}/g,S=>s.replace(/./g,c=>'012345'.replace(/./g,x=>' #'[(P=parseInt)(S[P(c,36)-10]||0,36)>>x&1])))).join`

`

Bản giới thiệu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.