这是令人满意的数字吗?


10

受此聊天对话启发

满足号码是一个号码,其十进制表示的形式为abx,具有以下属性:

  • x是最长的尾随重复后缀,如果末尾没有重复,则为最后一位(123333-> 3333545656-> 5656123-> 3
  • bx123333-> 255545656-> 4)之前的一位数字
  • a是剩余的前缀(123333-> 155545656-> 555
  • a == c**b**表示指数),其中cx1623333-> 43 3 3 3,不是33 33))的最小重复部分的重复次数

例如,8300是具有满足数a = 8b = 3c = 2,和x = 0024651是不是一个满意的数字,因为x = 1b = 5a = 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)


2
也有些相关
Xcoder先生

随着8333x,c,b,a=33,2,3,8,因此满足?
乔纳森·艾伦

@JonathanAllan不,因为x很贪心。
Mego

1
@乔纳森·艾伦没错。重复部分之前具有至少两位数的数字是满足的必要条件。
Mego

Answers:


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
别担心,您并不孤单。这段未完成的折磨应该证明我的观点。
Erik the Outgolfer '17

1
如果Jelly的答案是> 20个字节,则说明存在某些问题……
FantaC

1

Python 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

在线尝试!

Python 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

Python 3,101字节

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

Python 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

JavaScript(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

Python 2,286字节

ye

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块中。

任何建议都值得欢迎!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.