স্থান বাঁচাতে পূর্ণসংখ্যা ভাঁজ করুন!


20

পাগল গণিতবিদ সংখ্যার বিস্তৃত সংগ্রহের মালিক এবং তাই তিনি যে স্থানটি রেখে গেছেন তা বেশ সীমাবদ্ধ। কিছু বাঁচাতে, তাকে অবশ্যই তার পূর্ণসংখ্যাগুলি ভাঁজ করতে হবে, তবে দুর্ভাগ্যক্রমে তিনি সত্যই অলস। আপনার কাজটি, যদি আপনি তাকে সহায়তা করতে চান তবে একটি ফাংশন / প্রোগ্রাম তৈরি করা যা আমাদের নম্বর পাগলের জন্য প্রদত্ত ইতিবাচক পূর্ণসংখ্যাকে ভাঁজ করে।

একটি পূর্ণসংখ্যা ভাঁজ কিভাবে?

যদি এটির অঙ্কগুলির যোগফল দ্বারা সমানভাবে বিভাজ্য হয় তবে এটির অঙ্কগুলির যোগফল দিয়ে ভাগ করুন। যদি এটি প্রয়োজনীয়তাটি পূরণ করে না, তার অঙ্কগুলির যোগফলের সাথে ভাগ করে নেওয়ার সময় তার অবশিষ্ট অংশটি নিন। ফলাফল পৌঁছানোর আগ পর্যন্ত প্রক্রিয়াটি পুনরাবৃত্তি করুন 1। ভাঁজ পূর্ণসংখ্যা হল আপনাকে সম্পাদন করা সংখ্যার সংখ্যা। আসুন একটি উদাহরণ নেওয়া যাক (বলুন 1782):

  1. তার ডিজিটের যোগফল পান: 1 + 7 + 8 + 2 = 181782দ্বারা সমানভাবে বিভাজ্য 18, তাই পরবর্তী সংখ্যাটি 1782 / 18 = 99

  2. 99সমানভাবে দ্বারা বিভাজ্য নয় 9 + 9 = 18, অত আমরা বাকি নেওয়া: 99 % 18 = 9

  3. 9স্পষ্টত দিয়ে বিভাজ্য 9তাই আমরা এটি বিভক্ত করা এবং প্রাপ্ত, 1

ফলাফলটি 3, কারণ পৌঁছতে 3 টি অপারেশন প্রয়োজন ছিল 1

বিধি এবং চশমা

  • কিছু পূর্ণসংখ্যার সমান অঙ্কের যোগফল থাকতে পারে 1, যেমন 10বা 100। আপনার প্রোগ্রামে এ জাতীয় কেসগুলি পরিচালনা করার দরকার নেই। এর অর্থ, আপনাকে গ্যারান্টি দেওয়া হবে যে ইনপুট হিসাবে প্রদত্ত পূর্ণসংখ্যার সাথে অঙ্কের সমষ্টি সমান হয় 1না এবং প্রদত্ত পূর্ণসংখ্যার সাথে কোনও ক্রিয়াকলাপের ফলে এমন সংখ্যার ফলাফল হয় না যার সংখ্যাগুলির যোগফল 1( 1নিজেই বাদে , যা " লক্ষ্য ")। উদাহরণস্বরূপ, যদি আপনি গ্রহণ করবে না 10বা 20ইনপুট হিসাবে।

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

  • ডিফল্ট লুফোলস প্রয়োগ হয়।

  • আপনি ইনপুট নিতে পারেন এবং যে কোনও মানক আউটপুট সরবরাহ করতে পারেন ।


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

ইনপুট -> আউটপুট

2 -> 1
5 -> 1
9 -> 1
18 -> 2
72 -> 2
152790 -> 2
152 -> 3
666 -> 3
777 -> 3
2010 -> 3
898786854 -> 4

এখানে এমন একটি প্রোগ্রাম যা আপনাকে প্রক্রিয়াটি কল্পনা করতে এবং আরও পরীক্ষার কেসগুলি চেষ্টা করে।


এটি , তাই প্রতিটি ভাষায় সংক্ষিপ্ততম কোড (বাইটে স্কোর) জয়!


এই চ্যালেঞ্জ দ্বারা অনুপ্রাণিত , যদিও এটি প্রথমে সম্পর্কিত বলে মনে হচ্ছে না।
মিঃ এক্সকডার

3
এটি স্টপগ্যাপ সমাধান হিসাবে কাজ করবে, তবে দীর্ঘমেয়াদে গণিতবিদকে সত্যই হিলবার্টের একটি হোটেল কেনার বিষয়টি বিবেচনা করা উচিত । এর মধ্যে একটিতে আপনি সর্বদা কিছু অব্যবহৃত ঘর পেতে পারেন।
রায়

যখন 8987868546একটি বৈধ ইনপুট, এটি আপনার পরীক্ষার সরঞ্জামটি এবং উত্তরগুলির অনেকগুলি (যদি না হয় তবে) ভেঙে দেবে ...
Mischa

@ মিশাবিহরেন্ড আপনার উদাহরণটি বৈধ ইনপুট নয়। আমি মনে করি আপনি আমার শেষ পরীক্ষার কেসটি অনুলিপি করেছেন। বৈধ ইনপুটটি ছিল 898786854না, 8987868546(আপনি 6শেষে একটি যোগ করেছেন)
মিঃ এক্সকোডার

এনভিএম ... পুরো প্রথম নিয়মটি পড়া উচিত ... এটি এখানে রেখে দেওয়া উচিত যাতে আপনি জানেন কেন আমি এটি বৈধ বলে মনে করেছি: এটি কোনও ভুল ছিল না ... আমি এই স্ক্রিপ্টগুলি পরীক্ষা করার ইচ্ছাকৃতভাবে এটি পরিবর্তন করেছি ... এবং এটি নিয়মগুলি পড়ছি হয় একটি বৈধ ইনপুট। সমস্ত সংখ্যার যোগফল 8987868546 1 ( বিধি 1 পূরণ করা হয়নি ) এবং 89878685461 ( বিধি 2 পূরণ ) এর চেয়ে ধনাত্মক পূর্ণসংখ্যা ।
মিশা

উত্তর:


6

05 এ বি 1 ই , 13 12 বাইট

[¼DSO‰0Kθ©#®

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

ব্যাখ্যা

[               # start loop
 ¼              # increment counter
  D             # duplicate current value
   SO           # sum the digits in the copy
     ‰          # divmod the current value by its digit-sum
      0K        # remove 0 from the resulting list
        θ       # pop the last element
         ©      # store a copy in register
          #     # if the current value is 1, break
           ®    # push the copy from register
                # implicitly output counter

6

পাইথন 2 , 63 57 বাইট

-১ পুরোপুরি মানবকে
ধন্যবাদ -১ মিঃ এক্সকোডারকে
ধন্যবাদ -4 রেফুকে ধন্যবাদ

def f(n):a=sum(map(int,`n`));return n>1and-~f(n%a or n/a)

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




1
57 বাইট এছাড়াও প্রথমে আমার নিজের উত্তরটি তৈরি করার জন্য দুঃখিত। এটি একটি মন্তব্য হিসাবে আরও বোধ করে
রেফু

5

হাস্কেল, 85 78 বাইট

f 1=0
f n|r<1=1+f(n`div`s)|1<2=1+f r where s=sum(read.pure<$>show n);r=n`rem`s

ব্রুস ফোর্টের ধন্যবাদ 7 বাইট সংরক্ষণ করা।

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


এটিকে ব্যবহার করে divModএবং ফেলে দিয়ে আরও কিছু বাইট সংরক্ষণ করুন where: এটি অনলাইনে চেষ্টা করুন!
লাইকনি

@ লাইকনি বাহ, এটি বেশ উন্নতি! এটি আলাদা উত্তর হিসাবে পোস্ট করুন; এটা আমার থেকে যথেষ্ট আলাদা। বিটিডাব্লু: আমি এর থেকে মুক্তি পাওয়ার জন্য একটি কৌশল খুঁজছিলাম where। ভবিষ্যতে আমি এটি ব্যবহার করব। :)
ক্রিশ্চিয়ান লুপাস্কু

sum[read[d]|d<-show n]বাইট সংরক্ষণ করুন
নিমি

5

জাভাস্ক্রিপ্ট (ES6), 66 58 51 49 বাইট

পূর্ণসংখ্যা হিসাবে ইনপুট নেয়। রিটার্নসfalse জন্য 0অথবা 1এবং একটি ওভারফ্লো এরর ছোঁড়ার যখন এটি কোন সংখ্যা যার সংখ্যা পর্যন্ত যোগ encounters 1

f=n=>n>1&&f(n%(x=eval([...""+n].join`+`))||n/x)+1

এটা পরীক্ষা করো

o.innerText=(

f=n=>n>1&&f(n%(x=eval([...""+n].join`+`))||n/x)+1

)(i.value=898786854);oninput=_=>o.innerText=f(+i.value)
<input id=i type=number><pre id=o>


1
আপনি অঙ্কগুলি সংযুক্ত করে কিছু বাইট সংরক্ষণ করতে পারেন eval(array.join`+`)?
জাস্টিন মেরিনার

আমি সত্যিই, @ জাস্টিনমারিনারকে করতে পারি - আপনি আমাকে এটিতে নিমজ্জিত করেছেন! ধন্যবাদ :)
শেগি

4

হুশ , 12 বাইট

←€1¡Ṡ§|÷%oΣd

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

ব্যাখ্যা

←€1¡Ṡ§|÷%oΣd  Implicit input, e.g. n=1782
    Ṡ§|÷%oΣd  This part defines the transformation.
         oΣ   Sum of
           d  digits: s=18
    Ṡ   %     n mod s: 0
     §|       or (take this branch if last result was 0)
       ÷      n divided by s: 99
   ¡          Iterate the transformation: [1782,99,9,1,1,1,...
 €1           Index of 1 (1-based): 4
←             Decrement: 3
              Print implicitly.


3

জাপট , 22 19 17 বাইট

-৩ বাইট @ শ্যাগি ধন্যবাদ।
-2 বাইটস @ETH প্রডাকশনগুলিতে ধন্যবাদ


ìx
>1©1+ßU%VªU/V

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



1
আসলে, আপনি পরিবর্তন করতে পারেন s_¬থেকে ìদুই বাইট :-) সংরক্ষণ করতে
ETHproductions

@ ইথ প্রডাকশনস ওহ, এটি সত্যিই দুর্দান্ত, ধন্যবাদ!
জাস্টিন মেরিনার



2

পিএইচপি, 68 + 1 বাইট

unary আউটপুট:

for($n=$argn;$n>1;$n=$n%($s=array_sum(str_split($n)))?:$n/$s)echo 1;

দশমিক আউটপুট, 73 + 1 বাইট:

for($n=$argn;$n>1;$i++)$n=$n%($s=array_sum(str_split($n)))?:$n/$s;echo$i;

পাইপ হিসাবে চালনা করুন-nR বা এটি অনলাইনে চেষ্টা করুন


এলভিস অপারেটরের পিএইচপি 5.3 বা তার পরে প্রয়োজন। পুরানো পিএইচপি-র জন্য, (+5 বাইট) ?:দিয়ে প্রতিস্থাপন করুন ?$n%$s:





1

আকর্ষণীয় পদ্ধতির! এখন আমরা জোনাথনের জন্য অপেক্ষা করছি: পি
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার আমি এবারও ভাবি না :)
এরিক দ্য আউটগল্ফার

আমিও না, এটি একটি রসিকতা ছিল :)
মিঃ এক্সকডার


1

পার্ল, 71 বাইট, 64 বাইট, 63 বাইট

-pl

$c=0;while($_>1){$s=0;$s+=$_ for/./g;$_=$_%$s?$_%$s:$_/$s;++$c};$_=$c

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

সম্পাদনা: এক্স্কালির মন্তব্যে ধন্যবাদ 7 টি বাইট সংরক্ষণ করা হয়েছে

-p

while($_>1){$s=0;$s+=$_ for/./g;$_=$_%$s?$_%$s:$_/$s;++$c}$_=$c

সম্পাদনা: 5.14 নন ধ্বংসাত্মক প্রতিস্থাপনের জন্য /// আর

-pl

while($_>1){$s=eval s/\B/+/gr;$_=$_%$s?$_%$s:$_/$s;++$c}$_=$c

-plপরিবর্তে শীর্ষটি কি কমান্ড-লাইন পতাকা হিসাবে গণ্য হবে?
এরিক দ্য আউটগলফার

হ্যাঁ তারা পার্ল বিকল্পগুলি
নাহুয়েল ফিউইলুল

আপনার এই পোস্ট-pl অনুসারে পতাকা গণনা করা উচিত ।
এরিক আউটগল্ফার

আমি pl বিকল্পগুলির জন্য 69 বাইট +2 গণনা করেছি, এটি কি সঠিক?
নাহুয়েল ফিউইলুল

আপনি এটি কিছুটা গল্ফ করতে পারেন। $cআরম্ভ করার দরকার নেই। এটি শুরু হবে undefযা 0 হয়, সেমিকোলন পরে ক্লোজারটি যেতে পারে। এছাড়াও, আপনার দরকার নেই -l। এক রানে একাধিক ইনপুট নেওয়ার প্রয়োজন হয় না।
এক্সকালি


1

গাইয়া , 13 বাইট

-@{:ΣZ¤∨)‡}°\

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

ব্যাখ্যা

-              Push -1 (this will be the counter)
 @             Push input (the starting number)
  {:ΣZ¤∨)‡}°   Repeat this block until the results of 2 consecutive runs are the same:
   :            Copy the number
    Σ           Digital sum
     Z          Divmod number by digital sum
      ¤         Swap
       ∨        Logical or: left-most non-zero out of (number mod sum, number div sum)
        )‡      Increment the counter
            \  Delete the final 1, implicitly print the counter

1

মতলব, 150 বাইট

function[d]=X(x) 
d=0;while ~strcmp(x,'1')z='sum(str2num(x(:)))';a=eval(['rem(',x,',',z,')']);y=num2str(a*(a>0)+eval([x,'/',z])*(a==0));x=y;d=d+1;end

এক্স ('152') এর মতো স্ট্রিং হিসাবে ফাংশনটিতে ইনপুট দেওয়া উচিত।

লুপিং এবং ইনক্রিমেন্টিংয়ের সময় ফাংশনটি কাজ করে d। x=y;লাইন, পড়া এবং একই সময়ে একটি পরিবর্তনশীল মান ওভাররাইট বের করার চেষ্টা দৃশ্যত মতলব একজন ত্রুটি, যা আমাকে একটি নতুন অন্যতম এড়াতে প্রয়োজন ছিল।

Ungolfed:

function[d]=X(x) 
d=0;
while ~strcmp(x,'1')
    z='sum(str2num(x(:)))';
    a=eval(['rem(',x,',',z,')']);
    y=num2str(a*(a>0)+eval([x,'/',z])*(a==0));
    x=y;
    d=d+1;
end


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