Sebuah keyboard yang sangat nyata sehingga Anda hampir bisa MENGASATinya


126

... Bukannya kamu mau, kan? Tugasnya sederhana, mengeluarkan teks berikut:

 ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________ 
||` |||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    ||
||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
|/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|

Ini adalah papan ketik masa depan karena di ruang mendatang tidak relevan, demikian juga ruang angkasa.


Untuk mempermudah Anda:

  1. 0123456789ABC...XYZ-=[]\;',./ - Karakter ini ada pada kunci dengan panjang 6 (termasuk padding).
  2. TAB / BS / ENTER - Kunci-kunci ini memiliki panjang 10 (termasuk padding).
  3. CAPS - Kunci ini memiliki panjang 11 (termasuk padding).
  4. SHIFT - Kunci ini memiliki panjang 13 (termasuk padding, di kedua sisi).

Setiap kunci individual terlihat kurang lebih seperti ini:

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

Namun, Anda harus mencatat bahwa dua kunci berurutan tidak:

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

Tapi mereka "siam":

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

Tantangan ini seharusnya tidak terlalu buruk, semoga beruntung untuk Anda; jangan lewatkan penyalahgunaan repetisi! Tetapi jangan meremehkan kunci "spesial" juga;).


Kemenangan?

Kode terpendek menang karena lho.


49
Harus mengakui bahwa saya terkejut tidak banyak orang yang khawatir tentang keyboard futuristik yang tidak mengandung spasi ...
Magic Octopus Gn

97
Saya kira spasi bukan perbatasan terakhir setelah semua.
Greg Martin

48
"RASA" adalah kata dalam bahasa Jerman untuk "kunci" :)
QBrute

31
"RASA" adalah kata dalam bahasa Norwegia untuk "mengetik" :)
Stewie Griffin

32
Tapi ini kata bahasa Inggris untuk "rasa". Berikut .
Mr Lister

Jawaban:


117

V , 189, 179, 175, 164, 161, 157, 155, 149, 145, 141 , 135 byte

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

Cobalah online!

Jawaban ini sekarang tweetable!


Lihat saja! Ini adalah versi yang sedikit dimodifikasi yang diperbarui saat berjalan sehingga Anda dapat melihat bagaimana cara kerjanya. Ini adalah versi yang sudah ketinggalan zaman karena saya belum sempat merekamnya lagi, tetapi pendekatan umumnya sama.

Ini mungkin jawaban V terpanjang yang pernah ditulis. Jelas tidak membantu bahwa penerjemah V sangat lambat. Butuh waktu sekitar satu jam untuk menulis revisi pertama, tetapi saya telah berulang kali kembali ke sana untuk mencukur beberapa byte setiap kali. Karena keyboard lengkap adalah 1215 byte, saat ini jawaban ini 91% lebih pendek dari output, jadi saya cukup senang dengan hasilnya.

Karena ini berisi beberapa karakter yang tidak patut dicetak, dan banyak yang bukan ASCII, inilah 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

Bagaimana sih cara kerjanya?

Baiklah, penjelasan ini akan menjadi doozy. Anda siap? Pertama, kita perlu memasukkan huruf sehingga kita dapat membangun kunci di sekitarnya. Ini adalah

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

Yang menyisipkan:

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

Memasukinya cukup mudah, tetapi ada beberapa trik yang kami gunakan untuk menyimpan karakter. Misalnya, masukkan ¬19"123456789", ³masukkan tiga spasi, dan kami menduplikasi pergeseran sehingga kita tidak perlu memasukkannya beberapa kali.

Perhatikan bagaimana huruf-huruf kecil di sini. Ini agar kita dapat dengan mudah membedakan antara tombol huruf besar seperti "ENTER" dan huruf tunggal. Menulisnya dengan cara ini memudahkan untuk menentukan karakter mana yang akan ditempatkan sebelumnya, dan hanya menambahkan satu byte untuk mengubahnya menjadi huruf kecil nanti. Jadi kami melakukan perintah pengganti untuk mengubahnya menjadi huruf besar, dan menambahkan satu spasi setelah masing-masing:

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

Sekarang, kita mengambil setiap urutan kunci (sembarang spasi non-spasi), dan meletakkan tiga bar sebelum dan sesudahnya:

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

Pada titik ini, buffer terlihat seperti ini:

|||` |||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    |||

Memiliki tiga bilah pada kolom pertama dan terakhir sebenarnya sangat mudah dan akhirnya menghemat banyak byte dalam jangka panjang.

Dan di sinilah kita menjalankan satu lingkaran raksasa. Ini akan mengonversi sesuatu seperti ini:

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

menjadi sesuatu seperti ini:

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

Segala sesuatu di antara dua instance dari òakan berjalan hingga kesalahan terjadi, yang akan terjadi ketika kita mencoba untuk naik ke garis yang belum ada. Karena kami baru saja menjalankan perintah pengganti global , kursor kami ada di baris terakhir, dan kami akan mengubahnya menjadi lebih baik.

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

Ini adalah

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

baris.

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

Ini adalah

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

Baris.

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:
     _ _  "     '_ _'

Ini adalah:

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

Baris.

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

Sekarang kita memiliki keyboard lengkap, tetapi setiap baris berisi bar tambahan, garis miring ekstra (maju atau mundur), atau garis bawah ekstra. Memperbaiki super mudah

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

Setelah semua kegilaan itu, buffer dicetak secara implisit.


1
Tampaknya ada 4 garis bawah ekstra di ruang kosong di sebelah kanan output?
ErikE

7
Anda meremehkan betapa golfy jawaban ini sebenarnya adalah lol.
Magic Gurita Guci

1
@computercomputing Haha, saya kira Anda benar. Saya sangat bangga dengan jawaban ini dan bahasa saya menjadi satu-satunya jawaban yang mengalahkan permen karet. :)
DJMcMayhem

2
@DJMcMayhem Menandai Anda sebagai pemenang jika tidak ada yang mengalahkan Anda pada 1/3/2017;).
Magic Gurita Guci

7
Sejauh ini, ini adalah jawaban favorit saya di situs ini. Saya tidak bisa menghitung berapa kali saya menonton GIF.
Magic Gurita Guci

41

Lua 5.3, 416 394 Bytes.

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

Tidak disatukan dan dengan komentar.

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

Keluaran

 ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||` |||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    ||
||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
|/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|

Aku akan dihancurkan oleh bahasa lain, tapi kupikir aku akan mencoba ini. Jumlah kompleksitas yang bagus, dan setidaknya itu lebih pendek daripada keyboard!


15
Sekrup bahasa lain, Anda adalah yang pertama dalam bahasa langka! Mengesankan, meskipun saya yakin Anda pasti tidak perlu menempatkan pipa sebagai pembatas pada setiap huruf. Perhatikan bagaimana tombol "khusus" hanya di bagian depan dan ujung garis. Saya yakin petunjuk itu bisa menyelamatkan Anda byte yang berharga entah bagaimana.
Magic Gurita Guci

Versi Lua mana yang Anda gunakan? Pada Lua 5.1 itu memberi saya kesalahan sintaks: stdin: 1: nomor cacat dekat '2j'
brianush1

5
@ Brianush1 Lua 5.3, Memungkinkan konstanta angka untuk duduk di sebelah huruf apa pun yang bukan angka heksadesimal atau 'x' dalam kasus 0.
ATaco

29

Bubblegum , 191 byte

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......|.

Cobalah online!


1
Bubblegum tidak adil.
Joshua

7
@ Yosua ada baiknya menetapkan dasar untuk solusi. dan jika tidak ada yang bisa mengalahkan permen karet, itu masalah masalahnya.
Sarge Borsch

19

Haskell, 263 karakter (353 byte 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(:" ")

tangkapan layar keyboard itu

Karena telah ada banyak diskusi tentang skor berdasarkan karakter unicode ini ... inilah program yang sama, dikurangi menjadi all-ASCII:

Haskell, 263 karakter (263 byte 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
Keyboard Unicode? Pilihan yang menarik (huruf matematika tampak bagus di sana), tapi saya pikir itu melanggar aturan kompetisi.
Mario Carneiro

@MarioCarneiro Agar adil, itu tidak mempengaruhi panjang program sama sekali.
pydsigner

1
@pydsigner Ya, karena kata-kata seperti ENTERlebih panjang daripada karakter-karakter seperti ↩︎.
timothymh

5
Tapi Anda membandingkan ENTER dan ↩︎ , Lapisan spasi putih membuatnya sama panjang.
CodeMonkey

2
Sebenarnya, saya berharap unicode membuat program lebih lama dengan hitungan byte, karena unicode tinggi lebih banyak byte dalam UTF8 daripada ASCII.
Mario Carneiro

18

PHP, 303 byte

Malas tetapi efektif. :)

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

1
Bagus. Menjengkelkan, saya tidak bisa mendapatkan tingkat kompresi yang sama dengan kompres / gzip / bzip2 / 7z, jika tidak versi Bash akan lebih pendek. Seperti berdiri, itu pada 318 karakter.
Konrad Rudolph

14
Saya cukup yakin menggunakan algoritme kompresi eksternal yang tidak ada dalam program Anda atau setidaknya disukai. Itu mengalahkan tujuan pertanyaan.
Tidak ada yang

1
@KonradRudolph Seperti yang saya pahami, gzdeflate () menggunakan kompresi yang sama dengan baris perintah gzip tetapi melewatkan header file dan checksum sehingga selalu sedikit lebih pendek.
Alex Howansky

300 byte: <?=gzinflate(base64_decode('rdO5DoJAEIDhnqegs/G+jbHA+0QEvDHrg8zDy79EMbTDFF+3m8yfXdek42phHJG3KyItaEMHutCDPgxgCCNoQg0mMI3cdETSu4wRLQx3NYxJtDCJOL9t1cnSFWNvareVE1xhASHEcIczbOAIATzhBck3V7atupuTb6vulucq43XNvCDKenkQwRyWsII1bGEHexhDxcb140X4n6us16XuVXxdulZZrmi9WcbZd5IH3GAGF/vXwIcDVKEODVs3P53nUrUq5FK1sqc/'));. Kompresor: sandbox.onlinephpfunctions.com/code/… Dekompresor: sandbox.onlinephpfunctions.com/code/…
Ismael Miguel

4
@Nobody Tidak ada yang eksternal, gz adalah bagian dari kompilasi default PHP dan oleh karena itu secara implisit diizinkan.
Alex Howansky

18

Python 3.5+, 239 byte

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))

Apakah Python 3.5+ diperlukan untuk gambar percikan di dalam tuple, atau yang lainnya?
mbomb007

1
Anda dapat menyimpan satu byte jika Anda membalikkan konstruksi masing-masing tombol dan menggunakannya "".join(...) + f[0]di loop dalam. Mengganti formaturutan argumen dan masing-masing penampung dalam string juga menyimpan dua byte lagi.
dfernan

['{1}__ ','|{} ||','|{1}||','/{1}\\|']lebih pendek dari penggunaan split.
Alex Hall

16

Batch, 465 452 byte

@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

The :csubrutin menangani garis kunci. Keys yang mengandung spasi ekstra perlu dikutip, seperti melakukan =, ;, ,kunci, mungkin karena bug dalam shiftperintah. Parameter pertama dan terakhir adalah string _s dengan panjang yang sama dengan kunci pertama dan terakhir untuk membantu penggabungan. tkemudian berakhir sebagai _s umum untuk baris pertama, ketiga dan keempat, dengan #s menandai gabungan, yang diganti secara tepat sebelum karakter utama dan karakter tambahan ditambahkan, sedangkan sadalah baris kedua, tetapi dengan |s berubah menjadi !s saat mereka mengurangi jumlah "s yang saya butuhkan. Sunting: Disimpan 1 byte dengan mencetak keempat baris dalam satu pernyataan, dan 12 byte dengan mengoptimalkan cara saya menetapkan svariabel.


14

Ruby, 226 byte

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]}

Perbaikan sebagai berikut:

1.Tidak ada elemen string kosong di awal dan akhir array. Sebaliknya array rangkap tiga membuat 3 keyboard berdampingan. Setelah konversi ke string kami memiliki 3 keyboard dengan tepi luar hilang. Ini terpotong untuk hanya menampilkan yang tengah, lengkap dengan tepi.

2.Changed versi Ruby. Ideone yang digunakan, bukan 1.9.3 diinstal pada mesin saya. Ini berarti .chars.to_adapat disingkat menjadi adil .chars.

Ruby, 239 byte

Ada beberapa byte lagi yang bisa dimainkan. Akan terlihat besok.

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 byte (ketika dalam satu baris, dan memasukkan sebagian besar saran)


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);

Atau, 353 dengan interpolasi string dan semua saran lainnya

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);

Tidak dikumpulkan (tanpa interpolasi string):

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
Anda dapat menyimpan banyak byte memformat kode golf sebagai satu baris:foreach(var r in q){for(int i=0;i<4;i++){foreach...
Mario

1
@ Mario Saya baru byte memeriksanya, nilai yang diberikan sebenarnya adalah hitungan tanpa baris baru, sehingga secara teknis sudah dilakukan
Alfie Goodacre

1
Turun sedikit golf hingga 397 byte menggunakan interpolasi dan ganti ==dengan< s+=i<1?$" {u}__":i<2?$"||{k.PadRight(l)}|":i<3?$"||{u}|":$"|/{u}\\";
Alfie Goodacre

Terima kasih @ Alfie Goodacre. Saya mengganti '==' dengan '<' sesuai saran Anda. Saya meninggalkan interpolasi sehingga membuatnya kurang spesifik versi.
Klinger

@ Kinger Saya setuju, interpolasi tidak berfungsi pada kompiler online apa pun sehingga itu adalah pilihan yang baik!
Alfie Goodacre

10

PowerShell v2 +, 465 byte

($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'#','|||'

Saya agak malu untuk memposting jawaban ini, mengingat betapa pendeknya jawaban PHP dan Python, tidak pernah mengingat jawaban C #, tetapi saya tidak bisa mendapatkan metode ini lebih pendek. Pendekatan lain dapat memberikan hasil yang lebih baik.

Ini pada dasarnya hanya string multi-line raksasa, dengan variabel ( $adan sejenisnya) menggantikan berbagai substring, dan beberapa -replacedi akhir untuk menyelesaikannya. Blok skrip $(...)dimasukkan jika perlu untuk memperkenalkan variabel baru.

Cobalah online!


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)

Setara fungsional tetapi agak lebih mudah dibaca:

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)

Sayangnya itu sudah lebih lama dari jawaban yang diberikan di Lua.


Anda bisa meletakkan garis-garis dalam pfungsi pada satu baris yang dipisahkan oleh titik koma. Juga, saya pikir Anda tidak dapat membuat baris pertama k=[['|']*75]*16, apakah Anda tahu mengapa?
nedla2004

Anda juga dapat menentukan '_'dan ' 'ke variabel untuk menyimpan beberapa byte.
nedla2004

Terima kasih atas tipsnya! Saya pikir k = [['|'] * 75] * 16 menciptakan enam belas referensi ke array yang sama sehingga perubahan dalam satu baris mempengaruhi yang lain juga.
Cobi

Oke, maka Anda setidaknya bisa berubah range(16)menjadi [0]*16.
nedla2004

Masalah kecil adalah bahwa kode Anda secara teknis tidak menghasilkan output yang tepat, tetapi Anda dapat memperbaikinya dengan mengubahnya for l in k:print ' '.join(l)menjadi for l in k:print''.join(l).
nedla2004

7

PHP, 316 312 byte

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;

Saya cukup yakin bahwa pendekatan ini tidak bisa bermain golf lebih jauh. Tetapi jika ada yang menemukan 10 byte lagi ...: D
Jalankan dengan -r.

kerusakan

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 (pada OSX), 12 8 + 221 + 1 = 234 230 byte

Ya, saya tahu, kompresi. Tapi itu berhasil, bukan?

gunzip<f

Memerlukan file yang disebut "f" di direktori saat ini dengan konten berikut (dimasukkan ke base64 untuk keramahan PPCG - Anda dapat mendekode ini ke dalam file "f" terlebih dahulu.):

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

4
Bisa dibuat lebih singkat dengan menulis gunzip<f.
Konrad Rudolph

@KonradRudolph Poin luar biasa. Terima kasih.
Addison Crump

Anda dapat menyimpan 2 byte dengan zcat f, dan 2 byte dengan menghapus dua trailing null byte (gzip mengeluh tetapi menghasilkan output yang diinginkan).
Gilles

@Gilles Tidak benar-benar menyelamatkan saya byte - Saya harus mengubah nama file "fZ" (setidaknya pada OSX). Menghapus trailing null byte tidak hanya membuat gzip mengeluh - itu membuatnya kesalahan dan tidak mencetak apa pun.
Addison Crump

@VoteToTutup Oh, benar zcat<f. Di Linux, zcat tanpa trailing nol membuat gzip mengeluh ("gzip: stdin: akhir file yang tidak terduga") tetapi hanya setelah mencetak output yang diinginkan.
Gilles

5

JavaScript (ES6), 286

Fungsi anonim tanpa parameter

_=>[..."`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`
`

Kurang golf

_=>[..."`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 Bytes

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:"")

Swift umumnya bukan bahasa pilihan untuk bermain golf, jadi kurang dari dua kali lipat jawaban terkecil saat ini (yang cepat) adalah tantangan yang bagus di sini!

Tidak Terkumpul:

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
setidaknya itu bukan applescript
Addison Crump

1
Sekarang saya harus melakukan Java, bukan
CAD97

4

SOGL V0.12 , 131 128 127 byte ( bersaing? )

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

SOGL memang memiliki 2*2/and 2/2*quirks, tetapi mereka merasa terlalu banyak sebagai bawaan untuk tantangan ini.
Coba Di Sini!

...‘               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

Wow, ini sangat mengesankan! Belum ada yang berhasil mengalahkan saya dalam hal ini, pekerjaan yang sangat bagus! Saya mungkin mencoba untuk mendapatkan milik saya hanya sedikit lebih pendek, tetapi tidak ada janji. ;)
DJMcMayhem

@dzamia meskipun sedang bersaing sekarang, saya menerima jawaban saat ini tidak. Haruskah saya beralih jawaban?
Magic Octopus Urn

@MagicOctopusUrn IMO terserah Anda. Ada alasan yang disarankan untuk tidak menerima jawaban: p
dzaima

Disarankan untuk tidak menerima jawaban? Oh ... cukup adil. Maka saya kira saya akan berhenti menerima jawaban di masa depan dan membiarkan hal-hal apa adanya.
Magic Octopus Urn

@MagicOctopusUrn oke, mungkin tidak menerima jawaban agak kontroversial, tapi tetap saja, positif besar
dzaima

4

Python 2, 394 388 380 byte

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)

Buat saja string besar yang mewakili seluruh keyboard, ganti * dengan% s untuk tombol khusus lalu gunakan pemformatan string untuk memperbarui spesial.

Sunting

Sekarang memiliki baris baru di akhir output tetapi saya tidak melihat di mana pun itu tidak diperbolehkan.

Cobalah online!


Saya pikir Anda harus menghapus output, karena tidak menambah apa pun yang relevan.
sergiol

1
@sergiol - poin bagus. Tidak mengetahui TIO pada saat memposting. Sekarang diperbarui.
ElPedro

3

C #, 376 byte (bila dalam satu baris)


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);

Ini sepenuhnya didasarkan pada jawaban C # Klinger. Saya tidak punya cukup perwakilan untuk mengomentari jawabannya, kalau tidak saya akan.

Saya dapat menurunkan kode Klinger dengan 5 byte, dengan memodifikasi loop foreach awal, dan menghapus tanda kurung asing.

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);

Bagus @Bence Joful. Dengan saran Anda, saya akan dapat mencapai 367. Saya belum memasukkan jawaban saat ini.
Klinger

Tidak bisa menolak. Saran Anda + beberapa perubahan kecil tambahan menjadikannya 361 (atau 358 dengan interpolasi string).
Klinger

@ Kinger - tolong gunakan tweak saya! Saya terinspirasi untuk bermain-main berdasarkan pekerjaan Anda. Saya belajar sesuatu tentang inisialisasi dalam proses.
Bence Joful

Bisakah Anda memasukkan program satu baris? Anda tidak akan kehilangan banyak keterbacaan dibandingkan yang sekarang
Cyoce

@Cyoce, Anda mengerti, terima kasih atas sarannya. Meskipun pada titik ini, Klinger telah memposting versi baru yang lebih kecil yang menggabungkan perubahan ini.
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    )

Tidak Terkumpul:

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    )

(Ini sebenarnya pertama kalinya saya bermain golf kode dan mencoba m4.)


Tidak buruk untuk jawaban pertama. Selamat datang di situs ini! :)
DJMcMayhem

3

ditumpuk , 228 byte

Coba di sini!

[,{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

Atau, sedikit lebih mudah dibaca:

{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

Ini berfungsi dengan mendefinisikan fungsi pyang membuat kunci, lalu memasukkan hcatbeberapa kunci.


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]

Dalam retrospeksi, konsepnya mirip dengan jawaban Haskell ini , tetapi memproduksi keyboard ASCII, dan dengan golf yang sedikit berbeda.

Diformat dan diganti nama:

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

Seperti yang dihitung oleh http://textmechanic.com/text-tools/basic-text-tools/count-characters-words-lines/ dengan "Hitung garis terputus sebagai spasi." diaktifkan, menempati 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"}

Demo: http://rextester.com/live/NTVAV88033

Ungolf:

Kerja sama langsung di 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
}

Siapa pun gratis dan dapat meningkatkan versi saya di situs kerja sama langsung, tetapi tolong: jangan edit jawaban asli saya di sini; katakan saja Anda telah mengedit komentar dan orang-orang akan mengunjungi tautannya.

UPDATE 1: Diganti foroleh foreach, karena yang terakhir menghasilkan kode yang lebih pendek

UPDATE 2: Diganti foreacholeh lmap, karena yang terakhir menghasilkan kode yang lebih pendek

UPDATE 3: Mencukur satu char karena saya Diganti " "oleh\

UPDATE 4: Sehubungan dengan komentar pertama, saya mengubah semua karakter Unicode place byte 2 byte pertama menjadi ASCII byte 1 byte

UPDATE 5: beberapa putsbaris dibuat menjadi satu

UPDATE 6: gunakan splitperintah langsung mengembalikan nilai pada lmappanggilan alih-alih menggunakan variabel daftar perantara

UPDATE 7: Kutipan di sekitar ENTERtidak diperlukan

UPDATE 8: string map cukup lama dan diulang beberapa kali sehingga layak untuk dienkapsulasi dalam aproc

PEMBARUAN 9: split $x \n cukup lama dan diulang beberapa kali sehingga layak untuk dienkapsulasi dalam aproc

UPDATE 10: Pada "penggantian" string dapat digunakan &sebagai ganti \1, karena dalam hal ini keduanya bertepatan; Konsekuensi lain dari ini adalah memungkinkan untuk menghilangkan ()string "cocok".

UPDATE 11: Gunakan @bukan \nsebagai pemisah jalur untuk digunakan lebih lanjut pada splitpetunjuk. Meskipun string "cocok" memanjang dari \Suntuk [^@]itu terbayar, karena jumlah pengulangan

UPDATE 12: Mengganti regsubstring "cocok" pertama {[^@|]}dengan \[^@|]mencukur satu karakter. Sayangnya, tidak bisa melakukan hal yang sama ke yang kedua regsub, karena instruksi ada di dalam sepasang []:(

UPDATE 13: Mencukur dua karakter Masukkan dengan berkonsentrasi lmaptubuh dengan judulnya sendiri.

UPDATE 14: Menggunakan panggilan ke splitprosedur berbasis Nbukan panggilan langsung ke string mapprosedur berbasis Nyang memungkinkan untuk mempersingkat 3 karakter

UPDATE 15: Ada karakter spasi yang tidak dibutuhkan . Dihapus untuk mencukur satu arang.

UPDATE 16: set h dapat disematkan untuk menyingkirkan $h, untuk mencukur satu karakter.

UPDATE 17: set h pernyataan benar-benar dapat dicukur habis.

UPDATE 18: puts argumen berubah dari ...\n...\n...\n...format ke

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

format.

Terima kasih kepada orang-orang yang membantu saya mempersingkatnya, terutama evilotto dan aspek saluran IRC tcl!


Jawaban yang bagus, dan Selamat datang di situs! Saya melakukan sedikit perubahan pada posting Anda sehingga jumlah byte akan muncul di header, saya harap Anda tidak keberatan. Asal tahu saja, saya pikir ini sebenarnya 469 byte karena beberapa karakter tersebut adalah beberapa byte di UTF-8. Saya tidak tahu banyak tentang tcl, apakah itu menggunakan pengkodean kustom di mana mereka adalah satu byte?
DJMcMayhem

@DJMcMayhem Saya tidak tahu itu berdasarkan jumlah byte, bukan jumlah karakter tetapi itu bukan masalah karena semua yang merupakan simbol satu byte masih belum digunakan dapat menjadi placeholder dan saya masih memiliki banyak tersedia.
sergiol

@DJMcMayhem setelah edit saya, masalah yang Anda laporkan telah hilang!
sergiol

@DJMcMayhem Mengapa 401 di atas memiliki latar belakang kuning untuk beberapa waktu?
sergiol

2

tcl, 369

Awalnya berbasis di versi sergiol tcl.
(Perhatikan bahwa banyak ruang kiri adalah bagian dari "sifat" 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 Diedit dan diperbaiki. Terima kasih!
Alejandro Muzzachiodi

Anda dapat mempersingkat lebih banyak jika Anda langsung mengganti semua foreachkemunculan oleh lmap!
sergiol

Mencoba menggunakan interp aliaspendekatan Anda untuk mempersingkat versi saya, tetapi yang terpendek yang bisa saya dapatkan ketika melakukannya adalah 398 :( rextester.com/live/NTVAV88033
sergiol

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}
Percobaan

Anda dapat menyimpan satu char jika Anda menghapus ruang yang tidak dibutuhkan seperti di pembaruan terakhir saya!
sergiol

2

C (gcc) , 378 342 330 byte

-10 bytes berkat ceilingcat.

Tusukan pertama. G () yang diulang menyarankan ruang untuk perbaikan.

Sunting: Ini dia.

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);}

Cobalah online!


1

Python 2, 672 byte

Menggunakan string zlib terkompresi:

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
Itu 672 byte, bukan 232 byte.
nneonneo

Jelaskan lebih lanjut, saya tidak mengerti Anda. @nneonneo
Apapun

1
Jika Anda menempelkan kode Anda ke file, file itu akan menjadi 672 byte. Anda tampaknya telah menghitung kode Anda len("print 'x\x9c...'")yang akan menghapus \xs, menghasilkan jumlah byte yang salah . Anda dapat memperoleh hitungan yang benar dengan menghitung len(r"print 'x\x9c...'")tetapi solusi termudah, seperti biasa, adalah melihat apa yang dikatakan oleh editor teks atau sistem file Anda.
nneonneo

1

Powershell, 249 242 byte

"``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]}

Tidak Dijelaskan & Dijelaskan

Middot ·malah menggunakan spasi untuk mengklarifikasi string sumber.

"``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    ||
# ||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
# |/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|

Ekstra: keyboard dengan spasi & label selaras kanan, 278 byte

Saya telah menambahkan beberapa byte ke ekspresi reguler untuk menangani spasi (regexp lama (.[a-z ]*), baru ~|(.[a-z ]*)). Itu satu langkah kecil untuk regexp, satu lompatan raksasa untuk solusinya: Anda sekarang dapat menampilkan spasi dan label kunci yang selaras ke kanan (lihat SHIFT, CTRL dan BS di sisi kanan keyboard).

"``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]}

Keluaran:

 ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||` |||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 byte

/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

Cobalah online!


0

Mathematica 323 byte

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

Membosankan dan tidak kreatif. String hanyalah output dari Compressperintah bawaan yang diterapkan pada output yang diinginkan.


@Downvoted tunjukkan apa yang salah dengan program saya.
Ian Miller

0

Bahasa Wolfram (Mathematica) , 293 byte

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}}

Cobalah online!

Relatif mudah: mengkodekan baris kunci sebagai daftar (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 byte

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|"

Cobalah online!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.