자릿수의 평등


23

소개

숫자를 보자 180. 이 숫자의 자릿수가 다음과 같기 때문에 흥미로운 숫자입니다.

1 + 8 + 0 = 9

그리고이 숫자의 제곱 버전 또는

180² = 32400 > 3 + 2 + 4 + 0 + 0 = 9

이들은 모두 9 입니다. 원래 숫자와 제곱 숫자의 자릿수는 같습니다. 물론 이것은 OEIS : A058369에도 있습니다.

태스크

음이 아닌 정수 주어 n출력 께 n번째 긍정적 이 조건 번호.

테스트 사례 ( 인덱싱되지 않은 )

Input > Output

0 > 1
1 > 9
2 > 10
3 > 18
4 > 19
5 > 45
6 > 46
7 > 55
8 > 90
9 > 99
10 > 100
11 > 145
12 > 180
13 > 189
14 > 190
15 > 198
16 > 199
17 > 289
18 > 351
19 > 361

입력 이 더 적합하면 1 인덱싱 할 수도 있습니다 .

이것은 이므로 바이트 수가 가장 적은 제출이 승리합니다!


아무도 발견하지 못한 경우 0 또는 1 (mod 9)에 해당하는 숫자 만 목록에 나타날 수 있습니다.
Neil

@MamaFunRoll 음 ... 아니. 죄송합니다. 디지털 뿌리가 5 인 숫자는 디지털 뿌리가 7 인 정사각형
Neil

@Neil owait nvm
Mama Fun Roll

I는 입력이 순서의 용어가 있는지 여부를 결정하기 위해 Brachylog 술어를 썼다,하지만 난 그냥 코멘트에 떠날거야, 그래서 찾기-n 번째 상용구 작업을 가져올 수 없습니다 :^₂;?{ẹ+}ᵛ
관련없는 문자열

답변:


5

젤리, 13 바이트

,²DS€=/
1dz#Ṫ

입력은 1 인덱스입니다. 온라인으로 사용해보십시오!

작동 원리

1dz#Ṫ    Main link. Argument: n (index)

1        Set the return value to 1.
   #     Execute ... until ... matches have been found.
 Ç         the helper link
  ³        n
    Ṫ    Extract the last match.


,²DS€=/  Helper link. Argument: k (integer)

,²       Pair k with k².
  D      Convert each to decimal.
   S€    Compute the sum of each list of base 10 digits.
     =/  Reduce by equality.

4

하스켈, 54 바이트

s=sum.map(read.pure).show
([x|x<-[1..],s x==s(x^2)]!!)

사용 예 : ([x|x<-[1..],s x==s(x^2)]!!) 17-> 289.

s calculates the digit sum:

                    show     -- turn number into a string
     map(read.pure)          -- turn every character (the digits) in to a
                             -- one element string and convert back to integer
sum                          -- sum those integers

main function:

[x|x<-[1..]            ]     -- make a list of all x starting from 1
           ,s x==s(x^2)      -- where s x == s (x^2)
                        !!   -- pick nth element from that list

4

자바 스크립트 (ES6), 76 73 72 바이트

n=>eval("for(q=s=>eval([...s+''].join`+`),i=1;q(i)!=q(i*i)||n--;i++);i")

잘못된 변수를 출력하고 있음을 알 때까지 30 분 동안 이것을 작동 시키려고했습니다. |

이것은 인덱스가 0입니다.


1
나는 이것을 재귀 함수로 바꾸는 것이 이것을 많이 단축시키는 것처럼 느낀다.
Mama Fun Roll

4

펄 6, 47 46 바이트

{(grep {$_.comb.sum==$_².comb.sum},1..*)[$_]}

4

05AB1E , 10 9 8 바이트

µNÐn‚1öË

1- 색인.

-1 바이트 감사 @Emigna 암시 제거하여 ½(증가 counter_variable끝에 각 반복 후에)를
-1 바이트 덕분에 @Grimy는 중복를 제거 SO하여‚1ö

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

설명:

µ         # Loop while the counter_variable is not equal to the (implicit) input yet:
 NÐ       #  Push the 0-based loop index three times
   n      #  Take the square of this index
          #   i.e. 180 → 32400
         #  Pair it with the index
          #   i.e. 180 and 32400 → [180,32400]
     1ö   #  Convert both numbers from base-1 to base-10, which basically sums the digits
          #   i.e. [180,32400] → [9,9]
       Ë  #  Check if both sums are equal
          #   i.e. [9,9] → 1 (truthy)
          #  (if they are: implicitly increase the counter_variable by 1)
          # (after the loop: implicitly print the top of the stack, which is the remaining
          #  copy of the index from the triplicate we've used)

2
½암시
적이므로

1
-1 : µNDn‚1öË. 코드 복제를 피할 수 있도록 벡터화하는 것과 같습니다 SO.
그리미

@Grimy 다시 한번 감사드립니다. 또한 작은 팁 게시물에 팁으로 추가했습니다. :)
Kevin Cruijssen

3

Mathematica, 64 바이트

a=Tr@*IntegerDigits;Nest[NestWhile[#+1&,#+1,a@#!=a[#^2]&]&,1,#]&

간단한 익명 기능. 인덱스가 0입니다.


3

피스, 15

e.fqsjZTsj^Z2TQ

DenkerAffe 덕분에 1 바이트!

여기에서 시도 하거나 테스트 스위트를 실행 하십시오 .

1- 색인 옵션을 사용합니다.

주어진 조건에 맞는 .f첫 번째 n숫자 를 얻는 순진한 구현 .


h명시 적으로 허용되는 1- 인덱싱을 사용 하는 경우 제거하여 1 바이트를 저장할 수 있습니다 .
Denker

@ DenkerAffe 오, 감사합니다 더 자세히 읽어야합니다 : P
FryAmTheEggman

2

MATL , 24 23 바이트

x`@2:^"@V!Us]=?@]NG<]1$

1 기반 입력을 사용합니다.

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

x        % take inpout and delete it (gets copied into clipboard G)
`        %   do...while
  @      %   push loop iteration index: candidate number, n
  2:^    %   array [n n^2]
  "      %   for each element of that array 
    @    %     push that element 
    V!U  %     get its digits (to string, transpose, to number)
    Xs   %     compute their sum
  ]      %   end for each
  =      %   are the two sums equal?
  ?      %   if so
    @    %     the candidate number is valid: push it
  ]      %   end if
  NG<    %   is number of elements in stack less than input?
]        % if so, proceed with next iteration. End do...while. 
1$       % specify 1 input for implicit display: only top of stack

1
MATL이 마침내 먼 컴파일러 중에 나열된다는 것이 매우 좋습니다!.
Abr001am

1

줄리아, 79 66 바이트

f(n,x=0,i=1,s=c->sum(digits(c)))=x<n?f(n,x+(s(i)==s(i^2)),i+1):i-1

정수를 받아들이고 정수를 반환하는 재귀 함수입니다. 1 기반 인덱싱을 사용합니다.

함수 인수로 몇 가지를 저장합니다.

  • n : 입력
  • x :이 조건에서 찾은 숫자의 수에 대한 카운터
  • i : 상태를 확인하기위한 숫자
  • s : 입력 자릿수의 합계를 계산하는 함수

하지만 x적은 입력보다, 우리는 증가, 재귀 x경우 i상태와 증가를 충족 i. 일단 x == n우리는 돌아 i왔지만 1을 너무 많이 증분했기 때문에 1을 빼야합니다.


1

볼록 0.2, 36 35 바이트

Convex는 CJam과 Golfscript를 기반으로 개발중인 새로운 언어입니다. 인터프리터와 IDE는 여기 에서 찾을 수 있습니다 . 입력은 명령 행 인수에 대한 정수입니다. 인덱스는 1부터 시작합니다. CP-1252 인코딩을 사용합니다 .

1\{\__2#¶{s:~:+}%:={\(\)\}{)\}?}h;(

1

Mathematica, 63 60 61 59 바이트

Select[Range[9^#],Equal@@Tr/@IntegerDigits/@{#,#^2}&][[#]]&

이것을 다른 답변으로 만들었지 만 단일 바이트로 치고 나는 골프를 치기 전에 이것을 게시하고 있습니다. 하나는 색인되었습니다.


입력에 실패했습니다 >2457. 간단히 증가 Range하기 때문에, 의지하지 도움을 A058369[n]/n수렴하지 않는 것 같습니다.
murphy

보다 나은? 충전 +
CalculatorFeline

10^#보다 짧을 것 2^#*9입니다. 물론 n이 약 6보다 크면 너무 느려집니다.
feersum

왜 안돼 9^#? fil
CalculatorFeline

f (n) <= 9 ^ n이라는 증거가 있습니까? (10 ^ n은 항상 솔루션이므로 10은 분명합니다).
feersum

1

레티 나, 103 바이트

\d+
$*1 x
{`x+
$.0$*x¶$.0$*a¶$.0$*b
%`b
$_
a+|b+
$.0
\d
$*
+`1¶1
¶
1(.*)¶¶$|¶[^d]+
$1x
}`^ ?x

x

확실히 골프.

제곱에 새로운 Retina 기능% 을 사용합니다 (따라서 온라인 버전에서는 아직 작동하지 않음).


1

Mathcad, 70 50 바이트

Mathcad에는 숫자를 숫자 문자열로 변환하는 함수가 내장되어 있지 않으므로 사용자 함수 d (a)가이 작업을 수행합니다. 그런 다음 프로그램은 양의 정수를 반복하여 벡터 v에 n 개의 숫자가 누적 될 때까지 합계의 동등성을 테스트합니다. 프로그램은 = 연산자를 사용하여 평가되며 결과 벡터가 표시됩니다. ( 전체 프로그램은 아래의 Mathcad 워크 시트에 표시된대로 정확하게 나타납니다. )

업데이트 된 프로그램 : 기본 초기화를 0으로 가정하고 Mathcad가 프로그램에서 마지막으로 평가 된 명령문의 값을 반환한다는 사실을 이용합니다.
식의 평가 순서를 사용하여 첫 번째 합산에서 변수 a를 증가시킵니다 (그리고 제곱합에서 사용할 수 있음)

여기에 이미지 설명을 입력하십시오

원래 프로그램 : n까지의 모든 숫자의 벡터를 반환합니다.

여기에 이미지 설명을 입력하십시오



0

자바 8, 113 바이트

n->{int r=0;for(;n>=0;)if((++r+"").chars().map(c->c-48).sum()==(r*r+"").chars().map(c->c-48).sum())n--;return r;}

0 인덱스

설명:

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

n->{           // Method with integer as both parameter and return-type
  int r=0;     //  Result-integer, starting at 0
  for(;n>=0;)  //  Loop as long as `n` is zero or positive
    if((++r    //   Increase `r` by 1 first
       +"").chars().map(c->c-48).sum()
               //   And if the sum of its digits
       ==(r*r+"").chars().map(c->c-48).sum())
               //   equals the sum of the digit of its square
      n--;     //    Decrease `n` by 1
  return r;}   //  Return the result


0

TI-BASIC 66 62 바이트

Ans→N:While X<N:IS>(A,A::A:prgmA:Ans→B:A²:prgmA:If B=Ans:IS>(X,N:End:A
sum(int(10fPart(Ans₁₀^(seq(⁻X-1,X,0,log(Ans

nAns
n

도우미 함수는에 값의 자릿수 합계를 생성합니다 Ans.

예 :

3:prgmCDGF1E
             10
5:prgmCDGF1E
             19
8:prgmCDGF1E
             55
10:prgmCDGF1E
             99

설명:

Ans→N:While X<N:IS>(A,A::A:prgmA:Ans→B:A²:prgmA:If B=Ans:IS>(X,N:End:A ;prgmCDGF1E

Ans→N            ;store the input in N
While X<N        ;loop until the Nth term has been reached
IS>(A,A:         ;add 1 to A
                 ; (Increment A and skip the next statement if A>A)
A                ;leave A in Ans
prgmA            ;call the helper program below
Ans→B            ;store the result of the helper program in B
A²               ;square A and leave the result in Ans
prgmA            ;call the helper program below
                 ; (result is in Ans)
If B=Ans         ;if the two results are equal
IS>(X,N          ;add 1 to X
                 ; (Increment X and skip the next statement if X>N)
End
A                ;leave A in Ans
                 ;implicit print of Ans

sum(int(10fPart(Ans₁₀^(seq(⁻X-1,X,0,log(Ans   ;prgmA

                      seq(⁻X-1,X,0,log(Ans    ;generate a list...
                                              ; using X as the variable,
                                              ; starting at 0,
                                              ; ending at the log of Ans,
                                              ; and evaluating "⁻X-1" for each element
                                              ; (implicit increment of 1)
                   ₁₀^(                       ;raise 10 to the power of each element
                Ans                           ;multiply each element by the input
          fPart(                              ;remove the integer part from each element
        10                                    ;multiply each element by 10
    int(                                      ;round each element to the nearest integer
sum(                                          ;then sum the resulting list

참고 : TI-BASIC은 토큰 화 된 언어입니다. 문자 수는 바이트 수와 같지 않습니다 .


0

J , 62 바이트

[:{:({.@](>:@[,],[#~(=&(1#."."0@":)*:)@[)}.@])^:(#@]<1+[)^:_&1

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

1 색인. J는 과도한 부기 메카닉 때문에 이러한 "n 번째"작업에서 다시 한 번 성능이 좋지 않습니다.


0

APL (NARS), 49 자, 98 바이트

r←h w;c
c←r←0
→2×⍳∼=/+/¨(⍎¨⍕)¨r,r×r+←1⋄→2×⍳w>c+←1

1- 색인, 테스트 :

  h¨⍳20
1 9 10 18 19 45 46 55 90 99 100 145 180 189 190 198 199 289 351 361 

0

MathGolf , 10 바이트

♪╒gÆ‼Σ²Σ=§

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

설명

ú10n

♪            push 1000
 ╒           range(1,n+1)
  gÆ         filter list using the next 5 operators
    ‼        apply next two commands to TOS
     Σ       sum(list), digit sum(int)
      ²      pop a : push(a*a) (square)
       Σ     sum(list), digit sum(int) (pushes the digit sum of the square)
        =    pop(a, b), push(a==b) (compares the two)
         §   get from array (returns the <input>th item from the filtered list

어쩌면 나는 단지 MathGolf에 대한 채팅을 만들어야합니다. 어쨌든, 질문이 있습니다 : 대치, 분리 및 문자열에 대한 내장이 있습니까? 압축이 여기에서 바이트를 절약 할 수 있다고 생각하지만 내장 기능이 있는지 확실하지 않습니다.
케빈 크루이 ssen

닫힌 MathGolf 채팅이 있습니다. 나는 그것을 살아있는 상태로 유지하려고 노력했지만 최근에는 일로 늪에 빠졌고 계속 닫혔습니다. 매번 모드를 귀찮게하고 싶지 않습니다. 귀하의 질문에 대답하기 위해 MathGolf는 실제로 문자열 연산을 처리하기위한 것이 아니라 문자열 처리 기능을 구현하여 몇 가지 기본 과제를 처리했습니다. 아시다시피, 여전히 원하는 것이 많습니다. 내가 추가하면, 아마도 05AB1E와 비슷한 것이지만, 지난 몇 달 동안 MathGolf 개발을위한 여가 시간을 얻지 못했습니다.
maxb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.