कितने घन बनाए जा सकते हैं


20

कार्य

आपका काम क्यूब्स के साथ एक संरचना का निर्माण करना है । क्यूब्स की मात्रा निम्नलिखित अनुक्रम का पालन करती है (नीचे -> शीर्ष)n

n3,(n1)3,(n2)3,...,13

इनपुट

संरचना की कुल मात्रा ( )।V

उत्पादन

मान ( ), यानी: क्यूब्स की कुल संख्या।n

V=n3+(n1)3+....+13

टिप्पणियाँ

  • इनपुट हमेशा एक पूर्णांक होगा।
  • कभी-कभी अनुक्रम का पालन करना संभव नहीं होता है, अर्थात: लिए विशिष्ट मान का प्रतिनिधित्व नहीं करता है । उस घटना में वापसी -1, या आपके चयन का एक मिथ्या मूल्य (स्थिरता हालांकि आवश्यक है)।Vn
  • यह प्रत्येक भाषा की जीत के लिए बाइट्स में इतना छोटा उत्तर है।
  • उपर्युक्त कारण के लिए कोई उत्तर स्वीकार नहीं किया जाएगा।

अनुरोध

  • साइट पर यह मेरी पहली चुनौती है जो मेरे साथ है, और क्षमा करें (और मुझे इसके बारे में बताएं) जो मैंने की थी।
  • कृपया एक लिंक प्रदान करें ताकि आपके कोड का परीक्षण किया जा सके।
  • यदि आप कर सकते हैं, तो कृपया अपना कोड कैसे काम करता है, इस पर स्पष्टीकरण लिखें, ताकि दूसरे आपके काम को समझ सकें और उसकी सराहना कर सकें।

उदाहरण

input  : 4183059834009
output : 2022

input  : 2391239120391902
output : -1

input  : 40539911473216
output : 3568

इसके लिंक के लिए @Arnauld को धन्यवाद:

यह अच्छा नहीं है

ओरिजिनल से लिंक : लिंक


2
यह एक अच्छी तरह से लिखित पहली चुनौती है। हालांकि, मैं दृढ़ता से कुछ परीक्षण मामलों को जोड़ने की सलाह दूंगा।
अरनौलड

1
@Arnauld, अभी इस पर काम कर रहा है और धन्यवाद :)
Any3nymous यूजर


क्या आप बता सकते हैं कि इनपुट 4183059834009आउटपुट कैसे देता है 2022?
DimChtz

2
@ SuperJedi224 AFAIK का डिफ़ॉल्ट नियम है, "जो भी आपकी भाषा का प्राकृतिक पूर्णांक प्रकार है", बेशक एक खामियों के लिए एक छोटी सी सीमा का उपयोग किए बिना - कम से कम जो मैंने अपने उत्तर में माना है: ओ
फेल्डमेन मैन

जवाबों:


19

जावास्क्रिप्ट (ईएस 7), 31 बाइट्स

एक सीधा सूत्र। 0अगर कोई समाधान नहीं है तो लौटाता है ।

v=>(r=(1+8*v**.5)**.5)%1?0:r>>1

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

कैसे?

पहले एन क्यूब्स का योग द्वारा दिया गया है:एसnn

एसn=(n(n+1)2)2=(n2+n2)2

(यह A000537 है । यह सूत्र आसानी से प्रेरण द्वारा सिद्ध किया जा सकता है । यहाँ का अच्छा चित्रमय चित्रण है ।)एस5

पारस्परिक रूप से, यदि पहले x क्यूब्स का योग है , तो निम्न समीकरण एक धनात्मक, पूर्णांक विलयन को स्वीकार करता है:vएक्स

(एक्स2+एक्स2)2=v

क्योंकि धनात्मक है, इससे निम्न होता है:(एक्स2+एक्स)/2

एक्स2+एक्स-2v=0

जिसका सकारात्मक समाधान निम्न द्वारा दिया गया है:

Δ=1+8vएक्स=-1+Δ2

एक पूर्णांक, यह एक अजीब से एक होने की गारंटी दी गई है क्योंकि हैΔही अजीब है। इसलिए, समाधान के रूप में व्यक्त किया जा सकता है:आर=ΔΔ

एक्स=आर2

टिप्पणी की गई

v =>                    // v = input
  ( r =                 //
    (1 + 8 * v ** .5)   // delta = 1 + 8.sqrt(v)
    ** .5               // r = sqrt(delta)
  ) % 1 ?               // if r is not an integer:
    0                   //   return 0
  :                     // else:
    r >> 1              //   return floor(r / 2)

पुनरावर्ती संस्करण, 36 35 बाइट्स

NaNअगर कोई समाधान नहीं है तो लौटाता है ।

f=(v,k=1)=>v>0?1+f(v-k**3,k+1):0/!v

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

टिप्पणी की गई

f = (v,                   // v = input
        k = 1) =>         // k = current value to cube
  v > 0 ?                 // if v is still positive:
    1 +                   //   add 1 to the final result
    f(                    //   do a recursive call with:
      v - k ** 3,         //     the current cube subtracted from v
      k + 1               //     the next value to cube
    )                     //   end of recursive call
  :                       // else:
    0 / !v                //   add either 0/1 = 0 if v is zero, or 0/0 = NaN if v is
                          //   non-zero (i.e. negative); NaN will propagate all the
                          //   way to the final output

नमस्ते, मैंने एक उत्तर (अपने प्रश्न के लिए) लिंक बनाया , क्योंकि आपने पहली बार प्रकाशित किया था, मैं पूछना चाहता था कि क्या एक ही भाषा में दो बार प्रकाशित करना ठीक है?
Any3nymous यूजर

@ Any3nymoususer एक ही भाषा में कई उत्तर पोस्ट करना बिल्कुल ठीक है। अपनी चुनौती का जवाब देना कुछ दिनों से पहले नहीं होना चाहिए, लेकिन मुझे लगता है कि अब ठीक है।
अरनौलड

ओह, उस मामले में मुझे बताने के लिए thnx :)
Any3nymous उपयोगकर्ता

7

05AB1E , 6 बाइट्स

ÝÝOnIk

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

पोर्ट ऑफ जोनाथन के जेली उत्तर। [० ... n] के संचयी योग को लीजिए , प्रत्येक को वर्ग कीजिए और V का सूचकांक ज्ञात कीजिए


05AB1E , 7 बाइट्स

ÝÝ3mOIk

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

यह काम किस प्रकार करता है

ÝÝ3mOIk – Full program.
ÝÝ      – Yield [[0], [0, 1], [0, 1, 2], ... [0, 1, 2, ... V]].
  3mO   – Raise to the 3rd power.
     Ik – And find the index of the input therein. Outputs -1 if not found.

8-बाइट विकल्प ÝÝÅΔ3mOQ:।


मुझे नहीं पता कि दोनों क्यों 3mOऔर कैसे nOकाम करते हैं ... शायद यह भी उल्लेख -1 -1 मिथ्या मूल्य है।
मैजिक ऑक्टोपस Urn

6

आर , 42 40 बाइट्स

-2 बाइट्स ग्यूसेप के लिए धन्यवाद

function(v,n=((1+8*v^.5)^.5-1)/2)n*!n%%1

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

पोर्ट ऑफ़ अरनल्ड का जावास्क्रिप्ट उत्तर । यदि कोई समाधान नहीं है, तो भी 0 लौटाता है।


अच्छी पकड़ @Giuseppe!
duckmayr


@Giuseppe किया!
duckmayr

5

जेली ,  5  4 बाइट्स

RIJi

एक मौद्रिक लिंक, 0यदि संभव न हो तो पैदावार देता है।

इसे ऑनलाइन आज़माएं! जिस तरह से परीक्षण के मामलों के लिए भी अक्षम! (O (V) स्पेस: p)

यहाँ एक 8-बाइट संस्करण है जो इसके बजाय O (V ^ (1/3)) बनाने के लिए V का घन-मूल कार्य करता है। उस 8-बाइट संस्करण का उपयोग करना यहां एक परीक्षण-सूट है

कैसे?

Σमैं=1मैं=nमैं3=(Σमैं=1मैं=nमैं)2
RIJi - Link: integer, V
R    - range of v -> [1,2,3,...,V]
 Ä   - cumulative sums -> [1,3,6,...,(1+2+3+...+V)]
  ²  - square -> [1,9,36,...,(1+2+3++...+V)²] ( =[1³,1³+2³,1³+2³+3³,...,(1³+2³+3³+...+V³)] )
   i - first 1-based index of v? (0 if not found)

क्या यह मान्य है? चूंकि यह परीक्षण मामलों में दिखाए गए इनपुट को संभाल नहीं सकता है? (मुझे कोई विचार नहीं आया है)
Any3nymous उपयोगकर्ता

1
यह मान्य है, यह सिर्फ एक सीमा है जो उन परीक्षण मामलों के लिए स्मृति त्रुटि देता है। छोटे मानों को आज़माएँ जैसे36
श्री एक्सकोडर

1
@ FiveCrayFish973 हाँ, कोड-गोल्फ में बाइट-काउंट के लिए प्रयोज्य / दक्षता / इत्यादि का त्याग करना काफी सामान्य है (जब तक कि ऐनक कुछ सीमाओं को लागू नहीं करता है)। आपके परीक्षण मामलों के लिए काम करने वाले एक के लिए 9-बाइट संस्करण देखें।
जोनाथन एलन

@JonathanAllan शांत, मुझे इस समुदाय के नियमों के बारे में पता नहीं था। यदि यह मान्य है, तो यह मान्य है। चीयर्स
Any3nymous उपयोगकर्ता

बहुत बुरा IJiव्यवहार करना ²⁼( जैसे , दूसरे शब्दों में)।
आउटगोल्फर

4

अमृत , 53 बाइट्स

&Enum.find_index 0..&1,fn n->&1*4==n*n*(n+1)*(n+1)end

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

पोर्ट ऑफ जोनाथन के जेली उत्तर।


अमृत , 74 बाइट्स

fn v->Enum.find_index 0..v,&v==Enum.sum Enum.map(0..&1,fn u->u*u*u end)end

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

निश्चित रूप से उप-इष्टतम। लेकिन मैं सिर्फ एक अमृत नौसिखिया हूँ! :) nilके "अमान्य" मानों के लिए रिटर्न V



3

क्यूबिक्स , 27 बाइट्स (या वॉल्यूम 27?)

इस भाषा के लिए सही जगह की तरह लगता है।

I@.1OW30pWpP<s)s;;q\.>s-.?/

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

यह एक 3x3x3 घन पर लपेटता है

      I @ .
      1 O W
      3 0 p
W p P < s ) s ; ; q \ .
> s - . ? / . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

देखो इसे चलाते हैं

यह इनपुट से दूर क्यूब्स को बढ़ाकर आवश्यक ब्रूट बलों को बढ़ाता है। यदि इसका परिणाम शून्य है, तो उत्पादन nअन्यथा नकारात्मक परिणाम होने पर, 0 प्रिंट करें और बाहर निकलें।


2

पर्ल 6 , 30 29 26 बाइट्स

-4 किंग जोए को धन्यवाद

{first :k,.sqrt,[\+] ^1e4}

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

एन <10000 के लिए जानवर बल समाधान। जोनाथन एलन के जवाब से समीकरण का उपयोग करता है। 37 बड़े n के लिए 36 बाइट्स समाधान ( जो किंग के लिए -1 बाइट धन्यवाद ):

{!.[*-1]&&$_-2}o{{$_,*-$++³...1>*}}

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

Falseअगर कोई समाधान नहीं है तो लौटाता है ।

व्याख्या

               o  # Combination of two anonymous Blocks
                {                 }  # 1st Block
                 {               }   # Reset anonymous state variable $
                  $_,*-$++³...1>*    # Sequence n,n,n-1³,n-1³-2³,... while positive
{             }  # 2nd Block
 !.[*-1]&&       # Return False if last element is non-zero
          $_-2   # Return length of sequence minus two otherwise

ब्रूट फोर्स के लिए, आप 0..$_सभी नंबरों के लिए मान्य हो सकते हैं , भले ही यह बड़े लोगों के लिए समय हो। सामान्य गोल्फिंग के लिए, आप .पहले एक को हटा सकते हैं और दूसरे 0>=*को1>*
जो किंग


2

जावास्क्रिप्ट (Node.js) , 28 बाइट्स

a=>a**.5%1?0:(2*a**.5)**.5|0

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

मुझे पता है कि यह मेरा अपना सवाल है और सभी है, लेकिन मेरे पास एक बेहतर जवाब था (इस लंग के लिए) तब मौजूद है, इसलिए मैंने पोस्ट किया। आशा है कि यह ठीक है



1

मतलाब, 27 बाइट्स

@(v)find(cumsum(1:v).^2==v)

nमौजूद है या नहीं तो एक खाली मैट्रिक्स लौटाता है ।

यह काम किस प्रकार करता है

            1:v            % Creates a 1xV matrix with values [1..V]
     cumsum(   )           % Cumulative sum
                .^2        % Power of 2 for each matrix element
                   ==v     % Returns a 1xV matrix with ones where equal to V
find(                 )    % Returns a base-1 index of the first non-zero element

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

नोट यह vस्मृति सीमाओं के कारण बड़े के लिए विफल रहता है ।




1

डीसी , 19 बाइट्स

4*dvvdddk*+d*-0r^K*

इनपुट और आउटपुट स्टैक से है, यदि कोई समाधान नहीं है तो 0 देता है।

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

व्याख्या

यदि आप किसी समाधान एन, इनपुट है ((n^2+n)^2)/4। इसलिए हम के रूप में एक परीक्षण के समाधान की गणना करेंगे n=sqrt(sqrt(4*input)), वर्ग जड़ों के लिए डीसी के डिफ़ॉल्ट 0 दशमलव स्थान परिशुद्धता का उपयोग कर, तो तुलना (n^2+n)^2करने के लिए 4*inputकरता है, तो यह वास्तव में एक समाधान है देखने के लिए।

4*dvv         Calculate a trial solution n (making a copy of 4*input for later use)
dddk          Store the trial solution in the precision and make a couple copies of it
*+d*          Calculate (n^2+n)^2
-             Subtract from our saved copy of 4*input - now we have 0 iff n is a solution
0r^           Raise 0 to that power - we now have 1 if n is a solution, 0 if not
K*            Multiply by our saved trial solution

तपस्या रेखा गैर-स्पष्ट तथ्य पर निर्भर करती है कि डीसी के लिए, 0^x=0सभी नॉनज़रो x(नकारात्मक भी x!) के लिए 0^0=1


1

पायथन 3 , 53 48 बाइट्स

f=lambda V,n=1:V>0and f(V-n**3,n+1)or(not V)*n-1

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

जो राजा से -3 बाइट्स

रिटर्न -1कोई जवाब के लिए।

केवल n=997डिफ़ॉल्ट पुनरावर्तन सीमाओं के साथ काम करता है।

बार-बार वॉल्यूम से बड़े और बड़े क्यूब्स लेता है जब तक कि यह शून्य पर नहीं आता (सफलता, हटाए गए क्यूब्स की वापसी संख्या), या एक नकारात्मक संख्या (कोई जवाब नहीं)।

स्पष्टीकरण:

f=lambda V,n=1: # f is a recursive lambda taking the volume and the cube size (defaulting to 1)

               V>0and               # if the volume is positive
                      f(V-n**3,n+1) # then we are not to the right cube size yet, try again with n+1, removing the volume of the nth cube

                                   or # if V is not positive
                                     (not V)*n-1
                         # case V == 0:
                         # (not V)*n == n; return n-1, the number of cubes
                         # case V < 0:
                         # (not V)*n == 0; return -1, no answer

and/orया सूचियाँ आमतौर पर से कम होती हैं if/else50 बाइट्स
Jo King

@JoKing धन्यवाद! मुझे दो और बाइट्स भी मिलीं।
pizzapants184

not V=> V==0याV>-1
जो राजा

0

जीवीएम ( 2612106 से कम ) बायटेकोड , 70 59 बाइट्स

(-11 बाइट्स दो बार गुणा करने के लिए कोड लिखने के बजाय एक लूप में गुणा करके)

Hexdump:

> hexdump -C cubes.bin
00000000  e1 0a 00 10 00 1a 03 d3  8a 00 f6 2a fe 25 c8 d3  |...........*.%..|
00000010  20 02 2a 04 0a 01 1a 02  00 00 20 08 4a 01 fc 03  | .*....... .J...|
00000020  d1 6a 02 52 02 cb f8 f4  82 04 f4 e8 d1 6a 03 0a  |.j.R.........j..|
00000030  03 fc d5 a8 ff c0 1a 00  a2 00 c0                 |...........|
0000003b

टेस्ट रन:

> echo 0 | ./gvm cubes.bin
0
> echo 1 | ./gvm cubes.bin
1
> echo 2 | ./gvm cubes.bin
-1
> echo 8 | ./gvm cubes.bin
-1
> echo 9 | ./gvm cubes.bin
2
> echo 224 | ./gvm cubes.bin
-1
> echo 225 | ./gvm cubes.bin
5

वास्तव में एक कम स्कोर नहीं है, बस gvmयहाँ परीक्षण के लिए इस अच्छे प्रश्न का उपयोग कर रहे हैं;) कमिट पाठ्यक्रम के प्रश्न से पुराना है। ध्यान दें कि यह एक 8 बिट वर्चुअल मशीन है, इसलिए केवल प्राकृतिक अहस्ताक्षरित संख्या सीमा को संभालने वाले कुछ कोड का उपयोग करते हुए 0-255, प्रश्न में दिए गए परीक्षण मामले काम नहीं करेंगे।

मैन्युअल रूप से इस से इकट्ठा:

0100  e1         rud                     ; read unsigned decimal
0101  0a 00      sta     $00             ; store to $00 (target sum to reach)
0103  10 00      ldx     #$00            ; start searching with n = #0
0105  1a 03      stx     $03             ; store to $03 (current cube sum)
0107  d3         txa                     ; X to A
                   loop:
0108  8a 00      cmp     $00             ; compare with target sum
010a  f6 2a      beq     result          ; equal -> print result
010c  fe 25      bcs     error           ; larger -> no solution, print -1
010e  c8         inx                     ; increment n
010f  d3         txa                     ; as first factor for power
0110  20 02      ldy     #$02            ; multiply #02 times for ...
0112  2a 04      sty     $04             ; ... power (count in $04)
                   ploop:
0114  0a 01      sta     $01             ; store first factor to $01 ...
0116  1a 02      stx     $02             ; ... and second to $02 for multiplying
0118  00 00      lda     #$00            ; init product to #0
011a  20 08      ldy     #$08            ; loop over 8 bits
                   mloop1:
011c  4a 01      lsr     $01             ; shift right first factor
011e  fc 03      bcc     noadd1          ; shifted bit 0 -> skip adding
0120  d1         clc                     ; 
0121  6a 02      adc     $02             ; add second factor to product
                   noadd1:
0123  52 02      asl     $02             ; shift left second factor
0125  cb         dey                     ; next bit
0126  f8 f4      bpl     mloop1          ; more bits -> repeat
0128  82 04      dec     $04             ; dec "multiply counter" for power
012a  f4 e8      bne     ploop           ; not 0 yet -> multiply again
012c  d1         clc
012d  6a 03      adc     $03             ; add power to ...
012f  0a 03      sta     $03             ; ... current cube sum
0131  fc d5      bcc     loop            ; repeat unless adding overflowed
                   error:
0133  a8 ff      wsd     #$ff            ; write signed #$ff (-1)
0135  c0         hlt                     ; 
                   result:
0136  1a 00      stx     $00             ; store current n to $00
0138  a2 00      wud     $00             ; write $00 as unsigned decimal
013a  c0         hlt

संपादित करें : मैंने अभी एक बग फिक्स किया है gvm; इस फिक्स के बिना, पाठ मोडgvm में द्विआधारी कार्यक्रमों को पढ़ने की कोशिश की , जो टूट सकता है (ऊपर दिए गए कोड में कोई बाइट्स नहीं है, ताकि यह तय किए बिना खिड़कियों पर टूट न जाए)।0xd


0

के (ओके) , 21 बाइट्स

{(,_r%2)@1!r:%1+8*%x}

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

पोर्ट ऑफ़ अरनल्ड का JS उत्तर

किस तरह:

{(,_r%2)@1!r:%1+8*%x} # Main function, argument x
             %1+8*%x  # sqrt(1+(8*(sqrt(x)))
           r:         # Assign to r
         1!           # r modulo 1
        @             # index the list:
 (,_r%2)              # enlist (,) the floor (_) of r modulo 2.

फ़ंक्शन (_r%2)iff वापस आ जाएगा 1!r == 0, अन्यथा यह अशक्त ( 0N) लौटाएगा । यह सूची में एकल तत्व के कारण है, जिसमें 0 का सूचकांक है, और उस सूची को 0 के अलावा किसी भी संख्या के साथ अनुक्रमित करने की कोशिश करने से अशक्तता वापस आ जाएगी।

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