এক লাইন কীবোর্ড


20

চ্যালেঞ্জ

এই চ্যালেঞ্জটির লক্ষ্য নির্ধারণ করা যে কোনও স্ট্যান্ডার্ড যুক্তরাজ্যের QWERTY কীবোর্ডের কেবল একটি লাইন ব্যবহার করে কোনও স্ট্রিং টাইপ করা যায় কিনা।

এটি code golf, বাইট জিতে এত সংক্ষিপ্ত সমাধান!


আই

ইনপুটটি ASCII দশমিক পরিসীমা অন্তর্ভুক্ত সহ শূন্য বা আরও বেশি অক্ষরের একক স্ট্রিং হবে। আপনি এই চ্যালেঞ্জটির জন্য ধরে নিতে পারেন যে একটি খালি স্ট্রিংয়ের জন্য কোনও টাইপিংয়ের প্রয়োজন নেই এবং সুতরাং একটি একক লাইন ব্যবহার করে টাইপ করা যায়।

আপনি আপনার ভাষার জন্য স্ট্রিং, অক্ষরের তালিকা বা সমতুল্য রূপ হিসাবে ইনপুট নিতে পারেন।

আউটপুট কোনও স্ট্রিংয়ের সত্যবাদী মান হওয়া উচিত যা কোনও একক লাইন ব্যবহার করে টাইপ করা যায়, বা যেটি পারেন না তার পক্ষে মিথ্যা।


কিবোর্ডের ভিত্তি ধরণ

নীচে স্ট্যান্ডার্ড কীবোর্ড লেআউটটি কী তা নিয়ে কোনও স্পষ্টতা স্পষ্ট করার জন্য বিকল্প লম্বা উপরের কীগুলি (শিফট ব্যবহার করে অ্যাক্সেস করা) সহ প্রতিটি লাইনে উপলব্ধ কীগুলির একটি তালিকা।

  • লাইন 1
    • মান: `1234567890-=
  • লাইন 2
    • মান: qwertyuiop[]
  • লাইন 3
    • মান: asdfghjkl;'#
    • আপারকেস: ASDFGHJKL
    • বিশেষ: ক্যাপস লক
  • লাইন 4
    • মান: \zxcvbnm,./
    • বিকল্প: |<>?
    • আপারকেস: ZXCVBNM
    • বিশেষ: শিফট
  • লাইন 5
    • বিশেষ: স্পেস বার

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


পরীক্ষার মামলা

            -> true     (empty string)
45-2=43     -> true     (line 1)
qwerty      -> true     (line 2)
tryitout    -> true     (line 2)
Qwerty      -> false    (no shift or caps on line 2)
#sad        -> true     (line 3)
AsDf        -> true     (caps lock used)
@sDF        -> false    (no shift for alternate upper)
zxcvbn?     -> true     (line 4)
zxc vbn     -> false    (spacebar on separate line)
123abc      -> false    (multiple lines)
            -> true     (just space bar)
!!!         -> false    (exclamation marks cannot be printed by a single line)

সুতরাং এই মার্কিন কীবোর্ড লেআউট কঠোরভাবে হয়? (আমি একটি ইউ কে লেআউট পেয়েছি)।
ওফ্ল্যাক করুন

2
@ouflak বিপরীতে, এটি কেবলমাত্র যুক্তরাজ্যের QWERTY কীবোর্ড লেআউট
লুক স্টিভেনস

@ আরনাউল্ড হ্যাঁ আমি করেছি, লক্ষ্য করার জন্য ধন্যবাদ!
লুক স্টিভেনস

হ্যাঁ আমি উভয়ের দিকে তাকাতে শুরু করেছি এবং লক্ষ্য করেছি যে আপনার লেআউটটি আমার ইউকে নয়, আমার ইউকে কীবোর্ড লেআউটটি অনুসরণ করে। হুমম ... ভাবছেন তুলনায় আমার অস্ট্রিয়ান দেখতে কেমন লাগে।
ওফ্লাক করুন

অক্ষরের তালিকা হিসাবে আমাদের কী ইনপুট নিতে দেওয়া হচ্ছে, না এটির স্ট্রিং হওয়া দরকার?
কেভিন ক্রুইজসেন

উত্তর:


12

পাইথন 2 , 130 123 121 115 বাইট

lambda s:any(set(s)<=set(l+l.lower())for l in["`1234567890-=","eqwrtyuiop[]","ASDFGHJKL;'#","ZXCVBNM\,./|<>?"," "])

এটি অনলাইন চেষ্টা করুন!


পাইথন 3 , 111 বাইট

lambda s:any({*s}<={*l+l.lower()}for l in["`1234567890-=","eqwrtyuiop[]","ASDFGHJKL;'#","ZXCVBNM\,./|<>?"," "])

এটি অনলাইন চেষ্টা করুন!

-4 বাইট, ধন্যবাদ নেডেলা ২০০৪


1
আপনি যদি পাইথন 3 ব্যবহার করতে ইচ্ছুক হন তবে আপনি এটি 111 বাইটে নামিয়ে আনতে পারেন ।
nedla2004

9

রেটিনা 0.8.2 , 72 71 বাইট

`^([-=\d`]+|[][eio-rtuwy]+|(?i)[adfghjkls;'#]+|[\\bcnmvxz,./|<>?]+| *)$

এটি অনলাইন চেষ্টা করুন! ব্যাখ্যা: প্রতিটি বিকল্প কীবোর্ডের একটি পৃথক সারির সাথে মেলে। (?i)প্যাটার্ন মাঝখানে ঘটায় প্যাটার্ন সমগ্র বাকি মিলেছে করা কেস-insensitively। সম্পাদনা: @ কিরিলএলকে 1 বাইট সংরক্ষণ করা হয়েছে


opqro-r-1 এর জন্য পরিবর্তন করা যেতে পারে । এছাড়াও, আপনি কি লাইন 1 এর জন্য একটি ব্যাকটিক চরিত্রটি ভুলে গেছেন, আমি এটি দেখতে পাচ্ছি না?
কিরিল এল।

@KirillL। ওফস, অনুলিপিক্রমে অনুলিপিটি নির্বাচন করে কপি / পেস্ট করার সময় অবশ্যই মিস করেছেন, এটি চিহ্নিত করার জন্য ধন্যবাদ।
নীল

চমৎকার [][...:)
mazzy

8

05AB1E , 66 47 বাইট

žh…`-=«žS„[]«žTDu…;'#««žUDu"\,./|<>?"««ð)εISåP}O

অক্ষরের তালিকা হিসাবে ইনপুট নেয়।

-19 ধন্যবাদ বাইট @Emigna । সম্পূর্ণরূপে ভুলে গেছিলাম আমাদের কিওয়ার্টি-কীবোর্ড ধ্রুবত অন্তর্নির্মিত ছিল। : ডি

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

žh                # Push "0123456789"
  …`-=            # Push "`-="
      «           # Merge them together
žS                # Push "qwertyuiop"
  „[]             # Push "[]"
     «            # Merge them togeter
žT                # Push "asdfghjkl"
  Du              # Duplicate, and toUppercase the copy
    …;'#          # Push ";'#"
        ««        # Merge all three together
žU                # Push "zxcvbnm"
  Du              # Duplicate, and toUppercase the copy
    "\,./|<>?"    # Push "\,./|<>?"
              ««  # Merge all three together
ð                 # Push a space
 )                # Wrap all string in an array
  ε   }           # Map each to:
   I              #  Take the input (list of characters)
    å             #  Check for each if it's in the current string of the map-iteration
     P            #  Take the product (1 if all are truthy, 0 otherwise)
       O          # Take the sum (either 1 or 0, so truthy/falsey), and output implicitly



5

জাভাস্ক্রিপ্ট (নোড.জেএস) , 99 98 95 বাইট

x=>/^([-`=\d]+|[wetyuio-r[\]]+)$/.test(x)|/^([asdfghjkl;'#]+|[zxcvbnm,./<>?\\|]+| *)$/i.test(x)

এটি অনলাইন চেষ্টা করুন!

-1 রেটিনা উত্তরে @ কিরিল এল এর মন্তব্য থেকে।
-৩ তাদের সম্মিলিত প্রচেষ্টার জন্য @ ইসমাইল মিগুয়েল এবং @ আরনল্ডকে ধন্যবাদ।


কেন আছে asdfghjklএবং ASDFGHJKLসেখানে? আপনি iপতাকাটি কেন ব্যবহার করবেন না x=>/.../i.test(x)?
ইসমাইল মিগুয়েল

@ ইসমাইল মিগুয়েল কারণ রেইগেক্সের QWERTYUIOPসাথে মিলে যাওয়া উচিত নয়। অতিরিক্ত চেকের জন্য সরাসরি বড়দের মধ্যে বড় আকারের অক্ষরগুলি কোডিংয়ের চেয়ে বেশি খরচ হবে।
শিওড়ু আসাকোটো

কিছু নয়, এটি বগি। x=>/^([-`=\d]+|[wetyuio-r\[\]]+)$/.test(x)||/^([asdfghjkl;'#]+|[zxcvbnm,.\/<>?\\|]+| *)$/i.test(x)একই দৈর্ঘ্য
ইসমাইল মিগুয়েল

@ ইসমাইলমিগুয়েল কিছুটা বিটওয়াস ব্যবহার করা |1 বাইট সাশ্রয় করে।
আর্নল্ড

1
@ ইসমাইল মিগুয়েল এটি ইসমাস্ক্রিপ্টের নির্দিষ্টকরণের অংশ। শুধুমাত্র 3 টি অক্ষর একটি অক্ষর বর্গ মধ্যে পলান করা প্রয়োজন যে \ , ]এবং -(দেখুন ClassAtomNoDash বৈশিষ্ট)। এটি ড্যাশ এছাড়াও প্রথম বা শেষ অক্ষর (অন্যথায়, এটি একটি চরিত্রের ব্যাপ্তি বিভাজক হিসাবে ব্যাখ্যা করা হয়) অবিরতবিহীন প্রদর্শিত হতে পারে।
আর্নৌল্ড

5

পার্ল 6 , 102 101 100 বাইট

-1 বাইট ধন্যবাদ নওহেলহোফকে!

->\a{max map {a.combcomb $_~.lc:},|<eqwrtyuiop[] ASDFGHJKL;'# ZXCVBNM\,./|<>?>,' ',"`-="~[~] ^10}

এটি অনলাইন চেষ্টা করুন!

সুন্দর মান বাস্তবায়ন এটির জন্য সম্ভবত একটি সংক্ষিপ্ত রেইগেক্স ভিত্তিক সমাধান রয়েছে, তবে আমি পার্ল's এর রেজেক্সকে যথেষ্ট চেষ্টা করতে পারি না।


আপনি এর maxপরিবর্তে ?any(এবং minপরিবর্তে ?all) ব্যবহার করতে পারেন ।
নভেলহোহফ

1
এর মূল্য কী, এর জন্য একটি রেজেেক্স-ভিত্তিক দ্রবণ পার্ল 5 রেজিেক্সগুলি ব্যবহার করে 84 বাইট বা 80 বাইট হবে m:P5//। তবে আমি মনে করি না যে এগুলির উভয়ই উত্তর হিসাবে পোস্ট করা উপযুক্ত।
nwellnhof

4

জাভা 10, 209 208 বাইট

s->{int l=0,t;for(var p:s){t=p.matches("[[0-9]`\\-=]")?1:"qwertyuiop[]".contains(p)?2:p.matches("(?i)[asdfghjkl;'#]")?3:"\\zxcvbnm,./|<>?ZXCVBNM".contains(p)?4:p.equals(" ")?5:9;l=l<1?t:l!=t?9:l;}return l<6;}

-১ বাইট @ টিফিল্ডকে ধন্যবাদ ।

এটি অনলাইনে চেষ্টা করুন।

ব্যাখ্যা:

s->{                    // Method with String-array parameter and boolean return-type
  int l=0,              //  Line-integer, starting at 0
      t;                //  Temp integer
  for(var p:s){         //  Loop over the characters
    t=p.matches("[[0-9]`\\-=]")?
                        //   If it's a character from the first line: 
       1                //    Set `t` to 1
      :"qwertyuiop[]".contains(p)?
                        //   Else-if it's a character from the second line:
       2                //    Set `t` to 2
      :p.matches("(?i)[asdfghjkl;'#]")?
                        //   Else-if it's a character from the third line
       3                //    Set `t` to 3
      :"\\zxcvbnm,./|<>?ZXCVBNM".contains(p)?
                        //   Else-if it's a character from the fourth line:
       4                //    Set `t` to 4
      :p.equals(" ")?   //   Else-if it's a space from the fifth line:
       5                //    Set `t` to 5
      :                 //   Else (invalid character):
       9;               //    Set `t` to 9
    l=l<1?              //   If `l` is still 0:
       t                //    Set it to `t`
      :l!=t?            //   Else-if `t` is a different line than `l`:
       9                //    Set `l` to 9 (non-existing line)
      :                 //   Else (`t` is the same line as `l`):
       l;}              //    Leave `l` the same
  return l<6;}          //  Return whether `l` is not 9

দুর্দান্ত সমাধান, তবে এটি !!!কোনও একক লাইন দ্বারা মুদ্রণ করতে না পেরে বিস্ময়কর চিহ্ন থাকা সত্ত্বেও সত্য returns আমি কেবল এটি পরীক্ষার কেস হিসাবে যুক্ত করেছি
লুক স্টিভেনস

@ লুক্সটিভেনস আহ, আমি মিথ্যাভাবে ধরে নিয়েছি ইনপুটটি পাঁচটি লাইনের একটির জন্য সর্বদা বৈধ is আমি আমার সমাধানটি পরিবর্তন করব। এটি একটি সহজ ফিক্স (তবে কিছু বাইট যুক্ত করবে ..)
কেভিন ক্রুইজসেন

(?i)অন্যান্য বড় হাতের অক্ষরের জন্য কেন ব্যবহার করবেন না ?
নীল

@ নীল স্ল্যাশটির জন্য পালানোর প্রয়োজনীয়তার কারণে এটি 209 বাইটও রয়েছে ।
কেভিন ক্রুইজসেন

সুপারিশ p==" "পরিবর্তেp.equals(" ")
ceilingcat


4

জেলি , 55 বাইট

ØDW;Øq;Œu$€3,4¦;"“rɠ3“Ż²“¿µ|“aƲƘ0ÞḅzḂ»⁶ṭ
¢f€ẈṠSỊafƑ¢F¤$

এটি অনলাইন চেষ্টা করুন!

প্রথম লাইনটি কীবোর্ড লাইনগুলির একটি তালিকা দেয় এবং দ্বিতীয়টি পরীক্ষা করে যে প্রোগ্রামটি ইনপুটটি একক (বা শূন্য) লাইনে রয়েছে এবং এমন কোনও অক্ষর নেই যা টাইপ করা যায় না (যেমন QWE!@#)।


3

সি , 150 বাইট

x;f(char*s){for(x=0;*s;x|="@               "[*s++-32]);return!(x&x-1);}

এটি অনলাইন চেষ্টা করুন!

এটি কোনও পুরস্কার জিতবে না, তবে এটি একটি মজাদার উপায়: আমরা কীবোর্ডের পাঁচটি সারিতে 4 8 16 32 64অক্ষর এবং প্রতিটি অবৈধ অক্ষরকে ম্যাপ করি 3। আমরা স্ট্রাইজের প্রতিটি চরিত্রের জন্য একত্রে বা মানটি নির্ধারণ করি এবং ফলাফলটি সন্তুষ্ট হয় কিনা তা পরীক্ষা করে দেখি x&(x-1) == 0যা x2 বা শূন্যের শক্তি হিসাবে যখন সত্য হয় ঠিক তখনই যখন xসর্বাধিক এক বিট সেট থাকে।



2

পিএইচপি, 98 বাইট

আইমা সামান্য দু: খিত যে রেগেক্সের চেয়ে ছোট কিছুই নেই। এটি সম্ভবত দ্রুততম সমাধান নয়।

<?=preg_match("%^([`\d=-]*|[wetyuio-r[\]]*|(?i)[asdfghjkl;'#]*|[\\\zxcvbnm,./|<>?]*| *)$%",$argn);

পাইপ হিসাবে চালনা করুন-F বা এটি অনলাইনে চেষ্টা করুন


আমি খুঁজে পেয়েছি সংক্ষিপ্ততম অ-রেজেক্স সমাধান (124 বাইট; পড়ার সুবিধার জন্য লাইনব্রেক এবং ট্যাব):

foreach(["`1234567890-=","qwertyuiop[]","asdfghjkl;'#ASDFGHJKL","zxcvbnm,./\|<>?ZXCVBNM"," "]as$d)
    trim($argn,$d)>""||die(1);

1মিথ্যাচারের জন্য সত্যের কোড সহ প্রস্থান করে 0। পাইপ হিসাবে চালান -R
পিএইচপি 5.4 বা তার পরে প্রয়োজন; পুরানো পিএইচপি জন্য array(...), [...](+5 বাইট) এর পরিবর্তে ব্যবহার করুন
বা এই 123 বাইট ব্যবহার করুন -nRপিএইচপি <7:

foreach(split(_,"`1234567890-=_qwertyuiop[]_asdfghjkl;'#ASDFGHJKL_zxcvbnm,./\|<>?ZXCVBNM_ ")as$d)
    trim($argn,$d)>""||die(1);

2

এডাব্লুকে , 163 119 113 বাইট

এটি একটি AWK উত্তর, সত্যের জন্য একটি সংখ্যার 1 টি স্ট্রিংকে মিথ্যা হিসাবে 0 টি স্ট্রিং প্রদান করে। (ইন্টারেক্টিভ ব্যবহারের জন্য অ্যাডব্লিউকে হিসাবে ডাব্লু-কে হিসাবে ডেকে আনা-নেওয়া ফাইল।)

{print/^[-`1234567890=]*$/||/^[]qwertyuiop\[]*$/||/^[asdfghjkl;'#ASDFGHJKL]*$/||/^[zxcvbnm,.\/\|<>?ZXCVBNM]*$/||/^ *$/}

এটি অনলাইন চেষ্টা করুন!

তবে অনুমানের অংশ না হয়ে লিখিত (তুচ্ছ এক্সটেনশন) হিসাবে টিএবি অক্ষর হ্যান্ডেল করে না।


4
"চ্যালেঞ্জগুলির সমস্ত সমাধান হওয়া উচিত: (…) ব্যবহারে বিজয়ী মানদণ্ডের জন্য একটি গুরুতর প্রতিযোগী হওয়া উচিত । " - সহায়তা কেন্দ্র এই 2 টি ভেরিয়েবল ঘোষণার প্রয়োজন নেই এবং অবশ্যই তাদের স্ট্রিং তৈরি করার দরকার নেই। এবং একটি একক printযথেষ্ট: অনলাইন চেষ্টা করে দেখুন!
manatwork

আপনার মতামত যে সমাধানগুলি গুরুতর হওয়া উচিত তা বৈধ তবে আমি যুক্তি দেব যে সংশোধিত 05 এএফ 1 ই এর পরে যে কোনও সমাধান তাই অপ্রাসঙ্গিক কারণ তারা মেলে না বা ফলাফলের আরও ভাল করতে পারে। সত্য এবং মিথ্যা উভয়ই পেতে আপনি দু'বার মুদ্রণটি কীভাবে ব্যবহার করতে পারবেন না তা আমি দেখতে পাচ্ছি না (অবশ্যই কোনও কিছু যা ইনপুট শেষ না হওয়া পর্যন্ত স্ট্রিং পড়ে)। এবং আমি বলেছিলাম যে সময়টি অনুকূল নয় optim আপনার চিন্তার জন্য ধন্যবাদ এটি 143 টি অক্ষরে হ্রাস করা যেতে পারে।
ফিল এফ

এবং প্রকৃতপক্ষে সমস্ত পথে যাওয়া এটি 121 টি অক্ষর তৈরি করবে ...
ফিল এফ

2
কোড-গল্ফ সামগ্রিকভাবে সংক্ষিপ্ত কোডের জন্য প্রতিযোগিতা নয়, তবে আপনার ভাষার পক্ষে সবচেয়ে সংক্ষিপ্ত। আপনি যদি নিজের সমাধানটি উন্নত করতে পারেন তবে আমি এটি করার পরামর্শ দিচ্ছি
জো কিং

@ জো কিং, আপনার স্পষ্টতার জন্য আপনাকে ধন্যবাদ সংশোধিত কোড হবে / হতে পারে: {print/^[-```1234567890=]*$/||/^[]qwertyuiop\[]*$/||/^[asdfghjkl;'#ASDFGHJKL]*$/||/^[zxcvbnm,.\/\|<>?ZXCVBNM]*$/||/^ *$/}
ফিল এফ

1

বাশ , 119 বাইট

"পাঠযোগ্য" আউটপুট সরবরাহ করতে প্রতিধ্বনি অন্তর্ভুক্ত করে। মুদ্রণ / আউটপুট অন্তর্ভুক্ত করার জন্য যদি আপনি এটির চারপাশে উপযুক্ত শেল (আপনার পছন্দ) রাখেন তবে আপনি 8 বাইট সংরক্ষণ করতে পারবেন। আমার চ্যালেঞ্জটি পড়ার পরামর্শ দেয় যে সমাধানটি একটি উপযুক্ত আউটপুট ইঙ্গিত দেয় যাতে আমি ১১৯ বাইট রেখে আছি।

[[ "$@" =~ ^[asdfghjklASDFGHJKL\;\'#]*$|^[-\`0-9=]+$|^[]qwertyuiop\[]*$|^[zxcvbnm,./\|\<\>\?ZXCVBNM]*$|^\ *$ ]];echo $?

এটি অনলাইন চেষ্টা করুন!


বাশ সলিউশনটি পরামর্শ দেওয়ার অর্থ হ'ল আমার / @ মান্যাটওয়ার্ক এডাব্লুকে সলিউশনটি 113 বাইটে কমে যেতে পারে।
ফিল এফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.