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.


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


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:



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.


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!


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

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.


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.


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




3

C # (.NET Core) , 47 Byte

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

Probieren Sie es online!


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

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


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


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

Kotlin, 36 Bytes

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


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.






1

Dyvil , 26 Bytes

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

Verwendung:

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

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


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.



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

1
`wird in einen String konvertiert.
Isaacs



0

Clojure, 59 Bytes

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

Dies scheint zu ausführlich.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.