Apakah Ini Angka yang Memuaskan?


10

terinspirasi oleh percakapan obrolan ini

Angka yang memuaskan adalah angka yang representasi desimalnya berbentuk abx, dengan properti berikut:

  • xadalah akhiran pengulangan terlama terpanjang, atau digit terakhir jika tidak ada pengulangan di akhir ( 123333-> 3333, 545656-> 5656, 123-> 3)
  • badalah digit tunggal sebelum x( 123333-> 2, 55545656-> 4)
  • aadalah awalan yang tersisa ( 123333-> 1, 55545656-> 555)
  • a == c**b( **menunjukkan eksponen), di mana cjumlah pengulangan dari bagian berulang terkecil x( 1623333-> 4( 3 3 3 3, tidak 33 33))

Sebagai contoh, 8300adalah angka memuaskan dengan a = 8, b = 3, c = 2, dan x = 00. 24651tidak sejumlah memuaskan, karena x = 1, b = 5, a = 246, dan tidak ada bilangan bulat cyang memenuhi c^5 = 246. 1222juga bukan angka yang memuaskan, karena dengan x = 222dan b = 1, tidak ada angka yang tersisa untuk a.

Diberikan bilangan bulat positif n >= 100, menghasilkan apakah nangka yang memuaskan.

Contohnya

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
Juga agak terkait .
Tn. Xcoder

Dengan 8333apakah x,c,b,a=33,2,3,8dan karenanya memuaskan?
Jonathan Allan

@ Jonathan Allan Tidak, karena xserakah.
Mego

1
@ JonathanAllan Persis. Angka yang memiliki setidaknya dua digit sebelum bagian berulang adalah kondisi yang diperlukan untuk memuaskan.
Mego

Jawaban:


2

Jelly , 26 byte

terasa terlalu lama

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

Tautan monadik mengambil bilangan bulat dan kembali 1jika input memuaskan dan 0jika tidak.

Cobalah online! atau lihat test-suite

Bagaimana?

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
Jangan khawatir, Anda tidak sendirian. Ini bagian dari penyiksaan yang belum selesai harus membuktikan poin saya.
Erik the Outgolfer

1
Jika jawaban Jelly adalah> 20 byte, Anda tahu ada yang salah ...
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

Cobalah online!

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

Cobalah online!

output melalui kode keluar


Anda dapat mengubah whilekondisi Anda untuk menyimpan 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('')

Output adalah dengan kode keluar.

Kode ini tidak berjalan dengan baik di Tio karena kesalahan rentang. Bekerja dengan sempurna di 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

kamu ya

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

Nadalah fungsi rekursif yang menemukan berapa kali substring sufiks diulang dalam string. Ini pada dasarnya loop melalui semua sufiks yang mungkin, menemukan berapa kali masing-masing diulang menggunakan N; ini mengecualikan semua nilai di mana N==1karena mereka merujuk tidak ada pengulangan; jika daftar tersebut akhirnya kosong, akhiran dari karakter terakhir ditambahkan ke daftar.

Kemudian, sufiks terpanjang diambil, ( q), jumlah karakter yang diambil ditemukan ( i), dan a==c**bdicentang ( print ...).

Jika kesalahan terjadi di sepanjang jalan (yang sering akan terjadi), itu tertangkap di exceptblok.

Setiap saran lebih dari diterima!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.