অলস মান উত্পন্ন করুন


25

সম্পর্কিত: আমার মাইক্রোওয়েভ ওভেন প্রোগ্রামঅলস মাইক্রোওয়েভ ইনপুট উত্পন্ন দ্বারা অনুপ্রাণিত ।

পূর্ণসংখ্যা অ নেতিবাচক এর অলস মান এন পূর্ণসংখ্যার যে নিকটস্থ হয় সবচেয়ে ছোট এন যখন তাদের সমস্ত সংখ্যার অভিন্ন।

প্রদত্ত (যে কোনও উপায়ে) দেওয়া কোনও অলস মান (যে কোনও উপায়ে) এন

Nআপনার ভাষাটি ডিফল্টরূপে বহিরাগত আকারে সবচেয়ে বড় পূর্ণসংখ্যার প্রতিনিধিত্ব করে।1000000 (খুব বেশি উচ্চ প্রয়োজনীয়তার কারণে আকর্ষণীয় সমাধানগুলি অনেকটা হারিয়ে যায়))

পরীক্ষার কেস:

   0 →    0
   8 →    8
   9 →    9
  10 →    9
  16 →   11
  17 →   22
  27 →   22
  28 →   33
 100 →   99
 105 →   99
 106 →  111
 610 →  555
 611 →  666
7221 → 6666
7222 → 7777 

প্রশ্নের সহকর্মী প্রমাণ করেছেন যে কোনও সম্পর্ক থাকবে না: 9/11, 99/111 ইত্যাদি ব্যতীত যার একটির চেয়ে অপরটি সংক্ষিপ্ত, দুটি ক্রমাগত বৈধ উত্তরগুলি সর্বদা একটি বিজোড় দূরত্ব থেকে পৃথক থাকে, সুতরাং কোনও পূর্ণসংখ্যার সঠিক হতে পারে না তাদের কাছ থেকে সমতুল্য।

উত্তর:


15

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

n=>~-(n*9+4).toPrecision(1)/9|0

প্রতিটি জন্য অলস মান সরাসরি গণনা n

সম্পাদনা: জাভাস্ক্রিপ্টের পূর্ণসংখ্যার ধরণের সীমাবদ্ধতার কারণে কেবল 277777778 পর্যন্ত কাজ করে। বিকল্প সংস্করণ:

n=>((n*9+4).toPrecision(1)-1)/9>>>0

35 বাইট, 16666666667 অবধি কাজ করে।

n=>((n=(n*9+4).toPrecision(1))-n[0])/9

38 বাইট, 94444444444444443 পর্যন্ত কাজ করে But তবে এটি এখনও 2 53 এর কিছুটা কম যা 9007199254740992।


@ ব্যবহারকারী81655 আমি তাদের সংখ্যার সীমাবদ্ধতার সাথে কিছু বিকল্প সংস্করণ যুক্ত করেছি।
নিল

1
আমি এই অ্যালগরিদমটির সাথে কাজ করতে পারি Number.MAX_SAFE_INTEGERনা কারণ 8e16 - 1প্রকাশিত হয় 8e16। দুঃখজনকভাবে, দেখে মনে হচ্ছে একমাত্র উপায় সর্বাধিক ফলাফলকে হার্ড-কোডিং করা। তবুও +1
ব্যবহারকারী81655

@ ব্যবহারকারী81655 সমাধানের অনুমতি দেওয়ার জন্য আমি উপরের সীমাটি নীচে নামিয়েছি।
অ্যাডাম

আপনাকে 10 কে @ নীল পেয়েছি, গল্ফগুলিকে ভালবাসি!
নিকক নিউম্যান

1
নিখুঁতিনিউম্যান উহু! ধন্যবাদ!
নীল

5

জেলি, 16 বাইট

ḤRµDIASµÐḟµạ³ỤḢị

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

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

ḤRµDIASµÐḟµạ³ỤḢị  Main link. Input: n

Ḥ                 Compute 2n.
 R                Yield [1, ..., 2n] or [0].
  µ               Begin a new, monadic chain. Argument: R (range)
   D              Convert to base 10.
    I             Compute all differences of consecutive decimal digits.
     A            Take the absolute values of the differences.
      S           Sum the absolute values.
       µÐḟ        Filter-false by the chain to the left.
          µ       Begin a new, monadic chain. Argument: L (lazy integers)
           ạ³     Take the absolute difference of each lazy integer and n (input).
             Ụ    Grade up; sort the indices of L by the absolute differences.
                  This is stable, so ties are broken by earlier occurrence and,
                  therefore, lower value.
              Ḣ   Head; retrieve the first index, corresponding to the lowest
                  absolute difference.
               ị  Retrieve the item of L at that index.

4

ওরাকল এসকিউএল 11.2, 200 বাইট

WITH v(i)AS(SELECT 0 FROM DUAL UNION ALL SELECT DECODE(SIGN(i),0,-1,-1,-i,-i-1)FROM v WHERE LENGTH(REGEXP_REPLACE(:1+i,'([0-9])\1+','\1'))>1)SELECT:1+MIN(i)KEEP(DENSE_RANK LAST ORDER BY rownum)FROM v;

আন golfed

WITH v(i) AS
(
  SELECT 0 FROM DUAL      -- Starts with 0
  UNION ALL
  SELECT DECODE(SIGN(i),0,-1,-1,-i,-i-1) -- Increments i, alternating between negatives and positives
  FROM   v 
  WHERE  LENGTH(REGEXP_REPLACE(:1+i,'([0-9])\1+','\1'))>1  -- Stop when the numbers is composed of only one digit
)
SELECT :1+MIN(i)KEEP(DENSE_RANK LAST ORDER BY rownum) FROM v;

3

পাইথ - 26 বাইট

এই উত্তরটি সর্বদা কোনও টাইয়ের মধ্যে ক্ষুদ্রতম মানটি ফেরত দেয় না, তবে এটি চশমাগুলিতে নয়, সুতরাং 3 বাইটের জন্য স্থির স্পষ্টতার অপেক্ষায়

hSh.g.a-kQsmsM*RdjkUTtBl`Q

টেস্ট স্যুট


3

পাইথ, 16 বাইট

haDQsM*M*`MTSl`Q

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

haDQsM*M*`MTSl`Q   implicit: Q = input number
              `Q   convert Q to a string
             l     take the length
            S      create the list [1, 2, ..., len(str(Q))]
         `MT       create the list ["0", "1", "2", "3", ..., "9"]
        *          create every combination of these two lists:
                   [[1, "0"], [1, "1"], [1, "2"], ..., [len(str(Q)), "9"]]
      *M           repeat the second char of each pair according to the number:
                   ["0", "1", "2", ..., "9...9"]
    sM             convert each string to a number [0, 1, 2, ..., 9...9]
  D                order these numbers by:
 a Q                  their absolute difference with Q
h                  print the first one

3

এমএটিএল , 25 বাইট

2*:"@Vt!=?@]]N$vtG-|4#X<)

ব্রুটে ফোর্স ব্যবহার করে, তাই এটি সংখ্যক সময়ের জন্য সময় নিতে পারে।

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

2*:       % range [1,2,...,2*N], where is input
"         % for each number in that range
  @V      %   push that number, convert to string
  t!=     %   test all pair-wise combinations of digits for equality
  ?       %   if they are all equal
    @     %     push number: it's a valid candidate
  ]       %   end if
]         % end for each
N$v       % column array of all stack contents, that is, all candidate numbers
t         % duplicate
G-|       % absolute difference of each candidate with respect to input
4#X<      % arg min
)         % index into candidate array to obtain the minimizer. Implicitly display

3

পার্ল, 32

নীল দ্বারা সুন্দর জাভাস্ক্রিপ্ট সমাধান উপর ভিত্তি করে।

$_=0|1/9*~-sprintf"%.e",$_*9+4.1

ব্যর্থ হতে শুরু করে 5e15


2

গণিত, 122 বাইট

f@x_:=Last@Sort[Flatten@Table[y*z,{y,1,9},{z,{FromDigits@Table[1,10~Log~x+1-Log[10,1055555]~Mod~1]}}],Abs[x-#]>Abs[x-#2]&]

X নামক ফাংশন


2

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

n=>eval(`for(i=a=0;i<=n;a=i%10?a:++i)p=i,i+=a;n-p>i-n?i:p`)

পুনরাবৃত্তির সমাধান (56 বাইট)

এটি কিছুটা খাটো তবে এর জন্য কাজ করে না n > 1111111110কারণ সর্বাধিক কল স্ট্যাকের আকার ছাড়িয়ে গেছে, তাই এটি প্রযুক্তিগতভাবে অবৈধ।

f=(n,p,a,i=0)=>n<i?n-p>i-n?i:p:f(n,i,(i-=~a)%10?a:i++,i)

ব্যাখ্যা

প্রতিটি অলস সংখ্যার মধ্য দিয়ে আইট্রেট করে যতক্ষণ না এটি প্রথমটির চেয়ে বেশি হয় n, তারপরে nফলাফল নির্ধারণের জন্য এটি এবং পূর্ববর্তী সংখ্যার সাথে তুলনা করে।

var solution =

n=>
  eval(`           // eval enables for loop without {} or return
    for(
      i=a=0;       // initialise i and a to 0
      i<=n;        // loop until i > n, '<=' saves having to declare p above
      a=i%10?a:++i // a = amount to increment i each iteration, if i % 10 == 0 (eg.
    )              //     99 + 11 = 110), increment i and set a to i (both become 111)
      p=i,         // set p before incrementing i
      i+=a;        // add the increment amount to i
    n-p>i-n?i:p    // return the closer value of i or p
  `)
N = <input type="number" oninput="R.textContent=solution(+this.value)"><pre id="R"></pre>


আপনার সমাধানটি অনুমোদনের জন্য আমি উপরের সীমাটি নীচে নামিয়েছি।
অ্যাডাম

2

জাপট , 18 বাইট

9*U+4 rApUs l¹/9|0

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

উপর ভিত্তি করে নিল এর কৌশল

অ-প্রতিযোগিতামূলক সমাধান :

*9+4 h /9|0

1
এবং এখন আপনি করতে পারেন *9+4 h /9|0:-)
ইটিএইচ প্রোডাকশনগুলি

@ ইথ প্রডাকশন ধন্যবাদ! আমি জাপট এর সাথে অনেক মজা করছি :)
অলিভার

1

05 এ বি 1 ই , 20 বাইট

9Ývy7L×})˜ïD¹-ÄWQÏ{¬

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

9Ý                   # Push 0..9
  vy7L×})˜           # For each digit, 0-9, push 1-7 copies of that number.
          ïD         # Convert to integers, dupe the list.
            ¹        # Push original input (n).
             -Ä      # Push absolute differences.
               WQ    # Get min, push 1 for min indices.
                 Ï{¬ # Push indices from original array that are the min, sort, take first.

99 অবশ্যই 111 এর চেয়ে বেশি অলস, কারণ এটিতে কেবল দুটি বোতাম টিপুন।
অ্যাডম

@ অ্যাডম মোটামুটি, হেড কমান্ড যুক্ত।
যাদু অক্টোপাস উরান

1

গণিত, 56 বাইট

Min@Nearest[##&@@@Table[d(10^n-1)/9,{n,0,6},{d,0,9}],#]&

প্রথম যুক্তি দিয়ে খাঁটি ফাংশন #, ইনপুট পর্যন্ত কাজ করে 10^6

একটি nonnegative পূর্ণসংখ্যা nএবং একটি সংখ্যার জন্য d, 10^n-1 = 99...9( 9পুনরাবৃত্তি nবার), সুতরাং d(10^n-1)/9 = dd...d( dপুনরাবৃত্তি nবার)। একটি তৈরি করে Tableমান এর 0 <= n <= 6এবং 0 <= d <= 9তারপর, টেবিল চ্যাপ্টা, উপাদানের তালিকা খুঁজে বের করে Nearestকরতে #এবং লাগে Min

আমি বিশ্বাস করি যে এই সংস্করণটি নির্বিচারে বড় পূর্ণসংখ্যার জন্য কাজ করবে:

Min@Nearest[##&@@@Table[d(10^n-1)/9,{n,0,IntegerLength@#},{d,0,9}],#]&
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.