वर्ग तक के योग


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। इस कारण yसे 3 से बड़ा होना चाहिए और आप इसे अनदेखा कर सकते हैं।

पुनरावृत्तियों की गणना के लिए पहला या अंतिम मान होना चाहिए

यह सबसे कम बाइट-काउंट जीत है।


जवाब में चरणों की संख्या की आवश्यकता समस्या के लिए एक अनावश्यक जोड़ की तरह लगता है । मेरे समाधान के लिए 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

जावास्क्रिप्ट (ईएस 6), 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

MATL, 25 21 बाइट्स

4 बाइट्स @Luis की बदौलत बच गए

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

@LuisMendo फिक्स्ड!
स्वेवर

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),#]&
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.