Ist es eine befriedigende Zahl?


10

inspiriert von diesem Chat-Gespräch

Eine zufriedenstellende Zahl ist eine Zahl, deren Dezimaldarstellung die Form abxmit den folgenden Eigenschaften hat:

  • xist das am längsten nachfolgende Wiederholungssuffix oder die letzte Ziffer, wenn am Ende keine Wiederholung erfolgt ( 123333-> 3333, 545656-> 5656, 123-> 3)
  • bist die einzelne Ziffer vor x( 123333-> 2, 55545656-> 4)
  • aist das verbleibende Präfix ( 123333-> 1, 55545656-> 555)
  • a == c**b( **bezeichnet Exponentation), wobei cdie Anzahl der Wiederholungen des kleinsten sich wiederholenden Teils von x( 1623333-> 4( 3 3 3 3, nicht 33 33)) ist.

Zum Beispiel 8300ist eine befriedigende Zahl mit a = 8, b = 3, c = 2, und x = 00. 24651keine befriedigende Zahl ist, weil x = 1, b = 5, a = 246, und es gibt keine ganze Zahl ist, cdass erfüllt c^5 = 246. 1222ist auch keine zufriedenstellende Zahl, da mit x = 222und b = 1keine verbleibenden Ziffern für vorhanden sind a.

Geben Sie bei einer positiven Ganzzahl aus n >= 100, ob neine zufriedenstellende Zahl vorliegt oder nicht .

Beispiele

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
Auch etwas verwandt .
Herr Xcoder

Mit 8333ist x,c,b,a=33,2,3,8und daher befriedigend?
Jonathan Allan

@ JonathanAllan Nein, weil xist gierig.
Mego

1
@ JonathanAllan Genau. Eine Zahl mit mindestens zwei Ziffern vor einem sich wiederholenden Teil ist eine notwendige Bedingung, um erfüllt zu werden.
Mego

Antworten:


2

Gelee , 26 Bytes

fühlt sich zu lang an

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

Eine monadische Verbindung, die eine Ganzzahl nimmt und zurückgibt, 1wenn die Eingabe zufriedenstellend ist und 0wenn nicht.

Probieren Sie es online aus! oder sehen Sie sich eine Testsuite an

Wie?

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
Mach dir keine Sorgen, du bist nicht allein. Dieses Stück unvollendeter Folter sollte meinen Standpunkt beweisen.
Erik der Outgolfer

1
Wenn die Jelly-Antwort> 20 Bytes ist, wissen Sie, dass etwas nicht stimmt ...
FantaC

1

Python 3 , 141 Bytes

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

Probieren Sie es online aus!

Python 3 , 144 Bytes

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

Probieren Sie es online aus!

Die Ausgabe erfolgt über den Exit-Code


Sie können Ihre whileBedingung ändern , um ein Byte zu speichern: TIO
FlipTack


0

Python 3 , 101 Bytes

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

Python 3 , 107 Bytes

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

Die Ausgabe erfolgt per Exit-Code.

Dieser Code wird auf Tio aufgrund eines Bereichsfehlers nicht ordnungsgemäß ausgeführt. Funktioniert perfekt im Leerlauf.


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 Bytes

ja.

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

Nist eine rekursive Funktion, die ermittelt, wie oft ein Suffix-Teilstring in einer Zeichenfolge wiederholt wird. Dies durchläuft im Grunde alle möglichen Suffixe und ermittelt, wie oft jedes wiederholt wird N. Dies schließt alle Werte aus, bei denen N==1sie sich auf keine Wiederholungen beziehen. Wenn die Liste leer ist, wird das Suffix des letzten Zeichens an die Liste angehängt.

Dann wird das längste Suffix verwendet ( q), die Anzahl der aufgenommenen Zeichen wird gefunden ( i) und a==c**büberprüft ( print ...).

Wenn unterwegs ein Fehler auftritt (was häufig der Fall ist), wird er im exceptBlock abgefangen .

Anregungen sind herzlich willkommen!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.