แม็พอักขระ ASCII ที่อินพุต


32

ให้แน่ใจว่าได้เห็นความท้าทายอื่น ๆ , การย้อนกลับแผนที่อักขระ ASCII !

ชุดอักขระ ASCII (รหัสมาตรฐานอเมริกันสำหรับการแลกเปลี่ยนข้อมูล) เป็นมาตรฐานการเข้ารหัสอักขระที่ใช้กันอย่างแพร่หลายที่สุด รหัส ASCII แสดงถึงข้อความในคอมพิวเตอร์อุปกรณ์โทรคมนาคมและอุปกรณ์อื่น ๆ

ท้าทาย

ความท้าทายของคุณคือการพิมพ์แผนที่ของชุดอักขระ ASCII เมื่อผู้ใช้ป้อนข้อมูล GIF:

gif

หลังจากผู้ใช้ป้อนอักขระ ASCII ทุกตัวเอาต์พุตควรมีลักษณะดังนี้:

table

การทำแผนที่

ตัวละครแต่ละตัวมีตำแหน่งที่กำหนดไว้ในตารางตรรกะ 16x6 เริ่มต้นด้วยอักขระช่องว่างในตำแหน่งด้านซ้ายด้านบนและการตัดที่ 0 หลักจะปรากฏขึ้นด้านล่าง

เมื่อได้รับอินพุต ASCII ที่พิมพ์ได้ให้พิมพ์อักขระ ASCII ที่ตำแหน่งหน้าจอที่กำหนดโดยไม่ต้องลบอักขระใด ๆ บนหน้าจอในปัจจุบัน

กฎระเบียบ

  • โปรแกรมของคุณเพียงต้องการที่จะแผนที่ออกอักขระ ASCII พิมพ์ไป0x200x7E
  • โปรแกรมของคุณจะต้องไม่ยุติและดำเนินการแมปอักขระต่อไปยังหน้าจอจนกว่าอักขระ ASCII ที่พิมพ์ได้ทั้งหมดจะถูกป้อนเข้า จากที่นี่โปรแกรมของคุณสามารถยกเลิกหรือวิ่งเข้าไปใน Neverland
  • โปรแกรมของคุณสามารถแมปตัวละครในแบบที่คุณชอบเช่นสเปรดชีตตารางหน้าต่างคอนโซลหรือหน้าต่างกราฟิก
  • ไม่ว่าคุณจะแสดงแผนที่อย่างไรจะต้องอัปเดตตามเวลาจริง (ทันทีที่ได้รับการป้อนข้อมูลจากผู้ใช้)
  • หากโปรแกรมของคุณไม่อ่านอินพุตอย่างเงียบ ๆ มันจะต้องเลื่อนเคอร์เซอร์ไปให้พ้นทางดังนั้นข้อความจะไม่เข้าทางแผนที่

ช่วยด้วย

นี่คืออัลกอริธึม pseudocode ที่ฉันใช้สร้าง GIF:

loop forever
    c = input
    y_coord = c / 16
    x_coord = c - y * 16
    if c is printable
        print c at (x_coord * 2 + 1, y_coord + 1)
    end if
end loop

อาจมีวิธีอื่นเพื่อให้ได้ผลลัพธ์ที่ต้องการ คุณสามารถเลือกที่จะใช้อัลกอริทึมของฉันหรือของคุณเอง แต่ผลลัพธ์จะต้องเหมือนกันโดยไม่คำนึงถึง

นี่คือการอ้างอิงตาราง ASCII ที่มีประโยชน์

เกณฑ์การให้คะแนน

คำตอบที่มีจำนวนไบต์น้อยที่สุดในแต่ละภาษาจะเป็นผู้ชนะ มีความสุข!


เราจำเป็นต้องมีช่องว่างระหว่างตัวละครหรือไม่?
musicman523

@ musicman523 ใช่แล้วสิ่งเหล่านี้จำเป็น ผลลัพธ์จะต้องตรงตามที่แสดงในภาพหน้าจอ
MD XF

เราได้รับอนุญาตให้สมมติสีพื้นหลังของเทอร์มินัลหรือไม่
มนุษย์โดยรวม

การล้างข้อมูลเทอร์มินัลจากนั้นวาดตารางที่อัพเดตใหม่สำหรับ char แต่ละตัวที่ยอมรับได้หรือไม่
บาดเจ็บทางระบบดิจิตอล

@DigitalTrauma - การวาดภาพใหม่ทุกครั้งเป็นที่ยอมรับ - ฉันถามในโพสต์ Sandbox
musicman523

คำตอบ:


3

QBIC , 53 57 ไบต์

เพิ่ม 4 ไบต์สำหรับการเว้นวรรค

{locate 7,1┘_?┘i=asc(A)┘locate i/16-1,(i%16+1)*2┘?chr$(i)

QBIC เริ่มพัฒนาเป็นชวเลขสำหรับ QBasic ดังนั้นฉันคิดว่าการแปลคำตอบ QBasicของฉันจะแสดงให้เห็นอย่างนี้ เราได้บันทึกไว้บางส่วน 40% ในไบต์นับสำหรับโปรแกรมหน้าที่เหมือน - และที่แม้ในขณะที่LOCATE, ASCและCHRไม่มี Qbic ฟังก์ชั่นเลย โชคดีที่ QBIC สามารถส่งรหัสโดยตรงไปยัง QBasic เพื่อชดเชยสิ่งนี้ เคียงข้างกัน:

QBIC              QBASIC
------------      ------------
{                 DO
locate 7,1        LOCATE 7,1
                  note that the lower-case alphabet is left unaltered in QBIC.
_?                LINE INPUT A$  (LINE INPUT used instead of INPUT to handle comma's)
i=asc(A)          i=ASC(A$)
locate i/16-1     LOCATE i/16-1
   ,(i%16+1)*2       ,(i MOD 16+1)*2
?chr$(i)          ?CHR$(i)
                  LOOP   (implicitly added to QBIC at EOF)

18

JavaScript (ES6) + HTML, 114 + 16 = 130 ไบต์

บันทึก 16 ไบต์ด้วย @Shaggy

a=Array(96).fill` `;onkeypress=k=>(a[k.key.charCodeAt()-32]=k.key,O.innerText=a.join` `.match(/.{1,32}/g).join`
`)
<pre id=O></pre>

มันเป็นที่น่าพอใจอย่างไม่น่าเชื่อที่จะเพียงแค่บดแป้นพิมพ์ ...


9
"ดังนั้นความพึงพอใจอย่างไม่น่าเชื่อที่จะบดแป้นพิมพ์" อาจหรืออาจไม่ใช่สิ่งที่ฉันกำลังทำอยู่ +1
MD XF

และใช่คุณสามารถสมมติได้เฉพาะ ASCII ที่พิมพ์ได้ ฉันค่อนข้างแน่ใจว่านั่นเป็นกฎ # 1
MD XF

คุณไม่สามารถใช้prompt()ภายในการวนซ้ำได้หรือไม่ มันจะช่วยให้คุณประหยัดจากการจัดการเหตุการณ์และ HTML OP ดูเหมือนว่าจะอนุญาต ดูความคิดเห็นของโพสต์ Mathematica
Arjun

จัดการ ASCII ที่พิมพ์ได้เท่านั้น ลบ 7 ไบต์ถ้าเราสามารถสันนิษฐานได้ว่าจะได้รับ ASCII ที่พิมพ์ได้เท่านั้นซึ่งดูเหมือนจะไม่สมเหตุสมผล หากจัดการกับ ASCII ที่พิมพ์ได้เท่านั้นแล้วสมมติว่า ASCII ที่พิมพ์ได้จะสามารถบันทึกไบต์ได้อย่างไร
Arjun

คุณควรจะสามารถใช้งานได้onkeypressด้วยตัวเองทำให้คุณสามารถวางbodyแท็กได้ นอกจากนี้แท็กสามารถลงไปเพียงแค่pre <pre id=Oแม้ว่าคุณจะต้องรวมการปิด>เพื่อให้การทำงานในตัวอย่าง
Shaggy

15

QBasic 4.5, 81 85 bytes

เพิ่ม 4 ไบต์เพื่อให้สอดคล้องกับกฎการเว้นวรรค

DO
LOCATE 7,1
LINE INPUT A$:i=ASC(A$)
LOCATE i\16-1,(i MOD 16+1)*2
?CHR$(i)
LOOP

และผลลัพธ์จะมีลักษณะเช่นนี้ (หมายเหตุ: ภาพหน้าจอเก่าตอนนี้ตัวละครทุกตัวจะถูกคั่นด้วยช่องว่าง):enter image description here

QBasic มีLOCATEคำสั่งซึ่งมีประโยชน์ที่นี่ รายละเอียดของรหัสนี้:

DO                          Starts an infinite loop
LOCATE 7,1                  Moves the cursor out of the way
LINE INPUT A$:i=ASC(A$)     LINE INPUT gets user input; we need LINE INPUT instead of regular input
                            for support of <space> and <comma>. The ASC() function then takes the
                            ASCII value of the first character in the input, so it can deal with
                            inputs like 'Hello' - it will take ASC('H') and assign that to 'i'
LOCATE i\16-1               Here's the cool bit: LOCATE takes a row and a column to put the cursor on.
    ,(i MOD 16+1)*2         Row is determined by dividing the ASC value by 16, minus 1 (SPACE, ASC 32 
                            is placed on row 1), and for columns we take the modulo plus 1 (Again, SPACE 
                            mod 16 = 0, plus 1 = column 1). Multiplied by 2 gives us the spacing. 
                            We move the cursor to 1,2
?CHR$(i)                    PRINT a cast of the ASCII value to CHR at the specified location.
LOOP                        Ad infinitum

QBasic ชนะทุกคน! ว้าว!
Arjun

5
@Arjun คุณเด็ก ๆ และ Java ของคุณ ...
steenbergh

8

Java 8 , 143 ไบต์

o->{for(;;){char c=System.console().readPassword()[0];if(c>31&c<127)System.out.println(String.format("\u001B[%d;%df%c",c/16+1,(c%16+1)*2,c));}}

ใช้รหัสควบคุม ANSI CSI n ; m fเพื่อกำหนดตำแหน่งเคอร์เซอร์และConsole.readPassword()อ่านการป้อนข้อมูลของผู้ใช้อย่างเงียบ ๆ ผลลัพธ์ของตัวละครบางตัว:

sscreenshot


1
ครั้งแรกที่ฉันเห็นว่า Java มีโอกาสในการเล่นกอล์ฟด้วยเช่นกัน! เยี่ยมมาก!
LMD

1
+1 ไม่เคยเห็นreadPassword()แบบนี้มาก่อน โอ้ดูเหมือนว่าคุณจะขาดเซมิโคลอนหลังจากพิมพ์ นอกจากนี้ไม่ได้เป็นไปได้ที่จะใช้System.out.printfอย่างใดแทนSystem.out.println(String.format(? และคุณสามารถเปลี่ยน()->ไปo->โดยใช้พารามิเตอร์ที่ว่างเปล่าที่ไม่ได้ใช้
Kevin Cruijssen

@KevinCruijssen คงที่ขอบคุณ!
Beluga ขี้อาย

6

BrainFuck , 355 ไบต์

>>++++[->++++[->+>++++++<<]<]>>->[-<[-<<<<++++[->++++++++<]]>>>[<<<<<++++++++[->>++<<<+>]>>-<<<++>>]<<[>>>>>>[>>>]>+<<<<<[<<<]<<-]>>>>>>[>>>]++++[-<++++++++>]>[-<+>]<<[<<<]>>]<[-]<<,[[->+>+<<],[-]++++[->>--------<<]>>[>>>>[>>>]+[<<<]<-]>>>>[>>>]<<[-]<[<<<]<<[>>>>>[>>>]<<+<[<<<]<<-]>>>>>[>>>]<<<[[-]<<<]>[.>.>>]++++++++++[->+>++<<]>>[-<.>]<[-]<<<<[<<<]<,]

ตัวเลือกของ BrainFuck นั้นค่อนข้าง จำกัด ดังนั้นเอาต์พุตจึงอยู่ในเทอร์มินัลและหน้าจอจะถูก "ล้าง" ด้วย 20 บรรทัดใหม่ ข้อมูลที่ป้อนควรเป็นอักขระ ASCII คั่นด้วยบรรทัดใหม่

ลองออนไลน์!

จัดรูปแบบและจัดทำเป็นเอกสาร

นี่คือบันทึกการดีบักที่ฉันใช้ในการเขียนโปรแกรม ฉันใช้ล่ามซึ่งสามารถเลือกพิมพ์สถานะของเทปที่อักขระ '~' ทุกตัวเพื่อแก้จุดบกพร่อง

[
    run.bf
    codegolf.stackexchange.com/questions/124306/map-inputted-ascii-characters
]


[
    Calculate 16 * 6
    Resulting tape state:
    [0 0 0 0 0 0 16 96 0 0 0 0 ...]
               ^
    Note that, to obtain a 16-by-6 grid, the 16
    immediately to the right is decreased to 15
    (since we will decrease it by 1 each loop
    until we reach 0 and immediately reset)
]
>>>>++++[->++++[->+>++++++<<]<]>~

[
    Our next goal is to make 96 sets of 3 cells each in the pattern [C D 0]
    The first cell will represent an entered character--when the corresponding
    input on the keyboard is pressed, it will change to the entered key.
    The first cell is initialized to 32 (' ').

    The second cell will represent the delimiter after that character.
    Every 16 cells, this should be 10 for '\n'. Otherwise, it should be 32 for ' '.

    The third cell is a buffer cell, used for traversal of the grid. In general,
    it should be only temporarily modified and then reset to 0.
]

>->[-<
    [
       -<<<<++++[->++++++++<]
       [
           The second cell of our 3-set should be 32, so the above line
           writes 32 to the 3rd cell from the beginning of the tape (0-indexed)
       ]
    ]
    >>>
    [
       <<<[ The second cell of our 3-set should be 10, and we must reset the line counter ] 
       <<++++++++[->>++<<<+>]>>-<<<++>>
    ]

    [ At this point, the delimiting cell we need is two cells to the left. ]
    <<[>>>>>>[>>>]>+<<<<<[<<<]<<-]

    >>>>>>[>>>]++++[-<++++++++>]
    [ Debug Mode: In the previous loop, add a + in the string of 8 +'s to get visible spaces in the grid ($-signs) ]
    >[-<+>]<<[<<<]>>
]

[ Go back to the beginning of the tape and clear up the residual '15' ]
<[-]~

<<,

[
    [->+>+<<],[-]++++[->>--------<<]

    [
        Take input such that the state of the tape now looks like this:
        [0 0 0 0 0 c c-32 0 32 32 0 32 32 0 32 32 0 ...]
                 ^
        Where 'c' was the entered character.
        We now set up 1's in the buffer zones of the first c-32
        3-sets and clear the character that is currently there.
        All that is left, then, is to copy c to that location.
    ]

    [ Set up the row of 1's. ]
    >>[>>>>[>>>]+[<<<]<-]

    [ Clear the current character. ]
    >>>>[>>>]<<[-]~<[<<<]

    [ Copy the new character. ]
    <<[>>>>>[>>>]<<+<[<<<]<<-]

    [ Clean up the 1's. ]
    >>>>>[>>>]~<<<[[-]<<<]

    [ Print the grid. ]
    >[.>.>>]~

    [ Print a bunch of newlines ]
    ++++++++++[->+>++<<]>>[-<.>]<[-]

    [ Take a new input. ]
    <<<<[<<<]<,
]

6

Mathematica, 108 ไบต์

a=" "~Table~16~Table~6;Dynamic@Grid@a
((a[[⌊#/16⌋-1,#~Mod~16+1]]=i)&@ToCharacterCode[i=Input[]];#0[])&[]

ลองออนไลน์ได้ที่https://sandbox.open.wolframcloud.com/

เมื่อคุณวางรหัสและกด Shift+Enterกล่องโต้ตอบจะปรากฏขึ้นให้คุณป้อนตัวอย่างเช่นตัวละคร"a" aโปรแกรมทำงานตลอดไป

หมายเหตุ: บน Wolfram sandbox ฟอนต์จะถูกจัดรูปแบบแตกต่างจากใน Mathematica ในคอมพิวเตอร์ของฉัน ดังนั้นระยะห่างระหว่างบรรทัด / คอลัมน์อาจดูแปลก


นี่จะแมปตัวละครทุกตัวอย่างต่อเนื่องหรือไม่? คือคุณต้องรันมันมากกว่าหนึ่งครั้งเพื่อดูผลลัพธ์ที่ต้องการ?
MD XF

คุณเรียกใช้หนึ่งครั้งและทุกครั้งที่คุณกดOKกล่องอินพุตกล่องป้อนข้อมูลอื่นจะปรากฏขึ้นเพื่อให้คุณป้อนอินพุต
user202729

ฟังดูแล้วใช้ได้ดีขอบคุณ งานที่ดี!
MD XF

ฉันคิดว่า i = ToString @ Input []] น่าจะดีกว่าผู้ใช้ควรพิมพ์ a และไม่ใช่ "a"
J42161217

หรือดีกว่า i = InputString []
J42161217

5

Python 2 , 115 ไบต์

s='\n'.join([' '*31]*6)
while 1:
 c=input();i=ord(c)
 if 31<i<128:i-=32;i=i%16*2+i//16*32;s=s[:i]+c+s[i+1:];print s

ลองออนไลน์!

ต้องมีเครื่องหมายคำพูด (เดี่ยวหรือสองครั้ง) รอบตัวอักขระที่ป้อน (รุ่น TIO ไม่ได้)


1
คุณสามารถเปลี่ยนraw_inputไปinputตามที่มันเป็นสำมะโนประชากรชุมชนที่คุณสามารถสันนิษฐานได้ว่าการป้อนข้อมูลที่มีคำพูดรอบหากจำเป็น
caird coinheringaahing

1
ฟังดูเข้าท่า! เมื่อฉันถูกทดสอบผมก็แค่ป้อนคีย์และมันก็มีความสุขที่ผมเข้ามาโดยไม่ต้องจับคู่{ }
musicman523

4

STR , ไม่ใช่การเข้ารหัส, 18 ไบต์

นำเสนอภาษากึ่งลึกลับใหม่ของฉัน

#C;dby16#/~2-~u#pq

Animated GIF

#C;dby16#/~2-~u#pq
..;                   preamble
#C                    clear screen
   ...............    main program; each character is pushed to the stack before
   d                  duplicate
    b                 buffer the character
     y                convert to character code
      16#/            divmod by 16 (a / b, a % 6)
          ~2-~        subtract a / b by 2
              u       unbuffer the character
               #p     place that character in the given position
                 q    "quiet"; disable auto-printing

ฉันไม่เห็นช่องว่างระหว่างตัวละคร ...
MD XF

2
@MDXF สเปคพูดอะไรเกี่ยวกับช่องว่างระหว่างตัวละคร ไม่ต้องพูดถึงมีคำตอบมากมายที่ไม่ได้ใช้ช่องว่าง
Conor O'Brien

3

Haskell, 133 ไบต์

p=putStr.("\27["++)
g l=do c<-getChar;p"2J";mapM h(c:l);g(c:l)
h c|(y,x)<-divMod(fromEnum c)16=p$show y++';':show(2*x+1)++'H':[c]
g[]

ต้องใช้เทอร์มินัลที่เข้าใจลำดับการหลบหนีของ ANSI

มันสั้นกว่าที่จะเก็บรายการของปุ่มกดทั้งหมดและล้างหน้าจอก่อนที่จะพิมพ์ทั้งหมดของพวกเขาในแต่ละรอบกว่าการปิดเสียงสะท้อนในเซสชั่นขั้ว ความต้องการหลังimport System.IOและhSetEcho stdin(2<1)ราคาไบต์มากเกินไป


3

C, 101 ไบต์

c,y,x;f(){while(~(c=getchar()))printf("\e[1;20H"),y=c/16,x=c-y*16,printf("\e[%d;%dH%c",y+1,x*2+1,c);}

นี่คือโปรแกรมที่ฉันใช้สร้างกราฟิก เอาท์พุทเป็นไปตามที่แสดงใน GIF ;)


3

QBasic, 62 58 ไบต์

a=ASC(INPUT$(1))
LOCATE a\16-1,1+2*(a MOD 16)
?CHR$(a)
RUN

ทดสอบกับQB64 ควรใช้งานได้ดีกับ QBasic ปกติเช่นกันแม้ว่าคุณอาจต้องการปรับเปลี่ยนเพื่อทำCLSในการเรียกใช้ครั้งแรก

คล้ายกับคำตอบของ steenberghแต่ใช้INPUT$(1)ในการอ่านอักขระทีละตัว วิธีนี้สั้นกว่าและไม่แสดงพรอมต์ นอกจากนี้ยังใช้RUNสำหรับวงวนไม่สิ้นสุดเนื่องจากเราไม่จำเป็นต้องเก็บสถานะใด ๆ ระหว่างการทำซ้ำยกเว้นสถานะของหน้าจอ


ว้าวดี ไม่รู้เรื่องเลยinput$()เลย ฉันชอบหัวข้อเคล็ดลับด้วยเช่นกัน
steenbergh

1

ปาสกาล, 112 ตัวอักษร

Uses crt;var c:char;Begin ClrScr;repeat c:=ReadKey;GotoXY(ord(c)and$F*2+1,ord(c)shr 4-1);write(c);until 1<0;End.

เป็นวิธีแก้ปัญหา Mathematica ของฉันใช้เวลามากมายในไบต์div, modและToCharacterCode[Input[]]ผมลองทำคำตอบอื่นกับปาสคาล แต่หากไม่มีClrScrคอมไพเลอร์ของฉัน (FPC) จะทิ้งข้อมูลการรวบรวมบางอย่างไว้บนหน้าจอClrScr;ใช้เวลา 7 ไบต์

*2ใช้สำหรับระยะห่างที่เหมาะสมจะใช้เวลาอีก 2 ไบต์


1

โลโก้ขนาด 90 ไบต์

cs
rt 90
keyboardon[invoke[setxy 30*modulo ? 16 -30*int ?/16 label char ?]keyboardvalue]pu

ลองใช้กับ FMSLogo

ท้ายที่สุดแล้วโซลูชันโลโก้ของฉันนั้นสั้นที่สุดเมื่อเทียบกับ Mathematica และ Pascal ของฉัน

เพิ่ม 3 ไบต์หากจำเป็นต้องซ่อนเต่า


1

รหัสเครื่อง 6502 + Apple // e ROM ขนาด 31 ไบต์

การถ่ายโอนข้อมูล Hex:

8000- 20 58 FC 20 0C FD 48 38
8008- E9 A0 48 29 0F 0A 85 24
8010- 68 4A 4A 4A 4A 20 5B FB
8018- 68 20 ED FD 4C 03 80

ประกอบความเห็น:

 1 HTAB     =     $24        ; HORIZONTAL POSITION OF CURSOR
 2 SETVTAB  =     $FB5B      ; SETS VERTICAL POSITION OF CURSOR FROM ACC
 3 COUT     =     $FDED      ; OUTPUTS CHARACTER IN ACC
 4 HOME     =     $FC58      ; CLEARS SCREEN
 5 RDKEY    =     $FD0C      ; GETS CHARACTER FROM KEYBOARD, STORES IN ACC
 6          ORG   $8000
 7          JSR   HOME
 8 GETINP   JSR   RDKEY
 9 * POSITION CURSOR
10          PHA              ; PRESERVE ACC
11          SEC              ; MAKE SURE CARRY IS SET TO SUBTRACT
12          SBC   #" "       ; SUBTRACT CHAR CODE OF SPACE
13          PHA              ; SAVE ACC
14          AND   #$0F       ; GET LOWER 4 BITS TO GET CURSOR X POSITION
15          ASL              ; SHIFT LEFT TO MAKE SPACES BETWEEN CHARS
16          STA   HTAB
17          PLA              ; GET OLD ACC
18          LSR              ; SHIFT HIGH NIBBLE
19          LSR              ; INTO LOW NIBBLE
20          LSR              ; TO GET CURSOR Y POSITION
21          LSR
22          JSR   SETVTAB
23          PLA              ; RESTORE ACC
24 *
25          JSR   COUT
26          JMP   GETINP

GIF demo

หากเคอร์เซอร์ใช้งานไม่ได้นี่เป็นรุ่น 36 ไบต์โดยไม่มีเคอร์เซอร์:

8000- 20 58 FC AD 00 C0 10 FB
8008- 8D 10 C0 48 38 E9 A0 48
8010- 29 0F 0A 85 24 68 4A 4A
8018- 4A 4A 20 5B FB 68 20 ED
8020- FD 4C 03 80

1

ทับทิม, 79 75 71 + 13 = 84 ไบต์

+13 ไบต์สำหรับ-rio/consoleแฟล็ก

loop{$/+=STDIN.getch
97.times{|n|print$/[(n+31).chr]||" ",["
"][n%16]}}

Ungolfed

loop {
  $/ += STDIN.getch
  97.times {|n|
    print $/[(n+31).chr] || " ", ["
"][n%16]
  }
}

1

SmileBASIC 3, 82 ไบต์

CLS
@L
C$=INKEY$()IF""!=C$THEN V=ASC(C$)-32LOCATE V MOD 16*2,V DIV 16*2?C$;
GOTO@L

ในชุดอักขระ SmileBASIC ¥จะอยู่ในตำแหน่ง\ปกติ หวังว่านี่จะไม่เป็นโมฆะคำตอบนี้อย่างสมบูรณ์


0

Applesoft BASICขนาด 134 ไบต์

0TEXT:HOME:PR#0
1C=PEEK(49152):POKE49168,0:HTAB1:VTAB20:NORMAL:IFC>=128THENC=C-128:INVERSE
4Y=INT(C/16):X=C-Y*16:HTABX*2+1:VTABY+1:IFC>=32THEN PRINTCHR$(C):IFC<32THEN PRINTCHR$(127)
9GOTO1

นี่เป็นรุ่นที่ตีกอล์ฟของ Apple] [การทดสอบแป้นพิมพ์โปรแกรมที่เป็นแรงบันดาลใจให้กับความท้าทาย


นี่คือ 134 ไบต์จริงเนื่องจาก Applesoft BASIC ถูกทำโทเค็น
insert_name_here

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