একটি কীবোর্ডের সমস্ত কী পরীক্ষা করুন


14

সংক্ষিপ্ততম প্রোগ্রামটি লিখুন যা স্ট্যান্ডার্ড 101 কী ইউএস কীবোর্ড * এর প্রতিটি কী টিপতে অপেক্ষা করে এবং তারপরে ঠিক আছে লেখাটি প্রস্থান করে!

প্রতিবার একটি কী চাপলে প্রোগ্রামটি একটি নতুন লাইনে প্রদর্শিত হয় এমন অবশিষ্ট চাপবিহীন অনন্য কীগুলির সংখ্যা যা সমস্ত কী কমপক্ষে একবার টিপানো না হওয়া অবধি চাপতে হবে। প্রোগ্রামটি 101 টি কীবোর্ড পরীক্ষা করতে সক্ষম হবে এবং প্রতিটি কী কাজ করে কিনা তা দেখতে হবে। সুতরাং যতক্ষণ না এটি ব্যবহারকারীকে নির্দিষ্ট করা হয় ততক্ষণ দু'বার কী বা এন্টার টিপতে অনুমতি দেওয়া হয়।

দু'বার বা তার বেশি একই কী চাপলে কোড বাধাগ্রস্থ হবে না বা অবশিষ্ট চাপবিহীন কীগুলির প্রদর্শিত সংখ্যা পরিবর্তন করা উচিত নয়।

সকল কি-সংকলন ( Left Shift, Right Shift, Right Control, Esc, Enter, ইত্যাদি) অন্তর্ভুক্ত করা উচিত।

প্রকৃত কীবোর্ড কীগুলি এই চ্যালেঞ্জে গুরুত্বপূর্ণ তাই প্রোগ্রামের দৃষ্টিকোণ থেকে ( Aএবং a, একই এবং একই রকম 6এবং ^)।

সম্মিলিত কীবোর্ডগুলি সম্মিলিত কমান্ড হিসাবে নিবন্ধিত হবে না এবং শুধুমাত্র Ctrl+ Alt+ Delটিপানো হলে স্বতন্ত্র কীগুলি নিবন্ধিত হবে যা সংমিশ্রণের সমস্ত পৃথক কীগুলির জন্য গণনা করা হবে। সুতরাং আপনি ইতিমধ্যে ছোট হাতের অক্ষর এবং তদ্বিপরীত টিপলে বড় বড় অক্ষরগুলিও চাপতে হবে না।

সংখ্যার কীপ্যাডে সংখ্যাসূচক কীগুলি প্রোগ্রামের দৃষ্টিকোণ থেকে পৃথক, সুতরাং আপনার কাছে প্রোগ্রামটি শেষ করার জন্য এখনও চাপতে হবে, যদি আপনার কাছে কোনও ল্যাপটপ বা অন্য কোনও কীবোর্ড থাকে যা ইউএস স্ট্যান্ডার্ড ১০১ কীবোর্ড লেআউটটি না থাকে আপনি আপনি যদি কোনও সামঞ্জস্যপূর্ণ কীবোর্ড প্লাগ না করেন তবে চ্যালেঞ্জটি পূরণ করতে পারবেন না।

* এফএন কী এবং ল্যাপটপ কী থাকা কীবোর্ডগুলি এই চ্যালেঞ্জটি কার্যকর রাখার জন্য সমর্থন করবে না

এটি একটি মার্কিন স্ট্যান্ডার্ড 101 কীবোর্ড বিন্যাসের জন্য কীগুলির তালিকা:

backspace
tab
enter
right shift
right ctrl
right alt
left shift
left ctrl
left alt
print screen
pause/break
caps lock
escape
page up
page down
end
home
left arrow
up arrow
right arrow
down arrow
insert
delete
0
1
2
3
4
5
6
7
8
9
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
numpad 0
numpad 1
numpad 2
numpad 3
numpad 4
numpad 5
numpad 6
numpad 7
numpad 8
numpad 9
multiply
add
subtract
decimal point
numpad enter
divide
f1
f2
f3
f4
f5
f6
f7
f8
f9
f10
f11
f12
num lock
scroll lock
semi-colon
equal sign
comma
dash
period
forward slash
grave accent
open bracket
back slash
close braket
single quote
space

1
প্রতিটি কিপ্রেসের পরে এন্টার / রিটার্ন কী টিপে রাখা দরকার কি ঠিক? যদি তা না হয় তবে এটি বহু ভাষায় অসম্ভব।
ডুরকনব

5
কীগুলির তালিকা দয়া করে!

2
এছাড়াও, প্রোগ্রামটি কি প্রিন্টযোগ্য-এএসসিআইআই সমর্থন করে? (উদাঃ এস্কেপ, ট্যাব, সিটিআরএল, শিফট, আল্ট, সন্নিবেশ, তীর কীগুলি, ক্যাপস লক, হোম, শেষ, পৃষ্ঠা উপরে / ডাউন, ব্যাকস্পেস, ডেল, এফ কী ইত্যাদি)? একটি চরিত্র এবং তার স্থানান্তরিত সংস্করণ উভয় টিপতে হবে? Ctrl + একটি চরিত্র সম্পর্কে কি? নামপ্যাড কীগুলি কি নিয়মিতগুলির চেয়ে আলাদা গণনা করা হয়?
ডুরকনব

1
@ ডুরকনব আপনি ল্যাপটপের কীবোর্ড ব্যবহার করে চ্যালেঞ্জটি পূরণ করতে পারবেন না যদি না এটিতে মার্কিন স্ট্যান্ডার্ড 101 কী কী লেআউট দ্বারা প্রয়োজনীয় সমস্ত 101 চাবি রয়েছে
এডুয়ার্ড ফ্লোরাইনস্কু

1
@ বিটা-ক্ষয় এই প্রশ্নটি বন্ধ করে দেওয়া বেশিরভাগ লোকেরা কখনই জিজ্ঞাসা করেনি তারা এগুলি কী বুঝতে পারে না তাই অনুমান করা আমার পক্ষে কঠিন।
এডুয়ার্ড ফ্লোরিয়েন্সু

উত্তর:


6

জাভাস্ক্রিপ্ট, 524 বাইট

হাই, এটি এখানে আমার প্রথম পোস্ট, তাই আমি যদি এখনও কিছু জিনিস সম্পর্কে অজ্ঞ থাকি তবে আমাকে ক্ষমা করুন, আমি মনে করি যদিও আমি বিধিগুলির মধ্যে রয়েছি।

k=[8,9,"130","133","161","162","171","172","181","182",19,20,27,44,45,46,48,49,50,51,52,53,54,55,56,57,144,145,186,187,188,189,190,191,192,219,220,221,222];for(i=32;i<124;i+=1){i<41?k.push(i):i>64?i<91?k.push(i):i>95?i!=108?k.push(i):0:0:0}d=[13,16,17,18];m=document.addEventListener;c=console.log;m("keydown",e=>{e.preventDefault()});m("keyup",e=>{c(e.code);if(d.includes(e.which)){l=e.which+""+e.location;if(k.includes(l)){k.splice(k.indexOf(l),1)}}else if(k.includes(e.which)){k.splice(k.indexOf(e.which),1)}c(k.length)})

আমি যদি ক্রোম ব্যবহার না করি তবে এটি বগী বলে মনে হচ্ছে তবে আপনি এটি এখানে চেষ্টা করে দেখতে পারেন । (উদাহরণস্বরূপ উইন্ডোতে ফোকাস করার আগে কনসোলটি খোলার বিষয়টি নিশ্চিত করুন, কারণ F12 এর ডিফল্ট কার্যকারিতা প্রতিরোধ করা হয়েছে)

সংক্ষিপ্ত বিবরণ

প্রোগ্রামটি 101 টি "কীকোডস" এর একটি অ্যারে তৈরি করে। কিছু সুস্পষ্টভাবে লেখা হয়, কিছু ক্রম একটি লুপ জন্য এবং কিছু স্ট্রিং হিসাবে সংরক্ষণ করা হয়। আমার কাছে "ডাবল" কীকোডগুলির জন্য পৃথক অ্যারে রয়েছে, যেহেতু উদাহরণস্বরূপ বাম এবং ডান নিয়ন্ত্রণ একই কীকোড দেয়। তারা এছাড়াও একটি অবস্থান দেয়, যাইহোক, তাই আমি অ্যারের মধ্যে স্ট্রিং হিসাবে অবস্থানগুলি সাথে কী কোডস একত্রিত। সেখান থেকে এটি কেবলমাত্র একজন ইভেন্টলিস্টার যা ডিফল্ট কীডাউন কার্যকারিতা (এই ক্ষেত্রে F5 দিয়ে রিফ্রেশ করতে চান না) এবং কীআপের জন্য একটি পৃথক ইভেন্টলিস্টার প্রতিরোধ করে, কারণ প্রতিটি একক কী কী-ডায় সনাক্ত করা যায়, প্রিন্টসক্রেনের জন্য ব্যতীত।

প্রতিটি কীআপ ইভেন্টের পরে অবশিষ্ট কীগুলি (অ্যারের দৈর্ঘ্য ওরফে) লগ হয়, পাশাপাশি কীকোডের নামও (তাই বাম এবং ডান স্থানান্তর ইত্যাদির মধ্যে পার্থক্য রয়েছে)। আমি নিশ্চিত ছিলাম না যে এটি প্রয়োজনীয়তা ছিল কিনা, যদি না হয় তবে আপনি স্কোর থেকে আরও 10 বাইট বিয়োগ করতে পারবেন।

সীমাবদ্ধতা

  • এটি কেবল ক্রোমে ভাল কাজ করে বলে মনে হচ্ছে

আমি আশা করি এই উত্তরটি প্রশংসা পেয়েছে এবং দয়া করে আমি কিছু ভুল করেছি কিনা তা আমাকে জানান।


5
পিপিসিজিতে আপনাকে স্বাগতম!
ফানটাসি

আপনি কি কিছু বা সমস্ত সেমিকোলনগুলিকে নতুন লাইনে পরিবর্তন করতে পারবেন? এটি আপনার বাইট গণনাতে সহায়তা করবে না তবে এটি পড়া আরও সহজ হবে।
জর্ডান

এখানে এমন একটি সংস্করণ রয়েছে যা পেস্টবিন.ই.পি. 4
এসএসডব্লিউ

4

জাভা 8, 607 + 64 = 671 বাইট

এটি একটি ল্যাম্বডা অব্যবহৃত প্যারামিটার নিচ্ছে এবং নিক্ষেপ করছে InterruptedException। এটি একটি উইন্ডো প্রবর্তন করে, যখন ফোকাসে, 101 স্ট্যান্ডার্ড কীগুলির প্রেসগুলি বাধা দেয়। বাইট কাউন্টে ল্যাম্বদা এবং প্রয়োজনীয় আমদানি অন্তর্ভুক্ত।

import java.awt.event.*;import javax.swing.*;import java.util.*;

v->{Set<Integer>s=new HashSet();long[]l={0x2bfff1ff081f0300l,0x8fffefff3ffffffel,3075<<16,4<<28|1};JFrame f=new JFrame();f.addKeyListener(new KeyAdapter(){public void keyReleased(KeyEvent e){int c=e.getKeyCode(),o=e.getKeyLocation(),n;c=(c==10|c>15&c<19)&o<3?-c:c==225?98:c==226?100:c==65386?101:c==227?102:c==224?104:o>3?c==33?105:c==34?99:c==35?97:c==36?103:c==127?110:c==155?96:c:(l[c/64]>>>c&1)<1?0:c;if(c!=0)s.add(c);System.out.println(n=101-s.size());if(n<1)synchronized(f){f.notify();}}});f.setFocusTraversalKeysEnabled(0<1);f.show();synchronized(f){f.wait();}System.out.print("OK!");System.exit(0);}

আপনি এখানে একটি নিরবচ্ছিন্ন সংস্করণ সহ একটি পরীক্ষার শ্রেণীর সন্ধান করতে পারেন ।

সংক্ষিপ্ত বিবরণ

কীগুলি যেমন টিপানো হয়, মানগুলি স্বতন্ত্রভাবে তাদের চিহ্নিত করে (বেশিরভাগ ক্ষেত্রে কী কোড) একটি সেটে সংরক্ষণ করা হয়। cমূল কোডটি অস্পষ্ট (যেমন "হোম" কী, যা কীবোর্ডের মূল অংশ বা নম্বর প্যাড থেকে আসতে পারে) এবং একই কী একাধিকতে মানচিত্র তৈরি করতে পারে এমন কেসগুলি পরিচালনা করার জন্য টের্নারি অ্যাসাইনমেন্টের প্রথম কয়েকটি স্তর levels কী কোড (যেমন নাম লক চালু বা বন্ধের সাথে নম্বর প্যাড আচরণ)। চূড়ান্ত শাখাটি "সাধারণ" কীগুলি পরিচালনা করে যার কী কোডটি সহজেই সেটে ব্যবহার করা যেতে পারে। বিটম্যাপে কী কোড সূচকগুলি lনির্দেশ করে যা কীটি স্ট্যান্ডার্ড 101 এর মধ্যে একটি কিনা।

সীমাবদ্ধতা

  • প্রোগ্রামটি 101 টি কীবোর্ড পরীক্ষা করতে সক্ষম হবে এবং প্রতিটি কী কাজ করে কিনা তা দেখতে হবে।

    স্ট্যান্ডার্ড 101 ব্যতীত অন্য কোনও কী চাপলে, স্ট্যাক ট্রেস স্ট্যান্ডার্ড ত্রুটিতে মুদ্রিত হতে পারে, বা অপ্রত্যাশিত আচরণ হতে পারে।

  • প্রোগ্রামটি সরাসরি কোড কোডেন্টসের সংখ্যাসূচক মানগুলি সরাসরি ব্যবহার করে এবং ওরাকলের KeyEventডকুমেন্টেশন সূচিত করে যে এই মানগুলি সময়ের সাথে সাথে পরিবর্তিত হতে পারে।

প্রাপ্তি স্বীকার

  • -10 বাইট কেভিন ক্রুইজসেনকে ধন্যবাদ

2
f.setVisible(1>0);গল্ফ করা যায় f.show();এবং অব্যবহৃত প্যারামিটার ব্যবহার করে ()->গল্ফ করা যায় । v->Void null
কেভিন ক্রুইজসেন

4

জাভাস্ক্রিপ্ট, 98 90 75 বাইট

সুতরাং ... আমি সন্দেহ করি যে আমি এখানে জিনিসগুলি নিম্নোক্ত হতে পারি তবে এটি কাজ করা উচিত। আমাকে যদি আমি আছে কিছু উপেক্ষিত। কেবল ক্রোমে পরীক্ষিত।

s=new Set()
f=onkeydown=e=>!(onkeyup=e=>f(e,alert(101-s.add(e.code).size)))

চেষ্টা করে দেখুন

alert আপনার বিচক্ষণতার জন্য ওভাররাইড এবং অর্ডার বিপরীত স্ক্রোলিং সংরক্ষণ করুন।

alert=x=>o.prepend(document.createTextNode(x+`\n`))
s=new Set()
f=onkeydown=e=>!(onkeyup=e=>f(e,alert(101-s.add(e.code).size)))
p{font-family:sans-serif;font-size:14px;}pre{margin:0 10px;}
<p>Focus here and start typing ...</p><pre id=o></pre>


একটি বিষয় যা আপনি উপেক্ষা করেছেন তা হ'ল আপনি যখন উইন্ডোজ কীগুলির মতো 101-কী কীবোর্ডে নেই এমন কীগুলি টিপেন তখন এটিও গণনা করা হয়।
এম 4 ই

1
@ এম 4 ওয়াই, আমার চ্যালেঞ্জটির ব্যাখ্যাটি হ'ল আমরা ধরে নিয়েছি যে নির্দিষ্ট কীবোর্ডটি কী ব্যবহার করা হচ্ছে, বিশেষত এই লাইনটি দেওয়া হয়েছে: " যদি আপনার কাছে ল্যাপটপ বা অন্য কোনও কীবোর্ড থাকে যা ইউএস স্ট্যান্ডার্ড ১০১ কীবোর্ড লেআউট না থাকে তবে আপনি পরিপূর্ণ করতে পারবেন না আপনি যদি কোনও সামঞ্জস্যপূর্ণ কীবোর্ড প্লাগ না করেন তবে চ্যালেঞ্জ ""
শেগি

আমি যথেষ্ট মনে করি, চালাক সমাধান!
এম 4 ই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.