क्या मैं तुम्हारे लिए काफी नहीं हूं?


29

पृष्ठभूमि:

वर्तमान परफेक्ट नंबर चुनौती बल्कि त्रुटिपूर्ण और जटिल है, क्योंकि यह आपको एक जटिल प्रारूप में आउटपुट करने के लिए कहता है जिसमें संख्या के कारक शामिल होते हैं। यह चुनौती का विशुद्ध रूप से प्रतिनिधि है।

चुनौती

किसी भी मानक इनपुट प्रारूप के माध्यम से एक सकारात्मक पूर्णांक को देखते हुए , कि यह सही है या नहीं, के बीच अंतर करें।

एक सही संख्या एक संख्या है जो इसके सभी उचित भाजक के योग के बराबर है (इसके सकारात्मक विभाजक खुद से कम हैं)। उदाहरण के लिए, 6 एक पूर्ण संख्या है, क्योंकि इसके भाजक 1,2,3 , जो 6 तक योग करते हैं, जबकि 12 अपने भाजक ( 1,2,3,4,6 ) से 16 तक की संख्या के लिए एक सही संख्या नहीं है। 12 नहीं ।

परीक्षण के मामलों:

Imperfect:
1,12,13,18,20,1000,33550335

Perfect:
6,28,496,8128,33550336,8589869056

नियम

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

रुको, तो सत्य उन मूल्यों के लिए है जो सही नहीं हैं, और जो मूल्य हैं उनके लिए गलत है?
फ्रूट

2
@ Tvde1 उचित विभाजकों की संख्या से कम है, अन्यथा कोई भी संख्या 1सही नहीं होगी, क्योंकि प्रत्येक संख्या अपने आप से विभाज्य है 1। के उचित विभाजन का योग 1है0
जो किंग

3
@Grimy केवल अगर आप ऐसा साबित कर सकते हैं । सौभाग्य! (हालांकि मैं सोच रहा हूँ कि बाइट्स कैसे बचेंगे)
Jo King

1
तो नहीं, बहुत बुरा। यह लगभग 3. के एक कारक द्वारा ईसीएमए रेगेक्स उत्तर के आकार में कटौती करेगा
ग्रैमी

3
"आउटपुट दो अलग और सुसंगत मूल्य हो सकते हैं" - क्या हम यहां "सत्य बनाम फाल्सी" का उपयोग नहीं कर सकते हैं (जैसे शून्य बनाम गैर शून्य का उपयोग करके पायथन; सामग्री बनाम एक खाली सूची वाली सूची; और इसके संयोजन)।
जोनाथन एलन

जवाबों:


16

ब्रेकीलॉग , 4 बाइट्स

fk+?

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

सही इनपुट के लिए विधेय सफल होता है और अपूर्ण इनपुट के लिए विफल हो जाता है, मुद्रण true.या false.यदि एक पूर्ण कार्यक्रम के रूप में चलाया जाता है ( अंतिम परीक्षण मामले को छोड़कर जो टीआईओ पर एक मिनट से अधिक समय लगता है)।

        The input's
f       factors
 k      without the last element
  +     sum to
   ?    the input.

1
मुझे पसंद है कि कोड कैसे कहता है fk: x
इस्माइल मिगुएल

9

नीम , 3 बाइट्स

𝐕𝐬𝔼

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

(मैं वास्तव में एक बार में सभी परीक्षण मामलों को चलाना नहीं जानता, क्योंकि मैंने पंद्रह मिनट पहले नीम सीखना शुरू किया था, लेकिन मैंने उन्हें व्यक्तिगत रूप से जांचा।)

अपूर्ण के लिए प्रिंट 0, परिपूर्ण के लिए 1।

𝐕      Pop an int from the stack and push its proper divisors,
       implicitly reading the int from a line of input as the otherwise absent top of the stack.
 𝐬     Pop a list from the stack and push the sum of the values it contains.
  𝔼    Pop two ints from the stack and push 1 if they are equal, 0 if they are not;
       implicitly reading the same line of input that was already read as the second int, I guess?
       Implicitly print the contents of the stack, or something like that.

2
" मुझे लगता है? "; " या ऐसा ही कुछ। " जब आपको यह भी पता नहीं होता कि आपने खुद को क्या लिखा है, हाहा। ;) लेकिन हाँ, यह वास्तव में यह कैसे काम करता है। मैं नीम को नहीं जानता, लेकिन इस तरह इनपुट का उपयोग करना और अंत में स्पष्ट रूप से आउटपुट करना, 05AB1E में समान है।
केविन क्रूज़सेन

𝔼1 बाइट कैसे होती है ? क्या नीम केवल 128 ऐसे गैर-वर्णक वर्णों का उपयोग करता है?
काजाक्स

3
@kajacx नीम का अपना कोड पेज है । इसलिए, कोडपेज में मौजूद 256 अक्षरों में से प्रत्येक को 1 बाइट का उपयोग करके एन्कोड किया जा सकता है।
मिस्टर एक्सकोडर

8

आर , 33 29 बाइट्स

!2*(n=scan())-(x=1:n)%*%!n%%x

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

TRUEसही संख्या और FALSEअपूर्ण लोगों के लिए रिटर्न ।


एक पंक्ति में 2? S आपको क्या मिलता है?
सीटी हॉल

@CTHall मैंने कल्पना को गलत बताया है; उन्होंने मूल रूप से मैप किया 0( FALSEनॉनवेज ) और नॉनज़रो TRUEलेकिन मैंने मैपिंग को उलटने के लिए उनमें से एक को हटा दिया। यह एक उपयोगी गोल्फ चाल numericहै logical, जिसमें अक्सर whichया साथ संयोजन किया जाता है [
Giuseppe


7

जाप -! , 4 बाइट्स

¥â¬x
-----------------
            Implicit Input U
¥           Equal to
   x        Sum of
 â          Factors of U
  ¬         Without itself

किसी कारण से ¦tio पर काम नहीं करता है, इसलिए मुझे -!ध्वज का उपयोग करने की आवश्यकता है और ¥इसके बजाय

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


यह एक TIO मुद्दा नहीं है; Uपहले ऑटो डाला नहीं जाता है !
झबरा

6

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

lambda x:sum(i for i in range(1,x)if x%i<1)==x

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

क्रूरता, समानता के लिए कारकों और जांचों को समेटती है।


2
अपने चलना चर के लिए एक मुखौटा के रूप में समझ की स्थिति का उपयोग करना एक बाइट को बचाएगा।
जोनाथन फ्रीच

चूंकि आप अपूर्ण संख्या के लिए सत्य लौट सकते हैं, इसलिए lambda x:sum(i for i in range(1,x)if x%i<1)^xभी काम करना चाहिए।
nedla2004

5

पायथन , 45 बाइट्स

lambda n:sum(d*(n%d<1)for d in range(1,n))==n

Trueपरिपूर्ण के लिए; Falseदूसरों के लिए (इस के साथ स्विच ==-> !=)

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

 44 42  41 बाइट्स (-2 ओव्स के लिए धन्यवाद) अगर हम "सत्य बनाम फाल्सी" का उपयोग कर उत्पादन कर सकते हैं:

f=lambda n,i=1:i/n or-~f(n,i+1)-(n%i<1)*i

(फाल्सी ( 0)) परफेक्ट के लिए; सत्य (एक गैर शून्य पूर्णांक) अन्यथा


यदि दूसरा आउटपुट स्वरूप मान्य है, तो यह 42 बाइट्स में किया जा सकता है ।
अंडा

@ नोव्स आह, अच्छी तरह से किया।
जोनाथन एलन

@ovs .. और एक और उस से बचाया - धन्यवाद!
जोनाथन एलन

5

ऑक्टेव , 25 बाइट्स

@(n)~mod(n,t=1:n)*t'==2*n

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

व्याख्या

@(n)~mod(n,t=1:n)*t'==2*n

@(n)                        % Define anonymous function with input n
             1:n            % Row vector [1,2,...,n]
           t=               % Store in variable t
     mod(n,     )           % n modulo [1,2,...,n], element-wise. Gives 0 for divisors
    ~                       % Logical negate. Gives 1 for divisors
                  t'        % t transposed. Gives column vector [1;2;...;n]
                 *          % Matrix multiply
                      2*n   % Input times 2
                    ==      % Equal? This is the output value

4

जावास्क्रिप्ट, 38 बाइट्स

n=>eval("for(i=s=n;i--;)n%i||!(s-=i)")

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

(TIO पर अंतिम परीक्षा का समय समाप्त।)


@Arnauld f=पुनरावर्ती फ़ंक्शन से परिवर्तित करने के बाद बस हटाना भूल गया ।
tsh

बस जिज्ञासा से बाहर, एक पुनरावर्ती संस्करण के साथ क्यों नहीं? (यह 34 बाइट्स होगा।)
अर्नुलड

@Arnauld क्योंकि पुनरावर्ती संस्करण स्टैक ओवरफ्लो के कारण बड़े टेस्टकेस के लिए बस विफल हो जाएगा। हो सकता है कि मुझे यह काम करने के लिए कुछ वातावरण डिफ़ॉल्ट से सख्त मोड की आवश्यकता हो।
tsh

2
पर्याप्त रूप से उचित है, लेकिन आपके कार्यक्रम को बड़े परीक्षण मामलों को पूरा करने की आवश्यकता नहीं है (जो मुझे लगता है कि डिफ़ॉल्ट नियम है, वैसे भी)।
अरनौलद

4

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 46 बाइट्स

n=>Enumerable.Range(1,n).Sum(x=>n%x<1?x:0)^n*2

यदि सही है तो 0 लौटाता है, अन्यथा सकारात्मक संख्या देता है। मुझे नहीं पता कि दो अलग-अलग सत्य और मिथ्या मूल्यों के स्थान पर विभिन्न प्रकार के पूर्णांकों के आउटपुट की अनुमति है या नहीं, और इसके बारे में मेटा पर कोई चर्चा नहीं हो सकती है। यदि यह अमान्य है, तो मैं इसे हटा दूंगा।

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

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 49 47 बाइट्स

n=>Enumerable.Range(1,n).Sum(x=>n%x<1?x:0)==n*2

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



3

TI-BASIC (TI-84), 30 23 बाइट्स

:2Ans=sum(seq(Ans/Xnot(remainder(Ans,X)),X,1,Ans,1

बुरी तरह से अक्षम है, लेकिन यह काम करता है।
बाईटेकाउंट को कम करने से कार्यक्रम में काफी तेजी आई।
इनपुट में हैAns । जब प्रोग्राम पूरा हो जाता है तो
आउटपुट अपने Ansआप प्रिंट हो जाता है।

स्पष्टीकरण:
(TI-BASIC में टिप्पणियां नहीं हैं, इसलिए बस मान लें कि ;टिप्पणी करता है)

:2Ans=sum(seq(Ans/Xnot(remainder(Ans,X)),X,1,Ans    ;Full program

 2Ans                                               ;double the input
          seq(                                      ;generate a list
                                         X,          ;using the variable X,
                                           1,        ;starting at 1,
                                             Ans     ;and ending at the input
                                                     ;with an implied increment of 1
              Ans/X                                 ;from the input divided by X
                   not(                ),           ;multiplied by the negated result of
                       remainder(Ans,X)              ;the input modulo X
                                                     ;(result: 0 or 1)
      sum(                                          ;sum up the elements in the list
     =                                              ;equal?

उदाहरण:

6
            6
prgmCDGF2
            1
7
            7
prgmCDGF2
            0

नोट: किसी प्रोग्राम की बाइट काउंट का मूल्यांकन [MEM] > [2] > [7] में मूल्य का उपयोग करके किया जाता है। (36 बाइट्स) फिर प्रोग्राम के नाम की लंबाई CDGF2, (5 बाइट्स) और अतिरिक्त 8 बाइट्स का उपयोग किया जाता है। कार्यक्रम का भंडारण:

36 - 5 - 8 = 23 बाइट्स


3

जावा (JDK) , 54 बाइट्स

n->{int s=0,d=0;for(;++d<n;)s+=n%d<1?d:0;return s==n;}

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

हालांकि संख्या मिलान द्वारा एक सख्त संख्या के लिए, निम्नलिखित समान मान लौटाएगा, लेकिन केवल 40 बाइट्स है।

n->n==6|n==28|n==496|n==8128|n==33550336

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


नियम कहते हैंYour program doesn't have to complete the larger test cases, if there's memory or time constraints, but it should be theoretically able to if it were given more memory/time.
जो राजा

@ जॉकिंग का मतलब यह है कि मैं जावा का उपयोग बिल्कुल नहीं कर सकता int, बल्कि ए BigInteger? क्योंकि जावा है BigIntegers, लेकिन यह कभी नहीं होगा intकि हस्ताक्षर के रूप में 31 से अधिक बिट्स है, जो यहाँ का प्रतिनिधित्व करने वालों की तुलना में कोई अन्य मूल्य नहीं पकड़ सकता है ...
ओलिवियर ग्रेजायर

नहीं, लेकिन अगर कार्यक्रम अभी भी काम करना चाहिए अगर intप्रकार अनबाउंड था
जो किंग

1
@JoKing ठीक है, मैंने पहले गणना करने के लिए दो समाधानों को फिर से स्विच किया।
ओलिवियर ग्रेजायर

3

x86 असेंबली, 45 43 बाइट्स।

6A 00 31 C9 31 D2 41 39  C1 7D 0B 50 F7 F9 58 85
D2 75 F1 51 EB EE 31 D2  59 01 CA 85 C9 75 F9 39
D0 75 05 31 C0 40 EB 02  31 C0 C3

स्पष्टीकरण (इंटेल सिंटैक्स):

PUSH $0          ; Terminator for later
XOR ECX, ECX        ; Clear ECX
.factor:
    XOR EDX, EDX    ; Clear EDX
    INC ECX
    CMP ECX, EAX    ; divisor >= input number?
    JGE .factordone ; if so, exit loop.
    PUSH EAX        ; backup EAX
    IDIV ECX        ; divide EDX:EAX by ECX, store result in EAX and remainder in EDX
    POP EAX         ; restore EAX
    TEST EDX, EDX   ; remainder == 0?
    JNZ .factor     ; if not, jump back to loop start
    PUSH ECX        ; push factor
    JMP .factor     ; jump back to loop start
.factordone:
XOR EDX, EDX        ; clear EDX
.sum:
    POP ECX         ; pop divisor
    ADD EDX, ECX    ; sum into EDX
    TEST ECX, ECX   ; divisor == 0?
    JNZ .sum        ; if not, loop.
CMP EAX, EDX        ; input number == sum?
JNE .noteq          ; if not, skip to .noteq
    XOR EAX, EAX    ; clear EAX
    INC EAX         ; increment EAX (sets to 1)
JMP .return         ; skip to .return
.noteq:
    XOR EAX, EAX    ; clear EAX
.return:
RETN

में इनपुट प्रदान किया जाना चाहिए EAX
फंक्शन परफेक्ट और टू के लिए सेट EAXहोता 1है0 अपूर्ण के ।

संपादित करें : कम बाइट-काउंट को दो के MOV EAX, $1साथ बदलकर XOR EAX, EAXऔरINC EAX


1
मैं एक मैक्रो असेंबली का उपयोग करता हूं इसलिए मुझे निश्चित रूप से पता नहीं है लेकिन "टिप्पणी; विभाजक> इनपुट नंबर" मेरे लिए होगा "; भाजक> = इनपुट नंबर"
RosLuP

असेंबली में आसान ऑपरेशन होते हैं, जो निर्देश की लंबाई को कम कर सकता है, सभी को एक पंक्ति में रखता है, इंडेंटेशन का उपयोग करता है और हर 10 20
एसएम

@RosLuP मैंने टिप्पणी को कोड (धन्यवाद) में तय किया है, लेकिन मुझे नहीं पता कि आपकी दूसरी टिप्पणी का क्या मतलब है।
Fayti1703

3

भूलभुलैया , 80 बाइट्स

?::`}:("(!@
perfect:
{:{:;%"}
+puts; "
}zero: "
}else{(:
"negI"  _~
""""""{{{"!@

लैटिन अक्षर perfect puts zero else neg Iवास्तव में केवल टिप्पणियां हैं *।
यानी अगर इनपुट सही है 0तो प्रिंट किया जाता है, अन्यथा -1

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


* तो यह या यह काम भी ...

?::`}:("(!@               ?::`}:("(!@
       :                  BEWARE :
{:{:;%"}                  {:{:;%"}
+    ; "                  +LAIR; "
}    : "                  } OF : "
}    {(:                  }MINO{(:
"    "  _~                "TAUR"  _~
""""""{{{"!@              """"""{{{"!@

कैसे?

एक इनपुट के रूप में एक धनात्मक पूर्णांक लेता है nऔर -nसहायक स्टैक पर एक संचायक चर को रखता है , फिर प्रत्येक पूर्णांक के लिए n-1नीचे से, और सहित, 1जो कोई भी nसंचयकर्ता को विभाजित करते हैं, के लिए एक विभाज्यता परीक्षण करता है । एक बार यह पूरा हो जाता है यदि संचायक चर गैर-शून्य है एक -1आउटपुट है, अन्यथा ए0 यह है।

?::`}:(केवल निष्पादन की शुरुआत में एक बार निष्पादित किया जाता है,:

?::`}:(                                                      Main,Aux
?       - take an integer from STDIN and place it onto Main  [[n],[]]
 :      - duplicate top of Main                            [[n,n],[]]
  :     - duplicate top of Main                          [[n,n,n],[]]
   `    - negate top of Main                            [[n,n,-n],[]]
    }   - place top of Main onto Aux                       [[n,n],[-n]]
     :  - duplicate top of Main                          [[n,n,n],[-n]]
      ( - decrement top of Main                        [[n,n,n-1],[-n]]

अगला निर्देश, "एक नो-ऑप है, लेकिन हमारे पास तीन पड़ोसी निर्देश हैं इसलिए हम मेन के शीर्ष पर मूल्य के अनुसार शाखा देते हैं, शून्य हमें आगे ले जाता है, जबकि गैर-शून्य हमें सही लेता है।

यदि इनपुट था 1तो हम आगे बढ़ गए क्योंकि मेन का शीर्ष शून्य है:

(!@                                                          Main,Aux
(   - decrement top of Main                             [[1,1,-1],[-1]]
 !  - print top of Main, a -1
  @ - exit the labyrinth

लेकिन अगर इनपुट से अधिक 1हम सही मोड़ लेते हैं क्योंकि मेन का शीर्ष गैर-शून्य है:

:}                                                           Main,Aux
:  - duplicate top of Main                         [[n,n,n-1,n-1],[-n]]
 } - place top of Main onto Aux                        [[n,n,n-1],[-n,n-1]]

इस बिंदु पर हमारे पास तीन-पड़ोसी शाखा है, लेकिन हम जानते हैं n-1कि गैर-शून्य है, इसलिए हम सही मोड़ लेते हैं ...

"%                                                           Main,Aux
"  - no-op                                             [[n,n,n-1],[-n,n-1]]
 % - place modulo result onto Main                   [[n,n%(n-1)],[-n,n-1]]
   - ...i.e we've got our first divisibility indicator n%(n-1), an
   -    accumulator, a=-n, and our potential divisor p=n-1:
   -                                                 [[n,n%(n-1)],[a,p]]

अब हम एक और तीन-पड़ोसी शाखा में हैं %

यदि %गैर-शून्य का परिणाम था, तो हम अपने संभावित भाजक को कम करने के लिए छोड़ देते हैं p=p-1, और संचायक को छोड़ देते हैं a, जैसा कि यह है:

;:{(:""}"                                                    Main,Aux
;          - drop top of Main                                [[n],[a,p]]
 :         - duplicate top of Main                         [[n,n],[a,p]]
  {        - place top of Aux onto Main                  [[n,n,p],[a]]
           - three-neighbour branch but n-1 is non-zero so we turn left
   (       - decrement top of Main                     [[n,n,p-1],[a]]
    :      - duplicate top of Main                 [[n,n,p-1,p-1],[a]]
     ""    - no-ops                                [[n,n,p-1,p-1],[a]]
       }   - place top of Main onto Aux                [[n,n,p-1],[a,p-1]]
        "  - no-op                                     [[n,n,p-1],[a,p-1]]
         % - place modulo result onto Main           [[n,n%(p-1)],[a,p-1]]
           - ...and we branch again according to the divisibility
           -    of n by our new potential divisor, p-1

... लेकिन अगर परिणाम %शून्य था (केवल पहली बार पास होने पर n=2) हम सीधे बीओटीएच पर जाते हैं, तो हमारे संचयकर्ता को विभाजक जोड़ते हैं a=a+p, और हमारे संभावित भाजक को घटाते हैं p=p-1:

;:{:{+}}""""""""{(:""}                                       Main,Aux
;                      - drop top of Main                    [[n],[a,p]]
 :                     - duplicate top of Main             [[n,n],[a,p]]
  {                    - place top of Aux onto Main      [[n,n,p],[a]]
   :                   - duplicate top of Main         [[n,n,p,p],[a]]
    {                  - place top of Aux onto Main  [[n,n,p,p,a],[]]
     +                 - perform addition            [[n,n,p,a+p],[]]
      }                - place top of Main onto Aux      [[n,n,p],[a+p]]
       }               - place top of Main onto Aux        [[n,n],[a+p,p]]
        """""""        - no-ops                            [[n,n],[a+p,p]]
                       - a branch, but n is non-zero so we turn left
               "       - no-op                             [[n,n],[a+p,p]]
                {      - place top of Aux onto Main      [[n,n,p],[a+p]]
                       - we branch, but p is non-zero so we turn right
                 (     - decrement top of Main         [[n,n,p-1],[a+p]]
                  :    - duplicate top of Main     [[n,n,p-1,p-1],[a+p]]
                   ""  - no-ops                    [[n,n,p-1,p-1],[a+p]]
                     } - place top of Main onto Aux    [[n,n,p-1],[a+p,p-1]]

इस बिंदु पर अगर p-1हम अभी भी गैर-शून्य हैं तो हम बाएं मुड़ते हैं:

"%                                                           Main,Aux
"  - no-op                                             [[n,n,p-1],[a+p,p-1]]
 % - modulo                                          [[n,n%(p-1)],[a+p,p-1]]
   - ...and we branch again according to the divisibility
   -    of n by our new potential divisor, p-1

... लेकिन अगर p-1शून्य पर हम सीधे :भूलभुलैया की दूसरी पंक्ति पर जाते हैं (आपने पहले सभी निर्देशों को देखा है, तो मैं उनका वर्णन छोड़ रहा हूं और बस अपना प्रभाव दे रहा हूं):

:":}"":({):""}"%;:{:{+}}"""""""{{{                           Main,Aux
:                                  -                   [[n,n,0,0],[a,0]]
 "                                 -                   [[n,n,0,0],[a,0]]
                                   - top of Main is zero so we go straight
                                   -  ...but we hit the wall and so turn around
  :                                -                 [[n,n,0,0,0],[a,0]]
   }                               -                   [[n,n,0,0],[a,0,0]]
                                   - top of Main is zero so we go straight
    ""                             -                   [[n,n,0,0],[a,0,0]]
      :                            -                 [[n,n,0,0,0],[a,0,0]]
       (                           -                [[n,n,0,0,-1],[a,0,0]]
        {                          -              [[n,n,0,0,-1,0],[a,0]]
                                   - top of Main is zero so we go straight
                                   -  ...but we hit the wall and so turn around
         (                         -             [[n,n,0,0,-1,-1],[a,0]]
          :                        -          [[n,n,0,0,-1,-1,-1],[a,0]]
           ""                      -          [[n,n,0,0,-1,-1,-1],[a,0]]
             }                     -             [[n,n,0,0,-1,-1],[a,0,-1]]
                                   - top of Main is non-zero so we turn left
              "                    -             [[n,n,0,0,-1,-1],[a,0,-1]]
               %                   - (-1)%(-1)=0     [[n,n,0,0,0],[a,0,-1]]
                ;                  -                   [[n,n,0,0],[a,0,-1]]
                 :                 -                 [[n,n,0,0,0],[a,0,-1]]
                  {                -              [[n,n,0,0,0,-1],[a,0]]
                   :               -           [[n,n,0,0,0,-1,-1],[a,0]]
                    {              -         [[n,n,0,0,0,-1,-1,0],[a]]
                     +             -           [[n,n,0,0,0,-1,-1],[a]]
                      }            -              [[n,n,0,0,0,-1],[a,-1]]
                       }           -                 [[n,n,0,0,0],[a,-1,-1]]
                        """""""    -                 [[n,n,0,0,0],[a,-1,-1]]
                                   - top of Main is zero so we go straight
                               {   -              [[n,n,0,0,0,-1],[a,-1]]
                                {  -           [[n,n,0,0,0,-1,-1],[a]]
                                 { -         [[n,n,0,0,0,-1,-1,a],[]]

अब यह {तीन पड़ोसी निर्देश हैं, इसलिए ...

... अगर aशून्य है, जो कि पूर्ण के लिए होगा n, तो हम सीधे जाते हैं:

"!@                                                          Main,Aux
"   -                                        [[n,n,0,0,0,-1,-1,a],[]]
    - top of Main is a, which is zero, so we go straight
 !  - print top of Main, which is a, which is a 0
  @ - exit the labyrinth

... अगर aगैर-शून्य है, जो गैर-परिपूर्ण के लिए होगा n, तो हम बाएं मुड़ते हैं:

_~"!@                                                        Main,Aux
_     - place a zero onto Main             [[n,n,0,0,0,-1,-1,a,0],[]]
 ~    - bitwise NOT top of Main (=-1-x)   [[n,n,0,0,0,-1,-1,a,-1],[]]
  "   -                                   [[n,n,0,0,0,-1,-1,a,-1],[]]
      - top of Main is NEGATIVE so we turn left
   !  - print top of Main, which is -1
    @ - exit the labyrinth


2

जावास्क्रिप्ट, ६२

n=>n==[...Array(n).keys()].filter(a=>n%a<1).reduce((a,b)=>a+b)

स्पष्टीकरण (हालांकि यह बहुत आसान है)

n=> //return function that takes n
  n== //and returns if n is equal to
    [...Array(n).keys()] //an array [0..(n-1)]...
      .filter(a=>n%a<1) //where all of the elements that are not divisors of n are taken out...
      .reduce((a,b)=>a+b) //summed up

सुधार के लिए जो किंग को धन्यवाद !



2

पॉवर्सशेल, 46 बाइट्स 43 बाइट्स

param($i)1..$i|%{$o+=$_*!($i%$_)};$o-eq2*$i

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

संपादित करें: -3 बाइट्स @AdmBorkBork के लिए धन्यवाद


43 बाइट्स को लूप में संचायक को रोल करके और 2*$iघटाव-एक परेंस को खत्म करने के खिलाफ जांचना ।
AdmBorkBork

2

सी (जीसीसी) , 41 बाइट्स

f(n,i,s){for(i=s=n;--i;s-=n%i?0:i);n=!s;}

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

1: 0
12: 0
13: 0
18: 0
20: 0
1000: 0
33550335: 0
6: 1
28: 1
496: 1
8128: 1
33550336: 1
-65536: 0 <---- Unable to represent final test case with four bytes, fails

मुझे पता है कि अगर अंतिम मामले के लिए विफलता एक मुद्दा है।



2
"आउटपुट किसी भी अनुमत आउटपुट प्रारूप के माध्यम से दो भिन्न और सुसंगत मूल्य हो सकते हैं।" आप कोई दो अलग मान नहीं लौटा रहे हैं।
ओलिवियर ग्रेजायर

2
@ ओलिविएरग्रेयर सौभाग्य से एक विस्मयबोधक चिह्न के साथ अंतरिक्ष को प्रतिस्थापित करके आसानी से तय किया जा सकता है!
नील

1
@ नील बेहतर अभी तक, यह 5 बाइट बचाने के n=!s;बजाय के साथ तय किया जा सकता है return!s;

@ ओलिवियरग्रेयर आह, मैं उस बिंदु को भूल गया। इसके अलावा, बेहतर कोड के साथ अद्यतन किया गया। मैंने ऐसा ही कुछ करने की कोशिश की, लेकिन मैं जो बेवकूफ हूं, मैंने वह किया, s=sजो संभावना से अधिक अनुकूलित हो गया।
मार्कोस


2

फोर्थ (gforth) , 45 बाइट्स

: f 0 over 1 ?do over i mod 0= i * - loop = ;

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

व्याख्या

1 से n-1 तक हर नंबर पर लूप्स, सभी मानों को समेटते हैं जो n को पूरी तरह से विभाजित करते हैं। यदि एन के बराबर है तो सही रिटर्न देता है

कोड स्पष्टीकरण

: f                \ start word definition
  0 over 1         \ create a value to hold the sum and setup the bounds of the loop
  ?do              \ start a counted loop from 1 to n. (?do skips if start = end)
    over           \ copy n to the top of the stack
    i mod 0=       \ check if i divides n perfectly
    i * -          \ if so, use the fact that -1 = true in forth to add i to the sum
  loop             \ end the counted loop
  =                \ check if the sum and n are equal
;                  \ end the word definition

2

अजगर , ९ १३ बाइट्स

qsf!%QTSt

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

गोल्फ की मदद के लिए टिप्पणीकारों को धन्यवाद

इनपुट के सभी कारकों को ढूँढता है, उन्हें रकम देता है और उनकी तुलना मूल इनपुट से करता है।


आपके लिए कुछ गोल्फ - के q0साथ प्रतिस्थापित किया जा सकता है !, और SQरेंज का उत्पादन करता है [1-Q], इसलिए रेंज [1-Q)का उपयोग करके उत्पन्न किया जा सकता है StQ। जैसा कि Qअब कार्यक्रम के अंत में वे दोनों को छोड़ा जा सकता है। Fettled संस्करण, 9 बाइट्स -qsf!%QTSt
सोक

1

बैच, 81 बाइट्स

@set s=-%1
@for /l %%i in (1,1,%1)do @set/as+=%%i*!(%1%%%%i)
@if %s%==%1 echo 1

लेता है n1यदि यह एक सही संख्या है, तो कमांड-लाइन पैरामीटर और आउटपुट के रूप में । ब्रूट बल विधि, योग शुरू करता है -nताकि यह nलूप में खुद को शामिल कर सके।


1

लकड़ी का कोयला , 13 बाइट्स

Nθ⁼θΣΦθ∧ι¬﹪θι

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। -एकदम सही संख्या के लिए आउटपुट । पाशविक बल का उपयोग करता है। स्पष्टीकरण:

Nθ              Numeric input
     Φθ         Filter on implicit range
        ι       Current value (is non-zero)
       ∧        Logical And
           θ    Input value
          ﹪     Modulo
            ι   Current value
         ¬      Is zero
    Σ           Sum of matching values
  ⁼             Equals
   θ            Input value


1

पायथ, 8 बाइट्स

qs{*MPyP

इसे यहाँ ऑनलाइन आज़माएँ ।

qs{*MPyPQQ   Implicit: Q=eval(input())
             Trailing QQ inferred
       PQ    Prime factors of Q
      y      Powerset
     P       Remove last element - this will always be the full prime factorisation
   *M        Take product of each
  {          Deduplicate
 s           Sum
q        Q   Is the above equal to Q? Implicit print

1

रेटिना 0.8.2 , 44 बाइट्स

.+
$*
M!&`(.+)$(?<=^\1+)
+`^1(1*¶+)1
$1
^¶+$

इसे ऑनलाइन आज़माएं! जानवर बल का उपयोग करता है, इसलिए लिंक में केवल तेज परीक्षण मामले शामिल हैं। स्पष्टीकरण:

.+
$*

यूनीरी में बदलें।

M!&`(.+)$(?<=^\1+)

इनपुट के सभी कारकों का मिलान करें। यह ओवरलैपिंग मोड का उपयोग करता है, जिसमें रेटिना 0.8.2 को सभी मैच अलग-अलग पदों पर शुरू करने की आवश्यकता होती है, इसलिए मूल इनपुट के साथ शुरू होने पर मैच वास्तव में अवरोही क्रम में वापस आ जाते हैं।

+`^1(1*¶+)1
$1

इनपुट से उचित कारकों को घटाएं।

^¶+$

परीक्षण करें कि क्या परिणाम शून्य है।



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