คีย์บอร์ดของจริงที่คุณเกือบจะทำได้


126

... ไม่ว่าคุณจะคุณจะ? งานง่ายส่งออกข้อความต่อไปนี้:

 ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________ 
||` |||1 |||2 |||3 |||4 |||5 |||6 |||7 |||8 |||9 |||0 |||- |||= |||BS    ||
||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
 ________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ 
||TAB   |||Q |||W |||E |||R |||T |||Y |||U |||I |||O |||P |||[ |||] |||\ ||
||______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__||
|/______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|
 _________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________ 
||CAPS   |||A |||S |||D |||F |||G |||H |||J |||K |||L |||; |||' |||ENTER ||
||_______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/_______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
 ___________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___________ 
||SHIFT    |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||SHIFT    ||
||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
|/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|

นี่คือแป้นพิมพ์แห่งอนาคตเพราะในช่องว่างในอนาคตไม่เกี่ยวข้องดังนั้น spacebars


ในการทำให้สิ่งต่าง ๆ ง่ายขึ้นสำหรับคุณ:

  1. 0123456789ABC...XYZ-=[]\;',./ - ตัวอักษรเหล่านี้อยู่บนกุญแจของความยาว 6 (รวมถึงช่องว่างภายใน)
  2. TAB / BS / ENTER - ปุ่มเหล่านี้มีความยาว 10 (รวมถึงช่องว่างภายใน)
  3. CAPS - คีย์นี้มีความยาว 11 (รวมถึงการขยาย)
  4. SHIFT - ปุ่มนี้มีความยาว 13 (รวมถึงการขยายทั้งสองด้าน)

แต่ละคีย์มีลักษณะคล้ายกันมากขึ้นหรือน้อยลง:

 ____ 
||* ||
||__||
|/__\|

อย่างไรก็ตามคุณควรจำไว้ว่าสองปุ่มที่ต่อเนื่องกันไม่ใช่:

 ____  ____ 
||* ||||* ||
||__||||__||
|/__\||/__\|

แต่พวกเขาจะ "ทรงจำ":

 ____ ____ 
||* |||* ||
||__|||__||
|/__\|/__\|

ความท้าทายนี้ไม่ควรเลวร้ายเกินไปขอให้โชคดีกับคุณ อย่าพลาดการทวนคำซ้ำซ้อน! แต่อย่าประมาทคีย์ "พิเศษ" เช่นกัน;)


ชนะ?

รหัสที่สั้นที่สุดชนะเพราะเป็นคุณรู้


49
ต้องยอมรับว่าฉันไม่แปลกใจที่คนจำนวนมากกังวลเกี่ยวกับคีย์บอร์ดอนาคตที่ไม่มีช่องว่าง ...
Magic Octopus Urn

97
ฉันเดาว่าช่องว่างไม่ใช่พรมแดนสุดท้าย
Greg Martin

48
"TASTE" เป็นคำภาษาเยอรมันสำหรับ "key" :)
QBrute

31
"TASTE" เป็นคำนอร์เวย์สำหรับ "การพิมพ์" :)
Stewie Griffin

32
แต่มันเป็นคำภาษาอังกฤษสำหรับ "รส" ที่นี่
Mr Lister

คำตอบ:


117

V , 189, 179, 175, 164, 161, 157, 155, 149, 145, 141 , 135 ไบต์

¬19É`A0-=BS´ 
TAB³ qwertyuiop[]\
CAPS³ asdfghjkl;'ENTER 
SHIFT´ ÄJizxcvbnm,./Í„A-Z ]/Õ& 
ÍÓ«ü$/|||&
òÙÓ„|]/_
ÙÓ׫/Ü|¯
kkPÓ/_ _
kòÎx$x

ลองออนไลน์!

คำตอบนี้ทวีตแล้ว!


ดูมันทำงาน! นี่เป็นรุ่นที่ได้รับการแก้ไขเล็กน้อยซึ่งจะอัปเดตในขณะที่ทำงานเพื่อให้คุณสามารถเรียงลำดับดูวิธีการทำงาน นี่เป็นรุ่นที่ล้าสมัยเนื่องจากฉันยังไม่ได้บันทึกอีกรอบ แต่วิธีการทั่วไปเหมือนกัน

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

เนื่องจากสิ่งนี้มีอักขระที่ไม่สามารถพิมพ์ได้จำนวนหนึ่งและ non-ASCII ขั้นต้นจำนวนมากนี่คือ hexdump:

00000000: ac31 39c9 6041 302d 3d42 53b4 200a 5441  .19.`A0-=BS. .TA
00000010: 42b3 2071 7765 7274 7975 696f 705b 5d5c  B. qwertyuiop[]\
00000020: 0a43 4150 53b3 2061 7364 6667 686a 6b6c  .CAPS. asdfghjkl
00000030: 3b27 454e 5445 5220 0a53 4849 4654 b420  ;'ENTER .SHIFT. 
00000040: 1bc4 4a69 7a78 6376 626e 6d2c 2e2f 1bcd  ..Jizxcvbnm,./..
00000050: 8441 2d5a 205d 2fd5 2620 0acd d3ab fc24  .A-Z ]/.& .....$
00000060: 2f7c 7c7c 260a f2d9 d384 7c5d 2f5f 0ad9  /|||&.....|]/_..
00000070: d3d7 ab2f dc7c af0a 6b6b 50d3 2f5f 205f  .../.|..kkP./_ _
00000080: 0a6b f2ce 7824 78                        .k..x$x

มันทำงานอย่างไร

เอาล่ะคำอธิบายนี้จะเป็นเรื่องยุ่งเหยิง คุณพร้อม? ก่อนอื่นเราต้องใส่ตัวอักษรเพื่อให้เราสามารถสร้างกุญแจที่อยู่รอบตัวพวกเขา นี่คือ

¬19É`A0-=BS´ 
TAB³ qwertyuiop[]\
CAPS³ asdfghjkl;'ENTER 
SHIFT´ <esc>ÄJizxcvbnm,./<esc>

เม็ดมีดใด:

`1234567890-=BS    
TAB   qwertyuiop[]\
CAPS   asdfghjkl;'ENTER 
SHIFT    zxcvbnm,./SHIFT  

มันเข้าสู่มันค่อนข้างตรงไปตรงมา แต่มีเทคนิคเล็กน้อยที่เราใช้ในการบันทึกตัวละคร ตัวอย่างเช่น¬19ป้อน "123456789" ³ป้อนช่องว่างสามช่องและเราทำซ้ำกะเพื่อให้เราไม่จำเป็นต้องป้อนหลายครั้ง

สังเกตว่าตัวอักษรเป็นตัวพิมพ์เล็กที่นี่ได้อย่างไร นี่คือเพื่อให้เราสามารถแยกความแตกต่างระหว่างคีย์ตัวพิมพ์ใหญ่เช่น "ENTER" และตัวอักษรเดียวได้อย่างง่ายดาย การเขียนพวกเขาด้วยวิธีนี้ทำให้ง่ายต่อการบอกว่าตัวละครตัวไหนที่จะใส่บาร์ก่อนหน้านี้และเพิ่มเพียงหนึ่งไบต์เพื่อแปลงเป็นตัวพิมพ์เล็กในภายหลัง ดังนั้นเราจึงใช้คำสั่ง replace เพื่อแปลงสิ่งเหล่านี้เป็นตัวพิมพ์ใหญ่และเพิ่มหนึ่งช่องว่างหลังจากแต่ละอัน:

Í               " Globally replace
 [^A-Z ]        " Anything but a uppercase alphabet character or a space
        /       " with
         Õ&     " The matched pattern made uppercase, followed by a space

ตอนนี้เรารับแต่ละคีย์ลำดับ (การรันใด ๆ ที่ไม่ใช่ช่องว่าง) และวางสามแท่งก่อนและหลัง:

Í           " Globally replace
 Ó«         "   Any number of non-space characters
   ü        "   or
    $       "   an end of line
     /      " with
      |||   "    Three bars 
         &  "    And the matched pattern

ณ จุดนี้บัฟเฟอร์มีลักษณะดังนี้:

|||` |||1 |||2 |||3 |||4 |||5 |||6 |||7 |||8 |||9 |||0 |||- |||= |||BS    |||
|||TAB   |||Q |||W |||E |||R |||T |||Y |||U |||I |||O |||P |||[ |||] |||\ |||
|||CAPS   |||A |||S |||D |||F |||G |||H |||J |||K |||L |||; |||' |||ENTER |||
|||SHIFT    |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||SHIFT    |||

การมีสามแท่งในคอลัมน์แรกและคอลัมน์สุดท้ายนั้นสะดวกสบายมากและจบลงด้วยการประหยัดหลายไบต์ในระยะยาว

และนี่คือที่ที่เราเรียกใช้วงวนยักษ์หนึ่งวง สิ่งนี้จะแปลงสิ่งนี้:

|||SHIFT    |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||SHIFT    |||

เป็นอะไรเช่นนี้:

 ___________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___________ 
||SHIFT    |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||SHIFT    ||
||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
|/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|

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

ò         " Recursively:
 Ù        "   Duplicate this line
  Ó       "   Substitute all on this line:
   [^|]   "     Anything but a bar
       /  "   With:
        _ "     An underscore

นี้เป็น

|||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________|||

เส้น

Ù         "   Duplicate this line
 Ó        "   Subsitute all on this line:
  ׫      "     A run of *non-word characters* (that is, [^0-9A-Za-z_])
    /     "   With:
     Ü|¯  "     '\|/'

นี้เป็น

\|/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|/

เส้น

kk        "   Move up two lines (to the original text with "SHIFT")
  P       "   Paste the last line we duplicated (the one with all the underscores)
   Ó      "   Substitute:
          "     Since we don't give any regex here, it re-uses the last one 
          "     (a run of *non-word* characters)
    /     "   With:
     _ _  "     '_ _'

นี้เป็น:

_ ___________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___________ _

เส้น

k         "   Move up a line (this will throw an error, breaking the loop when we're done)
 ò        " Endwhile

ตอนนี้เรามีคีย์บอร์ดเต็มรูปแบบ แต่แต่ละบรรทัดมีแถบพิเศษทั้งสองสแลชพิเศษ (ไปข้างหน้าหรือข้างหลัง) หรือขีดล่างพิเศษ แก้ไขง่ายสุด ๆ

Î             " On every line:
 x            "   Delete a character
  $           "   Move to the end of the line
   x          "   and delete another character

หลังจากความบ้าคลั่งนั้นบัฟเฟอร์จะถูกพิมพ์โดยปริยาย


1
ดูเหมือนว่ามีขีดเส้นใต้ 4 จุดในช่องว่างด้านขวาของเอาต์พุตหรือไม่
ErikE

7
คุณดูถูกว่าความจริงข้อนี้เป็นอย่างไร
Magic Octopus Urn

1
@carusocomputing ฮ่าฮ่าฉันเดาว่าคุณพูดถูก ฉันภูมิใจในคำตอบนี้มากและภาษาของฉันเป็นคำตอบเดียวในการทุบตีทาสี :)
DJMcMayhem

2
@DJMcMayhem ทำเครื่องหมายว่าคุณเป็นผู้ชนะถ้าไม่มีใครชนะคุณภายใน 1/3/2017;)
Magic Octopus Urn

7
นี่ยังเป็นคำตอบที่ฉันโปรดปรานในเว็บไซต์ ฉันไม่สามารถนับได้ว่าฉันดู GIF กี่ครั้ง
Magic Octopus Urn

41

Lua 5.3, 416 394 ไบต์

k="` 1 2 3 4 5 6 7 8 9 0 - = BS|TAB Q W E R T Y U I O P [ ] \\|CAPS A S D F G H J K L ; ' ENTER|SHIFT Z X C V B N M , . / SHIFT"S={TAB=6,BS=6,ENTER=6,CAPS=7,SHIFT=9}for v in k:gmatch"[^|]+"do for i=1,4 do for s in v:gmatch"%S+"do l=S[s]or 2j=("_"):rep(l)io.write(i==1 and" _"..j.."_"or i==2 and"||"..s..(" "):rep(l-#s).."|"or i==3 and"||"..j.."|"or"|/"..j.."\\")end print(i>1 and"|"or"")end end

Ungolfed และมีความคิดเห็น

keys="` 1 2 3 4 5 6 7 8 9 0 - = BS|TAB Q W E R T Y U I O P [ ] \\|CAPS A S D F G H J K L ; ' ENTER|SHIFT Z X C V B N M , . / SHIFT" -- Define a keyboard. Separated with |'s, there's probably a nicer way to do this, but I'm not sure about how to yet.
special_keys={TAB=6,BS=6,ENTER=6,CAPS=7,SHIFT=9} -- Special keys get special definitions
for v in keys:gmatch"[^|]+" do -- For each row on the keyboard...
    for i=1, 4 do -- Each of the 4 rows per key...
        for s in v:gmatch"%S+" do -- Match each individual key.
            l=special_keys[s]or 2 j=("_"):rep(l) -- l is the length of the key, j is "_" repeated length times, which is used a bit.
            io.write(i==1 and -- Lua needs Switch Statements!
                     " _"..j.."_" -- The top of the key is a Space, then j with two _'s around it.
                     or
                     i==2 and
                     "||"..s..(" "):rep(l - #s).."|" -- Second row is || then the key, then the remaining whitespace, and then one more |, which chains together.
                     or
                     i==3 and
                     "||"..j.."|" -- Third row is like the second, but without the key. Instead of whitespace, uses j, which is the underlines.
                     or
                     "|/"..j.."\\") -- Last row is like the third row, but with "|/" and "\" instead of "||" and "|"
        end
        print(i>1 and"|"or"") -- First line is the only line that doresn't need a "|", everything else gets a "|" before the newline.

    end
end

เอาท์พุต

 ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||` |||1 |||2 |||3 |||4 |||5 |||6 |||7 |||8 |||9 |||0 |||- |||= |||BS    ||
||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
 ________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
||TAB   |||Q |||W |||E |||R |||T |||Y |||U |||I |||O |||P |||[ |||] |||\ ||
||______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__||
|/______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|
 _________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||CAPS   |||A |||S |||D |||F |||G |||H |||J |||K |||L |||; |||' |||ENTER ||
||_______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/_______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
 ___________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___________
||SHIFT    |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||SHIFT    ||
||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
|/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|

ฉันจะต้องถูกทำลายโดยคนอื่น ๆ แต่ฉันคิดว่าฉันจะให้ช็อตนี้ จำนวนของความซับซ้อนที่ดีและอย่างน้อยก็สั้นกว่าแป้นพิมพ์!


15
สกรูภาษาอื่น ๆ คุณเป็นคนแรกในภาษาที่หายาก! น่าประทับใจ แต่ฉันแน่ใจว่าคุณไม่จำเป็นต้องใส่ท่อเป็นตัวคั่นในจดหมายทุกฉบับ สังเกตว่าปุ่ม "พิเศษ" อยู่ที่ด้านหน้าและท้ายบรรทัดเท่านั้น ฉันแน่ใจว่าคำใบ้นั้นสามารถช่วยคุณประหยัดไบต์อันมีค่าได้
Magic Octopus Urn

คุณใช้ Lua รุ่นใด ใน Lua 5.1 มันทำให้ฉันมีข้อผิดพลาดทางไวยากรณ์: stdin: 1: หมายเลขที่มีรูปแบบไม่ถูกต้องใกล้กับ '2j'
brianush1

5
@ Brianush1 Lua 5.3, อนุญาตให้ค่าคงที่จำนวนนั่งถัดจากตัวอักษรใด ๆ ที่ไม่ใช่เลขฐานสิบหกหรือ 'x' ในกรณีที่ 0
ATaco

29

Bubblegum , 191 ไบต์

0000000: ad d2 35 7a c6 30 10 06 e1 5e a7 50 15 66 fe 99  ..5z.0...^.P.f..
0000010: c1 8c 61 50 0e b2 87 8f 27 24 f7 eb af 78 2b e3  ..aP....'$...x+.
0000020: 3c b2 ae 99 1a 66 8d c8 a7 15 91 73 b8 80 4b b8  <....f.....s..K.
0000030: 82 6b b8 81 5b b8 83 1e 9c c1 31 8c 60 5e d9 66  .k..[.....1.`^.f
0000040: 22 46 c4 39 d1 c2 78 d6 a9 73 6f 5a d8 9b 18 ff  "F.9..x..soZ....
0000050: bb 5a e8 55 cf e6 fc ae 48 01 8f b0 82 12 6a 78  .Z.U....H.....jx
0000060: 86 7b 08 20 83 1c 5e e1 1d de e8 e5 7f 57 b4 d0  .{. ..^......W..
0000070: 8b a9 9b f9 5e 5d 9d af c5 2c af 7e 82 cd a0 82  ....^]...,.~....
0000080: 25 ac 61 03 5b 08 21 82 18 06 b0 0b ab b4 5e 95  %.a.[.!.......^.
0000090: ad 5e 5d 9d 2f d6 e9 f9 d2 c4 f2 bd aa 6d b0 ae  .^]./........m..
00000a0: ed 4f b1 17 78 82 05 3c c0 1c 52 48 e0 08 4e e0  .O..x..<..RH..N.
00000b0: 14 5a 77 fb 5e aa 58 be 97 aa 98 bf db 7c 01     .Zw.^.X......|.

ลองออนไลน์!


1
Bubblegum ไม่ยุติธรรม
Joshua

7
@ โจชัวเป็นเรื่องดีที่จะกำหนดพื้นฐานสำหรับการแก้ปัญหา และถ้าไม่มีอะไรสามารถเอาชนะ bubblegum นั่นคือปัญหาของปัญหา
Sarge Borsch

19

Haskell, 263 ตัวอักษร(353 ไบต์ UTF-8)

import Data.List
main=mapM_ putStrLn$transpose.foldr k[g]=<<
 [s"`1234567890-="%"   ←"
 ,"↹   ":s"𝑄𝑊𝐸𝑅𝑇𝑌𝑈𝐼𝑂𝑃[]\\"
 ,"⇩    ":s"𝐴𝑆𝐷𝐹𝐺𝐻𝐽𝐾𝐿;'"%"     ↵"
 ,"⇧       ":s"𝑍𝑋𝐶𝑉𝐵𝑁𝑀,./"%"       ⇧"]
r%e=r++[e]
g=" |||"
k s r=g:"_||/":['_':c:"__"|c<-s]%"_||\\"++r
s=map(:" ")

สกรีนช็อตของคีย์บอร์ดนั้น

เนื่องจากมีการถกเถียงกันมากมายเกี่ยวกับคะแนนของอักขระยูนิโค้ดเหล่านี้ ... นี่เป็นโปรแกรมเดียวกันลดลงเป็น ASCII ทั้งหมด:

Haskell, 263 ตัวอักษร(263 ไบต์ UTF-8)

import Data.List
main=mapM_ putStrLn$transpose.foldr k[g]=<<
 [s"`1234567890-="%"BS  "
 ,"TAB ":s"QWERTYUIOP[]\\"
 ,"CAPS ":s"ASDFGHJKL;'"%"ENTER "
 ,"SHIFT   ":s"ZXCVBNM,./"%"SHIFT   "]
r%e=r++[e]
g=" |||"
k s r=g:"_||/":['_':c:"__"|c<-s]%"_||\\"++r
s=map(:" ")

3
แป้นพิมพ์ Unicode ทางเลือกที่น่าสนใจ (มีตัวอักษรทางคณิตศาสตร์ที่ดูดี) แต่ฉันคิดว่ามันละเมิดกฎการแข่งขัน
Mario Carneiro

@MarioCarneiro เพื่อความยุติธรรมมันไม่ส่งผลกระทบต่อความยาวของโปรแกรมเลย
pydsigner

1
@pydsigner มันตั้งแต่คำเช่นมีความยาวมากกว่าตัวอักษรเช่นENTER ↩︎
timothymh

5
แต่คุณกำลังเปรียบเทียบENTER และ↩︎ ช่องว่างภายในทำให้ความยาวเท่ากัน
CodeMonkey

2
ที่จริงแล้วฉันคาดหวังว่ายูนิโค้ดจะทำให้โปรแกรมใช้เวลานานขึ้นด้วยจำนวนไบต์เนื่องจากยูนิโค้ดที่สูงกว่าคือไบต์ใน UTF8 มากกว่า ASCII
Mario Carneiro

18

PHP, 303 ไบต์

ขี้เกียจ แต่มีประสิทธิภาพ :)

<?=gzinflate(base64_decode('rdO5DoJAEIDhnqegs/G+jbEAvA88wBuzPsg8vPyLZo3tOMUXmt1k/iy+ycfXYj88kacvIg1oQgva0IEu9KAPA6hDBUYQJn4+IvldxogWhrtqxmRamEw8t66afMc0CO26soczTOAAKVzhCAvYwg7u8IDs06tYVx3Oc+uqw7lef3lfUbBLimABJDCGKcxgDktYwRqGULJ143Ry+O71r/elDvb7vnSx3r2S+WKaFn+U3OACEZzs7wYxbKAMVajZvO6066WK9dNLFcuefgE'));

1
ดี น่ารำคาญฉันไม่สามารถบีบอัดในระดับเดียวกันได้ด้วยการบีบอัด / gzip / bzip2 / 7z มิฉะนั้นเวอร์ชั่น Bash จะสั้นลงเล็กน้อย มันมีความยาว 318 ตัวอักษรแทน
Konrad Rudolph

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

1
@KonradRudolph ตามที่ฉันเข้าใจแล้ว gzdeflate () ใช้การบีบอัดเช่นเดียวกับบรรทัดคำสั่ง gzip แต่ข้ามส่วนหัวของไฟล์และ checksum ดังนั้นมันจะสั้นกว่าเล็กน้อย
อเล็กซ์ Howansky

300 <?=gzinflate(base64_decode('rdO5DoJAEIDhnqegs/G+jbHA+0QEvDHrg8zDy79EMbTDFF+3m8yfXdek42phHJG3KyItaEMHutCDPgxgCCNoQg0mMI3cdETSu4wRLQx3NYxJtDCJOL9t1cnSFWNvareVE1xhASHEcIczbOAIATzhBck3V7atupuTb6vulucq43XNvCDKenkQwRyWsII1bGEHexhDxcb140X4n6us16XuVXxdulZZrmi9WcbZd5IH3GAGF/vXwIcDVKEODVs3P53nUrUq5FK1sqc/'));ไบต์: คอมเพรสเซอร์: sandbox.onlinephpfunctions.com/code/…ตัวถอดรหัส : sandbox.onlinephpfunctions.com/code/…
Ismael Miguel

4
@ ไม่มีใครภายนอกไม่มีอะไร gz เป็นส่วนหนึ่งของคอมไพล์เริ่มต้นของ PHP และได้รับอนุญาตโดยปริยาย
Alex Howansky

18

Python 3.5+, 239 ไบต์

s="SHIFT   "
for k in[(*"`1234567890-=","BS   "),("TAB  ",*"QWERTYUIOP[]\\"),("CAPS  ",*"ASDFGHJKL;'","ENTER"),(s,*"ZXCVBNM,./",s)]:
 for f in"{1}__ ,|{} ||,|{1}||,/{1}\|".split(","):print(f[-1]+"".join(f.format(c,"_"*-~len(c))for c in k))

Python 3.5+ จำเป็นสำหรับเครื่องหมายสีแดงด้านในทูเปิลหรืออย่างอื่น?
mbomb007

1
คุณสามารถบันทึกหนึ่งไบต์หากคุณกลับด้านการก่อสร้างของแต่ละคีย์และใช้"".join(...) + f[0]ในวงด้านใน การสลับformatลำดับอาร์กิวเมนต์และตัวยึดตำแหน่งที่เกี่ยวข้องในสตริงจะช่วยประหยัดอีกสองไบต์
dfernan

['{1}__ ','|{} ||','|{1}||','/{1}\\|']splitสั้นกว่าการใช้งานของ
Alex Hall

16

แบตช์465 452 ไบต์

@echo off
call:c _ ` 1 2 3 4 5 6 7 8 9 0 - "=" "BS   " _____
call:c _____ "TAB  " Q W E R T Y U I O P [ ] \ _
call:c ______ "CAPS  " A S D F G H J K L ";" ' ENTER _____
call:c ________ "SHIFT   " Z X C V B N M "," . / "SHIFT   " ________
exit/b
:c
set t=%1_
set s=!!%~2 !!!%3 !!
:l
set t=%t%#__
set s=%s%!%~4 !!
shift
if not "%~5"=="" goto l
set t=%t%#%4_
for %%l in (" _%t:#=_ _%_" "%s:!=|%" "||%t:#=|||%||" "|/%t:#=\|/%\|")do echo %%~l

:cย่อยจับเส้นของคีย์ คีย์ที่มีช่องว่างพิเศษจะต้องมีการอ้างเช่นเดียวกับ=, ;, ,คีย์อาจจะเป็นเพราะข้อผิดพลาดในshiftคำสั่ง พารามิเตอร์แรกและสุดท้ายคือสตริงของ_s ที่มีความยาวเท่ากับคีย์แรกและคีย์สุดท้ายเพื่อช่วยในการต่อข้อมูล tจากนั้นจะสิ้นสุดลงเมื่อมีการ_ใช้ร่วมกันของแถวแรกแถวที่สามและสี่โดยมีการ#ทำเครื่องหมายการเข้าร่วมซึ่งจะถูกแทนที่อย่างเหมาะสมก่อนที่จะเพิ่มอักขระนำหน้าและต่อท้ายในขณะที่sเป็นแถวที่สอง แต่|เปลี่ยนเป็น!s เมื่อพวกเขาลดลง จำนวนของ"สิ่งที่ฉันต้องการ แก้ไข: บันทึก 1 ไบต์โดยพิมพ์ทั้งสี่บรรทัดในคำสั่งเดียวและ 12 ไบต์โดยปรับวิธีที่ฉันกำหนดsตัวแปรให้เหมาะสม


14

ทับทิม 226 ไบต์

16.times{|i|puts (([[?`,'TAB  ','CAPS  ',s='SHIFT   '][j=i/4]]+%w{1234567890-= QWERTYUIOP[] ASDFGHJKL;' ZXCVBNM,./}[j].chars+[['BS   ',?\\,'ENTER',s][j]]).map{|e|e.tr('^|'[-i%4/3,2],?_)}*3*"__ _ |||_|||_\\|/"[i%4*4,4])[72,75]}

การปรับปรุงดังต่อไปนี้:

1. ไม่มีองค์ประกอบสตริงว่างที่จุดเริ่มต้นและจุดสิ้นสุดของอาร์เรย์ แต่อาเรย์จะได้รับการเพิ่มขึ้นสามเท่าโดยใช้แป้นพิมพ์ 3 ด้าน หลังจากแปลงเป็นสตริงเรามี 3 คีย์บอร์ดที่ไม่มีขอบด้านนอก สิ่งนี้ถูกตัดทอนเพื่อแสดงเฉพาะตรงกลางพร้อมด้วยขอบ

2. ทับทิมรุ่นที่ถูกเปลี่ยน ใช้ Ideone แทนที่จะติดตั้ง 1.9.3 บนเครื่องของฉัน วิธีนี้สามารถลงไปเพียงแค่.chars.to_a.chars

Ruby, 239 ไบต์

มีอีกไม่กี่ไบต์ที่จะตีกอล์ฟออกจากสิ่งนี้ จะมองในวันพรุ่งนี้

16.times{|i|puts ((['']+[[?`,'TAB  ','CAPS  ',s='SHIFT   '][j=i/4]]+%w{1234567890-= QWERTYUIOP[] ASDFGHJKL;' ZXCVBNM,./}[j].chars.to_a+[['BS   ',?\\,'ENTER',s][j]]+['']).map{|e|e.tr('^|'[-i%4/3,2],?_)}*"__ _ |||_|||_\\|/"[i%4*4,4])[2..-2]}

ungolfed

16.times{|i|                                                            #iterate throug 16 lines of output
  puts ((['']+[[?`,'TAB  ','CAPS  ',s='SHIFT   '][j=i/4]]+              #build row from blank element plus left special key
    %w{1234567890-= QWERTYUIOP[] ASDFGHJKL;' ZXCVBNM,./}[j].chars.to_a+ #plus regular keys
   [['BS   ',?\\,'ENTER',s][j]]+['']).map{|e|                           #plus right special key and another blank element
                                      e.tr('^|'[-i%4/3,2],?_)}*         #if i%4 != 1, replace the keytop legend with _ characters 
   "__ _ |||_|||_\\|/"[i%4*4,4])[2..-2]                                 #join the middle parts of the keys with ends. truncate spurious outer ends before printing.
}

13

C #, 357 ไบต์ (เมื่ออยู่ในหนึ่งบรรทัดและรวมคำแนะนำส่วนใหญ่ไว้ด้วย)


var s="";
foreach(var r in@"`|1|2|3|4|5|6|7|8|9|0|-|=|BS   ~TAB  |Q|W|E|R|T|Y|U|I|O|P|[|]|\~CAPS  |A|S|D|F|G|H|J|K|L|;|'|ENTER~SHIFT   |Z|X|C|V|B|N|M|,|.|/|SHIFT   ".Split('~'))
for(int i=0;i<4;s+=i>0?"|\n":"\n",i++)
foreach(var k in r.Split('|'))
{
var u=new string('_',k.Length+1);
s+=i<1?" "+u+"__"
:i<2
?"||"+k+" |"
:i<3
?"||"+u+"|"
:"|/"+u+@"\";
}
Console.Write(s);

หรือ 353 ที่มีการแก้ไขสตริงและคำแนะนำอื่น ๆ ทั้งหมด

var s="";foreach(var r in@"`|1|2|3|4|5|6|7|8|9|0|-|=|BS   ~TAB  |Q|W|E|R|T|Y|U|I|O|P|[|]|\~CAPS  |A|S|D|F|G|H|J|K|L|;|'|ENTER~SHIFT   |Z|X|C|V|B|N|M|,|.|/|SHIFT   ".Split('~'))for(int i=0;i<4;s+=i>0?"|\n":"\n",i++)foreach(var k in r.Split('|')){var u=new string('_',k.Length+1);s+=i<1?$" {u}__":i<2?$"||{k} |":i<3?$"||{u}|":$@"|/{u}\";}Console.Write(s);

Ungolfed (ไม่มีการแก้ไขสตริง):

var solution = "";
foreach (var row in @"`|1|2|3|4|5|6|7|8|9|0|-|=|BS   ~TAB  |Q|W|E|R|T|Y|U|I|O|P|[|]|\~CAPS  |A|S|D|F|G|H|J|K|L|;|'|ENTER~SHIFT   |Z|X|C|V|B|N|M|,|.|/|SHIFT   ".Split('~'))
for (int i = 0; i < 4; solution += i > 0 ? "|\n" : "\n", i++)
foreach (var key in row.Split('|'))
{
   var underscores = new string('_', key.Length + 1);
   solution += i < 1 ? " " + underscores + "__"
                     : i < 2
                     ? "||" + key + " |"
                     : i < 3
                     ? "||" + underscores + "|"
                     : "|/" + underscores + @"\";
}
Console.Write(solution);

5
คุณสามารถบันทึกจำนวนไบต์การฟอร์แมทโค้ดกอล์ฟเป็นหนึ่งบรรทัด:foreach(var r in q){for(int i=0;i<4;i++){foreach...
Mario

1
@ มาริโอฉันเพิ่งตรวจสอบจำนวนไบต์ค่าที่กำหนดเป็นจำนวนจริงโดยไม่ต้องขึ้นบรรทัดใหม่ดังนั้นจึงได้ดำเนินการทางเทคนิคแล้ว
Alfie Goodacre

1
เบี่ยงซ้ายเล็กน้อยได้ 397 ไบต์โดยใช้การแก้ไขและแทนที่==ด้วย< s+=i<1?$" {u}__":i<2?$"||{k.PadRight(l)}|":i<3?$"||{u}|":$"|/{u}\\";
Alfie Goodacre

ขอบคุณ @Alfie Goodacre ฉันแทนที่ '==' ด้วย '<' ตามคำแนะนำของคุณ ฉันออกจากการแก้ไขเพื่อให้เป็นรุ่นที่เฉพาะเจาะจงน้อยลง
Klinger

@Klinger ฉันเห็นด้วยการแก้ไขไม่ได้ทำงานกับคอมไพเลอร์ออนไลน์ใด ๆ เพื่อให้เป็นทางเลือกที่ดี!
Alfie Goodacre

10

PowerShell v2 +, 465 ไบต์

($b=($a=' ____')*10)+$a*3+" "+($d='_'*8)
"||``@$(1..9-join'@')@0@-@=@BS    ||
||$(($f=,'__'*10-join'#'))#__#__#__#$(($g='_'*6))||
$(($c=($e='|/__\')*10))$e$e$e|/$g\|
 $d$b$a$a$a
||TAB  @Q@W@E@R@T@Y@U@I@O@P@[@]@\ ||
||$g#$f#__#__#__||
|/$g\$c$e$e$e|
 _$d$b$a $d
||CAPS  @A@S@D@F@G@H@J@K@L@;@'@ENTER ||
||_$g#$f#__#$g||
|/_$g\$c$e|/$g\|
 ___$d$b ___$d
||SHIFT   @Z@X@C@V@B@N@M@,@.@/@SHIFT    ||
||___$g#$f#___$g||
|/___$g\$c|/___$g\|"-replace'@',' #'-replace'#','|||'

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

มันเป็นแค่สตริงหลายบรรทัดขนาดยักษ์ที่มีตัวแปร ( $aและสิ่งที่คล้ายกัน) แทนการใช้สตริงย่อยต่าง ๆ และคู่-replaceสุดท้ายจะเสร็จสิ้น บล็อกสคริปต์$(...)จะถูกแทรกเมื่อจำเป็นเพื่อแนะนำตัวแปรใหม่

ลองออนไลน์!


7

Python, 493 458 Bytes

k=[['|']*75 for i in [0]*16]
v=' '
w='_'
y=0
def a(s,x,o):k[y+o][x:x+len(s)]=list(s)
def p(s,i,x):a(s+v*(i-len(s)),x+2,1);a(v+w*(i+2)+v,x,0);a(w*i,x+2,2);a(w*i,x+2,3);a('/',x+1,3);a('\\',x+i+2,3);return x+i+3
def q(s,x):return reduce(lambda a,b:p(b,2,a),list(s),x)
p('BS',6,q('`1234567890-=',0))
y=4
q('QWERTYUIOP[]\\',p('TAB',6,0))
y=8
p('ENTER',6,q('ASDFGHJKL;\'',p('CAPS',7,0)))
y=12
p('SHIFT',9,q('ZXCVBNM,./',p('SHIFT',9,0)))
for l in k:print''.join(l)

ทำหน้าที่เทียบเท่า แต่อ่านได้ค่อนข้างมาก:

k=[['|']*75 for i in range(16)]
def a(s,x,y):k[y][x:x+len(s)]=list(s)
def p(s,i,x,y):
    a(s+' '*(i-len(s)),x+2,y+1)
    a(' '+'_'*(i+2)+' ',x,y)
    a('_'*i,x+2,y+2)
    a('_'*i,x+2,y+3)
    k[y+3][x+1]='/'
    k[y+3][x+i+2]='\\'
    return x+i+3
def q(s,x,y):return reduce(lambda a,b:p(b,2,a,y),list(s),x)
p('BS',6,q('`1234567890-=',0,0),0)
q('QWERTYUIOP[]\\',p('TAB',6,0,4),4)
p('ENTER',6,q('ASDFGHJKL;\'',p('CAPS',7,0,8),8),8)
p('SHIFT',9,q('ZXCVBNM,./',p('SHIFT',9,0,12),12),12)
for l in k:print ''.join(l)

น่าเสียดายที่คำตอบของ Lua นั้นมีความยาวเกินกว่าที่กำหนดไว้แล้ว


คุณสามารถใส่บรรทัดในpฟังก์ชั่นหนึ่งบรรทัดคั่นด้วยเครื่องหมายอัฒภาค นอกจากนี้ฉันคิดว่าคุณไม่สามารถสร้างบรรทัดแรกk=[['|']*75]*16คุณรู้หรือไม่ว่าทำไม
nedla2004

นอกจากนี้คุณยังสามารถกำหนด'_'และ' 'ตัวแปรเพื่อบันทึกบางไบต์
nedla2004

ขอบคุณสำหรับเคล็ดลับ! ฉันคิดว่า k = [['|'] * 75] * 16 สร้างการอ้างอิงสิบหกรายการไปยังอาร์เรย์เดียวกันดังนั้นการเปลี่ยนแปลงในหนึ่งบรรทัดจะส่งผลกระทบต่อผู้อื่นเช่นกัน
Cobi

เอาล่ะแล้วคุณอย่างน้อยสามารถเปลี่ยนแปลงไปrange(16) [0]*16
nedla2004

ปัญหาเล็ก ๆ ก็คือว่ารหัสของคุณไม่ได้ในทางเทคนิคผลิตออกขวา แต่คุณสามารถแก้ไขได้โดยการเปลี่ยนที่ไปfor l in k:print ' '.join(l) for l in k:print''.join(l)
nedla2004

7

PHP, 316 312 ไบต์

foreach([($s=str_split)("`1234567890-=")+[13=>"BS   "],["TAB  "]+$s("_QWERTYUIOP[]\\"),["CAPS  "]+$s("_ASDFGHJKL;'")+[12=>ENTER],[$h="SHIFT   "]+$s("_ZXCVBNM,./")+[11=>$h]]as$r)for($y=-1;$y++<3;)foreach($r as$i=>$k)echo["\n".$a="| "[!$y]][$i],"_||/"[$y],str_pad($y-1?_:$k,strlen($k)+1,$y-1?_:" "),"_||\\"[$y],$a;

ฉันค่อนข้างมั่นใจว่าวิธีการนี้ไม่สามารถตีกอล์ฟได้อีกต่อไป แต่ถ้าใครพบ 10 ไบต์เพิ่มเติม ... : D ทำงานด้วย
-r

ชำรุด

foreach([                       // loop through rows
    ($s=str_split)("`1234567890-=")+[13=>"BS   "],
    ["TAB  "]+$s("_QWERTYUIOP[]\\"),
    ["CAPS  "]+$s("_ASDFGHJKL;'")+[12=>ENTER],
    [$h="SHIFT   "]+$s("_ZXCVBNM,./")+[11=>$h]
]as$r)
    for($y=-1;$y++<3;)          // loop through lines 0..3
        foreach($r as$i=>$k)    // loop through keys
            echo["\n".$a="| "[!$y]][$i],// first key in row: leading NL + space/pipe
                "_||/"[$y],             // key edges
                str_pad(
                    $y-1?_:$k,          // line 1: key label; else underscore
                    strlen($k)+1,       // pad to length+1
                    $y-1?_:" "),        // with spaces for label, underscores else
                "_||\\"[$y],            // more key edges
                $a                      // joining edges
            ;

6

Bash (บน OSX), 12 8 + 221 + 1 = 234 230 ไบต์

ใช่ฉันรู้ว่าการบีบอัด แต่มันใช้ได้ใช่ไหม

gunzip<f

ต้องการไฟล์ชื่อ "f" ในไดเรกทอรีปัจจุบันที่มีเนื้อหาดังต่อไปนี้ (ใส่ลงใน base64 สำหรับการจ่ายต่อหนึ่งคลิกง่าย - คุณสามารถถอดรหัสไฟล์นี้เป็นไฟล์ "f" ก่อน):

H4sIAHbPT1gAA63TuQ6CQBCA4Z6noLPxvo2xALwPPMAbsz7IPLz8i2aN7TjFFxo2mT+7vsnH12I/PJGnLyINaEIL2tCBLvSgDwOoQwVGECZ+PiL5WcaIFoazasZkWphMPLeumnzHNAjturKHM0zgAClc4QgL2MIO7vCA7NOrWFcdznPrqsO5Xn+5X1GwS4pgASQwhinMYA5LWMEahlCydeN0cvju9a/7pQ72e790sd69kvlimhYvSm5wgQhO9rlBDBsoQxVqNq/72/VSxfrppYpV9HoBoNfjQcAEAAA=

4
สามารถทำนิด ๆ gunzip<fสั้นโดยการเขียน
Konrad Rudolph

@ KonradRudolph จุดที่ดีเยี่ยม ขอบคุณ
Addison Crump

คุณสามารถบันทึก 2 ไบต์ด้วยzcat fและ 2 ไบต์โดยการลบสอง null null ต่อท้าย (gzip บ่น แต่สร้างผลลัพธ์ที่ต้องการ)
Gilles

@Gilles ไม่ได้ช่วยฉันทีไบต์ - ฉันต้องเปลี่ยนชื่อไฟล์ "fZ" (อย่างน้อย OSX) การลบค่า null ต่อท้ายไม่เพียง แต่ทำให้ gzip บ่นเท่านั้น แต่ยังทำให้เกิดข้อผิดพลาดและไม่พิมพ์อะไร
Addison Crump

@VoteToClose โอ้ถูกต้องzcat<fแล้ว บน Linux, zcat ที่ไม่มีเลขศูนย์ต่อท้ายทำให้ gzip บ่น (“ gzip: stdin: จุดสิ้นสุดไฟล์ที่ไม่คาดคิด”) แต่หลังจากพิมพ์ผลลัพธ์ที่ต้องการแล้ว
Gilles

5

JavaScript (ES6), 286

ฟังก์ชั่นที่ไม่ระบุชื่อโดยไม่มีพารามิเตอร์

_=>[..."`1234567890-=~~QWERTYUIOP[]\\~ASDFGHJKL;'~~ZXCVBNM,./~"].map(x=>(o+=`/${b='_'.repeat(w=x<y?2:' 667699'[x=["BS","TAB","CAPS","ENTER"][p++]||'SHIFT',p])}\\|`,m+=y+(x+'    ').slice(0,w)+y+y,n+=y+b+y+y,l+=' __'+b)[73]&&(k.push(l,m,n,o),l='',m=n=o=y),m=n=o=y='|',p=l=k=[])&&k.join`
`

น้อย golfed

_=>[..."`1234567890-=~~QWERTYUIOP[]\\~ASDFGHJKL;'~~ZXCVBNM,./~"]
  .map(x=>
      (
        w = x < y // special chars are marked '~' that is > '|'
            ? 2 // normal key, width 2
            : ( // else special key, set x and width
                // p should be incremented at next step, but I need to make it numeric as it starts as []
                x = ["BS","TAB","CAPS","ENTER"][p++]||'SHIFT',
                ' 667699'[p], // value for w (note p is off by 1)
              ),
        b = '_'.repeat(w), // bottom border (and top, almost)
        o +=`/${b}\\|`, //  line 4
        n += y+b+y+y,   //  line 3
        m += y+(x+'    ').slice(0,w)+y+y, // line 2
        l += ' __'+b    // top line, the border must be longer
      )[70] && // check if at end of row (check position in l)
         (
            k.push(l, m, n, o), // add lines to list
            l = '', // reset all
            m = n = o = y
         )
    , // initial setup
    // y stays fixed to '|', lines 2,3,4 start as '|'
    m = n = o = y ='|',
    // k is the lines array, l will become as string and starts empty
    // p is the index of current special key and will become numeric
    p = l = k = [] 
  ) 
  && k.join`\n` // return lines as a single string

F=_=>[..."`1234567890-=~~QWERTYUIOP[]\\~ASDFGHJKL;'~~ZXCVBNM,./~"].map(x=>(o+=`/${b='_'.repeat(w=x<y?2:' 667699'[x=["BS","TAB","CAPS","ENTER"][p++]||'SHIFT',p])}\\|`,m+=y+(x+'    ').slice(0,w)+y+y,n+=y+b+y+y,l+=' __'+b)[73]&&(k.push(l,m,n,o),l='',m=n=o=y),m=n=o=y='|',p=l=k=[])&&k.join`
`

O.textContent=F()
<pre id=O></pre>


5

Swift, 777 ไบต์

func b(_ c:String,_ d:Int,_ e:Int)->[String]{var f=Array(" __ |||||||||/\\|".characters),g=[String]()
for h in 0..<4{var i="";for j in e..<4{i.append(f[j+h*4])
if j==1{var k="_",l=0;if h==1{k=" ";l=c.characters.count;i += c}
for _ in l..<d{i+=k}}};g.append(i)};return g}
func c(_ d:String)->[(String,Int)]{return Array(d.characters).map{("\($0)",2)}}
func d(_ e:String,_ f:Int)->[(String,Int)]{return [(e,f)]}
var e=[c("`1234567890-=")+d("BS",6),d("TAB",6)+c("QWERTYUIOP[]\\")]
e+=[d("CAPS",7)+c("ASDFGHJKL;'")+d("ENTER",6),d("SHIFT",9)+c("ZXCVBNM,./")+d("SHIFT",9)]
var f="";for g in 0..<e.count{let h=e[g]
var i=[[String]]();for j in 0..<h.count{
let k=h[j],l=b(k.0,k.1,(j>0 ? 1:0));i.append(l)}
for k in 0..<4{if g>0||k>0{f+="\n"}
for l in i{f+=l[k]}}};print(f,separator:"")

สวิฟต์ไม่ใช่ภาษาที่ยอดเยี่ยมสำหรับการเล่นกอล์ฟดังนั้นการได้คำตอบที่น้อยที่สุดในปัจจุบัน (ที่เร็วเกินไป) จึงเป็นความท้าทายที่ดี!

Ungolfed:

func createKeyboard() {
    func createKey(_ text: String, _ middleWidth: Int, _ startingColumn: Int) -> [String] {
        var keyTempalte = " __ |||||||||/\\|"
        var keyTemplateCharacters = Array(keyTempalte.characters)

        var output = [String]()

        for y in 0 ..< 4 {
            var line = ""
            for x in startingColumn ..< 4 {
                line.append(keyTemplateCharacters[x + y*4])

                if x == 1 {
                    var spacingCharacter = "_"
                    var startingOffset = 0
                    if y == 1 {
                        spacingCharacter = " "
                        startingOffset = text.characters.count
                        line += text
                    }

                    for _ in startingOffset ..< middleWidth {
                        line += spacingCharacter
                    }
                }
            }
            output.append(line)
        }

        return output
    }

    func stringToCharacterStrings(_ str: String) -> [(String, Int)] {
        return Array(str.characters).map {("\($0)",2)}
    }

    func specialKey(_ str: String, _ middleWidth: Int) -> [(String, Int)] {
        return [(str, middleWidth)]
    }

    var keys = [stringToCharacterStrings("`1234567890-=") + specialKey("BS", 6),
                specialKey("TAB", 6) + stringToCharacterStrings("QWERTYUIOP[]\\")]
    keys += [specialKey("CAPS", 7) + stringToCharacterStrings("ASDFGHJKL;'") + specialKey("ENTER", 6),
                specialKey("SHIFT", 9) + stringToCharacterStrings("ZXCVBNM,./") + specialKey("SHIFT", 9)]

    var output = ""
    for r in 0 ..< keys.count {
        let row = keys[r]
        var rowKeys = [[String]]()
        for i in 0 ..< row.count {
            let elem = row[i]
            let key = createKey(elem.0, elem.1, (i>0 ? 1 : 0))
            rowKeys.append(key)
        }

        for y in 0 ..< 4 {
            if r > 0 || y > 0 {
                output += "\n"
            }

            for key in rowKeys {
                output += key[y]
            }
        }
    }

    print(output)
}

createKeyboard()

2
อย่างน้อยก็ไม่ใช่ applescript
Addison Crump

1
ตอนนี้ฉันต้องทำจาวาไม่ใช่ฉัน
CAD97

4

SOGL V0.12 , 131 128 127 ไบต์ ( แข่งขัน )

⅟]y‘9Δø∑"`ŗ0-=”čΚ"TAB  ”QWERTYUIOP[]\”č+"oF«▒Β²‘⁷Ο‘ASDFGHJKL;'”čΚ+"_№K³‘ZXCVBNM,./”č⁴++¹{"^쳑č;{U;"_||/”┼;{"_ŗ__”┼}"Ο  ψ¦℮³‘┼}O

SOGL มี2*2/และสิ่งที่แปลกประหลาด2/2*แต่สิ่งเหล่านั้นรู้สึกเหมือนเป็นตัวของตัวเองสำหรับความท้าทายนี้
ลองที่นี่!

...‘               push "BS   "                                            ["BS   "]
    9Δ             push an array of numbers up to 9                        ["BS   ", [1,2,3,4,5,6,7,8,9]]
      ø∑           join into a single string (without ø it results to 45)  ["BS   ", "123456789"]
        "`ŗ0-=”    push "`ŗ0-=" with ŗ replaced with the digits            ["BS   ", "`1234567890-="]
               č   chop that into an array of characters                   ["BS   ", ["`","1","2","3","4","5","6","7","8","9","0","-","="]]
                Κ  add the first "BS   " to the end of the array           [["BS   ","`","1","2","3","4","5","6","7","8","9","0","-","="]]

"TAB  ”            push "TAB  "                  [[..], "TAB  "]
       Q..P[]\”    push "QWERTYUIOP[]\"          [[..], "TAB  ", "QWERTYUIOP[]\"]
               č   chop that                     [[..], "TAB  ", ["Q","W","E","R","T","Y","U","I","O","P","[","]","\"]]
                +  prepend to the array "TAB  "  [[..], ["TAB  ","Q","W","E","R","T","Y","U","I","O","P","[","]","\"]]

"...‘             push "caps  "                       [.. , "caps  "]
     ⁷Ο‘          push "enter"                        [.. , "caps  ", "enter"]
        AL;'”     push "ASDFGHJKL;'"                  [.. , "caps  ", "enter", "ASDFGHJKL;'"]
             č    chop that                           [.. , "caps  ", "enter", ["A","S","D","F","G","H","J","K","L",";","'"]]
              Κ   append "enter" to the end of array  [.. , "caps  ", ["A","S","D","F","G","H","J","K","L",";","'","enter"]]
               +  prepend "caps  " to the array       [.. , ["caps  ","A","S","D","F","G","H","J","K","L",";","'","enter"]]

"..‘             push "shift   "                [..., "shift   "]
    ZM,./”       push "ZXCVBNM,./"              [..., "shift   ", "ZXCVBNM,./"]
          č      chop it                        [..., "shift   ", ["Z","X","C","V","B","N","M",",",".","/"]]
           ⁴     duplicate the shift            [..., "shift   ", ["Z","X","C","V","B","N","M",",",".","/"], "shift   "]
            ++   append and prepend the shifts  [..., ["shift   ","Z","X","C","V","B","N","M",",",".","/","shift   "]]
              ¹  get all the arrays into one big array
result: [[["BS   ","`","1","2","3","4","5","6","7","8","9","0","-","="], ["TAB  ","Q","W","E","R","T","Y","U","I","O","P","[","]","\"], ["caps  ","A","S","D","F","G","H","J","K","L",";","'","enter"], ["shift   ","Z","X","C","V","B","N","M",",",".","/","shift   "]]]
 - a 2D array of the keyboard characters

{                                    for each array in the array do
 "...‘                                 push " |||"
      č                                chop to chars
       ;                               get the main array ontop
        {                        }     for each string in the array
         U                               uppercase it (before lowercase was used for better compression)
          ;                              get the chopped array ontop
           "_||/”                        push "_||/"
                 ┼                       append vertically
                  ;                      get the string ontop
                   {       }             for each char in the string do
                    "_ŗ__”                 push "_ŗ__"
                          ┼                append vertically
                            "..‘         push "    _||\ |||"
                                ┼        append vertically-then horizontally
                                  O    output that in a newline

ว้าวนี่ช่างน่าประทับใจสุด ๆ ! ยังไม่มีใครจัดการเอาชนะฉันในงานนี้ได้ดีมาก! ฉันอาจพยายามทำให้ฉันสั้นลงหน่อย แต่ก็ไม่มีสัญญา ;)
DJMcMayhem

@dzamia ถึงแม้ว่ามันจะมีการแข่งขันกันในตอนนี้ แต่ฉันก็ได้รับคำตอบเมื่อมันไม่ใช่ ฉันควรสลับคำตอบหรือไม่
Magic Octopus Urn

@MagicOctopusUrn IMO มันขึ้นอยู่กับคุณแล้ว มีเหตุผลที่แนะนำให้ไม่ยอมรับคำตอบ: p
dzaima

แนะนำว่าอย่ายอมรับคำตอบ? โอ้ ... ยุติธรรมพอ จากนั้นฉันเดาว่าฉันจะหยุดรับคำตอบในอนาคตและทิ้งสิ่งต่าง ๆ ตามที่เป็นอยู่
Magic Octopus Urn

@ MagicOctopusUrn โอเคบางทีการไม่ยอมรับคำตอบนั้นเป็นเรื่องที่ถกเถียงกัน แต่ก็ยังเป็นแง่บวกที่สำคัญ
dzaima

4

Python 2, 394 388 380 ไบต์

k=[4]*13+[8],[8]+[4]*13,[9]+[4]*11+[8],[11]+[4]*10+[11];m='`1234567890-=*','*QWERTYUIOP[]*',"*ASDFGHJKL;'*",'*ZXCVBNM,./*';c,d,e,n,u=0,'','|','\n','_'
for a in 0,1,2,3:
 f=s=t=o='';x=0
 for y in k[a]:g=y-2;f+=' '+u*y;s+=e*2+m[a][x].replace('*','%s')+' |';t+=e*2+u*g+e;o+='|/'+u*g+'\\';x+=1
 d+=f+n+s+e+n+t+e+n+o+e+n
l='SHIFT   ';print d%('BS   ','TAB  ','\\','CAPS  ','ENTER',l,l)

เพียงสร้างสตริงขนาดใหญ่ที่แสดงถึงคีย์บอร์ดทั้งหมดแทนที่ * ด้วย% s สำหรับคีย์พิเศษจากนั้นใช้การจัดรูปแบบสตริงเพื่ออัปเดตพิเศษ

แก้ไข

ตอนนี้มีการขึ้นบรรทัดใหม่ที่ส่วนท้ายของผลลัพธ์ แต่ฉันไม่เห็นทุกที่ที่ไม่ได้รับอนุญาต

ลองออนไลน์!


ฉันคิดว่าคุณควรลบผลลัพธ์เนื่องจากไม่ได้เพิ่มสิ่งใดที่เกี่ยวข้อง
sergiol

1
@ sergiol - จุดดี ไม่ทราบว่า TIO ในขณะที่ทำการโพสต์ อัปเดตทันที
ElPedro

3

C #, 376 ไบต์ (เมื่ออยู่ในบรรทัดเดียว)


var s="";foreach(var r in@"`|1|2|3|4|5|6|7|8|9|0|-|=|BS   ~TAB  |Q|W|E|R|T|Y|U|I|O|P|[|]|\~CAPS  |A|S|D|F|G|H|J|K|L|;|'|ENTER~SHIFT   |Z|X|C|V|B|N|M|,|.|/|SHIFT   ".Split('~'))for(int i=0,l;i<4;i++){foreach(var k in r.Split('|')){l=k.Length+1;var u=new string('_',l);s+=i<1?" "+u+"__":i<2?"||"+k.PadRight(l)+"|":i<3?"||"+u+"|":"|/"+u+@"\";}s+=i>0?"|\n":"\n";}Console.Write(s);

สิ่งนี้มีพื้นฐานมาจากคำตอบ C # ของ Klinger ฉันไม่มีตัวแทนมากพอที่จะแสดงความคิดเห็นต่อคำตอบของเขา

ฉันสามารถลดขนาดรหัส Klinger ลงได้ 5 ไบต์โดยการแก้ไขลูป foreach เริ่มต้นและลบวงเล็บภายนอก

var s="";
foreach(var r in@"`|1|2|3|4|5|6|7|8|9|0|-|=|BS   ~TAB  |Q|W|E|R|T|Y|U|I|O|P|[|]|\~CAPS  |A|S|D|F|G|H|J|K|L|;|'|ENTER~SHIFT   |Z|X|C|V|B|N|M|,|.|/|SHIFT   ".Split('~'))
for(int i=0,l;i<4;i++)
{
foreach(var k in r.Split('|'))
{
l=k.Length+1;
var u=new string('_',l);
s+=i<1?" "+u+"__"
:i<2
?"||"+k.PadRight(l)+"|"
:i<3
?"||"+u+"|"
:"|/"+u+@"\";
}
s+=i>0?"|\n":"\n";
}
Console.Write(s);

Good one @Bence Joful ด้วยคำแนะนำของคุณฉันจะสามารถรับได้ที่ 367 ฉันไม่ได้รวมอยู่ในคำตอบปัจจุบัน
Klinger

ไม่สามารถต้านทาน คำแนะนำของคุณ + การเปลี่ยนแปลงเล็กน้อยเพิ่มเติมจะนำไปสู่ ​​361 (หรือ 358 พร้อมการแก้ไขสตริง)
Klinger

@Klinger - โปรดใช้การปรับแต่งของฉัน! ฉันได้รับแรงบันดาลใจให้เล่นกับมันตามงานของคุณ ฉันเรียนรู้บางอย่างเกี่ยวกับการเริ่มต้นในกระบวนการ
Bence Joful

คุณสามารถรวมโปรแกรมหนึ่งบรรทัดได้หรือไม่? คุณจะไม่สูญเสียความสามารถในการอ่านมากไปกว่ารุ่นปัจจุบันอย่างแน่นอน
Cyoce

@Cyoce คุณได้รับมันขอบคุณสำหรับคำแนะนำ แม้ว่าจะถึงจุดนี้ Klinger ได้โพสต์เวอร์ชันใหม่ที่เล็กกว่าซึ่งรวมการเปลี่ยนแปลงเหล่านี้ไว้แล้ว
Bence Joful

3

m4, 456

changequote({,})define(d,{define($@)})d(p,{patsubst($@)})d(a,{{_}p({$1},.,_)_ })d(b,{|$1||})d(c,{|p({$1},.,_)||})d(e,{/p({$1},.,_)\|})d(f,{ifelse(len({$2}),0,,{indir({$1},{$2})f({$1},shift(shift($@)))})})d(g,{ f({a},$@)
|f({b},$@)
|f({c},$@)
|f({e},$@)
})g(` ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,0 ,- ,= ,BS    )g(TAB   ,Q ,W ,E ,R ,T ,Y ,U ,I ,O ,P ,[ ,] ,\ )g(CAPS   ,A ,S ,D ,F ,G ,H ,J ,K ,L ,; ,' ,ENTER )g(SHIFT    ,Z ,X ,C ,V ,B ,N ,M ,{,} ,. ,/ ,SHIFT    )

Ungolfed:

changequote({,})dnl
define(key1, {{_}patsubst({$1}, ., _)_ })dnl _______ 
define(key2, {|$1||})dnl                     |TAB  ||
define(key3, {|patsubst({$1}, ., _)||})dnl   |_____||
define(key4, {/patsubst({$1}, ., _)\|})dnl   /_____\|
define(rkey, {dnl
ifelse(dnl
len({$2}), 0, ,dnl terminate on empty argument
{dnl
indir({$1}, {$2})dnl
rkey({$1}, shift(shift($@)))dnl
}dnl
)dnl
})dnl
define(row, {dnl
 rkey({key1}, $@)
|rkey({key2}, $@)
|rkey({key3}, $@)
|rkey({key4}, $@)dnl
})dnl
row(` ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,0 ,- ,= ,BS    )
row(TAB   ,Q ,W ,E ,R ,T ,Y ,U ,I ,O ,P ,[ ,] ,\ )
row(CAPS   ,A ,S ,D ,F ,G ,H ,J ,K ,L ,; ,' ,ENTER )
row(SHIFT    ,Z ,X ,C ,V ,B ,N ,M ,{,} ,. ,/ ,SHIFT    )

(นี่เป็นครั้งแรกที่ฉันทั้งการเล่นโค๊ดและลอง m4)


ไม่เลวสำหรับคำตอบแรก ยินดีต้อนรับสู่เว็บไซต์! :)
DJMcMayhem

3

ซ้อนกัน 228 ไบต์

ลองที่นี่!

[,{a:a size@n(' __' '_'n 1+:@k*LF'||'a' ' '|'LF'||' '_'k*:@o'|'LF'|/'o'\')sum}"!$hcat#/!' |||'hcat out]@:p$chars@:c'`1234567890-='c'BS   'p'TAB  ' 'QWERTYUIOP[]\'c p'CAPS  ' 'ASDFGHJKL;'''c,'ENTER'p'SHIFT   ':@q'ZXCVBNM,./'c,q p

หรือสามารถอ่านเพิ่มเติมได้เล็กน้อย:

{a:a size@n(' __' '_'n 1+:@k*LF'||'a' ' '|'LF'||' '_'k*'|'LF'|/' '_'k*'\')sum}"@:m
[,m$hcat#/!' |||'hcat out]@:p
'`1234567890-='chars'BS   'p
'TAB  ' 'QWERTYUIOP[]\'chars p
'CAPS  ' 'ASDFGHJKL;'''chars,'ENTER'p
'SHIFT   ':@q'ZXCVBNM,./'chars,q p

สิ่งนี้ทำงานได้โดยการกำหนดฟังก์ชั่นpที่ทำให้คีย์จากนั้นจึงhcatกดหลายคีย์


2

Haskell, 255

import Data.List;a#b=a++[b];e=" |||";s=map(:" ");k x=[e,"_||/"]++['_':c:"__"|c<-x]#"_||\\";t="SHIFT    ";main=mapM_ putStrLn$transpose.(#e).(k=<<)=<<[s"`1234567890-="#"BS    ","TAB   ":s"QWERTYUIOP[]\\","CAPS   ":s"ASDFGHJKL;'"#"ENTER ",t:s"ZXCVBNM,./"#t]

ในการหวนกลับคล้ายกับแนวคิดของคำตอบ Haskell นี้แต่ผลิตแป้นพิมพ์ ASCII และมีการเล่นกอล์ฟที่แตกต่างกันเล็กน้อย

จัดรูปแบบและเปลี่ยนชื่อ:

import Data.List

main :: IO ()
main = mapM_ putStrLn
  $ concatMap (transpose . (`append` end) . concatMap key)
  [ split "`1234567890-=" `append` "BS    "
  , "TAB   " : split "QWERTYUIOP[]\\"
  , "CAPS   " : split "ASDFGHJKL;'" `append` "ENTER "
  , shift : split "ZXCVBNM,./" `append` shift
  ]

key :: String -> [String]
key x
  = [end, "_||/"]
  ++ ['_' : c : "__" | c <- x]
  `append` "_||\\"

append :: [a] -> a -> [a]
append a b = a ++ [b]

split :: [Char] -> [String]
split = map (: " ")

end :: String
end = " |||"

shift :: String
shift = "SHIFT    "

2

tcl, 368

ตามที่นับโดยhttp://textmechanic.com/text-tools/basic-text-tools/count-characters-words-lines/พร้อมกับ "นับการแบ่งบรรทัดเป็นช่องว่าง" ตั้งค่าให้อยู่ตรง505 496 452 451 439 403 401 396 391 388 385 384 382 379 378 377 369 368

proc N x {split $x @}
proc M a\ b {string map $a $b}
regsub -all \[^@|] [set b [M [N {||||@|||@$@BS   @%@TAB  @&@CAPS @? @ENTER  @*@SHIFT   }] [regsub -all {[^@]} "`1234567890-=$@%QWERTYUIOP\[\]\\@&ASDFGHJKL;'?@*ZXCVBNM,./*" {||& ||}]]] _ f
lmap x [N [M {\\ _ / _ | \ } [set g [M {||_ |/_ _|| _\\|} [M {||| \\|/} $f]]]]] y [N $b] z [N $f] w [N $g] {puts "$x
$y
$z
$w"}

ตัวอย่าง: http://rextester.com/live/NTVAV88033

Ungolf:

ความร่วมมือสดบนhttp://rextester.com/live/UDO43692

regsub -all {(\S)} "`1234567890-=←\n%QWERTYUIOP\[\]\\\n⇩ASDFGHJKL;'↵\n⇧ZXCVBNM,./⇧" {||\1 ||} b
set b [string map {|||| |||  ← "BS   " % "TAB  " ⇩ "CAPS  " ↵ "ENTER" ⇧ "SHIFT   "} $b]

regsub -all {[^\n|]} $b _ f

set g [string map {||| \\|/} $f]
set g [string map {||_ |/_  _|| _\\|} $g]
set h [string map {\\ _ / _ | " "} $g]

set H [split $h \n]
set B [split $b \n]
set F [split $f \n]
set G [split $g \n]

lmap x $H y $B z $F w $G {
puts $x
puts $y
puts $z
puts $w
}

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

UPDATE 1:แทนที่forด้วยforeachเพราะภายหลังสร้างรหัสที่สั้นกว่า

UPDATE 2:แทนที่foreachด้วยlmapเพราะภายหลังสร้างรหัสที่สั้นกว่า

อัปเดต 3:โกนถ่านหนึ่งตัวเพราะฉันถูกแทนที่" "ด้วย\

อัปเดต 4:ในส่วนที่เกี่ยวกับความคิดเห็นแรกฉันเปลี่ยนอักขระตัวยึดตำแหน่ง Unicode บรรทัดแรกทั้งหมด 2 เป็น 1 ไบต์ ASCII

UPDATE 5: มีหลายputsบรรทัดในหนึ่งบรรทัดเท่านั้น

UPDATE 6:ใช้splitคำสั่งโดยตรงส่งคืนค่าการlmapโทรแทนที่จะใช้ตัวแปรลิสต์ระดับกลาง

อัพเดท 7:ENTERไม่จำเป็นต้องใส่เครื่องหมายคำพูด

UPDATE 8: string mapยาวพอและทำซ้ำหลาย ๆ ครั้งซึ่งมันคุ้มค่าที่จะใส่ในแค็ปซูลproc

UPDATE 9: split $x \nยาวพอและทำซ้ำหลายครั้งว่ามันคุ้มค่าที่จะสรุปในproc

ปรับปรุง 10:ใน "แทนที่" สตริงสามารถใช้&แทน\1เพราะในกรณีนี้ทั้งคู่เกิดขึ้นพร้อมกัน; ผลที่ตามมาของสิ่งนี้คือการกำจัด()สตริง "การจับคู่"

UPDATE 11:ใช้@แทน\nตัวแยกบรรทัดเพื่อใช้กับsplitคำแนะนำเพิ่มเติม แม้ว่าสตริง "การจับคู่" จะมีความยาวจาก\Sถึง[^@]มันจะจ่ายออกเนื่องจากจำนวนการทำซ้ำ

UPDATE 12:แทนที่แรกregsub"จับคู่" สตริง{[^@|]}โดย\[^@|]จะโกนตัวละครตัวหนึ่งออก น่าเสียดายที่ไม่สามารถทำเช่นเดียวกันกับวินาทีregsubได้เนื่องจากคำสั่งนั้นอยู่ภายในคู่ของ[]:(

UPDATE 13:โกนหนวดสองตัวป้อนอักขระโดยเน้นlmapเนื้อความด้วยหัวเรื่องของตัวเอง

UPDATE 14:ใช้การเรียกไปยังsplitโพรซีเดอร์ที่Nใช้แทนการโทรโดยตรงไปยังstring mapโพรซีเดอร์Nที่อนุญาตให้ย่อ 3 ตัวอักษร

ปรับปรุง 15:มีอักขระช่องว่างที่ไม่จำเป็น ลบออกเพื่อโกนทิ้งถ่านหนึ่งอัน

อัพเดท 16: set hสามารถฝังเพื่อกำจัดเพื่อกำจัด$hตัวละครตัวหนึ่ง

อัปเดต 17: set hสามารถลบคำสั่งได้จริง

UPDATE 18: การ putsโต้แย้งเปลี่ยนจาก...\n...\n...\n...รูปแบบเป็น

"...
...
...
..." 

รูป

ขอบคุณคนที่ช่วยให้ฉันสั้นลงโดยเฉพาะอย่างยิ่งความชั่วร้ายและแง่มุมของช่อง IRC!


คำตอบที่ดีและยินดีต้อนรับสู่เว็บไซต์! ฉันทำการแก้ไขเล็กน้อยในโพสต์ของคุณเพื่อให้จำนวนไบต์ปรากฏในส่วนหัวฉันหวังว่าคุณจะไม่สนใจ อย่างที่คุณรู้ฉันคิดว่านี่เป็นจริง469 ไบต์เนื่องจากอักขระบางตัวมีหลายไบต์ใน UTF-8 ฉันไม่รู้เกี่ยวกับ tcl มากนักใช้การเข้ารหัสที่กำหนดเองซึ่งเป็นหนึ่งไบต์หรือไม่
DJMcMayhem

@DJMcMayhem ฉันไม่ทราบว่ามันเป็นไปตามจำนวนไบต์แทนจำนวนตัวอักษร แต่มันไม่ใช่ปัญหาเพราะทุกอย่างที่เป็นสัญลักษณ์ไบต์เดียวที่ยังไม่ได้ใช้สามารถเป็นตัวยึดตำแหน่งและฉันก็ยังมีให้เลือกมากมาย
sergiol

@DJMcMayhem หลังจากแก้ไขแล้วปัญหาที่คุณรายงานไม่ได้หายไป!
sergiol

@DJMcMayhem ทำไม 401 ด้านบนจึงมีพื้นหลังสีเหลืองซักพัก
sergiol

2

tcl, 369

เริ่มต้นขึ้นในเวอร์ชัน sergiol ของ tcl
(โปรดทราบว่าช่องว่างด้านซ้ายจำนวนมากเป็นส่วนหนึ่งของ "ธรรมชาติ" ของ tcl)

lmap z {S R M} w {set "regsub -all" "string map"} {interp alias {} $z {} {*}$w};lmap x {"`1234567890-=¿BS   ¿" "¿TAB  ¿QWERTYUIOP\[\]\\" "¿CAPS  ¿ASDFGHJKL;'¿ENTER¿" "¿SHIFT   ¿ZXCVBNM,./¿SHIFT   ¿"} {S h [M {\\ _ / _ | \ } [S g [M {||_ |/_  _|| _\\|} [M {||| \\|/} [S f [R {[^\n|]} [S b [M {|||| |||} [R {¿(\S+\s*)¿|(.)} $x {||\1\2 ||}]]] _ ]]]]]];puts $h\n$b\n$f\n$g}

@muddyfish แก้ไขและแก้ไขแล้ว ขอบคุณ!
Alejandro Muzzachiodi

คุณสามารถย่อให้สั้นลงหากคุณแทนที่foreachเหตุการณ์ทั้งหมดโดยตรงlmap!
sergiol

พยายามใช้interp aliasวิธีการของคุณเพื่อทำให้เวอร์ชันของฉันสั้นลง แต่สิ่งที่สั้นที่สุดที่ฉันจะได้รับเมื่อทำคือ 398 :( rextester.com/live/NTVAV88033
sergiol

ความพยายามครั้งสุดท้ายของฉันฉันได้ 395:lmap z {S R M N} w {set "regsub -all" "string map" split} {interp alias {} $z {} {*}$w};lmap y [N [S b [M [N {||||@|||@$@BS @%@TAB @&@CAPS @? @ENTER @*@SHIFT } @] [R {[^@]} "`1234567890-=$@%QWERTYUIOP\[\]\\@&ASDFGHJKL;'?@*ZXCVBNM,./*" {||& ||}]]] @] z [N [S f [R {[^@|]} $b _]] @] w [N [S g [M {||_ |/_ _|| _\\|} [M {||| \\|/} $f]]] @] x [N [M {\\ _ / _ | \ } $g] @] {puts $x\n$y\n$z\n$w}
sergiol

คุณสามารถบันทึกหนึ่งอักขระถ้าคุณลบพื้นที่ที่ไม่จำเป็นเช่นในการอัปเดตล่าสุดของฉัน!
sergiol

2

C (gcc) , 378 342 330 ไบต์

-10 ไบต์ขอบคุณไปที่แมวป่า

แทงครั้งแรกที่มัน g () ซ้ำของแนะนำห้องสำหรับการปรับปรุง

แก้ไข: เราไปกันแล้ว

char*k[]={"eZXCVBNM,./e","cASDFGHJKL;'d","bQWERTYUIOP[]\\","`1234567890-=a","BS","TAB","CAPS","ENTER","SHIFT"},*s;f(w,i,j){for(i=4;i--;)for(j=4;j--;puts(""))for(s=k[i];w=*s>96?"FFGFI"[*s-97]-64:2,*s;)printf("%s%s%-*.*s%.2s",L" |"+(s++-k[i]?2:j<3),L"/||"+j,w,j<2?w:j^3?w>2?w:1:w+2,j^2?"___________":w>2?k[*s-93]:s,"\\||||| "+j*2);}

ลองออนไลน์!


1

Python 2, 672 ไบต์

การใช้สตริง zlib ที่ถูกบีบอัด:

print 'x\x9c\xad\xd3\xb9\x0e\x82@\x10\x80\xe1\x9e\xa7\xa0\xb3\xf1\xbe\x8d\xb1\x00\xbc\x0f<\xc0\x1b\xb3>\xc8<\xbc\xfc\x8bf\x8d\xed8\xc5\x17\x9a\xddd\xfe,\xbe\xc9\xc7\xd7b?<\x91\xa7/"\rhB\x0b\xda\xd0\x81.\xf4\xa0\x0f\x03\xa8C\x05F\x10&~>"\xf9]\xc6\x88\x16\x86\xbbj\xc6dZ\x98L<\xb7\xae\x9a|\xc74\x08\xed\xba\xb2\x873L\xe0\x00)\\\xe1\x08\x0b\xd8\xc2\x0e\xee\xf0\x80\xec\xd3\xabXW\x1d\xces\xeb\xaa\xc3\xb9^\x7fy_Q\xb0K\x8a`\x01$0\x86)\xcc`\x0eKX\xc1\x1a\x86P\xb2u\xe3tr\xf8\xee\xf5\xaf\xf7\xa5\x0e\xf6\xfb\xbet\xb1\xde\xbd\x92\xf9b\x9a\x16\x7f\x94\xdc\xe0\x02\x11\x9c\xec\xef\x061l\xa0\x0cU\xa8\xd9\xbc\xee\xb4\xeb\xa5\x8a\xf5\xd3K\x15\xcb\x9e~\x01r\xfc\xb9\xee'.decode('zlib')

2
นั่นคือ 672 ไบต์ไม่ใช่ 232 ไบต์
nneonneo

อธิบายเพิ่มเติมฉันไม่เข้าใจคุณ @nneonneo
อะไรก็ได้

1
หากคุณวางรหัสลงในไฟล์ไฟล์นั้นจะมีความยาว 672 ไบต์ คุณดูเหมือนจะนับรหัสของคุณlen("print 'x\x9c...'")ซึ่งจะเป็นการยกเลิกการเรียงภาพ\xส่งผลให้นับไบต์ไม่ถูกต้อง คุณสามารถรับจำนวนที่ถูกต้องได้ด้วยการนับด้วยlen(r"print 'x\x9c...'")แต่วิธีที่ง่ายที่สุดเช่นเคยคือดูว่าเครื่องมือแก้ไขข้อความหรือระบบไฟล์ของคุณพูดอะไร
nneonneo

1

Powershell, 249 242 ไบต์

"``1234567890-=Bs   
Tab  QWERTYUIOP[]\
Caps  ASDFGHJKL;'Enter
Shift   ZXCVBNM,./Shift   "-split'
'|%{($u=($r=,''+($_-csplit'(.[a-z ]*)'-ne''|% t*per)+'')-replace'.','_')-join'__ _'
$r-join' |||'
$u-join'_|||'
$u-join'_\|/'}|%{-join$_[2..76]}

Ungolfed & อธิบาย

middot ·ใช้ช่องว่างแทนเพื่อชี้แจงสตริงที่มา

"``1234567890-=Bs···
Tab··QWERTYUIOP[]\
Caps··ASDFGHJKL;'Enter
Shift···ZXCVBNM,./Shift···"-split"`n"|%{        # split the string with rows by new line
$r=,''+($_-csplit'(.[a-z ]*)'-ne''|% t*per)+''  # split each row by key labels (any char plus small letters or spaces), 't*per' is shortcut for toUpper method
$u=$r-replace'.','_'                            # replace any char to _ to take an upper 
$u-join'__ _'                                   # join labels and push 4 strings to pipe
$r-join' |||'
$u-join'_|||'
$u-join'_\|/'
}|%{
    -join$_[2..76]                              # return substring for each string
}

# $r =
# ["","`","1","2","3","4","5","6","7","8","9","0","-","=","BS   ",""]
# ["","TAB  ","Q","W","E","R","T","Y","U","I","O","P","[","]","\",""]
# ["","CAPS  ","A","S","D","F","G","H","J","K","L",";","'","ENTER",""]
# ["","SHIFT   ","Z","X","C","V","B","N","M",",",".","/","SHIFT   ",""]
# $u =
# ["","_","_","_","_","_","_","_","_","_","_","_","_","_","_____",""]
# ["","_____","_","_","_","_","_","_","_","_","_","_","_","_","_",""]
# ["","______","_","_","_","_","_","_","_","_","_","_","_","_____",""]
# ["","________","_","_","_","_","_","_","_","_","_","_","________",""]
# before substring:
# __ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________ _
#  |||` |||1 |||2 |||3 |||4 |||5 |||6 |||7 |||8 |||9 |||0 |||- |||= |||BS    |||
# _|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______|||
# _\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|/
# __ ________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ _
#  |||TAB   |||Q |||W |||E |||R |||T |||Y |||U |||I |||O |||P |||[ |||] |||\ |||
# _|||______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||
# _\|/______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/
# __ _________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________ _
#  |||CAPS   |||A |||S |||D |||F |||G |||H |||J |||K |||L |||; |||' |||ENTER |||
# _|||_______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______|||
# _\|/_______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|/
# __ ___________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___________ _
#  |||SHIFT    |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||SHIFT    |||
# _|||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________|||
# _\|/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|/
# final output:
#  ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
# ||` |||1 |||2 |||3 |||4 |||5 |||6 |||7 |||8 |||9 |||0 |||- |||= |||BS    ||
# ||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
# |/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
#  ________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
# ||TAB   |||Q |||W |||E |||R |||T |||Y |||U |||I |||O |||P |||[ |||] |||\ ||
# ||______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__||
# |/______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|
#  _________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
# ||CAPS   |||A |||S |||D |||F |||G |||H |||J |||K |||L |||; |||' |||ENTER ||
# ||_______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
# |/_______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
#  ___________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___________
# ||SHIFT    |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||SHIFT    ||
# ||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
# |/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|

พิเศษ: แป้นพิมพ์ที่มีแถบพื้นที่และป้ายกำกับชิดขวา 278 ไบต์

ฉันได้เพิ่มสองสามไบต์ในนิพจน์ปกติเพื่อจัดการ space bar (regexp เก่า(.[a-z ]*)อันใหม่~|(.[a-z ]*)) นั่นเป็นขั้นตอนเล็ก ๆ สำหรับ regexp หนึ่งก้าวกระโดดครั้งใหญ่สำหรับการแก้ปัญหา: ตอนนี้คุณสามารถแสดงแถบพื้นที่และป้ายกำกับคีย์ที่จัดชิดขวา (ดู SHIFT, CTRL และ BS ทางด้านขวาของคีย์บอร์ด)

"``1234567890-=~   bs
Tab  QWERTYUIOP[]\
Caps  ASDFGHJKL;'Enter
Shift   ZXCVBNM,./~   shift
Ctrl  Alt ~$(' '*34)Alt ~  ctrl"-split'
'|%{($u=($r=,''+($_-csplit'~|(.[a-z ]*)'-ne''|% t*per)+'')-replace'.','_')-join'__ _'
$r-join' |||'
$u-join'_|||'
$u-join'_\|/'}|%{-join$_[2..76]}

เอาท์พุท:

 ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||` |||1 |||2 |||3 |||4 |||5 |||6 |||7 |||8 |||9 |||0 |||- |||= |||   BS ||
||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
 ________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
||TAB   |||Q |||W |||E |||R |||T |||Y |||U |||I |||O |||P |||[ |||] |||\ ||
||______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__||
|/______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|
 _________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||CAPS   |||A |||S |||D |||F |||G |||H |||J |||K |||L |||; |||' |||ENTER ||
||_______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/_______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
 ___________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___________
||SHIFT    |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||   SHIFT ||
||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
|/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|
 _________ _______ _____________________________________ _______ _________
||CTRL   |||ALT  |||                                   |||ALT  |||  CTRL ||
||_______|||_____|||___________________________________|||_____|||_______||
|/_______\|/_____\|/___________________________________\|/_____\|/_______\|

0

/// , 360 ไบต์

/f/!!//e/SHIFT   //d/\/\///c/ "db/ 
\|\|da/\\\|d@/#####d?/__d>/?\\\\a
c"d</aa
ad:/fffff!d&/ccccd%/ aaad#/?aaa?aaad"/??d!/?\\\\a\\\d&&&cc"b`%1%2%3%4%5%6%7%8%9%0%-%=%BS    <|@#?|||"?<\/:f">&&&cbTAB  %Q%W%E%R%T%Y%U%I%O%P%[%]%\\ <|"@#?|||?<\/":f>_&&&"bCAPS  %A%S%D%F%G%H%J%K%L%;%'%ENTER <|"_@#"?<\/"_:!">?_&&ccc"?_be%Z%X%C%V%B%N%M%,%.%\/%e <|""_|||@""_<\/"?_:""_\a

ลองออนไลน์!


0

Mathematica 323 ไบต์

Uncompress@"1:eJyt00luwjAUgGE2vUdYsWGeEeoiUGYIEKcTTWXEBXqBd3jy26CUYWe/xads8iT/sounv1gFL4VCoLNxxnyk9UZT5BiISAOa0II2dKALPejDAOpQgVcYqSAbEbtOa3GFuayraZ2mPmWyL5bnIZyxR0/CkQkhe/iECcSQwDe8wwK2sIMf+IV/IW0H56LXkJej+016E9LXlRyHO2VLhqDgDaYwgzksYQVrGELJZI+SSXxX0uOV9Jry2Y10q5iHVPPFNLGvUw7wBWP4ME8XIthAGapQM93zv29COlV8DOkrol10BmvF28U="

น่าเบื่อและไม่สร้างสรรค์ สตริงเป็นเพียงเอาต์พุตของCompressคำสั่งในตัวที่ใช้กับเอาต์พุตที่ต้องการ


@ ลงคะแนนแล้วโปรดระบุว่ามีอะไรผิดปกติกับโปรแกรมของฉัน
เอียนมิลเลอร์

0

ภาษา Wolfram (Mathematica) , 293 ไบต์

c=##&@@(#|2&/@Characters@#)&
r=StringRiffle
p=StringPadRight
Print/@{j=p["",#2,"_"]&@@@#;(" __"<>#&/@j)<>" ",r[p@@@#,i={l="||","|||",l}],j~r~i,j~r~{"|/","\|/","\|"}}&/@{{c@"`1234567890-=","BS"|6},{"TAB"|6,c@"QWERTYUIOP[]\\"},{"CAPS"|7,c@"ASDFGHJKL;'","ENTER"|6},{h="SHIFT"|9,c@"ZXCVBNM,./",h}}

ลองออนไลน์!

ค่อนข้างตรงไปตรงมา: เข้ารหัสแถวของคีย์เป็นรายการ (key name)|(key width)

c=##&@@(#|2&/@Characters@#)&    (*converts a string into (key)|2 s*)
r=StringRiffle
p=StringPadRight
 Print/@
  {j=p["",#2,"_"]&@@@#;
   (" __"<>#&/@j)<>" ",         (*top of the keys*)
   r[p@@@#,i={l="||","|||",l}], (*key names*)
   j~r~i,                       (*space under key names*)
   j~r~{"|/","\|/","\|"}            (*bottom of the keys*)
  }
 &/@
{
 {c@"`1234567890-=","BS"|6},
 {"TAB"|6,c@"QWERTYUIOP[]\\"},
 {"CAPS"|7,c@"ASDFGHJKL;'","ENTER"|6},
 {h="SHIFT"|9,c@"ZXCVBNM,./",h}
}

0

Perl 5 -MList::Util=pairmap , 313 ไบต์

pairmap{$_=$b;s/\|{3}/|-|/g;y/-/_/c;y/-/ /;s/./ /;chop;say;$_=$b;for$r($a=~/./g){s/\| /|$r/}say;y/|/_/c;say;s,\|_,/_,g;s/_\|/_\\/g;say}"`1234567890-=",($;="||  |")x13 ."||BS    ||","QWERTYUIOP[]\\",'||TAB   |'.$;x13 .'|',"ASDFGHJKL;'","||CAPS   |".$;x11 ."||ENTER ||","ZXCVBNM,./",($s='||SHIFT    |').$;x10 ."$s|"

ลองออนไลน์!

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