ความท้าทายเค้าโครงแป้นพิมพ์


14

รูปแบบแป้นพิมพ์ที่คนทั่วไปใช้เป็นรูปแบบQWERTYที่แสดงด้านล่าง

คีย์บอร์ดแบบ QWERTY

แต่ยังมีรูปแบบแป้นพิมพ์อื่น ๆ :

DVORAK

แป้นพิมพ์ DVORAK

Colemak

แป้นพิมพ์ COLEMAK

WORKMAN แป้นพิมพ์ WORKMAN

งานของคุณ

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

กฎระเบียบ

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

คุณต้องใช้เพื่อจัดการปุ่มที่มีพื้นหลังสีขาวเท่านั้น คุณต้องย้ายอักขระ ASCII ที่พิมพ์ได้จากตัวอักษร QWERTY ไปเป็นตัวอักษรตัวใดตัวหนึ่ง:

 QWERTY: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
 DVORAK: !_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~
COLEMAK: !"#$%&'()*+,-./0123456789Oo<=>?@ABCSFTDHUNEIMKY:QPRGLVWXJZ[\]^_`abcsftdhuneimky;qprglvwxjz{|}~
WORKMAN: !"#$%&'()*+,-./0123456789Ii<=>?@AVMHRTGYUNEOLKP:QWSBFCDXJZ[\]^_`avmhrtgyuneolkp;qwsbfcdxjz{|}~

(หมายเหตุ: สิ่งนี้ถูกคัดลอกด้วยมือโดย @ETHproductions ดังนั้นหากคุณเห็นข้อผิดพลาดใด ๆ โปรดชี้พวกเขาออก!)

ตัวอย่าง

DVORAK zZxX เป็นอินพุตจะให้เป็นเอาท์พุท ;:qQ

นี่คือดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ!


1
นอกจากนี้บางกรณีทดสอบเพิ่มเติมจะเป็นประโยชน์
ETHproductions

1
@Tutleman ใช่คุณสามารถรับ 0 1 2 ตัวอย่าง

1
เดี๋ยวก่อนเราจะเอาเช่น!_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~เป็นอินพุทของคีย์บอร์ด Dvorak ได้ไหม? นั่นจะทำให้ความท้าทายเป็นเรื่องเล็กน้อย ... ถ้างั้นแนะนำข้อจำกัดความยาวหรืออะไรทำนองนี้ล่ะ?
ETHproductions

1
@EriktheOutgolfer แต่ถ้า!_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\‌​=^{`axje.uidchtnmbrl‌​'poygk,qf;?|+~เป็นเช่นนั้นคุณก็สามารถรับข้อมูลได้
ETHproductions

1
@ETHproductions ใช่คุณสามารถใช้อักขระเหล่านั้นเป็นอินพุตได้แม้ว่าเค้าโครงจะต้องไม่ขึ้นอยู่กับสิ่งเหล่านั้นเลย การใช้งานสำหรับพวกเขาเท่านั้นคือเลือกรูปแบบที่จะใช้ 10 ไบต์เป็นขีด จำกัด คงที่ (สั้นเกินไป IMO) นั่นเป็นเหตุผลที่ฉันไม่ชอบ และใช่คุณบอกว่าไม่ใช่ตัวอักษรไบต์ ฉันคิดว่านี่ควรจะถูก sandboxed มานานแล้ว
Erik the Outgolfer

คำตอบ:


3

Ruby , 258 247 238 ไบต์

->c,t{c.tr"#{$f='\'"+,-./<=>?[]{'}}:;B-Z_b-z",%W(-_}w[vzW]VZ/=?+SsXJE>UIDCHTNMBRL"POYGK<QF:{xje.uidchtnmbrl'poygk,qf;
#$f}OoBCSFTDHUNEIMKY:QPRGLVWXJZ_bcsftdhuneimky;qprglvwxjz
#$f}IiVMHRTGYUNEOLKP:QWSBFCDXJZ_vmhrtgyuneolkp;qwsbfcdxjz)[t]}

ลองออนไลน์!

นี่คือฟังก์ชั่นที่รับสองอาร์กิวเมนต์: ข้อความที่จะถูกสลับและค่า 0-2 หมายถึงรูปแบบที่จะสลับเป็นโดย 0 สอดคล้องกับ Dvorak, 1 ถึง Colemak และ 2 ถึง Workman

โดยพื้นฐานแล้วฉันไม่คิดว่าจะแตกต่างจากคำตอบอื่น ๆ อ่านเพิ่มเติมดูเหมือนว่านี้:

def swap_layout(message, layout)
    keyboards = [DVORAK, COLEMAK, WORKMAN] # Omitted here for brevity
    return message.tr(QWERTY, keyboards[layout])
end

ทับทิม string#trฟังก์ชั่นรับสองอาร์กิวเมนต์: สตริงที่มีอักขระที่จะถูกแทนที่และสตริงที่มีการแทนที่ มีประโยชน์ช่วยให้คุณสามารถระบุช่วงของอักขระโดยใช้a-zไวยากรณ์ การตระหนักถึงการประหยัดพื้นที่สำคัญอื่น ๆ คือไม่จำเป็นต้องรวมอักขระที่เหมือนกันในทั้งสี่เลย์เอาต์ซึ่งทำให้ฉันสามารถกำจัดตัวเลขทั้งหมดตัวอักษร "A" ทั้งบนและล่างและกำมือหนึ่งของ ตัวอักษรพิเศษ

หนึ่งบิตแปลกอื่น ๆ %W()ของไวยากรณ์คือการใช้ สิ่งนี้จะสร้างอาร์เรย์ของสตริงที่มีทุกอย่างภายในวงเล็บคั่นด้วยช่องว่าง linebreaks ทั้งหมดในการส่งจริง ๆ แล้วทำหน้าที่เป็นตัวแยกองค์ประกอบ%W()อนุญาตให้มีการแก้ไขสตริง (ซึ่งดำเนินการกับ#{}โอเปอเรเตอร์) - %w()จะเป็นสิ่งเดียวกัน

ฉันยังอยากจะใช้เวลาสักครู่เพื่อตำหนิ Dvorak เพราะยุ่งกับแผนการของฉันในการปรับให้เหมาะสมด้วยการยืนยันว่ามันแตกต่างจากคนอื่นโดยสิ้นเชิงตลอดเวลา วิธีแก้ปัญหา Qwerty / Colemak / Workman นั้นสั้นมาก ...


การใช้จำนวนเต็มเป็นตัวแทนของแป้นพิมพ์เพื่อแมปตามข้อกำหนดหรือไม่ กรณีทดสอบดูเหมือนจะต้องการชื่อของแป้นพิมพ์อย่างชัดเจน แต่จากนั้นกฎจะดูเหมือนอนุญาตให้มีการป้อนข้อมูลใด ๆ เพื่อแสดงแป้นพิมพ์
Shaggy

@Shaggy ในการพูดถึงความคิดเห็นของผู้ถามในโพสต์ "คุณสามารถใช้ 0 1 2 เช่น" ซึ่งเป็นสิ่งที่ฉันได้ทำไปแล้ว
Tutleman

5

JavaScript (ES7), 282 273 251 250 ไบต์

ใช้ ID เลย์เอาต์ของแป้นพิมพ์kและอาเรย์ของอักขระaในรูปแบบ currying(k)(a)ในไวยากรณ์ส่งคืนอาร์เรย์ของอักขระที่แปล

ID เลย์เอาต์คือ:

  • 32
  • 64
  • 160
k=>a=>a.map(c=>1/(t=`1_3-2}w[vz8SsW]VZ1XJE>UIDCHTN0BRL"POYGK<QF:/0=0{1xje.uidchtn0brl'poygk,qf;?0+995Oo6SFTD0UNEI0KY:0PRGL2J8sftd0unei0ky;0prgl2j998Ii5VMHRT0YUNEOLKP:0W0BFCD0J6vmhrt0yuneolkp;0w0bfcd0j5`.replace(/\d/g,n=>15**n)[c.charCodeAt()+k])?c:t)

ลองออนไลน์!

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

การอัด

โครงร่างเป้าหมายทั้งสามถูกเก็บไว้ในสตริงที่บีบอัดเดี่ยวโดยที่แต่ละอักขระมีดังนี้:

  • อักขระการแปลจาก QWERTY
  • ตัวเลขที่แสดงถึงจำนวนของอักขระต่อเนื่องที่ไม่จำเป็นต้องแปล

n15n10

n | 15**n       | length
--+-------------+-------------
0 | 1           | 1
1 | 15          | 2
2 | 225         | 3
3 | 3375        | 4
4 | 50625       | 5 (not used)
5 | 759375      | 6
6 | 11390625    | 8
7 | 170859375   | 9 (not used)
8 | 2562890625  | 10
9 | 38443359375 | 11

ตัวอย่างเช่น#$%&-()*ใน DVORAK จะถูกเก็บไว้เป็น3-2เพราะ#$%&และ()*มีการจับคู่ที่เหมือนกันใน QWERTY และเท่านั้น-เป็นการแปลที่แท้จริง

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

การบีบอัด

n15n3-23375-225มีการแตกเป็น

การแปล

สำหรับตัวละครแต่ละตัว cในaเราดึงตัวอักษรแปลtโดยใช้เป็นชดเชยในสตริงรูปแบบการบีบอัดและการทดสอบไม่ว่าจะเป็นหลักด้วยk 1/tถ้าเป็นเช่นนั้นเราจะออกตัวอักษรเดิมcแทน


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

4

จอประสาทตา273 270 ไบต์

T`p` !_#-&\-()*}\w[vzdSsW]VZ@AXJ\E>UIDC\HTNMBR\L"P\OYGK<QF:/\\=^{\`axje.ui\dc\htnmbr\l'\p\oygk,qf;?|+~`^D.*
T`p` -9\O\o<-CSFTD\HUN\EIMKY:QPRG\LVWXJZ-csft\d\huneimky;q\prg\lv-xjz-~`^C.*
T`p` -9Ii<-AVM\HRTGYUN\E\O\LKP:QWSBFCDXJZ-avm\hrtgyune\o\lk\p;q\wsbfc\dxjz-~`^W.*
^.

ลองออนไลน์! คำนำหน้าข้อความด้วยตัวอักษรเดียวD, CหรือWสำหรับรูปแบบแป้นพิมพ์ที่ต้องการ แต่น่าเสียดายที่ผล Retina สนับสนุนพวงของตัวอักษรมายากล ( pเป็นที่เห็นได้ชัดหนึ่ง แต่ผมไม่จัดการจะลื่นในd) ซึ่งทุกความต้องการที่จะยกมายกเว้นผมสามารถที่จะใช้แทนv-x v\wxแก้ไข: บันทึกแล้ว 3 ไบต์ด้วย @ETHproductions


หาก-s แทนช่วงที่ตัวละครที่ผมคิดว่าคุณสามารถบันทึกบางส่วนโดยการเปลี่ยนไป<-@ABC <-C
ETHproductions

@ETHproductions อืมฉันสงสัยว่าทำไมฉันถึงมองข้ามในรุ่นตัวพิมพ์ใหญ่ ...
Neil

3

PHP, 364 ไบต์

echo strtr($argv[2],($t=[[":;BCDEFHIJKLMNOPRTUVWYbcdefhijklmnoprtuvwy","IiVMHRTYUNEOLKP:WBFCDJvmhrtyuneolkp;wbfcdj"],[":;DEFGIJKLNOPRSTUYdefgijklnoprstuy","OoSFTDUNEIKY:PRGLJsftduneiky;prglj"],["\"'+,-./:;<=>?BCDEFGHIJKLNOPQRSTUVWXYZ[]_bcdefghijklnopqrstuvwxyz{}","_-}w[vzSsW]VZXJE>UIDCHTNBRL\"POYGK<QF:/={xje.uidchtnbrl'poygk,qf;?+"]][ord($argv[1])%3])[0],$t[1]);

Array มี 3 อาร์เรย์ที่สำคัญหมายถึง 0 = W, 1 = C, 2 = D

ลองออนไลน์!


2

Python 2, 422 ไบต์

พยายามรวมเลย์เอาต์กับวิธีที่ฉลาด แต่ก็ไม่ได้ช่วยอะไรมาก
ลองออนไลน์

from string import*
Q=' '+printable
D=' '+digits
p,P=punctuation.split(':;')
w='avmhrtgyuneolkp;qwsbfcdxjz'
c='abcsftdhuneimky;qprglvwxjz'
d="uidchtnmbrl'poygk"
K={'C':D+c+c.upper().replace('Y;','Y:')+p+'Oo'+P,'W':D+w+w.upper().replace('P;','P:')+p+'Ii'+P,'D':D+'axje.'+d+',qf;AXJE>'+d.upper().replace("L'",'L"')+'<QF:!_#$%&-()*}w[vzSsW]VZ@/\=^{`?|+~'}
k,s=input().split()
print''.join(map(lambda x:K[k[0]][Q.index(x)],s))

เล่นได้ดี :) ฉันไม่เก่งเรื่องงูหลามฉันเลยช่วยคุณตีกอล์ฟไม่ได้ ^^

2

JavaScript (ES6), 461 409 404 395 385 ไบต์

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

สตริงของคีย์บอร์ดถูกคัดลอกโดยตรงจากคำถามดังนั้นตำหนิAntoine ETH สำหรับข้อผิดพลาดใด ๆ !

นี้จะใช้เวลาเป็นจำนวนเต็มเป็นตัวแทนของรูปแบบแป้นพิมพ์ (0 สำหรับ DVORAK, 94 Colemak และ 188 สำหรับ WORKMAN) และอาเรย์ของสตริงเป็นข้อโต้แย้งโดย currying - การเช่นเอาท์พุทf(0)(["z","Z","x","X"]);:qQ

k=>s=>s.map(c=>`!_#$%&-()*}w[vz${a="0123456789"}SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\\=^{\`axje.uidchtnmbrl'poygk,qf;?|+~${b="!\"#$%&'()*+,-./"+a}Oo<=>?@ABCSFTDHUNEIMKY:QPRGLVWXJ${d="Z[\\]^_\`a"}bcsftdhuneimky;qprglvwxjz{|}~${b}Ii<=>?@AVMHRTGYUNEOLKP:QWSBFCDXJ${d}vmhrtgyuneolkp;qwsbfcdxjz{|}~`[`${b}:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY${d}bcdefghijklmnopqrstuvwxyz{|}~`.search(c)+k]).join``

ลองมัน

f=
k=>s=>s.map(c=>`!_#$%&-()*}w[vz${a="0123456789"}SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\\=^{\`axje.uidchtnmbrl'poygk,qf;?|+~${b="!\"#$%&'()*+,-./"+a}Oo<=>?@ABCSFTDHUNEIMKY:QPRGLVWXJ${d="Z[\\]^_\`a"}bcsftdhuneimky;qprglvwxjz{|}~${b}Ii<=>?@AVMHRTGYUNEOLKP:QWSBFCDXJ${d}vmhrtgyuneolkp;qwsbfcdxjz{|}~`[`${b}:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY${d}bcdefghijklmnopqrstuvwxyz{|}~`.search(c)+k]).join``
o.innerText=f(j.value=0)([...i.value="zZxX"])
i.oninput=j.oninput=_=>o.innerText=f(+j.value)([...i.value].filter(c=>`!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`abcdefghijklmnopqrstuvwxyz{|}~`.includes(c)))
<select id=j><option value=0>DVORAK<option value=94>COLEMAK<option value=188>WORKMAN</select><input id=i><pre id=o>


อันที่จริงฉันรวบรวมสตริง: P
ETHproductions

ลองดู ... คุณจะไม่ได้รับQWERTYข้อมูลเข้าดังนั้นฉันคิดว่าคุณสามารถบันทึกไบต์ได้ด้วยการไม่เก็บวัตถุไว้ในตัวแปร มันจะดูเหมือนs=>[...s].map(c=>({D:"...",C:"...",W:"..."}[k[0]]["...".indexOf(c)]).join``
ETHproductions

Aha ใช่ฉันรู้ว่ามีวิธีที่จะทำงานโดยตรงจากวัตถุภายใน map()แต่ฉันหมดเวลา - เชื่อหรือไม่ฉันเขียนสิ่งนี้ขึ้นขณะนั่งบนรถบัสไปดูหนัง ฉันจะอัปเดตพร้อมกับข้อเสนอแนะของคุณและการปรับปรุงบางอย่างที่ฉันเห็นในวันพรุ่งนี้
Shaggy

1

05AB1E , 199 192 187 ไบต์

žQDIiA¦'mKDuì“"'+,-./:;<=>?[]_{}“«.•4Zl˜η‡#ûwj˜ÐAδO•Duìð“>"<:.',;“S.;“_-}w[vzSsW]VZ/={?+“«ë¹<i.•2¸3'ÐQïK¤)•Duì„:;©ì.•C^ÿ¶₆*γŽ¨ï•Duì„Ooìë.•Brì·=ζW˜ΛlÝδ•Duì®ì.•]X)àƒ₆ä¤QúØM•Duì„Iiì}ð®S.;}‡‡

ใช้ ID 1สำหรับ DVORAK; 2สำหรับ COLEMAK และ3สำหรับ WORKMAN
กด ID ก่อนจากนั้นสตริงที่เราต้องการแปล

ลองมันออนไลน์หรือตรวจสอบเต็มรูปแบบ ASCII ช่วงสำหรับทั้งสาม

คำอธิบาย:

žQ                    # Push printable ASCII builtin string:
                      #  “ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~“
  D                   # Duplicate it
   Ii                 # If the input-integer is 1:
     A                #  Push the lowercase alphabet
      ¦'mK           '#  Remove the first character (the 'a') and 'm'
          Duì         #  Prepend an uppercase copy
     "'+,-./:;<=>?[]_{}“«
                     "#  And then append the string “"'+,-./:;<=>?[]_{}“
     .•4Zl˜η‡#ûwj˜ÐAδO 
                      #  Push compressed string "xje uidchtnbrl poygk qf "
        Duì           #  Prepend an uppercase copy
     ð                #  Push a space " "
      “>"<:.',;“S    "#  Push the characters [">",'"',"<",":",".","'",",",";"]
                 .;   #  Replace the first space with ">", second with '"', etc.
     _-}w[vzSsW]VZ/={?+“«
                      #  And then append the string “_-}w[vzSsW]VZ/={?+“
   ë                  # Else:
    ¹<i               #  If the input-integer is 2 instead: 
       .•2¸3'ÐQïK¤)• '#   Push compressed string "defgijklnoprstuy"
          Duì         #   Prepend an uppercase copy
       „:;            #   Push string ":;"
          ©           #   Store it in the register (without popping)
           ì          #   And then prepend this ":;" in front of the "DEF...def..."-string
       .•C^ÿ¶₆*γŽ¨ï•  #   Push compressed string "sftduneiky prglj"
          Duì         #   Prepend an uppercase copy
       Ooì           #   And then prepend "Oo"
    ë                 #  Else (so the input-integer is 3):
     .•Brì·=ζW˜ΛlÝδ•  #   Push compressed string "bcdefhijklmnoprtuvwy"
        Duì           #   Prepend an uppercase copy
     ®ì               #   And then prepend ":;" (from the register)
     .•]X)àƒ₆ä¤QúØM  #   Push compressed string "vmhrtyuneolkp wbfcdj"
        Duì           #   Prepend an uppercase copy
     Iiì             #   And then prepend "Ii"
    }                 #  After the inner if-else:
     ð                #  Push a space " "
      ®S              #  Push the characters [":",";"] (from the register)
        .;            #  Replace the first space with ":" and the second space with ";"
   }                  # After the outer if-else:
                     # Transliterate the two strings we created,
                      #  in the duplicate printable ASCII string
                     # And then transliterate the printable ASCII string with this string,
                      #  in the (implicit) string-input
                      # (after which the result is output implicitly)

ดู 05AB1E ส่วนปลายของฉัน (ส่วน วิธีการบีบอัดสตริงที่ไม่ได้เป็นส่วนหนึ่งของพจนานุกรม )เพื่อทำความเข้าใจว่าการบีบอัดสตริงทำงานอย่างไร


1

C ++, 528 ไบต์

#include <map>
#define M(a,b)a!='\0'?a:b
std::map<char,char>t[3];char*c[]={"\"'+,-./:;<=>?BCDEFGHIJKLMNOPQRSTUVWXYZ[]_bcdefghijklmnopqrstuvwxyz{}","_-}w[vzSsW]VZXJE>UIDCHTNMBRL\"POYGK<QF:/={xje.uidchtnmbrl'poygk,qf;?+","\"'+,-./Oo<=>?BCSFTDHUNEIMKY:QPRGLVWXJZ[]_bcsftdhuneimky;qprglvwxjz{}","\"'+,-./Ii<=>?VMHRTGYUNEOLKP:QWSBFCDXJZ[]_vmhrtgyuneolkp;qwsbfcdxjz{}"};int main(int d,char*v[]){for(int i=1;i<4;i++)for(int j=0;j<68;j++)t[i-1][c[0][j]]=c[i][j];for(int k=0;v[2][k];k++)printf("%c",M(t[v[1][0]-'0'][v[2][k]],v[2][k]));}

ทำงานด้วย ./multitrans <0-2> <string>ที่ 0 = Dvorak, 1 = Colemak และ 2 = Workman

ฉันได้เพิ่มบรรทัดใหม่ในระหว่างเพื่อให้โค้ดอ่านได้ง่ายขึ้นด้านล่างเล็กน้อย รหัสนี้สร้างแผนที่การแปลจากสตริงที่ค้นหาอักขระ Qwerty ส่งคืนการแปล ( t[0]['s'] = 'o'สำหรับ s เป็น Dvorak) จากนั้นจะใช้แผนที่เพื่อแปล สตริงการแปลสั้นลงเพราะบางตัวไม่จำเป็นต้องเปลี่ยน มันอาจจะลดลงไปอีก

#include <map>
#define M(a,b)a!='\0'?a:b
std::map<char,char>t[4];
char*c[4]={
"\"'+,-./:;<=>?BCDEFGHIJKLMNOPQRSTUVWXYZ[]_bcdefghijklmnopqrstuvwxyz{}",
"_-}w[vzSsW]VZXJE>UIDCHTNMBRL\"POYGK<QF:/={xje.uidchtnmbrl'poygk,qf;?+",
"\"'+,-./Oo<=>?BCSFTDHUNEIMKY:QPRGLVWXJZ[]_bcsftdhuneimky;qprglvwxjz{}",
"\"'+,-./Ii<=>?VMHRTGYUNEOLKP:QWSBFCDXJZ[]_vmhrtgyuneolkp;qwsbfcdxjz{}"};
int main(int d,char*v[]){
    for(int i=1;i<4;i++)
        for(int j=0;j<68;j++)
            t[i-1][c[0][j]]=c[i][j];
    for(int k=0;v[2][k];k++)
        printf("%c",M(t[v[1][0]-'0'][v[2][k]],v[2][k]));
}

พิเศษ: Qwerty -> Dvorak เท่านั้น (197 ไบต์)

ฉันเพิ่งเขียนรหัสนี้ที่เปลี่ยน Qwerty เป็น Dvorak แต่เมืองหลวงไม่ได้รับการแปล

#include<string>
char*d="\',.pyfgcrlaoeuidhtns;qjkxbmwvz ";std::string t="qwertyuiopasdfghjkl;zxcvbnm,./ ";int main(int c,char*v[]){for(int j=0;j<strlen(v[1]);j++)printf("%c",d[t.find(v[1][j])]);}

0

C, 394 ไบต์

ลองออนไลน์

char*K[3]={"!_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL\"POYGK<QF:/\\=^{`axje.uidchtnmbrl'poygk,qf;?|+~",
"!\"#$%&'()*+,-./0123456789Oo<=>?@ABCSFTDHUNEIMKY:QPRGLVWXJZ[\\]^_`abcsftdhuneimky;qprglvwxjz{|}~",
"!\"#$%&'()*+,-./0123456789Ii<=>?@AVMHRTGYUNEOLKP:QWSBFCDXJZ[\\]^_`avmhrtgyuneolkp;qwsbfcdxjz{|}~"};
main(int c,char**v){char*t=v[2];while(*t)putchar(*t>32?K[atoi(v[1])][*t-33]:*t),t++;}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.