আপনার লক আনলক করুন


34

আপনি আপনার বাইকে 3 টি সংখ্যার সংমিশ্রণ লক দিয়ে লক করেছেন। এখন আপনি একটি যাত্রায় যেতে চান এবং নিম্নলিখিত প্রোগ্রামের সাহায্যে এটি আনলক করা প্রয়োজন।

ইনপুট

1 ম পরামিতি

লক অবস্থায় আপনার লকের ডিজিটাল সংমিশ্রণ । এটি অবশ্যই ২ য় প্যারামিটার থেকে পৃথক হওয়া উচিত (= আনলক হওয়া অবস্থার সংমিশ্রণ )। (অন্যথায় আপনার বাইকটি চুরি হয়ে যেতে পারে!)

ব্যাপ্তি 000..999। শীর্ষস্থানীয় শূন্যগুলি বাদ দেওয়া উচিত নয়।

২ য় প্যারামিটার

আনলক অবস্থায় আপনার লকের ডিজিটাল সংমিশ্রণ । এই মান আপনার লক্ষ্য।

ব্যাপ্তি 000..999। শীর্ষস্থানীয় শূন্যগুলি বাদ দেওয়া উচিত নয়।

আউটপুট

প্রাথমিক অবস্থা (যা সর্বদা 1 ম পরামিতি হয়) এবং সর্বশেষ পদক্ষেপ (যা সর্বদা 2 য় প্যারামিটার সহ) প্রতিটি "ঘূর্ণন" এর পরে সংমিশ্রণ লকের প্রতিটি রাজ্যের একটি তালিকা।

অ্যালগরিদম

আনলকড অবস্থায় সঠিক অঙ্কে না পৌঁছানো পর্যন্ত আপনি প্রথম অঙ্কটি একের পর এক "আবর্তন" শুরু করেন । তবে, আপনি সম্পূর্ণ আনলক-কোড সম্পর্কে জ্ঞান থাকার কারণে, আপনি অঙ্কটি আনলক অবস্থায় যে অঙ্কে পৌঁছানোর জন্য সর্বনিম্ন পরিমাণে আবর্তনের প্রয়োজন সেদিকেই এটি ঘোরান । টাই করার ক্ষেত্রে আপনি যে দিকনির্দেশনা চান তা চয়ন করতে পারেন।

আপনি যখন প্রথম প্রথম অঙ্কে পৌঁছেছেন, আপনি একই পদ্ধতিটি ২ য় এবং তারপরে তৃতীয়টি দিয়ে শুরু করবেন।

অঙ্কগুলির ক্রমটি একটি বৃত্ত হিসাবে বুঝতে হবে:

... 9 0 1 2 3 4 5 6 7 8 9 0 1 2 ...

এর অর্থ, 1 থেকে 9 এর মধ্যে ক্ষুদ্রতম পরিমাণটি আবর্তন নয়

1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 = 8

কিন্তু

1 -> 0 -> 9 = 2।

নোট

  • আপনি ডিফল্ট I / O নিয়মের উপর নির্ভর করতে পারেন
  • আপনি পরামিতিগুলির ক্রম পরিবর্তন করতে পারেন।

উদাহরণ

উদাহরণ 1, সঠিক

Input: 999 001

Output:
999
099
009
000
001

উদাহরণ 2, সঠিক

Input: 000 292

Output:
000
100
200
290
291
292

উদাহরণ 3, ভুল আউটপুট

Input: 999 121

Wrong output:
999
899 // Wrong because wrong rotation direction.
799
699
...

Correct output:
999
099
199
109
119
129
120
121

উদাহরণ 4, ভুল ইনপুট

Input: 1 212 // Wrong because no leading zeros.

এটি হ'ল সংক্ষিপ্ত উত্তর জেতে।


আমি কি দুটি পরামিতির ক্রম পরিবর্তন করতে পারি?
tsh

আমরা যতক্ষণ না এটি সর্বোত্তম হওয়াতে কোনও ক্রমে অঙ্কগুলি আপডেট করতে পারি?
আর্নৌল্ড

@ আরনাউল্ড না কারণ আমি আমার লকটি একে একে আনলক করছি :)
ইউজার 2190035

2
@ নাইট 2 না, যেহেতু প্রোগ্রামটির সমন্বয় বর্ণনার "আনলকিং প্রক্রিয়া" অনুকরণ করা উচিত।
ব্যবহারকারী 2190035

উত্তর:


12

পাইথন 2 , 113 107 105 99 95 বাইট

a,b=input()
i=0
print a
for x in a:
 while x-b[i]:a[i]=x=(x+(x-b[i])%10/5*2-1)%10;print a
 i+=1

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

পূর্ণসংখ্যার তালিকা হিসাবে ইনপুট নেয়


সংরক্ষিত:

  • -6 বাইট, জোল ধন্যবাদ
  • -4 বাইট, জিতসকে ধন্যবাদ

2
99 বাইট গণনা করার জন্য একটি ভিন্ন উপায় ব্যবহার করে।
জোয়েল

@ জোয়েল ধন্যবাদ! :)
টিফিল্ড

2
96 বাইট - বোনাস: যে কোনও অ্যারের আকারের জন্য কাজ করে
জিত্সে

1
95 বাইট - যেহেতু আপনি পাইথন 2 ব্যবহার করছেন, তাই ওয়েল হারাতে পারে//
জিত্সে

@ জিতস ধন্যবাদ :)
টিফিল্ড

6

জেলি , 15 বাইট

_æ%5ḣT$ṂṠ⁸_%⁵ðƬ

[0,9]

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

কিভাবে?

_æ%5ḣT$ṂṠ⁸_%⁵ðƬ - Link: list of integers, s; list of integers, t
              Ƭ - collect up values until a fixed point is reached applying:
             ð  -   the dyadic chain:  (i.e. f(x, t) where x starts off as s)
_               -     subtract (t from x) (vectorises) - i.e. [ta-xa, tb-xb, tc-xc]
   5            -     literal five
 æ%             -     symmetric modulo (vectorises) - i.e. [[-4..5][ta-xa], [-4..5][tb-xb], [-4..5][tc-xc]]
      $         -     last two links as a monad:
     T          -       truthy indices  - e.g. [0,-4,1]->[2,3]
    ḣ           -       head to index (vectorises)       [[0,-4],[0,-4,1]]
       Ṃ        -     minimum                            [0,-4]
        Ṡ       -     sign (vectorises)                  [0,-1]
         ⁸      -     chain's left argument (x)
          _     -     subtract (vectorises) - i.e. move the single spindle one in the chosen direction
            ⁵   -     literal ten
           %    -     modulo (since 9+1=10 not 0)

4

জাভাস্ক্রিপ্ট (ES6),  73 72  70 বাইট

2 বাইট সংরক্ষণ করেছেন @ টিএসএকে ধন্যবাদ

কারিড সিনট্যাক্সে অঙ্কের 2 অ্যারে হিসাবে ইনপুট নেয় (a)(b)। একটি স্ট্রিং প্রদান করে।

a=>g=b=>b.some(x=>d=x-(a[++i]%=10),i=-1)?a+`
`+g(b,a[i]+=d/5<5/d||9):b

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

মন্তব্য

a =>                  // a[] = initial combination
g = b =>              // b[] = target combination
  b.some(x =>         // for each digit x in b[]:
    d =               //   compute the difference d:
      x -             //     between x
      (a[++i] %= 10), //     and the corresponding digit in a[]
                      //     we apply a mod 10, because it may have exceed 9
                      //     during the previous iteration
    i = -1            //   start with i = -1
  ) ?                 // end of some(); if it's truthy:
    a + `\n` +        //   append a[] followed by a line feed
    g(                //   followed by the result of a recursive call:
      b,              //     pass b[] unchanged
      a[i] +=         //     add either 1 or 9 to a[i]:
        d / 5 < 5 / d //       add 1 if d / 5 < 5 / d
        || 9          //       otherwise, add 9
    )                 //   end of recursive call
  :                   // else:
    b                 //   stop recursion and return b[]

d/6&1^d>0||9->d/5>5/d?9:1
tsh


2

পাইথন 2 , 101 97 বাইট

a,c=input()
print a
for i in 0,1,2:
 while a[i]!=c[i]:a[i]=(a[i]+(a[i]-c[i])%10/5*2-1)%10;print a

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

জোয়েল থেকে 3 বাইট থেক্স ।

ইনটগুলির তালিকা হিসাবে ইনপুট নেয়।



1
@ জোয়েল: ধন্যবাদ! আসলে, যেহেতু এটি পাইথন 2, //এর সমান /, তাই এখানে একটি অ্যাডিটোনাল বাইট পাওয়া গেছে।
চস ব্রাউন

এটি @ টিফিল্ডের উত্তরের মতো ঠিক একই পদ্ধতির মতো দেখায় , তবে সামান্য পরিবর্তন সহ
জিত্সে

@ জিটস: আচ্ছা, আমরা দুজনেই আমাদের উত্তরগুলি পরিবর্তন করছি; উদাহরণস্বরূপ, তিনি শুরু করেছিলেন for x,y,i in zip(a,c,[0,1,2])যদি আমি স্মরণ করি ...
চ্যাস ব্রাউন

1

জেলি , 30 বাইট

_ż+¥⁵AÞḢṠxAƊ×€ʋ"JṬ€$$Ẏ;@W}+\%⁵

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

একটি ডায়াডিক লিঙ্কটি তার বাম আর্গুমেন্ট হিসাবে আনলক কোড এবং তার ডান বর্তমান লক করা রাষ্ট্র হিসাবে উভয়কে পূর্ণসংখ্যার তালিকা হিসাবে গ্রহণ করে।

এটি অনেক দীর্ঘ অনুভব করে!



1

কাঠকয়লা , 48 বাইট

θ≔EθIιθF³«≔⁻﹪⁺⁻I§ηι§θι⁵χ⁵ζF↔櫧≔θι﹪⁺§θι÷ζ↔ζχ⸿⪫θω

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

θ

প্রাথমিক অবস্থান মুদ্রণ করুন।

≔EθIιθ

গণনার প্রয়োজনে প্রাথমিক অবস্থানের স্ট্রিংটিকে সংখ্যার অঙ্কের অ্যারেতে পরিবর্তন করুন।

F³«

ঘুরে প্রতিটি ডিজিটের উপরে লুপ করুন।

≔⁻﹪⁺⁻I§ηι§θι⁵χ⁵ζ

সেই অঙ্কটি আনলক করতে প্রয়োজনীয় ঘূর্ণনের সংখ্যা গণনা করুন। এই থেকে একটি সংখ্যা -5থেকে 4যেখানে -55 নিম্নগামী ঘুর্ণন এবং অর্থ 4মানে 4 উর্ধ্বগামী ঘুর্ণন।

F↔ζ«

প্রতিটি ঘোরার উপর লুপ।

§≔θι﹪⁺§θι÷ζ↔ζχ

ঘূর্ণনের চিহ্ন অনুসারে ডিজিট আপডেট করুন।

⸿⪫θω

একটি নতুন লাইনে স্ট্রিং হিসাবে অঙ্কগুলি আউটপুট করুন।


1

টি-এসকিউএল 2008, 170 বাইট

এটিকে পঠনযোগ্য করার জন্য আমি কয়েকটি লাইন ব্রেকগুলি যুক্ত করেছি

DECLARE @1 char(3)='123',@2 char(3)='956'

DECLARE @r int,@s int,@ int=0
g:SET @+=1
h:SELECT @r=substring(@1,@,1)+9,@s=@r-substring(@2+'1',@,1)
IF @s=9GOTO g
PRINT @1
SET @1=stuff(@1,@,1,(@r+@s/5%2*2)%10)
IF @<4GOTO h

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


এই সমাধানটি আউটপুটে 0 এর শীর্ষস্থানীয় রাখে না। উদাহরণ: 000-999
ম্যাথু

1
@ আপনি প্রায় সঠিক, আমি আশা করি এই বিল্ডটি ইনপুট বিকল্পে ব্যবহার করব, তবে আপনি যদি 0 ইনপুট দিয়ে শুরু করেন তবে এটি ইনপুট থেকে সরানো হবে। এটি যে সমাধানটি ব্যর্থ হয় তা নয়
t-clausen.dk

1
@ ম্যাথেজ - এটি এখন বিটিডব্লিউ ঠিক করা হয়েছে। ইনপুট বাক্সগুলি সরিয়ে
ফেলুন



0

ম্যাটল্যাব, 100 89 বাইট

একটি পৃথক পদ্ধতির (বিয়োগের ম্যাট্রিক্স তৈরি করতে অন্তর্ভুক্ত সম্প্রসারণের ব্যবহার) 11 বাইট হ্রাস করে:

function f(a,b);c = mod(a-b+5,10)-5;a,mod(a-cumsum(repelem(eye(3).*sign(c),abs(c),1)),10)

[মূল 100 বাইট সমাধান]

function f(a,b);c=mod(a-b+5,10)-5;a,for n=1:3;for r=1:abs(c(n));a(n)=mod(a(n)-sign(c(n)),10),end;end

উভয়ই ইনপুটগুলিকে 3-এলিমেন্ট অ্যারে হিসাবে পাস করে ডাকে f([9 1 1], [2 3 2])


0

জাভা (জেডিকে) , 139 বাইট

a->b->{for(int i;;a[i]+=(a[i]-b[i]+10)%10<5?9:1,a[i]%=10){System.out.println(""+a[i=0]+a[1]+a[2]);for(;i<3&&a[i]==b[i];i++);if(i>2)break;}}

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

সবাই হিসাবে একই অ্যালগরিদম, ভিন্নভাবে ঘূর্ণিত হয়েছে কারণ জাভা System.out.printlnবেশ ব্যয়বহুল!



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