क्या शब्द एक दूसरे से सटे कुंजी के साथ टाइप करने योग्य है?


13

इसे पढ़ने से पहले मैं इस छोटी पहेली को पढ़ने का सुझाव देता हूं: /puzzling/11408/longest-word-with-adjacent-letters-on-a-keyboard

मैं चाहता हूं कि आप एक ऐसा प्रोग्राम बनाएं जिसमें एक तर्क, एक शब्द (केवल लोअरकेस अक्षर), और आउटपुट "हां" हो, अगर शब्द कीबोर्ड पर आसन्न कुंजियों के साथ टाइप किया जा सकता है (लेख देखें) और "नहीं" यदि शब्द हो सके 'आसन्न अक्षरों के साथ टाइप किया जाना चाहिए।

इस चुनौती में प्रयुक्त कीबोर्ड लेआउट यहां दिया गया है:

 ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
 | Q | W | E | R | T | Y | U | I | O | P |
 └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┘
   | A | S | D | F | G | H | J | K | L |
   └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┘
     | Z | X | C | V | B | N | M |
     └───┴───┴───┴───┴───┴───┴───┘

याद रखें: यह कोडगॉल्फ है इसलिए सबसे छोटा उत्तर जीतता है!


क्या हम मान सकते हैं कि इनपुट में केवल अक्षर हैं? क्या हम मान सकते हैं कि वे सभी एक ही मामले में दिए गए हैं?
मार्टिन एंडर

2
मैं इससे भ्रमित हूं: "दो आसन्न कुंजियों में अधिकतम 1.5 * उनके बीच एक कुंजी का स्थान हो सकता है।" निश्चित रूप से आसन्न चाबियाँ वास्तव में आसन्न हैं, अर्थात्, उनके बीच कोई स्थान नहीं है, जैसा कि जुड़ी हुई पहेली में है?
ल्यूक

तर्क कैसे लें? STDIN? एक समारोह?
Theonlygusti

जवाबों:


9

अजगर, ६६

?"Yes".Am>2sm^-.uk2Cm.Dx"qwertyuiopasdfghjkl*zxcvbnm"b9.5dC,ztz"No

इसे यहाँ आज़माएँ।

मुझे यह जानकर आश्चर्य हुआ कि पाइथ के पास कर्ण क्रिया नहीं है, इसलिए यह संभवतः एक अलग भाषा द्वारा हराया जाएगा। मैं पाइथ को एक हाइपेन्यूज़ फ़ंक्शन का प्रस्ताव देता हूँ, इसलिए यह अत्याचार भविष्य में नहीं होगा।

व्याख्या

मैं इसमें कीबोर्ड को रूपांतरित करता हूं:

┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
| Q | W | E | R | T | Y | U | I | O | P |
└─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┐
  | A | S | D | F | G | H | J | K | L | * |
  └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴───┘
    | Z | X | C | V | B | N | M |
    └───┴───┴───┴───┴───┴───┴───┘

जिसे मैंने बाद में बताया "qwertyuiopasdfghjkl*zxcvbnm"तब मैंने modulo 9.5 के साथ divmod का इस्तेमाल किया और हर कुंजी के 2D निर्देशांक का पता लगाने के लिए। फिर मैं लगातार कुंजियों के बीच की दूरी की गणना करता हूं, और जांचता हूं कि क्या चौकोर दूरी <2 है।


3

सीजेएम, 83 75 74 बाइट्स

l_1>]z["qwertyuiop asdfghjkl  zxcvbnm "[__B>]z+s_W%+_]zsf{\#)}:*"Yes""No"?

इसे ऑनलाइन आज़माएं।

व्याख्या

सामान्य दृष्टिकोण एक बड़े आसन्न स्ट्रिंग का उत्पादन करना है जिसमें आसन्न कीबोर्ड वर्णों की प्रत्येक जोड़ी होती है और फिर जाँच करें कि आसन्न इनपुट वर्णों की प्रत्येक जोड़ी उस स्ट्रिंग में निहित है।

मैं काफी खुश हूं कि मैं कैसे आसन्न स्ट्रिंग का निर्माण करने में कामयाब रहा, जो बहुत सरल और कॉम्पैक्ट तर्क का उपयोग करता है।

l_1>]z          "Read a line of input and create a list of every pair of
                 adjacent input characters. There will be a trailing element
                 of just the final character, but that's okay since any single
                 lowercase letter can be found in the adjacency string.";
["qwertyuiop asdfghjkl  zxcvbnm "
              "^ Create the in-row forward adjacency string.";
[__B>]z         "Create the alternating-row forward adjacency string by
                 interleaving the in-row string with a substring of itself
                 starting with the middle row letters:
                   'q w e r t y u i o p   a s d f g h j k l  zxcvbnm '
                 + ' a s d f g h j k l     z x c v b n m  '[no interleave here]
                 -----------------------------------------------------
                   'qawsedrftgyhujikolp   azsxdcfvgbhnjmk l  zxcvbnm '";
+s              "Append the alternating-row forward adjacency string to the
                 in-row forward adjacency string.";
_W%+            "Append the reverse of the forward adjacency string (the
                 backward adjacency string) to the forward adjacency string.";
_]zs            "Double every character in the adjacency string so every
                 character is adjacent to itself.";
f{\#)}          "Map each pair of input characters to its 1-indexed location in
                 the adjacency string (0 if not found).";
:*              "Calculate the product of each pair's location in the adjacency
                 string. This will be nonzero if and only if every pair of
                 input characters are in fact adjacent.";
"Yes""No"?      "If the product is nonzero, produce 'Yes'; otherwise, produce
                 'No'.";
                "Implicitly print the result.";

यह बात है, मैं CJam सीख रहा हूँ।
सोहम चौधरी

@octatoan लगता है कि हम दोनों पर्थ को सीखने से बेहतर होंगे, हालाँकि। : पी
रनर १११

हाहा, शायद इस मामले में, हाँ।
सोहम चौधरी

2

जे, 77 बाइट्स

No`Yes{::~[:*/2>+/"1@(2|@-/\3(|,.<.@%~+-:@|)'qazwsxedcrfvtgbyhnujmikXolX'i.])

उपयोग:

   f=.No`Yes{::~[:*/2>+/"1@(2|@-/\3(|,.<.@%~+-:@|)'qazwsxedcrfvtgbyhnujmikXolX'i.])

   f 'redresser'
Yes
   f 'qwergy'
No
   f 'ppcg'
No

तरीका:

प्रत्येक इनपुट पत्र के लिए मैं इसे 2 डी कोर्डिनेट करता हूं (प्रश्न में छवि के समान) यह स्ट्रिंग में सूचकांक के आधार पर है 'qazwsxedcrfvtgbyhnujmikXolX'। इनपुट में अक्षरों के प्रत्येक जोड़े के लिए मैं जांचता हूं कि क्या उनके निर्देशांक 'मैनहट्टन-दूरी 2 से छोटा है। यदि सभी हैं, तो मैं आउटपुट करता हूं Yes, Noअन्यथा (`ऑपरेटर का दुरुपयोग करके)।

इसे यहाँ ऑनलाइन आज़माएँ।


आप पत्र भूल गए p
mbomb007

@ mbomb007 किसी भी-पाया पात्रों के लिए i.ऑपरेटर नहीं लौटाता है index of the last element + 1इसलिए मैं 1 बाइट को बाहर न लिखकर बचा सकता हूं pऔर फिर भी इसे सही सूचकांक प्राप्त कर सकता हूं ।
क्रमांक

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.