ฉันเป็นหมายเลข Automorphic หรือไม่


20

ตัวเลข Automorphic คือตัวเลขซึ่งเป็นส่วนต่อท้ายของตารางในฐาน 10 นี่คือลำดับA003226ใน OEIS

งานของคุณ:

เขียนโปรแกรมหรือฟังก์ชั่นเพื่อตรวจสอบว่าอินพุตเป็นตัวเลข Automorphic หรือไม่

การป้อนข้อมูล:

จำนวนเต็มตั้งแต่ 0 ถึง 10 ^ 12 (รวม) ซึ่งอาจเป็นหรือไม่ได้เป็นตัวเลข Automorphic

เอาท์พุท:

ค่าความจริง / เท็จแสดงว่าอินพุตเป็นตัวเลข Automorphic หรือไม่

ตัวอย่าง:

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

เกณฑ์การให้คะแนน:

นี่คือคะแนนต่ำสุดเป็นไบต์ชนะ


9
Btw ขีด จำกัด ที่ 1e12 หมายถึงการส่งจะต้องจัดการกับตัวเลขสูงถึง 1e24 ซึ่งเป็นตัวเลข 80 บิต หากการจัดการหมายเลขที่มีขนาดใหญ่เป็นข้อกำหนดที่ยากคำตอบที่ออกมาจำนวนมากจะไม่ถูกต้อง
เดนนิส

ต้องการให้เราจัดการกับตัวเลขที่จะนำไปสู่ปัญหาความแม่นยำในภาษาที่เราเลือกหรือไม่
Shaggy

โดยมีเงื่อนไขว่าคุณไม่ได้ละเมิดช่องโหว่มาตรฐานเกี่ยวกับสิ่งนั้น
Gryphon - Reinstate Monica


มันเป็นวันที่ยาวนานมากและฉันเหนื่อยมาก แต่ความคิดเห็นของคุณอ่านให้ฉันเพื่อตรวจสอบความถูกต้องของโซลูชัน JS ของฉัน คุณยืนยันได้ไหม (ไม่มีปัญหาในการลบถ้าไม่ใช่)
Shaggy

คำตอบ:


11

Brachylogขนาด 5 ไบต์

~√a₁?

ลองออนไลน์!

มันทำงานอย่างไร

~√a₁?
~√      the input is the square root of a number
  a₁    whose suffix is
    ?   the input

ไม่มันบอกว่าถ้า x เป็นส่วนต่อท้ายของสแควร์
WGroleau

2
√a₁?ทำไมจะไม่ล่ะ?
มนุษย์โดยรวม

38

Python 2 , 24 ไบต์

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

ลองออนไลน์!

เป็นครั้งแรกในประวัติศาสตร์ Python 2 ที่ต่อท้ายการพิมพ์Lซ้ำของความยาวเป็นคุณสมบัติแทนที่จะเป็นจุดบกพร่อง

ความคิดคือการตรวจสอบว่าการพูด, 76^2=5776ปลายใน76โดยตรวจสอบว่าเป็นย่อยของ76L 5776Lเพื่อให้Lปรากฏสำหรับตัวเลขที่ไม่ใหญ่มากเราคูณด้วย1Lหรือ2Lเป็นเลขชี้กำลังเนื่องจากการดำเนินการทางคณิตศาสตร์ที่มีความยาวและสร้างความยาว


9

Python 2 , 31 ไบต์

ออกรอบตีกอล์ฟโดย xnor ... (สิ่งนี้เกิดขึ้นทุกครั้ง)> <แต่เฮ้มันเป็น Pythonic ที่น่าแปลกใจสำหรับรหัสกอล์ฟ

ผู้คนมักจะจำไม่ได้ว่า Python มีstr.endswith()...

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

ลองออนไลน์!


คุณไม่สามารถใช้`n*n`แปลงตัวเลขเป็นสตริงได้หรือไม่?
Downgoat

@Downgoat ที่ใช้ 'L' เพื่อให้ตัวเลขยาวขึ้น
มนุษย์โดยรวม

@tallyallyhuman จุดดีฉันไม่ได้ใช้
isaacg

5

05AB1E , 5 ไบต์

n.s¹å

ลองออนไลน์!


6
ฉันจะลงคะแนนถ้าฉันรู้ว่ามันทำงานอย่างไร
isaacg

ฉันคิดว่าnเป็นรูปสี่เหลี่ยม.sเป็นคำต่อท้าย¹คืออินพุตและåการทดสอบสำหรับการเป็นสมาชิก @isaacg
Conor O'Brien

@isaacg สิ่งที่ Conor พูด ... ไม่มีเวลาเพิ่มคำอธิบาย
Erik the Outgolfer

5

เรติน่า 44 ไบต์

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

ลองออนไลน์!

นอกจากนี้ตรง 4 x*x = xแนวทางในการแก้สมการ


1
เอ่อ? ตัวเลขเหล่านี้ไม่ใช่โซลูชันที่ถูกต้องใช่ไหม
Leo

@Leo ไม่พวกเขาไม่ได้ 5*5 != 5อย่างชัดเจน อย่างไรก็ตามคุณสามารถสังเกตเห็นรูปแบบบางอย่างในหมายเลขที่คุณเชื่อมโยง วิธีแก้ปัญหา 4 ข้อคือ: 0, 1, ... 59918212890625, ... 40081787109376 (หมายเลข p-adic ไปทางซ้ายเรื่อย ๆ ) หมายเลขที่คุณเชื่อมโยงนั้นเป็นส่วนต่อท้ายของ 4 หมายเลข
Leun Nun

โอเคขอบคุณฉันไม่รู้เกี่ยวกับตัวเลข p-adic
Leo

4

อลิซ 17 ไบต์

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

ลองออนไลน์!

ไม่แสดงผลใด ๆ (ซึ่งเป็นเท็จในโหมดปกติ) หรือ 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

Python 2, 37 33 30 29 ไบต์

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

บันทึกแล้ว 4 ไบต์ขอบคุณ @LeakyNun บันทึก 3 ไบต์โดยสังเกตว่าอินพุตต่ำกว่า 10 ^ 12 ดังนั้นจึงnไม่ได้ลงท้ายด้วย "L" บันทึก 1 ไบต์ขอบคุณ @Dennis เพราะฉันคิดผิดตั้งแต่แรก

ลองออนไลน์! (ได้รับความอนุเคราะห์จาก TIO ลิงค์ของ @Dennis)


3

C (gcc) , 57 ไบต์

f(__int128 n){n=n*n%(long)pow(10,printf("%u",n))==n;}

ขึ้นอยู่กับคำตอบ @ betseg นี้เป็นฟังก์ชั่นที่ให้ผลตอบแทน1หรือ0 มันผลิตออกขยะเพื่อ STDOUT ซึ่งเป็นที่ได้รับอนุญาตโดยค่าเริ่มต้น

คะแนนมี4 ไบต์-lmธงคอมไพเลอร์

ลองออนไลน์!



3

C # (. NET Core) 47 ไบต์

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

ลองออนไลน์!


เป็นไปไม่ได้ที่จะเปลี่ยน$"{n}"เป็นn+""? นอกจากนี้คุณสามารถเพิ่มTryItOnline-link ได้หรือไม่ โอ้และนี่คือตัวอย่างข้อมูลไม่ใช่ฟังก์ชัน / โปรแกรม ดังนั้นคุณควรเพิ่มn=>ไว้ข้างหน้ามัน
Kevin Cruijssen

1
@KevinCruijssen เสร็จสิ้น! เป็นไปได้ไหมที่จะลดความซับซ้อนยิ่งขึ้นไปอีก? TIL คุณสามารถแปลงเป็น int n+""สตริงใช้ ขอบคุณ!
kakkarot

คุณไม่จำเป็นต้องใช้bool f(long n)หรือต่อท้ายเซมิโคลอนสำหรับคำตอบแลมบ์ดาใน C #, Java, ฯลฯn=>$"{BigInteger.Multiply(n,n)}".EndsWith(n+"")ก็เพียงพอแล้ว :) และฉันเกือบลืม: ยินดีต้อนรับสู่ PPCG!
Kevin Cruijssen

@KevinCruijssen ขอขอบคุณ!
kakkarot

ยินดีต้อนรับคุณ! :) Oh, และนี่คือการแปลงติ้วลิงค์ของคุณที่จะใช้เพียงn=>System.Funcโดยใช้
Kevin Cruijssen

3

ถ่าน , 12 11 ไบต์

I¬⌕⮌IXIθ²⮌θ

ลองออนไลน์!

ผลตอบแทนที่Falseเป็นfalseyและเป็นTruetruthy

  • บันทึก 1 ไบต์ต้องขอบคุณ ASCII-only! (ฉันจะคิดถึงPowerฟังก์ชั่นนี้ได้อย่างไร)

ผลตอบแทนนี้0สำหรับ10, 100... 1สำหรับ50, 60... 2สำหรับ760, 3792...
Neil

@Neil คงแล้วขอบคุณ!
Charlie

2
ฉันคิดว่า Charcoal เหมาะสำหรับศิลปะ ASCII เท่านั้น ಠ_ಠ
totallyhuman


@tallyallyhuman มันยังคงอยู่ดูที่ golflangs ปกติทั้งหมดด้วย <6 byte solutions
ASCII-only

2

JavaScript (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; นี่เป็นเวลาที่รวดเร็วในช่วงพักควันดังนั้นฉัน (อย่างโง่เขลา) ตรวจสอบกรณีทดสอบเท่านั้น จะขอคำชี้แจงเกี่ยวกับข้อผิดพลาดที่แม่นยำและลบเมื่อฉันกลับไปที่คอมพิวเตอร์หากจำเป็น
Shaggy




2

R, 28 ไบต์

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

สร้างฟังก์ชั่น:

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

Takes the modulus of x^2 such that we keep the last digits, which we compare to x.







1

Batch, 122 bytes

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

Algorithm is limited only by the integer type used for variables. In the case of Batch, this is 32-bit signed integers, so the maximum is 2147483647. Works by testing both n and n-1 for necessary powers of 2 and 5 as factors. (Except when n is 0 or 1, n and n-1 will have one factor each.)


1

><>, 30 bytes

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

Try it online, or watch it at the fish playground!

Assumes the input number x is already on the stack.

Explanation: The fish takes the quotient of x2 by increasing powers of 10, and counts how many times this equals x. When the power of 10 gets larger than x, it prints the count and halts. The count will be 1 if x is automorphic, and 0 if it isn't.



1

Pyth, 10 9 bytes

-1 byte thanks to isaacg.

x_`^vz2_z

Returns 0 when the number is automorphic, anything else if it is not.

Test it online!

Explanations

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
` is convert to string.
isaacg




0

MATL, 10 bytes

UUVG36hXXn

This works for numbers up to floor(sqrt(2^53)), as per double precision limitations.

Output is a positive number (which is truthy) if automorphic, or empty (which is falsy) if not.

Try it online!

Explanation

Funny that this answer uses the two overloaded versions of U: with string input it evaluates as a number, and with number input it computes the square.

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.