Nó có phải là một con số thỏa mãn?


10

lấy cảm hứng từ cuộc trò chuyện này

Một số thỏa mãn là một số có biểu diễn thập phân có dạng abx, với các thuộc tính sau:

  • xlà hậu tố lặp lại dài nhất hoặc chữ số cuối cùng nếu không có sự lặp lại ở cuối ( 123333-> 3333, 545656-> 5656, 123-> 3)
  • blà chữ số đơn trước x( 123333-> 2, 55545656-> 4)
  • alà tiền tố còn lại ( 123333-> 1, 55545656-> 555)
  • a == c**b( **biểu thị số mũ), trong đó csố lần lặp lại của phần lặp lại nhỏ nhất của x( 1623333-> 4( 3 3 3 3, không 33 33))

Ví dụ, 8300một số thỏa mãn với a = 8, b = 3, c = 2, và x = 00. 24651không được một số thỏa mãn, bởi vì x = 1, b = 5, a = 246, và không có số nguyên cthỏa mãn c^5 = 246. 1222cũng không phải là một số thỏa mãn, bởi vì với x = 222b = 1, không có chữ số nào còn lại cho a.

Cho một số nguyên dương n >= 100, đầu ra có hay không nlà một số thỏa mãn.

Ví dụ

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
Cũng có phần liên quan .
Ông Xcoder

Với 8333x,c,b,a=33,2,3,8và do đó thỏa mãn?
Jonathan Allan

@Jonathan ALLan Không, vì xtham lam.
Mego

1
@Jonathan ALLan Chính xác. Một số có ít nhất hai chữ số trước một phần lặp lại là điều kiện cần thiết để được thỏa mãn.
Mego

Câu trả lời:


2

Thạch , 26 byte

cảm thấy quá dài

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

Một liên kết đơn âm lấy một số nguyên và trả về 1nếu đầu vào thỏa mãn và 0nếu không.

Hãy thử trực tuyến! hoặc xem một bộ thử nghiệm

Làm sao?

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
Đừng lo lắng, bạn không đơn độc. Đây mảnh tra tấn chưa hoàn thành nên chứng minh quan điểm của tôi.
Erik the Outgolfer 22/12/17

1
Nếu câu trả lời của Jelly là> 20 byte, bạn sẽ biết đôi khi sai ...
FantaC

1

Python 3 , 141 byte

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

Hãy thử trực tuyến!

Python 3 , 144 byte

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

Hãy thử trực tuyến!

đầu ra là thông qua mã thoát


Bạn có thể thay đổi whileđiều kiện của mình để lưu một byte: TIO
FlipTack


0

Python 3 , 101 byte

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

Python 3 , 107 byte

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

Đầu ra là bằng mã thoát.

Mã này không chạy đúng trên Tio do lỗi phạm vi. Hoạt động hoàn hảo trong IDLE.


0

JavaScript (ES6), 282 268 byte

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

Python 2, 286 byte

các ngươi

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

Nlà một hàm đệ quy tìm thấy số lần một chuỗi con hậu tố được lặp lại trong một chuỗi. Điều này về cơ bản lặp qua tất cả các hậu tố có thể, tìm số lần mỗi lần được lặp lại bằng cách sử dụng N; cái này không bao gồm tất cả các giá trị trong đóN==1 vì chúng không đề cập đến việc lặp lại; nếu danh sách kết thúc trống, hậu tố của ký tự cuối cùng sẽ được thêm vào danh sách.

Sau đó, hậu tố dài nhất được lấy, ( q), số lượng ký tự mà nó chiếm được được tìm thấy ( i) và a==c**bđược kiểm tra ( print ...).

Nếu một lỗi xảy ra trên đường đi (thường xảy ra), nó sẽ bị bắt trong exceptkhối.

Bất kỳ đề xuất đều được chào đón nhiều hơn!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.