แก้ไขนิ้วอ้วนของฉัน


21

ท้าทายรหัสกอล์ฟ

ฉันมี isdue, fingrrs ของฉันจะอ้วนและฉันอย่างอิสระ jave isdue ของ ty [ing หนึ่ง keystrpke ไปทางขวาบน kryboard ของฉัน

ฉันกลัวว่า isdue จะแย่ลงเรื่อย ๆ เมื่อเวลาผ่านไป

ฉันได้ทำทุกสิ่ง ไปทางขวา!

ก่อนหน้านี้ฉันต้องการโปรแกรม (หรือ functipn) เพื่อเปลี่ยนค่าอัตโนมัติทุก keystrpke กลับไปทางซ้าย

ฉันจะตรวจสอบให้แน่ใจว่าใช้ Tome typong ของฉันในส่วนที่เหลือของ tjis chal; enge เพื่อที่จะไม่ทำให้เกิดความสับสน!


วัตถุประสงค์:

เขียนโปรแกรมหรือฟังก์ชั่นที่รับอินพุตของหนึ่งในคีย์สีเขียวต่อไปนี้บนคีย์บอร์ด QWERTY มาตรฐานและส่งคืนอักขระของคีย์หนึ่งไปทางซ้ายของมันenter image description here


เงื่อนไข:

•คุณอาจสันนิษฐานได้ว่าผู้ที่เรียกใช้โปรแกรมนี้กำลังใช้คีย์บอร์ดแบบเดียวกับที่แสดงในภาพด้านบน

•อินพุทและเอาท์พุทเป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่คุณสามารถใช้เคสใดก็ได้ (หรือผสมระหว่างเคส) สำหรับความท้าทายนี้และคุณยังสามารถสมมติว่าอินพุตทั้งหมดจะเป็นหนึ่งกรณีหากต้องการ

•หากภาษาของคุณไม่มีวิธีให้ผู้ใช้ป้อนคีย์ส่งคืนด้วยเหตุผลบางอย่างคุณอาจเพิกเฉยต่อการกดแป้นเดียวสำหรับสิ่งนี้

•ความท้าทายนี้มีไว้สำหรับค่าเริ่มต้นของคีย์เท่านั้นตัวอย่างเช่นหาก4มีการกดปุ่มคุณสามารถสันนิษฐานได้ว่ามันจะ4ไม่มีวันหมด$

•คุณสามารถสันนิษฐานได้ว่ากดปุ่มสีเขียวเท่านั้น


ตัวอย่างInput-> Output:

S-> a
4-> 3
=-> -
[->p


นี่คือดังนั้นโปรแกรมที่มีจำนวนผู้ชนะที่สั้นที่สุด!


คุณให้บริการทดสอบได้ไหม
Kritixi Lithos

1
@KritixiLithos อย่างแน่นอน! ฉันจะแก้ไข tjat ในตอนนี้ @
Albert Renshaw

คุณหมายถึง]-> [ใช่ไหม
shooqie


3
คุณอาจไม่สนใจ แต่นี่เป็นเรื่องที่น่าสนใจ: นี่คือเค้าโครงแป้นพิมพ์ ANSI สังเกตแบ็กสแลชเหนือปุ่ม Enter ตรงกันข้ามกับแป้นพิมพ์ ISO ซึ่งปุ่มแบ็กสแลชอยู่ทางซ้ายของ Z (มันเป็นแบบอเมริกัน แต่ก็ง่ายต่อการระบุ!)
Doddy

คำตอบ:



5

Perl 6 , 87 83 69 ไบต์

{[Q"`1234567890-=qwertyuiop[]\asdfghjkl;'
zxcvbnm,./".comb].&{%(.[1..*]Z=>$_)}{$_}}

{~Q"`1234567890-=qwertyuiop[]\asdfghjkl;'
zxcvbnm,./".match(/.)>$_/)}

ลองออนไลน์!

สงสัยว่ามีวิธีการเข้ารหัสสตริงที่เข้ารหัสยากไปยังสิ่งที่สั้นกว่า ...

( แนวคิด regex ของ Stole GBสำหรับ -14 ไบต์)


1
บางทีถ้าเรามี$"ช่วงที่สามารถบันทึกไม่กี่ตัวอักษร
Ven

5

เยลลี่ , 34 33 ไบต์

ØD”`1¦ṭØqż“[]\“;'¶“,./“0-=”Fṡ2UZy

ลองออนไลน์!

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

ØD”`1¦ṭØqż“[]\“;'¶“,./“0-=”Fṡ2UZy  Main link. Argument: s (string)

ØD                                 Digits; yield "0123456789".
  ”`1|                             Replace '0' with a backtick.
       Øq                          Qwerty; yield
                                   ["qwertyuiop", "asdfghjkl", "zxcvbnm"].
      ṭ                            Tack; add "`123456789" as the last element of
                                   the qwerty array.
          “[]\“;'¶“,./“0-=”        Yield ["[]\\", ";'\n", "0-="].
         ż                         Zip; combine the strings of the array to the
                                   left with the corresponding strings of the array
                                   to the right, yielding an array of string pairs.
                           F       Flatten, yielding a string.
                            ṡ2     Obtain all overlapping pairs of characters.
                              U    Upend; reverse each pair.
                               Z   Zip, yielding a pair of strings.
                                y  Translate the input s according to the generated
                                   replacement table.

3
ฉันไม่รู้จักเจลลี่คุณสามารถเพิ่มคำอธิบายรหัสของคุณได้หรือไม่? ฉันอยากรู้ว่าคุณจะไปไหนโดยไม่พิมพ์ตัวอักษรทั้งตัวของแป้นพิมพ์
Albert Renshaw

1
ฉันยังไม่มีเวลา แต่ฉันจะเพิ่มคำอธิบายโดยเร็ว
เดนนิส

1
เสร็จสิ้น ฉันยังเล่นกอล์ฟมันเล็กน้อย
เดนนิส

1
Øqดี! ฉันชอบสิ่งนี้ขอบคุณ!
Albert Renshaw

4

Python 3, 85 78 ไบต์:

lambda x,k="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.‌​find(x)-1]

1
คุณสามารถส่งผ่านสตริงเป็นพารามิเตอร์ทางเลือกโดยใช้ 1 lambda: lambda x,k="1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.find(x)-1]เพื่อลดจำนวนไบต์
Rod

จุดดีฉันจะเพิ่มที่
L3viathan

ฉันคิดว่าคุณจำเป็นต้องมี backtick เพื่ออยู่ทางซ้ายของ 1
xnor

@xnor ถูกต้องแก้ไขแล้ว
L3viathan

4

Pythonขนาด 76 ไบต์

s="1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?"
dict(zip(s,'`'+s)).get

ลองออนไลน์!

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

การใช้translateเพื่อสร้างการแมปทำให้ได้โซลูชันที่ยาวขึ้น ลองออนไลน์!

lambda s:s.translate("';"*22+"_0__9`12345678_LM-<>_\\VXSWDFGUHJKNBIO=EARYCQZT\nP][___"*4)

4

เรติน่า53 53ไบต์

T`1-90\-=QW\ERTYUI\OP[]\\ASDF-HJ-L;'¶ZXCVBNM,./`\`o

ลองออนไลน์!

การถอดเสียงง่าย ๆ ทำให้ทุกตัวละคร 1 ตำแหน่งถอยหลัง ทุกอย่างจาก1ถึง/เป็นชุดอักขระต้นฉบับในขณะที่ส่วนต่อไปนี้เป็นชุดใหม่ที่ใช้oเพื่อระบุชุดอื่น ๆ

HและLเป็นคลาสอักขระพิเศษสำหรับการทับศัพท์ในเรติน่า (ตามลำดับการแมปไปยังเลขฐานสิบหกและตัวอักษรตัวพิมพ์ใหญ่) แต่โชคดีที่พวกมันเกิดขึ้นบนแป้นพิมพ์ภายในลำดับที่กำหนดโดย alfabetically ( FGHและJKL) ดังนั้นเราจึงสามารถหลีกเลี่ยงพวกมันได้ 2 ไบต์



3

TI-Basic, 70 ไบต์

ฉันสงสัยว่าอาจสั้นกว่านี้ได้ ...

Input Str1
"`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./
sub(Ans,inString(Ans,Str1)-1,1

PS สองไบต์ราชสกุลมีStr1, `, \, และsub(inString(


3

V , 57 54 51 ไบต์

บันทึกได้ 3 ไบต์ด้วย @ nmjcman101 สำหรับใช้hxVpแทนสิ่งที่ฉันมีสำหรับคีย์บอร์ดหลายบรรทัด

i`¬190-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./<esc>/<C-r>a
hxVp

ลองออนไลน์!

<esc>เป็น0x1bและ<c-r>เป็น0x12

หมายเหตุ: สิ่งนี้ไม่สนับสนุนการป้อนรหัส

มี unprintables ดังนั้นนี่คือ hexdump

00000000: 6960 ac31 3930 2d3d 7177 6572 7479 7569  i`.190-=qwertyui
00000010: 6f70 5b5d 5c61 7364 6667 686a 6b6c 3b27  op[]\asdfghjkl;'
00000020: 7a78 6376 626e 6d2c 2e2f 1b2f 1261 0a68  zxcvbnm,././.a.h
00000030: 7856 70                                  xVp

คำอธิบาย

โปรแกรมส่วนใหญ่สร้างคีย์บอร์ด iเข้าสู่โหมดแทรกและตัวละครทุกตัวที่ตามมาจะถูกพิมพ์ไปยังบัฟเฟอร์ แต่มีการเล่นโวหารเล็ก ๆ ที่นี่¬19แทรกตัวละครระหว่าง 1 และ 9

<esc>ออกจากโปรแกรมแทรกโหมดที่ จากนั้นที่นี่/<c-r>aค้นหาอาร์กิวเมนต์ในบัฟเฟอร์ วิธีนี้จะทำให้เคอร์เซอร์อยู่เหนืออักขระที่พบ

h                  " move the cursor to the left
 x                 " delete this character
  Vp               " select this line and replace it with the deleted character

ฉันไม่ใช่ 100% แต่ฉันคิดว่าแทนที่จะhylHVGpทำในสิ่งที่ @DJMcMayhem ทำในคำถามรถจักรยานยนต์เช่นhxVpนั้น ฉันไม่แน่ใจว่าทำไมคุณใส่เข้าไปGในนั้นไม่ได้ทั้งหมดหนึ่งบรรทัด? นอกจากนี้ยังdhVpจะทำงาน
nmjcman101

@ nmjcman101 อ่าใช่ฉันต้องรักษาGตั้งแต่เมื่อคีย์บอร์ดเคยเป็น multiline ขอบคุณ!
Kritixi Lithos

2

PowerShell, 82 ไบต์

$k="1234567890-=qwertyuiop[]\asdfghjkl;'
zxcvbnm,./";$k[$k.IndexOf((read-host))-1]

สนับสนุนคีย์ Enter แต่ไม่สามารถทดสอบได้Read-Hostเนื่องจากการกดปุ่ม Enter ที่ไม่มีค่าจะส่งคืนอะไรใน PowerShell


2

Japt , 56 42 ไบต์

;D=Dv ·q i"[]\\",A i";'",22 +",./")Dg1nDbU

คำอธิบาย

;D=Dv ·q i"[]\\",A i";'",22 +",./")Dg1nDbU

;D=D                                        // Shortcut for QWERTY (with newlines and spaces), assigning to variable D
    v                                       // Setting D to lowercase
      ·q                                    // Joining D into an array with no spaces or newlines
        i"[]\\",A                          // Inserting "[]\" into index 10 (A)
                   i";'",22                 // Inserting ";'" into index 22
                           +",./"           // Appending ",./"
                                  Dg        // Returns the character at index:
                                    1n      //    -1+
                                       DbU  //     Index of U (the input)

ลองออนไลน์!


อันนี้เท่ห์มากคุณสามารถเพิ่มคำอธิบายได้ไหม?
Albert Renshaw

1
@AlbertRenshaw เพิ่มคำอธิบายแล้ว
โอลิเวอร์

2

Java 8, 99 ไบต์

c->{String r="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./";return r.charAt(r.indexOf(c)-1);}

คำอธิบาย:

ลองที่นี่

c->{                // Method with character as both parameter and return-type
  String r="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./";
                    //  Literal String of the qwerty keyboard layout of the challenge
  return r.charAt(  //  Return the character at the following index:
    r.indexOf(c)    //   The index of the input character
    -1);            //   -1 to shift it to the left
}                   // End of method

1
I give up. I was trying to do it with regex, but I miserably fail with some special characters... c->"`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./".replaceAll("(?s).*(.)"+c+".*","$1").
Olivier Grégoire

2

JavaScript (ES6), 74 bytes

c=>(s=".,mnbvcxz\n';lkjhgfdsa\\][poiuytrewq=-0987654321`")[s.indexOf(c)+1]

Since / isn't in my string, indexOf returns -1, which when incremented causes . to be output. 93 bytes to process a string:

s=>s.replace(/./g,c=>s[s.indexOf(c)+1],s="><mnbvcxz\n';lkjhgfdsa\\][poiuytrewq=-0987654321`")

@KevinCruijssen Thanks for spotting that I'd accidentally shifted those three keys. I've unshifted them now.
Neil

1

GNU sed, 72 + 1(r flag) = 73 bytes

s:$:`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./:
s:(.).*(.)\1.*:\2:

The return key can't be tested, because sed by design splits the input using \n as the delimiter and then runs the script as many times as there are lines.

Test run: continuous input-output pair (when done press Ctrl + D or Ctrl + C)

me@LCARS:/PPCG$ sed -rf shift_key.sed
s
a
4
3
=
-
a
\
1
`
\
]

1

05AB1E, 50 bytes

'`žhÀ"-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./"JDÀ‡

Try it online!

Explanation:

'`                                                  # 1 char string: `
  žh                                                # Push numbers 0123456789
    À                                               # Rotated 1 left (123456890)
     "-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./"      # Push string literal
                                              J     # Join all elements pushed to the stack to one string
                                               D    # Duplicate
                                                À   # Rotate 1 left
                                                 ‡  # Transliterate: a.get(b.indexOf(input))

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.