向零舍入


14

这是一个简单的任务。给定正或负实数,将其四舍五入为接近零的下一个整数。

挑战

  • 通过任何正数或负实数的合理形式(stdin,函数等)进行输入。

  • 将此数字四舍五入为“接近零”-这意味着,如果为正数,则将四舍五入;如果为负数,则将四舍五入。

  • 返回该数字或将其输出到控制台。

测试用例

 1.1   =>  1
-1.1   => -1
 500.4 =>  500
-283.5 => -283
 50    =>  50
-50    => -50

规则

玩得开心! 更多吉米挑战即将来临


3
我可以输出3.003.14
tsh

1
@A_如果stderr中有错误消息。并且您的输出在stdout中。默认情况下是允许的。
tsh

1
同样0.01并且-0.01应该屈服0……
roblogic

2
嗯,对于代码高尔夫来说,这似乎是不合理的。大多数语言对此都有内置功能,不是吗?看起来我们要假设所有输入和输出都是字符串?
Octopus

2
3.00当然是整数。更准确地说,在标准数学符号以及许多编程语言中,符号“ 3.00”表示数字3,它是整数;但是在许多编程语言中,它指示该数字将以浮点格式存储。(但无论存储的格式如何,它都是整数。)
Tanner Swett

Answers:


13

果冻,1 字节

r

完整程序(作为Monadic Link,它返回长度为1的列表)。

在线尝试!

怎么样?

r - Main Link: number, X           e.g. -7.999
r - inclusive range between left (X) and right (X) (implicit cast to integer of inputs)
  -  = [int(X):int(X)] = [int(X)]       [-7]
  - implicit (smashing) print            -7

40

Python 3,3个字节

int

在线尝试!

截断小数点后的数字。

注意:这是一个简单的答案。请先查看其他答案,然后再投票


18
这表明了Python 3比Python 2更受欢迎

1
嗯...为什么要投票?这是一个非常琐碎的答案……
MilkyWay90

我认为这是您对代码的出色解释。:)
Chas Brown

3
@ChasBrown我不这么认为...解释甚至不是标准的口径解释。
MilkyWay90

我猜@Chas指出,解释比他自己的解释更加完整。
prl


12

Perl 5,2 -p056l15个字节

<>

在线尝试!

这是如何运作的?

-056   # (CLI) Make "." the input record separator
-l15   # (CLI) Make "\n" the output record separator
       # (otherwise it would use the input separator)
-p     # (CLI) Implicitly read $_ from STDIN
<>     # Read the second input field and do nothing with it
-p     # (CLI) Output $_ to STDOUT

或者,如果您更喜欢传统的答案:

Perl 5、6个字节

$_=int

在线尝试!


l15不是\n,是\r\n将是l12。不过,它在TIO中看起来相同。
Grimmy19年

对于第二种选择,还有-Minteger -p $_/=1
Nahuel Fouilleul

4
第一个解决方案实际上是8个字节,因为你需要在你的字节数的标志
约翰·德沃夏克

2
@JohnDvorak实际上是根据meta postcodegolf.meta.stackexchange.com/questions/14337/…发出的,标志不会添加字节,但会作为该语言的不同版本。
肯尼迪 Nick Kennedy),

@NahuelFouilleul我也想到了那个,但是没关系,因为我换了2个字节。
Xcali

6

迷宫六角形,3个字节

感谢FryAmTheEggman指出我写了一些六角形!

?!@

在线尝试!在线尝试!

怎么样?

迷宫和六角形都将尽早告诉您!

? - read and discard from STDIN until a digit, a - or a + is found. Then read as many characters as possible to form a valid (signed) decimal integer and push its value
! - pop a value and write its decimal representation to STDOUT
@ - exit the labyrinth

3
Martin的其他一些语言可能确实如此,但是完全相同的程序在Hexagony有效
FryAmTheEggman

3
嘿,我一直想用六角形回答。不做尝试是我认为可能会发生的最后一件事!
乔纳森·艾伦,

IO@在反手中的工作方式与&.@在Befunge中相同。可能很多的整数输入语言,只有整数处理将是相同的
乔金

@JoKing因此,我们正在等待有人找出一种具有整数I / O的语言,并且还将所有数字从stdin读取到堆栈/列表,然后默认将它们打印到stdout。我相信可能会有一个,并且答案会是零字节。
tsh

@tsh最有可能!
乔纳森·艾伦,

6

笨蛋,26字节

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

在线尝试!

.如果数字是小数,则输出结尾

特殊的打高尔夫球方式并不多,除了我不减去46以检查角色是否为a .,我加5并乘以5得到255,然后再加一个来翻零。减3,乘以6并减去2就是相同的字节数


6

C(tcc), 39 21 10字节

实际上,我很惊讶没有人想到使用C。

f(float i){}

这似乎不是身份功能。f函数的隐式int类型将截断浮点。

蒂奥

欺骗人的可能性较小,但字节长度较短:

f(int i){}

蒂奥


请勿float使用,因为这将不同的寄存器用于浮点值的输入。
Hauleth



3

Java(OpenJDK 8) 15字节 9字节

s->(int)s

在线尝试!

感谢@ kevin-cruijssen


通过使用接口lambda可以达到9个字节,因此我们可以使用基元和简单的强制转换为(int)。这里有一个有趣的15字节替代方法,使用方法参考。:)
Kevin Cruijssen

1
@KevinCruijssen感谢您指出9个字节的答案!15bytes替代解决方案非常出色!也是您答案的忠实支持者!我也受到鼓舞,也为您的贡献而加入了社区:D
Margon

很高兴我能提供帮助,很高兴听到我的启发。:D欢迎您!哦,而且,如果您还没有看到它们,Java高尔夫技巧<all language>高尔夫技巧都可能有兴趣阅读。入住愉快!:)
Kevin Cruijssen

谢谢!:)我已经阅读了所有技巧,并在发帖之前潜入了很多东西!希望我将来能回答更多!
Margon

3

Excel,10个字节

=TRUNC(A1)

TRUNC 通过删除数字的小数部分,将数字截断为整数。




2

红宝石,11字节

proc &:to_i

我之所以选择它,是因为它与我们的Ruby高尔夫球手通常使用的lambda有所不同(令人遗憾的是,它具有与“传统”解决方案相同的字节数):

->n{n.to_i}

在线尝试!


2

ReRegex,12个字节

\..+//#input

在线尝试!

ReRegex是一种编程语言,可以反复匹配并替换,直到没有匹配为止。

MATCH
    \.                                      The literal period/full stop char
    .+                                      Followed by one or more characters
REPLACE
    (nothing)                               Equivalent to removing the input
STRING TO REPEATEDLY MATCH/REPLACE UNTIL THERE ARE NO MATCHES
    #input                                  The input



2

英特尔8087 FPU机器代码,14字节

D9 2E 010C      FLDCW CW_RNDZ   ; modified CW register for round towards zero
D9 06 010E      FLD  A          ; load single precision value A into ST(0)
DF 16 0112      FIST B          ; store integer value of ST(0) into B

CW_RNDZ   DW    0F7FH           ; control word to round down

输入是存储位置A(a DD)中的单精度值,输出是存储位置B(a中的整数值)DW)中的。

首先必须通过设置控制字将8087舍入为零模式(0F7FH)。然后加载浮点值并存储回整数。





2

19 17 13字节

这将输出一些结尾的不可打印字符。同样,这会退出并出现错误。(现在我们需要反向输入!)

?'(:\.>')"([,


2

空格(使用vii5ard编译器),18 17字节

[S S N
_Push_0][S N
S _Duplicate_0][T   N
T   T   _Read_STDIN_as_integer][T   T   T   _Retrieve_input][T  N
S T _Print_as_integer]

字母S(空格),T(制表符)和N(换行符)仅作为突出显示而添加。
[..._some_action]仅作为说明添加。

在线尝试。您必须自己复制粘贴代码(请注意,SE会将制表符转换为一堆空格!),以便在在线Whitespace编译器vii5ard上运行代码。单击运行时,它将要求输入(即-285.5),单击输入后,它将继续输出-283

伪代码中的解释:

Integer i = STDIN as integer
Print i as integer

空格只能将I / O用作整数或单个字符,因此在这种情况下,它将以整数形式读取输入,而忽略其他任何尾随字符。即-283.5-283abc5都将作为输入(并因此输出)-283

不幸的是,由于两个原因,以上内容在TIO上不起作用(所有Whitespace编译器略有不同..):

  1. no parse当我们尝试将输入读取为整数(这不是有效的整数)时,将产生错误。因此,取而代之的是,我们一次读取一个字符,并在遇到.或没有更多输入(即50/ -50)后立即停止(出现错误)。
  2. 在vii5ard编译器中,也可以用just推0 SSN,而在TIO上则需要附加Sor TSSSN/ SSTN。第一个S启用堆栈操作 ; 第二个SPush,其后为整数 ; 第三S/ T分别为正/负;任何S/ T后(后面的N)是我们希望在二进制,其中推数S=0T=1。对于整数0,此二进制部分无关紧要,因为默认情况下为0。但是在TIO上,我们仍然必须指定正/负,而对于像vii5ard这样的大多数其他Whitespace编译器,则不需要。

空格(使用TIO编译器),48字节

[N
S S N
_Create_Label_LOOP][S S S N
_Push_0][S N
S _Duplicate_0][T   N
T   S _Read_STDIN_as_character][T   T   T   _Retrieve_input][S N
S _Duplicate_input][S S S T S T T   T   S N
_Push_46_.][T   S S T   _Subtract][N
T   S S N
_If_0_Jump_to_Label_EXIT][T N
S S _Print_as_character][N
S N
N
_Jump_to_Label_LOOP]

字母S(空格),T(制表符)和N(换行符)仅作为突出显示而添加。
[..._some_action]仅作为说明添加。

在线尝试(仅使用空格,制表符和换行符)。

伪代码中的解释:

Start LOOP:
  Character c = STDIN as character
  If(c == '.'):
    Exit program
  Print c as character
  Go to the next iteration of LOOP




1

05AB1E,1 个字节

ï

在旧版本(用Python编写)中,强制转换为整数内置将截断十进制值。

在线尝试。

在新版本的05AB1E(用Elixir编写)中,它仅适用于字符串(即使整数/小数/字符串都应该是可互换的,除非对字典法和数字法进行排序)。猜猜我可以向@Adnan报告错误。

在线尝试比较整数/十进制输入(给出错误的结果)与字符串输入(给出正确的结果)。


1
ï在非旧版05AB1E上可以正常工作。数组输入的工作方式很奇怪。
Grimmy

@Grimy啊,它是字符串vs整数/十进制。字符串工作正常,但整数/小数则无效。
凯文·克鲁伊森

1

Aheui(esotope),9个字节

방망희

在线尝试!

三角答案的基本思想(或任何其他语言都将数字输入作为整数)。

有趣的事实。방망희(发音bang-mang-heuiaark))听起来几乎相同방망이(发音bang-mang-iaarki声音等E),这意味着蝙蝠。

如何运作?

以数字为整数。

将值打印为数字。

终止程序。


1

Powershell,19个字节

$args-replace'\..*'

在线尝试!

默认情况下,PowerShell执行银行家的四舍五入,这与其他几种语言的四舍五入几乎是相反的。因此,传统上,我们将[Math]::Truncate()去除小数点和任何小数部分并实现我们感兴趣的“零”舍入。但是,这有点长,因此,使用此技巧,我们可以通过将输入隐式转换为字符串,执行正则表达式-replace以除去句点及其后的任何内容,并将输出保留在管道上,从而将舍入取整为零。隐式打印。


我认为这不会为负数提供理想的结果。
Octopus

@章鱼确定吗?它只是修整了小数部分,使数字从正浮点数或负浮点数都移到零。
AdmBorkBork

对吧 大声笑。
Octopus

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.