अंतरिक्ष को बचाने के लिए पूर्णांक को मोड़ो!


20

पागल गणितज्ञ संख्या का एक विस्तृत संग्रह का मालिक है, और इसलिए उसने जो स्थान छोड़ा है वह काफी सीमित है। कुछ को बचाने के लिए, उसे अपने पूर्णांक को मोड़ना होगा, लेकिन दुर्भाग्य से वह वास्तव में आलसी है। आपका कार्य, यदि आप उसकी सहायता करना चाहते हैं, तो एक फ़ंक्शन / प्रोग्राम बनाना है जो हमारे नंबर के लिए एक पूर्णांक पूर्णांक बनाता है।

पूर्णांक कैसे मोड़ें?

यदि यह अपने अंकों के योग से समान रूप से विभाज्य है, तो इसे अपने अंकों के योग से विभाजित करें। यदि यह उस आवश्यकता को पूरा नहीं करता है, तो इसके अंकों के योग से विभाजित होने पर इसका शेष भाग लें। परिणाम आने तक प्रक्रिया को दोहराएं 1। मुड़ा पूर्णांक आपके द्वारा किए जाने वाले संचालन की संख्या है। एक उदाहरण लेते हैं (कहते हैं 1782):

  1. इसके अंकों का योग प्राप्त करें 1 + 7 + 8 + 2 = 18:। 1782द्वारा समान रूप से विभाज्य है 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
१> -> २
72 -> 2
152790 -> 2
152 -> 3
666 -> 3
777 -> 3
2010 -> 3
898786854 -> 4

यहां एक कार्यक्रम है जो आपको प्रक्रिया की कल्पना करने और अधिक परीक्षण मामलों की कोशिश करने देता है।


यह , इसलिए प्रत्येक भाषा में सबसे छोटा कोड (बाइट्स में बनाया गया) जीतता है!


इस चुनौती से प्रेरित है , हालांकि यह पहली बार में संबंधित नहीं लग सकता है।
मिस्टर एक्सकोडर

3
यह एक स्टॉपगैप समाधान के रूप में काम करेगा, लेकिन लंबी अवधि में, गणितज्ञ को वास्तव में हिल्बर्ट के होटलों में से एक खरीदने पर विचार करना चाहिए । आप हमेशा उनमें से एक में कुछ अप्रयुक्त कमरे पा सकते हैं।
रे

जबकि 8987868546एक वैध इनपुट है, यह आपके परीक्षण उपकरण को तोड़ देगा, और उत्तर के कई (यदि सभी नहीं) भी ...
मिशा

@MischaBehrend आपका उदाहरण एक वैध इनपुट नहीं है। मुझे लगता है कि आपने मेरा आखिरी टेस्ट केस मिसकाइड कर दिया। मान्य इनपुट था 898786854, न कि 8987868546(आपने अंत में जोड़ा है 6)
श्री एक्सकोडर

nvm ... पूरे पहले नियम को पढ़ना चाहिए ... इसे यहां छोड़ना इसलिए आपको पता है कि मैंने क्यों सोचा कि यह वैध है: यह कोई गलती नहीं थी ... मैंने इन लिपियों का परीक्षण करने के लिए इसे जानबूझकर बदल दिया ... और नियमों को पढ़ना है एक मान्य इनपुट। सभी अंकों का योग 8987868546 1 नहीं है ( नियम 1 मिले ) और 1 से8987868546 अधिक सकारात्मक पूर्णांक है ( नियम 2 मिले )।
मिशा

जवाबों:


6

05AB1E , 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 बाइट्स

-1 पूरी तरह से धन्यवाद के लिए
-1 श्री एक्सकोडर
के लिए धन्यवाद -4 रेफ़ू के लिए धन्यवाद

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

इसे ऑनलाइन आज़माएं!




1
57 बाइट्स इसके अलावा यह मेरा अपना जवाब पहली बार में बनाने के लिए माफी है। यह एक टिप्पणी के रूप में अधिक समझ में आता है
reffu

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: इसे ऑनलाइन आज़माएं!
लकोनी

@ लिकोनी वाह, यह काफी सुधार है! कृपया इसे एक अलग उत्तर के रूप में पोस्ट करें; यह मेरा से काफी अलग है। BTW: मैं से छुटकारा पाने के लिए एक चाल की तलाश कर रहा था where। मैं भविष्य में इसका उपयोग करूंगा। :)
क्रिस्टियन लुपस्कू

sum[read[d]|d<-show n]की बचत होती है एक बाइट
nimi

5

जावास्क्रिप्ट (ईएस 6), 66 58 51 49 बाइट्स

एक पूर्णांक के रूप में इनपुट लेता है। जब यह किसी भी संख्या के अंकों को जोड़ता है, तो यह ओवरफ्लो त्रुटि को लौटाता falseहै 0या 1फेंकता है 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`+`)?
जस्टिन मेरिनर

मैं वास्तव में, @JustinMariner कर सकता था - आपने मुझे इसे निहारा! धन्यवाद :)
झबरा

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 बाइट्स

-3 बाइट्स @ शुग्गी को धन्यवाद।
-2 बाइट्स @ETHproductions की बदौलत


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

इसे ऑनलाइन आज़माएं!



1
वास्तव में, आप एक और दो बाइट्स को बचाने के s_¬लिए बदल सकते हैं ì:-)
ETHproductions

@ETHproductions ओह, यह वास्तव में अच्छा है, धन्यवाद!
जस्टिन मेरिनर


2

गणितज्ञ, 73 बाइट्स

(t=#;For[r=0,t>1,r++,If[(s=Mod[t,g=Tr@IntegerDigits@t])<1,t=t/g,t=s]];r)&

==0से बदला जा सकता है <1?
श्री एक्सकोडर

@ Mr.Xcoder हाँ, बिल्कुल! मैंने एक सॉर्टर संस्करण बनाया ...
J42161217

2

PHP, 68 + 1 बाइट्स

एकतरफा उत्पादन:

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या इसे आज़माएं


एल्विस ऑपरेटर को PHP 5.3 या बाद के संस्करण की आवश्यकता होती है। पुराने पीएचपी के लिए, की जगह ?:के साथ ?$n%$s:(5 बाइट्स)।





1

जेली , 12 बाइट्स

dDS$Ṛȯ/µÐĿL’

इसे ऑनलाइन आज़माएं!


दिलचस्प दृष्टिकोण! अब हम जोनाथन की प्रतीक्षा कर रहे हैं: पी
श्री एक्सकोडर

@ Mr.Xcoder मुझे ऐसा नहीं लगता कि इस बार :)
आउटगोल्फर

और न ही मैं, यह एक मजाक था :)
श्री एक्सकोडर


1

पर्ल, 71 बाइट्स, 64 बाइट्स, 63 बाइट्स

-pl

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

इसे ऑनलाइन आज़माएं

EDIT: 7 बाइट्स को बचाया, Xcali की टिप्पणी के लिए धन्यवाद

-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जब तक बंद हो सकता है। इसके अलावा, आप की जरूरत नहीं है -l। एक रन में कई इनपुट लेना आवश्यक नहीं है।
Xcali

1

Dyalog एपीएल, 36 बाइट्स

{x←+/⍎¨⍕⍵⋄1=⍵:00=x|⍵:1+∇⍵÷x1+∇x|⍵}

इसे ऑनलाइन आज़माएं!

कैसे?

{
   x←+/⍎¨⍕⍵       x = digit sum
   1=⍵:0          if arg = 1: bye
   0=x|⍵:1+∇⍵÷x   if arg divisible by x: recurse with arg/x
   1+∇x|⍵         recurse with arg mod x
}

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') के रूप में दिया जाना चाहिए।

फ़ंक्शन काम करता है जबकि लूपिंग और इंक्रीमेंटिंग डी। 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


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.