查找无关号码


20

给定2个非负整数作为输入,输出一个不能通过2个输入上的任何数学运算符创建的非负整数。

例如,给定的输入236, 0, 5, 1, 9, 8, 23, 2都是无效的输出。

必须考虑的操作有:

Addition        (a + b)
Subtraction     (a - b) and (b - a)
Multiplication  (a * b)
Division        (a / b) and (b / a)
Modulus         (a % b) and (b % a)
Exponentiation  (a ** b) and (b ** a)
Bitwise OR      (a | b)
Bitwise XOR     (a ^ b)
Bitwise AND     (a & b)
Concatenation   (a.toString() + b.toString()) and (b.toString() + a.toString())

如果操作会导致非整数(例如2/3),请始终设下限。所以2 / 3 = 0

假定任何无效的操作(例如除以0)都为0。

输入值

2个非负整数。

接受标准I / O方法

您可以假设输入将始终在给定语言的可处理范围内,但是请记住,仍然存在标准漏洞

输出量

不能通过2个输入上的任何上述操作创建的任何非负整数。

测试用例

Input  -> Invalid outputs
2, 3   -> 0, 1, 2, 3, 5, 6, 8, 9, 23, 32
0, 0   -> 0
17, 46 -> 0, 2, 12, 17, 29, 63, 782, 1746, 4617, 18487710785295216663082172416, 398703807810572411498315063055075847178723756123452198369
6, 6   -> 0, 1, 6, 12, 36, 66, 46656
1, 1   -> 0, 1, 2, 11

计分

这是因此最少的字节数获胜!



我认为解决此问题的一种方法是找到一些大于(a + b)的素数
死负鼠

1
@DeadPossum绝对是一个有效的解决方案,尽管可能不是唯一的,也可能是最高尔夫的;)
Skidsdev

我敢打赌,有些花哨的语言可以用几个字节来完成它:D
Dead Possum

Answers:


20

视网膜,3个字节

.
1

在线尝试!

接受由空格(或任何单个非换行符)分隔的输入

将所有数字替换为1,并将结果数字与另一个连接1

正确性证明

Martin Ender提供


从技术上讲,这不是将结果数字与另一个数字连接1,它只是将输入作为由2个以空格分隔的数字组成的字符串,并将每个字符替换为1。但是,话虽如此,我找不到能证明您错误的示例。 ..至今
Skidsdev

@Mayube当然可以,因此它可以与任何字符串一起使用,不仅是一个由两个数字组成且由一个空格分隔的字符串。我的解释是针对“两个输入数字”的抽象。
狮子座

2
“众所周知,以10为基数的重复单元不能成为完美的力量。在给定列表中,除求幂运算外,没有其他操作可以产生比输入位数总数更多的位数,因此这应该是有效的。
Martin Ender

你这个厚脸皮的家伙!+1
莫妮卡基金的诉讼

也可以在QuadR中使用
亚当

11

果冻,3个字节

+Æn

在线尝试!

说明:

+Æn Arguments: x, y
+                            x + y.
 Æn Find a prime larger than

认为这是有效的……
暴民埃里克(Erik the Outgolfer)'17

我假设这将输入和输出的第一个素数大于和?
Skidsdev

1
@DeadPossum我要写一个。希望我打得很好。
暴民埃里克(Erik the Outgolfer)'17年

1
Bertrand的假设应该足以证明并置工作。与右边的较小数字b串联,我们得到a..b> = 10a> 4a> 2(a + b),在左边的较小数字b串联,我们得到b..a>(b + 1)一种。唯一有趣的非小情况应该是b = 1,这里我们有1..a> 2a = 2(a + b)-2。此界限最紧密的地方是a = 9。 9。这是唯一对Bertrand的假设可能有问题的非小案例。但是,会有更好的结果,例如mathoverflow.net/questions/2724
tehtmi

1
我猜有一个Bertrand假设的版本,证明n <p <2n-2应该适用于所有情况。我在想n <p <2n。
tehtmi

9

Python 2,8个字节

'1'.join

在线尝试!

将两个数字字符串的列表作为输入,输出一个数字字符串。将数字与1中间的a连接起来。

结果除指数外的任何其他东西都太多。请注意,的输出(x,y)x和的输出多一位y,除非xy等于0。对于指数,我们检查以确保这表示x**y从不匹配。

  • 如果x为0或1,则为x**y,这太小了
  • 如果y<=1,则x**y<=x太小
  • 如果为y==2,则x**2必须多于两位x。这种情况一直持续到x=316,我们无法检查所有这些工作。
  • 如果为y==3,则x**3必须多于两位x。最多发生这种情况x=21。我们可以检查所有这些都不起作用。
  • 如果为3<y<13,则x**y很快会变得太长。似乎只有的数字正确x<=25,并且我们可以检查这些数字。
  • 如果是y>=14,则x**y即使太小也太长x==2

7

果酱(7个字符)

{+))m!}

(a+b+2)!在几乎所有情况下,这都会创建一个大于最大相关数字的数字。

这是相当明显的,最大的相关数必须是一个a ** bb ** aconcat(a, b)concat(b, a)

如果考虑对数,我们发现

  • log(a ** b) = b log a
  • log(concat(a, b)) ~= (log a) + log (b)
  • log((a + b + 2)!) ~= (a + b + 2) log (a + b + 2) - (a + b + 2)

因此,它渐近地变大了,我们只需要担心一些小情况。实际上,值输出不大于所有相关数字的唯一情况是0, 1(或1, 0),它给出6的值是最大相关数字10


3

JavaScript(ES6),15个字节

以currying语法输入。

a=>b=>a*a+b*b+2

对于许多条目,例如3²+5²+ 1 = 357²+26²+ 1 = 726(并置),a²+b²+ 1将会失败。a²+b²+ 2应该是安全的。对其进行了0≤a≤b≤50000的详尽测试。

演示版


1
这样应该可以避免串联。令b为右边连接的数字。固定b,我们可以求解a的二次方程:a ^ 2 + b ^ 2 + 2-10 ^ k * a-b =0。二次方程的判别式必须是一个理想平方,此方程才能具有整数解。判别式为10 ^ 2k-4(b ^ 2-b + 2)= 10 ^ 2k-(2b-1)^ 2-7。考虑模9。k无关紧要,我们永远都不会得到二次余数b。
tehtmi

3

Python,115 95 79字节

愚蠢的简单解决方案。随意打败我。

x,y=input()
f=lambda x,y:[x+y,x*y,x**y,int(`x`+`y`)]
print max(f(x,y)+f(y,x))+1

+12个字节,因为愚蠢x/0
感谢@RobinJames -20个字节感谢@tehtmi
-16个字节


x / y,如果y else 0将小于或等于x * y(对于x,y为非负数),那么我认为您可以将这12个字节加回来再加上3个字节
Robin James Kerrison

@RobinJames啊,我很蠢。谢谢。
HyperNeutrino

1
我认为您应该可以删除更多案例:1)x-y <= x <= x + y; 2)x%y <= y <= x + y; 3,4,5)x | y = x ^ y + x&y <= x ^ y + 2 *(x&y)= x + y (对于最后一个,XOR就像没有进位的加法,而AND正在寻找将要进位的位。OR像实际加法一样取(1,1)-> 1而不是(1,1)->2。)
tehtmi

2

Python,27个字节

lambda a,b:(a+b+9)**(a+b+9)

输出大于所有相关数字的数字。

在线尝试!

-1个字节感谢Kevin Cruijssen。
-2字节归功于Dead Possum。


您的TIO链接为空。另外,:如果我没记错的话,我认为您可以在以后删除空格。
凯文·克鲁伊森

@KevinCruijssen糟糕,修正了,谢谢!
Ankoganit

您可以删除f=- 可以使用未命名的lambda-
死负鼠

@DeadPossum不知道,谢谢!
Ankoganit

您可能可以摆脱至少两个9之一(和相应的+),但是我不确定。
Theo

2

Python 2,25个字节

lambda x,y:int(`x`+`y`)+3

连接并添加3

在线尝试


如果x和y均为3,这行得通吗?
罗伯特·本森

@RobertBenson应该做,afaik你不能从3和3中取得36
Skidsdev

这对我来说似乎还可以。反向串联必须具有不同的9模余数。对于幂运算,在xnor的Python答案中,幂运算的结果位数太多之前,只需要考虑有限的几种情况。我没有看到任何冲突(+1都没有,尽管+2有2 ** 6 = 62 + 2)。
tehtmi

@tehtmi +1在x = y = 0上失败尝试在[0,400]范围内对x和y的所有组合进行在线尝试链接测试
TF

2

JS(ES6),12个字节

x=>x.join`1`

此python答案相同的算法。将输入作为一个整数数组。


1

Braingolf,4个字节

9&+^

在线尝试!(页眉和页脚是解释器,代码是实际的脑高尔夫代码,参数是输入)

产出 (a+b+9)**(a+b+9)

从我的测试中,我找不到任何行不通的线对。


1

Python 2,19个字节

lambda x,y:x+9<<y+9

在线尝试!

我敢肯定,这种移位在所有情况下都适用,但是我并不是100%都能做到。无论如何,它在幂运算版本上节省了一些字节。




1

QBIC,8字节

伙计,有很多很酷的方法来获取这些数字并获得一个无关的数字。我只需要尝试一些,看看QBIC将如何跟上。最短的一个是xnor的Python答案的端口,将数字中间用1串联起来:

?;+@1`+;

所有人,狮子座的视网膜港口回答:

[0,_l;|+_l;||Z=Z+@1

寻找下一个更大的素数:

c=:+:+1≈µc|+1|c=c+1]?c



1

05AB1E2 4字节

+ØDm

在线尝试!

与果冻答案相同,在总和后找到素数。短一个字节:)

编辑:现在将其提升到足以满足异常的能力。


实际上不是同一算法,它找到a+b的是第素数,而我的发现的最小素数大于a+b
暴民埃里克(Erik the Outgolfer)'17年

无论哪种方式,它都应该起作用。
尼尔A.17年

3
对于6443,3失败(给出了素数64433,并置)。
tehtmi '17

@tehtmi是正确的,这将失败。
Skidsdev

查看我的编辑内容,现在应该可以使用
Neil A.

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.