나는 자동 형 번호입니까?


20

Automorphic 숫자는 밑이 10 인 사각형의 접미사 인 숫자입니다 . OEIS의 시퀀스 A003226 입니다.

당신의 작업 :

입력이 Automorphic 숫자인지 확인하는 프로그램 또는 함수를 작성하십시오.

입력:

Automorphic 숫자 일 수도 있고 아닐 수도있는 0에서 10 ^ 12 사이의 정수입니다.

산출:

입력이 Automorphic 숫자인지 여부를 나타내는 참 / 거짓 값입니다.

예 :

0           -> truthy
1           -> truthy
2           -> falsy
9376        -> truthy
8212890625  -> truthy

채점 :

이것은 이며 바이트 단위의 최저 점수입니다.


9
1e12의 제한은 제출이 80 비트 숫자 인 1e24까지의 숫자를 처리해야 함을 의미합니다. 큰 숫자를 처리하는 것이 어려운 요구 사항 인 경우 많은 종료 응답이 유효하지 않습니다.
Dennis

선택한 언어의 정밀도 문제로 이어질 수있는 숫자를 처리해야합니까?
얽히고 설킨

그것에 대해 표준 허점을 남용하지 않으면 괜찮습니다.
그리폰-복원 모니카


하루 종일 지 쳤고, 나는 매우 피곤하지만 귀하의 의견은 저의 JS 솔루션을 검증하는 것으로 읽었습니다. 당신은 그것을 확인할 수 있습니까? (삭제하지 않을 경우 문제 없음)
Shaggy

답변:



38

파이썬 2 , 24 바이트

lambda n:`n*1L`in`n**2L`

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

역사상 처음으로, 파이썬 2의 Llong repr에 an 을 추가하는 것은 버그가 아닌 기능입니다.

아이디어는 말인지 확인하는 것입니다 . 의 하위 문자열 인지 확인하여 76^2=5776끝납니다 . 비 거대한 숫자를 나타내 려면 long을 가진 산술 연산이 long을 생성하므로 지수를 곱 하거나 지수로 갖습니다 .7676L5776LL1L2L


9

파이썬 2 , 31 바이트

xnor에 의해 아웃 골프 ... (이것은 매번 발생합니다)> <그러나, 이것은 놀랍게도 위한 Pythonic입니다 .

사람들은 파이썬이 기억하는 경향이 없습니다 str.endswith()...

lambda n:str(n*n).endswith(`n`)

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


`n*n`숫자를 문자열로 변환 하는 데 사용할 수 없습니까 ?
Downgoat

@Downgoat 'L'을 더 긴 숫자로 표시합니다.
완전히 인간적인

@totallyhuman 좋은 지적, 나는 그 사용법을 놓쳤다.
isaacg 2016 년


5

레티 나 , 44 바이트

$
;918212890625;81787109376;0;1;
^(\d+;).*\1

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

10- 아식 방정식에는 정확히 4 가지 솔루션이 있습니다 x*x = x.


1
어? 이 모든 숫자가 유효한 솔루션이 아닙니까?
Leo

@ 레오 아니요, 그렇지 않습니다. 분명히 5*5 != 5. 그러나 연결 한 숫자에 일부 패턴이 있습니다. 4 가지 해결책은 다음과 같습니다. 0, 1, ... 59918212890625, ... 40081787109376 (p-adic 숫자는 무한히 왼쪽으로 갑니다 ). 연결 한 숫자는 4 개의 숫자 접미사입니다.
Leaky Nun

오, 감사합니다, 나는 p-adic 숫자에 대해 몰랐습니다
Leo

4

Alice , 17 바이트

/o.z/#Q/
@in.*.L\

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

아무것도 출력하지 않습니다 (Ordinal 모드에서는 허위 임) 또는 Jabberwocky비어 있지 않으므로 Ordinal 모드에서는 완전합니다. 또한 표준 문자열 값이기도합니다.

설명

/.../#./
....*..\

이것은 선형 서수 모드 프로그램에 대한 일반적인 프레임 워크의 약간의 수정입니다. /중간에이 사이에 추기경 모드에서 하나의 연산자를 가지고하는 데 사용합니다 ( *) 다음 우리는 필요한 #방식 뒷면에 서수 모드로를 건너 뛸 수 있습니다. 선형 프로그램은 다음과 같습니다.

i..*.QLzno@

그것을 통해 봅시다 :

i    Read all input as a string and push it to the stack.
..   Make two copies.
*    This is run in Cardinal mode, so it implicitly converts the top two
     copies to their integer value and multiplies them to compute the square.
.    Implicitly convert the square back to a string and make a copy of it.
Q    Reverse the stack to bring the input on top of the two copies of its square.
L    Shortest common supersequence. This pops the input and the square from
     the top of the stack and pushes the shortest string which begins with
     the square and ends with the input. Iff the square already ends with the
     input, this gives us the square, otherwise it gives us some longer string.
z    Drop. Pop the SCS and the square. If the square contains the SCS (which
     would mean they're equal), this removes everything up to the SCS from
     the square. In other words, if the SCS computation left the square
     unchanged, this gives us an empty string. Otherwise, it gives us back
     the square.
n    Logical not. Turns the empty string into "Jabberwocky" and everything
     else into an empty string.
o    Print the result.
@    Terminate the program.


4

파이썬 2, 37 33 30 29 바이트

lambda n:n*~-n%10**len(`n`)<1

@LeakyNun 덕분에 4 바이트가 절약되었습니다. 입력이 10 ^ 12보다 낮으므로 n"L"로 끝나지 않음 을 인식하여 3 바이트를 저장했습니다 . @Dennis 덕분에 1 바이트를 절약했습니다. 처음부터 잘못 계산했기 때문입니다.

온라인으로 사용해보십시오! (@Dennis의 TIO 링크 제공).




3

C # (. NET 코어) , 47 바이트

n=>$"{BigInteger.Multiply(n,n)}".EndsWith(n+"")

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


로 변경할 $"{n}"n+""없습니까? 또한 TryItOnline-link를 추가 할 수 있습니까? 아, 이것은 스 니펫이며 기능 / 프로그램이 아닙니다. 따라서 n=>앞에 추가해야 합니다.
Kevin Cruijssen

1
@KevinCruijssen 완료! 더 단순화 할 수 있습니까? TIL을 사용하여 int를 문자열로 변환 할 수 있습니다 n+"". 감사!
kakkarot 2016 년

bool f(long n)C #, Java 등의 람다 답변에는 세미콜론 또는 후행 세미콜론이 필요하지 않습니다 n=>$"{BigInteger.Multiply(n,n)}".EndsWith(n+""). 충분합니다. :) 그리고 나는 거의 잊었다 : PPCG에 오신 것을 환영합니다!
Kevin Cruijssen 2016 년

@KevinCruijssen 감사합니다!
kakkarot 2016 년


3

, 12 11 바이트

I¬⌕⮌IXIθ²⮌θ

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

반환 FalsefalseyTrue같은truthy .

  • ASCII 전용으로 1 바이트 절약! (기능을 어떻게 놓칠 수 Power있습니까?)

이 반환 0을 위해 10, 100... 150, 60... 2760, 3792...

@ 닐 지금 고마워!
Charlie

2
나는 숯이 ASCII 아트에만 좋다고 생각했습니다. ಠ_ಠ
완전히 인간적인


@totallyhuman 그것은 여전히 ​​그렇습니다. <6 바이트 솔루션으로 모든 일반 golflangs를보십시오
ASCII 전용

2

자바 스크립트 (ES6), 23 바이트

n=>`${n*n}`.endsWith(n)

시도 해봐

휴대 전화에서이 스 니펫을 작성 했으므로 제대로 작동하지 않으면 수정하세요.

f=
n=>`${n*n}`.endsWith(n)
oninput=_=>o.innerText=f(+i.value);o.innerText=f(i.value=1)
<input id=i type=number><pre id=o>


정밀도 문제로 인해 212890625에서 실패 합니다.
Dennis

@Dennis를 지적 해 주셔서 감사합니다. 연기가 나는 동안 신속하게 테스트 케이스를 확인했습니다. 정밀 오류에 대한 설명을 요청하고 필요한 경우 컴퓨터로 돌아올 때 삭제합니다.
얽히고 설킨


2

코 틀린, 36 바이트

fun a(i:Int)="${i*i}".endsWith("$i")


2

R, 28 바이트

pryr::f(x^2%%10^nchar(x)==x)

함수를 만듭니다.

function (x) 
x^2%%10^nchar(x) == x

x^2우리가 비교하는 마지막 숫자를 유지 하도록 계수를 취합니다 x.






1

Dyvil , 26 바이트

x=>"\(x*x)".endsWith"\(x)"

용법:

let f: int->boolean = x=>"\(x*x)".endsWith"\(x)"
print(f 20) // false

1

배치, 122 바이트

@set/an=%1,t=f=1
:l
@set/at+=t,f*=5,n/=10
@if %n% gtr 0 goto l
@cmd/cset/a"(!(%1%%t)|!(~-%1%%t))&(!(%1%%f)|!(~-%1%%f))

알고리즘은 변수에 사용되는 정수 유형에 의해서만 제한됩니다. Batch의 경우 32 비트 부호있는 정수이므로 최대 값은 2147483647입니다. n과 n-1을 모두 2와 5의 거듭 제곱으로 요인으로 테스트하여 작동합니다. (n이 0 또는 1 인 경우를 제외하고, n 및 n-1은 각각 하나의 요소를 갖습니다.)


1

> <> , 30 바이트

1&0}\{n;
:&(?\:::*&a*:&%={+}:&

온라인으로 시도 하거나 물고기 놀이터 에서 시청하십시오 !

입력 번호 x 가 이미 스택에 있다고 가정합니다 .

설명 : 물고기는 10의 거듭 제곱을 증가시켜 x 2 의 몫을 취하고 이것이 x 와 몇 번이나 카운트합니다 . 10의 거듭 제곱이 x 보다 커지면 카운트를 인쇄하고 정지합니다. x 가 automorphic 이면 개수는 1이되고 그렇지 않으면 0이됩니다.



1

Pyth , 10 9 바이트

isaacg 덕분에 -1 바이트 .

x_`^vz2_z

숫자가 자동 ​​일 경우 0을, 그렇지 않은 경우 다른 값을 반환합니다.

온라인으로 테스트하십시오!

설명

x_`^vz2_z

   ^vz2      # Evaluate the input to a number, compute the square
  `          # Convert the squared number to a string
 _           # Reverse it
x      _z    # Find the index of the first occurrence of the reversed input in the reversed square. That's basically equivalent of doing an endswith() in Python
             # Implicit input of the index. If 0, then the reversed square starts with the reversed input

1
`문자열로 변환됩니다.
isaacg 2016 년



0

클로저, 59 바이트

#(apply = true(map =(reverse(str %))(reverse(str(* % %)))))

지나치게 장황한 것 같습니다.


왜 같이 가지 #(.endsWith(str(* % %))(str %))않습니까?
cliffroot

사실 Java 내장 기능을 잊어 버리기 쉽습니다.
NikoNyrh 2016 년

0

MATL , 10 바이트

UUVG36hXXn

정밀도 제한에 floor(sqrt(2^53))따라 최대 숫자까지 작동합니다 double.

출력은 자동 형태 인 경우 양수 (진실한 값)이거나 그렇지 않은 경우 비어있는 (거짓 인) 값입니다.

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

설명

이 답변은 두 가지 오버로드 된 버전을 사용한다는 점이 재미 있습니다 U: 문자열 입력으로 숫자로 평가하고 숫자 입력으로 제곱을 계산합니다.

U      % Implicitly input a string. Evaluate as a number
U      % Square of number
V      % Convert number to string representation
G      % Push input string again
36h    % Post-pend '$'
XX     % Regexp match. Gives cell array of matching substrings.
n      % Number of elements. Implicitly display
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.