我是一个自构数字吗?


20

自守数字是一个以10为底的正方形后缀的数字。这是OEIS中的序列A003226

你的任务:

编写程序或函数以确定输入是否为自守数字。

输入:

0到10 ^ 12(含)之间的整数,可以是也可以不是自守数字。

输出:

真/假值,指示输入是否为自变形数。

例子:

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

得分:

这是,以字节为单位的最低得分获胜。


9
顺便说一句,1e12的限制意味着提交者将需要处理1e24以下的数字,这是一个80位数字。如果很难处理那么大的数字,那么许多现有的答案都是无效的。
丹尼斯,

我们是否需要处理可能导致所选语言出现精度问题的数字?
毛茸茸的

只要您不滥用标准漏洞,那就可以了。
狮ry-恢复莫妮卡


这是一个漫长的一天,我非常非常累,但是您的评论对我来说是对我的JS解决方案的验证。你能确认吗?(如果没有删除则没有问题)
Shaggy

Answers:


11

Brachylog,5个字节

~√a₁?

在线尝试!

怎么运行的

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

不,它表示x是否是其平方的后缀。
WGroleau

2
√a₁?为什么不?
6

38

Python 2,24个字节

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

在线尝试!

在历史上第一次,将Python 2追加L到long的代表是功能而不是bug。

想法是检查是否说了,76^2=5776最后76检查是否76L是的子字符串5776L。为了使L非大数出现,我们将乘以1L或将其2L作为指数,因为带long的算术运算会产生long。




5

视网膜,44字节

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

在线尝试!

10-adic方程正好有4个解x*x = x


1
嗯?所有这些数字不是有效的解决方案吗?
狮子座

@Leo不,不是。显然5*5 != 5。但是,您会在链接到的数字中注意到一些模式。4个解决方案是:0、1,... 59918212890625,... 40081787109376(p-adic数无限地向左移动)。您链接到的数字是4个数字的后缀。
Leaky Nun

哦,好的,谢谢,我不知道p-adic的数字
Leo

4

爱丽丝,17个字节

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

在线尝试!

不输出任何内容(在“序数”模式下是虚假的)或Jabberwocky(在“序数”模式下是非空的,因此是真值的;它也是规范的真值字符串值)。

说明

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

这是对线性序数模式程序的通用框架的略微修改。在/中间是用来在红衣主教模式单一运营商之间(的*),然后我们需要#跳过它在序模式在回来的路上。线性程序为:

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

感谢@LeakyNun,节省了4个字节。注意输入小于10 ^ 12,因此节省了3个字节,因此n不会以“ L”结尾。感谢@Dennis,节省了1个字节,因为我一开始就误算了。

在线尝试!(TIO链接由@Dennis提供)。




3

C#(.NET Core),47个字节

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

在线尝试!


不可能更改$"{n}"n+""吗?另外,您是否可以添加TryItOnline-link?哦,这是一个片段,不是函数/程序。因此,您应该n=>在它前面添加。
Kevin Cruijssen

1
@KevinCruijssen完成!是否可以进一步简化?直到您可以使用将int转换为字符串n+""。谢谢!
kakkarot

bool f(long n)对于C#,Java等中的lambda答案,您不需要使用或结尾的分号。就n=>$"{BigInteger.Multiply(n,n)}".EndsWith(n+"")足够了。:)我几乎忘了:欢迎使用PPCG!
凯文·克鲁伊森

@KevinCruijssen谢谢!
kakkarot


3

木炭12 11字节

I¬⌕⮌IXIθ²⮌θ

在线尝试!

返回Falseas falseyTrueastruthy

  • 仅使用ASCII节省了1个字节!(我怎么会错过这个Power功能?)

这回报010100... 15060... 27603792...
尼尔

@Neil现在修复,谢谢!
查理

2
我以为木炭只对ASCII艺术有用。ಠ_ಠ–完全人类的
2015年


@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

Dyvil,26个字节

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

用法:

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

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

> <>,30个字节

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

在线尝试,或在鱼游乐场观看!

假设输入数字x已经在堆栈中。

说明:鱼通过乘以10的幂来获得x 2的商,并计算等于x的倍数。当10的幂次幂大于x时,它将打印计数并暂停。如果x是自守的,则计数为1,否则为0。



1

Pyth10 9字节

-1字节归功于isaacg

x_`^vz2_z

当数字是自守形态时,返回0,否则返回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内置组件是如此容易。
NikoNyrh

0

MATL,10字节

UUVG36hXXn

floor(sqrt(2^53))根据double精度限制,此方法适用于最大为的数字。

如果是同构的,则输出为正数(真),否则为空(虚假)。

在线尝试!

说明

有趣的是,这个答案使用了:的两个重载版本U:输入字符串时,它的计算结果是一个数字,输入数字时,它计算的平方值。

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.