अपराधों में घट रहा है


14

पूर्णांक को देखते हुए n, उन तरीकों की संख्या लौटाएं जिन्हें n अभाज्य संख्याओं की सूची के रूप में लिखा जा सकता है। उदाहरण के लिए, 2323के रूप में लिखा जा सकता है (2,3,23), (23,23)या (2,3,2,3)या (23,2,3)है, तो आप उत्पादन होगा 4। यदि यह इस तरह से नहीं लिखा जा सकता है, तो आपको आउटपुट करना चाहिए 0

इस समस्या के लिए एक प्राइम नंबर जैसे कि 019या 00000037एक वैध प्राइम।

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

5 -> 1
55 -> 1 
3593 -> 4 (359 and 3, or 3 and 593, or 3 and 59 and 3, or 3593)
3079 -> 2 (3 and 079, or 3079)
119 -> 0 
5730000037 -> 7 (5,7,3,000003,7, 5,7,3,0000037, 5,73,000003,7, 5,73,0000037, 5,73000003,7, 5,7,30000037, 5730000037)
0-> undefined (you do not have to handle this case)

यह , इसलिए प्रत्येक भाषा में बाइट्स में सबसे कम उत्तर जीतता है!

संपादित करें: अब मुझे पता है कि मुझे अगली बार सैंडबॉक्स का उपयोग क्यों करना चाहिए


जवाबों:


7

हास्केल , 96 89 बाइट्स

5 बाइट्स ने H.PWiz की प्राणिकता परीक्षा के लिए धन्यवाद बचाया

p x=[1|0<-mod x<$>[2..x]]==[1]
f[]=1
f b=sum[f$drop i b|i<-[1..length b],p$read$take i b]

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

व्याख्या

पहली बात यह है कि प्राइम की परिभाषा का उपयोग करके विल्सन के प्रमेय का उपयोग करके एक प्रमुख परीक्षण फ़ंक्शन बनाया जा रहा है

p x=[1|0<-mod x<$>[2..x]]==[1]

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

एल्गोरिथ्म निम्नानुसार है, हम एक डायरेक्टेड एसाइक्लिक ग्राफ, एल का निर्माण करते हैं, जहां प्रत्येक नोड संख्या के एक विकल्प का प्रतिनिधित्व करता है। विशेष रूप से एल i हमारे इनपुट के अंतिम i अंकों का प्रतिनिधित्व करता है (इसे n कॉल करने की अनुमति देता है )।

हम L 0 को परिभाषित करते हैं कि L का मान 1 है और L में प्रत्येक अन्य मान का प्रत्येक L J का योग है जैसे कि j <i और n से i से j तक का विकल्प प्रधान है।

या एक सूत्र में:

सूत्र

हम तब L के सबसे बड़े सबसे बड़े इंडेक्स पर मान लौटाते हैं । ( L k जहां k n के अंकों की संख्या है )


6

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

ŒṖḌÆPẠ€S

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

डेसी धन्यवाद के लिए -1 बाइट के लिए
-1 बाइट धन्यवाद

व्याख्या

ŒṖḌÆPẠ€S  Main Link
ŒṖ        List Partitions (automatically converts number to decimal digits)
  Ḍ       Convert back to integers (auto-vectorization)
   ÆP     Are they primes? (auto-vectorization)
     Ạ€   For each, are they all truthy (were the numbers all primes?); 1/0 for truthy/falsy
       S  Sum; gets number of truthy elements

मैंने देखा है कि 05AB1E यह आसानी से नहीं कर सकता है। विभाजन एक महान आदेश की तरह लगता है।
मैजिक ऑक्टोपस Urn

5

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

ṫ{~cịᵐṗᵐ}ᶜ

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

पहले इनपुट को एक स्ट्रिंग में परिवर्तित करता है। {…}ᶜके लिए संभावित आउटपुट की संख्या गिना जाता है

{…}के आउटपुट के अंदर को खिलाया जाता है ~c। इस विधेय का आउटपुट संतुष्ट करता है कि, जब समाप्‍त किया जाता है, तो यह इनपुट के बराबर होता है। यह खिलाया जाता है ịᵐ, जो यह निर्दिष्ट करता है कि इसका आउटपुट है यह एक स्ट्रिंग में परिवर्तित प्रत्येक स्ट्रिंग के साथ इनपुट है। ṗᵐनिर्दिष्ट करता है कि इसके इनपुट में प्रिम्स हैं


1
आपको स्ट्रिंग और बैक में कनवर्ट करने की आवश्यकता नहीं है, वे 7 बाइट्स पर्याप्त हैं {~cṗᵐ}ᶜ:। यह वास्तव में धीमा है क्योंकि ~cपूर्णांक पर बाधा अंकगणित के साथ काम करती है, लेकिन सिद्धांत रूप में यह काम करता है।
घातक

@ मुझे लगता है कि अग्रणी शून्य के लिए खाते में विफल रहता है
H.PWiz

4

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

lf.AmP_sdT./`

परीक्षण सूट।


मुझे पता नहीं है कि अच्छी तरह से लेकिन फ़िल्टर करने और फिर लंबाई लेने के बजाय, आप फ़िल्टर के बजाय for_each कर सकते हैं और फिर योग?
हाइपरन्यूट्रिनो

@ हैपरनेट्रिनो से कोई फर्क नहीं पड़ता?
लीक नन

मुझे यकीन नहीं है, मैंने परीक्षण नहीं किया है यह जेली के लिए करता है (शायद दो-बाइट फ़िल्टर त्वरित के कारण), लेकिन मुझे यकीन नहीं है।
हाइपरएन्यूट्रीनो

@ हैपरनेट्रिनो फिल्टर यहां एक बाइट है ...
लीक नून


2

अजगर 2 , 161 बाइट्स

lambda n:sum(all(d>1and all(d%i>0for i in range(2,d))for d in v)for v in g(`n`))
g=lambda s:[[int(s[:i])]+t for i in range(1,len(s))for t in g(s[i:])]+[[int(s)]]

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

फ़ंक्शन gविभाजन को पुनरावर्ती बनाता है (यह इनपुट के रूप में एक स्ट्रिंग लेता है लेकिन ints की सूची की एक सूची आउटपुट करता है)। शेष बाक़ी कोड को लागू करने के लिए सिर्फ is dप्राइम? ’है।





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