স্ক্র্যাম্বলড কীগুলি দিয়ে টাইপ করা


16

আপনার বন্ধু কম্পিউটারের সাথে খুব ভাল নয় তাই ব্যবহারিক রসিকতা হিসাবে কেউ তার কীবোর্ডে অক্ষরগুলি (আজ) স্ক্র্যাম্ব করে। তিনি যখন বসে কীবোর্ডের দিকে তাকিয়ে নিজের নামটি টাইপ করার চেষ্টা করলেন তখন তিনি বুঝতে পারলেন যে চিঠিগুলি স্ক্যাম্বলড হয়ে গেছে এবং আপনার সহায়তা চেয়েছে।

আপনি স্মার্ট তাই আপনি জানেন যে তিনি যদি নিজের নামটি টাইপ করেন এবং বারবার তাঁর নামের পরিবর্তে পর্দায় যা আসে তা পুনরায় টাইপ করেন তিনি শেষ পর্যন্ত তার নামে ইনপুট করতে সফল হন। আপনিও দয়াবান এবং কীগুলি পুনরায় সাজিয়ে তোলেন তবে এটি জানতে কতগুলি বাঁক লাগবে তা জানতে চান।

আপনার কাজ হ'ল একটি প্রোগ্রাম বা ফাংশন লিখুন যা অক্ষরগুলি এবং এই বন্ধুর নাম পরিবর্তনের সংখ্যা গণনা করে given

ইনপুট বিশদ:

  • আপনার ভাষার জন্য সুবিধাজনক কাঠামোর মধ্যে দুটি স্ট্রিং ইনপুট হিসাবে দেওয়া হয়।
  • প্রথম স্ট্রিংটি পুরানো বর্ণগুলির বর্ণানুক্রমিক ক্রমে নতুন ছোট অক্ষরের তালিকা। (প্রথম চরিত্রটি হ'ল এটির অবস্থানটিতে a, শেষেরটি একটি অবস্থানে রয়েছে z)) কিছু পরিবর্তন সর্বদা স্ট্রিং-এ প্রদর্শিত হবে।
  • দ্বিতীয় স্ট্রিংয়ের নাম। এটি কোনও মুদ্রণযোগ্য আসকি চরিত্র ধারণ করতে পারে তবে কেবলমাত্র উপরের এবং ছোট হাতের বর্ণানুক্রমিক অক্ষরগুলি যদি কোনও হয় তবে তা বদলে যাবে। নামটি নিজেই আল-এ বদলে যাবে না।

আউটপুট বিশদ:

  • আউটপুট হ'ল একক পূর্ণসংখ্যা যা ন্যূনতমভাবে প্রয়োজনীয় টার্নগুলির সংখ্যা। নিউলাইন alচ্ছিক।

উদাহরণ:

ইনপুট: 'abcfdeghijklmnopqrstuvwxyz' 'Mr. John Doe'(d, e, f অবস্থান পরিবর্তন করা হয়েছে)

আউটপুট: 3(প্রদর্শিত নামগুলি হল: Mr. John Fod=> Mr. John Eof=> Mr. John Doe)

ইনপুট: 'nopqrstuvwxyzabcdefghijklm' 'Mr. John Doe'( রট 13 সিফার )

আউটপুট: 2(যে কোনও ইনপুট নাম যাতে চিঠি থাকে 2সেগুলি আসল নামটি তৈরি করতে রাউন্ড নিতে পারে))

ইনপুট: 'aebcdjfghiqklmnopzrstuvwxy' 'John Doe'

আউটপুট: 140

এটি কোড-গল্ফ তাই সংক্ষিপ্ত এন্ট্রি জিততে পারে।


1
আপনার সম্ভবত এই পরীক্ষার কেসটি অন্তর্ভুক্ত করা উচিত: aebcdjfghiqklmnopzrstuvwxy(এর জন্য আউটপুট 1260 Mr John Doe)। এটি সর্বাধিক সম্ভব - এটি ক্রম 4, 5, 7, 9 (এবং অপরিবর্তিত a) এর চক্র নিয়ে গঠিত এবং প্রতিটি চক্রের অন্তত একটি অক্ষর থাকা প্রতিটি নাম 1260 ফলবে। বা একটি অরক্ষিত নাম ব্যবহার করাও গুরুত্বপূর্ণ প্রান্তের কেস।
মার্টিন ইন্ডার

@ মার্টিনব্যাটনার পরিবর্তনের সাথে যুক্ত হয়েছে।
এলোমেলো

আপনি কীভাবে মোড়ের সংখ্যা নিয়ে এসেছেন সে সম্পর্কে আমি কিছুটা বিভ্রান্ত।
FUZxxl

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

1
পার্শ্ব নোট হিসাবে, জন ফাইল মার্কার ওরফে EOFসম্পূর্ণ আশ্চর্যজনক!
Rev

উত্তর:


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

সিজেম, 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

রুবি, 58

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

ব্যাখ্যা

  • ইনপুটটিকে ল্যাম্বডায় আর্গুমেন্ট হিসাবে নেওয়া হয়।
  • প্রতিস্থাপন করা আসল নামের সাথে মিল না হওয়া অবধি Enumerable#find(ধন্যবাদ @ ভেন্টোরো!) এবং String#tr!অক্ষরগুলি প্রতিস্থাপন করতে ব্যবহার করুন String

""+nএর চেয়ে কিছুটা ছোট n.dupএবং আপনি Enumerable#findএকটি স্পষ্ট কাউন্টার ব্যবহার না করে সৃজনশীল ব্যবহার করে অন্য একটি বাইট সংরক্ষণ করতে পারেন :(1..1e4).find{t.tr!(...)==n}
ভেন্টোরো

এছাড়াও, আপনি ইনপুট এন লোয়ারকেস তৈরি করে প্রচুর বাইট সংরক্ষণ করতে পারেন
অপ্টিমাইজার

@ অপ্টিমাইজার যা আমার কোনও কিছুই রক্ষা করবে বলে মনে হয় না, লোয়ারকেসে রূপান্তরিত করার জন্য রুবির পদ্ধতিটি বেশ দীর্ঘ (আমাকে ব্যবহার করতে হবে n.downcase!)।
ব্রিটিশিয়া

হ্যাঁ, তবে তারপরে আপনাকে আর করতে হবে নাA-Z+a.upcase
অপটিমাইজার 19

A-Z+a.upcaseএবং n.downcase!\nএকই দৈর্ঘ্য রয়েছে :)
ব্রিটিশটি

2

সিজেম, 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

পাইথ 26

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

গল্ফস্ক্রিপ্ট (৩৩ বাইট)

~{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$স্ট্যাকের নীচে অ্যাক্সেস করতেও নির্ভর করে যা তুলনামূলকভাবে বিরল জিএস কৌশল।

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