नकली भाजक राशि बहुभुज


23

काम

इस चुनौती में, अपने काम के लिए एक प्रोग्रामिंग भाषा में एक प्रोग्राम लिखने के लिए है एल कि एक सकारात्मक पूर्णांक लेता है n , और के समुचित divisors की राशि आउटपुट n ( अनुक्रम A001065 OEIS पर)। इसे किसी भी 1 return n10 000 के लिए सही आउटपुट देना चाहिए । यहां पहले 10 आउटपुट दिए गए हैं:

0, 1, 1, 3, 1, 6, 1, 7, 4, 8

इसके अलावा, आपका कार्यक्रम एक नकली पॉलीग्लॉट होना चाहिए , जिसका अर्थ है निम्नलिखित। यह एक अन्य प्रोग्रामिंग भाषा L ' में एक मान्य प्रोग्राम है , और प्रत्येक इनपुट के लिए 1 ≤ n valid 10 (ऊपर परीक्षण के मामले), यह n के समुचित विभाजकों का योग लौटाता है , लेकिन कुछ 11 ≤ n 000 10 000 मौजूद है जिसके लिए यह सही परिणाम नहीं लौटाता है। यह कुछ गलत लौटा सकता है, लूप हमेशा के लिए, क्रैश आदि। यह सभी के लिए गलत परिणाम दे सकता है something 11 , उनमें से कुछ के लिए या सिर्फ एक।

नियम और स्कोरिंग

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

ध्यान दें कि यदि आप गैर-ASCII एन्कोडिंग (इस साइट पर कई करते हैं) के साथ प्रोग्रामिंग भाषाओं का उपयोग करते हैं, तो बाइट्स के समान अनुक्रम का उपयोग दोनों भाषाओं के लिए किया जाना चाहिए। इसका मतलब है कि आपको या तो संभावित विभिन्न कोड पृष्ठों के बीच रूपांतरण करना होगा या मल्टी-बाइट यूनिकोड वर्णों के लिए दंड भुगतना होगा।

अतिरिक्त परीक्षण के मामले

20 -> 22
36 -> 55
180 -> 366
997 -> 1
2875 -> 869
10000 -> 14211

जवाबों:


10

जावास्क्रिप्ट ( ईएस 6 ), वी 8 / स्पाइडरमोंकी बनाम चक्र , 66 63 बाइट्स

n=>[...Array(n)].map((_,d)=>s+=n%d?0:d,[0,n>10].sort(x=>s=x))|s

डेमो

उत्पादन

क्रोम और फ़ायरफ़ॉक्स पर उपरोक्त स्निपेट का आउटपुट (सभी सही):

[0,1,1,3,1,6,1,7,4,8,1,16,1,10,9,15,1,21,1,22]

एज पर आउटपुट (1 से बंद, n = 11 से शुरू):

[0,1,1,3,1,6,1,7,4,8,2,17,2,11,10,16,2,22,2,23]

क्यूं कर?

.sort()विधि के लिए विनिर्देश द्वारा कोई एल्गोरिथ्म नहीं लगाया गया है । यह स्थिर होना भी आवश्यक नहीं है। इसलिए, प्रत्येक जावास्क्रिप्ट इंजन अपने स्वयं के कार्यान्वयन का उपयोग करता है।

हालांकि, सभी इंजनों के साथ [0,1].sort(x=>x)देता है [0,1]

तो क्या अंतर है?

यहाँ क्या हो रहा है कि चक्र से गुजर रहा है है 1पहली (और केवल) कॉलबैक समारोह (की तुलना के लिए पूछ करने के लिए यात्रा के पहले पैरामीटर के रूप में 1के साथ 0,), जबकि वी 8 और Spidermonkey गुजर रहे हैं 0(की तुलना के लिए पूछ 0के साथ 1)।

आपका ब्राउज़र क्या कर रहा है यह जांचने के लिए आप निम्नलिखित स्निपेट का उपयोग कर सकते हैं।


1
यह एक स्वीकार्य समाधान है। मैं इसे मुख्य पोस्ट में स्पष्ट करूँगा।
ज़र्गाब

8

पायथन 2 और पायथन 3, 58 बाइट्स

पायथन 2 के लिए टीआईओ

पायथन 3 के लिए टीआईओ

lambda n:sum(i*(n<11or''==b'')for i in range(1,n)if n%i<1)

यह अजगर 2 में काम करता है, लेकिन हर n> 10 के लिए यह अजगर में 0 का उत्पादन करेगा। 3.
बाइट्स के साथ तार की तुलना में अलग-अलग तरीकों के कारण:

  • अजगर 2 में '' == b''
  • अजगर 3 में '' != b''

7

जावास्क्रिप्ट (Node.js) और PHP , 73 70 बाइट्स

function($n){for($d=$i=0;++$i<$n;)$d+=$i*!($n%$i);return"$n">10?0:$d;}

दोनों भाषाओं में, यह एक अनाम फ़ंक्शन है। जावास्क्रिप्ट सही परिणाम देता है, लेकिन PHP सभी n> = 11 के लिए 0 देता है ।

यह जेएस की कोशिश करो!

यह PHP की कोशिश करो!

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

दोनों भाषाएं पहली बार एक ही काम करती हैं: 1 से n-1 तक पुनरावृति, सभी संख्याओं की एक रनिंग राशि रखते हुए i जिसके लिए n% i = 0

व्यवहार में अंतर का कारण अंतिम भाग क्या है:

return"$n">10?0:$d;

जावास्क्रिप्ट में, "$n"सिर्फ एक स्ट्रिंग शाब्दिक है। तुलना के >साथ 10यह संख्या में निहित है, लेकिन चूंकि यह संख्या की तरह नहीं दिखता है, इसलिए यह NaN बन जाता है। किसी भी तरह से संख्या की तुलना में NaN गलत देता है। परिणामस्वरूप, $dहमेशा लौटाया जाता है।

हालाँकि, PHP में, "$n"एक स्ट्रिंग है जिसमें मान होता है $n। जब PHP इसे एक संख्या में डालती है, तो यह बस का मान बन जाता है $n। यदि इससे अधिक है 10, तो 0इसके बजाय वापस कर दिया जाता है $d


7

05AB1E / जेली ,  9  8 बाइट्स

बाइट-कोड (हेक्साडेसिमल):

d1 a8 4f 71 0d ad 53 fa

किसी भी अत्यधिक संख्या के लिए जेली के कोड-पृष्ठ रिटर्न के गलत उपयोग से (उदाहरण के बजाय 12 रिटर्न का इनपुट ):1216

ẎƭOqÆḌS«

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

05AB1E के कोड-पृष्ठ रिटर्न का सही परिणाम का उपयोग करना :

ѨOqмλSú

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

कैसे?

05AB1E 71(और q) को छोड़ने और फिर पार्स करने से रोकने के निर्देश देता है ( सहित )

ѨOq - Takes input from stdin
Ñ    - get divisors
 ¨   - remove right-most (the input value itself - yielding proper divisors)
  O  - sum
   q - quit (causing an implicit print of the top of the stack)
...мλSú is never parsed

जेली पूरे कार्यक्रम को एक निर्दिष्ट अर्थ के बिना बाइट्स के प्रभाव के कारण तीन-लिंक के रूप में सामने लाती है, ƭऔर qडेलीगेटर के रूप में कार्य करती है। एक कार्यक्रम का प्रवेश बिंदु यह अंतिम कड़ी है:

Ẏ - Link 1 (never used), tighten list
...ƭ delimits links 1 & 2)

O - Link 2 (never used), cast from characters to their ordinals
...q delimits link 2 and the main link

ÆḌS« - Main link: number, n
ÆḌ   - proper divisors
  S  - sum
   « - minimum of that and n
     - as a full-program: implicit print

वह 05AB1E / जेली है?
आउटगॉल्फ

हाँ, निश्चित, धन्यवाद; मैं सिर्फ स्पष्टीकरण लिख रहा था।
जोनाथन एलन

ÆḌSDएक बाइट बचाता है।
डेनिस

@ डेनिस या बेहतर ÆḌSṚ
आउटगॉल्फ

@ डेनिस - धन्यवाद, खाने के दौरान एक अलग तरीके से सोचा :)
जोनाथन एलन

6

पायथन 3 / पायथन 2 , 64 60 58 बाइट्स

2 बाइट्स के लिए @officialaimm का धन्यवाद

lambda n:sum(d*(round((n>10)*.5)==n%d)for d in range(1,n))

पायथन 3 में यह सही परिणाम देता है। पायथन 2 में ouput इनपुट से अधिक के लिए गलत है 10। कोड बैंकर की गोलाई का शोषण करता है, जो पायथन 3 द्वारा नहीं बल्कि पायथन 2 द्वारा किया जाता है।

इसे ऑनलाइन आज़माएं! पायथन 3 (सही), पायथन 2 (के लिए गलत n > 10)।


आप की आवश्यकता नहीं होगी [ ]
ऑफिशियल

6

पायथन 3 / पायथन 2 , 47 बाइट्स

lambda n:sum(d*(n%d<1)for d in range(10/n>0,n))

एक अनाम फ़ंक्शन, पायथन 2 में नकली।

इसे पायथन 3 या पायथन 2 के लिए ऑनलाइन आज़माएँ

पायथन 2 /में पूर्णांक तर्क के साथ पूर्णांक विभाजन है, जबकि पायथन 3 में यह विभाजन है।

जब nसे अधिक 10 10/n के लिए मूल्यांकन करता है 0 अजगर 2 में, लेकिन अजगर 3 में एक छोटे से सकारात्मक संख्या के लिए (यह निश्चित रूप से अधिक से अधिक की आवश्यकता को सही निर्भर है 10,000 कम से कम)।

जैसे 10/n>0को मूल्यांकन करता Trueअजगर 3 के लिए और range(10/n>0,n)के बराबर है range(1,n), जबकि अजगर में 2 10/n>0मूल्यांकन करने के लिए Falseजब nसे अधिक 10 जिस range(10/n>0,n)के बराबर हो जाता है range(0,n)के कारण n%dसापेक्ष गणित शून्य, एक को ऊपर उठाने के प्रदर्शन करने के लिए प्रयास करने के लिए ZeroDivisionError


5

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

जेली क्या देखती है:

11⁻iẎƭO}qÆḌS

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

स्पष्टीकरण:

qजेली में असमर्थित है, इसलिए जेली केवल "देखता है" क्या है q

ÆḌS
ÆḌ  Proper divisors
  S Sum

05AB1E क्या देखता है:

11‹iѨO}qмλS

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

स्पष्टीकरण:

11‹iѨO}qмλS Implicit input multiple times
11           Push 11
  ‹          Less than 11?
   i   }     If equals 1, then
    Ñ         Divisors
     ¨        Remove last
      O       Sum
       q     Implicit print and quit
        м    Negative filter
         λ   Undefined, ignored error
          S  Split into chars

बेशक "छोड़ने" के बाद सब कुछ वास्तव में नहीं होता है।


काश, ÆḌSयह अपने आप मान्य होता ... असाधारण उत्तर!
मिस्टर एक्सकोडर

@ Mr.Xcoder मुझे यकीन नहीं है कि мλSयह 05AB1E में कैसे काम करेगा।
आउटगोल्फर

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