तले हुए कुंजी के साथ टाइपिंग


16

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

आप स्मार्ट हैं इसलिए आप जानते हैं कि यदि वह अपना नाम टाइप करता है और फिर बार-बार अपने नाम के बजाय स्क्रीन पर आता है तो वह अपने नाम में इनपुट करने में सफल होगा। आप भी कुंजी टाइप करते हैं और उसे पुनर्व्यवस्थित करते हैं, लेकिन यह जानना चाहते हैं कि सफल होने में कितने मोड़ आएंगे।

आपका कार्य एक प्रोग्राम या फ़ंक्शन लिखना है, जिसमें अक्षरों का फेरबदल दिया गया है और मित्र का नाम बदल जाता है।

इनपुट विवरण:

  • आपकी भाषा के लिए सुविधाजनक संरचना में इनपुट के रूप में दो तार दिए गए हैं।
  • पहला तार पुराने लोगों के वर्णमाला क्रम में नए लोअरकेस अक्षरों की सूची है। (पहला चरित्र वह है जो की स्थिति में है a, पिछले एक की स्थिति में है z।) कुछ बदलाव हमेशा स्ट्रिंग में होंगे।
  • दूसरा तार नाम है। इसमें कोई भी प्रिंट करने योग्य एससीआई चरित्र शामिल हो सकता है लेकिन केवल ऊपरी और निचले वर्णमाला के वर्णों को फेरबदल किया जाएगा यदि कोई हो। हो सकता है कि नाम ही अल पर फेरबदल न हो।

आउटपुट विवरण:

  • आउटपुट एक पूर्णांक है जो न्यूनतम आवश्यक रूप से मुड़ता है। न्यूलाइन वैकल्पिक है।

उदाहरण:

इनपुट: 'abcfdeghijklmnopqrstuvwxyz' 'Mr. John Doe'(डी, ई, एफ पदों में बदलाव)

आउटपुट: 3(दिखाए गए नाम हैं: Mr. John Fod=> Mr. John Eof=> Mr. John Doe)

इनपुट: 'nopqrstuvwxyzabcdefghijklm' 'Mr. John Doe'( ROT13 सिफर )

आउटपुट: 2(कोई भी इनपुट नाम जिसमें अक्षर शामिल 2हैं, मूल नाम का उत्पादन करने के लिए राउंड लेगा ।)

इनपुट: 'aebcdjfghiqklmnopzrstuvwxy' 'John Doe'

आउटपुट: 140

यह कोड-गोल्फ है इसलिए सबसे छोटी प्रविष्टि जीतती है।


1
आपको संभवतः इस परीक्षण मामले को शामिल करना चाहिए: aebcdjfghiqklmnopzrstuvwxy(आउटपुट 1260 के लिए Mr John Doe)। यह अधिकतम संभव है - इसमें क्रम 4, 5, 7, 9 (और एक अपरिवर्तित a) के चक्र शामिल हैं, और प्रत्येक नाम जिसमें प्रत्येक चक्र से कम से कम एक अक्षर होता है, 1260 होगा। और मुझे लगता है कि वर्णमाला को इनपुट के रूप में लेना या अप्रभावित नाम का उपयोग करना भी महत्वपूर्ण किनारे के मामले हैं।
मार्टिन एंडर

@ मार्टिनबटनर संशोधन के साथ जोड़ा गया।
रैंडम

मैं थोड़ा उलझन में हूं कि आप कितने टर्न लेते हैं।
फ़ूजज़नल

@FUZxxl सामान्य तौर पर, आप क्रमचय को चक्रों में विघटित कर सकते हैं , फिर आप जांच सकते हैं कि किन चक्रों में नाम के अक्षर शामिल हैं। इसका परिणाम उन चक्रों की लंबाई का एलसीएम है (नाम में वर्णों के माध्यम से चक्र अप्रासंगिक हैं, निश्चित रूप से)। हालाँकि, इस चुनौती के लिए, यह वास्तव में आवश्यक नहीं है ... बस तब तक प्रतिस्थापन निष्पादित करें जब तक कि आप मूल नाम को हिट न करें और गिनें कि आपको कितनी बार स्थानापन्न करना था।
मार्टिन एंडर

1
एक साइड नोट के रूप में, जॉन फ़ाइल मार्कर उर्फ EOFपूरी तरह से अद्भुत है!
राजस्व

जवाबों:


9

पायथ, 16 बाइट्स

JGfqzuXGJrQ0UTz1

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

इनपुट दो लाइनों पर दिया जाना चाहिए, नाम और फिर क्रमपरिवर्तन। क्रमोन्नति का हवाला दिया जाना चाहिए। नाम उद्धृत या निर्विवाद हो सकता है। उदाहरण के लिए:

"John Doe"
"aebcdjfghiqklmnopzrstuvwxy"

140 देता है।

स्पष्टीकरण:

                            Implicit:
                            z = input()              z is the name.
                            Q = eval(input())        Q is the permutation.
                            G = 'abcdefghijklmnopqrstuvwxyz'

JG                          J = G
  f             1           Starting at 1 and counting upwards, find
                            the first case where the following is true:
   qz                       z ==
     u       UTz            reduce, where the accumulator, G, is initialized to z on
      XG                    translate G
        J                   from the normal alphabet, J
         rQ0                to Q.lower().

स्ट्रिंग्स के लिए इनपुट विधि समान होनी चाहिए।
रैंडमरा

10

CJam, 31 27 25 24 बाइट्स

l:A;lel:N{_A_$er_N#}g;],

के रूप में इनपुट लेता है:

aebcdjfghiqklmnopzrstuvwxy
Mr. John Doe

अर्थात् पहली पंक्ति - अक्षर, दूसरी पंक्ति - नाम।

यह कैसे काम करता है :

l:A;lel:N{_A_$er_N#}g;],
l:A;                         "Read the alphabets from the 1st line in A and pop from stack";
    lel:N                    "Read the name in small caps from 2nd line and store in N";
         {         }g        "Run a while loop until we have the original name back again";
          _                  "Put a dummy string on stack just to keep count of times";
           A                 "Put the alphabets on stack";
            _$               "Copy them and sort the copy to get the correct order";
              er             "Transliterate the right keys with the wrong ones";
                _N#          "Copy the result and see if its equal to the original name";
                     ;]      "Pop the last name and wrap everything in an array";
                       ,     "Get the length now. Since we were putting a dummy string";
                             "on stack in each iteration of the while loop, this length";
                             "represents the number of times we tried typing the name";

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


5

रूबी, ५ Rub

->a,n{t=""+n
(1..2e3).find{t.tr!("a-zA-Z",a+a.upcase)==n}}

व्याख्या

  • इनपुट को लंबोदर के तर्क के रूप में लिया जाता है।
  • उपयोग Enumerable#find(धन्यवाद @Ventero!) और String#tr!पात्रों को बदलने के लिए जब तक प्रतिस्थापित Stringवास्तविक नाम से मेल नहीं खाता।

""+nकी तुलना में थोड़ा कम है n.dup, और आप Enumerable#findएक स्पष्ट काउंटर का उपयोग करने के बजाय रचनात्मक उपयोग करके एक और बाइट बचा सकते हैं :(1..1e4).find{t.tr!(...)==n}
वेंचरो

इसके अलावा, आप इनपुट n लोअरकेस
ऑप्टिमाइज़र

@ ऑप्टिमाइज़र जो मुझे कुछ भी बचाने के लिए नहीं लगता है, रूबी का लोअरकेस में बदलने का तरीका काफी लंबा है (मुझे इस्तेमाल करना होगा n.downcase!)।
19

हाँ, लेकिन फिर आपको ऐसा नहीं करना है A-Zऔर+a.upcase
ऑप्टिमाइज़र

A-Z+a.upcaseऔर n.downcase!\nउसी की लंबाई है :)
ब्रिटिश

2

CJam, 32 31 बाइट्स

llel_2e3,{;'{,97>3$er_2$=}#)p];

इसका परीक्षण यहां करें। यह पहली पंक्ति पर क्रमांकन लेता है, और इनपुट की दूसरी पंक्ति पर नाम।

व्याख्या

llel_2e3,{;'{,97>3$er_2$=}#)p];
ll                              "Read both lines into strings.";
  el_                           "Convert the name to lower-case and duplicate.";
     2e3,                       "Get a range from 0 to 1999 to cover all possible results.";
         {               }#     "Find the first index where the block yields a true result.";
          ;                     "Discard the number, it's just a dummy.";
           '{,97>               "Create a string of the lower-case alphabet.";
                 3$             "Copy the permutation.";
                   er           "Substitute letters in the second copy of the name.";
                     _2$=       "Duplicate and check for equality with original name.";
                           )p   "Increment by 1 and print.";
                             ]; "Clear the stack to prevent extraneous output.";

2

अजगर २६

KGJ@GrQZfqJusm@zxKdGUTJ!!J

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

इस प्रोग्राम बाइट की लागत के कुछ दुर्भाग्यपूर्ण परिणाम हैं, जैसे कि जी में जी को स्टोर करने के लिए इसे कम करने में उपयोग करें, साथ ही फ़िल्टर शुरू करने के लिए नहीं (नहीं (जे) का उपयोग करने की आवश्यकता है। इस वजह से, मुझे उम्मीद है कि यह अभी भी गोल्फ हो सकता है।

यह एक प्रोग्राम है जो इनपुट लेता है जैसे:

aebcdjfghiqklmnopzrstuvwxy
'John Doe'

(पहले तर्क में उद्धरण की कमी पर ध्यान दें)

थकावट के बाद आने के लिए स्पष्टीकरण;)


क्या मुझे अपनी पिछली टिप्पणी को दोहराना चाहिए)
ऑप्टिमाइज़र

@ ऑप्टिमाइज़र: पीआई ने उस आखिरी को खो दिया;)
फ्राईएमईमैनमैन

तुम कह रहे थे ? ;)
ऑप्टिमाइज़र

1

हास्केल 131 बाइट्स

import Data.Char
h n=(!!((ord n)-97))
g s n m|n==m=1|0<1=1+g s(h n s)m
f s=foldr1 lcm.map((\x->g s(h x s)x).toLower).filter isAlpha

fपरिणाम प्राप्त करने के लिए क्रमचय स्ट्रिंग और नाम के साथ कॉल करें

व्याख्या

-- h finds the mapping of a character given the permutation
h :: Char   -> -- Character to map
     String -> -- Character permutation
     Char      -- Mapped character

-- g finds the number of character mappings required to reach a given character
-- by calling h on the given character every time it calls itself.
g :: String -> -- The character permutation
     Char   -> -- The current character
     Char   -> -- The character to find
     Int       -- The number of mapped to find the character

-- f finds the number of mappings required to return the given string back to itself
-- by finding the lowest common multiple of the period of all the characters in the
-- given string
g :: String -> -- The permutation string
     String -> -- The string to get back
     Int       -- The final answer

1

GolfScript (33 बाइट्स)

~{32|}%\:A&{.{A$?A=}%.-1$=!}do],(

इनपुट को दो के रूप में लेता है (सिंगल- या डबल-) किसी भी राशि के व्हाट्सएप द्वारा अलग किए गए उद्धृत स्ट्रिंग्स; जैसे

'abcfdeghijklmnopqrstuvwxyz' 'Mr. John Doe'

ऑनलाइन डेमो

विच्छेदन

~           # Eval. Stack: perm name
{32|}%      # Lower-case name (also affects non-alphabetic characters but...)
\:A&        # Store perm in A and filter name to alphabetic characters, giving str_0
{           # do-while loop. Stack: str_0 str_1 ... str_i
  .         #   Duplicate str_i
  {A$?A=}%  #   tr 'a-z' perm   giving str_{i+1}
  .-1$=!    #   Loop while str_{i+1} != str_0
}do         # end do-while loop
],(         # Gather the sequence of permuted strings in an array and take its length - 1
            # to account for containing str_0 twice

लिप्यंतरण इस तथ्य पर निर्भर करता है कि सभी वर्ण प्रभावित हैं (यह {'ABC'?'abc'=}%क्रमबद्ध स्ट्रिंग की A$जगह 'ABC'और क्रमपरिवर्तन की Aजगह है 'abc'); अधिक सामान्य विकल्प पर्याप्त नहीं बचाते हैं क्योंकि अक्षर वर्णों के लिए फ़िल्टर इतना सस्ता है।

यह -1$स्टैक के निचले भाग तक पहुंचने के लिए भी निर्भर करता है , जो कि अपेक्षाकृत दुर्लभ जीएस ट्रिक है।

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