만족스러운 숫자입니까?


10

이 대화에서 영감을 얻은

만족 수가 그 소수 표현 형태이며 수이고 abx다음 속성은 :

  • x가장 긴 후행 반복 접미사이거나 끝 부분에 반복이없는 경우 마지막 숫자입니다 ( 123333-> 3333, 545656-> 5656, 123-> 3)
  • bx( 123333-> 2, 55545656-> 4) 이전의 한 자리수입니다.
  • a나머지 접두사입니다 ( 123333-> 1, 55545656-> 555).
  • a == c**b( **지수를 나타냄), 여기서 ( -> ( , not ) c의 가장 작은 반복 부분의 반복 횟수 )x162333343 3 3 333 33

예를 들어, 8300함께 만족하는 수이고 a = 8, b = 3, c = 2, 및 x = 00. 24651때문에 만족할 수 있지 않은 x = 1, b = 5, a = 246, 어떤 정수 없다 c만족 즉 c^5 = 246. 및 로만 남은 자리수가 없기 1222때문에 만족스러운 숫자 가 아닙니다 .x = 222b = 1a

양의 정수가 주어지면 만족스러운 숫자 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)


2
또한 다소 관련이 있습니다.
Mr. Xcoder

부착 8333되어 x,c,b,a=33,2,3,8만족하므로?
Jonathan Allan

x욕심이 많기 때문에 @JonathanAllan 아니오 .
Mego

1
@JonathanAllan 정확합니다. 반복 부분 앞에 적어도 2 자리를 갖는 숫자는 만족하기 위해 필요한 조건이다.
Mego

답변:


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
걱정하지 마십시오. 당신은 혼자가 아닙니다. 미완성 된 고문은 저의 요점을 증명해야합니다.
Outgolfer Erik

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에서 제대로 실행되지 않습니다. 유휴 상태에서 완벽하게 작동합니다.


0

자바 스크립트 (ES6), 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 바이트

예쉬.

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블록 에서 발견됩니다 .

어떤 제안이라도 환영합니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.