নামপ্যাড-ফ্রেন্ডলি নম্বর উত্পন্ন করুন


22

দ্বারা অনুপ্রাণিত কীবোর্ড বন্ধুত্বপূর্ণ নাম্বার জেনারেট করুন

পটভূমি

অনেক নম্বর প্যাডের নিম্নলিখিত লেআউট রয়েছে:

789

456

123

    0    

আমরা সংখ্যার পাড়াটিকে সংজ্ঞায়িত করি সেগুলি নিজের নিজের মতো করেও দেখানো নামপ্যাডে অर्थোগোনালি সংলগ্ন কোষগুলির সেট হিসাবে সেট করে। উদাহরণস্বরূপ, 2 এর পাড়া {1,5,3,0,2}এবং 0 এর পাড়া {1,2,0}। নীচের পরীক্ষার ক্ষেত্রে উপরে প্রতিটি সংখ্যার পাড়ার একটি তালিকা রয়েছে।

আমরা একটি নমপ্যাড বন্ধুত্বপূর্ণ সংখ্যাটিকে ধনাত্মক পূর্ণসংখ্যা হিসাবে সংজ্ঞায়িত করি যেখানে শীর্ষস্থানীয় শূন্যগুলি ছাড়াই দশমিক লিখিত থাকলে প্রথম ব্যতীত প্রতিটি সংখ্যা পূর্ববর্তী অঙ্কের আশেপাশে থাকে।

উদাহরণ স্বরূপ,

  • 5৮৫6 একটি নামপ্যাড বন্ধুত্বপূর্ণ নম্বর কারণ 8 the এর আশেপাশে, 5 টি 8 এর প্রতিবেশী এবং 6 টি 5 এর আশেপাশে রয়েছে।
  • 1201 একটি নামপ্যাড বন্ধুত্বপূর্ণ নম্বর কারণ 2 টি 1 এর আশেপাশে, 0 2 এর আশেপাশে এবং 1 টি 0 এর আশেপাশে থাকে।
  • 82 হয় না একটি নামপ্যাড বন্ধুত্বপূর্ণ সংখ্যা কারণ 2 8 আশেপাশে নয়।
  • 802 হয় না একটি নামপ্যাড বন্ধুত্বপূর্ণ সংখ্যা কারণ 0 8 (এলাকাগুলোর চারপাশে মোড়ানো না) আশেপাশে নয়।

সম্পর্কিত OEIS সিকোয়েন্স । মনে রাখবেন যে এই সম্পর্কিত ক্রমটি পৃথক কারণ এটি এর পরিবর্তে এবং এর সাথে 0সংলগ্ন হিসাবে গণনা করা হয়েছে ।712

চ্যালেঞ্জ

ধনাত্মক পূর্ণসংখ্যার দেওয়া n, nচতুর্থ বা প্রথম nনামপ্যাড বন্ধুত্বপূর্ণ সংখ্যাগুলি ফিরে আসুন , যেখানে প্রথমটি 1 You আপনি 0-ভিত্তিক সূচী ব্যবহার করতে পারেন, যেখানে 0-তম নামপ্যাড বন্ধুত্বপূর্ণ সংখ্যা 1 হবে।

প্রতিবেশী

প্রতিটি অঙ্কের পাড়া এখানে তালিকাভুক্ত করা হয়:

0:{0,1,2}
1:{0,1,2,4}
2:{0,1,2,3,5}
3:{2,3,6}
4:{1,4,5,7}
5:{2,4,5,6,8}
6:{3,5,6,9}
7:{4,7,8}
8:{5,7,8,9}
9:{6,8,9}

পরীক্ষার কেস / সিকোয়েন্স

এটি প্রথম 100 টি পদ

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 20, 21, 22, 23, 25, 32, 33, 36, 41, 44, 45, 47, 52, 54, 55, 56, 58, 63, 65, 66, 69, 74, 77, 78, 85, 87, 88, 89, 96, 98, 99, 100, 101, 102, 110, 111, 112, 114, 120, 121, 122, 123, 125, 141, 144, 145, 147, 200, 201, 202, 210, 211, 212, 214, 220, 221, 222, 223, 225, 232, 233, 236, 252, 254, 255, 256, 258, 320, 321, 322, 323, 325, 332, 333, 336, 363, 365, 366, 369, 410, 411, 412, 414, 441, 444, 445, 447]

5
আমি পছন্দ করি যে কীভাবে এই চ্যালেঞ্জটি ইতিবাচক পূর্ণসংখ্যাকে বিবেচনা করে (যা সারাংশ রাখে এবং আরও ভাষাগুলিকে অংশগ্রহণের অনুমতি দেয়) এবং নমনীয়তার জন্য এন- তম বা প্রথম এন ফলাফলগুলি প্রদর্শন করতে দেয়
লুইস মেন্ডো

আমি চ্যালেঞ্জকে পুরোপুরি ভুলভাবে লিখছি, এখানে একটি "ক্রমটি এই শব্দটি বৈধ" স্ক্রিপ্ট: এটি অনলাইনে চেষ্টা করুন!
ম্যাজিক অক্টোপাস আরন

উত্তর:


9

জাভাস্ক্রিপ্ট (ES6), 104 93 89 88 বাইট

অনুক্রমের N-th পদটি প্রদান করে, 1-সূচকযুক্ত।

f=(i,k,n=k,N=n/5>>1)=>(N?8530025>>(n%10*6191^N%10*6191)%26&1:!i--)?N?f(i,k,N):k:f(i,-~k)

ডেমো


সেরা আমি পেতে পারি 151 k=(n,a=1)=>n?k(n-([...(x=a+[]).slice(0,-1)].reduce((a,c)=>a*!!~"012 0124 01235 236 1457 24568 3569 478 5789 689".split` `[c].indexOf(x[i++]),i=1)),a+1):a-1 হতে পারে সেখানে কিছু সাহায্য করে, আমার পরীক্ষা সম্ভবত খুব দীর্ঘ
কনর ও'ব্রায়ান

এই উত্তরটি ম্যাজিক সংখ্যার ধারণাটিকে পুরো নতুন স্তরে নিয়ে আসে ... আপনি কীভাবে তাদের খুঁজে পেয়েছেন তা আমি বুঝতে পারি না
স্কটিনেট

2
@ স্কটনেট অনেকাংশে, এই উত্তরের জন্য আমার ব্যাখ্যাটিও এটির ক্ষেত্রে প্রযোজ্য। পরম পার্থক্যটি সেটির পক্ষে খুব একটা ভালভাবে কাজ করে না, তাই এর পরিবর্তে আমি এক্সওআর দিয়ে চেষ্টা করেছি। পার্শ্ব নোট হিসাবে, আমি একটি অন্য সূত্র পেয়েছি যা 96%% ক্ষেত্রে কাজ করার জন্য বিটমাস্কের প্রয়োজন ছাড়াই কাজ করেছিল। তবে বাকি 4% আলাদাভাবে প্রক্রিয়াকরণ করা জেএসে খুব ব্যয়বহুল। আমি জেলিতে চেষ্টা করিনি , এবং এখন আর কোনও সূত্র মনে নেই ... ¯ \ _ (ツ) _ / ¯
আর্নল্ড

ব্যাখ্যার জন্য ধন্যবাদ। এটি এখনও চিত্তাকর্ষক :-)
স্কটনেট


3

জেলি , 27 24 বাইট

অনুক্রমের এন প্রথম শর্তগুলি প্রদান করে।

D⁽ÞȦ×^2\%26“⁷wð’æ»ḂẠ
1Ç#

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

এটি আমার জেএস উত্তরের একটি বন্দর ।

D⁽ÞȦ×^2\%26“⁷wð’æ»ḂẠ    - helper link: test numpad-friendliness of a number, e.g. 1257
D                       - get decimal digits             -> [1, 2, 5, 7]
    ×                   - multiply by ...
 ⁽ÞȦ                    - ... the integer 6191           -> [6191, 12382, 30955, 43337]
     ^2\                - bitwise XOR overlapping reduce -> [10353, 18613, 53666]
        %26             - modulo 26                      -> [5, 23, 2]
                æ»      - right-shift by each value ...
           “⁷wð’        - ... the integer 8530025        -> [266563, 1, 2132506]
                  Ḃ     - isolate the LSB                -> [1, 1, 0] which means that 1->2
                                                            and 2->5 are OK and 5->7 is not
                   Ạ    - all (0 if there's any 0)       -> 0, i.e. not numpad-friendly :'(

1Ç#                     - main link: return the [input] first matching numbers,
                          using our helper link as a monad and starting with 1

3

05 এ বি 1 ই , 24 23 বাইট

µNSü‚εW_iO<ë<3BÆ}ÄR2‹}P

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

অনুক্রমের নবম সংখ্যাটি প্রদান করে।

ব্যাখ্যা:

µNSü‚εW_iO<ë<3BÆ}ÄR2‹}P    Full program
µ                          Until counter is equal to input
 N                         Push current iteration number (e.g. 1025)
  S                        Split to a list of chars (-> ['1', '0', '2', '5'])
   ü‚                      Group into pairs (-> ['1', '0'], ['0', '2'], ['2', '5'])
     ε                     For each pair
      W_                      Is smallest digit equal to 0?
        iO<                      True: sum all digits and decrement 
           ë                     False: 
            <                       - decrement all digits
             3B                     - convert to base 3
               Æ                    - reduced substraction
                }             End if
                 Ä            Absolute value
                  R           Reverse 
                   2‹         1 if result is < 2, 0 otherwise
                     }     End for each
                      P    Cumulative product (1 if all pair results are 
                                     1, 0 otherwise)
                           -- implicit counter increment if stack value is 1

মূল ধারণাটি হ'ল, 0কী বাদে , কোনও অঙ্ক হ্রাস পেয়ে বেস 3 এ রূপান্তরিত হওয়ার নিম্নলিখিত বৈশিষ্ট্য রয়েছে:

  • বাম এবং ডান প্রতিবেশীদের 1 এর পরম পার্থক্য রয়েছে
  • উপরে এবং নীচে প্রতিবেশীদের মধ্যে 10 এর নিখুঁত পার্থক্য থাকে যা বিপরীত হয়, সুবিধাজনকভাবে 1 এর সমান
  • নামপ্যাড কীগুলির অন্য কোনও জোড়ায় বিপরীত হওয়া সত্ত্বেও বিভিন্ন মানের ফলাফল হয়

অবশ্যই নামপ্যাড কীটি ifপরিচালনা করতে আমাদের একটি বিবৃতি প্রয়োজন 0


সলিড জবাব, আরও উন্নতি দিতে এসেছিল, কোনও খুঁজে পাচ্ছে না। ওওও ... এবং সেই জোড়ায় আপনাকেও নেতৃত্ব দিয়েছিল :)।
ম্যাজিক অক্টোপাস উরান

আমি মনে করি না যে আমি এই 3 টি নিয়ম নিয়ে আসতে পেরেছি, বেশ চিত্তাকর্ষক টিবিএইচ; আপনি কি ধারণা দিয়েছেন?
ম্যাজিক অক্টোপাস উরন

2

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

`@J3:qEt!J*+hYAd|2>~A?@]NG-

প্রথম nনামপ্যাড-বন্ধুত্বপূর্ণ সংখ্যাগুলি আউটপুট করে ।

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

ব্যাখ্যা

থেকে প্রতিটি অঙ্ক 1করতে 9একটি জটিল সংখ্যা নামপ্যাড মধ্যে তার অবস্থান প্রতিনিধিত্ব এনকোড করা হয়, একটি ধাপে 2 গ্রিড, যেখানে বাস্তব অংশ আনুভূমিক অবস্থান প্রতিনিধিত্ব করে উল্লম্ব অবস্থানে এবং কাল্পনিক অংশ প্রতিনিধিত্ব করে ব্যবহার। সুতরাং 1হয় 0+0j, 2হয় 0+2j, 3হয় 0+4j, 4হয় 2+0j, ..., 9হয় 4+4j

অঙ্কটি 0এনকোড করা হয় 0+1j, যেমন এটি একেবারে 1এবং ঠিক মাঝখানে স্থাপন করা হয়েছিল 2

প্রতিটি প্রার্থী নামপ্যাড বান্ধব সংখ্যা স্বরূপ, "দশমিক" বেস রূপান্তর ডিজিটের পরিবর্তে জটিল সংখ্যার উপরে ব্যবহার প্রয়োগ করা হয় 0, 1, ..., 9। এটি একটি অ্যারে দেয়, যার মধ্যে পর পর পরের পার্থক্য গণনা করা হয়। প্রার্থীর সংখ্যাটি নামপ্যাড-বান্ধব যদি এবং কেবলমাত্র সমস্ত পরম পার্থক্য সর্বাধিক 2(যেমন গ্রিড পদক্ষেপ) হয়) যদি এটি হয় তবে স্ট্যাকের উপরে নম্বরটি রয়েছে।

কোডটিতে একটি do... whileলুপ ব্যবহার করা হয় , যা স্ট্যাকের সংখ্যার পরিমাণ ইনপুট সমান হলে বের হয় n

একটি ইউনিট গ্রিড আরও প্রাকৃতিক পছন্দ হত। সংখ্যা 1, 2এবং 0তারপর মিলা চাই 0+0j, 1+0jএবং 0.5+0jrespecrively। তবে স্টেপ -২ গ্রিড ব্যবহার করা গল্ফিয়ার, কারণ 2(ফাংশন E) এবং পুশিং 0+1j(ফাংশন J) দ্বারা গুণ করা ধাক্কা 0+0.5j( J2/বা .5j) এর চেয়ে এক বাইট কম


2

জেলি , 26 বাইট

’d-,.⁸?3µ€ạ/S
Dṡ2Ç€<2Ạ
1Ç#

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

-২ বাইট ধন্যবাদ কেয়ারড কোইনারিংহিংহিং
-2 বাইটসকে ধন্যবাদ এরিক দ্য আউটগোল্ফারকে

ব্যাখ্যা

’d-,.⁸?3µ€ạ/S  Helper Link; compute the distance between two keys z = [x, y]
      ?        Switch:
     ⁸         If z (is not 0):
’              Decrement
 d             Divmod by:
  -,.          Else: [-1, 0.5] (special position for 0)
       3       3; right argument for divmod otherwise ignored
        µ      Begin a new monadic link / end this link
         €     Compute the position for each [x, y]
           /   Reduce on
          ạ    Absolute Difference
            S  Sum (this gives the Manhattan Distance)
Dṡ2Ç€<2Ạ       Helper Link; determine if a number <z> is numpad friendly
D              Convert number to decimal digits
 ṡ             Slice into overlapping slices of length
  2            2 (pairs)
    €          For each pair,
   Ç           The distance between the keys
     <2        Compare with 2 (the distance between two adjacent keys is 1; corners 2; 0 - 1 and 0 - 2 are 1.5)
       Ạ       All; either all of the distances are less than 2 or there were no distances
1Ç#            Main Link; find the first (input) numpad friendly numbers
  #            nfind; counting up from _ collect the first _______ matches that are
1                                      1
                                                           (input)
 Ç             Numpad Friendly

আপনি []2 বাইটের জন্য সরিয়ে ফেলতে পারেন
23'9 এ স্নিগ্ধ coinheringaahing



2

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

g=lambda n,k=1:n and g(n-(lambda l:all(abs(a-b)<1.2for a,b in zip(l,l[1:])))([~-d%3+~-d/3*1j-d/~d*1.5for d in map(int,`k`)]),k+1)or~-k

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


আপনি যখন সংজ্ঞা দিয়েছিলেন fএবং তারপরে এটি একবার ব্যবহার করেন , আপনি এটি ইনলাইন করতে এবং দুটি বাইট সংরক্ষণ করতে পারেন ।
জোনাথন ফ্রেচ

1

গণিত, 249 234 202 বাইট

(a=o=1;While[a<=#,s=IntegerDigits@o;t=1;p=0;While[t+p<Length@s,If[!FreeQ[(IntegerDigits/@{210,4210,53210,632,7541,86542,9653,874,9875,986})[[s[[t]]+1]],s[[t+1]]],t++,p++]];If[t==Length@s,a++];o++];o-1)&


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

ডেটা সঙ্কুচিত করার জন্য ব্যবহারকারীর ধন্যবাদ 202729 (-32 বাইট)

আমার ফলাফল:

100 -> 447
1000 -> 20023
10000 -> 788777


আমার মনে হয় আপনি ব্যবহার করে ডেটার কম্প্রেস করতে পারেন IntegerDigits: IntegerDigits/@{210,4210,53210,632,7541,86542,9653,874,9875,986}, এবং ব্যবহার FreeQ, Trব্যবহার Doপরিবর্তে For, ব্যবহার পোতা জন্য স্বরলিপি AppendToএবং ব্যবহার Doপরিবর্তে Whileপুনরাবৃত্তি করতে Tr[1^s]বার, এছাড়াও পরিবর্তনশীল নিষ্কাশন p। এছাড়াও আপনি প্রমাণিত করেন নি যে অ্যালগরিদমটি সঠিক, অর্থাত, ফলাফল সংখ্যাটি সর্বদা তার সূচক বর্গের চেয়ে কম থাকে, যা একটি উত্তরকে বৈধ করার জন্য প্রয়োজনীয়।
ব্যবহারকারী 202729

1
@ user202729 আমি অনেক কিছুই পরিবর্তন করেছি y আমার উত্তরটি অবশ্যই কার্যকর। আমি এখন তথ্য সংকুচিত করব।
J42161217

ডাউনটা কেন?
J42161217


0

জাভা 8, 192 190 বাইট

n->{int r=1,p;a:for(;n>0;){p=-1;for(int c:(r+++"").getBytes())if(p>-1&!"012;0124;01235;236;1457;24568;3568;478;5789;689".split(";")[c-=48].contains(p+""))continue a;else p=c;n--;}return~-r;}

nঅনুক্রমের (1-ইনডেক্সড) 'তম সংখ্যাটি প্রদান করে।

আমার ভাবনার চেয়ে এটি আশ্চর্যজনকভাবে কঠিন ছিল .. সম্ভবত আজ বিকেলে কিছু মস্তিষ্কের খামার রয়েছে ..

ব্যাখ্যা:

এখানে চেষ্টা করুন।

n->{                 // Method with integer as both parameter and return-type
  int r=1,           //  Return-integer
      p;             //  Previous digit
  a:for(;n>0;){      //  Loop (1) as long as the input is larger than 0
    p=-1;            //   Start `p` at an integer that is not 0-9 (-1 in this case)
    for(int c:(r+++"").getBytes())
                     //   Loop (2) over the digits of the current number
      if(p>=0        //    If this is not the first digit (`p` != -1),
         &!"012;0124;01235;236;1457;24568;3568;478;5789;689".split(";")[c-=48]
           .contains(p+""))
                     //    and the adjacent digits are NOT part of a NumberPad-Friendly Nr:
        continue a;  //     Go to the next iteration of loop (1)
      else           //    Else:
        p=c;         //     Set `p` to the current digit for the next iteration
                     //   End of loop (2) (implicit / single-line body)
      n--;           //   If we haven't encountered the `continue`, decrease `n` by 1
  }                  //  End of loop (1)
  return~-r;         //  Return the result-integer - 1
}                    // End of method
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.