Klavyeleri Test Etme


13

Benim sorunum

Şu anki iş yerimde, tek elimle (uzuvlarım eksik olduğu için çift elli olarak ok) yaklaşık 700 dizüstü bilgisayar kullanıyorum. Kullanımlarının doğası ve sıklığı nedeniyle, çoğu zaman biraz hasarla döndüklerini görüyorum. Bu sorun için, birincil endişem bir dizüstü bilgisayar kırık veya geçersiz klavyeyle döndüğünde. Donanım tamircisi bu kırık klavyeleri düzelttiğinde, bunları test etmek gerekir. Test, her ... ve ... her ... tek ... tuşun kullanılmasını içerir. Ne sürükleme doğru? Sorun şu ki, bazen bir anahtar yazıp yazmamamın izini kaybederim.

Bir çözüm?

Aşağıdakileri yapan bir program / komut dosyası yazın:

  1. Kullanıcı girdisi alır
  2. Gönderildikten sonra (uygun gördüğünüz şekilde), her tuşun basılı olup olmadığını belirler.
  3. Çıktılar evet ya da hayır ya da herhangi bir şekilde tüm tuşlara basmakta başarılı olup olmadığımı belirtmek. (Açık bir şey değilse cevabınızda iki olası çıkışı belirtin).

Varsayımlar:

  1. Büyük harf, küçük harf, her ikisi mi? Hangi yolu seçerseniz seçin. [AZ], [az] veya [A-Za-z] olduğu sürece. Sayılar ve diğer semboller için de aynı şey geçerli. (Yani =yazılırsa +önemli değil). Değiştirilen karakterleri dahil etmek isteyip istemediğiniz seçiminiz.
  2. Sekmeler veya boşluklar hakkında endişelenmenize gerek yok
  3. Fonksiyon tuşları, CTRL, ALT, Esc veya ekranda bir şey vermeyen diğer tuşlara gerek yok
  4. Bu TR-TR klavye varsayar ve dizüstü yok bir numpad bulunmaktadır.
  5. OS agnostic, hangi dili tercih ederseniz edin
  6. Tuşa birden çok kez basılması önemli değil (test cihazı tembelleştiğinde ve Mortal Kombat gibi düğmeyi parçalamaya başladığında)

İşte true döndürecek potansiyel bir girdi kümesi (veya evet veya "Başardınız!")

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

Kazanan en az karakter ile belirlenir.


Her tuş vuruşunun en az bir kez mi yoksa tam olarak bir kez mi görüntülendiğini kontrol etmemiz gerekir mi?
xnor

@xnor, Birden çok kez görünüyorsa sorun olmaz. Soruyu güncelledim.
SomeShinyObject

1
Tamam o zaman buna değmez.
nyuszika7h

1
@ChristopherW Bu sizin için devam etmekte olan bir sorunsa, keyboardtester.com bu web sitesine bakmalısınız .
gxtaillon

2
@MomemtumMori, yandaki Pennsylvania Dutch klavye tekniğini mi yapıyor? Tamamen benim.
SomeShinyObject

Yanıtlar:


1

GolfScript, 6 bayt

.&,94=

33 ile 127 arasında kod içeren tüm ASCII karakterleri varsa, 1 yazdırır. Aksi takdirde, 0 yazdırır.

Giriş , OP tarafından izin verilen ve mevcut GolfScript çözümü için de geçerli olan başka karakterler (son satırsonu dahil) içeriyorsa bu yaklaşım başarısız olur .

kullanım

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

Nasıl çalışır

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

Bağladığınız yorum, girişin yeni bir satır (veya 33-126 dışındaki diğer karakterler) içermediğini değil, yalnızca geçerli karakterler içereceğini söylüyor. Newline geçersiz bir karakter midir?
aditsu çıkmak SE çünkü EVIL

By geçerli geliyordu I aralığında biz karşıyız test içinde , ama OP isterken ben daha net ifade ettim gerekirdi sanırım ...
Dennis

6

GolfScript, 11

Yazdırılabilir ASCII o kadar da ilginç değil ...

127,32,-^,!

Yakut, 68

-rset4 karakter için bayrak ile .

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

ve

Python 3, 76

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

1
Bunları iki ayrı cevapta yayınlamanızı öneririm.
nyuszika7h

3

JavaScript - 62 70

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

Ve biraz daha kısa:

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

2

CJam - 9

',33>q-!

"Değiştirilmiş" karakterleri de kontrol eder (büyük harfler dahil). Http://cjam.aditsu.net/ adresinde
deneyin.

Not: kesme işaretinden sonra görünmez bir karakter (kod 127 ile) vardır.


"Kaymış" karakterleri de kontrol eder (büyük harfler dahil). Bunun yanlış davranış olduğunu söyleyebilirim.
Ry-

@minitech "Değiştirilmiş karakterler eklemek isteyip istemediğiniz seçiminiz."
aditsu bırakıldı çünkü SE EVIL

Ama ondan hemen önce “Büyük harf VEYA küçük harf” yazıyor (bu özel, değil mi?)
Ry-

@minitech, soruyu güncelledim. Üzgünüm. Bu OR yanıltıcıdır.
SomeShinyObject

@ChristopherW Programım örnek girişinize 0 yazdıracaktır, ancak üst karakter tuşunu basılı tutarken tüm bu karakterlere de basarsanız, 1 yazdıracaktır.
aditsu bırakıldı çünkü SE EVIL

2

PHP

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

$_GET['i'] girdi


1
$_GETKabul edilebilirse 1 karakter kaydetmek için kullanın .
14'te

@tomsmeding, evet yaptım :)
Alireza Fallah

Dizenizin önüne bir dolgu karakteri (é veya başka bir şey) ekleyebilir ve !==false8 karakteri kaydetmek için daha sonra parantezleri 4 daha kaldırabilirsiniz . register_globalsbunu yapar "é$i". die(NO)ayrıca mümkündür.
Ry-

@minitech - Ne dediğini bilmiyorum, doldurma karakteri? bunun yerine cevabımı düzenlemek için çekinmeyin
Alireza Fallah


1

Haskell, 41 (iki çözüm)

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

veya (noktasız stil)

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

En az şu karakterleri girmeniz gerekiyor:

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

herhangi bir sırayla, herhangi bir sayıda. Ekstra karakterlere izin verilir. Bir tercümanda çalıştırın. İşiniz bittiğinde Enter tuşuna basmanız gerekir, ancak bitirmeden önce Enter tuşuna basarsanız, karakterleri girmeye devam edebilir ve tekrar Enter tuşuna basabilirsiniz. TrueHer karakteri vurduysanız yazdırır , aksi takdirde hiçbir şey yazdırmaz.


0

Perl, 70 karakter

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

Kullanımı:

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

Tüm tuş vuruşları mevcutsa 1 yazdırır, başka hiçbir şey yazdırmaz.


Perl 5.10+ gerektirir
Zaid

Çoğu kabukta, örneğiniz yankı dizesindeki bazı karakterlerin kaçmasını gerektirdiğinden başarısız olur.
Dennis

0

C, 97 karakter

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

Programı en az harf içeren argümanla çağırmanız gerekir:

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

ve cevap 1'i (doğru) alın. Karakter seti a'nın başlangıç ​​değeri değiştirilerek değiştirilebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.