키보드는 진짜이므로 거의 맛볼 수 있습니다


126

... 그렇지 않습니까? 작업은 간단하고 다음 텍스트를 출력합니다.

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

미래의 키보드는 미래의 공간과 관련이 없기 때문에 미래의 키보드입니다. 스페이스 바도 마찬가지입니다.


일을 조금 더 쉽게하려면 :

  1. 0123456789ABC...XYZ-=[]\;',./ -이 문자들은 길이가 6 인 키 (패딩 포함)에 있습니다.
  2. TAB / BS / ENTER -이 키의 길이는 10입니다 (패딩 포함).
  3. CAPS -이 키의 길이는 11입니다 (패딩 포함).
  4. SHIFT -이 키는 길이가 13입니다 (양쪽에 패딩 포함).

각 개별 키는 다음과 같이 다소 비슷합니다.

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

그러나 두 개의 연속 키는 다음과 같지 않습니다.

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

그러나 그들은 "결합"됩니다 :

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

이 도전은 너무 나쁘지 않아야합니다. 행운을 빈다. 반복을 남용하는 것을 놓치지 마십시오! 그러나 "특별한"키를 과소 평가하지 마십시오;).


승리?

가장 짧은 코드는 알고있는 이기 때문에 승리합니다 .


49
공백을 포함하지 않는 미래형 키보드에 대해 많은 사람들이 걱정하지 않는다는 사실에 놀랐습니다 ...
— Magic Octopus Urn

97
나는 공간이 결국 최후의 국경이 아니었다 고 생각한다.
— Greg Martin

48
"TASTE"는 "key"에 대한 독일어입니다 :)
— QBrute

31
"TASTE"는 "typing"의 노르웨이어입니다. :)
— Stewie Griffin

32
그러나 "맛"에 대한 영어 단어입니다. 여기에 .
— Mr Lister

답변:


117

V , 189, 179, 175, 164, 161, 157, 155, 149, 145, 141 , 135 바이트

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

온라인으로 사용해보십시오!

이 답변은 이제 트위스트 가능합니다!


달려 봐! 이 버전은 약간 수정되어 실행되면서 업데이트되므로 작동 방식을 확인할 수 있습니다. 이 버전은 아직 다시 녹음하지 않았기 때문에 오래된 버전이지만 일반적인 접근 방식은 동일합니다.

이것은 아마도 가장 긴 V 답변 일 것입니다. V의 인터프리터가 매우 느리다는 것을 확실히 도움이되지 못했습니다. 첫 번째 개정판을 작성하는 데 약 한 시간이 걸렸지 만 매번 몇 바이트를 줄이기 위해 반복해서 돌아 왔습니다. 전체 키보드는 1215 바이트이므로 현재이 답변은 출력보다 91 % 짧으므로 결과에 매우 만족합니다.

여기에는 인쇄 할 수없는 문자와 많은 비 ASCII가 포함되어 있으므로 다음은 16 진수 덤프입니다.

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

도대체 어떻게 작동합니까?

알겠습니다,이 설명은 두려운 것입니다. 당신 준비? 먼저 문자를 입력해야 주위에 키를 만들 수 있습니다. 이것은

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

어떤 인서트 :

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

꽤 간단하지만 문자를 저장하는 데 사용되는 몇 가지 트릭이 있습니다. 예를 들어 ¬19"123456789"를 ³입력하고 3 칸을 입력 한 다음 여러 번 입력 할 필요가 없도록 Shift를 복제합니다.

글자가 소문자인지 확인하십시오. "ENTER"와 같은 대문자 키와 한 글자를 쉽게 구별 할 수 있습니다. 이런 식으로 쓰면 어떤 문자를 앞에 놓을지를 쉽게 알 수 있으며 나중에 1 바이트 만 추가하여 나중에 소문자로 변환 할 수 있습니다. 따라서 대체 명령을 사용하여 이들을 대문자로 변환하고 각각 뒤에 공백을 하나씩 추가하십시오.

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

이제 각 키 시퀀스 (공백이 아닌 모든 실행)를 가져 와서 그 앞뒤에 세 개의 막대를 놓습니다.

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

이 시점에서 버퍼는 다음과 같습니다.

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

첫 번째와 마지막 열에 세 개의 막대가 있으면 실제로 매우 편리하며 장기적으로 많은 바이트를 절약 할 수 있습니다.

그리고 우리는 하나의 거대한 루프를 실행하는 곳입니다. 이것은 다음과 같은 것을 변환합니다 :

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

이런 식으로 :

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

두 인스턴스 사이의 모든 것은 ò오류가 발생할 때까지 실행되며, 아직 존재하지 않는 줄로 올라 가려고 할 때 발생합니다. 전역 대체 명령 을 방금 실행 했으므로 커서는 마지막 줄에 있으며 이러한 방식으로 작업을 변환합니다.

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

이것이

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

선.

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

이것이

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

선.

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

이것이:

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

선.

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

이제 전체 키보드가 있지만 각 줄에는 추가 막대, 추가 슬래시 (앞뒤로) 또는 추가 밑줄이 있습니다. 슈퍼 쉽게 수정

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

그 광기 후에 버퍼는 암시 적으로 인쇄됩니다.


1
출력 오른쪽의 빈 공간에 4 개의 추가 밑줄이 있습니까?
— ErikE

7
이 답변이 실제로 얼마나 골프인지 과소 평가하십시오.
— Magic Octopus Urn

1
@carusocomputing Haha, 당신이 옳은 것 같아요. 나는이 답변 과 내 언어가 풍선 껌을 때리는 유일한 답변이라는 것을 매우 자랑스럽게 생각 합니다. :)
— DJMcMayhem

2
@DJMcMayhem 2017 년 3 월 1 일까지 아무도 당신을 이길 수 없다면 당신을 승자로 표시하십시오;).
— Magic Octopus Urn

7
이것은 여전히 ​​사이트에서 내가 가장 좋아하는 대답입니다. GIF를 몇 번이나 봤는지 셀 수 없습니다.
— Magic Octopus Urn

41

루아 5.3, 416 394 바이트.

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

Ungolfed와 의견.

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

    end
end

산출

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

나는 다른 언어들에 의해 파괴 될 것이지만, 나는 이것에 총을 낼 것이라고 생각했다. 복잡성이 뛰어나고 키보드보다 짧습니다.


15
다른 언어를 조이십시오. 당신은 희귀 한 언어로 처음입니다! 인상적이지만 모든 문자에 파이프를 구분 기호로 넣을 필요는 없습니다. "특수"키가 라인의 앞과 끝에 만 어떻게 있는지 확인하십시오. 그 힌트가 어떻게 든 귀중한 바이트를 절약 할 수 있다고 확신합니다.
— Magic Octopus Urn

사용중인 Lua 버전은 무엇입니까? Lua 5.1에서는 구문 오류가 발생합니다. stdin : 1 : '2j'근처의 잘못된 숫자
— brianush1

5
@ Brianush1 Lua 5.3, 0의 경우 16 진 숫자 또는 'x'가 아닌 문자 옆에 숫자 상수를 사용할 수 있습니다.
— ATaco

29

풍선 껌 , 191 바이트

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

온라인으로 사용해보십시오!


1
풍선 껌은 불공평합니다.
— Joshua

7
@Joshua 솔루션의 기준을 설정하는 것이 좋습니다. 아무것도 풍선 껌을 이길 수 없다면 그것은 문제의 문제입니다.
— Sarge Borsch

19

Haskell, 263 자 (353 바이트 UTF-8)

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

해당 키보드의 스크린 샷

이 유니 코드 문자를 고려하여 점수에 대해 많은 토론이 있었으므로 여기 같은 프로그램이 all-ASCII로 축소되었습니다.

Haskell, 263 자 (263 바이트 UTF-8)

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

3
유니 코드 키보드? 흥미로운 선택 (좋은 수학 글자가 있음)이지만 경쟁 규칙을 위반한다고 생각합니다.
— 마리오 카네이로

@MarioCarneiro 공정하게 말하면 프로그램 길이에는 전혀 영향을 미치지 않습니다.
— pydsigner

1
@pydsigner와 같은 단어가와 같은 ENTER문자보다 길기 때문에 그렇습니다 ↩︎.
— timothymh

5
하지만 당신은 비교하고 ENTER 와 ↩︎ , 공백 패딩은 같은 길이 있습니다.
— CodeMonkey

2
실제로, 높은 유니 코드는 ASCII보다 UTF8에서 더 많은 바이트이기 때문에 유니 코드가 바이트 수로 프로그램을 더 길게 만들 것으로 기대합니다.
— 마리오 카네이로

18

PHP, 303 바이트

게으르지 만 효과적입니다. :)

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

1
좋은. 귀찮게도 compress / gzip / bzip2 / 7z를 사용하여 동일한 수준의 압축을 얻을 수 없습니다. 그렇지 않으면 Bash 버전이 약간 짧아집니다. 그대로, 대신 318 자입니다.
— Konrad Rudolph

14
나는 당신의 프로그램에없는 외부 압축 알고리즘을 사용하는 것이 금지되거나 적어도 눈살을 찌푸 리고 있다고 확신합니다. 그것은 질문의 목적을 무너 뜨립니다.
— 아무도

1
@KonradRudolph 내가 이해하는 것처럼 gzdeflate ()은 gzip 명령 줄과 동일한 압축을 사용하지만 파일 헤더와 체크섬을 건너 뛰므로 항상 조금 짧아집니다.
— Alex Howansky

300 바이트 : <?=gzinflate(base64_decode('rdO5DoJAEIDhnqegs/G+jbHA+0QEvDHrg8zDy79EMbTDFF+3m8yfXdek42phHJG3KyItaEMHutCDPgxgCCNoQg0mMI3cdETSu4wRLQx3NYxJtDCJOL9t1cnSFWNvareVE1xhASHEcIczbOAIATzhBck3V7atupuTb6vulucq43XNvCDKenkQwRyWsII1bGEHexhDxcb140X4n6us16XuVXxdulZZrmi9WcbZd5IH3GAGF/vXwIcDVKEODVs3P53nUrUq5FK1sqc/'));. 압축기 : sandbox.onlinephpfunctions.com/code/… 압축 해 제기 : sandbox.onlinephpfunctions.com/code/…
— Ismael Miguel

4
@Nobody 외부에는 아무것도 없으며 gz는 PHP의 기본 컴파일의 일부이므로 암시 적으로 허용됩니다.
— Alex Howansky

18

Python 3.5 이상, 239 바이트

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

튜플 내부의 표시 또는 다른 것에 Python 3.5 이상이 필요합니까?
— mbomb007

1
각 키의 구성을 반전 "".join(...) + f[0]시키고 내부 루프에서 사용하면 1 바이트를 절약 할 수 있습니다 . format문자열에서 인수 순서와 각 자리 표시자를 바꾸면 2 바이트가 더 절약됩니다.
— dfernan

['{1}__ ','|{} ||','|{1}||','/{1}\\|']의 사용보다 짧습니다 split.
— Alex Hall

16

배치, 465 452 바이트

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

:c서브 루틴 키의 행을 처리한다. 여분의 공백이 포함 된 키, 인용 할 필요가있는 것처럼 =, ;, ,키, 아마도 인해 버그에 shift명령. 첫 번째 및 마지막 매개 변수는 _연결을 돕기 위해 첫 번째 및 마지막 키와 동일한 길이의 문자열입니다 . t다음으로 끝 _으로, 제 1, 제 3 및 제 4 행에 공통의 #동안 추가 된 선행 및 후행 문자 전에 적절히 치환 된 가입 자국들, s두 번째 행은 있지만로 |의 변경 !들이 감소로 S 필요한 수입니다 ". 편집 : 단일 문으로 4 줄을 모두 인쇄하여 1 바이트를 절약하고 s변수를 할당 한 방식을 최적화하여 12 바이트를 절약했습니다 .


14

루비, 226 바이트

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

다음과 같이 개선되었습니다.

1. 배열의 시작과 끝에 빈 문자열 요소가 없습니다. 대신 3 개의 나란히 키보드를 만들어 어레이를 3 중으로 만듭니다. 문자열로 변환 한 후 외부 모서리가없는 3 개의 키보드가 있습니다. 가장자리 만있는 가운데 만 표시하도록 잘립니다.

2. 루비 버전 변경. 내 컴퓨터에 설치된 1.9.3 대신 Ideone을 사용했습니다. 이것은 .chars.to_a단지 짧아 질 수 있음을 의미 .chars합니다.

루비, 239 바이트

이것으로부터 골프를 치기 위해 몇 바이트가 더 있습니다. 내일 봐

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

언 골프

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

13

C #, 357 바이트 (한 줄로 작성하고 대부분의 제안을 통합)


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

또는 문자열 보간 및 기타 모든 제안이 포함 된 353

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

ungolfed (문자열 보간없이) :

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

5
골프 코드를 포맷하는 많은 바이트를 한 줄로 저장할 수 있습니다.foreach(var r in q){for(int i=0;i<4;i++){foreach...
— Mario

1
난 그냥 바이트를 확인 @Mario 기술적으로 이미 완료되었습니다 때문에, 주어진 값은, 실제로 줄 바꿈없이 카운트
— 알피 Goodacre 씨

1
397 바이트의 보간법을 사용하고 대신 약간 아래 골프 ==로< s+=i<1?$" {u}__":i<2?$"||{k.PadRight(l)}|":i<3?$"||{u}|":$"|/{u}\\";
— 알피 고 Goodacre

@Alfie Goodacre에게 감사드립니다. 귀하의 제안에 따라 '=='를 '<'로 바꿨습니다. 버전별로 덜 보간하기 위해 보간을 생략했습니다.
— Klinger

@ Klinger 동의합니다. 보간은 온라인 컴파일러에서 작동하지 않으므로 좋은 선택입니다!
— Alfie Goodacre

10

PowerShell v2 +, 465 바이트

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

PHP와 Python 답변이 얼마나 짧은 지 감안할 때이 답변을 게시하는 것은 반쯤 부끄러워 C # 답변을 신경 쓰지 않지만이 방법을 더 짧게 얻을 수는 없습니다. 다른 접근법은 더 나은 결과를 얻을 수 있습니다.

기본적으로 $a다양한 하위 문자열을 대체하는 변수 ( 등 등) -replace가 있고 끝 부분에 두 개가 있는 거대한 멀티 라인 문자열 입니다. $(...)새로운 변수를 도입하기 위해 필요한 곳에 스크립트 블록 이 삽입됩니다.

온라인으로 사용해보십시오!


7

파이썬, 493 458 바이트.

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

기능적으로 동일하지만 다소 읽기 쉽습니다.

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

불행히도 이미 Lua에서 제공 한 답변보다 더 깁니다.


p함수의 행을 세미콜론으로 구분 된 한 행에 넣을 수 있습니다 . 또한, 나는 당신이 첫 번째 줄을 만들 수 없다고 생각했습니다. k=[['|']*75]*16왜 그런지 아십니까?
— nedla2004

바이트를 저장하기 위해 변수를 정의 '_'하고 ' '변수에 저장할 수도 있습니다.
— nedla2004

팁 주셔서 감사합니다! k = [[ '|'] * 75] * 16은 같은 배열에 대한 16 개의 참조를 생성하므로 한 줄의 변경은 다른 줄에도 영향을 미칩니다.
— Cobi

좋아, 그럼 적어도로 변경할 range(16)수 [0]*16있습니다.
— nedla2004

작은 문제는 코드가 기술적으로 올바른 출력을 생성하지 않지만로 변경 for l in k:print ' '.join(l)하여 수정할 수 있다는 것 for l in k:print''.join(l)입니다.
— nedla2004

7

PHP, 316 312 바이트

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

이 방법을 더 이상 사용할 수 없다고 확신합니다. 그러나 누군가 10 바이트를 더 발견하면 ... : D
Run with -r.

고장

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

6

배쉬 (OSX에서), 12 8 + 221 + 1 = 234230 바이트

그래, 나도 알아 그러나 그것은 효과가 있습니까?

gunzip<f

현재 디렉토리에 다음 내용을 가진 "f"라는 파일이 필요합니다 (PPCG- 친 화성을 위해 base64에 입력하십시오-먼저 파일 "f"로 디코딩 할 수 있습니다).

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

4
글을 쓰면 아주 짧게 만들 수 있습니다 gunzip<f.
— Konrad Rudolph

@KonradRudolph 탁월한 지적입니다. 감사.
— 애디슨 크럼

2 zcat f개의 후행 널 바이트를 제거하여 2 바이트를 저장하고 2 바이트를 저장할 수 있습니다 (gzip은 불평하지만 원하는 출력을 생성 함).
— Gilles

@Gilles 실제로 바이트를 절약하지는 않습니다. 파일 이름을 "fZ"로 변경해야합니다 (최소한 OSX). 후행 null 바이트를 제거하면 gzip이 불평 할뿐만 아니라 오류가 발생하고 아무 것도 인쇄하지 않습니다.
— Addison Crump

@VoteToClose 아, zcat<f그럼. Linux에서 후행 0이없는 zcat은 원하는 출력을 인쇄 한 후에 만 ​​gzip을 불평합니다 (“gzip : stdin : 예기치 않은 파일 끝”).
— Gilles

5

자바 스크립트 (ES6), 286

매개 변수가없는 익명 함수

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

덜 골프

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

스위프트, 777 바이트

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

스위프트는 일반적으로 골프를위한 훌륭한 언어가 아니기 때문에 현재 가장 작은 답변의 두 배 미만 (빠른) 은 여기서 큰 도전입니다!

언 골프 드 :

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
적어도 그것은 애플 스크립트가 아닙니다
— Addison Crump

1
이제 Java하지 말아야합니다
— CAD97

4

SOGL V0.12 , 131 128 127 바이트 ( 경쟁? )

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

SOGL가 가지고 2*2/과 2/2*단점이 있지만, 사람들은 너무 많은 것 같은 느낌 내장이 도전.
여기 사용해보십시오!

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

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

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

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

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

와우, 이것은 매우 인상적입니다! 아직 아무도 나를 이길 수 없었습니다. 나는 조금 더 짧아 지려고 노력할 수도 있지만 약속은 없습니다. ;)
— DJMcMayhem

@dzamia는 지금 경쟁하고 있지만 이것이 아닐 때 답을 받아 들였습니다. 답변을 바꿔야합니까?
— Magic Octopus Urn

@MagicOctopusUrn IMO 그것은 당신에게 달려 있습니다. 답변을 수락하지 않는 것이 좋습니다 : p
— dzaima

답변을받지 않는 것이 좋습니다? 오 ... 충분히 공평 해 그런 다음 장래에 답변을 수락하지 않고 그대로 둡니다.
— Magic Octopus Urn

@MagicOctopusUrn 괜찮아, 아마도 대답을 받아들이지 않는 것은 다소 논란의 여지가 있지만 여전히 큰 긍정적 인 것입니다.
— dzaima

4

파이썬 2, 394 388380 바이트

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

키보드 전체를 나타내는 큰 문자열을 만들고 특수 키의 경우 *를 % s로 바꾼 다음 문자열 형식을 사용하여 스페셜을 업데이트하십시오.

편집하다

이제 출력 끝에 줄 바꿈이 있지만 허용되지 않는 곳은 보이지 않습니다.

온라인으로 사용해보십시오!


나는 출력을 제거해야한다고 생각합니다.
— sergiol 2016 년

1
@sergiol-좋은 지적. 게시 당시 TIO를 알지 못했습니다. 이제 업데이트되었습니다.
— ElPedro 2016 년

3

C #, 376 바이트 (한 줄에있을 때)


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

이것은 전적으로 Klinger의 C # 답변을 기반으로합니다. 나는 그의 대답에 대해 논평 할 충분한 담당자가 없습니다. 그렇지 않으면 그렇지 않습니다.

초기 foreach 루프를 수정하고 불필요한 괄호를 제거하여 Klinger의 코드를 5 바이트 줄였습니다.

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

좋은 사람 @Bence Joful. 당신의 제안으로 나는 367에 그것을 얻을 수있을 것입니다. 나는 현재 답변에 포함시키지 않았습니다.
— Klinger

저항 할 수 없었습니다. 당신의 제안 + 약간의 추가 사소한 변경은 361 (또는 문자열 보간으로 358)을 가져옵니다.
— Klinger

@ Klinger-내 조정을 사용하십시오! 나는 당신의 작업에 따라 그것을 가지고 놀도록 영감을 받았습니다. 프로세스에서 초기화에 대해 배웠습니다.
— Bence Joful

한 줄 프로그램을 포함시킬 수 있습니까? 현재 문서보다 가독성이
— 떨어지지 않습니다

@Cyoce, 제안 해 주셔서 감사합니다. 이 시점에서 Klinger는 이미 이러한 변경 사항을 통합 한 더 작은 새 버전을 게시했습니다.
— Bence Joful

3

m4, 456

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

언 골프 드 :

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

(실제로 코드 골프를하고 m4를 시험해 보는 것은 처음입니다.)


첫 번째 대답에는 나쁘지 않습니다. 사이트에 오신 것을 환영합니다! :)
— DJMcMayhem

3

스택 , 228 바이트

여기 사용해보십시오!

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

또는 약간 더 읽기 쉽습니다.

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

이것은 p키를 만드는 기능 을 정의한 다음 hcat여러 키를 호출하여 작동 합니다.


2

하스켈, 255

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

돌이켜 보면, 이 Haskell answer 와 개념은 비슷 하지만 ASCII 키보드를 생성하며 약간 다른 골프를칩니다.

포맷 및 이름 변경 :

import Data.List

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

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

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

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

end :: String
end = " |||"

shift :: String
shift = "SHIFT    "

2

tcl, 368

http://textmechanic.com/text-tools/basic-text-tools/count-characters-words-lines/ 에 "계수 줄 바꿈은 공백"으로 계산됩니다 . 행에 설정 그것이 차지하는 505 496 452 451 439 403 401 396 391 388 385 384 382 379 378 377 369 368

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

데모 : http://rextester.com/live/NTVAV88033

언 골프 :

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
}

누구나 무료이며 라이브 협력 사이트에서 내 버전을 개선 할 수는 있지만 환영합니다. 여기에서 원래 답변을 편집하지 마십시오. 댓글에서 수정했다면 사람들이 링크를 방문 할 것입니다.

업데이트 1 : 코드가 더 짧아지기 때문에 로 대체 for되었습니다 foreach.

업데이트 2 : 대체 foreach에 의해 lmap, 후자는 짧은 코드를 생성하기 때문에

업데이트 3 : 내가 교체했기 때문에 한 글자를 면도 " "했습니다.\

업데이트 4 : 첫 번째 의견과 관련하여 모든 첫 번째 줄 2 바이트 유니 코드 자리 표시 자 문자를 1 바이트 ASCII 문자로 변경했습니다.

업데이트 5 : 여러 puts줄이 하나만 만들어 짐

업데이트 6 : 중간 목록 변수를 사용하는 대신 직접 split명령 lmap을 사용하여 호출에서 값을 반환

업데이트 7 : 따옴표 ENTER가 필요하지 않았습니다.

업데이트 8 : string map 충분히 길고 여러 번 반복하여 캡슐화 할 가치가 있습니다.proc

업데이트 9 : split $x \n 충분히 길고 여러 번 반복하여 캡슐화 할 가치가 있습니다.proc

업데이트 10 : "대체"에서 문자열 &대신에 대신 사용할 수 있습니다 \1. 이것의 또 다른 결과 ()는 "일치하는"문자열을 제거 할 수 있다는 것 입니다.

업데이트 11 : 지침 에 대한 추가 사용을 위해 줄 구분 기호 @대신 사용하십시오 . 은 "일치"문자열에서 길게 만 에 인한 반복 번호, 갚는다\nsplit\S[^@]

업데이트 12 : 첫 번째 regsub"일치"문자열 {[^@|]}을 \[^@|]한 문자를 제거 하도록 대체 했습니다. 불행히도, regsub명령이 한 쌍 안에 있기 때문에 두 번째와 동일 할 수 없습니다 []:(

업데이트 13 : 두 개의 문자를 깎았습니다. lmap본문에 자체 제목 으로 집중하여 문자를 입력하십시오 .

UPDATE (14) : 받는 전화 사용 split을 기반으로 절차 N대신에 직접 전화의 string map기초 과정 N3 자에 의해 단축 할 수 있습니다

업데이트 15 : 불필요한 공백 문자가있었습니다. 하나의 숯을 제거하기 위해 그것을 제거했습니다.

업데이트 16 : set h 를 제거 $h하여 하나의 문자를 제거 할 수 있습니다 .

업데이트 17 : set h 문을 실제로 깎을 수 있습니다.

업데이트 18 : puts 인수가 ...\n...\n...\n...형식에서

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

체재.

tcl IRC 채널의 특히 이비 토토와 측면을 줄 이도록 도와 준 사람들에게 감사합니다!


좋은 답변, 그리고 사이트에 오신 것을 환영합니다! 바이트 수가 헤더에 표시되도록 게시물을 약간 수정했습니다. 걱정하지 않기를 바랍니다. 알다시피, 일부 문자는 UTF-8에서 다중 바이트이기 때문에 실제로 469 바이트 라고 생각합니다 . tcl에 대해 많이 알지 못합니다 .1 바이트 인 사용자 지정 인코딩을 사용합니까?
— DJMcMayhem

@DJMcMayhem 문자 수 대신 바이트 수를 기반으로한다는 것을 알지 못했지만 여전히 1 바이트 기호 인 모든 것이 자리 표시자가 될 수 있고 여전히 많은 수를 가지고 있기 때문에 문제가 아닙니다.
— sergiol

내 편집 후 @DJMcMayhem,보고 한 문제가 없어졌습니다!
— sergiol

@DJMcMayhem 왜 401의 상단에 노란색 배경이 있었습니까?
— sergiol

2

tcl, 369

처음에는 tcl의 sergiol 버전을 기반으로합니다.
(많은 왼쪽 공간은 tcl의 "자연"의 일부입니다.)

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

@muddyfish 편집 및 수정되었습니다. 감사!
— Alejandro Muzzachiodi

모든 foreach발생 을 직접 대체하면 더 줄일 수 있습니다 lmap!
— sergiol

당신의 사용하려고 interp alias내 버전을 단축하는 방법을하지만, 할 때 내가 얻을 수있는 가장 짧은 그것은 398 :(했다 rextester.com/live/NTVAV88033
— sergiol을

: 내 마지막 시도 나는 395 있어요lmap z {S R M N} w {set "regsub -all" "string map" split} {interp alias {} $z {} {*}$w};lmap y [N [S b [M [N {||||@|||@$@BS @%@TAB @&@CAPS @? @ENTER @*@SHIFT } @] [R {[^@]} "`1234567890-=$@%QWERTYUIOP\[\]\\@&ASDFGHJKL;'?@*ZXCVBNM,./*" {||& ||}]]] @] z [N [S f [R {[^@|]} $b _]] @] w [N [S g [M {||_ |/_ _|| _\\|} [M {||| \\|/} $f]]] @] x [N [M {\\ _ / _ | \ } $g] @] {puts $x\n$y\n$z\n$w}
— sergiol을

마지막 업데이트와 같이 불필요한 공간을 제거하면 한 문자를 저장할 수 있습니다!
— sergiol

2

C (GCC) , 378 (342) 330 바이트

ceilingcat 덕분에 -10 바이트

그것에 첫 번째 찌르기. 반복되는 g ()는 개선의 여지를 제시합니다.

편집 : 우리가 간다.

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

온라인으로 사용해보십시오!


1

파이썬 2, 672 바이트

압축 된 zlib 문자열 사용 :

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

2
232 바이트가 아니라 672 바이트입니다.
— nneonneo

더 이해해, 나는 당신을 이해하지 못했습니다. @nneonneo
— 무엇이든

1
코드를 파일에 붙여 넣으면 해당 파일의 길이는 672 바이트입니다. 코드를 세어 s len("print 'x\x9c...'")를 이스케이프 처리하여 바이트 수가 잘못되었습니다 . 계산을 통해 올바른 수를 얻을 수는 있지만 항상 그렇듯이 가장 쉬운 해결책은 텍스트 편집기 또는 파일 시스템이 말하는 것을 보는 것입니다. \xlen(r"print 'x\x9c...'")
— nneonneo

1

Powershell, 249 242 바이트

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

Ungolfed & Explained

중간 점 ·은 공백을 대신 사용하여 소스 문자열을 명확하게합니다.

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

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

추가 : 스페이스 바 및 오른쪽 정렬 레이블이있는 키보드, 278 바이트

스페이스 바 (이전 regexp (.[a-z ]*), new one ~|(.[a-z ]*)) 를 처리하기 위해 정규 표현식에 몇 바이트를 추가했습니다 . 이것은 정규 표현식의 작은 단계이며 솔루션의 큰 도약입니다. 이제 오른쪽에 정렬 된 스페이스 바 및 키 레이블을 표시 할 수 있습니다 (키보드 오른쪽의 SHIFT, CTRL 및 BS 참조).

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

산출:

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

0

/// , 360 바이트

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

온라인으로 사용해보십시오!


0

Mathematica 323 바이트

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

지루하고 독창적입니다. 문자열은 Compress원하는 출력에 적용된 내장 명령의 출력입니다.


@Downvoted 내 프로그램에 어떤 문제가 있는지 알려주십시오.
— Ian Miller

0

Wolfram Language (Mathematica) , 293 바이트

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

온라인으로 사용해보십시오!

비교적 간단 : 키 행을 목록으로 인코딩 (key name)|(key width)

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

0

펄 5 -MList::Util=pairmap , 313 바이트

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

온라인으로 사용해보십시오!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.