সবচেয়ে স্বল্পতম সোয়াইপ পাথটি সন্ধান করুন


12

ভূমিকা

ইদানীং আমি সোয়াইপের সাথে টাইপ করতে অভ্যস্ত হয়েছি ।

আমি লক্ষ্য করেছি যে আপনার শুরুর চিঠিটি থেকে আপনার শেষের চিঠি পর্যন্ত একটি সরল রেখা অঙ্কন করে বা পুনরাবৃত্তি হওয়া অক্ষরগুলি এড়িয়ে গিয়ে কিছু শব্দ তৈরি করা যেতে পারে।

উদাহরণস্বরূপ, আমি balloonনিম্নলিখিত অক্ষরগুলিতে সোয়াইপ করে শব্দটি টাইপ করতে পারি :

b> a> l> o> n

চ্যালেঞ্জ

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

এই সাধারণ QWERTY কীবোর্ড লেআউটটি ব্যবহার করুন :

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

উপরের উদাহরণে, শব্দ balloonএকটি থাকবে SSPএর 4নীচে ক্রমানুসারে বিস্তারিত:

1) Start at `b` (line segments = 0)
2) slide to `a` (line segments = 1)
3) slide to `l` (line segments = 2)
4) slide to `o` (line segments = 3)
5) slide to `n` (line segments = 4)

স্ট্রিং qwertyহয়েছে SSP= 1 থেকে দিক পরিবর্তন এই শব্দ Swyping প্রয়োজন।

ইনপুট

a-zSTDIN, ফাংশন আর্গুমেন্ট বা কমান্ড লাইনের মাধ্যমে যে কোনও একটি স্ট্রিং স্ট্রিং via

আউটপুট

STDOUT, রিটার্ন বা আপনার ভাষাগুলির নিকটতম বিকল্প, nস্ট্রিংয়ের প্রতিনিধিত্ব করে এমন নম্বর দিয়ে মুদ্রণ করুন SSP

এক আউটলেটে ট্রেইলিং নিউলাইন। স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়। বাইট জিততে সংক্ষিপ্ততম জমা

মন্তব্য

  • দিক পরিবর্তনের ফলে একটি নতুন লাইন বিভাগ শুরু হয়।
  • যে অক্ষরগুলি পুনরাবৃত্তি করেছে সেগুলি কেবল একবার গণনা করা হয় (যেমন: bookkeeperহিসাবে বিবেচনা করা উচিত bokeper)।
  • সাধারণত, স্বপাই প্রতিবেশী চিঠিগুলি দেখে এবং এর সেরা অনুমানটি পূরণ করে মিস করা অক্ষরগুলি সংশোধন করে। এই চ্যালেঞ্জের জন্য, ধরে নিন কোনও প্রাকৃতিক ভাষার বর্ধন, ভবিষ্যদ্বাণীমূলক পাঠ্য বা ত্রুটি সংশোধন নেই।
  • বড় A-Zহাতের ইনপুটগুলি তাদের ছোট হাতের অংশগুলির মতো চিকিত্সা করা হয়।
  • ইনপুটটিতে কোনও সংখ্যা উপেক্ষা 0-9করুন।
  • তির্যক পাথ অনুমতি দেওয়া হয় - যেমন, একটি সরল রেখা যে কভার চিঠি o, k, n, উদাহরণস্বরূপ, যেমন গণনা 1সেগমেন্ট। এই নিয়মের কোনো তির্যক ঢাল প্রযোজ্য (যেমন: অক্ষর c, h, iসঙ্গতিপূর্ণ হয়)।

উদাহরণ

Input          Output
---------------------
a                0
aa               0
aaaaaa           0
aaaaaabc         2
in               1
int              2
java             3
qwerty           1
chicago          5
balloon          4
BALLOON          4
typewriter       5
bookkeeper       6
stackexchange    11
2hello7          3
2HELLO7          3

এইচটি সি থেকে আই পর্যন্ত লাইনে রয়েছে, তবে গ এবং ও এর মধ্যে কোনও চিঠি নেই?
স্পার

যদি জমাগুলিতে পাশাপাশি বড় হাতের অক্ষরকে সমর্থন করতে হয় তবে আমি পরীক্ষার ক্ষেত্রে কিছু অন্তর্ভুক্ত করার পরামর্শ দিই suggest
ডেনিস

@ স্পার সঠিক
সিজারম্যাট

@ ডেনিস ভাল কল - পরীক্ষার কেস যুক্ত করা হয়েছে।
সিজারম্যাট

আমি সোয়াইপের সাথে টাইপ করা উপভোগ করি তবে আমি লাইনের জন্য প্রোগ্রামিং সম্পর্কে জানি না ...
mbomb007

উত্তর:


8

সিজেম, 78 76 73 68 62 বাইট

relA,s-:_2ew{:-},{{i"x8LÑejPG ÀÏi"225b28b=A+Ab}/.-:ma}%e`,

নোট করুন যে কোডটিতে অপ্রিন্টযোগ্য অক্ষর রয়েছে।

Is বাইট রক্ষিত পাথগুলি গণনা করতে আরএলই ব্যবহার করার জন্য @ আইসাকের চতুর ধারণাটি ধার করা।

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন । লিঙ্কটি যদি কাজ না করে তবে এই পেস্ট থেকে কোডটি অনুলিপি করুন

কিভাবে এটা কাজ করে

rel      e# Read a token from STDIN and cast it to lowercase.
A,s-     e# Remove all digits.
:_       e# Duplicate each element of the argument (string/array).
2ew      e# Push all overlapping slices of length 2.
{:-},    e# Filter out slices where both elements are equal.
{        e# For each slice:
  {      e#   For each character of the slice:
    i    e#     Push its code point.

    "x8LÑejPG ÀÏi"225b28b

         e#     Convert the string from base 225 to base 28, pushing the array
         e#     [15 7 16 17 18 27 26 8 9 0 3 11 4 6 24 1 22 5 21 10 25 23 12 2 13 14].
         e#     These are the positions on the QWERTY keyboard, starting from the
         e#     upper left corner and going right.

    =    e#     Select the element that corresponds to the code point.

         e#     Arrays wrap around in CJam. Since 'a' has code point 97, the array has
         e#     length 26 and 97 % 26 == 19, 'a' corresponds to the 20th element.

    A+Ab e#     Add 10 and convert to base 10. Example: 8 -> [1 8]
  }/     e#
  .-     e#     Vectorized subtraction. [a b] [c d] -> [a-c b-d]
  :ma    e#     atan2. Pushes the angle of the direction. [y x] -> arctan(y/x)
}%       e#
e`       e# Apply run-length encoding.
,        e# Count the runs.

খুব চালাক. ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ.
সিজারম্যাট

3

পাইথ, 53 50 49 বাইট

lrPMfT-VJm.jF.D@jC"XÖ;¿ìÇ×;¤ð$  _"28CdT@GrzZtJ8

কীবোর্ড সংক্ষেপণ ফর্ম্যাট @ ডেনিস ধন্যবাদ।

এই উত্তরে কিছু ছাপানো অক্ষর নেই। সঠিক কোডের জন্য নীচের লিঙ্কগুলি দেখুন।

বিক্ষোভেরপরীক্ষার জোতা।

ব্যাখ্যা:

lrPMfT-VJm.jF.D@jC"..."28CdT@GrzZtJ8
                              rzZ      Convert input to lowercase.
                            @G         Take the intersection with G.
                                       This removes the numbers.
         m                             Map over the characters
                 C"..."                Treat the string as a base 256 number.
                j      28              Convert this number to base 28, giving:
                                       [15, 7, 16, 17, 18, 27, 26,  ... ]
                                       which is the character positions 
                                       from top left, rotated by 97 places.
               @         Cd            Index this list by ord(character)
             .D            T           divmod by 10, giving the x-y position.
          .jF                          Convert this to a complex number.
        J                              Save the result to J.
      -VJ                        tJ    Vectorize - over J and J[1:]. This gives
                                       pairwise diffeences between J's elements.
    fT                                 Filter the differences on being truthy.
                                       This removes letter pairs with no movement.
  PM                                   Map the remaining complex numbers to their
                                       phases, which indicates their directions.
 r                                 8   Run-length encode the result.
l                                      Print out the number of separate RLE groups.

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