O kadar gerçek ki bir klavye neredeyse TASTE


126

... Yapacağın şey değil, değil mi? Görev basit, aşağıdaki metni çıkar:

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

Bu geleceğin klavyesidir, çünkü gelecekteki alanlarda alakasız, yani boşluk çubukları da var.


İşleri biraz daha kolaylaştırmak için:

  1. 0123456789ABC...XYZ-=[]\;',./ - Bu karakterler 6 uzunluğunda tuşlarda bulunur (dolgu dahil).
  2. TAB / BS / ENTER - Bu tuşların uzunluğu 10'dur (dolgu dahil).
  3. CAPS - Bu anahtarın uzunluğu 11'dir (dolgu dahil).
  4. SHIFT - Bu anahtar 13 uzunluğundadır (her iki taraftaki dolgusu dahil).

Her bir anahtar, aşağı yukarı şuna benzer:

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

Ancak, iki ardışık tuşun olmadığını not etmelisiniz:

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

Ama onlar "yapışık":

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

Bu zorluk çok kötü olmamalı, size iyi şanslar; tekrarlamayı kötüye kullanmayı kaçırmayın! Ancak "özel" tuşları da küçümsemeyin;).


Kazanan?

En kısa kod kazanır çünkü bildiğiniz .


49
Kabul etmeliyim ki, birçok insan boşluk içermeyen fütüristik klavyelerden endişe duymuyor ...
Magic Octopus Urn

97
Her şeyden önce boşluklar son sınır değildi sanırım.
Greg Martin,

48
"TASTE", "anahtar" için Almanca kelimedir :)
QBrute

31
"TASTE", "yazarak" için Norveççe bir kelimedir :)
Stewie Griffin

32
Ama bu "lezzet" için İngilizce kelime. İşte .
Bay Lister,

Yanıtlar:


117

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

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

Çevrimiçi deneyin!

Bu cevap şimdi düzeltilebilir!


Çalıştırılmasını izleyin! Bu, çalıştıkça güncellenen biraz değiştirilmiş bir versiyondur, böylece nasıl çalıştığını öğrenebilirsiniz. Bu eski bir versiyon, çünkü henüz kayıt yapmak için uğraşmadım, ancak genel yaklaşım aynı.

Bu muhtemelen şimdiye kadar yazılmış en uzun V cevaptır. V'in yorumlayıcısının son derece yavaş olmasına kesinlikle yardımcı olmadı. İlk revizyonu yazmam bir saatimi aldı, ama her seferinde bir kaç byte'ı tıraş etmek için tekrar tekrar geliyorum. Tam klavye 1215 bayt olduğundan, şu anda bu cevap çıktıdan% 91 daha kısa, bu yüzden sonuçlardan oldukça memnunum.

Bu, bazı yazdırılamayan karakterler ve çok fazla ASCII olmayan brüt karakter içerdiğinden, burada bir 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

Nasıl çalışır?

Tamam, bu açıklama bir sersem olacak. Hazır mısın? Öncelikle, harfleri girmeliyiz ki anahtarların etrafına anahtarlar koyalım. Bu

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

Hangi ekler:

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

Oldukça basit bir şekilde giriyor, ancak karakterleri kaydetmek için kullandığımız birkaç püf noktası var. Örneğin, ¬19"123456789" ³girer, üç boşluk girer ve vardiyayı çoğaltırız, böylece defalarca girmemize gerek kalmaz.

Harflerin burada nasıl küçük harfle olduğuna dikkat edin. Bu, "ENTER" gibi büyük harf ve tek harfleri kolayca ayırt edebilmemiz içindir. Onları bu şekilde yazmak, hangi karakterlerin daha önce çıta koyması gerektiğini söylemeyi kolaylaştırır ve daha sonra küçük harfe dönüştürmek için yalnızca bir bayt ekler. Bu yüzden bunları büyük harfe dönüştürmek için bir değiştirme komutu yaparız ve her birine bir boşluk ekleriz:

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

Şimdi, her bir anahtar sırayı (herhangi bir boşluk olmayan çalıştırma) alır ve bunlardan önce ve sonra üç çubuk koyarız:

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

Bu noktada, arabellek şuna benzer:

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

İlk ve son sütunlarda üç çubuk olması aslında çok kullanışlıdır ve uzun vadede birçok bayttan tasarruf sağlar.

Ve işte biz burada dev bir döngü geçiriyoruz. Bu şunun gibi bir şeyi dönüştürür:

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

Bunun gibi bir şeye:

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

İki örnek arasındaki her òşey, bir hata oluşana kadar çalışacaktır; bu, henüz var olan bir çizgiye girmeye çalıştığımızda olacaktır. Global olarak bir değiştirme komutu çalıştırdığımızdan, imlecimiz son satırdadır ve bu şekilde çalışmamızı sağlarız.

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

Bu

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

hat.

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

Bu

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

Hat.

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

Bu:

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

Hat.

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

Şimdi tam klavyemiz var, ancak her satırda ekstra bir çubuk, fazladan bir eğik çizgi (ileri veya geri) veya fazladan bir alt çizgi var. Süper kolay düzeltme

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

Bütün bu delilikten sonra, tampon örtük olarak basılmıştır.


1
Çıktının sağ tarafındaki boş alanda 4 ekstra alt çizgi var mı?
ErikE

7
Bu cevabın aslında ne kadar golf olduğunu hafife alıyorsun.
Sihirli Ahtapot Urn

1
@ carusocomputing Haha, haklısın sanırım. Bu cevabım ve dilimin, tek cevabın kabarcıklı sesini yenmesi için gurur duyuyorum . :)
DJMcMayhem

2
@DJMcMayhem Kimse seni 1/3/2017;
Sihirli Ahtapot Urn

7
Bu arada, bu arada sitede en sevdiğim cevap. GIF’i kaç kez izledim sayamıyorum.
Magic Octopus Urn

41

Lua 5.3, 416 394 Bayt.

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

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

Çıktı

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

Diğer diller tarafından imha edileceğim, ama bunu bir şans vereceğimi düşündüm. Güzel miktarda karmaşıklık ve en azından klavyeden daha kısa!


15
Diğer dilleri boşver, nadir bir dilde ilk siz oldunuz! Etkileyici, her mektuba kesinlikle sınırlayıcı olarak boru koymanıza gerek olmadığından eminim. "Özel" tuşların sadece satırların önünde ve sonunda olduğuna dikkat edin. Eminim ipucu bir şekilde değerli baytları kurtarabilir.
Magic Octopus Urn,

Hangi Lua sürümünü kullanıyorsunuz? Lua 5.1'de bana bir sözdizimi hatası veriyor: stdin: 1: '2j' yakınında hatalı biçimlendirilmiş sayı
brianush1

5
@ Brianush1 Lua 5.3, Sayı sabitlerinin 0 olduğunda onaltılık basamak veya 'x' olmayan herhangi bir harfin yanına oturmasını sağlar. 0
ATaco

29

Bubblegum , 191 bayt

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

Çevrimiçi deneyin!


1
Bubblegum adil değil.
Joshua,

7
@Joshua, çözümler için bir temel oluşturmak iyidir. ve eğer hiçbir şey bubblegum'u yenemezse, bu problemin sorunu.
Sarge Borsch,

19

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

bu klavyenin ekran görüntüsü

Bu unicode karakterlerin ışığında skor hakkında çok fazla tartışma yapıldığı için ... işte aynı program, hepsi-ASCII'ye indirgenmiş:

Haskell, 263 karakter (263 bayt 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 klavye? İlginç bir seçim (güzel görünümlü matematik harfleri var), ancak rekabet kurallarını ihlal ettiğini düşünüyorum.
Mario Carneiro

@MarioCarneiro Adil olmak gerekirse, programın uzunluğunu hiç etkilemez.
pydsigner

1
@ pydsigner Yapar, çünkü gibi kelimeler ENTERkarakterlerden daha uzundur ↩︎.
Timothymh

5
Ama karşılaştırıyorsunuz ENTER ve ↩︎ Boşluk dolgusu onu aynı uzunlukta yapıyor.
CodeMonkey

2
Aslında, Unicode’un programı bayt sayısıyla daha uzun yapmasını bekliyorum, çünkü yüksek unicode UTF8’de ASCII’den daha fazla byte.
Mario Carneiro

18

PHP, 303 bayt

Tembel ama etkili. :)

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

1
Güzel. Can sıkıcı bir şekilde, sıkıştırma / gzip / bzip2 / 7z ile aynı seviyede sıkıştırma elde edemiyorum, aksi takdirde Bash sürümü çok daha kısa olacaktır. Olduğu gibi, bunun yerine 318 karakter.
Konrad Rudolph

14
Programınızda olmayan bir harici sıkıştırma algoritması kullanılması kesinlikle yasaklanmış ya da en azından kaşlarını çattı. Sorunun amacını yendi.
Hiç kimse

1
@KonradRudolph Anladığım kadarıyla, gzdeflate (), gzip komut satırıyla aynı sıkıştırmayı kullanır, ancak dosya başlığını ve sağlama toplamını atlar, böylece her zaman biraz daha kısa olur.
Alex Howansky,

300 bayt: <?=gzinflate(base64_decode('rdO5DoJAEIDhnqegs/G+jbHA+0QEvDHrg8zDy79EMbTDFF+3m8yfXdek42phHJG3KyItaEMHutCDPgxgCCNoQg0mMI3cdETSu4wRLQx3NYxJtDCJOL9t1cnSFWNvareVE1xhASHEcIczbOAIATzhBck3V7atupuTb6vulucq43XNvCDKenkQwRyWsII1bGEHexhDxcb140X4n6us16XuVXxdulZZrmi9WcbZd5IH3GAGF/vXwIcDVKEODVs3P53nUrUq5FK1sqc/'));. Kompresör: sandbox.onlinephpfunctions.com/code/… Dekompresör: sandbox.onlinephpfunctions.com/code/…
Ismael Miguel

4
@ Kimse harici bir şey yok, gz PHP'nin varsayılan derlemesinin bir parçası ve bu nedenle örtülü olarak izin veriliyor.
Alex Howansky,

18

Python 3.5+, 239 bayt

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+, tekillerin içindeki uyarılar veya başka bir şey için gerekli mi?
mbomb007

1
Her bir tuşun yapısını ters çevirir "".join(...) + f[0]ve iç döngüde kullanırsanız bir bayt kaydedebilirsiniz . Değişim formatargüman düzen ve dizede ilgili yer tutucular da iki bayt kaydeder.
dfernan,

['{1}__ ','|{} ||','|{1}||','/{1}\\|']kullanımından daha kısa split.
Alex Hall,

16

Toplu, 465 452 bayt

@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

Alt :cyordam, bir anahtar satırı yönetir. Fazladan boşluk içeren Anahtar, alıntılanan gerekmektedir yaptığı gibi =, ;, ,anahtarlar, muhtemelen bir hatadan shiftkomuta. İlk ve son parametreler _bitiştirmeye yardımcı olmak için ilk ve son anahtarla aynı uzunlukta s dizeleridir . tdaha sonra da sona erer _ile, birinci, üçüncü ve dördüncü sıralarının ortak s #ise, ilave edilir, ön ve arka karakterler önce uygun bir şekilde değiştirilir birleştirme işaretleme s, sikinci sıra, ancak ile |s olarak değiştirildi !da azalttığı s "İhtiyacım olan s sayısı . Düzenleme: Dört satırın tümünü tek bir ifadede yazdırarak 1 bayt, sdeğişkene atadığım yolu optimize ederek 12 bayt kaydedildi .


14

Ruby, 226 bayt

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

Aşağıdaki iyileştirmeler:

1. Dizinin başında ve sonunda boş dize öğeleri yok. Bunun yerine dizi yan yana 3 klavyeden üçe katlanır. Dizeye dönüştürüldükten sonra, dış kenarları eksik olan 3 klavyemiz var. Bu, yalnızca orta olanı görüntülemek için kesilir ve kenarlar tamamlanır.

2. Ruby'nin Değiştirilmiş versiyonu. Makineme yüklü 1.9.3 yerine Ideone kullandım. Bu .chars.to_asadece kısaltılabilir demektir .chars.

Ruby, 239 bayt

Bundan kurtulacak birkaç bayt daha var. Yarın bakacağım.

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 bayt (bir satırdayken ve çoğu önerileri içeren)


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

Veya, 353 string enterpolasyonu ve diğer tüm önerileri olan

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 (string enterpolasyonu olmadan):

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
Golf kodunu bir satır olarak biçimlendiren çok sayıda baytı kaydedebilirsiniz:foreach(var r in q){for(int i=0;i<4;i++){foreach...
Mario

1
@Mario sadece bayt kontrol ettim, verilen değer aslında yeni satır içermeyen sayımdır, bu yüzden teknik olarak zaten yapılmıştır
Alfie Goodacre

1
Enterpolasyon kullanarak ve ==onunla değiştirerek < s+=i<1?$" {u}__":i<2?$"||{k.PadRight(l)}|":i<3?$"||{u}|":$"|/{u}\\";
golfü

@Alfie Goodacre teşekkürler. Önerinize göre '==' yerine '<' yazdım. Daha az versiyona spesifik hale getirmek için enterpolasyonu bıraktım.
Klinger

@Klinger Katılıyorum, enterpolasyon hiçbir çevrimiçi derleyicide çalışmaz, bu yüzden bu iyi bir seçimdir!
Alfie Goodacre,

10

PowerShell v2 +, 465 bayt

($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 ve Python cevaplarının ne kadar kısa olduğu göz önüne alındığında, C # cevabını nihayetinde bu cevabı göndermekten utanıyorum, ancak bu yöntemi daha kısa tutamıyorum. Diğer yaklaşımlar daha iyi sonuçlar verebilir.

Temelde, sadece $açeşitli alt dizilerin yerine değişken ( ve benzeri) ikame edilmiş dev bir çok satırlı dize ve -replacebitirmek için sonunda bir çift var . $(...)Yeni değişkenleri tanıtmak için gerektiğinde script blokları eklenir.

Çevrimiçi deneyin!


7

Python, 493 458 Bayt.

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)

İşlevsel olarak eşdeğer ancak biraz daha okunaklı:

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)

Maalesef Lua'da verilen cevaptan daha uzun.


İşlevdeki satırları, pnoktalı virgüllerle ayrılmış bir satıra yerleştirebilirsiniz. Ayrıca, ilk sırayı yapamayacağını düşündüm, k=[['|']*75]*16nedenini biliyor musun?
nedla2004

Ayrıca bazı baytları kaydetmek için '_'ve ' 'bir değişken tanımlayabilirsiniz .
nedla2004

İpuçları için teşekkürler! Bence k = [['|'] * 75] * 16 aynı diziye on altı referans oluşturuyor, böylece bir satırdaki değişiklik diğerlerini de etkiliyor.
Cobi,

Tamam, o zaman en azından bir değişiklik olabilir range(16)için [0]*16.
nedla2004

Küçük bir sorun, kod teknik olarak doğru sonuç vermez, ancak değiştirerek düzeltmek olmasıdır for l in k:print ' '.join(l)için for l in k:print''.join(l).
nedla2004

7

PHP, 316 312 bayt

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;

Bu yaklaşımın daha fazla golf oynayamayacağından eminim. Ancak herhangi biri 10 bayt daha bulursa ...: D
Koşun -r.

Yıkmak

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’de), 12 8 + 221 + 1 = 234 230 bayt

Evet biliyorum, sıkıştırma. Ama işe yarıyor, değil mi?

gunzip<f

Geçerli dizinde şu içerikleri içeren "f" adlı bir dosya gerektirir (PPCG dostu olması için base64'e yerleştirin - bunu önce "f" dosyasının kodunu çözebilirsiniz.):

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

4
Yazarak önemsiz şekilde daha kısa yapılabilir gunzip<f.
Konrad Rudolph

@KonradRudolph Mükemmel nokta. Teşekkürler.
Addison Crump,

zcat fİki sonunda boş olan baytları kaldırarak 2 baytla ve 2 baytlarla tasarruf edebilirsiniz (gzip şikayet eder ancak istenen çıktıyı üretir).
Gilles,

@Gilles Beni bayt olarak kaydetmiyor - "fZ" dosyasını yeniden adlandırmam gerekiyor (en azından OSX'te). Sondaki boş baytları silmek sadece gzip'i şikayet etmekle kalmaz, hatayı giderir ve hiçbir şey yazdırmaz.
Addison Crump,

@VoteToClose Oh doğru, zcat<fo zaman. Linux'ta, izleyen sıfırlar olmadan zcat, gzip'in şikayet etmesine neden olur (“gzip: stdin: beklenmeyen dosyanın sonu”) ancak yalnızca istenen çıktıyı yazdırdıktan sonra.
Gilles,

5

JavaScript (ES6), 286

Parametresiz anonim bir işlev

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

Daha az golf oynadı

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

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, genellikle golf oynamak için mükemmel bir seçim dili değildir, bu nedenle mevcut en küçük cevabın iki katından daha az olması (hızlıydı) burada iyi bir meydan okumadır!

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
en azından el yazısı değil
Addison Crump,

1
Şimdi Java yapmak zorundayım değil mi?
CAD97

4

SOGL V0.12 , 131 128 127 bayt ( yarışıyor mu? )

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

SOGL'da 2*2/ve 2/2*tuhaflıkları var, ancak bunlar bu meydan okuma için bir yerleşik gibi hissediyorum.
Burada dene!

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

Vay, bu çok etkileyici! Henüz kimse bu konuda beni yenemedi, çok iyi iş! Benimkini biraz daha kısa tutmaya çalışabilirim ama söz vermedim. ;)
DJMcMayhem

@dzamia şu anda rekabet etse bile, bu olmadığı zamanki cevabı geri kabul ettim. Cevapları değiştirmeli miyim?
Magic Octopus Urn,

@MagicOctopusUrn IMO size kalmış. Cevapları kabul etmemenin önerilen bir nedeni var: p
dzaima

Cevap kabul etmemek önerildi mi? Oh ... yeterince adil. O zaman gelecekte cevapları kabul etmekten vazgeçeceğim ve her şeyi olduğu gibi bırakacağım.
Magic Octopus Urn

@MagicOctopusUrn tamam, belki cevapları kabul etmemek biraz tartışmalı, ama yine de büyük bir pozitif
dzaima

4

Python 2, 394 388 380 bayt

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)

Sadece tüm klavyeyi temsil eden büyük bir dize oluşturur, özel tuşlar için * yerine% s koyar ve özel harfleri güncellemek için dize biçimlendirmesini kullanır.

Düzenle

Şimdi çıktının sonunda takip eden bir yeni satır var, ancak izin verilen hiçbir yerde göremiyorum.

Çevrimiçi deneyin!


İlgili bir şey eklemediği için çıktıyı çıkarmanız gerektiğini düşünüyorum.
sergiol

1
@sergiol - iyi nokta. Gönderim sırasında TIO'nun farkında değildi. Şimdi güncellendi.
ElPedro

3

C #, 376 bayt (bir satırdayken)


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

Bu tamamen Klinger'in C # cevabına dayanmaktadır. Cevabını yorumlamak için yeterli temsilcim yok, aksi halde olur.

İlk foreach döngüsünü değiştirerek ve fazla köşeli parantezleri kaldırarak Klinger'in kodunu 5 byte kadar zayıflatabildim.

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

İyi biri @Bence Joful. Önerinle, 367’ye ulaşabilirim. Mevcut cevaba katılmadım.
Klinger

Direnemedi. Öneriniz + bazı ek küçük değişiklikler, onu 361'e (veya 356 dize enterpolasyonuna) getirir.
Klinger

@Klinger - lütfen tweaks'ımı kullan! İşine dayanarak onunla oynamak için ilham aldım. Bu süreçte ilklendirme hakkında bir şeyler öğrendim.
Bence Joful

Bir satırlık programı ekleyebilir misiniz? Şu anki
durumla ilgili

@Cyoce, anladınız, öneri için teşekkürler. Bu noktada, Klinger zaten bu değişiklikleri içeren yeni ve daha küçük bir versiyonunu yayınladı.
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    )

(Aslında bu ilk kez hem kod-golf oynuyorum, hem de m4'ü deniyorum).


İlk cevap için fena değil. Siteye Hoşgeldiniz! :)
DJMcMayhem

3

yığılmış , 228 bayt

Burada dene!

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

Veya biraz daha okunabilir:

{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

Bu p, bir anahtar yapan bir fonksiyon tanımlayarak ve sonra hcatbirden çok anahtar oluşturarak çalışır.


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]

Geçmişe bakıldığında, bu Haskell cevabına benzer bir kavram , ancak ASCII klavyeyi üretiyor ve biraz farklı golf oynuyor.

Biçimlendirildi ve yeniden adlandırıldı:

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/ ile "boşluk olarak sayma çizgileri" ile sayılır . Bu ayar, 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"}

Gösteri: http://rextester.com/live/NTVAV88033

İğneleyici:

Http://rextester.com/live/UDO43692 adresinde canlı işbirliği

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
}

Herkes ücretsizdir ve canlı işbirliği sitelerinde sürümümü geliştirebilir. yorumlarda düzenlediğinizi söyleyin, insanlar bağlantıları ziyaret edecek.

GÜNCELLEME 1:for Tarafından değiştirilir foreach, çünkü ikincisi daha kısa kod üretir

GÜNCELLEME 2:foreach Tarafından değiştirilir lmap, çünkü ikincisi daha kısa kod üretir

GÜNCELLEME 3:" " Tarafından değiştirilen bir karakter tıraş\

GÜNCELLEME 4: İlk yorum ile ilgili olarak, tüm 1. satır 2 bayt Unicode yer tutucu karakterlerini 1 bayt ASCII karakterleriyle değiştirdim

GÜNCELLEME 5:puts sadece bir taneye yapılan çoklu hat

GÜNCELLEME 6: ara liste değişkenleri kullanmak yerine doğrudan splitkomutları lmapçağrıda dönüş değerlerini kullanın

GÜNCELLEME 7: Etrafında tırnakENTER gerekmedi

GÜNCELLEME 8: string map yeterince uzun ve bir kapsüllenmeye değer olduğunu defalarca tekrarlananproc

GÜNCELLEME 9: split $x \n yeterince uzun ve birkaç kez bir kapsül içine almaya değer olduğunu defalarca tekrarladı.proc

GÜNCELLEME 10: "değiştirme" dizesinde &yerine kullanabilirsiniz \1, çünkü bu durumda ikisi de çakışmaktadır; Bunun bir başka sonucu ()da "eşleşen" dizgiden kurtulmaya izin vermesidir .

GÜNCELLEME 11: Talimatlarda daha fazla kullanmak için satır ayırıcı @yerine kullanın . "Maç" dizesi gelen uzatır rağmen hiç dolayı tekrar sayısı kadar amorti\nsplit\S[^@]

GÜNCELLEME 12: İlk Değiştirilen regsub"eşleşme" dizesini {[^@|]}tarafından \[^@|]bir karakter tıraş etmek. Ne yazık ki, ikincisine aynı şeyi yapamadı regsub, çünkü talimat bir çift içinde []:(

GÜNCELLEME 13:lmap Bedeni kendi başlığı ile yoğunlaştırarak iki Enter karakteri traş etti.

GÜNCELLEME 14: 3 karakter kısaltmaya izin veren temel prosedüre doğrudan çağrı yapmak yerine , splittemel prosedüre Nçağrı yapmakstring mapN

GÜNCELLEME 15: Gereksiz bir boşluk karakteri vardı. Bir char'ı tıraş etmek için çıkardı.

GÜNCELLEME 16: set h kurtulmak, $hbir karakteri tıraş etmek için gömülebilir .

GÜNCELLEME 17: set h deyimi gerçekten tıraş olabilir.

GÜNCELLEME 18: biçimden putsdize değiştirildi...\n...\n...\n...

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

biçim.

Kısaltmama yardım eden insanlara teşekkürler, özellikle de tcl IRC kanalının kötülük ve yönü!


Güzel cevap ve siteye hoş geldiniz! Gönderinizde küçük bir düzenleme yaptım, böylece bayt sayısı başlıkta görünecek, umarım sakıncası yoktur. Sadece biliyorsunuz, sanırım bu aslında 469 bayt, çünkü bu karakterlerin bazıları UTF-8'de çoklu bayt. Tcl hakkında pek bir şey bilmiyorum, bunların bir bayt olduğu özel bir kodlama kullanıyor mu?
DJMcMayhem

@DJMcMayhem Karakter sayısı yerine bayt sayımına dayandığını bilmiyordum, ancak sorun değil çünkü hala kullanılmayan bir bayt sembolü olan her şey bir yer tutucu olabilir ve hâlâ elimde çok şey var.
sergiol,

Düzenlememden sonra @DJMcMayhem, bildirdiğiniz sorun çözüldü!
sergiol,

@DJMcMayhem Neden üstte 401 bir süre sarı arka plana sahipti?
sergiol,

2

tcl, 369

Başlangıçta tcl's sergiol versiyonuna dayanıyor.
(Birçok sol alanın tcl'nin "doğasının" bir parçası olduğunu unutmayın)

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 Düzenlendi ve düzeltildi. Teşekkürler!
Alejandro Muzzachiodi

Tüm foreacholayları doğrudan değiştirirseniz daha fazla kısaltabilirsiniz lmap!
sergiol,

Sürümümüinterp alias kısaltmak için yaklaşımınızı kullanmaya çalıştım , ancak bunu yaparken elde edebileceğim en kısa süre 398 :( rextester.com/live/NTVAV88033
sergiol

Son denemem 395 oldu: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,

Son güncellememdeki gibi gereksiz bir alanı kaldırırsanız bir karakter kaydedebilirsiniz!
sergiol,

2

C (gcc) , 378 342 330 bayt

-Katıcı sayesinde 10 bayt.

Ona ilk bıçak. Tekrarlanan g () 'ler iyileştirme için oda önerir.

Düzenleme: İşte gidiyoruz.

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

Çevrimiçi deneyin!


1

Python 2,672 bayt

Sıkıştırılmış zlib dizesini kullanarak:

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
Bu 672 bayt, 232 bayt değil.
nneonneo

Daha fazla açıkla, seni anlamadım. @nneonneo
Whatever

1
Kodunuzu bir dosyaya yapıştırırsanız, bu dosya 672 bayt uzunluğunda olur. Yanlış bir bayt sayımıyla sonuçlanacak s kodunu len("print 'x\x9c...'")boşa çıkaracak kodunuzu saydınız . Sayma ile doğru bir sayım elde edebilirsiniz, ancak en kolay çözüm, her zaman olduğu gibi, metin editörünüzün veya dosya sisteminizin ne söylediğini görmektir. \xlen(r"print 'x\x9c...'")
nneonneo,

1

Powershell, 249 242 bayt

"``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 ve Açıklaması

Middot ·, kaynak dizgiyi netleştirmek için bunun yerine boşluk kullanır.

"``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: boşluk çubuğuna ve doğru hizalanmış etiketlere sahip klavye, 278 bayt

Boşluk çubuğunu işlemek için normal ifadeye bir kaç bayt ekledim (eski regexp (.[a-z ]*), yenisi ~|(.[a-z ]*)). Bu regexp için küçük bir adım, çözüm için dev bir adım: artık boşluk çubuğunu ve sağa hizalanmış anahtar etiketleri görüntüleyebilirsiniz (klavyenin sağ tarafındaki SHIFT, CTRL ve BS'ye bakınız).

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

Çıktı:

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

/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

Çevrimiçi deneyin!


0

Mathematica 323 bayt

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

Sıkıcı ve yaratıcı değil. Dize, sadece Compressistenen çıktıya uygulanan yerleşik komutun çıktısıdır.


@Olumsuz oy lütfen programımda neyin yanlış olduğunu belirtin.
Ian Miller

0

Wolfram Dili (Mathematica) , 293 bayt

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

Çevrimiçi deneyin!

Nispeten basit: Anahtarların satırlarını, listelerinin bir parçası olarak kodlar. (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 bayt

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

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.