远离零


41

任务

给定一个非负整数n,则输出1if n0,并输出else的值n

输入项

非负整数。

  • 如果您想接受该字符串作为输入,则该字符串将与以下regex:相匹配:/^(0|[1-9][0-9]*)$/即,它不得有任何前导零,除非是0
  • 如果接受实整数作为输入,则可以假定该整数在语言的处理能力之内。

输出量

正整数,如上所述。不允许前导零。您的输出应与regex相匹配/^[1-9][0-9]*$/

测试用例

input output
    0      1
    1      1
    2      2
    3      3
    4      4
    5      5
    6      6
    7      7

计分

这是,因此最短答案以字节为单位。

有标准漏洞


1
您可能应该链接到TNB CMC,因为这是挑战的来源。
mbomb007 '17

答案需要是一个完整的功能,还是可以是身体?
卡勒布·克里夫特

1
@CalebKleveter PPCG中的默认规则是答案是函数还是完整程序,而不是摘要。
Leaky Nun

我们可以用前导零打印输出吗?
MD XF

@MDXF是的,可以。
Leaky Nun

Answers:


18

C(gcc),14 13字节

f(n){n=n?:1;}

感谢@betseg提醒我n?:1其他C答案的注释中的技巧!

在线尝试!

C,17个字节

f(n){return!n+n;}

在线尝试!

C,16字节

#define f(n)!n+n

在线尝试!



1
@betseg那是因为它是一个宏。编译器将其视为3*!n+n等于3*0+5
Steadybox '17

1
我知道,但是我认为您应该能够直接将算术运算符应用于“返回”值,这就是为什么在宏周围加上括号的原因。我只是认为该宏无效。
betseg

4
@betseg我认为这不是代码高尔夫的要求。我从未见过使用C宏编写代码的高尔夫球答案。
Steadybox'5

1
@hucancode请参见TIO链接。您需要添加一个main从中f调用函数/宏的函数。默认情况下,解决方案不需要是完整程序。特定于gcc的版本可能会或可能不会在另一个编译器上进行编译,并且在另一个编译器上进行编译时可能会或可能无法正确运行。
Steadybox'5

17

Japt,2个字节

ª1

在线尝试!

说明

ª是JS ||运算符的快捷方式。Japt具有隐式输入,因此该程序计算input||1,并将结果隐式发送到STDOUT。

w1也会采用最大的输入和1


16

爱丽丝,7个字节

1/s
o@i

在线尝试!

说明

1   Push 1. Irrelevant.
/   Reflect to SE. Switch to Ordinal.
i   Read all input as a string.
    Reflect off bottom right corner. Move back NW.
/   Reflect to W. Switch to Cardinal.
1   Push 1.
    IP wraps around to last column.
s   Sort swap: implicitly convert the input to an integer. Then, if the top stack 
    element is less than the one below, the two are swapped. It basically computes
    min and max of two values at the same time, with max on top.
/   Reflect to NW. Switch to Ordinal.
    Immediately reflect off the top boundary. Move SW.
o   Implicitly convert the result to a string and print it.
    Reflect off bottom left corner. Move back NE.
/   Reflect to S. Switch to Cardinal.
@   Terminate the program.

15

JavaScript(ES6),7个字节

n=>n||1

5
另一种选择:(n=>n+!n至少我认为)
马修·

@SIGSEGV是的,确实可以。(也可以是n|!n,尽管该数量限制为31位。)
Arnauld

可以简化为n || 1。唯一评估为假的值是
0。– ansiart

1
@ansiart如果您的意思是n=>n||1可以简化为n||1,则不会。可接受的答案是完整程序或功能。n=>do_something_with(n)是ES6语法中的箭头功能
Arnauld

1
@StanStrum n如果不为零,我们需要返回其原始值。n每当未设置最低有效位(例如(4|1) === 5)时,按位或将进行修改。
Arnauld



12

V,4个字节

é0À

在线尝试!

滥用一种不受欢迎但预期的行为,因此我不能真正将其称为错误。说明:

在Vim中,命令接受计数。例如,<C-a>将增加一个数字,但是7<C-a>将增加一个数字7。但是,您不能将其0用作计数,因为

  • 0 已经是一个命令(转到第一列),并且

  • 在文本编辑器的上下文中,要求将命令运行0次几乎没有意义。

这对于文本编辑器来说很好,但是对于高尔夫球语言通常是令人讨厌的,因此V会覆盖一些命令,因此这0是有效的计数。例如éñÄ,和其他一些人。但是,由于<C-a>是内置的vim命令,因此不会被覆盖,因此使用正输入运行此命令可获得:

N       " N times:
 <C-a>  "   Increment

但是以0作为输入运行会给出:

0       " Go to column one
 <C-a>  " Increment

完整说明:

é0          " Insert a 0
  À         " Arg1 or 1 times:
   <C-a>    " Increment

1
一次0不算是有用的。一开始我什至没有考虑它,因为我已经避免了很多次
nmjcman101

12

J,2个字节

^*

在线尝试!

^ [论点]提升至

* 参数的符号(如果为0,则为0,否则为1)

因为1=0^0在J。


12

Haskell,5个字节

max 1

用法示例:(max 1) 0-> 1

没什么可解释的。



10

R,13个字节

max(1,scan())

n从标准输入读取。使用pmax,它可以读取列表并为列表中的每个元素返回+1字节的适当值。

在线尝试!

我应该注意,Sven Hohenstein还提供了另一个 13字节的R解决方案,该解决方案允许使用

(n=scan())+!n

这让我想知道这是否是R的下限。


另一个13字节的解决方案使用pryrpryr::f(n+!n)。找不到更小的东西……
JayCe

9

Cubix,6个字节

OI!1L@

不知何故设法将其安装在单位立方体上…… 在线测试!

说明

在运行之前,代码被安排为多维数据集网络:

  O
I ! 1 L
  @

然后,将IP(指令指针)放在最右侧(I最右侧)。从那里运行的说明有:

I  Input a number from STDIN and push it to the stack.
!  If the top number is non-zero, skip the next instruction.
1  Push a 1 (only if the input was zero).
L  Turn left. The IP is now on the top face facing the !.
O  Output the top item as a number.

IP然后!再次命中,跳过@底面的。这没有帮助,因为我们需要点击@结束程序。IP L再次击中并以反向(L1!I)穿过中间线,然后再结束L一次,最后将IP切换为@







5

Brachylog,3个字节

∅1|

在线尝试!

说明

如果我们添加隐式的?(Input)和.(Output),我们将:

?∅          Input is empty (that is, [] or "" or 0 or 0.0)
  1.        Output = 1
    |       Else
     ?.     Input = Output

5

MarioLANG,12个字节

;
=[
:<+
 =:

在线尝试!

这个怎么运作

马里奥从左上角开始,最初向右走。他从输入(;)中读取一个int 并将其存储在当前存储单元中。然后他掉下地面(=),撞到[,如果当前单元格为0,则使他忽略下一条命令。

如果单元格不为0,则他将开始向左走(<),将当前单元格输出为int(:),然后死亡(程序结束)。

如果单元格为0,他将忽略左转命令,并继续向右走。他递增当前单元格(+),输出它,然后跌倒死亡。


5

脑高射炮22,10个字节

({{}}[]{})

在线尝试!

说明:

如果输入为非零,{{}}则将所有内容从堆栈中弹出并求值到输入。如果为零,则不会弹出任何内容,并且评估结果为零。所以跑步({{}})

非零:

n

零:

0
0

此时,我们将增加堆栈的高度(0表示非零,1表示零),然后再从堆栈中弹出一个值。(由于堆栈填充了无限数量的0,因此将弹出顶部的0或额外的0)


做得很好,但不是最短的解决方案:codegolf.stackexchange.com/a/118520/31203
MegaTom,




4

Python,15个字节

lambda n:n or 1

为什么不只是n or 16个字节?
DReispt '17

2
因为那只是一个片段,而我们通常会以完整的程序或功能来回答。我不确定这是否在某些地方的某些规则中明确说明,但至少这是事实上的标准。
丹尼尔(Daniero)'17

引用trichoplaxThe rules are not terribly clear. I think we have a consensus on meta that REPLs count, but as a separate language, which would allow snippets in many cases, but snippets are not permitted according to this meta post-> codegolf.meta.stackexchange.com/questions/2419/…–
daniero

@trichoplax 1or n总是返回1,不是吗?
丹尼尔(Daniero)

1
具有相同的15个字节字节数的lambda n:n|1>>n
备用项

4

dc,11个字节

[1]sf?d0=fp

[1]sf在寄存器f中存储一个宏,该宏将1推入堆栈的顶部, ?读取输入, d0=f如果输入为0,则运行宏f,p打印堆栈的顶部。

测试:

$ dc -e "[1]sf?d0=fp" <<< 0
1
$ dc -e "[1]sf?d0=fp" <<< 1
1
$ dc -e "[1]sf?d0=fp" <<< 42
42

4

Excel,10字节

=A1+(A1=0)

这比明显的“ IF”语句解决方案节省了4个字节=IF(A1=0,1,A1)


3
比不那么明显的字节少1个字节=A1+NOT(A1)
工程师吐司



3

Mathematica,9个 8字节

Per Martin Ender:

#~Max~1&

第一个想法:

#/. 0->1&

的纯函数替换01。该空格是必需的,或者它认为我们正在被除以.0


3

-l和-p标志的Perl 5、6 + 2个字节

$_||=1

在stdin的不同行上接受输入。与标志一起运行-lp

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.