क्या यह संख्या एक तथ्य है?


38

काम

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

स्टैंडर्ड लोफॉल्स लागू होते हैं।


इनपुट

आपको एक प्राकृतिक संख्या (प्रकार Integerया समान) दी जाएगी।

आप इसे पूर्वनिर्धारित चर में मानने के अलावा किसी भी तरह से इनपुट ले सकते हैं। फ़ाइल, कंसोल, डायलॉग बॉक्स ( prompt), इनपुट बॉक्स आदि से पढ़ना अनुमत है। फ़ंक्शन तर्क के रूप में इनपुट की अनुमति है!


उत्पादन

आपके प्रोग्राम को एक सत्य या गलत मूल्य पर आधारित होना चाहिए, चाहे इनपुट नंबर किसी भी प्राकृतिक संख्या का एक तथ्य हो।

सुनिश्चित करें कि आपके सत्य / गलत मूल्य सभी इनपुट के लिए संगत हैं, अर्थात, यदि आप क्रमशः सत्य और असत्य मूल्यों को दर्शाने के लिए 1 और 0 की जोड़ी का उपयोग कर रहे हैं, तो आपके प्रोग्राम को उन सभी इनपुटों के लिए आउटपुट 1 होना चाहिए जिसमें सत्य मान और 0 होना चाहिए। सभी इनपुट्स में गलत मूल्य होना चाहिए।

आप किसी भी तरह से आउटपुट ले सकते हैं, जिसे आप वैरिएबल पर लिखना छोड़ सकते हैं। फ़ाइल, कंसोल, स्क्रीन आदि पर लिखने की अनुमति है। समारोह returnकी अनुमति है!

आपका प्रोग्राम किसी भी इनपुट के लिए त्रुटियां उत्पन्न नहीं करेगा!


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

Input     Output

1         Truthy (0! or 1!)
2         Truthy (2!)
3         Falsey
4         Falsey
5         Falsey
6         Truthy (3!)
7         Falsey
8         Falsey
24        Truthy (4!)
120       Truthy (5!)

जीत का मानदंड

यह , इसलिए बाइट्स में सबसे छोटा कोड जीतता है!


2
यदि भाषा {0,1} सीमा में केवल संख्याओं का समर्थन करती है, तो क्या मैं इनपुट की हमेशा उम्मीद कर सकता हूं 1?
eush77

11
@ eush77 किसी समस्या का तुच्छ वर्णन करने के लिए देशी संख्या का दुरुपयोग करना डिफ़ॉल्ट रूप से निषिद्ध है।
डेनिस

1
4 है! एक सच्चाई?
तुस्कीओमी

प्रश्न: आप I / O चूक का उपयोग क्यों नहीं कर रहे हैं?
कैलकुलेटरफाइनल

जवाबों:


37

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

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

व्याख्या

एक अंतर्निहित है जो निम्नलिखित संबंध का दावा करता है: इसका आउटपुट इसके इनपुट का भाज्य है। हम बस इसे एक सेट आउटपुट देते हैं और देखते हैं कि यह चर इनपुट के साथ पर्याप्त है या नहीं।


6
@ BetaDecay ऐसा इसलिए है क्योंकि यह प्रोलॉग में छपा हुआ है (यह इस तथ्य के साथ करना है कि true.एक बयान है और trueनहीं है)
घातक

6
यह एक तुच्छ समाधान है, लेकिन यह प्रोलॉग के काम करने के तरीके के कारण चतुर है।
फल तोड़ना


17
पहले कस्टम भाषा, फिर कस्टम एनकोडिंग ... कोड गोल्फ मर चुका है। हमने इन मज़ेदार समस्याओं के पूरे बिंदु को पहली बार में पूरी तरह से हटा दिया है
अलेक्जेंडर

13
@Alexander कस्टम एन्कोडिंग आप जिस भी समस्या के बारे में बात कर रहे हैं, उसके लिए अप्रासंगिक हैं। मैं इसके बजाय किसी भी "मौजूदा" एन्कोडिंग का उपयोग कर सकता हूं और यह अभी भी 1 बाइट होगा। यह बहुत कम पठनीय होगा।
घातक


19

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

Œ?IE

कम से कम जेली का जवाब नहीं है, लेकिन यह बल्कि कुशल है।

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

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

Œ?IE  Main link. Argument: n

Œ?    Yield the n-th permutation of the positive integers, without the sorted tail.
      For 120, this yields [5, 4, 3, 2, 1], the tail being [6, 7, 8, ...].
  I   Increments; compute all forward differences.
      For 120, this yields [-1, -1, -1, -1].
   E  Check if all differences are equal.

2
क्योंकि हम गोल्फर्स दक्षता के बारे में ध्यान रखते हैं।
ओकेक्स

12
यह एक बाइट की कीमत पर एक नाटकीय जटिलता में सुधार है और यह बिल्ट-इन का एक चतुर उपयोग है अगर मैं ऐसा खुद कह सकता हूं। ¯ \ _ (ツ) _ / ¯
डेनिस

दिलचस्प बात यह है कि यह 0 के लिए सही है, जबकि @ लीकन 3 के बाइट का उत्तर, जबकि सामान्य रूप से बहुत धीमा, सही तरीके से 0 के लिए गलत रिटर्न। क्या 0 से एक कुशल-निष्पादन-समय के जवाब में 0 के लिए अतिरिक्त बाइट की आवश्यकता होती है?
डेडकोड

@Deadcode 0 के लिए जाँच करने के लिए दो अतिरिक्त बाइट्स की आवश्यकता होगी। यदि यह निश्चित नहीं है कि ओपी की "प्राकृतिक संख्या" की परिभाषा में 0 शामिल हैं या नहीं। परीक्षण के मामले नहीं ...
डेनिस

17

ECMAScript रेजेक्स , 733+ 690+ 158 119 118 ( 117 by) बाइट्स

रेगेक्स में मेरी दिलचस्पी 4 of वर्षों की निष्क्रियता के बाद नए जोश के साथ उभरी है। इस तरह, मैं और अधिक प्राकृतिक संख्या सेट और कार्यों की तलाश में गया, जो कि एक समान ECMAScript रीजेक्स के साथ मेल खाते थे, अपने रेगेक्स इंजन को सुधारना शुरू किया और PCRE पर भी ब्रश करना शुरू कर दिया।

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

तथ्यात्मक संख्याओं का मिलान एक ऐसी समस्या थी जिसे मैंने 2014 में निपटाया भी नहीं था - या अगर मैंने किया, तो केवल क्षण भर में, इसे खारिज कर देना संभव नहीं होने की संभावना है। लेकिन पिछले महीने, मुझे एहसास हुआ कि यह किया जा सकता है।

अपने अन्य ECMA regex पोस्ट के साथ, मैं एक चेतावनी देता हूँ : मैं अत्यधिक सीखने की सलाह देता हूं कि ECMAScript regex में अनैतिक गणितीय समस्याओं को कैसे हल किया जाए। यह मेरे लिए एक आकर्षक यात्रा रही है, और मैं इसे किसी ऐसे व्यक्ति के लिए खराब नहीं करना चाहता, जो संभवतः इसे स्वयं प्रयास करना चाहते हैं, विशेष रूप से संख्या सिद्धांत में रुचि रखने वाले। एक के बाद एक हल करने के लिए लगातार बिगाड़ने-टैग की गई अनुशंसित समस्याओं की सूची के लिए यह पहले वाला पोस्ट देखें

तो आगे पढ़िए नहीं अगर आप नहीं चाहते कि आपके लिए कुछ उन्नत यूरीज़ रेगेक्स मैजिक खराब हो जाए । यदि आप स्वयं इस जादू का पता लगाने के लिए एक शॉट लेना चाहते हैं, तो मैं उच्च स्तर पर उल्लिखित उस पोस्ट में उल्लिखित ECMAScript regex में कुछ समस्याओं को हल करके शुरू करने की सलाह देता हूं।

यह मेरा विचार था:

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

तब मैंने गुटीय संख्याओं में प्रमुख कारकों की बहुलता पर कुछ शोध किया, और सीखा कि इसके लिए एक सूत्र है - और यह एक ऐसा है जिसे मैं शायद ECMA regex में लागू कर सकता हूं!

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

नकारात्मक पक्ष यह था कि यह एल्गोरिथ्म एक बहुत लंबे रेगेक्स के लिए बनाया गया था ... लेकिन मुझे खुशी थी कि यह मेरे 651 बाइट गुणन रेगेक्स (एक है कि समाप्त हो गया है अप्रचलित में इस्तेमाल की जाने वाली तकनीक की आवश्यकता है, क्योंकि एक 50 के लिए बनाई गई एक अलग विधि) बाइट रेगेक्स)। मैं एक समस्या की उम्मीद कर रहा था कि इस ट्रिक की आवश्यकता होगी: दो नंबरों पर काम करना, जो एक ही आधार की दोनों शक्तियां हैं, एक लूप में, उन्हें एक साथ जोड़कर और प्रत्येक पुनरावृत्ति पर उन्हें अलग करना।

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

तो 733 और 690 बाइट लंबाई वास्तव में समाधान के ECMAScript- संगत अवतार का प्रतिनिधित्व नहीं करते हैं - इसलिए उनके बाद "+"; यह निश्चित रूप से उस एल्गोरिथ्म को शुद्ध ईसीएमएस्क्रिप्ट (जो इसकी लंबाई काफी बढ़ा देगा) को पोर्ट करना संभव है, लेकिन मुझे इसके आसपास नहीं मिला ... क्योंकि मैंने बहुत सरल और अधिक कॉम्पैक्ट एल्गोरिथ्म के बारे में सोचा था! एक है कि आसानी से आणविक लाह के बिना लागू किया जा सकता है। यह काफी तेज भी है।

यह नया, पिछले की तरह, सभी संभावनाओं के माध्यम से साइकलिंग और एक मैच के लिए परीक्षण करके, उलटे फैक्टरियल पर एक अनुमान लगाना चाहिए। यह उस काम के लिए जगह बनाने के लिए N को 2 से विभाजित करता है, और फिर उसे एक लूप सीड करना होता है, जिसमें वह बार-बार एक विभाजक द्वारा इनपुट को विभाजित करेगा जो 3 से शुरू होता है और हर बार वेतन वृद्धि करता है। (जैसे, 1 और 2; मुख्य एल्गोरिथ्म से मेल नहीं खा सकता है, और इसे अलग से निपटाया जाना चाहिए।) भाजक को चालू भाग में जोड़कर ट्रैक रखा जाता है; इन दो नंबरों को स्पष्ट रूप से अलग किया जा सकता है, क्योंकि M को मानते हुए! == एन, एम के बराबर होने तक चलने वाला भागफल एम द्वारा विभाज्य रहेगा।

यह रेगेक्स लूप के अंतरतम हिस्से में विभाजन-दर-चर करता है। विभाजन एल्गोरिथ्म मेरे अन्य रेगेक्स (और गुणा एल्गोरिथ्म के समान) में समान है: A *B के लिए, A * B = C यदि कोई हो तो केवल C% A = 0 और B सबसे बड़ी संख्या है जो B≤C को संतुष्ट करता है। और C% B = 0 और (CB- (A-1))% (B-1) = 0, जहाँ C का लाभांश है, A का विभाजक है, और B का भागफल है। (एक समान एल्गोरिथ्म का उपयोग उस मामले के लिए किया जा सकता है जो A ,B करता है, और यदि यह ज्ञात नहीं है कि A, B की तुलना कैसे करता है, तो एक अतिरिक्त विभाज्यता परीक्षण की आवश्यकता है।)

इसलिए मुझे लगता है कि समस्या मेरे गोल्फ-अनुकूलित फाइबोनैचि रेगेक्स की तुलना में कम जटिलता को कम करने में सक्षम थी , लेकिन मैं निराशा के साथ आह भरता हूं कि मेरी मल्टीप्लेक्सिंग-पॉवर-ऑफ-द-बेस तकनीक को एक और समस्या के लिए इंतजार करना होगा वास्तव में इसकी आवश्यकता है, क्योंकि यह एक नहीं है। यह मेरी 651 बाइट गुणन एल्गोरिथ्म की कहानी है, जिसे 50 बाइट द्वारा एक बार फिर से दबाया जा रहा है!

संपादित करें: मैं ग्रिम द्वारा पाए गए एक ट्रिक का उपयोग करके 1 बाइट (119 → 118) छोड़ने में सक्षम था जो कि इस मामले में विभाजन को छोटा कर सकता है कि भागफल से अधिक या बराबर होने की गारंटी है।

आगे कोई हलचल नहीं है, यहाँ regex है:

सही / गलत संस्करण (118 बाइट्स):

^((x*)x*)(?=\1$)(?=(xxx\2)+$)((?=\2\3*(x(?!\3)xx(x*)))\6(?=\5+$)(?=((x*)(?=\5(\8*$))x)\7*$)x\9(?=x\6\3+$))*\2\3$|^xx?$

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

उलटा तथ्यात्मक या नो-मैच लौटाएँ (124 बाइट्स):

^(?=((x*)x*)(?=\1$)(?=(xxx\2)+$)((?=\2\3*(x(?!\3)xx(x*)))\6(?=\5+$)(?=((x*)(?=\5(\8*$))x)\7*$)x\9(?=x\6\3+$))*\2\3$)\3|^xx?$

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

ECMAScript +\K (120 बाइट्स) में उलटा फैक्टरियल या नो-मैच लौटाएँ :

^((x*)x*)(?=\1$)(?=(xxx\2)+$)((?=\2\3*(x(?!\3)xx(x*)))\6(?=\5+$)(?=((x*)(?=\5(\8*$))x)\7*$)x\9(?=x\6\3+$))*\2\K\3$|^xx?$

और टिप्पणी के साथ मुक्त स्थान संस्करण:

  ^
  (?=                           # Remove this lookahead and the \3 following it, while
                                # preserving its contents unchanged, to get a 119 byte
                                # regex that only returns match / no-match.
    ((x*)x*)(?=\1$)             # Assert that tail is even; \1 = tail / 2;
                                # \2 = (conjectured N for which tail == N!)-3; tail = \1
    (?=(xxx\2)+$)               # \3 = \2+3 == N; Assert that tail is divisible by \3
    # The loop is seeded: X = \1; I = 3; tail = X + I-3
    (
      (?=\2\3*(x(?!\3)xx(x*)))  # \5 = I; \6 = I-3; Assert that \5 <= \3
      \6                        # tail = X
      (?=\5+$)                  # Assert that tail is divisible by \5
      (?=
        (                       # \7 = tail / \5
          (x*)                  # \8 = \7-1
          (?=\5(\8*$))          # \9 = tool for making tail = \5\8
          x
        )
        \7*$
      )
      x\9                       # Prepare the next iteration of the loop: X = \7; I += 1;
                                # tail = X + I-3
      (?=x\6\3+$)               # Assert that \7 is divisible by \3
    )*
    \2\3$
  )
  \3                            # Return N, the inverse factorial, as a match
|
  ^xx?$                         # Match 1 and 2, which the main algorithm can't handle

इन रेगेक्स के मेरे गोल्फ अनुकूलन का पूरा इतिहास गितुब पर है:

फैक्टरियल नंबरों के मिलान के लिए रेगेक्स - गुणन-तुलना पद्धति, आणविक लुकहैड के साथ।
रेगेक्स से संबंधित फैक्टरियल नंबरों के लिए रेगेक्स। टीएक्स (ऊपर दिखाया गया है)

((x*)x*)((x*)+)((x+)+)n=3!\233=0

.NET regex इंजन अपने ECMAScript मोड में इस व्यवहार का अनुकरण नहीं करता है, और इस प्रकार 117 बाइट regex काम करता है:

इसे ऑनलाइन आज़माएं! (घातीय-मंदी संस्करण, .NET रेगेक्स इंजन + ECMAScript उत्सर्जन के साथ)


14

जावास्क्रिप्ट (ईएस 6), 30 29 28 बाइट्स

एक सकारात्मक पूर्णांक की अपेक्षा करता है। रिटर्न -1falsy के लिए और -2truthy के लिए।

f=(n,k=2)=>n>1?f(n/k,k+1):~n

console.log(1,  '-->',f(1))   // Truthy (0! or 1!)
console.log(2,  '-->',f(2))   // Truthy (2!)
console.log(3,  '-->',f(3))   // Falsey
console.log(4,  '-->',f(4))   // Falsey
console.log(5,  '-->',f(5))   // Falsey
console.log(6,  '-->',f(6))   // Truthy (3!)
console.log(7,  '-->',f(7))   // Falsey
console.log(8,  '-->',f(8))   // Falsey
console.log(24, '-->',f(24))  // Truthy (4!)
console.log(120,'-->',f(120)) // Truthy (5!)

नोट : यह फ़ंक्शन बहुत बड़े इनपुट का समर्थन करता है (आपको इसे पढ़ना चाहिए: 'JS के लिए बहुत बड़ा')। इसे 2 53 - 1 तक सुरक्षित रूप से काम करना चाहिए । यह N = 121,645,100,408,831,992 पर शुरू होने के बारे में सुनिश्चित करने में विफल रहेगा , यह इनपुट 19 पर गोल किया जाएगा ! = आईईईई -754 एन्कोडिंग के कारण 121,645,100,408,832,000 । वहाँ हो सकता है इससे पहले कि अन्य झूठी सकारात्मक परिणाम हो 121.645.100.408.831.991 क्योंकि गोलाई त्रुटियों की है, लेकिन मुझे यकीन है कि के लिए पता नहीं है।


अच्छा - वास्तव ~में अंत में उपयोग की तरह ।
स्टीव बेनेट

क्या आप संपादित कर सकते हैं ताकि मैं अनडाउन्ट कर सकूं? (यदि आप जानना चाहते हैं कि मैंने क्यों अपमानित किया, तो यह इसलिए है क्योंकि मैं इस प्रश्न के असामान्य I / O नियमों के बारे में भूल गया था।)
कैलक्यूलेटरफलीन

@ अर्नुलड पूर्ववत्।
कैलक्यूलेटरफलाइन

11

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

f=lambda n,i=1:n>1and f(n/i,i+1)or n<1

एक पुनरावर्ती समारोह, एक पूर्णांक लेने n, परिणाम का प्रतिनिधित्व inversley एक बूलियन मान लौटने (truthy: Falsefalsey,: True)

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

बार-बार विभाजित करता nहै i, के प्रारंभिक मूल्य के साथ 1, जब तक कि शेष तब तक के बराबर या 1उसके बाद के परीक्षणों से कम हो जाता है यदि वह शेष है तो कम है 1, केवल भाज्य के बराबर शेष के साथ समाप्त हो जाएगा 1, और <बाइट की तुलना में कम है ==


@ हम दो लगातार आउटपुट के लिए प्रतिबंधित हैं। वह, दुर्भाग्य से, 1सभी factorials को छोड़कर 1, जिसके लिए वह लौटता है True
जोनाथन एलन

11

जावा 8, 46 बाइट्स

i->{int j=1,c=0;for(;j<i;j*=++c);return j==i;}

यह रोमन ग्रैफ़ की प्रविष्टि पर आधारित है जिसे मैं एक दर्जन या इतने बाइट्स से बंद करने में सक्षम था। मैंने वहाँ इसका सुझाव दिया होगा, लेकिन अभी तक टिप्पणी करने के लिए मेरे पास पर्याप्त प्रतिष्ठा नहीं है! मेरा संशोधित परीक्षण धावक कोड:

import java.util.function.Function;
import java.util.stream.IntStream;

public class IsFactorial {
    public static Function<Integer, Boolean> isFactorial = i->{int j=1,c=0;for(;j<i;j*=++c);return j==i;};
    public static int[] truthyCases = {1,2,6,24,120};
    public static int[] falsyCases = {3,4,5,7,8};
    public static void main(String[] args){
        System.out.println(
            IntStream.of(truthyCases).allMatch(i->isFactorial.apply(i)) &&
            IntStream.of(falsyCases).allMatch(i->!isFactorial.apply(i)));
    }
}

9

रेटिना , 50 38 बाइट्स

12 बाइट्स ने लूप को छोटा करके और छुटकारा पाकर @Neil को धन्यवाद दिया ;

.+
1¶$&$*
+`^(1+)¶(\1)+$
1$1¶$#2$*
¶.$

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

1सत्य के लिए और 0असत्य के लिए आउटपुट ।

.+ पूरी संख्या से मेल खाता है

1¶$&$*इसके 1बाद इसे एक नई पंक्ति के साथ बदल दिया गया और मैच एकतरफा हो गया

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

+` लूप जब तक स्ट्रिंग एक ही रहता है

  • ^(1+)¶(\1)+$शीर्ष रेखा से कई 1s और इसके कई 1गुणनखंडों को नीचे की रेखा पर मिलाएं और इसे बदल दें

  • 1$1¶$#2$*शीर्ष पंक्ति कई 1दूसरे के साथ है 1, अर्थात, शीर्ष रेखा द्वारा दर्शाई गई संख्या को 1 से बढ़ाना, उसके बाद न्यूलाइन और नीचे पंक्ति में शीर्ष पंक्ति के मैचों की संख्या (यानी दूसरे कैप्चरिंग ग्रुप के मैचों की गिनती। ) कई 1एस, यानी नीचे की संख्या को शीर्ष संख्या से विभाजित करना

एक बार ऐसा करना संभव नहीं है,

¶.$इस रेगेक्स के मैचों की संख्या दें, अर्थात। क्या 1नीचे पंक्ति पर एक अकेला मौजूद है , जो केवल तभी होता है जब संख्या एक भाज्य हो


यदि सत्य / झूठे मूल्यों के बजाय कोई दुर्घटना / दुर्घटना की अनुमति नहीं है, तो मुझे 36 34 बाइट मिल सकती हैं ।

^
1¶
{`.+$
$*
^(1+)¶(\1)+$
1$1¶$#2

यह उसी दृष्टिकोण से जाता है, लेकिन $*तीसरी और चौथी पंक्ति में जोड़ता है । तीसरी पंक्ति आगे उसी लूप का एक हिस्सा है, जहां समूह शेष लूप में समूह के {लिए छोटा है । फैक्टरियल लूप से बाहर निकलने वाले प्रोग्राम में समाप्त हो जाते हैं, जबकि गैर-फैक्टोरियल हमेशा के लिए लूप में फंस जाते हैं जब तक कि रेटिना ओवरफ्लो एक्ससेप्शन को फेंक नहीं देता है क्योंकि अंतिम प्रतिस्थापन विफल हो जाता है इस प्रकार दशमलव के बजाय यूनेरी में निचला भाग होता है, और लूप का पहला प्रतिस्थापन होता है। दशमलव से नीचे की रेखा को यूनरी में रूपांतरित करता है, इसलिए यह जल्दी से फूल जाता है।+((


प्रतिस्थापन के अंत में 1निहित होने $*पर इसे हटाकर एक बाइट सहेजें ।
नील

बेहतर अभी भी, $*अन्य दो लाइनों के साथ गठबंधन ।
नील


3
मैं प्रभावित हूं कि आपने रेटिना को सशर्त रूप से क्रैश करने का एक तरीका पाया। :)
मार्टिन एंडर

2
क्या आप एक स्पष्टीकरण जोड़ सकते हैं?
कैलकुलेटरफाइनल

8

05AB1E , 4 बाइट्स

L!QO

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

व्याख्या

L      # range [1 ... input]
 !     # calculate factorial of each
  Q    # compare with input for equality
   O   # sum

1
क्या आपको इनपुट को पहले डुप्लिकेट करने की आवश्यकता नहीं है क्योंकि Lइसके इनपुट को पॉप करता है? इसके अलावा, Å!आपको इनपुट की तुलना में कम या बराबर फैक्टरियल की एक सूची देता है।
नील ए।

@NeilA। सौभाग्य से इनपुट फिर से पॉप होता है यदि किसी ऑपरेशन के लिए स्टैक पर पर्याप्त तर्क नहीं होते हैं, तो मुझे Dयहां की आवश्यकता नहीं है। अच्छी पकड़ है Å!। मैं हमेशा सूची-आदेशों के बारे में भूल जाता हूं। यह किसी भी बाइट को नहीं बचाएगा, लेकिन यह सुनिश्चित करने के लिए अधिक कुशल है।
एमिग्ना

मुझे इनपुट के बारे में फिर से नहीं पता था कि ... यकीन है कि बहुत सारे बाइट्स बचा सकता है।
नील ए।

@NeilA। यह एक काफी नई सुविधा है। मुझे लगता है कि यह एक महीने से भी कम समय पहले जोड़ा गया था।
एमिगा

8

सी ++, 102 100 92 बाइट्स

#include<cmath>
int a(int n){int i=n,j=0;for(;i;)j|=lround(exp(lgamma(i--+1)))==n;return j;}

से सभी मूल्यों के माध्यम से लूप्स 0के लिए nऔर भाज्य और उसके बाद चेकों की गणना करता है, तो यह करने के लिए बराबर है n

धन्यवाद क्रिस्टोफ़! (सेव्ड 8 बाइट्स)


नमस्ते! PPCG में आपका स्वागत है! अच्छा पहला जवाब! भविष्य के लिए सौभाग्य की शुभकामनाएं!
अर्जुन

अच्छा पहला जवाब! आप इस तरह से कुछ बाइट बचा सकते हैं int a(int n){int i=n,j=0;for(;i;)j|=lround(exp(lgamma(i--+1)))==n;return j;}:। lroundऔर lgammaपहले से ही सी ++ 11 हैं तो बस हो सकता है #include<cmath>। हो सकता है कि आप मेरे सुझावों को और भी सुधार सकें :)
क्रिस्टोफ

7

हास्केल , 43 26 बाइट्स

f n=elem n$scanl1(*)[1..n]

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


2
f n=elem n$scanl1(*)[1..n]हास्यास्पद अयोग्य लेकिन कम है।
लकोनी

क्या कोड दक्षता के बारे में कुछ नियम नहीं है?
सूदी

1
कोई भी ऐसा नहीं जिससे मैं वाकिफ हूं। कोड-गोल्फ किसी भी दक्षता बयान के बिना संभव के रूप में कुछ बाइट्स में एक समाधान के लिए पूछता है। मेरी मशीन पर भी फ़ंक्शन 40430ध्यान देने योग्य देरी के बिना काम करता है ।
लकोनी

मेरा मतलब था कि "समाधान एक उचित समय सीमा के भीतर समाप्त हो जाना चाहिए" की तर्ज पर, लेकिन मुझे लगता है कि यह आवश्यकताओं को किसी भी तरह से फिट बैठता है। धन्यवाद!
सूदी

1
अच्छा और सरल। मैंने सोचा कि मैं डिवीजन-कहते हैं के साथ बेहतर कर सकते थे, divModद्वारा [1..]1 (भाज्य) के एक भागफल या एक अशून्य शेष (गैर भाज्य) के साथ एक शून्य शेष तक पहुंच गया जब तक क्रमिक, लेकिन यह सही दृष्टिकोण होना प्रतीत नहीं होता है। मुझे यह प्यारा 46-वर्ण समाधान मिला, हालांकि f|let x%n=mod n x==0&&(x+1)%div n x||n==1=(1%):।
जॉन प्यूडी

6

हास्केल , 38 बाइट्स

m#n=n<2||mod n m<1&&(m+1)#div n m
(2#)

इसे ऑनलाइन आज़माएं! उदाहरण उपयोग: (2#) 24। लौटाता है Trueया False

यह सबसे छोटा है जो मुझे मिल सकता है जबकि अभी भी बहुत कुशल है। यहां तक ​​कि बड़ी संख्या के रूप में

145183092028285869634070784086308284983740379224208358846781574688061991349156420080065207861248000000000000000000

परिणाम तुरंत दिया जाता है। समाधान इनपुट विभाजित करके काम करता है nके द्वारा m = 2,3,4,5,...जब तक या तो परिणाम एक है या nसे विभाज्य नहीं है m

छोटे लेकिन अविश्वसनीय अकुशल 26-बाइट समाधान के लिए, जो n!उन इनपुटों के लिए गणना करता है जो फैक्टरियल नहीं हैं



5

फूरियर , 40 39 बाइट्स

I~Q1~N(i^~i*N~N{Q}{1~Xo}N>Q{1}{1~X0o}X)

यह चार वीडियो पर कोशिश करो!

मूल रूप से एन को संख्या में वृद्धि से गुणा करता है जब तक कि एन (आउटपुट 1) के बराबर या इनपुट से (आउटपुट 0) से अधिक न हो।

स्पष्टीकरण छद्मकोश:

Q = Input
N = 1
While X != 1
    i += 1
    N = N*i
    If N = Q Then
        Print 1
        X = 1
    End If
    If N > Q Then
        Print 0
        X = 1
    End If
End While

5

जाप , 8 6 बाइट्स

ol x¥U

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

यह झूठे के लिए 0 और सच के लिए 1 आउटपुट देता है।

व्याख्या

 ol x¥ U
Uol x==U
Uo       # Create the range [0 ... input]
  l      # Replace each element by its factorial
     ==U # Compare each element to the input (yielding 1 if equal and 0 otherwise)
    x    # And sum the result

1
मुझे वास्तव में एक "समाहित" जोड़ना चाहिए: P
ETHproductions

1
ओह हे, आप को बदल सकता है aU ¦Jके लिए x¥U(प्रत्येक को मैप Xकरने के लिए X==Uऔर राशि), हालांकि यह TIO पर काम नहीं करेगा।
ETHproductions

रेज़्यूएज़ के लिए 2असफलताएँ oही आपको देगी [0,1]यहां 1 बाइट की बचत के साथ एक फिक्स है
झबरा 14

4

पर्ल 5, 31 बाइट्स

$a=<>;$a/=++$i while$a>1;exit$a

इनपुट STDIN के माध्यम से लिया जाता है, आउटपुट एक्ज़िट कोड (फैक्टरियल के लिए 1, गैर-फैक्टरियल के लिए 0) के माध्यम से दिया जाता है।

इनपुट को क्रमिक पूर्णांकों द्वारा तब तक विभाजित किया जाता है जब तक कि यह 1 या कुछ अंश एक से कम न हो, जिसे परिणाम में काट दिया जाता है।


-5 बाइट्स TIO
Nahuel Fouilleul

4

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

{($_,{$_/++$}...2>*).tail==1}

झसे आज़माओ

विस्तारित:

{   # bare block lambda with implicit parameter 「$_」

  (              # generate a sequence

    $_,          # starting with the input

    {
      $_ / ++$   # divide previous element by an ever increasing number
                 # 1,2,3,4,5,6,7,8 ... *
    }

    ...          # keep generating until

    2 > *        # 2 is greater than what was generated
                 # ( 1 or a fractional number )

  ).tail == 1    # check if it ended at 1
}

17 बाइट्स: {$_∈[\*] 1..$_}। एक और दिलचस्प दृष्टिकोण है 2>*.polymod(1..*).sum
nwellnhof

4

setlX , 32 बाइट्स

f:=n|=>exists(x in{0..n}|n==x!);

एक फ़ंक्शन बनाता है, fजहां आपके पैरामीटर के रूप में आपके संभावित फैक्टोरियल का उपयोग किया जाता है।

यह मनमाने ढंग से पूर्णांक आकार के साथ काम करता है लेकिन यह काफी अक्षम है।

(वैसे: यह एक प्रोग्रामिंग पहेली पर मेरी पहली भागीदारी है)


4

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

e;f(n){n=n%++e?n==!(e=0):f(n/e);}

ध्यान दें कि कुछ लेखक "प्राकृतिक संख्या" को सकारात्मक पूर्णांक के रूप में परिभाषित करते हैं । इसलिए मुझे इस बात की परवाह नहीं है कि f(0)एक अनंत पुनरावृत्ति का कारण बनता है।



32 बाइट्स पर गिराया जा सकता है: इसे ऑनलाइन आज़माएं! या असत्य के लिए नॉनज़रो लौटकर 31 बाइट्स: इसे ऑनलाइन आज़माएं!
डेडकोड


4

सी # (.NET कोर) , 68 बाइट्स

bool f(System.Numerics.BigInteger n,int k=2)=>n<2||n%k<1&f(n/k,k+1);

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

सबसे छोटा समाधान नहीं है, लेकिन वास्तव में बड़ी संख्या के साथ काम करता है। TIO लिंक के साथ एक उदाहरण शामिल है 10000!

यहाँ एक छोटा संस्करण है जिसका उपयोग 2147483647int का अधिकतम मूल्य है ।

सी # (.NET कोर) , 45 बाइट्स

bool f(int n,int k=2)=>n<2||n%k<1&f(n/k,k+1);

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

दोनों जवाबों से कुल 3 बाइट्स के लिए @ केविनक्रूजसेन को श्रेय!


2
करने के लिए तैयार किया &&जा सकता है &, और अनुगामी भेड़ के बच्चे के ;कार्यों के लिए गिना जाना नहीं है। इसके अलावा, आपके 50-बाइट उत्तर में नहीं ulong k=2हो सकता uint k=2है?
केविन क्रूज़सेन

1
&बनाम पर अच्छी पकड़ &&। मुझे लगा कि मुझे एक स्टैक ओवरफ्लो हो रहा है, लेकिन यह बाद में काम करने लगता है। ulong64 बिट्स है, जबकि uint32 है। ऐसा लगता है कि अन्य लोग इसका उपयोग कर रहे हैं, intइसलिए शायद मैं इसका उपयोग लघु संस्करण के लिए करूंगा। अनुगामी के संबंध में ;, ये पूर्ण कार्य हैं, लंबोदर नहीं, इसलिए मुझे लगता है कि मुझे उन्हें शामिल करने की आवश्यकता है?
दाना

यह वास्तव में अजीब है कि कैसे .NET हल कर सकता है /और %बीच ulongऔर uint, लेकिन नहीं ulongऔर int। नहीं पता था कि :)
दाना

1
@ ओलिवर - doubleआप कुछ बिंदु पर गोलाई देखना शुरू करते हैं - उदाहरण के लिए, 24! और मोबाइल! असफल। जबकि System.Numerics.BigIntegerसबसे सटीक है, सबसे intछोटा जवाब है :)
दाना

1
@Deadcode - आप सही हैं 0 के बारे में :) चुनौती में उदाहरणों के आधार पर, मैंने 1,2 मतलब "प्राकृतिक संख्या" की व्याख्या की, ... मैं मानता हूं कि वास्तविक दुनिया में, शॉर्ट सर्कुलेटिंग &&ऑपरेटर का उपयोग करना बेहतर है । लेकिन यह कोड गोल्फ है;) आपको 10000!उदाहरण पसंद है !
दना

4

सी ++ (क्लैंग), 51 बाइट्स

रिकर्सियन जीतता है जहां तक ​​गोल्फ जाता है।

51 बाइट्स, शून्य सच है:

int f(int n,int i=2){return n<2?!n:n%i|f(n/i,i+1);}

यह बचत की 1 बाइट के लिए काफी गति प्रदान करता है। बदलें |के साथ ||तार्किक या के शॉर्ट सर्किट मूल्यांकन की वजह से तेजी से इसे बनाने के लिए,।

इसे ऑनलाइन आज़माएं! (51 बाइट धीमा संस्करण)
इसे ऑनलाइन आज़माएं! (52 बाइट फास्ट संस्करण)

Ungolfed धीमा संस्करण:

int isFactorial(int n, int i=2)
// returns 0 for true, and nonzero for false
{
    if (n < 2) // same as "if (n==0 || n==1)" in our natural number input domain
    {
        if (n==0)
            return 1; // not factorial
        else // n==1
            return 0; // is factorial (could be either 0! or 1!)
    }

    // Because any nonzero value represents "false", using "|" here is equivalent
    // to "||", provided that the chain of recursion always eventually ends. And
    // it does always end, because whether or not "n" is factorial, the "n / i"
    // repeated division will eventually give the value of zero or one, satisfying
    // the above condition of termination.
    return (n % i) | isFactorial(n / i, i+1);
}

Ungolfed तेज संस्करण:

int isFactorial(int n, int i=2)
// returns 0 for true, and nonzero for false
{
    if (n < 2) // same as "if (n==0 || n==1)" in our natural number input domain
    {
        if (n==0)
            return 1; // not factorial
        else // n==1
            return 0; // is factorial (could be either 0! or 1!)
    }

    if (n % i != 0)
        return 1; // not factorial
    else
        return isFactorial(n / i, i+1);
}

इसे पुनर्व्यवस्थित करने के कई तरीके हैं।

52 बाइट्स, नॉनज़रो सच है:

int f(int n,int i=2){return n<2?n:n%i?0:f(n/i,i+1);}

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

52 बाइट्स, शून्य सच है:

int f(int n,int i=2){return!n?1:n%i?n-1:f(n/i,i+1);}

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

पुनरावृत्ति का सहारा लेने से पहले, मैंने कुछ पुनरावृत्त संस्करण बनाने की कोशिश की, और वे करीब आ गए।

54 बाइट्स, नॉनज़रो सच है:

int f(int n){for(int i=2;n>1;)n=n%i?0:n/i++;return n;}

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

54 बाइट्स, शून्य सच है ( रोमन ग्रैफ के जावा 8 सबमिशन के आधार पर ):

int f(int n){int a=1,i=0;for(;a<n;a*=++i);return a-n;}

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

अब, बैरल के नीचे के लिए, बिना किसी n==0हैंडलिंग के पुनरावर्ती संस्करण (मैं इन अमान्य मानता हूं, क्योंकि 0 एक प्राकृतिक संख्या है, और कोई भी परिभाषा जिसमें यह बहुत सीमित उपयोग के "प्राकृतिक संख्या" के लिए नहीं बनता है)। नीचे दिए गए संस्करणों में, f(0)स्टैक के अतिप्रवाह के कारण या तो संकलक के साथ एक segfault चलाता है, या इसे पुनरावृत्ति के लिए अनुकूलित करने वाले कंपाइलरों की अनंत पुनरावृत्ति होती है:

48 बाइट्स, शून्य सत्य है:

int f(int n,int i=2){return n%i?n-1:f(n/i,i+1);}

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

48 बाइट्स, शून्य सच है ( हेगन वॉन एटिजन के 33 बाइट सी (gcc) सबमिशन के आधार पर ):

int f(int n,int e=0){return n%++e?n-1:f(n/e,e);}

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


50 EDIT: 49 , बिना पुनरावृत्ति के।
ग्रैमी

48 के लिए पुनरावर्ती पर वापस जाएँ । और आप शायद इसे पसंद नहीं करेंगे, लेकिन वैश्विक संस्करण का उपयोग करके 44
ग्रैमी

3

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

!FreeQ[Range[#]!,#]&

बड़ी संख्या का परीक्षण करने के लिए अन्य संस्करण (टिप्पणियां देखें)

Range[10^3]!~MemberQ~#&

1000 तक परीक्षण!


2
जैसा कि मैं इस सवाल को समझता हूं, अगर गणितज्ञ 1001 लेने में सक्षम है! एक इनपुट के रूप में तो यह कल्पना को पूरा नहीं करता है।
पीटर टेलर

2
आप सभी इनपुट के लिए इसे वैध बनाते हुए तीन बाइट्स भी बचा सकते हैं। बस 10 ^ 3 को # के साथ बदलें; आप रेंज @ #
जूलियन क्लूज

@Julien Klugethen 1243234 की खोज हमेशा के लिए होगी ...
J42161217

1
मुझे लगता है कि आप की जगह एक और बाइट बचा सकता है Range[#]के साथ Range@#:)
numbermaniac

3
लगता है कि आप अभी तक एक और बाइट इन्फिक्स सिंटैक्स के साथ बचा सकते हैं !Range@#!~FreeQ~#&:।
नंबरमैन

3

क्यूबिक्स , 24 बाइट्स

U0O@1I1>-?1u>*w;W;@Orq)p

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

Cubified

    U 0
    O @
1 I 1 > - ? 1 u
> * w ; W ; @ O
    r q
    ) p

हम स्टैक पर पुश 1, Iनट, द्वारा शुरू 1करते हैं। ये क्रमशः हमारे सूचकांक, हमारा लक्ष्य और हमारे संचयकर्ता होंगे।

हम फिर पाश। प्रत्येक पुनरावृत्ति पर, हम इनपुट से संचायक को घटाते हैं। यदि परिणाम 0 है, तो हम कर रहे हैं, इसलिए हम धक्का 1, Output, और बाहर निकलें। यदि यह नकारात्मक है, तो हम बहुत दूर चले गए हैं, इसलिए हम धक्का 0, Output, और बाहर निकलें। नहीं तो हम देखते हैं

;p)*rq;
;         Pop the difference off the stack.
 p)       Move the index to the top of the stack and increment it.
   *      Multiply the accumulator by the index to get the next factorial.
    rq;   Put the stack back in the right order.

3

नीम , 8 बाइट्स

𝐈Γ𝐈𝐩₁𝔼)𝐠

स्पष्टीकरण:

Example input: 6
𝐈         Inclusive range [1 .. input]
          [1, 2, 3, 4, 5, 6]
 Γ        For each...
  𝐈         Inclusive range [1 .. element]
            [[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6]]
   𝐩        Product
            [1, 2, 6, 24, 120, 720]
     𝔼      Check for equality with
    ₁       the first line of input
            [[0, 0, 1, 0, 0, 0]]
      )   End for each
       𝐠  Select largest element
          [1]

कोशिश करो!

नीम , 3 बाइट्स (गैर-प्रतिस्पर्धात्मक)

चुनौती के बाद टोकन और फैक्टोरियल टोकन को गैर-प्रतिस्पर्धी के रूप में जोड़ा गया।

𝐈𝐓𝕚

स्पष्टीकरण:

Example input: 6
𝐈     Inclusive range [1 .. input]
      [[1, 2, 3, 4, 5, 6]
 𝐓    Factorial each
      [[1, 2, 6, 24, 120, 720]]
  𝕚   Check that the [cycled] input is in the list
      [1]

कोशिश करो!


3

> <> , 24 22 बाइट्स

-2 बाइट्स @Aaron को धन्यवाद

मैं एक नई भाषा आज़मा रहा हूँ (क्योंकि मेरा गणितज्ञ लाइसेंस समाप्त हो चुका है ...)

01\{=n;
?!\$1+:@*:{:}(

इसे ऑनलाइन या मछली के खेल के मैदान में आज़माएं

माना जाता है कि इनपुट संख्या पहले से ही स्टैक पर है , और 0 या 1 लौटाता है। यह पहली n संख्याओं को एक साथ गुणा करके काम करता है जब तक कि इनपुट से कम होना बंद हो जाता है, और फिर 1 प्रिंट करना अगर यह इनपुट के बराबर होता है, और 0 अगर यह नहीं होता है ' टी।


आप आप परिवर्तित कर v>\n<^में \\n/; यहाँ देखें
हारून

@ ऐरन, यह शानदार है, धन्यवाद!
पेड़ नहीं

3

एपीएल (डायलॉग यूनिकोड) , 5 6 7 बाइट्स

एग्री द आउटग्रॉफ़र के ×/लिए !धन्यवाद में बदलाव करके एक बाइट को गोल किया

⊢∊!∘⍳

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

व्याख्या

                          Range of numbers from 1 to argument, 1 2 3 4 .. n
   !                       Factorial; 1! 2! 3! 4! .. n!
⊢∊                         Is the right argument a member of this list?

संचयी योग?
लीक नून

@LeakyNun फिक्स्ड
कृति लिथोस

जीएनयू एपीएल 1.2 में एक अतिरिक्त बाइट N∊×\⍳N←⎕यह एक तर्क कैसे लेता है? मैं nकहीं नहीं देखता । क्या यह एक Dyalog- विशिष्ट बात है?
आर्क

2
@ Arc676 मेरा समाधान एक ट्रेन है और आप इसे ऐसे कहते हैं: (⊢∊(×/⍳)) right_argumentजैसा कि आप TIO लिंक में देख सकते हैं। और सही तर्क को संदर्भित करता है।
कृति लिथोस

नोट: AGL आपको एक बाइट बचाएगा; ⊢∊×\ä⍳। "सही" (लेकिन लंबे समय तक) समाधान होगा 0=1|!⍣¯1; "क्या उलटा तथ्य एक पूर्णांक है?"
एडम

2

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

यह इनपुट में फंक्शन लॉजिक के रूप में लेता है और alertआउटपुट के लिए। 0झूठा और सच्चाई के लिए आउटपुट 1

f=n=>n?n*f(n-1):1;g=(n,r=0,i=0)=>{while(i<=n){r=f(i)==n|r;i++}alert(r)}

व्याख्या

कार्यक्रम में दो कार्य होते हैं, fऔर gfएक पुनरावर्ती भाज्य-कंप्यूटिंग फ़ंक्शन है, और gकार्यक्रम का मुख्य कार्य है। एक भी तर्क g मानता है n। यह r0 के मान के साथ एक डिफ़ॉल्ट तर्क और एक मान के साथ एक अन्य डिफ़ॉल्ट तर्क को परिभाषित करता है 0। फिर, यह 0 से n, और प्रत्येक पुनरावृत्ति में सभी इंटेगर पर पुनरावृत्त करता है, यह जाँचता है कि क्या फ़ंक्शन पर fलागू किया गया i(वर्तमान सूचकांक) बराबर है n, या नहीं nका एक तथ्य है i। यदि ऐसा होता है, तो rमान 1 पर सेट हो जाता है। फ़ंक्शन के अंत में,r है alertएड।

टेस्ट स्निपेट

( ध्यान दें: स्निपेट console.log()उन pesky alert()s के बहुत अधिक के रूप में कोई भी उपयोग कर आउटपुट करता है । )

f=n=>n?n*f(n-1):1;g=(n,r=0,i=0)=>{while(i<=n){r=f(i)==n|r;i++}console.log(r)}

g(1)
g(2)
g(3)
g(4)
g(5)
g(6)
g(7)
g(8)
g(24)
g(120)


एक कोड ब्लॉक का उपयोग करने से ईवल छोटा हो सकता है।
डाउनगेट

@Downgoat मुझे यह कैसे करना चाहिए? क्षमा करें यदि यह बहुत स्पष्ट है! : पी
अर्जुन

2

QBIC , 21 19 बाइट्स

[:|q=q*a~q=b|_x1}?0

व्याख्या

[:|     Start a FOR loop from 1 to n
q=q*a   q starts as 1 and is multiplied by the FOR loop counter
        consecutively: q=1*1, *2, *3, *4 ... *n
~q=b|   If that product equals n
_x1     Then quit, printing a 1
}       Close the IF and the FOR
?0      If we're here, we didn't quit early and didn't find a factorial, print 0

इससे पहले

[:|q=q*a┘c=c+(q=b)}?c

स्पष्टीकरण:

[:|         Start a FOR loop from 1 to n
q=q*a       q starts as 1 and is multiplied by the FOR loop counter
            consecutively: q=1*1, *2, *3, *4 ... *n
┘           Syntactic line break
c=c+        c starts out at 0 and then keeps track of 
    (q=b)       how often our running total == n
}           Closes the FOR-loop
?c          Print c, which is 0 fir non-factorials and -1 otherwise.

2

जावा 8, 59 बाइट्स

i->{for(int j=1,c=0;j<=i;j*=++c)if(j==i)return 1;return 0;}

Testcode

import java.util.function.IntFunction;
import java.util.stream.IntStream;

public class IsFactorial
{
    public static IntFunction<Integer> isFactorial = i->
    {
        for(int j=1,c=0;j<=i;j*=++c)
            if(j==i)return 1;return 0;
    };

    public static int[] truthyCases = {1,2,6,24,120};
    public static int[] falsyCases = {3,4,5,7,8};

    public static void main(String[] args)
    {
        System.out.println
        (
            IntStream.of(truthyCases)
                .allMatch(i->isFactorial.apply(i)==1)
            && IntStream.of(falsyCases)
                .allMatch(i->isFactorial.apply(i)==0)
        );
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.