Bàn phím kiểm tra


13

Vấn đề của tôi

Tại nơi làm việc hiện tại của tôi, tôi một tay (ok hai tay vì tôi không thiếu chân tay) duy trì khoảng 700 máy tính xách tay. Do tính chất và tần suất sử dụng của chúng, tôi thường thấy chúng được trả lại với một chút thiệt hại. Đối với vấn đề này, mối quan tâm chính của tôi là khi máy tính xách tay bị trả lại với bàn phím bị hỏng hoặc không còn hoạt động. Khi thợ sửa chữa phần cứng sửa các bàn phím bị hỏng này, việc kiểm tra chúng là cần thiết. Bài kiểm tra bao gồm sử dụng từng ... và ... mỗi ... một ... phím. Thật là một kéo đúng không? Vấn đề là, đôi khi tôi mất dấu nếu tôi gõ phím hay không.

Một giải pháp?

Viết chương trình / kịch bản:

  1. Đưa đầu vào của người dùng
  2. Khi gửi (theo bất kỳ cách nào bạn thấy phù hợp), hãy xác định xem mỗi phím có được nhấn hay không.
  3. Đầu ra có hoặc không hoặc bất kỳ cách nào để chỉ ra rằng tôi đã thành công trong việc nhấn tất cả các phím hay không. (Cho biết trong câu trả lời của bạn hai kết quả đầu ra có thể nếu đó không phải là điều gì đó rõ ràng).

Giả định:

  1. Chữ hoa, chữ thường, cả hai? Bất cứ cách nào bạn thấy phù hợp. Miễn là [AZ], [az] hoặc [A-Za-z]. Tương tự với số và các ký hiệu khác. (Vì vậy, nếu =được nhập vào, +không thành vấn đề). Lựa chọn của bạn nếu bạn muốn bao gồm các ký tự thay đổi hay không.
  2. Bạn không cần lo lắng về các tab hoặc không gian
  3. Không cần các phím chức năng, CTRL, ALT, Esc hoặc bất kỳ phím nào khác không xuất ra thứ gì đó trên màn hình
  4. Điều này giả sử bàn phím EN-US và máy tính xách tay không bao gồm bàn phím số.
  5. Hệ điều hành bất khả tri, bất cứ ngôn ngữ nào bạn thích
  6. Sẽ không có vấn đề gì nếu phím được nhấn nhiều lần (vì khi người kiểm tra lười biếng và bắt đầu đập nút như thế là Mortal Kombat)

Đây là một bộ đầu vào tiềm năng sẽ trả về đúng (hoặc có, hoặc "Bạn đã làm được!")

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

Người chiến thắng được xác định bởi số lượng nhân vật ít nhất.


Chúng ta có cần kiểm tra xem mỗi tổ hợp phím xuất hiện ít nhất một lần hay chính xác một lần không?
xnor

@xnor, Nếu nó xuất hiện nhiều lần thì không sao. Tôi cập nhật câu hỏi.
Một sốShinyMonica

1
Được rồi, điều đó không đáng.
nyuszika7h

1
@ChristopherW Nếu đây là một vấn đề đang diễn ra với bạn, bạn nên xem trang web này keyboardtester.com .
gxtaillon

2
@MomemtumMori, bàn tay đó đang thực hiện kỹ thuật bàn phím Pennsylvania Dutch ở thanh bên? Hoàn toàn là của tôi.
Một sốShinyMonica

Câu trả lời:


1

GolfScript, 6 byte

.&,94=

Nếu tất cả các ký tự ASCII có mã từ 33 đến 127 có mặt, nó sẽ in 1. Mặt khác, nó sẽ in 0.

Cách tiếp cận này sẽ thất bại nếu đầu vào chứa các ký tự khác (bao gồm một dòng mới cuối cùng), được OP cho phép và cũng đúng với giải pháp GolfScript hiện có.

Sử dụng

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

Làm thế nào nó hoạt động

.&  # 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.

Nhận xét bạn đã liên kết không nói rằng đầu vào sẽ không chứa một dòng mới (hoặc các ký tự khác ngoài 33-126), nó chỉ nói rằng nó sẽ chỉ chứa các ký tự hợp lệ. Là dòng mới là một nhân vật không hợp lệ?
aditsu

Theo giá trị, tôi có nghĩa là trong phạm vi chúng tôi đang thử nghiệm , nhưng tôi đoán tôi nên thể hiện bản thân rõ ràng hơn khi hỏi OP ...
Dennis

6

GolfScript, 11

ASCII có thể in không phải là điều thú vị

127,32,-^,!

Hồng ngọc, 68

Với cờ -rsetcho 4 ký tự.

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

Trăn 3, 76

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

1
Tôi khuyên bạn nên đăng những điều này trong hai câu trả lời riêng biệt.
nyuszika7h

3

JavaScript - 62 70

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

Và ngắn hơn một chút:

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

2

CJam - 9

',33>q-!

Nó cũng kiểm tra các ký tự "đã dịch chuyển" (bao gồm cả chữ in hoa).
Dùng thử tại http://cjam.aditsu.net/

Lưu ý: có một ký tự vô hình (có mã 127) sau dấu nháy đơn.


Tôi cũng kiểm tra các ký tự "đã dịch chuyển" (bao gồm cả chữ in hoa). Tôi muốn nói rằng đó là hành vi không đúng.
Ry-

@minitech "Lựa chọn của bạn nếu bạn muốn bao gồm các ký tự được thay đổi hay không."
aditsu

Nhưng ngay trước đó, nó nói rằng Uppercase HOẶC chữ thường (đó là độc quyền, phải không?)
Ry-

@minitech, tôi cập nhật câu hỏi. Lấy làm tiếc. Điều đó HOẶC là sai lệch.
Một sốShinyMonica

@ChristopherW Chương trình của tôi sẽ in 0 trên đầu vào ví dụ của bạn, nhưng nếu bạn cũng nhấn tất cả các ký tự đó trong khi giữ shift, nó sẽ in 1. Điều đó có ổn không?
aditsu

2

PHP

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

$_GET['i'] là đầu vào


1
Sử dụng $_GETđể tiết kiệm 1 char nếu nó chấp nhận được.
tomsmeding

@tomsmeding, vâng tôi đã làm :)
Alireza Fallah

Bạn có thể thêm một ký tự đệm (é hoặc một cái gì đó) vào phía trước chuỗi của bạn và loại bỏ !==falseđể lưu 8 ký tự, sau đó niềng răng thêm 4 ký tự. register_globalslàm cho điều này "é$i". die(NO)cũng có thể
Ry-

@minitech - Tôi không biết bạn nói gì, nhân vật đệm? thay vào đó, vui lòng chỉnh sửa câu trả lời của tôi
Alireza Fallah

1

Con trăn 72:

f=lambda x:set(x)==set("`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./")

3
OP yêu cầu một chương trình lấy đầu vào của người dùng.
nyuszika7h

1

Haskell, 41 (hai giải pháp)

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

hoặc (kiểu không có điểm)

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

Cần nhập ít nhất các ký tự này:

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

theo thứ tự, số lần Nhân vật phụ được cho phép. Chạy trong một thông dịch viên. Phải nhấn Enter khi bạn hoàn thành, nhưng nếu bạn nhấn Enter trước khi hoàn thành, bạn có thể tiếp tục nhập các ký tự và nhấn Enter lần nữa. Sẽ in Truenếu bạn đã nhấn mọi ký tự, nếu không nó sẽ không in bất cứ thứ gì.


0

Perl, 70 ký tự

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

Sử dụng:

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

In 1 nếu tất cả các tổ hợp phím hiện diện, khác không in gì.


Yêu cầu Perl 5.10+
Zaid

Trong hầu hết các shell, ví dụ của bạn sẽ thất bại vì một số ký tự trong chuỗi lặp lại yêu cầu thoát.
Dennis

0

C, 97 ký tự

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

Cần gọi chương trình với đối số chứa ít nhất các chữ cái:

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

và nhận được câu trả lời 1 (đúng). Bộ ký tự có thể được thay đổi bằng cách thay đổi giá trị khởi tạo của a.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.