Bin ich eine automorphe Zahl?

20

Eine automorphe Zahl ist eine Zahl, die ein Suffix ihres Quadrats in der Basis 10 ist. Dies ist die Sequenz A003226 im OEIS.

Deine Aufgabe:

Schreiben Sie ein Programm oder eine Funktion, um festzustellen, ob eine Eingabe eine automorphe Zahl ist.

Eingang:

Eine ganze Zahl zwischen 0 und 10 ^ 12 (einschließlich), die eine automorphe Zahl sein kann oder nicht.

Ausgabe:

Ein wahrer / falscher Wert, der angibt, ob die Eingabe eine automorphe Zahl ist oder nicht.

Beispiele:

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

Wertung:

Dies ist , die niedrigste Punktzahl in Bytes gewinnt.

Gryphon - Setzen Sie Monica wieder ein
quelle
9
Bei einer Beschränkung auf 1e12 müssen die Einsendungen Zahlen bis zu 1e24 verarbeiten, was einer 80-Bit-Zahl entspricht. Wenn es schwierig ist, mit so großen Zahlen umzugehen, sind viele der ausstehenden Antworten ungültig.
Dennis
Müssen wir mit Zahlen umgehen, die zu Genauigkeitsproblemen in der von uns gewählten Sprache führen würden?
Shaggy
Vorausgesetzt, Sie missbrauchen nicht die Standardlücke, dann wäre das in Ordnung.
Gryphon - Reinstate Monica
Insbesondere diese Lücke
Gryphon - Reinstate Monica
Es war ein langer Tag, und ich bin sehr, sehr müde, aber Ihre Kommentare haben mir als Bestätigung meiner JS-Lösung gedient. Könnten Sie das bestätigen? (Kein Problem zu löschen, wenn nicht)
Shaggy

Antworten:

11

Brachylog , 5 Bytes

~√a₁?

Probieren Sie es online!

Wie es funktioniert

~√a₁?
~√      the input is the square root of a number
  a₁    whose suffix is
    ?   the input
Undichte Nonne
quelle
Nein, es heißt, wenn x ein Suffix seines Quadrats ist.
WGroleau
2
√a₁?Warum nicht?
Totalhuman
38

Python 2 , 24 Bytes

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

Probieren Sie es online!

Zum ersten Mal in der Geschichte ist das Anhängen von Lan den Repräsentanten von Longs in Python 2 eher ein Feature als ein Bug.

Die Idee ist, zu überprüfen, ob "say" " 76^2=5776endet", 76indem überprüft wird, ob 76Les sich um eine Teilzeichenfolge von "" handelt 5776L. Um das LAuftreten von nicht sehr großen Zahlen zu ermöglichen, multiplizieren wir mit 1Loder haben es 2Lals Exponenten, da eine arithmetische Operation mit einem Long mit einem Long ergibt.

xnor
quelle
9

Python 2 , 31 Bytes

Von xnor out-golfed ... (dies passiert jedes Mal)> <Aber hey, es ist überraschend pythonisch für .

Die Leute neigen nicht dazu, sich zu erinnern, dass Python str.endswith()...

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

Probieren Sie es online!

total menschlich
quelle
Kannst du nicht verwenden `n*n`, um eine Zahl in einen String umzuwandeln?
Downgoat
@Downgoat Das setzt ein "L" für längere Zahlen.
Totalhuman
@totallyhuman Guter Punkt, ich habe seine Verwendung verpasst.
Isaacg
5

05AB1E , 5 Bytes

n.s¹å

Probieren Sie es online!

Erik der Outgolfer
quelle
6
Ich würde mich verbessern, wenn ich wüsste, wie es funktioniert.
Isaacg
Ich nehme an, nist quadratisch, .sist Suffixe, ¹ist die Eingabe und åtestet auf Mitgliedschaft @isaacg
Conor O'Brien
@isaacg Was Conor sagte ... hatte keine Zeit, eine Erklärung hinzuzufügen.
Erik der Outgolfer
5

Retina , 44 Bytes

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

Probieren Sie es online!

Es gibt genau 4 Lösungen für die 10-adische Gleichung x*x = x.

Undichte Nonne
quelle
1
Äh? Sind nicht alle diese Zahlen gültige Lösungen?
Leo
@Leo Nein, das sind sie nicht. Offensichtlich 5*5 != 5. Sie können jedoch ein Muster in den Nummern bemerken, mit denen Sie verknüpft sind. Die 4 Lösungen sind: 0, 1, ... 59918212890625, ... 40081787109376 (p-adische Zahlen gehen unendlich nach links ). Die von Ihnen verknüpften Nummern sind Suffixe der 4 Nummern.
Undichte Nonne
Oh ok, danke, ich wusste nichts über p-adic-Zahlen
Leo
4

Alice , 17 Bytes

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

Probieren Sie es online!

Gibt nichts aus (was im Ordinal-Modus falsch ist) oder Jabberwocky(was im Ordinal-Modus nicht leer und daher wahr ist; es ist auch der kanonische Wahrheitswert).

Erläuterung

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

Dies ist eine geringfügige Änderung des allgemeinen Rahmens für Programme im linearen Ordinalmodus. Das /in der Mitte wird verwendet, um einen einzelnen Operator im Kardinalmodus zwischen (dem *) zu haben, und dann müssen wir #ihn auf dem Rückweg im Ordinalmodus überspringen. Das lineare Programm lautet dann:

i..*.QLzno@

Lassen Sie uns das durchgehen:

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.
Martin Ender
quelle
4

Mathematica, 31 Bytes

Mod[#^2,10^IntegerLength@#]==#&

Probieren Sie es online! Mathematik druckt eine zusätzliche Nachricht, aber die Antwort ist richtig

J42161217
quelle
4

Python 2, 37 33 30 29 Bytes

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

4 Bytes dank @LeakyNun gespart. Es wurden 3 Byte gespart, indem festgestellt wurde, dass die Eingabe niedriger als 10 ^ 12 ist, sodass das nZeichen nicht mit einem "L" endet. Dank @Dennis 1 Byte gespart, da ich überhaupt nicht gezählt habe.

Probieren Sie es online! (TIO Link mit freundlicher Genehmigung von @Dennis).

nein
quelle
3

C (gcc) , 57 Bytes

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

Basierend auf der Antwort von @ betseg ist dies eine Funktion, die 1 oder 0 zurückgibt . Es erzeugt eine Garbage-Ausgabe an STDOUT, die standardmäßig zulässig ist .

Die Punktzahl enthält +4 Bytes für das Compiler-Flag -lm.

Probieren Sie es online!

Dennis
quelle
3

C # (.NET Core) , 47 Byte

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

Probieren Sie es online!

kakkarot
quelle
Ist das nicht möglich ist , Änderungen $"{n}"zu n+""? Könnten Sie vielleicht auch einen TryItOnline-Link hinzufügen ? Oh, und das ist ein Ausschnitt, keine Funktion / Programm. Also sollten Sie n=>davor hinzufügen .
Kevin Cruijssen
1
@ KevinCruijssen Fertig! Kann man noch weiter vereinfachen? Bis Sie ein Int in einen String konvertieren können, verwenden Sie n+"". Vielen Dank!
Kakkarot
bool f(long n)Für Lambda-Antworten in C #, Java usw. n=>$"{BigInteger.Multiply(n,n)}".EndsWith(n+"")ist das oder das nachgestellte Semikolon nicht erforderlich . :) Und ich hätte es fast vergessen: Willkommen bei PPCG!
Kevin Cruijssen
@ KevinCruijssen Vielen Dank!
Kakkarot
Bitte! :) Oh, und hier ist dein TIO-Link-Konverter, den du einfachn=> mit einem System.Func.
Kevin Cruijssen
3

Kohle , 12 11 Bytes

I¬⌕⮌IXIθ²⮌θ

Probieren Sie es online!

Gibt Falseals falseyund Trueals zurück truthy.

  • Dank nur ASCII 1 Byte gespart! (Wie könnte ich die PowerFunktion verpassen ?)
Charlie
quelle
Dies gibt 0für 10, 100, ... 1für 50, 60... 2für 760, 3792...
Neil
@Neil jetzt behoben, danke!
Charlie
2
Ich dachte, Holzkohle sei nur gut für ASCII-Kunst. ಠ_ಠ
totalhuman
11 Bytes
ASCII
@totallyhuman Es ist immer noch so, sieh dir alle normalen Golflangs mit <6-Byte-Lösungen an
ASCII
2

JavaScript (ES6), 23 Byte

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

Versuch es

Schrieb dieses Snippet auf mein Handy, bitte bearbeite es, wenn es nicht richtig funktioniert.

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>

Zottelig
quelle
Dies schlägt bei 212890625 aufgrund von Genauigkeitsproblemen fehl .
Dennis
Vielen Dank für den Hinweis, @Dennis; Dies war eine kurze Zeit während einer Rauchpause, so dass ich (dumm) nur die Testfälle überprüfte. Bittet um Klärung von Präzisionsfehlern und löscht sie, falls erforderlich, wenn ich wieder an einen Computer zurückkehre.
Shaggy
2

Gelee , 6 Bytes

²ṚwṚ⁼1

Probieren Sie es online!

Erik der Outgolfer
quelle
Netter Job, der mich übertrifft.
Undichte Nonne
@LeakyNun Und ich hätte sogar Brachylog gebunden, wenn ich hätte ...
Erik the Outgolfer
2

Kotlin, 36 Bytes

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

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

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

Probieren Sie es online!

betseg
quelle
2
Kann verwendet n*nfür pow(n,2)und 5 Bytes speichern.
Noodle9
2

R, 28 Bytes

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

Erzeugt eine Funktion:

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

Nimmt den Modul von x^2so, dass wir die letzten Ziffern behalten, mit denen wir vergleichen x.

JAD
quelle
1

Retina , 47 33 Bytes

14 Bytes dank Martin Ender.

.+
$*
$
¶$`
\G1
$%_
M%`1
(.+)¶\1$

Probieren Sie es online!

Undichte Nonne
quelle
Ich muss lernen $%...
Neil
1

PHP , 41 Bytes

<?=preg_match("#$argn$#",bcpow($argn,2));

PHP Sandbox Online

PHP , 42 Bytes

ohne Regex

<?=strtr(bcpow($argn,2),[$argn=>X])[-1]>A;

PHP , 44 Bytes

Verwenden Sie den Abstand levenshtein

<?=!levenshtein($argn,bcpow($argn,2),0,1,1);
Jörg Hülsermann
quelle
1

Dyvil , 26 Bytes

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

Verwendung:

let f: int->boolean = x=>"\(x*x)".endsWith"\(x)"
print(f 20) // false
Clashsoft
quelle
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))

Der Algorithmus ist nur durch den für Variablen verwendeten Integer-Typ begrenzt. Im Fall von Batch sind dies vorzeichenbehaftete 32-Bit-Ganzzahlen, das Maximum ist also 2147483647. Testet sowohl n als auch n-1 auf die erforderlichen Potenzen von 2 und 5 als Faktoren. (Außer wenn n 0 oder 1 ist, haben n und n-1 jeweils einen Faktor.)

Neil
quelle
1

> <> 30 Bytes

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

Probieren Sie es online aus oder schauen Sie es sich auf dem Fischspielplatz an !

Angenommen, die Eingabenummer x befindet sich bereits auf dem Stapel.

Erklärung: Der Fisch nimmt den Quotienten von x 2, indem er die Potenzen von 10 erhöht, und zählt, wie oft dies x entspricht . Wenn die Potenz von 10 größer als x wird , wird die Zählung gedruckt und angehalten. Die Zählung ist 1, wenn x automorph ist, und 0, wenn dies nicht der Fall ist.

Kein Baum
quelle
1

Pyth , 10 9 Bytes

-1 Byte dank isaacg .

x_`^vz2_z

Gibt 0 zurück, wenn die Zahl automorph ist, andernfalls.

Online testen!

Erklärungen

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
Jim
quelle
1
`wird in einen String konvertiert.
Isaacs
0

Perl 6 , 15 Bytes

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

Probieren Sie es online!

Gibt ein wahrheitsgemäßes Match-Objekt für automorphe Eingaben und einen falschen Nil-Wert für andere Zahlen zurück.

Sean
quelle
0

Clojure, 59 Bytes

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

Dies scheint zu ausführlich.

NikoNyrh
quelle
Warum nicht einfach mitgehen #(.endsWith(str(* % %))(str %))?
Cliffroot
Oh ja, es ist so einfach, Java-Built-Ins zu vergessen.
NikoNyrh
0

MATL , 10 Bytes

UUVG36hXXn

Dies funktioniert floor(sqrt(2^53))gemäß doubleGenauigkeitsbeschränkungen für Zahlen bis zu .

Die Ausgabe ist eine positive Zahl (die wahr ist), wenn sie automorph ist, oder eine leere Zahl (die falsch ist), wenn nicht.

Probieren Sie es online!

Erläuterung

Es ist komisch, dass diese Antwort die beiden überladenen Versionen von verwendet U: Mit der Zeichenfolgeneingabe wird eine Zahl ausgewertet und mit der Zahleneingabe wird das Quadrat berechnet.

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
Luis Mendo
quelle