私は自己同型の数ですか?


20

Automorphic番号は、10を底とする正方形の接尾辞である番号です。これは、OEISのシーケンスA003226です。

あなたのタスク:

入力がオートモーフィック数であるかどうかを判断するプログラムまたは関数を作成します。

入力:

0〜10 ^ 12(両端を含む)の整数。これは、オートモーフィック数である場合とそうでない場合があります。

出力:

入力がオートモーフィック数であるかどうかを示す真実/偽の値。

例:

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

得点:

これは、バイト単位の最低スコアが勝ちます。


9
一方、1e12の制限は、提出が1e24までの数(80ビット数)を処理する必要があることを意味します。大きい数値を処理することが厳しい要件である場合、既存の回答の多くは無効です。
デニス

選択した言語で精度の問題につながる数値を処理する必要がありますか?
シャギー

それに関する標準の抜け穴を悪用しないのであれば、それは問題ありません。
グリフォン-モニカの復活


とてもつらい日でしたが、とても疲れましたが、あなたのコメントは私のJSソリューションを検証していると読んでくれました。確認できますか?(そうでない場合は削除の問題はありません)
シャギー

回答:



38

Python 2、24バイト

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

オンラインでお試しください!

歴史上初めて、Python 2のLlongのreprへの追加はバグではなく機能です。

という考えは、のサブストリングがであるかどうかをチェックすることで76^2=5776終わるかどうかをチェック76することです。非巨大な数値に対して表示されるようにするには、longとの算術演算はlongを生成するため、乗算または指数として持っています。76L5776LL1L2L


9

Python 2、31バイト

xnorによるアウトゴルフ...(これは毎回発生します)> <しかし、ちょっと、それはとって驚くほどPythonicです。

人々はPythonが持っていることを覚えていない傾向がありstr.endswith()ます...

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

オンラインでお試しください!


`n*n`数値を文字列に変換するために使用できませんか?
ダウンゴート

@Downgoat長い数字に「L」を付けます。
完全に人間

@totallyhuman良い点、私はその使用を見逃した。
isaacg


5

網膜、44バイト

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

オンラインでお試しください!

10進方程式には4つの解がありますx*x = x


1
あれ?これらの数字はすべて有効な解決策ではありませんか?
レオ

@レオいいえ、そうではありません。明らかに5*5 != 5。ただし、リンク先の数字に何らかのパターンが見られることがあります。4つのソリューションは次のとおりです。0、1、... 59918212890625、... 40081787109376(p進数は無限に左に進みます)。リンクした番号は、4つの番号の接尾辞です。
リーキー修道女

ああ、わかりました、ありがとう、私はp進数字について知りませんでした
レオ

4

アリス、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より小さいことを認識して3バイトを節約しましたn、「L」で終了しないしてしました。そもそも間違って数えていたので、@ Dennisのおかげで1バイト節約できました。

オンラインでお試しください!(@Dennisの好意によるTIOリンク)。




3

C#(.NET Core)、47バイト

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

オンラインでお試しください!


に変更$"{n}"することはできませんn+""か?また、おそらくTryItOnline-linkを追加できますか?ああ、これはスニペットであり、関数/プログラムではありません。そのため、そのn=>前に追加する必要があります。
ケビンCruijssen

1
@KevinCruijssenできました!さらに簡素化することは可能ですか?TILを使用してintを文字列に変換できn+""ます ありがとう!
-kakkarot

bool f(long n)C#、Javaなどのラムダ応答にセミコロンまたは後続のセミコロンは必要ありません。それでn=>$"{BigInteger.Multiply(n,n)}".EndsWith(n+"")十分です。:)そして、私はほとんど忘れていました:PPCGへようこそ!
ケビンCruijssen

@KevinCruijssenありがとうございます!
-kakkarot

どういたしまして!:)ああ、これは、を使用してn=>ちょうど使用するTIOリンクコンバーターSystem.Funcです。
ケビンCruijssen

3

12 11バイト

I¬⌕⮌IXIθ²⮌θ

オンラインでお試しください!

Falseas falseyおよびTrueasを返しますtruthy

  • ASCIIのみのおかげで1バイト節約!(どのようにしてPower機能を見逃すことができますか?)

これを返す0ために10100、... 1のために5060... 2のために7603792...
ニール

@Neilが修正されました、ありがとう!
チャーリー

2
木炭はASCIIアートにのみ適していると思いました。ಠ_ಠ
totallyhuman


それはまだある@totallyhuman、<6バイトのソリューションですべての通常golflangsを見て
ASCIIのみの

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、指摘してくれてありがとう。これはスモークブレーク中に迅速に行われたため、(愚かな)テストケースのみをチェックしました。精度エラーの説明を求め、必要に応じてコンピューターに戻ったら削除します。
シャギー




2

R、28バイト

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

関数を作成します。

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

x^2最後の桁を保持するような係数を取り、これをと比較しxます。







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

アルゴリズムは、変数に使用される整数型によってのみ制限されます。バッチの場合、これは32ビット符号付き整数であるため、最大値は2147483647です。nとn-1の両方を必要な2と5のべき乗として因子としてテストすることにより機能します。(nが0または1の場合を除き、nとn-1にはそれぞれ1つの係数があります。)


1

> <>、30バイト

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

オンライン試してみるか、魚の遊び場で見てください

入力番号xを想定が既にスタック上にあるとます。

説明:魚は、10の累乗を増やすことによりx 2の商を取り、これがxに等しい回数をカウントします。10の累乗がxより大きくなると、カウントを出力して停止します。xが自己同型ならカウントは1で、そうでなければ0になります。



1

パイス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



0

Clojure、59バイト

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

これは過度に冗長に思えます。


なぜ一緒に行かないの#(.endsWith(str(* % %))(str %))ですか?
クリフルート

ああ、Javaビルトインを忘れるのは簡単です。
ニコニール

0

MATL、10バイト

UUVG36hXXn

これは、精度の制限によりfloor(sqrt(2^53))、最大の数値で機能しますdouble

出力は、自己同型の場合は正の数(真理)、そうでない場合は空(偽)です。

オンラインでお試しください!

説明

おもしろいことに、この回答では、U文字列入力では数値と​​して評価され、数値入力では平方を計算する2つのオーバーロードバージョンを使用します。

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.