คีย์บอร์ดทดสอบ


13

ปัญหาของฉัน

ที่สถานที่ทำงานปัจจุบันของฉันฉันลำพัง (ตกลงลำพังเพราะฉันไม่มีขา) ให้บริการแล็ปท็อปประมาณ 700 เครื่อง เนื่องจากลักษณะและความถี่ในการใช้งานของพวกเขาฉันมักจะพบว่าพวกเขากลับมาพร้อมกับความเสียหายเล็กน้อย สำหรับปัญหานี้ความกังวลหลักของฉันคือเมื่อแล็ปท็อปกลับมาพร้อมกับแป้นพิมพ์ที่ชำรุดหรือชำรุด เมื่อช่างซ่อมฮาร์ดแวร์แก้ไขแป้นพิมพ์ที่เสียเหล่านี้จำเป็นต้องทำการทดสอบ การทดสอบเกี่ยวข้องกับการใช้คีย์ ... และ ... ทุก ... คีย์เดียว ... การลากถูกต้องหรือไม่ ปัญหาคือบางครั้งฉันหลงทางถ้าฉันพิมพ์รหัสหรือไม่

ทางออก?

เขียนโปรแกรม / สคริปต์ที่:

  1. ใช้อินพุตของผู้ใช้
  2. เมื่อส่ง (ไม่ว่าคุณจะเห็นว่าเหมาะสม) ให้พิจารณาว่ามีการกดแต่ละคีย์หรือไม่
  3. เอาท์พุทใช่หรือไม่ใช่หรือวิธีใดก็ได้ที่ระบุว่าฉันประสบความสำเร็จในการกดปุ่มทั้งหมดหรือไม่ (ระบุในคำตอบของคุณทั้งสองผลลัพธ์ที่เป็นไปได้หากยังไม่ชัดเจน)

สมมติฐาน:

  1. ตัวพิมพ์ใหญ่ตัวพิมพ์เล็กทั้งคู่? วิธีใดก็ตามที่คุณเห็นว่าเหมาะสม ตราบใดที่มันเป็น [AZ], [az] หรือ [A-Za-z] เช่นเดียวกันกับตัวเลขและสัญลักษณ์อื่น ๆ (ถ้า=พิมพ์ลงไป+ก็ไม่เป็นไร) ตัวเลือกของคุณหากคุณต้องการใส่อักขระที่เลื่อนหรือไม่
  2. คุณไม่ต้องกังวลกับแท็บหรือช่องว่าง
  3. ไม่จำเป็นต้องใช้ปุ่มฟังก์ชั่น, CTRL, ALT, Esc หรือปุ่มอื่น ๆ ที่ไม่ส่งสัญญาณบางอย่างบนหน้าจอ
  4. สิ่งนี้ถือว่าคีย์บอร์ด EN-US และแล็ปท็อปไม่รวม numpad
  5. ผู้ไม่เชื่อเรื่องพระเจ้าของระบบปฏิบัติการภาษาใด ๆ ที่คุณต้องการ
  6. มันไม่สำคัญว่าจะกดปุ่มหลายครั้งหรือไม่ (สำหรับเมื่อผู้ทดสอบเริ่มขี้เกียจและเริ่มกดปุ่มเหมือน Mortal Kombat)

นี่คือชุดอินพุตที่อาจเกิดขึ้นซึ่งจะคืนค่าเป็นจริง (หรือใช่หรือ "คุณทำ!")

`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./

ผู้ชนะจะพิจารณาจากจำนวนตัวอักษรน้อยที่สุด


เราจำเป็นต้องตรวจสอบว่าการกดแป้นแต่ละครั้งปรากฏขึ้นอย่างน้อยหนึ่งครั้งหรือทุกครั้งหรือไม่
xnor

@xnor หากปรากฏขึ้นหลายครั้งก็โอเค ฉันอัพเดทคำถาม
SomeShinyObject

1
โอเคนั่นมันไม่คุ้มค่าหรอก
nyuszika7h

1
@ChristopherW ถ้าเรื่องนี้เป็นปัญหาอย่างต่อเนื่องสำหรับคุณคุณควรจะมีดูที่เว็บไซต์นี้keyboardtester.com
gxtaillon

2
@MememtumMori มือนั้นใช้เทคนิคการพิมพ์คีย์บอร์ด Pennsylvania Dutch ในแถบด้านข้างหรือไม่ เหมืองทั้งหมด
SomeShinyObject

คำตอบ:


1

GolfScript ขนาด 6 ไบต์

.&,94=

หากอักขระ ASCII ทั้งหมดที่มีรหัสระหว่าง 33 ถึง 127 ปรากฏขึ้นจะพิมพ์ 1 มิฉะนั้นจะพิมพ์ 0

วิธีการนี้จะล้มเหลวหากอินพุตมีอักขระอื่น ๆ (รวมถึงบรรทัดใหม่สุดท้าย) ซึ่งได้รับอนุญาตจาก OPและยังเป็นจริงสำหรับโซลูชัน GolfScript ที่มีอยู่

การใช้

$ echo -n '!"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~' |
> golfscript <(echo '.&,94=')
1

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

.&  # Compute the intersection of the input string with itself. This removes duplicates.
,   # Compute the length of the resulting string.
94= # Push 1 if the length is 94, otherwise push 0.

ความคิดเห็นที่คุณเชื่อมโยงไม่ได้ระบุว่าข้อมูลที่ป้อนจะไม่มีการขึ้นบรรทัดใหม่ (หรืออักขระอื่น ๆ นอกเหนือจาก 33-126) แต่เพิ่งกล่าวว่าจะมีเพียงอักขระที่ถูกต้องเท่านั้น ขึ้นบรรทัดใหม่เป็นอักขระที่ไม่ถูกต้องหรือไม่
aditsu ออกจากเพราะ SE นั้นชั่วร้าย

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

6

GolfScript, 11

ASCII ที่พิมพ์ได้ไม่น่าสนใจ ...

127,32,-^,!

ทับทิม, 68

ด้วยการตั้งค่าสถานะ-rsetสำหรับ 4 อักขระ

p Set.new(?`..?z)+(?,..?9)+%w{[ ] \\ ; '}==Set.new(gets.split'')

และ

Python 3, 76

print(set("`1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./")==set(input()))

1
ฉันขอแนะนำให้โพสต์คำตอบเหล่านี้แยกกันสองคำตอบ
nyuszika7h

3

JavaScript - 62 70

alert(!(47-prompt().match(/([',-\/\d;=a-z\[-\]`]?)(?!.*\1)/g).length))

และสั้นกว่าเล็กน้อย:

alert(!!prompt().match(/([',-\/\d;=a-z\[-\]`])(?!.*\1)/g)[46])

2

CJam - 9

',33>q-!

ตรวจสอบอักขระ "shifted" ด้วย (รวมถึงตัวอักษรตัวพิมพ์ใหญ่)
ลองที่http://cjam.aditsu.net/

หมายเหตุ: มีอักขระที่มองไม่เห็น (ด้วยรหัส 127) หลังจากเครื่องหมายอัญประกาศเดี่ยว


“ ตรวจสอบอักขระที่“ เลื่อน” ด้วย (รวมถึงตัวอักษรตัวพิมพ์ใหญ่)” ฉันบอกว่านั่นเป็นพฤติกรรมที่ไม่ถูกต้อง
Ry-

@minitech "ตัวเลือกของคุณถ้าคุณต้องการใส่อักขระที่ถูกเลื่อนหรือไม่"
aditsu ออกจากเพราะ SE นั้นชั่วร้าย

แต่ก่อนหน้านั้นมันบอกว่า "ตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก" (นั่นเป็นเอกสิทธิ์ใช่ไหม?)
Ry-

@minitech ฉันได้อัปเดตคำถามแล้ว ขอโทษ นั่นหรือทำให้เข้าใจผิด
SomeShinyObject

@ChristopherW โปรแกรมของฉันจะพิมพ์ 0 ในอินพุทตัวอย่างของคุณ แต่ถ้าคุณกดทุกตัวอักษรในขณะที่กด shift ค้างไว้มันก็จะพิมพ์ 1 ตกลงไหม?
aditsu เลิกเพราะ SE นั้นชั่วร้าย

2

PHP

    foreach (str_split("`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./") as $v) {
        if (strpos($_GET['i'],$v)!==false)die(NO);
    }

$_GET['i'] คืออินพุต


1
ใช้$_GETเพื่อประหยัด 1 อักขระถ้ายอมรับได้
tomsmeding

@tomsmeding ใช่ฉันทำ :)
Alireza Fallah

คุณสามารถเพิ่มอักขระ padding (éหรือบางอย่าง) ที่ด้านหน้าของสตริงของคุณและลบ!==falseเพื่อบันทึก 8 ตัวอักษรจากนั้นวงเล็บปีกกาอีก 4 นี้จะทำให้register_globals เป็นไปได้ "é$i"die(NO)
Ry-

@minitech - ฉันไม่รู้ว่าคุณกำลังพูดอะไร อย่าลังเลที่จะแก้ไขคำตอบของฉันแทน
Alireza Fallah


1

Haskell, 41 (สองโซลูชั่น)

interact(\y->show$all(`elem`y)[' '..'`'])

หรือ (สไตล์ที่ไม่มีจุด)

interact$show.(`all`[' '..'`']).flip elem

ต้องป้อนอย่างน้อยอักขระเหล่านี้:

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`

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


0

Perl, 70 ตัวอักษร

say[sort grep!$s{$_}++,<>=~/\S/g]~~[sort"',-./;=[\]`"=~/./g,0..9,a..z]

การใช้งาน:

echo `134223423567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./ | perl -E 'say[sort grep!$s{$_}++,pop=~/\S/g]~~[sort"',-./;=[\]`"=~/./g,0..9,a..z]'

พิมพ์ 1 หากการกดแป้นทั้งหมดปรากฏขึ้นมิฉะนั้นจะไม่พิมพ์อะไรเลย


ต้องใช้ Perl 5.10+
Zaid

ในเชลล์ส่วนใหญ่ตัวอย่างของคุณจะล้มเหลวเนื่องจากอักขระบางตัวในสตริง echoed ต้องการการหลบหนี
Dennis

0

C, 97 ตัวอักษร

main(long a,char**u){a=0xfb0000000750003d;for(u++;**u;a|=2L<<*(*u)++-39);a=48+!~a;write(1,&a,1);}

จำเป็นต้องเรียกโปรแกรมด้วยอาร์กิวเมนต์ที่มีตัวอักษรอย่างน้อย:

`1234567890-=AZERTYUIOPQSDFGHJKLMWXCVBN[]\;',./

และรับคำตอบ 1 (จริง) ชุดอักขระสามารถเปลี่ยนแปลงได้โดยการเปลี่ยนค่าเริ่มต้นของ

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