최소 동력 뿌리


22

숫자 n최소 전력 반복 은 다음과 같이 정의됩니다.n

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

즉, nn 의 가장 낮은 자릿수로 n . 예를 들어, MPI(32)=322=1024MPI(1234)=12341=1234 입니다.

숫자 n최소 제곱근 은 고정 점이 발견 될 때까지 MPI 를 반복적으로 적용하여 얻은 수로 정의됩니다 . 다음은 1에서 25 사이의 최소 제곱근에 대한 표입니다.nMPI

   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

도전 과제 : 최소 제곱근이 1과 같지 않은 숫자를 생성하십시오.

이 순서에서 처음 50 개의 숫자는 다음과 같습니다.

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

규칙

  • n이 시퀀스 의 첫 번째 숫자 (0 또는 1 색인)를 생성하고, 항을 생성하고 n, 항을 계산하는 생성기를 생성하고, 이들 중 무한히 많은 수를 출력하는 등의 작업을 수행 할 수 있습니다.
  • 모든베이스에서 입력하고 출력 할 수 있지만 MPR에 대한 계산은베이스 10에 있어야합니다. 예를 들어, 입력 ###(단항)과 출력 ### ##### ######( 단항)을 취할 수 있습니다.
  • 당신은 해야한다 번호를 얻을 수 있습니다. "3", "5", "6"그것들은 문자열이기 때문에 당신은 (예를 들어) 출력하지 않을 수 있습니다 . 3, 5, 6그리고 3 5 6하지만, 모두 유효합니다. 출력 2 3, "23"또는 twenty-three모두 유효하지 않은 숫자 표현으로 간주됩니다 23. (다시 말해서,이 숫자를 나타내는 데 어떤 기수를 사용할 수 있습니다.)
  • 이것은 이므로 가장 짧은 코드 (바이트)가 이깁니다.

2
궁금한 점이 있다면, 모든 n에 대해 고정 점이 발견되었다는 것을 어떻게 증명할 수 있습니까?
nwellnhof

1
@nwellnhof가 (거친 증거.) 어떤 시점이 고정되어 가정하자 즉, MPR ( X ) 존재하지 않습니다. 하자 X 내가 번째 반복의 MPI의 이상 기능 X를 . 이 시퀀스는 엄격하기 때문에, 증가 B > B 형 C 모두 , B , C 2 . 엄격하게된다는 증가 없음 디지트의 확률 X는 0 인 0 또는 1을 향해 경향 X 방향 경향 .xMPR(x)xiiMPIxab>abca,b,c2xixi
Conor O'Brien

허. oeis에는이 시퀀스가 ​​없습니다.
Draco18s

@ ConorO'Brien 그것은 당신의 가설이 그럴듯하다는 것을 보여 주지만 그것을 증명하지는 않습니다.
kasperd

1
@kasperd 따라서 "거친 증거"전에.
코너 오브라이언

답변:


5

05AB1E , 8 바이트

생성 n 번째 숫자 1 -indexed을

µNÐΔWm}‹

온라인으로 사용해보십시오!

설명

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

선택적으로 동일한 바이트 수에서 무한 목록으로 :

∞ʒDΔWm}‹

온라인으로 사용해보십시오!


대기가있다 모든 .. 그 모습 내가 생각했던 것보다 훨씬 simpeler ..>> 내가, 내 대답은 삭제됩니다 그 이후 두 배 한 것보다 ..?.
케빈 Cruijssen

@ KevinCruijssen : 나는 조금 놀랐다. 작업을 볼 때 12 바이트 정도 걸릴 것이라고 생각했습니다.
Emigna

1
내가 함께 twiddled µΔ도전을 게시 한 후 바로이 똑같은 대답을 얻었다, 그러나 그것은 작동하지 않았다 왜 궁금 ... 내가 사용하는 D것이 아니라 Ð내가 하나 개의 사본이 고정 소수점 기능에 의해 사용 된 것이라고 생각 때문에 다른 하나는 기능보다 작지만 다른 사본이 필요하다는 것을 고려하지 않았습니다. Enimga를 해결해 주셔서 감사합니다.
Mr. Xcoder

6

펄 6 , 49 바이트

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

온라인으로 사용해보십시오!

무한 시퀀스를 반환합니다. 다음 45 바이트 버전도 작동한다고 가정하지만 n 개의 반복 후에 고정 소수점이 항상 있음을 증명할 수는 없습니다.

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

5

J , 41 39 37 바이트

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

온라인으로 사용해보십시오!

이것은 무한 시퀀스를 인쇄하는 전체 프로그램입니다. 전체 프로그램이 J의 동사를 능가하는 매우 드문 경우입니다.

작동 원리

(>:[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 바이트

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

온라인으로 사용해보십시오!

모나 딕 동사. 1 기반 인덱스가 주어지면 해당 인덱스의 숫자를 반환합니다. 바닥 글은 처음 20 개의 용어가 올바른지 확인합니다.

"fixpoint"라는 단어를 읽으면서 나는 즉시 "아, 그래, ^:_큰일을 할 것 "이라고 생각했습니다 . 그런 다음 나는 화가 나고 슬픈 얼굴의이 혐오로 끝났다. 그리고 그것은 기차조차도 아니며, 하나의 동사 입니다.

Ungolfed & 작동 방식

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

고정 소수점을 0x정확하게 계산하려면 임의 정밀도 정수 가 필요합니다 (예 : 숫자 6).


큰! 그것의 많은 ^:, 내 머리는 그들 중 두 번째에 통증을 시작 :)
Galen Ivanov


33 바이트 : _&(_&(]]+]>:(^{.@/:~&.":)^:_)>:)*확장 된 정수로 입력을 복용
마일

4

Pyth , 10 바이트

.f>u^GshS`

온라인으로 사용해보십시오!

GZZQ.fQu^GshS`GZ

최소 제곱근 코드 u는 현재 숫자 G를 최소 자릿수의 제곱수 로 고정하는 고정 소수점 을 찾습니다.이 숫자는 h사전 식으로 정렬 된 첫 번째 숫자 ( ) 와 동일하며 S다시 정수 ( s) 로 변환됩니다 .


4

젤리 , 10 바이트

*DṂƊƬḊCȦµ#

ISTDIN에서 정수을 가져 오는 모나 딕 링크 는 첫 번째 I항목 을 생성 합니다.

온라인으로 사용해보십시오!

( *DṂƊƬṪ%@µ#10도 작동합니다)

방법?

모나 딕 함수의 진실한 결과가 n=0나올 때까지 시작하여 계산합니다.inputn .

이 함수는 다른 모나 딕 함수를 반복해서 적용 하고 결과가 더 이상 고유하지 않을 때까지 x=n값을 수집합니다 x. (예 : 19yields [19]; 23yields [23,529,279841]; 24yields [24, 576, 63403380965376, 1]; etc ...) 그런 다음 결과를 대기열에서 빼고 (가장 왼쪽 값 제거) 모든 값 ( 1-x)을 보완 하고 목록에 0이 있거나 비어있는 경우 Ȧ산출하는 데 사용 합니다 0.

가장 안쪽의 함수는 전류 x모든 자릿수 x로 올린 다음 최소값을 유지합니다 (최소 자릿수를 먼저 찾는 것보다 바이트를 절약합니다).

*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Ȧ저기 의 영리한 사용법 . :-)
Outgolfer Erik

Ṫ>픽업 0:(
Jonathan Allan

4

매스 매 티카, 59 51 바이트

Misha Lavrov 덕분에 -8 바이트 .

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

순수한 기능. 숫자를 입력으로 취하고 해당 숫자까지의 항 목록을 출력으로 리턴합니다. 여기서 매우 복잡한 것은 없습니다.


FixedPoint코드 골프에서 //.(약칭 ReplaceRepeated) 만큼 좋지 않습니다 . 여기에서로 몇 바이트를 절약 할 수 있습니다 Select[Range@#,1<(#//.x_:>x^Min@IntegerDigits@x)!=#&]&.
Misha Lavrov

또한 MPI (x)가 1 또는 x가 아닌 경우 항상 x보다 크므로 더 짧은 해는 Select[Range@#,#<(#//.x_:>x^Min@IntegerDigits@x)&]&입니다.
Misha Lavrov

3

파이썬 3 , 90 88 바이트

@mypetlion -2 바이트

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

온라인으로 사용해보십시오!

print표현식 if이 파이썬 2의 명령문을 사용하여 2 바이트를 절약 할 F때 MPI 수정 점을 계산합니다. 나머지는 STDOUT에 무한 시퀀스를 제공합니다.


변경 return m>x and F(m)or m하는 return[int,F][m>x](m)2 바이트를 저장합니다.
mypetlion




2

Java 10, 178 173 바이트

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

@GB 의 Ruby 응답 포트는 무한정 인쇄됩니다.

온라인으로 사용해보십시오.

설명:

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

자바 스크립트 (Node.js) , 98 90 89 86 bytes

@Conor O'Brien에게 -3 바이트 감사

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

온라인으로 사용해보십시오!

사실을 사용하여 아르 자형()> 만약 아르 자형(){1,}

발전기가 n숫자 배열을 반환하는 것보다 짧은 것 같습니다 .

또는 무한으로 인쇄-72 바이트

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

온라인으로 사용해보십시오!


제어 흐름 중 일부를 이동하여 중괄호를 제거하여 86 바이트 . (주로 : if(x>n)yield nx>n&&(yield n)표현 등)
코너 오브라이언


0

자바 스크립트 (Chrome), 78 77 바이트

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

온라인으로 사용해보십시오!

내 자신의 파이썬 3 솔루션의 포트 . 최신 버전의 Chrome 지원 BigInt(PC에서 테스트). 브라우저에서이 코드를 그대로 사용하지 마십시오.


롤은 내 대답을 골프하려고했지만 당신은 리드를 얻었다. 77 바이트 또한 77 바이트, 나의 계획된 골프
Shieru Asakoto

0

라켓 , 270, 257233 바이트

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

온라인으로 사용해보십시오!

이게 내 첫이야 라켓 제출물이므로 훨씬 더 골프를 칠 수 있습니다. 그럼에도 불구하고 나는 적어도 과제를 해결하기 위해 관리하는 것에 다소 만족합니다.

더 읽기 쉬운 :

(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

공리, 168 바이트

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]

이를 사용하는 함수는 z ()입니다. 여기에는 해당 숫자가 1이 아닌 1이 아닌 해당 숫자를 갖는 숫자가 인쇄됩니다.

(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 바이트 (가져 오기 포함)

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

온라인으로 사용해보십시오!

다음과 같은 가져 오기가 필요합니다.

Imports B = System.Numerics.BigInteger

반복자 함수를 사용하여 기준에 맞는 무한의 (지연된로드 된) 정수 목록을 반환합니다. 용도BigInteger특히 중간 계산에서 크기 제한을 피하기 위해 합니다.

언 골프 :

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

APL (NARS), 96 자, 192 바이트

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

테스트 (인수 22에 대한 부분 결과가 훨씬 커 보이므로 <21 인수는 괜찮을 수 있는지 모르겠습니다)

  f 21
3 5 6 8 


0

C (클랑) + -DL=long long -lm, 213 바이트

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

온라인으로 사용해보십시오!

함수 는 시퀀스 g(j)의 첫 번째 j항을 인쇄합니다 .


a=...12 바이트 정도를 절약하려면로 돌아가십시오 .

그리고 x>1대신에 x!=1&x>0.

그러나 첫 번째는 GCC를 변경해야합니다.

0

껍질 , 16 12 10 바이트

fS>ωṠ^o▼dN

H.PWiz 덕분에 6 바이트를 절약했습니다.
온라인으로 사용해보십시오!

설명

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.

당신은 변경할 수 있습니다 여기에 S>. 이를 통해 한 줄에 모두 넣을 수 있습니다. 또한, 당신이 실수로 이전 TIO 링크에 남아있는 것으로 보인다
H.PWiz

0

apt , 44 바이트


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

온라인으로 사용해보십시오!

다른 Japt 답변과는 실질적으로 다릅니다.

설명:

                        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

미래의 골프 가능성 측면에서, 나는 숫자에 대해 수동으로 많은 함수를 호출합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.