Root điện tối thiểu


22

Các lặp điện tối thiểu của một số n được định nghĩa như sau:

MPI(n):=nmin(digits(n))

Đó là, n nâng lên chữ số thấp nhất trong n . Ví dụ: MPI(32)=322=1024MPI(1234)=12341=1234 .

Nguồn gốc tối thiểu của một số n được định nghĩa là số có được từ việc áp dụng MPI liên tục cho đến khi tìm thấy một điểm cố định. Dưới đây là bảng các gốc năng lượng tối thiểu của các số từ 1 đến 25:

   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

Thử thách: Tạo các số có gốc công suất tối thiểu không bằng 1 hoặc chính nó.

Dưới đây là 50 số đầu tiên trong chuỗi này:

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, 339, 339, 342

Quy tắc

  • Bạn có thể tạo các nsố đầu tiên của chuỗi này (0 hoặc 1 chỉ mục), tạo nthuật ngữ thứ, tạo một trình tạo tính toán các thuật ngữ này, xuất ra vô số các số đó, v.v.
  • Bạn có thể lấy đầu vào và đưa ra đầu ra ở bất kỳ cơ sở nào, nhưng các tính toán cho MPR phải ở cơ sở 10. Ví dụ: bạn có thể lấy đầu vào ###(không đồng nhất) và đầu ra ### ##### ######(không đồng nhất)
  • Bạn phải mang lại số lượng. Bạn không thể (ví dụ) đầu ra "3", "5", "6", vì đó là các chuỗi.3, 5, 63 5 6cả hai đều hợp lệ, tuy nhiên. Xuất ra 2 3, "23"hoặc twenty-threetất cả được coi là đại diện không hợp lệ của số 23. (Một lần nữa, bạn có thể sử dụng bất kỳ cơ sở nào để thể hiện những con số này.)
  • Đây là một , vì vậy mã ngắn nhất (tính bằng byte) sẽ thắng.

2
Chỉ tò mò, làm thế nào bạn có thể chứng minh rằng một điểm cố định được tìm thấy cuối cùng cho tất cả n?
nwellnhof

1
@nwellnhof (Bằng chứng thô.) Giả sử không có điểm cố định của , tức là MPR ( x ) không tồn tại. Đặt x i là lần lặp thứ i của hàm MPI trên x . Chuỗi này đang gia tăng nghiêm ngặt, vì một b > một b c cho tất cả một , b , c 2 . Là đúng ngày càng tăng, khả năng không có chữ số trong x i là 0 hoặc 1 có xu hướng hướng tới 0 khi x i có xu hướng hướng tới xMPR(x)xiiMPIxab>abca,b,c2xixi .
Conor O'Brien

Huh. Các oeis không có trình tự này.
Draco18

@ ConorO'Brien Điều đó cho thấy giả thuyết của bạn là hợp lý, nhưng nó không chứng minh điều đó.
kasperd

1
@kasperd Do đó "bằng chứng thô" trước nó.
Conor O'Brien

Câu trả lời:


5

05AB1E , 8 byte

Tạo số thứ n 1 -exexed

µNÐΔWm}‹

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

Giải trình

µ          # 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

Tùy chọn là một danh sách vô hạn tại cùng một số byte:

∞ʒDΔWm}‹

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


Chờ đợi, là tất cả .. Đó là vẻ bề ngoài rất nhiều simpeler hơn tôi nghĩ nó sẽ là ..>> Tôi sẽ xóa câu trả lời của tôi, vì nó là hơn gấp đôi thời gian ..?.
Kevin Cruijssen

@KevinCruijssen: Bản thân tôi cũng hơi ngạc nhiên. Nghĩ rằng nó sẽ mất 12 byte hoặc hơn khi nhìn vào nhiệm vụ.
Emigna

1
Tôi đã xoay vòng µΔngay sau khi thử thách được đăng và nhận được câu trả lời chính xác như vậy, nhưng tôi đã tự hỏi tại sao nó không hoạt động ... Tôi đã sử dụng Dchứ không phải Ðvì tôi nghĩ rằng một bản sao sẽ được sử dụng bởi chức năng điểm cố định và chức năng khác nhỏ hơn chức năng, nhưng tôi đã không tính đến việc tôi cần một bản sao khác. Cảm ơn, Emigna, vì đã giải quyết Enimga của tôi.
Ông Xcoder

6

Perl 6 , 49 byte

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

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

Trả về một chuỗi vô hạn. Tôi cho rằng phiên bản 45 byte sau cũng hoạt động, nhưng tôi không thể chứng minh rằng điểm cố định luôn được tìm thấy sau n lần lặp.

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

5

J , 41 39 37 byte

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

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

Đây là một chương trình đầy đủ in chuỗi vô hạn. Một dịp rất hiếm khi một chương trình đầy đủ đánh bại một động từ ở J.

Làm thế nào nó hoạt động

(>:[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 byte

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

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

Một động từ đơn âm. Đưa ra một chỉ mục dựa trên 1, trả về số tại chỉ mục đó. Các footer kiểm tra rằng 20 điều khoản đầu tiên là chính xác.

Đọc từ "fixpoint", tôi nghĩ ngay "Ồ vâng, ^:_sẽ làm tốt công việc". Sau đó, tôi đã kết thúc với sự ghê tởm của khuôn mặt tức giận và buồn bã. Và nó thậm chí không phải là một chuyến tàu, nó là một động từ duy nhất .

Ungolfed & Cách thức hoạt động

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

Số nguyên chính xác tùy ý 0xlà cần thiết để tính toán điểm cố định một cách chính xác, ví dụ như số 6.


Tuyệt quá! Đó là rất nhiều ^:, đầu của tôi bắt đầu đau vào thứ hai trong số họ :)
Galen Ivanov


33 byte: _&(_&(]]+]>:(^{.@/:~&.":)^:_)>:)*lấy đầu vào là một số nguyên mở rộng
dặm

4

Bình thường , 10 byte

.f>u^GshS`

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

nGZZQ.fQu^GshS`GZ

Mã gốc công suất tối thiểu hoạt động bằng cách tìm một điểm cố định unâng số hiện tại Glên lũy thừa của chữ số tối thiểu, giống như chữ số đầu tiên ( h) được sắp xếp theo từ vựng ( S), sau đó được chuyển đổi trở lại thành số nguyên ( s).


4

Thạch , 10 byte

*DṂƊƬḊCȦµ#

Một liên kết đơn lấy một số nguyên I, từ STDIN mang lại các Imục đầu tiên .

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

(cũng *DṂƊƬṪ%@µ#hoạt động cho 10)

Làm sao?

Đếm bắt đầu n=0cho đến khi inputkết quả trung thực của một chức năng đơn âm được gặp phải và mang lại những ns.

Hàm liên tục áp dụng một hàm đơn âm khác bắt đầu bằng x=nvà thu thập các giá trị xcho đến khi kết quả không còn là duy nhất. (ví dụ: 19sản lượng [19]; 23sản lượng [23,529,279841]; 24sản lượng [24, 576, 63403380965376, 1]; vv ...) và sau đó loại bỏ kết quả (loại bỏ giá trị ngoài cùng bên trái), bổ sung cho tất cả các giá trị ( 1-x) và sử dụng Ȧđể mang lại0 khi có số 0 trong danh sách hoặc nếu nó trống.

Hàm trong cùng tăng dòng điện xtới tất cả các chữ số xvà sau đó giữ mức tối thiểu (thực hiện điều này là một byte tiết kiệm so với việc tìm chữ số tối thiểu trước).

*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?

Sử dụng thông minh ở đằng ƬḊCȦkia. :-)
Erik the Outgolfer 14/10/18

Ṫ>chọn lên 0:(
Jonathan Allan

4

Toán học, 59 51 byte

-8 byte nhờ Misha Lavrov .

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

Chức năng thuần túy. Lấy một số làm đầu vào và trả về danh sách các thuật ngữ lên đến số đó làm đầu ra. Không có gì rất phức tạp ở đây.


FixedPointthường không tốt bằng //.(viết tắt ReplaceRepeated) trong mã golf. Ở đây, chúng tôi có thể lưu một vài byte với Select[Range@#,1<(#//.x_:>x^Min@IntegerDigits@x)!=#&]&.
Misha Lavrov

Ngoài ra, nếu MPI (x) không phải là 1 hay x, thì nó luôn lớn hơn x, do đó, một giải pháp thậm chí còn ngắn hơn Select[Range@#,#<(#//.x_:>x^Min@IntegerDigits@x)&]&.
Misha Lavrov

3

Python 3 , 90 88 byte

-2 byte bởi @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

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

printnhư một biểu thức lưu hai byte bằng cách sử dụng ifcâu lệnh trong Python 2. Ftính toán điểm cố định MPI; phần còn lại đưa ra chuỗi vô hạn cho STDOUT.


Thay đổi return m>x and F(m)or mđể return[int,F][m>x](m)lưu 2 byte.
mypetlion




2

Java 10, 178 173 byte

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);}}

Cổng câu trả lời Ruby của @GB , do đó cũng in vô thời hạn.

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

Giải trình:

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 byte

-3 byte cảm ơn @Conor O'Brien

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

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

Sử dụng thực tế là MPR(n)>n nếu MPR(n){1,n}

Có vẻ như một trình tạo ngắn hơn trả về một mảng các nsố?

Hoặc in vô hạn - 72 byte

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

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


86 byte bằng cách di chuyển một số luồng điều khiển xung quanh, loại bỏ dấu ngoặc. (chủ yếu là: if(x>n)yield nđể x>n&&(yield n)như là một biểu)
Conor O'Brien


0

JavaScript (Chrome), 78 77 byte

F=x=>(m=x**BigInt(Math.min(...''+x)))>x?F(m):m
for(x=0n;++x;)x<F(x)&&alert(x)

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

Cổng của giải pháp Python 3 của riêng tôi . Phiên bản mới nhất của Chrome hỗ trợ BigInt(đã thử nghiệm trên PC của tôi). Đừng thử mã này như trên trình duyệt của bạn.


lol chuẩn bị đánh golf câu trả lời của tôi nhưng bạn đã dẫn đầu. 77 byte Cũng 77 byte, sân golf theo kế hoạch của tôi
Shieru Asakoto

0

Vợt , 270, 257 233 byte

(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'()))))

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

Đây là lần đầu của tôi gửi vợt , vì vậy nó chắc chắn có thể được chơi gôn hơn nữa. Tuy nhiên, tôi phần nào hài lòng, ít nhất là để quản lý để giải quyết công việc.

Dễ đọc hơn:

(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

Tiên đề, 168 byte

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]

Hàm để sử dụng nó là z (); ở đây, nó in các số có độ chính xác một số không phải 1, không phải chính nó và nhỏ hơn đối số của nó.

(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 byte (bao gồm nhập)

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

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

Yêu cầu nhập sau:

Imports B = System.Numerics.BigInteger

Điều này sử dụng hàm iterator để trả về một danh sách các số nguyên vô hạn (được tải lười biếng) đáp ứng các tiêu chí. Sử dụng BigIntegerđể tránh bất kỳ hạn chế kích thước, đặc biệt là với các tính toán trung gian.

Chưa chơi gôn:

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

Lisp thường gặp , 238 byte

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

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


0

APL (NARS), 96 ký tự, 192 byte

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

kiểm tra (kết quả một phần cho đối số 22 dường như rất lớn vì vậy <21 đối số tôi không biết nếu có thể ổn)

  f 21
3 5 6 8 


0

C (tiếng kêu) + -DL=long long -lm, 213 byte

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--;}}

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

Hàm g(j)in các số hạng đầu tiên jcủa chuỗi.


Quay trở lại a=...để lưu một tá byte.

x>1thay vì x!=1&x>0.

Cái đầu tiên đòi hỏi phải thay đổi GCC.

0

Husk , 16 12 10 byte

fS>ωṠ^o▼dN

Đã lưu 6 byte nhờ H.PWiz.
Hãy thử trực tuyến!

Giải trình

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.

Bạn có thể thay đổi ở đây với S>. Điều này cho phép bạn đặt tất cả trong một dòng. Ngoài ra, có vẻ như bạn đã để nhầm trong liên kết tio trước đó
H.PWiz

0

Japt , 44 byte


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

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

Thực chất khác với câu trả lời của Japt khác.

Giải trình:

                        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

Về khả năng chơi gôn trong tương lai, tôi thực hiện rất nhiều cách gọi thủ công một chức năng trên một số mà tôi nghi ngờ có thể giảm nhưng tôi không biết làm thế nào.

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.