Minimal Güç Kökü


22

Minimum güç iterasyon bir numarası , aşağıdaki gibi tanımlanır:n

MPI(n): =nmin(basamak(n))

Yani, bir en düşük rakama kaldırdı n . Örneğin, \ text {MPI} (32) = 32 ^ 2 = 1024 ve \ text {MPI} (1234) = 1234 ^ 1 = 1234 .nnMPI(32)=322=1024MPI(1234)=12341=1234

Minimum güç kökü bir dizi n sürekli uygulayarak elde edilen sayısı olarak tanımlanır MPI bulunan sabit bir noktaya kadar. 1 ile 25 arasındaki sayıların minimum güç köklerinin bir tablosu:

   n              MPR(n)
--------------------------
   1                   1
   2                   1
   3              531441
   4                   1
   5                3125
   6 4738381338321616896
   7                   1
   8            16777216
   9                   1
  10                   1
  11                  11
  12                  12
  13                  13
  14                  14
  15                  15
  16                  16
  17                  17
  18                  18
  19                  19
  20                   1
  21                  21
  22                   1
  23              279841
  24                   1
  25                   1

Zorluk: Asgari güç kökü 1 veya kendisine eşit olmayan sayıları oluşturun.

İşte bu dizideki ilk 50 sayı:

3, 5, 6, 8, 23, 26, 27, 29, 35, 36, 39, 42, 47, 53, 59, 64, 72, 76, 78, 82, 83, 84, 92, 222, 223, 227, 228, 229, 233, 237, 239, 254, 263, 267, 268, 269, 273, 276, 277, 278, 279, 285, 286, 287, 289, 296, 335, 338, 339, 342’e ait.

kurallar

  • nBu dizinin ilk sayılarını (0- veya 1-indeksli) üretebilir, nth terimini oluşturabilir, bu terimleri hesaplayan bir jeneratör yaratabilir, sonsuz çoğunu çıktı vb.
  • Herhangi bir temelde girdi alabilir ve çıktı verebilirsiniz, ancak MPR için hesaplamalar taban 10'da olmalıdır. Örneğin, girdi ###(unary) ve çıktı ### ##### ######(unary)
  • Sen gerekir numaralarını verir. "3", "5", "6"Bunlar (örneğin) çıkmaz , çünkü bunlar dizgedir. 3, 5, 6ve 3 5 6ancak ikisi de geçerlidir. Çıktı 2 3, "23"veya twenty-threehepsi sayının geçersiz temsilleri olarak kabul edilir 23. (Yine, bu sayıları temsil etmek için herhangi bir tabanı kullanabilirsiniz.)
  • Bu bir , bu yüzden en kısa kod (bayt cinsinden) kazanır.

2
Merak ediyorum, sonunda n için sabit bir noktanın bulunduğunu nasıl ispat edersiniz?
nwellnhof

1
@nwellnhof (Kaba kanıt.) Diyelim ki sabit bir noktası yok , yani, bulunmuyor. Let olmak -inci yineleme arasında fazla fonksiyon . Bu sıra, kesinlikle artmaktadır, çünkü , . Kesinlikle artmakta olan, 0 ya da 1 olmayan bir rakam olma olasılığı, , yöneldiğinden 0'a yönelir . MPR ( x ) x i i MPI X bir b > bir b c bir , b , c 2 x i x ixMPR(x)xiiMPIxab>abca,b,c2xixi
Conor O'Brien,

Huh. Çapalar bu sekansa sahip değil.
Draco18,

@ ConorO'Brien Bu, hipotezinizin makul olduğunu gösterir, ancak kanıtlamaz.
kasperd

1
@ kasperd Böylece "kaba kanıt" bundan önce.
Conor O'Brien,

Yanıtlar:


5

05AB1E , 8 bayt

Oluşturur n'inci sayısı 1 -indexed

µNÐΔWm}‹

Çevrimiçi deneyin!

açıklama

µ          # run until counter equals input
 NÐ        # push 3 copies of the current iteration index (1-based)
   Δ  }    # run this code until the result no longer changes     
    Wm     # raise the number to the power of its minimum digit
       ‹   # check if greater than the index

İsteğe bağlı olarak aynı bayt sayısında sonsuz bir liste olarak:

∞ʒDΔWm}‹

Çevrimiçi deneyin!


Bekle, hepsi bu kadar mı? .. Bu düşündüğümden çok daha basit görünüyor ..>.> Cevabımı sileceğim, çünkü iki kat daha uzun sürüyor ...
Kevin Cruijssen

@KevinCruijssen: Kendime biraz şaşırdım. Göreve bakarken 12 bayt alacağını düşünmüştüm.
Emigna

1
Meydan okuma yapıldıktan hemen sonra titremedim µve Δaynı cevabı aldım, ama neden işe yaramadığını merak ediyordum ... Bunun Dyerine Ðbir kopyanın sabit nokta işlevi tarafından kullanılacağını düşündüğümden ziyade kullandım ve diğeri küçük işlevden, ancak başka bir kopyaya ihtiyacım olduğunu hesaba katmadım. Enimga'mı çözdüğün için teşekkürler Emigna.
Bay Xcoder

6

Perl 6 , 49 bayt

{grep {($_,{$_**.comb.min}...*==*).tail>$_},1..*}

Çevrimiçi deneyin!

Sonsuz bir dizi döndürür. Aşağıdaki 45 baytlık versiyonun da çalıştığını sanıyorum, ancak sabit noktaların her zaman değişikliklerden sonra bulunduğunu kanıtlayamıyorum.

{grep {($_,{$_**.comb.min}...*)[$_]>$_},3..*}

5

J , 41 39 37 bayt

(>:[echo^:(<(^0".@{/:~@":)^:_))^:_]1x

Çevrimiçi deneyin!

Bu, sonsuz diziyi basan tam bir programdır. Tam bir programın J'de bir fiili geçtiği çok nadir bir durum.

Nasıl çalışır

(>:[echo^:(<mpi_fix))^:_]1x    Using the mpi_fix below; it finds the MPI fixpoint
          (<mpi_fix)           Is mpi_fix greater than the input?
    echo^:                     If so, apply echo; do nothing otherwise
                               echo returns an empty array
 >:[                           Discard the above and return input+1
(                   )^:_       Repeat the above infinitely (increment has no fixpoint)
                        ]1x    starting from arbitrary-precision number 1

J , 41 39 bayt

>:^:(>:(^0".@{/:~@":)^:_)^:_@>:@]^:[&0x

Çevrimiçi deneyin!

Monadik bir fiil. 1 tabanlı bir dizin verildiğinde, bu dizindeki sayıyı döndürür. Altbilgi, ilk 20 terimin doğru olduğunu kontrol eder.

"Fixpoint" kelimesini okuduğumda derhal "Ah evet, ^:_iyi iş çıkarır" diye düşündüm . Sonra öfkeli ve hüzünlü suratlara bu kötü muamele ile sona erdi. Ve bu bir tren bile değil, tek bir fiil .

Ungolfed & Nasıl çalışır?

nth_term =: >:^:(>:(^0".@{/:~@":)^:_)^:_@>:@]^:[&0x

mpi =: ^0".@{/:~@":    Find the MPI
             /:~@":    Sort the string representation
        0   {          Take first item
         ".@           Convert back to number
       ^               Raise the input to the power of above

mpi_fix =: mpi^:_      Find the MPI fixpoint

next_term =: >:^:(>:mpi_fix)^:_@>:    Given a number, find the next term
                               @>:    Increment once, and then...
                  >:mpi_fix           Is mpi_fix not greater than input?
             >:^:           ^:_       Increment while the above is true

nth_term =: next_term@]^:[&0x    Given one-based index, find the nth term
            next_term@]          Apply next_term monadically
                       ^:[       n times
                          &0x    to the starting value of zero

Tespit 0xnoktasını kesin olarak hesaplamak için isteğe bağlı bir tamsayı gereklidir, örneğin 6 sayısı.


Harika! Bu çok fazla ^:, kafam onlardan ikincisinde ağrıyor :)
Galen Ivanov


33 bayt: _&(_&(]]+]>:(^{.@/:~&.":)^:_)>:)*genişletilmiş bir tamsayı olarak girdi alma
mil

4

Pyth , 10 bayt

.f>u^GshS`

Çevrimiçi deneyin!

Bu, bu tür ilk n sayısının bir listesini oluşturur . Otomatik doldurulmuş programın GZZQbir soneki var. Bu basitçe ( .f) kendisinden daha büyük Qbir minimum güce sahip ilk sayıları bulur .u^GshS`GZ

En düşük güç kök kodu u, geçerli sayıyı G, en küçük basamağının gücüne yükselterek sabit bir nokta bulmak suretiyle çalışır ; bu, ilk hharf ( S) ile aynı sözcükleri sıralayarak ( ) sonra tekrar bir tamsayıya ( s) dönüştürülür .


4

Jöle , 10 bayt

*DṂƊƬḊCȦµ#

Iİlk Igirdileri veren STDIN'den bir tamsayı alan bir monadik Bağlantı .

Çevrimiçi deneyin!

( *DṂƊƬṪ%@µ#10 da çalışır)

Nasıl?

Bir başlangıç kadar sayar n=0kadar inputbir monadik fonksiyonunun truthy sonuçlar karşılaşılan ve bu verimler ns.

İşlev, art arda benzersiz olana dek x=ndeğerleri tekrar tekrar uygular ve bu değerleri toplar x. (örneğin: 19verimler [19]; 23verimler [23,529,279841]; 24verimler [24, 576, 63403380965376, 1]; vb ...) ve ardından sonucu kaldırır (en soldaki değeri kaldırır), tüm değerleri ( 1-x) tamamlar ve listede bir sıfır olduğunda veya boş olduğunda Ȧverim elde etmek için kullanır 0.

En içteki işlevi akımı yükseltir xiçin tüm haneleri xve sonra (bunu ilk asgari rakamı bulma üzerinde bir kurtarış byte) minimum tutar.

*DṂƊƬḊCȦµ# - Link (call the input number I)
         # - count up from 0 and yield the first I for which this yields a truthy value:
        µ  -   a monadic chain:
    Ƭ      -     collect until results are not unique:
   Ɗ       -       last three links as a monad:
 D         -         convert to a list of decimal digits
*          -         exponentiate
  Ṃ        -         minimum
     Ḋ     -     dequeue
      C    -     compliment
       Ȧ   -     any-and-all?

ƬḊCȦOrada akıllıca kullanımı . :-)
Outgolfer Erik, 14:18

Ṫ>alır 0:(
Jonathan Allan

4

Mathematica, 59 51 bayt

Misha Lavrov sayesinde -8 bayt .

Select[Range@#,#<(#//.x_:>x^Min@IntegerDigits@x)&]&

Saf işlevi. Girdi olarak bir sayı alır ve bu sayıya kadar olan terimlerin listesini çıktı olarak döndürür. Burada çok karmaşık bir şey yok.


FixedPointkod golfünde genellikle //.(kısa için ReplaceRepeated) olduğu kadar iyi değildir . Burada birkaç bayt kurtarabilir Select[Range@#,1<(#//.x_:>x^Min@IntegerDigits@x)!=#&]&.
Misha Lavrov

Ayrıca, MPI (x) ne 1 ne de x değilse, o zaman daima x'ten büyüktür, bu yüzden daha kısa bir çözümdür Select[Range@#,#<(#//.x_:>x^Min@IntegerDigits@x)&]&.
Misha Lavrov

3

Python 3 , 90 88 bayt

-2 byte @mypetlion

def F(x):m=x**int(min(str(x)));return[int,F][m>x](m)
x=1
while 1:x<F(x)and print(x);x+=1

Çevrimiçi deneyin!

printBir ifade ifPython 2'deki ifadeyi kullanarak iki byte kaydettiğinden F, MPI sabitleme noktasını hesaplar; Gerisi STDOUT'a sonsuz sekans verir.


2 bayt kaydetmek return m>x and F(m)or miçin değiştirin return[int,F][m>x](m).
mypetlion




2

Java 10, 178 173 bayt

v->{for(int x=1,m;;){var b=new java.math.BigInteger(++x+"");for(m=9;m>1;)b=b.pow(m=(b+"").chars().min().orElse(0)-48);if(b.compareTo(b.valueOf(x))>0)System.out.println(x);}}

Port @GB 'ın Yakut cevap , bu yüzden de süresiz yazdırır.

Çevrimiçi deneyin.

Açıklama:

v->{             // Method with empty unused parameter and no return-type
  for(int x=1,   //  Start an integer `x` at 1
      m;         //  Temp integer for the smallest digit, starting uninitialized
      ;){        //  Loop indefinitely
    var b=new java.math.BigInteger(++x 
                 //   Increase `x` by 1 first
          +"");  //   And create a BigInteger `b` for the new `x`
    for(m=9;     //   Reset `m` to 9
        m>1;)    //   Loop as long as the smallest digit is not 0 nor 1
      b=b.pow(m=(b+"").chars().min().orElse(0)-48
                 //    Set `m` to the smallest digit in `b`
              ); //    Set `b` to `b` to the power of digit `m`
    if(b.compareTo(b.valueOf(x))>0)
                 //   If `b` is larger than `x`:
      System.out.println(x);}}
                 //    Print `x` with a trailing newline


1

JavaScript (Node.js) , 98 90 89 86 bayt

-3 bayt teşekkürler @Conor O'Brien

function*(){for(n=0n;;x>n&&(yield n))for(x=++n;(b=Math.min(...""+x))-1;)x**=BigInt(b)}

Çevrimiçi deneyin!

Gerçeği kullanarak MPR,(n)>n Eğer MPR,(n){1,n}

Bir jeneratörün bir nsayı dizisini döndürmekten daha kısa olduğu görülüyor mu?

Veya sonsuz yazdırma - 72 bayt

for(n=0n;;x>n&&alert(n))for(x=++n;(b=Math.min(...""+x))-1;)x**=BigInt(b)

Çevrimiçi deneyin!


86 byte , kontrol akışının bir kısmını hareket ettirerek, destekleri ortadan kaldırır. (esas: if(x>n)yield niçin x>n&&(yield n)bir ifade olarak)
Conor O'Brien



0

Raket , 270, 257 233 bayt

(define(f n)(local((define(m x)(expt x(-(first(sort(map char->integer(string->list(~v x)))<))48)))(define(g y)(if(= y(m y))y(g(m y))))(define(k x l)(if(=(length l)n)l(if(< x(g x))(k(+ x 1)(cons x l))(k(+ x 1)l)))))(reverse(k 1'()))))

Çevrimiçi deneyin!

Bu benim ilk Raket gönderim, bu yüzden kesinlikle çok daha fazla golf oynayabilir. Yine de, en azından görevi çözmeyi başarabilmek için biraz memnunum.

Daha okunabilir:

(define (f n)
  (local ((define (m x)
           (expt x
                 (- (first (sort (map char->integer (string->list (~v x)))
                                 <))
                    48)))
         (define (g y)
           (if
             (= y (m y))
             y
             (g (m y))))
         (define (k x l)
           (if (= (length l) n)
               l
               (if (< x (g x))
                   (k (+ x 1) (cons x l))
                   (k (+ x 1) l))))
    (reverse (k 1 '()))))

0

Aksiyom, 168 bayt

u(x)==(y:=x::String;x^reduce(min,[ord(y.i)-48 for i in 1..#y])::NNI)
q(a:PI):PI==(b:=a;repeat(c:=u(b);c=b=>break;b:=c);b)
z(x)==[i for i in 1..x|(m:=q(i))~=1 and m~=i]

Onu kullanma fonksiyonu z (); burada, yazışma numarası 1 değil, kendisi değil ve argümanından daha az olan numaraları yazdırır.

(6) -> z 1000
 (6)
 [3, 5, 6, 8, 23, 26, 27, 29, 35, 36, 39, 42, 47, 53, 59, 64, 72, 76, 78, 82,
  83, 84, 92, 222, 223, 227, 228, 229, 233, 237, 239, 254, 263, 267, 268,
  269, 273, 276, 277, 278, 279, 285, 286, 287, 289, 296, 335, 338, 339, 342,
  346, 347, 348, 354, 358, 363, 365, 372, 373, 374, 376, 382, 383, 386, 392,
  394, 395, 399, 423, 424, 426, 427, 428, 432, 433, 435, 436, 442, 447, 459,
  462, 464, 466, 467, 468, 469, 476, 477, 479, 483, 487, 488, 489, 493, 494,
  523, 524, 527, 529, 533, 537, 542, 546, 553, 556, 557, 562, 563, 572, 573,
  577, 582, 583, 584, 594, 595, 598, 623, 626, 627, 629, 632, 633, 642, 646,
  647, 648, 663, 664, 669, 672, 676, 682, 683, 684, 693, 694, 695, 698, 722,
  724, 729, 736, 759, 763, 773, 775, 782, 786, 823, 829, 835, 846, 847, 856,
  873, 876, 885, 893, 894, 896, 923, 924, 928, 933, 953, 954, 962, 969, 973,
  974, 984, 993, 994, 995]
                                               Type: List PositiveInteger

0

Visual Basic .NET (.NET Core) , 290 bayt (ithalatı içerir)

Iterator Function A()As System.Collections.IEnumerable
Dim i=B.One,q=i,p=i
While 1=1
q=i-1
p=i
While q<>p
For j=0To 9
If p.ToString.Contains(j)Then
q=p
p=B.Pow(p,j)
Exit For
End If
Next
End While
If p>1And p<>i Then Yield i
i+=1
End While
End Function

Çevrimiçi deneyin!

Aşağıdaki içe aktarmayı gerektirir:

Imports B = System.Numerics.BigInteger

Bu, ölçütleri karşılayan sonsuz (tembel yüklü) tam sayıların listesini döndürmek için bir yineleyici işlevi kullanır. Kullanımları BigIntegerözellikle orta hesaplamalar, herhangi bir boyut kısıtlamaları önlemek için.

Un-golfed:

Iterator Function A() As System.Collections.IEnumerable
    Dim i As B = 1
    While True
        Dim prevProduct As B = 0
        Dim product As B = i
        While prevProduct <> product
            For j = 0 To 9
                If product.ToString.Contains(j) Then
                    prevProduct = product
                    product = B.Pow(product, j)
                    Exit For
                End If
            Next
        End While
        If product <> 1 And product <> i Then
            Yield i
        End If
        i += 1
    End While
End Function

0

Ortak Lisp , 238 bayt

(defun x(m n o p q)(setf i(sort(map 'list #'digit-char-p(prin1-to-string m))#'<))(setf j(expt m(first i)))(cond((= q p)nil)((and(= n j)(not(= n 1))(not(= n o)))(cons o(x(1+ o)0(1+ o)p(1+ q))))((= n j)(x(1+ o)0(1+ o)p q))(t(x j j o p q))))

Çevrimiçi deneyin!


0

APL (NARS), 96 karakter, 192 bayt

r←f w;k;i;a
   r←⍬⋄k←1
A: i←k
B: →C×⍳i=a←i*⌊/⍎¨⍕i⋄i←a⋄→B
C: →D×⍳(a=k)∨a=1⋄r←r,k
D: k+←1⋄→A×⍳k≤w

test (argüman 22'nin kısmi sonucu çok büyük görünüyor, bu yüzden <21 argüman olur mu bilmiyorum)

  f 21
3 5 6 8 


0

C (clang) + -DL=long long -lm, 213 bayt

q(char*a,char*b){return*a>*b;}L f(L a){char*c;asprintf(&c,"%lld",a);qsort(c,strlen(c),1,q);L b=pow(a,*c-48);return b>a?f(b):b;}i;g(j){for(i=0;j;i++){L x=f(i);x!=i&x!=1&x>0&&printf("%d\n",i)&&j--;}}

Çevrimiçi deneyin!

İşlev , dizinin g(j)ilk jterimlerini yazdırır .


a=...Bir düzine kadar bayt kurtarmak için ile geri dönün .

Ve x>1yerine x!=1&x>0.

Birincisi, GCC’de değişiklik yapılması gerekiyor.

0

Kabuğu , 16 12 10 bayt

fS>ωṠ^o▼dN

H.PWiz sayesinde 6 bayt kaydedildi.
Çevrimiçi deneyin!

açıklama

fS>ωṠ^o▼dN
f        N       Filter the natural numbers where...
   ω             ... the fixed point...
    Ṡ^o▼d        ... of raising the number to its smallest digit...
 S>              ... is greater than the number.

Burada ile değiştirebilirsiniz S>. Bu, hepsini tek bir satıra koymanıza izin verir. Ayrıca, yanlışlıkla önceki tio bağlantısında
bıraktığın görülüyor

0

Japt , 44 bayt


_ì ñ g
_gV ¥1?Z:ZpZgV)gW
@@[1X]øXgW}fXÄ}gUÄ

Çevrimiçi deneyin!

Diğer Japt cevaplarından oldukça farklı.

Açıklama:

                        Empty line preserves the input

_ì ñ g                Function V finds the smallest digit in a number Z
 ì                          Get the digits of Z
   ñ                        Sort the digits
     g                      Get the first (smallest) digit


_gV ¥1?Z:ZpZgV)gW     Function W finds the MPR of a number Z
 gV ¥1?Z                    If V(Z) is 1, then it's stable; return it
        :ZpZgV)             Otherwise get MPI of Z...
               gW           And call W on it ( MPR(Z) == MPR(MPI(Z)) )

@@[1X]øXgW}fXÄ}gUÄ    Main program
@             }gUÄ      Get the nth number by repeatedly applying...    
 @        }fXÄ              Find the next smallest number X which returns false to...
       XgW                    MPR(X)
      ø                       is either...
  [1X]                        1 or X

Gelecekteki golf olanakları açısından, el ile azalabileceğinden şüphelendiğim bir sayı üzerinde bir işlev çağırma manüel olarak çok şey yapıyorum, ancak nasıl yapılacağından emin değilim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.