আমার "কিবোরে" আমাকে চাবি-বিরক্ত করছে! একটি ন্যূনতম কীস্ট্রোকগুলি পেতে আমাকে সহায়তা করুন


13

এই প্রশ্নটি সামনে আসার জন্য @ আগাওয়া 1001 এ ক্রেডিট ।

ব্যাখ্যা

আমার নতুন "কিবোরে" কেবলমাত্র 2 টি বোতাম রয়েছে +এবং -

স্মৃতিতে নম্বরটি শুরু হয় 0

প্রতিটি ক্রমাগত প্রেস +বা -ক্রমবর্ধমান / কমিয়ে মেমরিটি ঠিক কতবার পরপর চাপানো হয়েছে তার জন্য।

অতএব, আপনি যদি +4 বার টিপেন, প্রথমবার এটি 1 যুক্ত করে, দ্বিতীয়বার এটি 2 যোগ করে, তৃতীয়বার এটি 3 যোগ করে, চতুর্থবারে 4 যোগ করে, আপনাকে 10(দশ) দেয়।

এখন, আপনি যদি -3 বার টিপেন, প্রথমবার এটি 1 টি, দ্বিতীয়বার 2 টি, তৃতীয় বার 3 টি বাদ দিয়ে আপনাকে 4(চার) রেখে দেয় ।

টি এল; ডিআর

+ এবং - এর একটি স্ট্রিং দেওয়া হয়েছে, অক্ষরের প্রতিটি পরিবর্তনে এটিকে ভাগ করুন। তারপরে এম +চিহ্নগুলির প্রতিটি ফলাফলের স্ট্রিং এম-থ্রি ত্রিভুজ সংখ্যা যুক্ত করে এবং এন -চিহ্নগুলির প্রতিটি স্ট্রিং এন-থ্রি ত্রিভুজ সংখ্যাটি বিয়োগ করে।

হাঁটুন-থ্রু

এখন, আপনি এখনও বুঝতে না পারলে, আমি আপনাকে দেখাব যে কীভাবে +++--+--সৃষ্টি হয় 1

Program   | Counter | Memory
----------------------------
          |  0      | 0
+         | +1      | 1
++        | +2      | 3
+++       | +3      | 6
+++-      | -1      | 5
+++--     | -2      | 3
+++--+    | +1      | 4
+++--+-   | -1      | 3
+++--+--  | -2      | 1

কার্য

  • আপনি কার্যকারিতা যুক্তি হিসাবে বা STDIN থেকে ইনপুট হিসাবে ইতিবাচক পূর্ণসংখ্যার গ্রহণ করবেন।
  • তারপরে, আপনি উপরের পদ্ধতিটি ব্যবহার করে সেই সংখ্যাটি তৈরি করতে প্রয়োজনীয় ন্যূনতম কীস্ট্রোকগুলি আউটপুট / মুদ্রণ করবেন।

Testcases

যেহেতু পুনরায় সাজানো +বা রানগুলি -একই সংখ্যা দেয় তাই এই জাতীয় প্রতিটি গ্রুপের জন্য কেবল অভিধানিকল্পিত প্রাথমিকতম ক্রম তালিকাভুক্ত করা হয়।

Input | Output | Possible corresponding sequences
-------------------------------------------------
    4 |      5 | -+++-
    6 |      3 | +++
    9 |      5 | ++++-
   11 |      7 | +++-+++
   12 |      7 | +++++--, ++++-++
   19 |      8 | -++++++-
   39 |     12 | +++++++++---
   40 |     13 | +++++++++---+, ++++++++-+++-
   45 |      9 | +++++++++
   97 |     20 | ++++++++++++++--+---, +++++++++++++-++++--, ++++++++++++-++++++-
  361 |     34 | ++++++++++++++++++++++++++-+++-+++

অতিরিক্ত সংস্থান

স্কোরিং

এটি । বাইটস মধ্যে সংক্ষিপ্ত সমাধান।


9
তার মানে কি ... আপনি কিবোর্ড হয়ে গেছেন?
বাসুকসুয়ান

আমি মনে করি আপনি এখন 10 টি পরীক্ষার মামলা দিয়েছিলেন (আমার সহ) OK
এরিক আউটগল্ফার

@ ΈρικΚωνσταντόπουλος 12 টি পরীক্ষার কেসটি সামান্য সংশোধন করে যুক্ত করা হয়েছে (যেহেতু +++++--এটি বিকল্পও, তবে ++-++++এটি সমতুল্য হওয়ায় আমি অপসারণ করেছি ++++-++)। আমি এখনও একটি আরও কেস পেয়েছি যা আমি পরে যুক্ত করতে চাই যদি কেউ কার্যকর সমাধান নিয়ে আসে তবে যদি আমি এটি তৈরির ব্যবস্থা করি।
Sp3000

@ Sp3000- কে আমি ++-++++সরানো চাইনি । এছাড়াও, এটি আমার সম্পাদনা ছিল, আপনার নয়।
এরিক আউটগল্ফার

@ Equivalent সমতুল্য সমাধানগুলির প্রতিটি সেট থেকে কেবল 1 টি সমাধান তালিকাভুক্ত - আমি ভেবেছিলাম যে সমস্ত ন্যূনতম সমাধান তালিকাভুক্ত করা থাকলে পরীক্ষার কেসগুলি অহেতুক দীর্ঘ হবে (40 এর 6 টি সমাধান আছে এবং 97 এর 17 টি সমাধান রয়েছে)। যদি উদ্দেশ্যটি পরিষ্কার না হত তবে আমি ক্ষমা চেয়ে নিচ্ছি। এছাড়াও আপনি +++++--(বা সমতুল্য --+++++) নিখোঁজ হয়েছিলেন , এজন্য আমি প্রথম স্থানে সম্পাদনা করার প্রয়োজনীয়তা অনুভব করেছি।
Sp3000

উত্তর:


2

পাইথন 2, 119 বাইট

def g(n,i=0,s=''):
 c=x=t=0
 for d in s:C=int(d)*2-1;t=(c==C)*t+1;c=C;x+=c*t
 return(x==n)*len(s)or g(n,i+1,bin(i)[3:])

খুব ধীর ব্রুট ফোর্স পদ্ধতির। তৃতীয় লাইন একটি স্ট্রিংয়ের স্কোর গণনা করে x; যার স্কোর সমতুল্য যুক্তির সন্ধান না পাওয়া পর্যন্ত অন্যান্য লাইনগুলি সমস্ত সম্ভাব্য বাইনারি স্ট্রিংগুলিতে লুপ করে।

@ লিকি তিনটি বাইট সংরক্ষণ করেছে!


s/x==n and len/(x==n)*len/
লিকি নুন

এটি থেকে মুক্তি পেতে কিছুটা বাইট সংরক্ষণ করতে পারে sএবং কেবল পুনরাবৃত্তি বিভাগগুলি ব্যবহার করতে পারে:def f(n): \n while n>0:print n%2;n/=2
লিকি নুন

2

পাইথ, 25 বাইট

ffqyQ.as-Mc*RhdY2{s.pM./T

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

এটি চূড়ান্তভাবে অক্ষম, এবং memory f(n)11 এর জন্য মেমরির বাইরে চলে যায় f(22)এটি আমার ল্যাপটপে প্রায় 10 সেকেন্ডে = 10 গণনা করে।

ব্যাখ্যা

  • 1 থেকে শুরু করে সংখ্যাগুলির মাধ্যমে লুপ করুন T। ( f)
    • এর সমস্ত পার্টিশন তৈরি করুন T। ( ./T)
    • সেগুলির সমস্ত অনুমতি তৈরি করুন। ( .pM)
    • তালিকাটি সমতল করুন। ( s)
    • তালিকাটি বৈদ্যুতিন করুন। ( {) এই পদক্ষেপটি সরানো যেতে পারে তবে কোডটি আরও দ্রুত তৈরি করে।
    • পার্টিশনের ফলে নির্ধারিত ক্রমগুলি ফিল্টার করুন: ( f)
      • dপার্টিশনের প্রতিটি সংখ্যা ( *R) নিজেই একাধিক (এক hd) দিয়ে গুণ করুন। এটি ফলাফলকে যোগ / বিয়োগ করতে দ্বিগুণ সংখ্যা দেয়।
      • দৈর্ঘ্যের 2 অংশে তালিকাটি কেটে দিন ( c2)
      • দ্বিতীয় অংশ থেকে সেই অংশগুলিতে যে কোনও দ্বিতীয় সংখ্যা বিয়োগ করুন। ( -M)
      • ফলাফলগুলি যোগ করুন। পার্টিশনের ক্রমশক্তিটি সংযোজনের সংখ্যা হিসাবে ব্যাখ্যা করা হয়, তারপরে বিয়োগগুলি, ইত্যাদি দ্বিগুণ ফলাফলের সংখ্যা দেয় This
      • পরম মান নিন। ( .a) ফলাফলটি নেতিবাচক হলে, সংযোজনগুলি এবং বিয়োগগুলি অদলবদলে ইতিবাচক ফলাফল পাওয়া যায়।
      • ফলাফলটি দ্বিগুণ ইনপুট সমান কিনা তা পরীক্ষা করে দেখুন। ( qyQ) এই ক্ষেত্রে পার্টিশনের অনুমান সঠিক, এটি ফেরত দিন।
    • যদি ফিল্টার কোনও ফলাফল ফেরত দেয় তবে দৈর্ঘ্যের একটি সমাধান ছিল T। ফিরে এবং মুদ্রণ T

2

এমএটিএল , 43 29 বাইট

E:"@TFEqZ^!"@Y'tQ**s]vGE=a?@.

এটি স্মৃতি- এবং সময়-অদক্ষ। অনলাইন সংকলক কেবল ইনপুট পর্যন্ত পরিচালনা করতে পারে 45

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

এখানে সমস্ত পরীক্ষার কেস সহ একটি পরিবর্তিত সংস্করণ রয়েছে 40(এটি অনলাইন সংকলকটিতে প্রায় এক মিনিট সময় নেয়)।

ব্যাখ্যা

এটি বৈধ ক্রম সন্ধান না হওয়া পর্যন্ত প্রতিটি দৈর্ঘ্যের সমস্ত সম্ভাব্য কী-প্রেস ক্রমগুলি পরীক্ষা করে।

E:       % Range [1 2 ... 2*N] where N is implicit input. The required sequence length is
         % less than 2*N, so this is enough
"        % For each
  @      %   Push current value: length of sequence
  TFEq   %   Push array [1 -1]
  Z^     %   Cartesian power. Gives all possible sequences of 1, -1 of that length
  !      %   Transpose. Each sequence is now a row
  "      %   For each sequence
    @    %     Push current sequence
    Y'   %     Run-length decoding: Pushes an array of values 1 and -1, and then an
         %     array of run-lengths
    tQ*  %     Duplicate, add 1, multiply. Gives twice the triangular number for each run
    *    %     Multiply element-wise by 1 or -1 to produce correct sign
    s    %     Sum of array. This is the number produced by the current sequence
  ]      %   End for
  v      %   Concatenate all numbers into an array
  GE=a   %   True if any of those numbers equals twice the input
  ?      %   If so
    @    %     Push current sequence length. This is the final result
    .    %     Break loop
         %   End if
         % End for
         % Implicit display

@ এসপি 3000 আমি এটিও যুক্ত করেছি, সুতরাং, রেফারেন্সের জন্য, 4, 6, 9 এবং 19 টি পরীক্ষার কেসগুলিকে যথাযথভাবে উল্লেখ করা হয়েছে।
এরিক আউটগল্ফার

1

পাইথন, 105 100 বাইট

অদক্ষ প্রস্থের প্রথম অনুসন্ধান ব্যবহার করে।

def k(n):
 m=t=l=0;h=[]
 while m-n:o=1-2*(t>0);(m,t,l),*h=h+[(m+t-o,t-o,l+1),(m+o,o,l+1)]
 return l
  • h একটি সারি হিসাবে ব্যবহৃত একটি তালিকা
  • m তালিকার শীর্ষে ক্রমের মান
  • t শেষ সংখ্যাটি যোগ করা হয় m
  • l ক্রম উত্পন্ন যে দৈর্ঘ্য হয় m
  • o +/- 1 হয়, সাইনটি এর চিহ্নের বিপরীতে থাকে t

সম্পাদনা করুন: লিকি নুন পাঁচটি বাইট শেভ করেছেন


s/m,t,l,h=0,0,0,[]/m=t=l=0,h=[]/
ফাঁস নুন

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