नाजुक अपराध

Sep 21 2020

सबसे बड़ा नाजुक प्रधान खोजें द्वारा प्रेरित ।

सकारात्मक पूर्णांक से कम से कम 1 अंक हटाकर, हम एक अलग गैर-नकारात्मक पूर्णांक प्राप्त कर सकते हैं। ध्यान दें कि यह Removeलिंक किए गए प्रश्न में फ़ंक्शन के लिए अलग है । हम कहते हैं कि एक अभाज्य संख्या नाजुक होती है यदि सभी पूर्णांक इस तरह से उत्पन्न होते हैं तो वे अभाज्य नहीं होते हैं। उदाहरण के लिए, \$60649\$ निम्नलिखित पूर्णांक बनाता है:

0, 4, 6, 9, 49, 60, 64, 66, 69, 604, 606, 609, 649, 664, 669, 6049, 6064, 6069, 6649

इनमें से कोई भी पूर्णांक प्रमुख नहीं है, इसलिए \ _$60649\$एक नाजुक प्रधान है। ध्यान दें कि किसी भी प्रमुख शून्य को हटा दिया जाता है, और यह आवश्यकता "प्राइम" नहीं है, इसलिए \ _$0\$और \$1\$दोनों योग्य हैं, जिसका अर्थ है, उदाहरण के लिए, \$11\$ एक नाजुक प्रधान है।

मानक अनुक्रम नियम के समान, आपको निम्न कार्यों में से एक करना है:

  • एक सकारात्मक पूर्णांक को देखते हुए \$n\$, आउटपुट दो अलग, सुसंगत * मानों पर निर्भर करता है कि क्या \ _$n\$ एक नाजुक प्रधानमंत्री है या नहीं
  • एक सकारात्मक पूर्णांक को देखते हुए \$n\$, आउटपुट \$n\$वें नाजुक प्रधानमंत्री
  • एक सकारात्मक पूर्णांक को देखते हुए \$n\$, उत्पादन पहले \$n\$ नाजुक अपराध
  • आउटपुट अनन्त रूप से नाजुक primes की सूची

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

आप चुन सकते हैं कि आप कौन से कार्य करना चाहते हैं।

आप किसी भी मानक तरीके से इनपुट और आउटपुट कर सकते हैं , और, जैसा कि यह कोड-गोल्फ है , बाइट्स जीत में सबसे छोटा कोड है

संदर्भ के लिए, पहले 20 नाजुक अपराध हैं:

2, 3, 5, 7, 11, 19, 41, 61, 89, 409, 449, 499, 881, 991, 6469, 6949, 9001, 9049, 9649, 9949

कुछ और देखने के लिए:

821 - False (Removing the 8 and the 1 gives 2 which is prime)

मैं एक उत्तर के लिए एक +100 इनाम की पेशकश करता हूं जो निर्णय-समस्या विधि के बजाय मानक अनुक्रम I / Os में से एक को लागू करता है , जो कि:

  • एक भोले निर्णय-समस्या के कार्यान्वयन से कम है (कृपया इस तरह के संस्करण को प्रमाण के रूप में शामिल करें यदि कोई पहले से ही पोस्ट नहीं किया गया है)
  • या जो यह मानने पर निर्भर नहीं करता है कि मान नाजुक प्राइम हैं या नहीं जब मान उत्पन्न होते हैं (उदाहरण के लिए इस तथ्य का उपयोग कर सकते हैं कि केवल विशिष्ट अंक हो सकते हैं, या कुछ और जो बस "लूप ओवर नंबरों पर थप्पड़ नहीं मार रहा है, नाजुक प्राइम ढूंढ रहा है" )

यह थोड़े व्यक्तिपरक है कि "नाजुक अपराधों के लिए जाँच" के रूप में क्या मायने रखता है, इसलिए मैं अपने सर्वश्रेष्ठ निर्णय का उपयोग करूंगा जब यह पुरस्कार देने के लिए आता है।

जवाब

11 Adnan Sep 21 2020 at 07:11

05AB1E , 4 बाइट्स

कोड

05AB1E -encoding का उपयोग करता है । यह जांचता है कि दी गई संख्या एक नाजुक प्राइम है या नहीं।

æpJΘ

इसे ऑनलाइन आज़माएं! या 1 और 9949 के बीच सभी नंबरों की जाँच करें ।

व्याख्या

æ      # Get the powerset of the number.
 p     # Check for each element whether it is a prime.
  J    # Join these numbers into one big number.
   Θ   # Check whether this joined number is equal to 1.
9 Bubbler Sep 21 2020 at 08:12

एपीएल (डायलॉग एक्सटेंडेड) , 16 14 बाइट्स

</1⍭⍎⍕(⊢,,¨)\⍞

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

-2 बाइट्स ( ∊⍎¨¨ → ⍎⍕) @ngn को धन्यवाद।

पूर्ण कार्यक्रम जो स्टडिन और एकल 1 (सच) या 0 (गलत) से एक एकल संख्या लेता है।

यहाँ चाल है कि यह सभी गैर-रिक्त क्रम कैसे उत्पन्न करता है:

  • (⊢,,¨)/ strसभी strवर्णों को अंतिम वर्ण शामिल करता है।
  (⊢,,¨)/ '1234'
→ '1' (⊢,,¨) '2' (⊢,,¨) '3' (⊢,,¨) '4'
→ '1' (⊢,,¨) '2' (⊢,,¨) '4' '34'
→ '1' (⊢,,¨) '4' '34' '24' '234'
→ '4' '34' '24' '234' '14' '134' '124' '1234'
  • (⊢,,¨)\ str(⊢,,¨)/प्रत्येक उपसर्ग के लिए लागू होता है str, सभी गैर-रिक्त बाद वाले को स्ट्रिंग की सूचियों की सूची के रूप में देता है।
  (⊢,,¨)\ '1234'
→ '1' ('2' '12') ('3' '23' '13' '123') ('4' '34' '24' '234' '14' '134' '124' '1234')

पूरे कोड की व्याख्या:

</1⍭⍎⍕(⊢,,¨)\⍞
             ⍞  ⍝ Take n from stdin as a string
      (    )\   ⍝ For each prefix, reduce from right by
         ,¨     ⍝   prepend the previous char to each string
       ⊢,       ⍝   and append to the previous list of strings
    ⍎⍕          ⍝ Convert nested strings to a single string,
                ⍝ and then eval it to get a simple integer vector
  1⍭  ⍝ Test each number for primality
</    ⍝ Test if the only truth is the last one
7 xash Sep 21 2020 at 03:39

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

ṗ⊇ᵘṗˢȮ

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

ṗ⊇ᵘṗˢȮ the implicit input
ṗ      is a prime
 ⊇ᵘ    and from every unique subset
   ṗˢ  select the primes
     Ȯ and this should be a list with one element (the prime input itself)
6 JonathanAllan Sep 21 2020 at 06:56

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

DŒPḌẒḄ’

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

इसे ऑनलाइन आज़माएं! या पहले बीस देखें।

कैसे?

DŒPḌẒḄ’ - Link: n         e.g. 824                      409
D       - decimal digits       [8,2,4]                  [4,0,9]
 ŒP     - power-set            [[],[8]...,[8,2,4]]      [[],[4],...,[4,0,9]]
   Ḍ    - undecimal            [0,8,2,4,82,84,24,824]   [0,4,0,9,40,49,9,409]
    Ẓ   - is prime?            [0,0,1,0,0,0,0,0]        [0,0,0,0,0,0,0,1]
     Ḅ  - from binary          32                       1
      ’ - decrement            31                       0
5 Shaggy Sep 21 2020 at 04:39

जाप , 7 बाइट्स

¥à f_°j

यह कोशिश करो या परीक्षण[0,1000)

¥à f_°j     :Implicit input of integer string
¥           :Is equal to
 à          :Combinations
   f        :Filter
    _       :By passing each through a function
     °      :Postfix increment, to cast to an integer
      j     :Is prime?
4 xash Sep 21 2020 at 04:01

जे , 25 23 बाइट्स

-2 योना के लिए धन्यवाद!

एक सूची देता है जिसमें या तो 1 सत्य या 0 है।

1</@p:(#~2#:@i.@^#)&.":

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

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

1</@p:(#~2#:@i.@^#)&.":
                   &.": convert the number to a string
      (  2      ^#)      2 ^ length
          #:@i.@         enumerated and to base 2
       #~                select from the string based on the bit mask
                   &.": convert from strings to numbers
1   p:                  primes -> 1, non-primes -> 0
                         so in the delicate prime case, we have
                         (2^L) - 1 zeros and one 1 for the input itself
 </@                    reduce from left to right with less-than
                         (so last position is 1, everything else 0)
4 Mukundan314 Sep 21 2020 at 02:43

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

qjfP_sTy

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

व्याख्या

qjfP_sTy
  f       # filter
       y  # all subsets of input
   P_sT   # with a primality test
 j        # join result of filter on newlines
q         # check if it equals input
3 Neil Sep 21 2020 at 03:50

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

^
;
+%`;(.)
$1;$'¶$`; .+ $*
%A`^.?$|^(..+)\1+$
^1+¶+$

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण मामले शामिल हैं। स्पष्टीकरण:

^
;
+%`;(.)
$1;$'¶$`;

इनपुट के सभी बाद उत्पन्न करें।

.+
$*

तब एकता में परिवर्तित करें।

%A`^.?$|^(..+)\1+$

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

^1+¶+$

जाँच करें कि मूल इनपुट प्रधान था लेकिन उचित अनुवर्ती कोई भी नहीं थे।

3 user Sep 21 2020 at 04:21

स्काला , 173 170 बाइट्स

n=>(s"$n".indices.toSet.subsets.filter{x=>1<x.size&x.size<s"$n".size}.map(_.toSeq.sorted.map(""+n).mkString.toInt).toSet+n).filter{x=>x>1&2.to(x/2).forall(x%_>0)}==Set(n)

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

3 DominicvanEssen Sep 21 2020 at 19:57

आर , 163 154 बाइट्स

function(x,n=nchar(x),s=sum)(a=apply(!expand.grid(rep(list(0:1),n)),1,function(v)(y=s((x%/%10^(n:1-1)%%10)[v]*10^(s(v):1-1)))&s(!y%%1:y)==2))[1]&!s(a[-1])

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

X से अंकों के सभी संयोजनों को हटाकर गठित संख्याओं के बीच अपराधों की जाँच। पहला संयोजन कोई अंक नहीं निकाल रहा है: यह TRUE होना चाहिए, और अन्य सभी मुख्य परीक्षण FALSE होना चाहिए।

टिप्पणी की:

is_delicate_prime=
function(x,                     # x = number to test
 n=nchar(x),                    # n = number of digits of x
 s=sum)                         # s = alias to sum() function
(a=                             # a = matrix of all prime-tests:
 apply(                         #     apply the function v to each of...
  !expand.grid(rep(list(0:1),n)),   # all combinations of n of TRUE/FALSE...
  1,                            #     row-by-row...
  function(v)                   #     defining the output of v as:
   (y=s((x%/%10^(n:1-1)%%10)    #       the digits of x...
    [v]                         #       (considering only the elements chosen by v)... 
       *10^(s(v):1-1)))         #       multiplied by 10^((v-1)..0)...
   &s(!y%%1:y)==2))             #       tested for primality AND non-zero
[1]                             # Finally, output TRUE if a[1] is TRUE...
   &!s(a[-1])                   # and the sum of all other elements of a are FALSE
2 att Sep 21 2020 at 07:10

वोल्फ्राम लैंग्वेज (गणितज्ञ) , 54 बाइट्स

Select[FromDigits/@Subsets@@RealDigits@#,PrimeQ]=={#}&

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

2 Arnauld Sep 21 2020 at 16:55

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

nएक स्ट्रिंग के रूप में की उम्मीद है । एक बूलियन मान लौटाता है।

n=>[...n].reduce((a,x)=>[...a,...a.map(y=>(g=k=>y%--k?g(k):(p+=q=y>1&k<2,y))(y+=x))],[p=0])|q/p

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

कैसे?

हम इस तरह से अंकों के अधिकार की गणना करते हैं nकि आदेश संरक्षित है और nअंतिम गणना की जाती है। परिणाम सही है यदि परिणामी पूर्णांकों के बीच एकमात्र प्राइम अंतिम है।

2 Noodle9 Sep 21 2020 at 15:38

अजगर 2 , 139 \ _$\cdots\$ 145 142 बाइट्स

Pxeger द्वारा इंगित एक बग को ठीक करने के लिए 36 बाइट्स जोड़े गए ।
सहेजे गए 5 बाइट्स pxeger के लिए धन्यवाद !!!

lambda n,R=range:all((g<2or any(g%i<1for i in R(2,g)))-(`g`==n)for g in{int(''.join(n[j]for j in R(len(n))if i>>j&1))for i in R(1,2**len(n))})

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

एक पूर्णांक को एक स्ट्रिंग के रूप में इनपुट करता है और Trueयदि यह एक नाजुक प्राइम या Falseअन्यथा है तो वापस आ जाता है

2 pxeger Sep 21 2020 at 19:27

पायथन 3.8 (पूर्व-रिलीज़) , 146 144 बाइट्स

निरर्थक कोष्ठकों को हटाकर -2 बाइट्स

मैं भी नूडल 9 को पोस्ट करने से ठीक पहले एक बहुत ही समान उत्तर पर काम कर रहा था , और मैंने इसे प्राप्त करने के लिए विचारों को संयोजित किया ( इसे आगे बढ़ाएं! )। यह एक अब काफी अलग है क्योंकि वे शुरू में एक टूटे हुए थे, इसलिए मैंने सोचा कि मैं अपना पोस्ट करूंगा।

lambda s,R=range:(l:=len(s))*all((g!=int(s))^(g>1)&all(g%k for k in R(2,g))for g in{int(''.join(s[j]for j in R(l)if i>>j&1))for i in R(1,2**l)})

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

स्पष्टीकरण:

lambda s,R=range:(l:=len(s))*all((g!=int(s))^(g>1)&all(g%k for k in R(2,g))for g in{int(''.join(s[j]for j in R(l)if i>>j&1))for i in R(1,2**l)})

lambda s        :                                                                                                                                       function
        ,R=range                                                                                                                                        alias `range` built-in to `R`
                                                                                   {            s[j]for j in R(l)if i>>j&1  for i in R(1,2**l)}         compute the power-set (excluding the empty set)
                                                                                    int(''.join(                          ))                            convert each list of digits to an integer
                             all(                                          for g in                                                            )        check the integers for primality
                                                    all(g%k for k in R(2,g))                                                                            check for factors in the number
                                              (g>1)&                                                                                                    makes sure 0 and 1 aren't treated as prime
                                 (g!=int(s))^                                                                                                           ensure the number itself is prime
                 (l:=len(s))*                                                                                                                           store the length in `l`

1 Noodle9 Sep 21 2020 at 21:12

सेजमैथ , 139 बाइट्स

def f(n):s=str(n);l=len(s);return p(n)*all(~-p(g)for g in{int(''.join(s[j]for j in R(l)if i>>j&1))for i in R(1,2**l-1)})
R=range;p=is_prime

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

मेरे पायथन जवाब का पोर्ट।

1 Stef Sep 22 2020 at 17:33

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

के लिए itertools और एक गोल्फ नुस्खा का उपयोग करना powerset।

lambda s,R=range:all(p(int(''.join(t)),R)for t in sum(([*combinations(s,k)]for k in R(1,len(s))),[]))>p(int(s),R)
from itertools import*
p=lambda n,R:any(n%i<1for i in R(2,n))or 2>n

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

एक स्ट्रिंग के रूप में इनपुट की अपेक्षा करता है।

फ़ंक्शन pलौटता है Trueयदि इसका इनपुट अभाज्य नहीं है, और Falseयदि यह अभाज्य है; मुख्य समारोह रिटर्न (forall t, p(t)) > p(s)जहां tसभी "सबवलेन्स" लेता है s। इस असमानता को संतुष्ट करने के लिए बुलियन का एकमात्र तरीका है True > False, जिसका अर्थ है कि सभी गैर-अपराध हैं tऔर sगैर-अपराध नहीं हैं।

डिस्क्लेमर: जब मैंने यह पोस्ट किया था तो पहले से ही दो अजगर उत्तर थे।