স্কোয়ার পর্যন্ত যোগ অঙ্কগুলি


11

প্রদত্ত হ'ল যে কোনও পূর্ণসংখ্য x> 0 এবং যে কোনও বেস y> 3।

  1. X এর সমস্ত সংখ্যার যোগফল (সেট বেজে লেখা থাকলে)।
  2. এটিকে সর্বোচ্চ সম্ভাব্য সংখ্যায় (সর্বদা হয় base -1) দিয়ে গুণ করুন।
  3. এই মানটি না হওয়া পর্যন্ত পুনরাবৃত্তি করুন (y - 1) ^ 2

অনুসন্ধান করা হল পুনরাবৃত্তির গণনা এবং পদক্ষেপগুলি।

উদাহরণ 1:

x= 739
y= 7
searched: (7 - 1) ^ 2 = 36

based: (b7)2104
sum: (dec)7
mul: (dec)42

based: (b7)60
sum: (dec)6
mul: (dec)36

2 steps needed -> answer is [2, 739, 42, 36] or [739, 42, 36, 2]

উদাহরণ 2:

x = 1712
y = 19
s: 324

step1: 1712 -> 360
step2:  360 -> 648
step3:  648 -> 324

3 steps needed -> answer is [3, 1712, 360, 648, 324] or [1712, 360, 648, 324, 3]

বিশেষ:
কিছু ক্ষেত্রে (3 টি বেসের সাথে কিছু সংমিশ্রণ) আপনি (y - 1) ^ 2পছন্দ করতে x = 53এবং পছন্দ করতে পারবেন না y = 3। এই কারণে y3 টির চেয়ে বড় হওয়া দরকার এবং আপনি এটিকে এড়িয়ে যেতে পারেন।

পুনরাবৃত্তির গণনাটি প্রথম বা শেষ মান হওয়া দরকার

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


উত্তরের পদক্ষেপের সংখ্যা প্রয়োজন বলে মনে হচ্ছে সমস্যাটি একটি অপ্রয়োজনীয় সংযোজন । আমার সমাধান 21 বাইট কি একটি তালিকা দৈর্ঘ্য খুঁজে পেতে এবং বিয়োগ 1. টাকা করতে যোগ করার জন্য ছিল
ngenisis

@ এনজেনিসিস কেবল আউটপুট ক্রম নিয়ে চলেছে, তবে পদ্ধতিটিকে উপেক্ষা করে (অ্যারে, স্ট্যাক, ডিলিম। স্ট্রিং, একাধিক স্ট্রিং ....)। 2 টি পৃথক জিনিসের উপর নজর রাখতে (চূড়ান্ত মান এবং গণনা) "অন্ধ" মানগুলি সংগ্রহ করা (কম বেশি) এড়ানো এবং আমার চোখে একটি ভাল সংযোজন। হতে পারে একটি পৃথক পদ্ধতির গণনায় আরও 5 বাইটের প্রয়োজন হবে তবে গণনার অংশে 8 টি সংরক্ষণ করুন (কেবল এখানে এলোমেলো সংখ্যা)।
ডিস্ক রিচেল

উত্তর:


4

জেলি , 14 13 বাইট

লুপ হিসাবে প্রিন্ট করে -1 বাইট ( একটি চেইন পৃথকীকরণ µএবং কন্টেন্টেশন প্রতিস্থাপন ;)

Ṅb⁹S×⁹’¤µÐĿL’

TryItOnline!

কিভাবে?

Ṅb⁹S×⁹’¤µÐĿL’ - Main link: x, y
        µÐĿ   - loop monadically until results are no longer unique and collect
Ṅ             - print z (initially x), then result of previous loop and return z
  ⁹           -     right argument (y, even though monadic)
 b            -     left to base right
   S          -     sum (the result was a list of base y digits)
       ¤      -     nilad followed by link(s) as a nilad
     ⁹’       -         y decremented
    ×         -     multiply
           L  - length(z)
            ’ - decrement
              - implicit print

বিকল্প 13 বাইটার প্রতিটি ইনপুট লুপ প্লাস একটি লাইন ফিড ( ) এ মুদ্রণ করে এবং অবশেষে জড়িত ফলাফলগুলির হ্রাসকৃত গণনা মুদ্রণ করে, একটি এককীয় চেইন পৃথকীকরণ ( µ) এবং সংলগ্নকরণ ( ;) এর প্রয়োজনীয়তা অপসারণ করে ।


1
কোনও সেট "আউটপুট ফর্ম্যাটিং" অনুরোধ করা হয়নি। অর্ডার জরিমানা হওয়া পর্যন্ত একাধিক আউটপুট গণনা করা হবে। এইভাবে, 13 বাইট উত্তরটি বৈধ।
ডিস্ক রিচেল

শীতল, আমি নিশ্চিত ছিলাম না, আমাকে জানানোর জন্য ধন্যবাদ!
জোনাথন অ্যালান

4

পার্ল 6 , 60 বাইট

{$/=[$^x,*.polymod($^y xx*).sum*($y-1)...($y-1)²];$/-1,|$/}

সম্প্রসারিত:

{    # bare block lambda with placeholder parameters 「$x」 「$y」

  $/ = [          # store in 「$/」 ( so that we don't have to declare it )

    # generate a sequence

    $^x,          # declare first parameter, and seed sequence generator

    # Whatever lambda

    *\            # the parameter to this lambda

    .polymod(     # broken down with a list of moduli

      $^y         # declare second parameter of the outer block lambda
      xx *        # an infinite list of copies of it

    )
    .sum
    *
    ( $y - 1 )

    # end of Whatever lambda

    ...           # repeat until it reaches

    ( $y - 1 
  ];

  # returns
  $/ - 1,         # count of values minus one
  |$/             # Slip 「|」 the list into the result
}

ব্যবহার:

# store it in the lexical namespace so that it is easier to understand
my &code = {$/=[$^x,*.polymod($^y xx*).sum*($y-1)...($y-1)²];$/-1,|$/}

say code  739,  7; # (2 739 42 36)
say code 1712, 19; # (3 1712 360 648 324)

4

সি, 116 113 বাইট

প্রতিবার বর্গাকার গণনার জন্য -3 বাইট

s,t,i;f(x,y){s=y-(i=1);while(x-s*s){t=0;++i;printf("%d ",x);while(x)t+=x%y,x/=y;x=t*y-t;}printf("%d %d ",x,i-1);}

অবরুদ্ধ এবং ব্যবহার:

s,t,i;
f(x,y){
 s=y-(i=1);
 while(x-s*s){
  t=0;
  ++i;
  printf("%d ",x);
  while(x)
   t+=x%y,    //add the base y digit
   x/=y;      //shift x to the right by base y
  x=t*y-t;
 }
 printf("%d %d ",x,i-1);
}

main(){
 f(739,7);puts("");
 f(1712,19);puts("");
}

4

জাভাস্ক্রিপ্ট (ES6), 97 91 84 82 বাইট

f=(n,b,k=1,c=b-1)=>[n,(s=(B=n=>n%b*c+(n>b&&B(n/b|0)))(n))-c*c?f(s,b,k+1):[s,k]]+''

পরীক্ষার মামলা


4

জেলি , 16 বাইট

আমার ধারণা আমি এটি যেভাবেই পোস্ট করব, যদিও এটি লেখার সময় মারধর করা হয়েছিল, কারণ এটি একটি উল্লেখযোগ্য আলাদা অ্যালগরিদম এবং এটি লিখতে আগ্রহী। ( ÐĿডক্সগুলি থেকে কীভাবে বিশ্লেষণ করা হয়েছিল এবং এটি ছেড়ে দিতে হয়েছিল তা আমি বুঝতে পারি না, এটি জেনেও সম্ভবত এটির চেয়ে একটি সংক্ষিপ্ত সমাধান হতে পারে))

ṄbS×⁹’¤ß<’¥n⁸$?‘

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

ব্যাখ্যা:

ṄbS×⁹’¤ß<’¥n⁸$?‘
Ṅ                 Output {the first argument} and a newline
 b                Convert to base {the second argument}
  S               Sum digits
    ⁹’¤           {the second argument} minus 1, parsed as a group
   ×              Multiply
           n⁸$    {the current value} ≠ {the first argument}, parsed as a group
              ?   If that's true:
       ß          then run the whole program recursively
        <’¥       else run (lambda a,b: (a<b)-1)
               ‘  Increment the result

ব্যবহারের <’¥মূলত একটি সংক্ষিপ্ত ভাবে যুগল (দুই আর্গুমেন্ট সহ লিঙ্ক) লিখতে হয় যে সবসময় আয় -1 (কারণ আমরা জানি উত্তর বেস চেয়ে ছোট হতে হবে না)। যে পুনরাবৃত্তভাবে চলমান এবং পুরো প্রোগ্রামটি পুনরাবৃত্তির মধ্যে নির্বাচন করা, কখন নির্ধারণ করতে দেয় যে কখন লুপিং বন্ধ করবে। তারপরে যখন পুনরাবৃত্তি শেষে স্ট্যাকটি অনাবৃত হয়, সেখানে কতগুলি পদক্ষেপ ছিল তা নির্ধারণ করার জন্য আমরা -1 বৃদ্ধি করে চলেছি।


2

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

4 লাইট সংরক্ষণ করেছেন লুইসকে ধন্যবাদ saved

XJx`tJYA!UsJq*tJqU-}@

অনলাইনে চেষ্টা করে দেখুন!

ব্যাখ্যা

XJ      % Implicitly grab the first input and store in clipboard J
x       % Delete this from the stack
`       % Do...while loop
  t     % Duplicate last element on stack (implicitly grabs second input)
  JYA   % Convert this number to the specified base
  !Us   % Sum the digits
  Jq*   % Multiply by the largest number in this base
  t     % Duplicate this value
  JqU   % Compute (base - 1) ^ 2
  -     % Subtract the two. Evaluates to TRUE if they are not equal
}       % When they are finally equal
@       % Push the number of iterations
        % Implicitly display the stack contents

@ লুইস মেন্ডো স্থির!
সোয়েভার

1

গণিত, 80 বাইট

(s=FixedPointList[x(#2-1)(Plus@@x~IntegerDigits~#2),#];s[[-1]]=Length@s-2;s)&

U+F4A1প্রতিনিধিত্ব করতে ব্যবহৃত ব্যক্তিগত ব্যবহারের অক্ষর \[Function]। উত্তরে পদক্ষেপের সংখ্যা প্রয়োজন না হলে এটি 60 বাইটে করা যেতে পারে:

Most@FixedPointList[x(#2-1)(Plus@@x~IntegerDigits~#2),#]&
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.