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


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.