क्या यह एक संतोषजनक संख्या है?


10

इस चैट वार्तालाप से प्रेरित है

एक संतोषजनक संख्या एक संख्या है जिसका दशमलव निरूपण abxनिम्न गुणों के साथ होता है:

  • xयदि प्रत्यय ( 123333-> 3333, 545656-> 5656, 123-> 3) में कोई पुनरावृत्ति नहीं है तो सबसे लंबी अनुगामी दोहराव प्रत्यय या अंतिम अंक है।
  • bx( 123333-> 2, 55545656-> 4) से पहले एकल अंक है
  • aशेष उपसर्ग है ( 123333-> 1, 55545656-> 555)
  • a == c**b( **एक्सप्रेशन दर्शाता है), जहां ( -> ( नहीं, नहीं ) cके सबसे छोटे दोहराव वाले हिस्से की पुनरावृत्ति की संख्या हैx162333343 3 3 333 33

उदाहरण के लिए, 8300के साथ एक संतोषजनक संख्या है a = 8, b = 3, c = 2, और x = 0024651नहीं एक संतोषजनक नंबर, क्योंकि है x = 1, b = 5, a = 246, और कोई पूर्णांक है cकि संतुष्ट करता है c^5 = 2461222यह भी एक संतोषजनक संख्या नहीं है, क्योंकि x = 222और b = 1, के लिए कोई शेष अंक नहीं हैं a

एक सकारात्मक पूर्णांक को देखते हुए n >= 100, आउटपुट nएक संतोषजनक संख्या है या नहीं ।

उदाहरण

8300: True (a=8, b=3, c=2, x=00)
24651: False 
1222: False
92555: True (a=9, b=2, c=3, x=555)
64633: True (a=64, b=6, c=2, x=33)
512944: True (a=512, b=9, c=2, x=44)
123: True (a=1, b=2, c=1, x=3)
822809: False 
376664: False 
723799: False 
1234: False 
34330000000: True (a=343, b=3, c=7, x=0000000)
92313131: True (a=9, b=2, c=3, x=313131)
16424442444: True (a=16, b=4, c=2, x=24442444)



साथ 8333है x,c,b,a=33,2,3,8और इसलिए संतोषजनक?
योनातन एलन

@JonathanAllan नहीं, क्योंकि xलालची है।
मेगो

1
@JonathanAllan बिल्कुल। दोहराए जाने वाले भाग से पहले कम से कम दो अंकों वाली एक संख्या संतोषजनक होने के लिए एक आवश्यक शर्त है।
मेगो

जवाबों:


2

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

बहुत लंबा लगता है

DŒṖṖEÐƤḄ$ÐṀLÐṂṪµḢ*@0¦LµṪ⁼Ḍ

एक मोनैडिक लिंक एक पूर्णांक ले रहा है और 1यदि इनपुट संतोषजनक है और 0नहीं तो वापस आ रहा है ।

इसे ऑनलाइन आज़माएं! या एक परीक्षण-सूट देखें

कैसे?

DŒṖṖEÐƤḄ$ÐṀLÐṂṪµḢ*@0¦LµṪ⁼Ḍ - Link: integer, n    e.g. 8300
D                          - to decimal list          [8,3,0,0]
 ŒṖ                        - all partitions           [[[8],[3],[0],[0]],[[8],[3],[0,0]],[[8],[3,0],[0]],[[8],[3,0,0]],[[8,3],[0],[0]],[[8,3],[0,0]],[[8,3,0],[0]],[[8,3,0,0]]]
   Ṗ                       - pop (the "no tail" one)  [[[8],[3],[0],[0]],[[8],[3],[0,0]],[[8],[3,0],[0]],[[8],[3,0,0]],[[8,3],[0],[0]],[[8,3],[0,0]],[[8,3,0],[0]]]
         ÐṀ                - keep maximal under the operation: e.g. for [[8,3],[0],[0]]
        $                  -   last two links as a monad:
     ÐƤ                    -     for suffixes:   i.e. [[[8,3],[0],[0]],[[0],[0]],[[0]]]
    E                      -       all equal?         [0              ,1        ,1]
       Ḅ                   -     convert from binary  3
                           -          ...which yields [[[8],[3],[0],[0]],[[8,3],[0],[0]]]
            ÐṂ             - keep minimal under the operation:
           L               -   length
                           -          ...which yields [[[8,3],[0],[0]]]
              Ṫ            - tail (rightmost)         [[8,3],[0],[0]] 
               µ           - monadic chain separation
                Ḣ          - yield head and modify    [8,3]   ...leaving [[0],[0]]
                     L     - length (of modified)     2
                    ¦      - sparse application       (to the [8,3])
                   0       -   ...to index: 0         (to the rightmost digit, the 3)
                 *@        -   power (sw@p args)      [8,8]  ([8, 3*@2] = [8, 2*3] = [8,8])
                      µ    - monadic chain separation
                       Ṫ   - yield tail and modify    8   ...leaving [8]
                         Ḍ - from decimal (modified)  8
                        ⁼  - equal?                   1

1
चिंता न करें, आप अकेले नहीं हैं। अधूरी यातना के इस टुकड़े को मेरी बात साबित करनी चाहिए।
E

1
अगर जेली का जवाब> 20 बाइट्स है, तो आप जानते हैं कि कुछ गलत हैं ...
FantaC

1

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

a=b=0;k=[]
c=[*input()];l=len(c)
while c[1:]>[]==k:a=a*10+b;b=int(c.pop(0));k=[i for i in range(2,l)if c==i*c[:l//i]];l-=1
a==(k+[1])[0]**b>q

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

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

a=b='';k=[]
c=[*input()];l=len(c)
while c[1:]>[]==k:a+=b;b,*c=c;k=[i for i in range(2,l)if c==i*c[:l//i]];l-=1
int(a or-1)==(k+[1])[0]**int(b)>q

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

आउटपुट निकास कोड के माध्यम से है


आप whileएक बाइट को बचाने के लिए अपनी स्थिति को बदल सकते हैं: TIO
FlipTack


0

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

import re
x,_,b,a=re.findall(r"((.+?)\2+)(.)(.*)",input()[::-1])[0]
if int(a[::-1])!=len(x)**int(b):d

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

import re
x,_,b,a=re.findall(r"((.+?)\2+)(.)(.*)",input()[::-1])[0]
if int(a[::-1])!=len(x)**int(b):int('')

आउटपुट एग्जिट कोड द्वारा होता है।

श्रेणी त्रुटि के कारण यह कोड Tio पर ठीक से नहीं चलता है। पूरी तरह से IDLE में काम करता है।


0

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

t=(d,n,l,i,r)=>d.slice((m=-l*i)-l,m).join``!=n?r:t(d,n,l,i+1,{p:r.p+n,r:r.r+1});p=(d,l,r)=>l<1?r:p(d,l-1,r.r<(z=t(d,(m=d.slice(-l).join``),l,1,{p:m,r:1})).r&&(z.r>1|l==1)?z:r);u=n=>(d=[...n]).slice(0,(q=(s=d.length)-(m=p(d,s,{p:"",r:0})).p.length-1)).join``==m.r**d[q]

function onChange() {
  var value = document.getElementById("input").value;
  console.log("%s => %s", value, u(value));
}
<input id="input" type="number" onchange="onChange()" />


0

पायथन 2, 286 बाइट्स

Yeesh।

n=`input()`
N=lambda p,l=0:N(n[:-len(p)],p,l+1)if n[-len(p):]==p else l
try:
    s=[(N(n[-i-1:]),n[-i-1:])for i,_ in enumerate(n)if N(n[-i-1:])!=1]
    if len(s)==0:s=[(1,n[-1])]
    q=max(s,key=lambda a:len(a[0]*a[1]))
    i=len(q[0]*q[1])
    print n[:-i-1]==`min(s)[0]**int(n[-i-1])`
except:print 0

Nएक पुनरावर्ती फ़ंक्शन है जो एक स्ट्रिंग में एक प्रत्यय प्रतिस्थापन की संख्या को बार-बार पाता है। यह मूल रूप से सभी संभावित प्रत्ययों के माध्यम से लूप करता है, प्रत्येक का उपयोग करके दोहराया जाने वाले समय की संख्या का पता लगाना N; यह उन सभी मूल्यों को शामिल करता है जहां N==1वे दोहराए जाने का संदर्भ देते हैं; यदि सूची समाप्त हो रही है, तो अंतिम वर्ण का प्रत्यय सूची में जोड़ा गया है।

फिर, सबसे लंबे समय तक प्रत्यय लिया जाता है, ( q), इसे लेने वाले वर्णों की संख्या पाई जाती है ( i), और a==c**bजाँच की जाती है ( print ...)।

यदि रास्ते में कोई त्रुटि होती है (जो अक्सर होती है), तो यह exceptब्लॉक में पकड़ा जाता है ।

किसी भी सुझाव का स्वागत से अधिक है!

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