Apakah saya nomor automorfik?


20

Angka Automorfik adalah angka yang merupakan sufiks kuadratnya dalam basis 10. Ini adalah urutan A003226 dalam OEIS.

Tugas Anda:

Tulis program atau fungsi untuk menentukan apakah input adalah nomor Automorphic.

Memasukkan:

Integer antara 0 dan 10 ^ 12 (inklusif), yang mungkin atau mungkin bukan angka Automorfik.

Keluaran:

Nilai kebenaran / kepalsuan yang menunjukkan apakah input adalah angka Automorfik atau tidak.

Contoh:

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

Mencetak:

Ini adalah , skor terendah dalam byte yang menang.


9
Dengan batas 1e12 berarti pengiriman harus menangani angka hingga 1e24, yang merupakan angka 80-bit. Jika menangani angka yang besar merupakan persyaratan yang sulit, banyak jawaban yang keluar tidak valid.
Dennis

Perlukah kita menangani angka yang mengarah pada masalah presisi dalam bahasa pilihan kita?
Shaggy

Asalkan Anda tidak menyalahgunakan celah standar tentang itu, maka itu akan baik-baik saja.
Gryphon - Pasang kembali Monica


Sudah hari yang panjang dan saya sangat, sangat lelah tetapi komentar Anda membacakan kepada saya sebagai memvalidasi solusi JS saya. Bisakah Anda mengonfirmasi itu? (Tidak ada masalah menghapus jika tidak)
Shaggy

Jawaban:



38

Python 2 , 24 byte

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

Cobalah online!

Untuk pertama kalinya dalam sejarah, Python 2 menambahkan sebuah Lke repr dari long adalah fitur daripada bug.

Idenya adalah untuk memeriksa apakah mengatakan, 76^2=5776diakhiri 76dengan memeriksa apakah 76Lsubstring 5776L. Untuk membuat tampilan Luntuk angka yang tidak besar, kita kalikan dengan 1Latau miliki 2Lsebagai eksponen, karena operasi aritmatika dengan panjang dengan menghasilkan panjang.


9

Python 2 , 31 byte

Keluar dengan xnor ... (ini terjadi setiap saat)> <Tapi hei, ini mengejutkan Pythonic untuk .

Orang tidak cenderung mengingat Python str.endswith()...

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

Cobalah online!


Tidak bisakah Anda menggunakan `n*n`untuk mengonversi angka menjadi string?
Downgoat

@Downgoat Itu menekan 'L' pada nomor yang lebih panjang.
totallyhuman

@totallyhuman Poin bagus, saya melewatkan penggunaannya.
isaacg


5

Retina , 44 byte

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

Cobalah online!

Ada persis 4 solusi untuk persamaan 10-adic x*x = x.


1
Uh? Bukankah semua angka ini solusi yang valid?
Leo

@ Leo Tidak, mereka tidak. Jelas sekali 5*5 != 5. Namun, Anda dapat melihat beberapa pola dalam angka yang Anda tautkan. 4 solusi adalah: 0, 1, ... 59918212890625, ... 40081787109376 (angka p-adic pergi tanpa batas ke kiri ). Angka-angka yang Anda tautkan adalah sufiks dari 4 angka.
Leaky Nun

Oh ok, terima kasih, saya tidak tahu tentang nomor p-adic
Leo

4

Alice , 17 byte

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

Cobalah online!

Tidak menghasilkan apa-apa (yang salah dalam mode Ordinal) atau Jabberwocky(yang tidak kosong dan karenanya benar dalam mode Ordinal; ini juga merupakan nilai string kebenaran kanonik).

Penjelasan

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

Ini adalah sedikit modifikasi dari kerangka umum untuk program mode ordinal linier. Di /tengah digunakan untuk memiliki satu operator dalam mode Kardinal di antara (yang *) dan kemudian kita perlu #melewati itu dalam mode Ordinal dalam perjalanan kembali. Program linear adalah:

i..*.QLzno@

Mari kita lalui itu:

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 byte

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

Disimpan 4 byte berkat @LeakyNun. Disimpan 3 byte dengan memperhatikan bahwa input lebih rendah dari 10 ^ 12 sehingga ntidak diakhiri dengan "L". Disimpan 1 byte berkat @ Dennis karena saya salah hitung sejak awal.

Cobalah online! (TIO link milik @Dennis).


3

C (gcc) , 57 byte

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

Berdasarkan jawaban @ betseg, ini adalah fungsi yang mengembalikan 1 atau 0 . Ini menghasilkan keluaran sampah ke STDOUT, yang diizinkan secara default .

Skor tersebut berisi +4 byte untuk flag compiler -lm.

Cobalah online!



3

C # (.NET Core) , 47 byte

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

Cobalah online!


Tidak mungkin untuk perubahan $"{n}"ke n+""? Juga, dapatkah Anda menambahkan tautan TryItOnline ? Oh, dan ini potongan, bukan fungsi / program. Jadi, Anda harus menambahkan n=>di depannya.
Kevin Cruijssen

1
@KevinCruijssen Selesai! Apakah mungkin untuk menyederhanakan lebih jauh? TIL Anda bisa mengonversi int ke string menggunakan n+"". Terima kasih!
kakkarot

Anda tidak memerlukan bool f(long n)atau mengikuti semi-kolon untuk jawaban lambda di C #, Java, dll. Cukup n=>$"{BigInteger.Multiply(n,n)}".EndsWith(n+"")sudah. :) Dan saya hampir lupa: Selamat datang di PPCG!
Kevin Cruijssen

@KevinCruijssen Terima kasih!
kakkarot

Sama-sama! :) Oh, dan ini konverter TIO-link Anda hanya menggunakann=> , dengan menggunakan a System.Func.
Kevin Cruijssen

3

Arang , 12 11 byte

I¬⌕⮌IXIθ²⮌θ

Cobalah online!

Kembali Falsesebagai falseydan Truesebagai truthy.

  • 1 byte disimpan berkat ASCII-only! (Bagaimana saya bisa melewatkan Powerfungsinya?)

Ini mengembalikan 0untuk 10,, 100... 1untuk 50, 60... 2untuk 760, 3792...
Neil

@Neil diperbaiki sekarang, terima kasih!
Charlie

2
Saya pikir Charcoal hanya baik untuk seni ASCII. ಠ_ಠ
totallyhuman


@totallyhuman Masih, lihat semua pegolf normal dengan <6 byte solusi
ASCII-satunya

2

JavaScript (ES6), 23 byte

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

Cobalah

Tulis Cuplikan ini di ponsel saya, jadi harap edit jika tidak berfungsi dengan benar.

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>


Ini gagal untuk 212890625 karena masalah presisi.
Dennis

Terima kasih telah menunjukkannya, @ Dennis; ini adalah quicky sementara pada istirahat asap jadi saya (bodohnya) hanya memeriksa kasus uji. Akan meminta klarifikasi tentang kesalahan presisi dan menghapus ketika saya kembali ke komputer, jika perlu.
Shaggy


2

Kotlin, 36 byte

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

2

C, 77 + 4 ( -lm) = 81 byte

#import<tgmath.h>
i;f(long double n){i=fmod(n*n,pow(10,(int)log10(n)+1))==n;}

Cobalah online!


2
Dapat digunakan n*nuntuk pow(n,2)dan menyimpan 5 byte.
Noodle9

2

R, 28 byte

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

Menciptakan fungsi:

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

Mengambil modulus x^2sedemikian rupa sehingga kita menyimpan digit terakhir, yang kita bandingkan x.






1

Dyvil , 26 byte

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

Pemakaian:

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

1

Batch, 122 byte

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

Algoritma hanya dibatasi oleh tipe integer yang digunakan untuk variabel. Dalam kasus Batch, ini adalah bilangan bulat bertanda 32-bit, jadi maksimumnya adalah 2147483647. Bekerja dengan menguji n dan n-1 untuk kekuatan yang diperlukan 2 dan 5 sebagai faktor. (Kecuali jika n adalah 0 atau 1, n dan n-1 masing-masing memiliki satu faktor.)


1

> <> , 30 byte

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

Cobalah online , atau tonton di taman bermain ikan !

Mengasumsikan nomor input x sudah ada di tumpukan.

Penjelasan: Ikan mengambil hasil bagi x 2 dengan meningkatkan kekuatan 10, dan menghitung berapa kali ini sama dengan x . Ketika kekuatan 10 menjadi lebih besar dari x , ia mencetak jumlah dan berhenti. Hitungannya adalah 1 jika x adalah automorfik, dan 0 jika tidak.



1

Pyth , 10 9 byte

-1 byte terima kasih kepada isaacg .

x_`^vz2_z

Mengembalikan 0 ketika nomor tersebut automorfik, apa pun jika tidak.

Uji secara online!

Penjelasan

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
`dikonversi ke string.
isaacg


0

Perl 6 , 15 byte

{$^x²~~/$^x$/}

Cobalah online!

Mengembalikan objek Pencocokan yang sebenarnya untuk input automorfik, dan nilai Nil palsu untuk angka lainnya.


0

Clojure, 59 byte

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

Ini sepertinya terlalu bertele-tele.


Kenapa tidak pergi saja #(.endsWith(str(* % %))(str %))?
cliffroot

Oh benar, sangat mudah untuk melupakan Java built-in.
NikoNyrh

0

MATL , 10 byte

UUVG36hXXn

Ini berfungsi untuk angka hingga floor(sqrt(2^53)), sesuai doublebatasan presisi.

Output adalah angka positif (yang benar) jika automorfik, atau kosong (yang salah) jika tidak.

Cobalah online!

Penjelasan

Lucu bahwa jawaban ini menggunakan dua versi overload U: dengan input string yang dievaluasi sebagai angka, dan dengan input angka menghitung kuadrat.

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.