คีย์แถวใดอยู่


39

รับอักขระใด ๆ ต่อไปนี้ (หรือขึ้นบรรทัดใหม่):

`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:"zxcvbnm,./ZXCVBNM<>?

โปรแกรมของคุณต้องแสดงผลแถวที่อยู่บนแป้นพิมพ์


เนื่องจากแป้นพิมพ์ของฉันเกือบหมดแบตเตอรี่รหัสของคุณต้องสั้นที่สุด


แป้นพิมพ์ที่โปรแกรมของคุณควรใช้ (สำหรับการค้นหาแถว) ควรมีลักษณะดังนี้:


Row 1:~` !1@2 #3$4 %5^6 &7*8 (9)0 _-+=                          

Row 2:                         Q W E R T Y U I O P {[ }]    |\   
Row 3:                              A S D F G H J K L :; "' return  
Row 4:                                 Z X C V B N M <, >. ?/                 
Row 5:                                                    space                                                   

  returnบรรทัดใหม่อยู่ที่ไหน ปุ่มว่างเปล่าไม่ได้มีความหมายอะไรเลย

ตัวอย่าง

"$"
1

"R"
2

"a"
3

"?"
4

"\n"
3

" "
5

ที่\nเป็นตัวอักษรขึ้นบรรทัดใหม่

ข้อมูลจำเพาะ

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

3
บางทีการจำแนก ?
lirtosiast

3
นั่นคือซ้อนกันสองครั้งkbdหรือไม่?
Conor O'Brien

ฉันจำได้ว่าเมื่อหลายปีก่อนโดยใช้ภาษาที่ส่งคืนการกดคีย์เหมือน 100 × row + position ... คงจะสมบูรณ์แบบสำหรับสิ่งนี้ แต่น่าเสียดายที่ฉันจำไม่ได้ว่ามันคืออะไร บางทีบางรูปแบบของ BASIC ...
อดัม

@NBZ มันคือ Blitz แบบพื้นฐานหรือไม่
wizzwizz4

1
@ wizzwizz4 คุณลองใช้ BlitzPlus แล้วหรือยัง ได้ฟรีและดูเหมือนว่าเป็นสิ่งที่คุณต้องการ
HolyBlackCat

คำตอบ:


6

Pyth, 62 66 65 ไบต์

?zh@+,4Zmid2c.Bi."0fÀÓ¸[9Ѷ¤KïLäHÉðbÀ`]ü©¬vS"16 2-CzCd3

ลองออนไลน์

ใช้สตริงบรรจุแทนจำนวนในฐานสิบหกซึ่งเมื่อสับเป็นชิ้นสองบิตหมายถึงแถวของตัวละครทุกตัวยกเว้นและ!เป็นค่าจาก 0 ถึง 3 เราออกไปและ!เพื่อให้เราไม่ได้มีการจัดเก็บ 4 หรือมี 0 +,4Zในช่วงเริ่มต้นของจำนวนนี้แล้วเพิ่มค่าแถวของตนโดยใช้ เมื่อเราเปลี่ยนสตริงให้เป็นค่าแถวสิ่งที่เราต้องทำคือใช้รหัสตัวอักษรของอินพุตเพื่อจัดทำดัชนีให้เป็นอาร์เรย์ของค่าแล้วเพิ่ม 1

ขึ้นบรรทัดใหม่ได้รับการจัดการแยกต่างหากเพราะ Pyth ถูกตีความว่าเป็นสตริงว่างดังนั้นจึงมีรหัสอักขระเป็น 0

นี่จะสั้นกว่านี้หากฉันสามารถหาวิธีใช้ฐาน 256 ใน Pyth ได้ แต่ฉันไม่สามารถทำให้มันใช้งานได้


4
o.0 เริ่มบีบ Japt
nicael

สิ่งนี้ทำให้ฉันอับอาย
JuanPotato

:( ฉันลืมเกี่ยวกับ newline! @nicael คุณกลับมาอยู่ด้านบนแล้ว
ลุค

ตอนนี้เราตายแล้ว!
ลุค

คุณต้องหลบหนี null bytes ใน Pyth
lirtosiast

12

JavaScript (ES6), 105 102 101 ไบต์

c=>/[~`0-9!@#-&^(-+_=-]/.test(c)+/[asdfghjkl;:'"\n]/i.test(c)*3+/[zxcvbnm,<.>/?]/i.test(c)*4||++c*7^2

คำอธิบาย

ใน JavaScript testส่งคืนบูลีนซึ่งทำหน้าที่เหมือนกับ1หรือ0ดังนั้นฉันจึงคูณพวกมันด้วยแถวของพวกเขา การทดสอบแถวที่ 2 ใช้ไบต์มากที่สุดดังนั้นฉันจึงใช้อันนั้นเป็นค่าเริ่มต้นหากไม่มีการจับคู่แบบอื่น

c=>
  /[~`0-9!@#-&^(-+_=-]/.test(c)   // row 1 regex
  +/[asdfghjkl;:'"\n]/i.test(c)*3 // row 3 regex
  +/[zxcvbnm,<.>/?]/i.test(c)*4   // row 4 regex
  ||++c                           // space ++ = 1, any character on row 2 ++ = NaN
    *7^2                          // 7 XOR 2 = 5, NaN XOR 2 = 2

ทดสอบ


1
> NaN XOR 2 = 2 - ???
lirtosiast

1
@ThomasKwa นั่นเป็นเพียงวิธีการที่ JS ทำงาน lol ถ้าc="q", ++c= NaN, NaN*7= NaN, NaN^2แปลงตัวถูกดำเนินการเพื่อจำนวนเต็ม (uncastables ชอบNaNกลายเป็น0) แล้วไม่ซึ่งเป็น0 XOR 2 2
user81655

5

Glava 1.5 , 164 bytes

Glava เป็นภาษาถิ่นของ Java ที่ทำให้รหัส Java สั้นลง น่าเสียดายที่รหัสนี้ไม่สามารถแข่งขันได้เนื่องจากการคอมมิชชัน (ล่าช้า 2 ชั่วโมง ... ) ที่ใช้ทำขึ้นหลังจากการท้าทายนี้ซึ่งแก้ไขข้อบกพร่องสำคัญบางอย่างที่ไม่อนุญาตให้โปรแกรมนี้ทำงานได้

p(A[0].matches("[`0-9-=~!@#$%^&*()_+]")?1:A[0].replace("\\n","\n").matches("(?i)[asdfghjkl;':\"\n]")?3:A[0].matches("(?i)[zxcvbnm,.\\/<>?]")?4:A[0].matches(" ")?5:2

นี่เป็นโปรแกรมเต็มรูปแบบที่รับอินพุตผ่านอาร์กิวเมนต์บรรทัดคำสั่ง ทำงานโดยการทดสอบว่าแถวไหนตรงกับ regex จากนั้นจะแสดงผลตัวเลขที่เกี่ยวข้อง


Glava = Guava + Java
Downgoat

2
@ Doᴡɴɢᴏᴀᴛ Glava = Golf + Java (เป็นความคิดของ Conor)
GamrCorps

แน่นอน! @ Doᴡɴɢᴏᴀᴛ
Conor O'Brien

4

Python 3, 142

print(int(("~`!1@2#3$4%5^6&7*8(9)0_-+=""qwertyuiop{[}\|"+"]"*11+'asdfghjkl;:"\n'"'"*13+"zxcvbnm,<.>/""?"*14+" ").index(input().lower())/26)+1)

อาจเป็นวิธีที่สั้นกว่าที่ฉันเห็น¯ \ _ (ツ) _ / ¯


4

Pyth , 98

|+++l:"~`0123456789!@#$%^&*()_-=+"z1*l:"asdfghjkl;:'\"\n"rz0 1 3*l:"zxcvbnm,<.>/? "rz0 1 4 l:dz1 2

ไม่แน่ใจว่าจะให้ช่วง 0-9 ทำงานด้วยเหตุผลบางอย่าง: | ได้แรงบันดาลใจจากคำตอบของผู้ใช้ 81655


คุณสามารถใช้jkUTสำหรับสตริงที่มีช่วง 0 ถึง 9 ไม่แน่ใจว่ามีวิธีที่สั้นกว่านี้หรือไม่ นอกจากนี้คุณยังสามารถใช้สตริงบรรจุบันทึกไม่กี่ไบต์เช่นสำหรับ."!~WÏù¹_(<]úÝ" "~`!@#$%^&*()_-=+"
ลุค

จาก @benstopics สิ่งนี้จะล้มเหลวสำหรับ metacharacters regex
FryAmTheEggman

4

Bash, 108

ไม่มีคำตอบ Bash? ทุบตีคำตอบ grep -Finเป็นเครื่องมือที่เหมาะสมสำหรับงานนี้อย่างแน่นอน

โปรแกรมนี้มีสองไฟล์

k, 73 ไบต์

`1234567890-=~!@#$%^&*()_+
qwertyuiop[]\{}|
asdfghjkl;':"
zxcvbnm,./<>?

มี 5 บรรทัดสุดท้ายคือช่องว่าง หากคุณมีปัญหาในการทำซ้ำไฟล์ base64 คือ:

YDEyMzQ1Njc4OTAtPX4hQCMkJV4mKigpXysKcXdlcnR5dWlvcFtdXHt9fAphc2RmZ2hqa2w7JzoiCnp4Y3Zibm0sLi88Pj8KIA==

b, 34 ไบต์

นี่คือโปรแกรมเองมันรับอินพุตเป็นอาร์กิวเมนต์บรรทัดคำสั่งเท่านั้น

grep -Fin "$1" k|tail -n3|head -c1

คะแนน: 34 + 73 + 1 (สำหรับkชื่อไฟล์) = 108 ไบต์

Ungolfed

grep --fixed-strings --ignore-case --line-number "$1" k|tail --lines=3|head --bytes=1

คำอธิบาย

  • grep - ค้นหาไฟล์เพื่อหาบรรทัดที่จับคู่สตริงหรือนิพจน์ปกติเอาท์พุทเฉพาะบรรทัดเหล่านั้น
  • -Fอาคา--fixed-strings- ปิดการใช้งานการแสดงออกปกติดังนั้น[ฯลฯ ได้รับการจัดการอย่างถูกต้อง
  • -iaka -yaka --ignore-case- การจับคู่ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
  • -naka --line-number- แสดงหมายเลขบรรทัดและ: ก่อนทุกบรรทัด (เช่น4:zxcvbnm,./<>?)
  • "$1" - ค้นหาอาร์กิวเมนต์บรรทัดคำสั่งแรกของสคริปต์เครื่องหมายคำพูดจำเป็นต้องจัดการกับการขึ้นบรรทัดใหม่และพื้นที่
  • k - ค้นหาในไฟล์ k
  • grepคำสั่งนี้จะจับคู่ทั้งห้าบรรทัดถ้าอินพุตเป็นบรรทัดใหม่และมีเพียงหนึ่งบรรทัดเท่านั้น
  • | - ไพพ์ส่งเอาต์พุตมาตรฐานของหนึ่งคำสั่งไปยังอินพุตมาตรฐานของถัดไป
  • tail - เอาต์พุตบรรทัด N สุดท้ายหรืออักขระของอินพุตมาตรฐาน
  • -n3อาคา--lines=3- ส่งออก 3 บรรทัดสุดท้าย
  • ถ้าใส่ไม่ได้ขึ้นบรรทัดใหม่มีเพียงบรรทัดเดียวกับกระบวนการที่เริ่มต้นด้วยหมายเลขแถวเพราะธง-n grepมิฉะนั้นคำสั่งนี้ใช้เพียงบรรทัดที่ 3, 4 และ 5 (3 บรรทัดสุดท้าย)
  • | - ท่อ
  • head - เอาต์พุตบรรทัด N แรกหรืออักขระของอินพุตมาตรฐาน
  • -c1อาคา--bytes=1- ส่งออกอักขระตัวแรก
  • หากอินพุตไม่ใช่บรรทัดใหม่อักขระนี้จะใช้อักขระตัวแรกซึ่งเป็นหมายเลขบรรทัดที่พบอินพุต หากอินพุตเป็นบรรทัดใหม่จะใช้อักขระตัวแรกของบรรทัด 3, 4 และ 5 รวมกันซึ่งก็คือ 3 ซึ่งเกิดขึ้นเป็นหมายเลขแถวที่ถูกต้องสำหรับ newline

4

Japt, 73 70 66 ไบต์

2+`qØÆyuiop\{}[]|\\1dfghjkl;:
'1zxcvbnm,.<>?/\"1 `q1 ®bUv)<0} b!1

ลองออนไลน์! (ในตัวอย่างอินพุตเป็นบรรทัดใหม่อย่างแท้จริง)


Nice, shortest จนถึงตอนนี้!
ETHproductions

@Eth yup อย่างน้อยหนึ่งครั้งฉันควรโพสต์ข้อความสั้น ๆ : D
nicael


@Eth Heh, !1เป็นสิ่งที่ตรงกับ "false" ในที่สุดฉันรู้วิธีที่จะทำมันขอบคุณ :)
nicael

@Eth halp ต้องการ 5 ไบต์เพื่อเอาชนะ Pyth
nicael

4

Java, 300 ไบต์

import java.util.Scanner;public class A{public static void main(String[] args){String g="~`!1@2#3$4%5^6&7*8(9)0_-+=qQwWeErRtTyYuUiIoOpP[{]}\\|aAsSdDfFgGhHjJkKlL;:\'\"\r";Scanner i=new Scanner(System.in);int f=g.indexOf((i.nextLine().charAt(0)));System.out.print(f<0?4:(f<26?1:(f<53?2:(f<76?3:5))));}}

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


เพิ่งสังเกตว่ามันขัดข้องด้วยอินพุตว่าง (ขึ้นบรรทัดใหม่ / การขึ้นบรรทัดใหม่) จะแก้ไขเมื่อฉันสามารถ
Andrew

ยินดีต้อนรับสู่ชุมชน!
Erik the Outgolfer

ยินดีต้อนรับ (สายเล็กน้อยตั้งแต่คุณโพสต์ในเดือนมกราคม xD) คุณสามารถตีกอล์ฟได้บ้างโดยไม่ต้องเปลี่ยนวิธีการปัจจุบันของคุณเช่นนี้class A{public static void main(String[]a){int f="~'!1@2#3$4%5^6&7*8(9)0_-+=qQwWeErRtTyYuUiIoOpP[{]}\\|aAsSdDfFgGhHjJkKlL;:\'\"\r".indexOf(new java.util.Scanner(System.in).nextLine().charAt(0));System.out.print(f<0?4:f<26?1:f<53?2:f<76?3:5);}}( 243 ไบต์ ) ฉันลบวงเล็บที่ไม่จำเป็นออก สั้นลงargs; ลบออกpublic ; ใช้สตริงและสแกนเนอร์โดยตรง และลบการนำเข้าjava.util.Scannerทันทีที่ใช้เพียงครั้งเดียว
Kevin Cruijssen

ไบต์ 219คุณไม่จำเป็นต้องใช้เครื่องสแกนสำหรับสิ่งนี้
PrincePolka

3

Pyth, 105 ไบต์

J?<l-c".^$*+?{}[]\|()"1]z14+\\zrz0?qJd5?:"qwertyuiop[]\|"J)2?:"asdfghjkl;':\"\n"J)3?:"zxcvbnm,./<>?"J)4 1

คำอธิบาย:

J?<l-c".^$*+?{}[]\|()"1]z14+\\zrz0     # Escape input if regex metachar
?qJd5                                  # Check space
?:"qwertyuiop[]\|"J)2                  # Check second row
?:"asdfghjkl;':\"\n"J)3                # Check third row
?:"zxcvbnm,./<>?"J)4                   # Check fourth row
1                                      # If none of these, must be on first row.

ฉันตัดสินใจเลือกแถวแรกเนื่องจากแถว "ต้องเป็นถ้าไม่มีอย่างอื่น" เนื่องจากต้องใช้จำนวนไบต์มากที่สุดเพื่อแสดงถึงแม้หลังจากเล่นกอล์ฟแล้ว


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

3

Perl 6, 128 ไบต์

say 1+(/<[-\d=~!@#$%^&*()_+/`]>/,/<[qwertyuiop[\]\\{}|]>/,/<[asdfghjkl;':"\n]>/,/<[zxcvbnm,./<>?]>/,' ').first: @*ARGS.lc~~*,:k

ฉันสร้างรายการของ regexes ที่มีคลาสอักขระพร้อมกับช่องว่างตัวอักษรสตริง ฉันจะเรียกfirstวิธีการในรายการ (ซึ่งเป็นเพียงรุ่นวิธีการของfirstฟังก์ชั่นการสั่งซื้อที่สูงขึ้น) โดยใช้ smartmatch เพื่อเปรียบเทียบการโต้แย้งที่ส่งผ่านไปยังโปรแกรมกับรายการปัจจุบันในรายการ โปรดทราบว่า smartmatch ทำ "สิ่งที่ถูกต้อง" สำหรับทั้ง regexes และตัวอักษรสตริง :kพารามิเตอร์ตัวเลือกที่จะfirstสาเหตุวิธีการที่จะกลับดัชนีของรายการที่ตรงกันในรายการซึ่งฉันแล้วเพิ่ม 1 sayไปและเอาท์พุทผ่าน

โปรดทราบว่าเมื่อใช้โปรแกรมนี้คุณจะต้องหลีกเลี่ยงอักขระบางตัวเช่น `และเว้นวรรคในเชลล์ของคุณอย่างถูกต้อง ตัวอย่างเช่น: perl6 keyboard.p6 \ '


เนื่องจากยังไม่มีใครพูดถึงมันขอต้อนรับสู่ Programming Puzzles & Code Golf!
Erik the Outgolfer

2

JavaScript ES6, 114 ไบต์

n=>[`qwertyuiop{}[]|\\`,`asdfghjkl;:
'`,`zxcvbnm,.<>?/"`,` `].map(x=>+(x.indexOf(n.toLowerCase())<0)).indexOf(0)+2

โซลูชัน JavaScript อื่น หลักการคือส่งคืนดัชนีของอินพุตถ่านในอาร์เรย์ของแถวบวก 2 (ดังนั้นเมื่อ 0-9 แถวส่งคืน -1 นั่นคือไม่มีอยู่ -1 + 2 = 1. qอยู่ในสตริงแรกของอาร์เรย์ ดังนั้นมันจึงส่งกลับ 0 + 2 = แถวที่ 2)


2

Perl, 96 77 76 ไบต์

perl -pทำงานโดยใช้ ตรวจสอบให้แน่ใจว่าคุณป้อนเพียงอักขระเดียว ตัวอย่างเช่นในการเรียกใช้จากไฟล์(เพื่อหลีกเลี่ยงสิรอบกับลำดับเปลือกหลบหนี)key.plecho -n q|perl -p key.pl

$_=/[\d~`!@#-&(-+_=-]/+/[adfghjkls"':;
]/i*3+/[bcnmvxz<>,.?\/]/i*4+/ /*5||2

การใช้ฟังก์ชัน regex ในทางที่ผิดนั้นสนุก


สำหรับฉันสิ่งนี้ไม่ทำงานฉันจะได้ดัชนีของแถว + 3 (เช่น 3 แทนที่จะเป็น 0, 7 แทนที่จะเป็น 4 เป็นต้น)
ChatterOne

มันอ่อนไหวต่อวิธีการป้อนข้อมูลของคุณ คุณอาจระบุอักขระตามด้วยการขึ้นบรรทัดใหม่ ฉันใช้echoควบคุมอินพุตอย่างแม่นยำ - ซึ่งถูกต้องผลิตecho -n q|perl -n key.pl 2
ทำเครื่องหมาย

อ้อเข้าใจแล้ว. นั่นก็อธิบายได้ว่าทำไมคุณถึงไม่chompป้อนข้อมูล
ChatterOne

1
หากฉันchompแก้ไขอินพุตฉันจะไม่สามารถส่งคืน '3' สำหรับคีย์ส่งคืนได้
ทำเครื่องหมาย

1
สวัสดี @ Mark คุณไม่ต้องการการ$_=~แข่งขันm//(ซึ่งคืออะไร/.../) จะทำงาน$_โดยอัตโนมัติ! นอกจากนี้หากคุณใช้-pแทนคุณ-nสามารถใช้$_=แทนprintเพื่อบันทึกอีกสองสามไบต์ การใช้บรรทัดใหม่ตามตัวอักษรแทน\nจะช่วยให้คุณประหยัดอีกไบต์เช่นกัน! ควรลดรหัสของคุณลงเล็กน้อย! อาจจะมีมูลค่าเพิ่มการใช้งานตัวอย่างเช่นกันเพื่อให้การทดสอบทุกคนรู้ว่าคุณต้องใช้echo -n:)
Dom เฮสติ้งส์

2

PHP, 173 ไบต์

แนวคิดที่นี่คือการใช้หมายเลขกลุ่มการจับภาพ regex เป็นดัชนีแถว อาจจะมีการเพิ่มประสิทธิภาพมากขึ้นใน regex เอง

$i=$argv[1];preg_match("%([!#-&\(-+-0-9=@^-`~])|([EIO-RT-UWY[-]eio-rt-uwy{-}])|([\"':-;ADF-HJ-LSadf-hj-ls])|([,.-/<>-?B-CM-NVXZb-cm-nvxz])%",$i,$m);echo array_flip($m)[$i];

การpreg_match()โทรจะสร้างอาเรย์$mของการแข่งขันและถ้าเราจะพิมพ์มันจะมีลักษณะเช่นนี้ (สมมติว่าzเป็นอินพุต):

Array ( [0] => 'z', [1] => '', [2] => '', [3] => '', [4] => 'z' )

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

Array ( 'z' => 4, '' => 3 )

จากนั้นเราใช้อักขระอินพุตเป็นดัชนีในอาร์เรย์เพื่อรับผลลัพธ์ของเรา

ลองมันออกจากที่นี่


2

C, 145 143 136 132 127 106 ไบต์

#define c 2124850936,91714965
b[]={8<<18,0,-218071008,7796<<19,c,c};f(a){return a-32?b[a>>4]>>a%16*2&3:4;}

สิ่งนี้ใช้index()จาก POSIX.1-2001 และเลิกใช้แล้วใน POSIX.1-2008 สิ่งนี้จะถือว่า ASCII และ 32 บิต ints


2

Python 3, 89 ไบต์

print("qwertyuiop{}[]\\|asdfghjkl;:\"\n'''zxcvbnm,.<>/???? ".find(input().lower())//16+2)

เนื่องจากฉันยังไม่สามารถแสดงความคิดเห็นได้ฉันกำลังโพสต์การปรับปรุงสำหรับคำตอบ Python 3 ปัจจุบันแยกจากกัน

แก้ไข : รหัสทั้งหมดในprintตอนนี้และปรับแต่งเพิ่มเติม


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

@FlipTack: คุณพูดถูก ฉันได้รวมข้อเสนอแนะของคุณ
creativecoding

ยินดีต้อนรับสู่ PPCG!
Martin Ender

@ มาร์ตินเอนเดอร์: ขอบคุณ! :-)
creativecoding


0

CJam, 125 ไบต์

q_" "={;5}{"`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:\"    zxcvbnm,./ZXCVBNM<>?    "\#26/1+}?

คำอธิบาย

q                          e# read input
 _" "=                     e# decide if the input is a space
      {;5}                 e# if it is, push 5
          {"..."\#26/1+}?  e# if it isn't, push the correct row

0

SpecBAS - 178 ไบต์

1 a$="~`!1@2#3$4%5^6&7*8(9)0-_+=qQwWeErRtTyYuUiIoOpP{[}]|\aaaaAsSdDfFgGhHjJkKlL:;'"#34#13"zzzzzzzZxXcCvVbBnNmM<,>.?/"+" "*26
2 INPUT k$: IF k$="" THEN k$=#13
3  ?CEIL(POS(k$,a$)/26)

ฉันใช้สตริงยาวที่แต่ละแถวมีความยาว 26 ตัวอักษร (# 34 คือรหัสสำหรับเครื่องหมายคำพูดคู่และ # 13 คือรหัสสำหรับส่งคืน)

จากนั้นพิมพ์ผลลัพธ์ของตำแหน่งการปัดเศษ / 26


0

C # 6, 201 ไบต์

ไม่มีอะไรพิเศษที่นี่ ฉันพบว่าถูกกว่าการเขียนทั้งสองกรณีแทนที่จะใช้ ToUpper () เนื่องจากความกว้างคงที่ของสตริง

using C=System.Console;class P{static void Main(string[]a)=>C.Write("`1234567890-=~!@#$%^&*()_+qwertyuiop[]\\QWERTYUIOP{}|asdfghjkl;'\raASDFGHJKL:\"\nazxcvbnm,./zzzZXCVBNM<>?zzz ".IndexOf(a[0])/26+1);}

เยื้อง:

using C=System.Console;
class P{
    static void Main(string[]a)=>
        C.Write("`1234567890-=~!@#$%^&*()_+qwertyuiop[]\\QWERTYUIOP{}|asdfghjkl;'\raASDFGHJKL:\"\nazxcvbnm,./zzzZXCVBNM<>?zzz ".IndexOf(a[0])/26+1);
}

1
ฉันไม่เห็นการทำงานนี้สำหรับ ~ หรือ `
Ash Burlaczenko

@AshBurlaczenko ขอบคุณ! ฉันพลาดกุญแจนั้นไป แก้ไขโดยไม่เปลี่ยนเป็นคะแนนของฉัน
Hand-E-Food


0

Excel, 132 ไบต์

=INT((FIND(A1,"`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:""aaa zxcvbnm,./ZXCVBNM<>?zzzzzz ")-1)/26)+1

ความพยายามที่จะใช้ในกรณีที่มีความละเอียดอ่อนSEARCH()แทนการFIND()เปิดเผยว่า Excel ตรง~, *และ?เพื่อ(tick). The matching of? means we can't useค้นหา () `ซึ่งจะโกนใหญ่ 5 ไบต์ ...

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