อ่าน ASCII-Art Text


34

แรงบันดาลใจจากGolf ฉันเป็นตัวอักษร ASCIIซึ่งความท้าทายนี้ (เกือบ) ตรงกันข้ามโดยตรง


งาน:

ใช้สตริงของข้อความ ASCII-art และส่งออกเนื้อหาของข้อความเป็นข้อความ ASCII ปกติ


การป้อนข้อมูล:

สตริงของข้อความศิลปะ ASCII

ข้อมูลที่ป้อนจะมีอินสแตนซ์ของอักขระ ASCII #ช่องว่างและขึ้นบรรทัดใหม่ 4 หรือ 5 บรรทัดเท่านั้น ทุกบรรทัดมีความยาวเท่ากัน (นั่นคือตัวอักษร ASCII-art ตัวสุดท้ายจะถูกเติมด้วยช่องว่างต่อท้าย) คุณสามารถใช้อักขระ ASCII ที่พิมพ์ได้อื่นแทน#การป้อนข้อมูลหากคุณต้องการ

ข้อมูลที่ป้อนจะมีตัวอักษรA-ZASCII-art และช่องว่าง ASCII-art (ช่องว่าง 5x5 บล็อก) ไม่มีเครื่องหมายวรรคตอน มีข้อความศิลปะ ASCII เพียงบรรทัดเดียวเท่านั้น (5 บรรทัดจริง) จะไม่มีช่องว่างต่อท้ายหรือนำหน้าด้วย ASCII และจะไม่มีช่องว่าง ASCII-art ที่อยู่ติดกัน

ขนาดตัวอักษรคือ 5x5 ตัวอักษร มีช่องว่างระหว่างตัวอักษรแต่ละตัว 1x5 ช่องว่างระหว่างคำคือช่องว่าง 5x5 บล็อก (+ 1x5 ช่องว่างในแต่ละด้านเพราะเป็นเพียงตัวอักษรอื่น) จะไม่มีช่องว่าง 1x5 ในตอนท้ายหรือตอนต้นระหว่างตัวอักษร ASCII เท่านั้น


เอาท์พุท:

สตริงที่มีข้อความเป็นอักขระ ASCII A-Z+ ช่องว่าง เอาต์พุตสามารถเป็นตัวพิมพ์เล็กได้เช่นกันหากนั่นเป็นวิธีที่ง่ายกว่าสำหรับโซลูชันของคุณ อนุญาตให้ใช้ตัวพิมพ์ผสมได้


ตัวอักษร ASCII-art:

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

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

พื้นที่:

     |
     | A 5x5 square of spaces.
     | (Padded with |s to make it appear in this post.)
     |
     |

ตัวอย่าง:

การป้อนข้อมูล:

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

เอาท์พุท: HELLO WORLD

การป้อนข้อมูล:

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

เอาท์พุท: ASCII

การป้อนข้อมูล:

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

เอาท์พุท: PPCG


นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ


10
ฉันคิดว่าวิธีการนี้อาจเกี่ยวข้องกับการจัดเรียงของบางกัญชาฟังก์ชั่น ...
นีล

6
โปรดปรานจากฉันถ้าคุณทำเช่นนี้โดยแปลงอินพุตเป็นรูปภาพและแก้ไขโดยใช้การประมวลผลภาพ! (วิธีแก้ปัญหาต้องตีกอล์ฟด้วยเช่นกัน)
Stewie Griffin

3
หากเป็นประโยชน์สำหรับทุกคนไม่ว่าจะเป็นแถวที่สองแถวที่สี่หรือคอลัมน์กลางของตัวอักษรก็สามารถทิ้งได้โดยไม่สูญเสียข้อมูลที่เกี่ยวข้อง
Martin Ender

1
@JungHwanMin อืม ฉันคิดว่าไม่เพราะนั่นไม่ใช่ข้อความศิลปะ ASCII ที่มนุษย์อ่านได้
Steadybox

1
@JanathanAllan ฉันเดาว่าคงโอเคเหมือนกัน
Steadybox

คำตอบ:


13

เยลลี่ ,  50 44  42 ไบต์

ỴZ;6/UOḂḅ7‘ị“¥ŒƲVĊ⁾|W£⁼³ƭÇuʋụzḢĖ0ḢẆẠØsĠỌỊ»

ลองออนไลน์! (โปรดสังเกตว่าอาร์กิวเมนต์ไม่ต้องการการขึ้นบรรทัดใหม่นำ แต่เนื่องจากการขึ้นบรรทัดใหม่และการขึ้นบรรทัดใหม่ต่อท้ายไม่มีผลฉันจึงรวมหนึ่งรายการเพื่อทำให้สตริงหลายบรรทัดสามารถอ่านได้โดยมนุษย์มากขึ้น)

ผลลัพธ์เป็นตัวพิมพ์เล็ก (ตามที่ OP อนุญาตในความคิดเห็น )

อย่างไร?

แยกบนบรรทัดใหม่สลับและรวมเข้าด้วยกันชิ้นย่อย (สูงสุด) หกรวมกันเพื่อรับการแทนตัวละครและสลับกัน (เท่ากับการแปลงฐานในภายหลังสำหรับอักขระสุดท้ายที่มีความยาว 25 ถึงความยาวทั้งหมด 30) แล้วแผนที่'#'และ' 'หนึ่งและเป็นศูนย์ตามลำดับโดยใช้ความจริงที่ว่า'#'มีในขณะที่ลำดับที่แปลก' 'มีแม้แต่คนเดียว อ่านแต่ละรายการราวกับว่ามันเป็นเลขฐานเจ็ด ใช้โมดูโล 81 อย่างมีประสิทธิภาพ (เพื่อให้ได้ 27 ค่าที่ไม่ซ้ำกันสำหรับ 27 กรณีที่เป็นไปได้) และในที่สุดก็จัดทำดัชนีให้เป็น "สตริงมายากล" ด้วยตัวอักษรที่ถูกต้องที่ดัชนีที่ถูกต้อง (การทำดัชนีโมดูโล 2 ไบต์)

นี่คือ "สตริงมายากล" ฉันสร้างขึ้นพร้อมกับรูปแบบ regex (แบบไม่ตรงตามตัวพิมพ์ใหญ่ - เล็ก) ที่ต้องจับคู่ (ฉันเพิ่ม "ed" เพื่อให้มีความยาว 81):

 ' affectedly Azerbaijan rewaxed naganas jiujitsudankly pase UVB freqHaarlemcoacted'
'^ ..f...e.....z......a..r.w.x...n.g......iuj....d..kly.p.s...vb....qh.....m.o.ct.*'

ดังนั้นอาจถูกบีบอัดค้นหาคำย่อยสิบเอ็ดคำในพจนานุกรมของ Jelly (ซึ่งส่วนใหญ่ใช้ค่าเริ่มต้นของการเว้นวรรคชั้นนำ):

' affectedly Azerbaijan rewaxed naganas jiujitsudankly pase UVB freqHaarlemcoacted'
 ^          ^          ^       ^       ^        ^     ^    ^   ^    ^      ^

ซึ่งส่งผลให้สายอักขระการบีบอัดของเยลลี่ “¥ŒƲVĊ⁾|W£⁼³ƭÇuʋụzḢĖ0ḢẆẠØsĠỌỊ»

ส่วนที่เหลือของรหัสทำงานดังนี้:

ỴZ;6/UOḂḅ7‘ị“...» - Main link: multi-line string, s   e.g. HI as the #s and spaces
Ỵ                 - split on new lines                     ["#   # #####","#   #   #  ","#####   #  ","#   #   #  ","#   # #####"] (each is actually a list)
 Z                - transpose                              ["#####","  #  ","  #  ","  #  ","#####","     ","#   #","#   #","#####","#   #","#   #"] (each is actually a list)
   6/             - six-wise reduce by
  ;               -     concatenation                      ["#####  #    #    #  #####     ","#   ##   #######   ##   #"] (each is actually a list)
     U            - upend (reverse each)                   ["     #####  #    #    #  #####","#   ##   #######   ##   #"] (each is actually a list)
                  -     note: all except the last will be length 30 and like "     ...", which will become [0,0,0,0,0,...], while the last will be length 25 without those five leading zeros.
      O           - cast to ordinals ('#' -> 35, ' '-> 32) [[32,32,...],[35,32,...]]
       Ḃ          - modulo 2 ('#' -> 1, ' ' -> 0)          [000001111100100001000010011111, 1000110001111111000110001] (each is actually a list)
        ḅ7        - convert from base 7 (vectorises)       [223498370543967315553, 191672428080864454753] (these are now integers)
          ‘       - increment                              [223498370543967315554, 191672428080864454754]
                  -  (modulo 81 these would be [68, 41])
           ị      - index into (modulo & 1-indexed):                        
            “...» -     the "magic string" described above ' affectedly Azerbaijan rewaxed naganas jiujitsudankly pase UVB freqHaarlemcoacted'
                                                           "Hi"                                   41^                        68^

14

Python 2 , 405 335 234 182 171 ไบต์

lambda s,j=''.join:j(' QPVXU_O__FBLK_JMD_CSYZWIENH_AG___TR'[int(j(`ord(y)%2`for y in j(s.split('\n')[x][i:i+5]for x in range(5))),2)%13836%37]for i in range(0,len(s)/5,6))

ลองออนไลน์!


ในที่สุดก็สั้นกว่า JS


ใช้ฉลาดของโมดูลัส แต่ฉันไม่สามารถช่วยคิดจะต้องมีวิธีการทำ: [0,2,3,7,...]และ' UBGOTA...แยกมันและใช้การจัดเรียงของการทำแผนที่บาง 0:' ',2:'U',3:'V'...ลักษณะตราบ ,,, :'',มีจำนวนมากดังนั้น (ฉันรู้ว่าคุณมีบางอย่างที่คล้ายกันในโพสต์ต้นฉบับ แต่มีตัวเลขยาวมาก
Stewie Griffin

1
@StewieGriffin มันจะดีกว่านี้
OVS

11

JavaScript (ES6), 204 186 184 182 ไบต์

บันทึก 18 ไบต์ขอบคุณ Neil
บันทึก 2 ไบต์ขอบคุณ ETHproductions
บันทึก 2 ไบต์ขอบคุณ YairRand

ทำให้พังถล่ม:

  • ตารางการค้นหาขนาด 42 ไบต์
  • 162 144 142 140 ไบต์ของรหัส
s=>(a=s.split`
`)[0].replace(/.{6}/g,(_,n)=>' H_JM__WDCSORLU___QKG_P_AFT_N_EI_XBV____YZ'[[0,1,2,4].reduce((p,r,i)=>p+='0b'+a[r].substr(n,5).replace(/./g,c=>1^1-c)<<i*6,0)%178%69%43])

การสาธิต


1
คุณสามารถบันทึกทั้งกลุ่มของไบต์ใช้(a=s.split`\n`)[0].replace(/......?/g,มีsubstr(n,5)และไม่มีjoinแน่นอน
Neil

ฉันคิดว่าคุณสามารถบันทึกไบต์ด้วยc=>0|c>' 'และอื่น ๆ ด้วยp+='0b'+...
ETHproductions

ดังที่ @Steadybox ในส่วนความคิดเห็นของการท้าทายการรับ\nข้อมูลเข้าไม่ถูกต้อง อย่างไรก็ตามฉันคิดว่าคุณสามารถใช้เทมเพลตตัวอักษรกับการขึ้นบรรทัดใหม่ตามจริงเช่นเดียวกับที่คุณทำในsplitวิธีการ
Arjun

1
@ DobbyTheFree- เอลฟ์ฉันสามารถใช้เทมเพลตตัวอักษร - ซึ่งบังเอิญจะทำให้เสียการอ่านเนื่องจากการอ้างอิงชั้นนำ แต่การเพิ่มข้อ จำกัด เกี่ยวกับวิธีการจัดรูปแบบข้อมูลอินพุตก่อนส่งผ่านไปยังฟังก์ชันนั้นอยู่นอกหัวข้อ IMHO (ตราบเท่าที่เนื้อหาจริงของอินพุตนั้นถูกต้อง)
Arnauld

1
@ DobbyTheFree- เอลฟ์ฉันเกรงว่าความคิดเห็นของฉันค่อนข้างคลุมเครือและฉันอาจเข้าใจผิดเล็กน้อยเกี่ยวกับคำถามที่ฉันตอบ การใช้\nสตริงตัวอักษรที่ไซต์การโทรในรหัสไม่เป็นไรเนื่องจากสตริงจริงที่ส่งผ่านไปยังฟังก์ชันรวมเฉพาะอักขระบรรทัดใหม่ไม่ใช่ทั้ง\` and n . Passing a string that contains \ `และnเป็นอักขระที่อยู่ติดกันที่แยกกันจะไม่เป็นไร
Steadybox

9

Bash + ImageMagick + Tesseract , 161 ไบต์

ฉันต้องการลองใช้วิธีที่แนะนำโดย @ stewie-griffin และไปทุบตี + ImageMagick (เพื่อแปลงสตริงเป็นรูปภาพ) และ Tesseract (เพื่อทำ OCR) นี่คือรหัสของฉันที่ใช้งานได้กับ 'HELLO WORLD' testcase แต่ล้มเหลวอีกอัน บางทีอาจมีการปรับแต่งพารามิเตอร์ (แบบอักษรขนาดตัวอักษรการจัดช่องไฟระยะห่าง)

convert -font Courier-Bold -pointsize 8 -interline-spacing -3 -kerning -3 label:"$(</dev/stdin)" -bordercolor White -border 5%x20% png:- | tesseract stdin stdout

เพียงแค่คัดลอกวางศิลปะ ASCII ลงใน commandline หลังจากเรียกใช้คำสั่ง เสร็จสิ้นการป้อนข้อมูลของคุณโดยกด ^ d

เอาต์พุตปัจจุบันสำหรับกรณีทดสอบ:

  • สวัสดีชาวโลก: สวัสดีชาวโลก
  • ASCII: H5511
  • PPCG: PPOG

6

สกาลา, 184 181 ไบต์

magic string + modulo solution อิงจากhashCode:)

(a:String)=>a.split("\n").map(_.grouped(6)map(_.take(5))toArray).transpose.map(l=>"Q__WLUY_XOI_ZN_GEFR_P__JKBMV_S__ __C__D__H_T__A"(Math.abs(l.mkString.hashCode)%106%79%47))mkString

ลองออนไลน์ (Scalafiddle)

อ่านเพิ่มเติมได้:

(a:String) => a.split("\n")
                .map(_.grouped(6)map(_.take(5))toArray)
                .transpose
                .map ( l => 
                    "Q__WLUY_XOI_ZN_GEFR_P__JKBMV_S__ __C__D__H_T__A"(
                        Math.abs(l.mkString.hashCode)%106%79%47
                    )
                )mkString

คำอธิบาย

  • สตริงเริ่มต้น (ศิลปะ ASCII) แบ่งออกเป็น 5 บรรทัด (ความสูงของอักขระ ASCII)
  • แต่ละบรรทัดแบ่งออกเป็นองค์ประกอบ 6 ตัว (ความกว้างของอักขระ ASCII + 1 ช่องว่าง)
  • เฉพาะอักขระ 5 ตัวแรกเท่านั้นที่ถูกเก็บไว้ (พื้นที่ท้ายที่สุดไม่มีประโยชน์)
  • บรรทัดถูกย้าย (อักขระ ASCII แต่ละตัวจะถูกแทนด้วยลำดับ 25 ตัวอักษร (5x5) มี'#'หรือ' ')
  • การแทนค่าอักขระ ASCII แต่ละตัว (ลำดับ) จะถูกแปลงเป็นสตริงและคำนวณแฮชโค้ดแบบสัมบูรณ์สำหรับสตริงนั้น (จำเป็นต้องใช้อย่างยิ่งเนื่องจากโมดูลัสถัดไป)
  • 3 โมดูลัสต่อเนื่อง ( % 106 % 79 % 47) ใช้เพื่อเชื่อมโยงตัวเลข∈ [0; 47[สำหรับอักขระ ASCII แต่ละตัว (ดูคำอธิบายด้านล่าง)
  • หมายเลขนี้ใช้เป็นดัชนีของสายเวท

วิธีการรับสายมายากล?

ก่อนอื่นฉันแทนตัวอักษรทั้งหมดเช่นนี้

case class Letter(letter: Char, ascii: Seq[Char])

จากนั้นฉันสร้างตัวอักษรที่มีการแทน ASCII ของตัวละครทั้งหมด:

ตัวอย่าง:

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

กลายเป็น

Letter('A', " ### #   #######   ##   #") // 25 characters from top-left to bottom-right

สำหรับจดหมายแต่ละฉบับจะมีการคำนวณรหัสเด็ดขาด (แฮชโค้ดทั้งหมดแตกต่างกัน)

val codes = alphabet.map { case Letter(l, a) => (l, Math.abs(a.mkString.hashCode)) }
// codes: Seq[(Char, Int)] = List(( ,253243360), (A,380997542), (B,1221679148), (C,1573119535), (D,307929190), (E,858088672), (F,857996320), (G,750155628), (H,897290147), (I,1518088099), (J,928547488), (K,1184149391), (L,519601059), (M,741735953), (N,2139154001), (O,1625960980), (P,1307658950), (Q,92382816), (R,1221771494), (S,1689301359), (T,1515228067), (U,1390718627), (V,386730851), (W,733134481), (X,628338619), (Y,23919695), (Z,2081560145))

จากนั้นฉันพยายามลดแต่ละรหัส แต่เคารพความจริงที่ว่าแต่ละรหัสต้องไม่ซ้ำกัน (รายการที่จัดกลุ่มตามรหัสต้องมี 27 องค์ประกอบ 1 สำหรับตัวอักษรแต่ละตัว) ดังนั้นฉันจึงลอง 200 โมดูลัสแรก:

val mod = (1 to 200).find(modulo => codes.map { case (a,b) => (a, b % modulo) }.groupBy(_._2).size==27).get

ฉันพบว่า106เป็น modulo แรกที่จะใช้:

val codes2 = codes.map { case (l, c) => (l, c%mod) }
val codes = codes2
// codes: Seq[(Char, Int)] = List(( ,32), (A,46), (B,104), (C,35), (D,38), (E,16), (F,96), (G,94), (H,41), (I,89), (J,102), (K,71), (L,83), (M,105), (N,13), (O,56), (P,20), (Q,0), (R,18), (S,29), (T,43), (U,5), (V,27), (W,3), (X,87), (Y,53), (Z,91))

ฉันทำซ้ำขั้นตอนก่อนหน้านี้จนกระทั่งโมดูโลที่เล็กที่สุด ฉันพบ :

  • 79
  • 47
  • 44
  • 42

หมายเหตุ:โมดูโล่สุดท้ายที่ฉันเลือก ( 47) ไม่ใช่ขนาดเล็กที่สุดที่นี่:

  • ฉันพบ 44 แต่ถ้าฉันเลือก 44 สายมายากลจะมีขนาด 44 (แทน 47) แต่ฉันจะต้องเขียน%106%79%47%44(13 ตัวอักษรแทน%106%79%47= 10 ตัวอักษร) ดังนั้นในหน่วยไบต์รหัสควรมีขนาดเท่ากันกับที่ฉันได้รับ
  • นอกจากนี้ยังมี 42 แต่รหัสควรมี 1 ไบต์มากกว่าที่ฉันได้รับ

ต่อไปฉันใช้โมดูลัสต่อเนื่อง ( % 79 % 47) กับสุดท้ายcodesเพื่อรับรหัสที่ชัดเจนที่เกี่ยวข้องกับตัวอักษรแต่ละตัว

codes: Seq[(Char, Int)] = List(( ,32), (A,46), (B,25), (C,35), (D,38), (E,16), (F,17), (G,15), (H,41), (I,10), (J,23), (K,24), (L,4), (M,26), (N,13), (O,9), (P,20), (Q,0), (R,18), (S,29), (T,43), (U,5), (V,27), (W,3), (X,8), (Y,6), (Z,12))

ในที่สุดการสร้างสายเวท:

val initialMap = (0 until 47).map(i => (i, '_')).toMap
val codesMap = codes.map(i => (i._2, i._1)).toMap

val magicString = (initialMap ++ codesMap).toSeq.sortBy(_._1).map(_._2).mkString
// magicString: String "Q__WLUY_XOI_ZN_GEFR_P__JKBMV_S__ __C__D__H_T__A"

ตัวอย่าง:ตัวอักษรAด้านบนสัมพันธ์กับ 46 ( 380997542 % 106 % 79 % 47) และองค์ประกอบที่ 46 ของสายเวทคือ A :)

กรณีทดสอบ

// assign function to f
val f = (a:String)=>a.split("\n").map(_.grouped(6)map(_.take(5))toArray).transpose.map(l=>"Q__WLUY_XOI_ZN_GEFR_P__JKBMV_S__ __C__D__H_T__A"(Math.abs(l.mkString.hashCode)%106%79%47))mkString

สวัสดีชาวโลก :

val asciiArt = """|#   # ##### #     #      ###        #   #  ###  ####  #     #### 
                  |#   # #     #     #     #   #       #   # #   # #   # #     #   #
                  |##### ####  #     #     #   #       # # # #   # ####  #     #   #
                  |#   # #     #     #     #   #       ## ## #   # #   # #     #   #
                  |#   # ##### ##### #####  ###        #   #  ###  #   # ##### #### """.stripMargin

f(asciiArt)    // HELLO WORLD

ASCII:

val asciiArt = """| ###   ###   ###  ##### #####
                  |#   # #     #   #   #     #  
                  |#####  ###  #       #     #  
                  |#   #     # #   #   #     #  
                  |#   #  ###   ###  ##### #####""".stripMargin

f(asciiArt)    // ASCII

PPCG:

val asciiArt = """|####  ####   ###   ### 
                  |#   # #   # #   # #    
                  |####  ####  #     #  ##
                  |#     #     #   # #   #
                  |#     #      ###   ### """.stripMargin

f(asciiArt)    // PPCG

การแก้ไข

  • ที่บันทึกไว้ 3 ไบต์โดยการลบ.ก่อนmap, toArrayและmkString

3

PHP, 294 ไบต์

<?$l=" 00000YE00G0000R000A0Q0000C0BW000K00000000000LT00000J00000000MU0000Z0000DI000000V0000000P00H0000ONF000S00X";preg_match_all("#(.{5})\s#s","$_GET[0] ",$t);for($i=0;$i<$c=count($a=$t[1])/5;$i++)$s.=$l[bindec(strtr($a[$i].$a[$i+$c].$a[$i+2*$c].$a[$i+3*$c].$a[$i+4*$c]," #","01"))%106];echo$s;

ลองออนไลน์!

ขยาย

$l=" 00000YE00G0000R000A0Q0000C0BW000K00000000000LT00000J00000000MU0000Z0000DI000000V0000000P00H0000ONF000S00X"; # search string mod 106
preg_match_all("#(.{5})\s#s","$_GET[0] ",$t); # Regex take each group of five chars followed by a whitespace
for($i=0;$i<$c=count($a=$t[1])/5;$i++)
  $s.=$l[bindec(strtr($a[$i].$a[$i+$c].$a[$i+2*$c].$a[$i+3*$c].$a[$i+4*$c]," #","01"))%106]; # join each groups make a binaray make a decimal mod 106  
echo$s; # Output

การแปลงอินพุตเป็นรูปแบบภาพ

@Stevie Griffinค้นหาวิธีแก้ไขเพื่อให้ได้สิ่งนี้จากรูปภาพ ฉันคิดว่าเขาไม่ต้องการรูปแบบภาพที่ฉันใช้จริง ๆ

echo'<svg xmlns="http://www.w3.org/2000/svg" width="100%"><switch><foreignObject x="0" y="0" width="100%" height="300"><body xmlns="http://www.w3.org/1999/xhtml"><pre>'.$_GET[0].'</pre></body></foreignObject></switch></svg>';

SVG สามารถมีส่วน HTML ได้หากรวมอยู่ในโครงการต่างประเทศ ดังนั้นฉันจึงใส่องค์ประกอบก่อนลงใน SVG

เอาท์พุทภาพ

<svg xmlns="http://www.w3.org/2000/svg" width="100%"><switch><foreignObject x="0" y="0" width="100%" height="300"><body xmlns="http://www.w3.org/1999/xhtml"><pre>#   # ##### #     #      ###        #   #  ###  ####  #     #### 
#   # #     #     #     #   #       #   # #   # #   # #     #   #
##### ####  #     #     #   #       # # # #   # ####  #     #   #
#   # #     #     #     #   #       ## ## #   # #   # #     #   #
#   # ##### ##### #####  ###        #   #  ###  #   # ##### #### </pre></body></foreignObject></switch></svg>

การแก้ไขจากการเปลี่ยนแปลงภาพ

SVG สามารถอ่านได้ด้วยเครื่องหลังจากบันทึก SVG เป็น "i.svg" คุณต้องแทนที่$_GET[0]ด้วยpreg_replace("#(^.*e>)(.*)(</p.*$)#s","$2",join(file("i.svg")))วิธีปกติด้วยอินพุตปกติ + 55 ไบต์


2

Powershell, 152 146 ไบต์

-join$(for($t=$args-split'
';$c-lt$t[0].Length;$c+=6){$s=0;$t|% s*g $c,5|% t*y|%{$s+=$s+$_}
'_ISRJ_BK_HFQPL_MYNCE _TXDAO_VWUZ__G'[$s%578%174%36]})

สคริปต์ทดสอบ:

$f = {

-join$(for($t=$args-split'
';$c-lt$t[0].Length;$c+=6){$s=0;$t|% s*g $c,5|% t*y|%{$s+=$s+$_}
'_ISRJ_BK_HFQPL_MYNCE _TXDAO_VWUZ__G'[$s%578%174%36]})

}

&$f @"
#   # ##### #     #      ###        #   #  ###  ####  #     #### 
#   # #     #     #     #   #       #   # #   # #   # #     #   #
##### ####  #     #     #   #       # # # #   # ####  #     #   #
#   # #     #     #     #   #       ## ## #   # #   # #     #   #
#   # ##### ##### #####  ###        #   #  ###  #   # ##### #### 
"@

&$f @"
 ###   ###   ###  ##### #####
#   # #     #   #   #     #  
#####  ###  #       #     #  
#   #     # #   #   #     #  
#   #  ###   ###  ##### #####
"@

&$f @"
####  ####   ###   ### 
#   # #   # #   # #    
####  ####  #     #  ##
#     #     #   # #   #
#     #      ###   ### 
"@

&$f @"
       ###  ####   ###  ####  ##### #####  ###  #   # ##### ##### #   # #     #   # #   #  ###  ####   ###  ####   ###  ##### #   # #   # #   # #   # #   # #####
      #   # #   # #   # #   # #     #     #     #   #   #     #   #  #  #     ## ## ##  # #   # #   # #   # #   # #       #   #   # #   # #   #  # #   # #     # 
      ##### ####  #     #   # ####  ####  #  ## #####   #     #   ###   #     # # # # # # #   # ####  #   # ####   ###    #   #   #  # #  # # #   #     #     #  
      #   # #   # #   # #   # #     #     #   # #   #   #   # #   #  #  #     #   # #  ## #   # #     #  #  #   #     #   #   #   #  # #  ## ##  # #    #    #   
      #   # ####   ###  ####  ##### #      ###  #   # ##### ###   #   # ##### #   # #   #  ###  #      ## # #   #  ###    #    ###    #   #   # #   #   #   #####
"@

เอาท์พุท:

HELLO WORLD
ASCII
PPCG
 ABCDEFGHIJKLMNOPQRSTUVWXYZ

บันทึก:

  1. $t|% s*g $c,5|% t*y|%{$s+=$s+$_} เป็นทางลัดสำหรับ $t.substring($c,5).toCharArray()|%{$s+=$s+$_}
  2. ("abcd","efgh").substring(1,2) ส่งกลับอาร์เรย์ ("bc","de")
  3. ("bc","de").toCharArray() ส่งกลับอาร์เรย์ ('b','c','d','e')

2

C,  225  209 ไบต์

ขอบคุณ @ceilingcat สำหรับการบันทึก 16 ไบต์!

i,j,k,l,n,m;f(char*s){l=index(s,10)-s+1;for(i=0;i<l/6;++i){for(m=j=0;j<5;m+=n*(exp10(j++)+.1))for(n=k=0;k<5;)n+=(s[i*6+j+k*l]==35)<<k++;for(j=0;"Qi Y$>W);Xa%d^F4K-]7jcMAG="[j++]-32-m%77;);putchar(n?64+j:32);}}

ลองออนไลน์!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.