Notcalc(计算错误的答案)


33

目标:

给定两个自然数(整数从0到无穷大),输出一个不是这些数之和的数字,而是一个自然数。

解决方案示例(TI基础):

  • A+B+1

  • not(A+B)

无效的解决方案:

  • A+B-1(对于输入0,0,它返回-1,这是不自然的)

  • "ABC"ABC不是数字)

笔记:

  • 输出必须始终是两个自然数之和(实际上只是一个自然数)

  • -1undefinedinfinityNaN和错误消息不自然数。就我们的目的而言,0是自然的(尽管并非所有数学家都同意)。


1
也许我们将数字作为字符串并输出为字符串?
xnor

1
输出可以有前导零吗?
Kritixi Lithos '02

1
我认为需要考虑溢出,因此2 ^ 32 -1和2的结果不应为负,对吗?
adrianmp

1
只是一小段话,因为我喜欢关注无用的细节:0不是自然数。如果将第一句更改为“给出两个非负整数...”,那么我将没有任何多余的细节要评论。:)
peech

6
@peech这是不正确的。在某些定义中,0被视为自然数。您看不到它,因为它已被删除,但是对此事进行了广泛的讨论。
小麦巫师

Answers:


36

RProgN4 3 1字节

划掉4仍然是4;(

E

最简单的解决方案是比较A和B是否相等。如果为true,则将其推送为RProgN视为1;否则为false(也称为0)。

测试用例

0+0 = 1
1+0 = 0
0+1 = 0
1+1 = 1

在线尝试!


22
我刚刚和您删除的链接一起掉进了兔子洞。我将其评分为<s> 4 </ s> / 4
Rohan Jhunjhunwala

2
@RohanJhunjhunwala握住我的4,我要进去
Albert Renshaw

4
̶4̶<-u + 0336(组合字符)可能是一种更好的方法
Albert Renshaw


3
@AlbertRenshaw旧的PPCG划掉了4-a-roo?
Rɪᴋᴇʀ

15

视网膜,3个字节

 
1

在线尝试!

(第一行在换行符之前有一个空格。Stack Exchange不太擅长显示尾随空白。)

输入是十进制数字,以空格分隔(例如12 34)。该程序只是将空格更改为a 1,创建了一个太大的数字而不能等于输入数字的总和(它必须比任何一个数字多至少2个数字,将两个数字相加会产生一个输出,该数字比输入数字多不超过1个数字较大的输入)。


2
0 0应该也可以。
丹尼斯,

1
@丹尼斯:我对此很纳闷。010基本上所有整数解析器都将其视为整数。我可以看到一个潜在的参数,该参数0 8018通过一些整数解析器被视为无效八进制的基础上是无效的(尽管其他人认为它是十进制18)。注意,该程序非常乐于处理输入中的前导零,并将它们视为十进制;而且我编写的程序在没有人看到问题的情况下输出其他问题的前导零。是否有与此主题相关的元信息?

2
或者,. 1如果您不想自己返回前导零。
Martin Ender

@MartinEnder>但是自然数
wizzwizz4

@ wizzwizz4我没有关注。
马丁·恩德

15

Python,13个字节

[(0,0)].count

在线尝试!将输入作为元组。

对函数使用对象方法可避免创建样板lambda

lambda a,b:a-~b   # 15 bytes

在这里,想法是映射(0,0)1以及其他所有内容0。由于仅0+0给出0自然数之和,因此始终避免匹配该总和。

如果有人可以在此处输出一个布尔值(我觉得很黑),则可以将一个字节保存为

(0,0).__ge__

这将检查输入元组是否最多(0,0),这仅适用于(0,0)。在Python True==1和中False==0。更可疑的是,通过退出代码输出并将其视为Python Boolen将节省两个字节:

[(0,0)].pop

如果允许字符串I / O并且前导零可以,那么有8字节的解决方案

'1'.join

这是级联的a1b,总是大于a+b


1
int.__eq__10字节
蓝色

@muddyfish是的,我也看到了suever的回答,没有想到使用平等。但是它返回一个布尔值,我认为这对要求输出数字的挑战很不满意。
xnor

1
IMO如果它像数字一样游动而嘎嘎像数字一样游荡,则可以合理地假设它是一个数字。
CalculatorFeline

13

MATL等。1个字节

=

接受两个自然数作为输入并进行比较。如果它们相等,则输出为1;如果它们不相等,则输出为0。这与@ATaco的解决方案相同。


3
=解决方案也可以在Jelly中使用1个字节。我以为我在评论中提到了它,因为为琐碎的解决方案创建单独的答案似乎不值得。

@ ais523已更新为包括该内容。谢谢。
Suever

2
同样在堆叠中。在线尝试!
Conor O'Brien

可以添加APL和J吗?
亚当

@Adám当然。您有我可以链接的TIO链接吗?
Suever

10

Javascript,10个字节

x=>y=>!x+y

使用类似currying的语法取2个数字:

(x=>y=>!x+y)(0)(0) // 1

4
欢迎光临本站!:)
DJMcMayhem

谢谢=)我已经读了一段时间的挑战,只是试图寻找一个好的起点。
马里维尔'17

9

Vim,3个字节/击键

<C-a>gJ

在线尝试!

请注意,<C-a>实际上是ctrl-a,它表示byte 0x01

当vim(甚至不是编程语言)可以与高尔夫语言竞争时,我会喜欢它。:)输入格式如下:

a
b

这只是将第一个数字加一个(这是<C-a>部分),然后将两个数字的字符串表示形式连接在一起。据我所知,这绝对不会导致总和。


9

Brain-Flak,8个字节

({}{}())

在线尝试!

这是我写过的最易读的大脑性答案。:)

说明:

(      )    # Push the sum of all the following:
 {}         #   The first input
   {}       #   The second input
     ()     #   and one

备用解决方案(也是8个字节):

({}[]{})    # Sum + 1
([]{}{})    # Sum + 2

还有许多其他解决方案仅适用于正数:

(<{}>{})
({}<{}>)
({{}}())
({{}()})
({{}}[])
({{}[]})


6

TI基本,3个字节

not(max(Ans

替代解决方案:

10^(sum(Ans         3 bytes @DestructibleWatermelon
not(sum(Ans         3 bytes
1+sum(Ans           4 bytes
Input :X=Y          5 bytes @ATaco
Input :X+not(Y      6 bytes
Input :not(X+Y      6 bytes
Input :10^(X+Y      6 bytes
Input :X+Y+1        7 bytes
Input :not(max(X,Y  7 bytes
Ans(1)=Ans(2        8 bytes
Ans(1)+not(Ans(2    9 bytes
not(Ans(1)+Ans(2    9 bytes

有趣的是,您在TI-Basic中提出了问题的示例,但您忘记了较短的示例A=B(或者可能是我们要找出答案吗?)


1
当OP在问题中发布超短解决方案时,没人喜欢它,因此很难被击败。
mbomb007 '02

我想是@ mbomb007,但是这些只是代码片段,而不是完整的程序。添加Prompt A,B:到它们使字节数每个增加到八个字节。
Timtech '17

1
@Timtech正是。我不想给出很好的答案作为示例,我只是想要示例。
朱利安·拉希尼特

@JulianLachniet我理解并赞赏这一点:)
Timtech '17

6

Brachylog,2个字节

+<

在线尝试!

说明

+     The sum of the elements in the Input...
 <    ...is strictly less than the Output
      (implicitely label the output with an integer respecting this constraint)

这将始终导致A+B+1,如果Input = [A, B]


5

Mathematica,5个字节

1+##&

输出两个自变量加1的总和。例如1+##&[2,5]yields 8

(旁注:Binomial虽然几乎是有效的,尽管Binomial[1,0]=1Binomial[4,2]=6都是反例;但我认为它们是唯一的反例。)


Pochhammer似乎比更好Binomial。据我所知只有1,0失败。
Martin Ender

嗯,并且KroneckerDelta适用于所有输入(相当于某些esolang中的相等性检查)。实际上,重新实现的时间要短一些Boole[#==#2]&,但是我认为您正在寻找的是可以正常使用的内置功能。
Martin Ender

5

PHP,17个字节

<?=1-join($argv);

像这样运行:

echo '<?=1-join($argv);' | php -- 0 0
> 1

说明

这只是连接参数。第一个参数(脚本名称)包含-。因此,结果为负数,我用负号取反。然后我加1,以防万一第一个输入数字是0(0123 = 123)。



4

Turtlèd,12个字节

使非常大的数字

'1?:?:[1'0l]

在线尝试!

说明:

'1                write one on the starting grid square
  ?:?:            take a number, move right that many (repeat)
      [1   ]      while not on a grid square with a one on it
        '0l       put a zero on that square, move left
[implicit output of grid]

因此,它输出10 **(x + y)。



4

Java(OpenJDK 9),10字节

a->b->a-~b

在线尝试!


1
使用curring,您可以保留一个字节:a->b->a-~b。也适用于Java 8,任何版本(因此无需指定OpenJDK 9)
OlivierGrégoire17年

@OlivierGrégoireJava现在开始看起来像JS> _>
Kritixi Lithos

@KritixiLithos好吧...我们暗示这将发生多年:Java脚本;-)
OlivierGrégoire17年

@KritixiLithos Java 9的规范中有关于“ ECMAScript 6 Compliance”的部分。
帕维尔

@OlivierGrégoire是的,但是此提交是自动生成的,因此添加了9。
Pavel

4

HODOR,40个字节(非竞争)

这可能是Hodor编写的最短的程序!

当您在两周的学校假期中无事可做时,就会发生这种情况:生成一堆真正容易编码的笑话语言,但它们什么都不做。耶学校假期!!!

Walder
Hodor?!
Hodor?!
Hodor HODOR!
HODOR!!!

Walder 是霍多尔(Hodor)的原始名称,因此开始该计划需要。

Hodor?! 接受STDIN中的数字或单个字符,并将累加器设置为输入

Hodor 将1加到累加器

HODOR! 将累加器输出为数字

HODOR!!!杀死霍多尔!不!

这是伪代码:

Take input
Take input
Add 1 to sum(inputs)
Output value

1
我认为您需要为您的语言命名,除非这是2015年创建的Hodor语言的解释器,我敢肯定这不是。
mbomb007 '04

@ mbomb007不,这不是我的,但有些语言具有重复的名称。我知道这个站点上有两个叫7的
主机

1
我很确定只有一个叫7,就是这个。您可以更改标题的大写字母,以轻松解决问题,例如HODOR。
mbomb007 '04

@ mbomb007我的是H气味,而他们的是H气味,这样就足够了吗?
caird coinheringaahing

不,他们的大写字母H,从他每次在他的网站上使用语言名称时就可以看到。
mbomb007 '04

3

SmileBASIC,4个字节

!A+B

不是(A)+ B
1+1=2 -> !1+1 -> 0+1=1
0+1=1 -> !0+1 -> 1+1=2


出于好奇,这如何提供支持2+1
ATaco

2
2+1=3 -> !2+1 -> 0+1=1
17Me21年

3

R,13个字节

sum(scan()+1)

感谢Jonathan Allan的投入!


@JonathanAllan:对,我改变了答案。谢谢 !
弗雷德里克

好吧,可以肯定的000,也许sep="1"吗?
乔纳森·艾伦

@JonathanAllan:该死!再次感谢 !
弗雷德里克

看一下R中打高尔夫球技巧scan(),接受这样的向量输入似乎应该没问题。但是使用,我们可以做一个字节更好cat(sum(scan()+1))。也许更短?
乔纳森·艾伦,

1
有了cat它,它是一个完整的程序,替代品将是具有相同字节成本的未命名函数function(a,b)a+b+1
Jonathan Allan

3

05AB1E,1个字节

Q

RProgN答案相同。

检查ab是否相同。如果是这样,请打印1。否则,打印0

在线尝试!


3
¢(a.count(b))也应工作1个字节。
莱利

@Riley,您可以将其发布为您自己的答案。
Okx

2
它并没有什么不同,需要它自己的答案。我以为我们可以将两个1字节的解决方案组合成一个答案。
莱利

3

C 26 24 19字节

f(c,d){return!c+d;}

非高尔夫版本:

int f(int c,int d)
{
   return !c+d; 
}

我希望我的规格正确。绝对可以缩短!?

@Pavel感谢您保存2个字节

@Neil感谢您的输入。


1
您需要()周围!c+d吗?
帕维尔

@Pavel你是对的,括号没用了,更新了!
亚伯汤姆

2
不确定100%,但是我认为您可以删除自己的空格return,例如return!c+d;
Metoniem

1
失去收益,而是给它分配c + =!d
Ahemone '17

1
@AlbertRenshaw可移植性不是我要依靠的东西,但是这里有一些例子。我无法使其离线运行,而且似乎需要将其分配给TIO上的非参数变量。tio.run/nexus/…
nexus/ Ahemone

3

MATLAB /八度,3字节

@eq

接受两个输入并检查是否相等,1如果相等,0则输出。

在线演示


4
这不是@eq吗?这将返回一个函数句柄,该句柄可用于评估所需的函数,而只是eq毫无意义。
桑契斯'17

@Sanchises我见过很多答案是双向的:codegolf.stackexchange.com/questions/106149/compute-the-median/...。我实际上不确定哪个是首选。
Suever

嗯 我应该认为这更像是一个代码段,同时@又将其转变为有效的语言构造。但是也许我只是在做书呆子。
桑奇斯

3

Brainfuck,12个字节

输出的简单解决方案A+B+1

,>,[-<+>]<+.

在线尝试


替代答案(12个字节):,>,[-<++>]<.
朱利安·拉希涅

@JulianLachniet会输出A + 2B吗?
乔治

当B = 0
l4m2

@ mbomb007我说的是,>,[-<++>]<.解决方案
l4m2

@JulianLachniet对,这不是一个有效的答案,因为A + 2B为输入B = 0,给出A.
mbomb007

3

dc,5个字节

?1n+n

在线尝试!

输入:两个自然数,在stdin上用空格分隔。

输出:数字1后面紧跟两个数字之和,该数字大于两个数字之和。

例:

输入: 222 333

输出: 1555


3

PHP,13个字节;(少17个REPL)

!max($argv)+0

例子

[0,0] -> 1
[0,1] -> 0
[1,0] -> 0

对于没有REPL的人

<?=!max($argv)+0;

并使用

echo '<?=!max($argv)+0;' | php -- 0 0

这个答案是无效的,因为它没有输出任何东西

@aross如果布尔类型转换是问题,我更新了答案
mleko

是的,您解决了两个问题。输出为true / false,而不是1/0。此外,REPL :)
aross

3

Cubix,9个 8字节

u-~OII/@

说明

展开后,此答案如下所示:

    u -
    ~ O
I I / @ . . . .
. . . . . . . .
    . .
    . .

指令的执行顺序为 II~-O@

II~-O@
I      # First input
   -   # Minus
 I~    # NOT(second input)
    O  # Output as integer
     @ # End program

测试了所有输入组合都在范围内的所有组合0-100

在这里尝试。


3

APL-4字节

1++/

取数组,将其元素求和并加一个。测试:

 1++/1 2  
4
 1++/1 0
2


3

六边形,7字节

?<.!?)@

在线尝试!

或者采用更具可读性的格式,

 ? <
. ! ?
 ) @

这超过了当前的11字节Hexagony解决方案。

说明:

如果第一个数字不为0,则程序采用以下路径:

不是0

这将读取第一个数字并向右分支。然后,它读取第二个数字,然后包装并尝试读取第三个数字,但是该数字不存在,因此它读取为0。将其打印并终止程序(请注意,如果a> 0,因为b为非负a + b> 0)。

如果第一个数字为0,则程序采用以下路径开头:

是0

这将读取第一个数字并向左分支。它到达拐角处,因为数字为0,所以从西北边缘开始沿路线行驶,然后读取第二个数字。它包装,然后递增第二个数字并打印。

还是0

它反跳<,再次打印增加的第二个输入。它增加了该值并再次占据了东北边缘,但这一次是因为当前边缘的非负值增加了两倍,该值肯定为正。然后,它尝试获取第三个输入,但改为接收0。

还有0

最后,它包装并被箭头转移,然后尝试读取第四个输入并再次获得0。它包装并尝试读取第五个输入,最后一次接收到0。它进行打印,并包装到@和退出。

请注意,b *(10 ^ k + 1)* 10> 0 + b = b,其中k是b的长度(以数字为单位),因此可行。


2

台球,11个字符= 17个字节

⇲
⇲
+
1
+
↥

机具 x + y + 1。很基础。它在两条单独的线上接受输入。(顺便说一句,在挑战之后对语言进行了稍微的修改,但只是为了抑制提示输入,不确定该答案是否仍然有效)。

7个字符= 11个字节,无竞争

这是较短的,但只有在对语言进行新的更新后才可能:

⇲
⇲
=
$

它使用x == y,从@ATaco的RProgN解决方案中偷偷偷走的[希望您不要介意(:]。$出口处的,输出经过它的球数。


slightly after the language错字,我也认为当语言具有输入提示时,它仍然有效。我认为输出标准不是严格的和不可抑制的输出,我认为
破坏的柠檬

@DestructibleWatermelon哦,那是一个奇怪的错字。感谢您的澄清。我实际上是修改了语言,然后看到了挑战,所以我决定在那儿添加注释,以防万一有人决定对何时将其推送到GitHub保持谨慎,但是感谢您的澄清。
HyperNeutrino
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.