Arredondar para zero


14

Esta é uma tarefa simples. Dado um número real positivo ou negativo, arredonde-o para o próximo inteiro inteiro mais próximo de zero.

O desafio

  • Receba informações através de qualquer forma razoável (stdin, função etc.) de um número real positivo ou negativo.

  • Arredonde esse número "para zero" - isso significa que, se for positivo, você arredondará para baixo e, se for negativo, arredondará para cima.

  • Retorne o número ou envie-o para o console.

Casos de teste

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

Regras

Diverta-se! mais desafios de Jimmy em breve


3
Posso saída 3.00para 3.14?
tsh

1
@A_ Se houver mensagens de erro no stderr. E sua saída está em stdout. É permitido por padrão.
tsh

1
Também 0.01e -0.01deve render0 ...
roblogic

2
Hmm, isso parece irracionalmente trivial para um código de golfe. A maioria dos idiomas tem uma base para isso, não? Parece que devemos assumir que todas as entradas e saídas são seqüências de caracteres?
Polvo

2
3,00 certamente é um número inteiro. Mais precisamente, na notação matemática padrão, bem como em muitas linguagens de programação, a notação "3,00" indica o número 3, que é um número inteiro; mas em muitas linguagens de programação, indica que o número deve ser armazenado em um formato de ponto flutuante. (Mas é um número inteiro, independentemente do formato em que estiver armazenado.)
Tanner Swett

Respostas:


13

Geléia , 1 byte

r

Um programa completo (como um link monádico, ele retorna uma lista de comprimento um).

Experimente online!

Quão?

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 bytes

int

Experimente online!

Trunca os dígitos após o ponto decimal.

NOTA: Esta é uma resposta trivial. Por favor, dê uma olhada nas outras respostas antes da votação


18
Isso demonstra que o Python 3 é mais popular que o Python 2.
a'_ '23

1
Err ... Por que os votos positivos? Esta é uma resposta bastante trivial ...
MilkyWay90

Eu acho que é a sua excelente explicação do código. :)
Chas Brown

3
@ChasBrown Acho que não ... a explicação não é nem uma explicação de calibre padrão.
precisa

Acho que @Chas está apontando que a explicação é infinitamente mais completa que a dele.
prl


12

Perl 5 -p056l15 , 2 bytes

<>

Experimente online!

Como isso funciona?

-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

Ou se você preferir uma resposta mais tradicional:

Perl 5 , 6 bytes

$_=int

Experimente online!


15 não é \n, é \r. \nseria 12. Parece o mesmo no TIO, no entanto.
Grimmy

para a segunda opção, há também-Minteger -p $_/=1
Nahuel Fouilleul 23/08/19

4
A primeira solução é realmente 8 bytes, porque você precisa incluir as bandeiras em sua contagem de bytes
John Dvorak

2
@JohnDvorak, na verdade, no meta post codegolf.meta.stackexchange.com/questions/14337/… , sinalizadores não adicionam bytes, mas contam como uma versão diferente do idioma.
Nick Kennedy

@NahuelFouilleul Também pensei nisso, mas isso não importava, já que tinha 2 bytes no sentido contrário.
Xcali

6

Labirinto e Hexagonia , 3 bytes

Obrigado a FryAmTheEggman por apontar que eu escrevi um pouco de Hexagony!

?!@

Experimente online! & Experimente online!

Quão?

Labirinto e Hexagonia dirão o mais cedo possível! ...

? - 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
Isso pode ser verdade em algumas das outras línguas de Martin, mas o mesmo programa funciona exatamente no Hexagony .
FryAmTheEggman

3
Eu sempre quis dar uma resposta em Hexagony. Fazer isso sem tentar foi a última coisa que pensei que poderia acontecer!
Jonathan Allan

IO@no Backhand funciona da mesma maneira e &.@no Befunge. Provavelmente um monte de línguas com entrada inteiro, e somente inteiro manuseio será o mesmo
Jo rei

@JoKing Então, estamos aguardando alguém descobrir um idioma com E / S inteiros e também ler todos os números de stdin para empilhar / lista e depois imprimi-los para stdout por padrão. Eu acredito que poderia haver um, e seria uma resposta em zero bytes.
tsh

@tsh provavelmente!
Jonathan Allan

6

brainfuck , 26 bytes

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

Experimente online!

Saídas à direita .se o número for decimal

Não há muito golfe específico, exceto que, em vez de subtrair 46 para verificar se um personagem é a ., eu adiciono 5 e multiplico por 5 para obter 255, depois adiciono mais um para rolar para zero. Subtrair 3, multiplicar por 6 e subtrair 2 é o mesmo por contar


6

C (tcc), 39. 21 10 bytes

Fiquei realmente surpreso que ninguém pensou em usar C.

f(float i){}

Esta não é uma função de identidade como parece ser. O tipo implícito int da função f trunca o ponto flutuante.

TIO

Menos provável de enganar as pessoas, mas tem um comprimento de bytes mais curto:

f(int i){}

TIO


Não trabalhe, floatpois ele usa um registro diferente para inserir valores de ponto flutuante.
Hauleth 04/04/19



3

Java (OpenJDK 8) , 15 bytes 9 bytes

s->(int)s

Experimente online!

graças a @ kevin-cruijssen


9 bytes usando uma interface lambda, para que possamos usar primitivas e uma conversão simples para (int). E aqui uma alternativa divertida de 15 bytes usando uma referência de método. :)
Kevin Cruijssen 23/08/19

1
@KevinCruijssen obrigado por apontar a resposta de 9 bytes! E as soluções alternativas de 15 bytes são brilhantes! Também grande fã de suas respostas! Fui inspirado a participar da comunidade também por suas contribuições: D
Margon

Ainda bem que pude ajudar, e divertido ouvir que sou uma inspiração. : D Bem-vindo! Ah, e se você ainda não os viu, dicas para jogar golfe em Java e dicas para jogar em <todos os idiomas> podem ser interessantes para ler. Aproveite sua estadia! :)
Kevin Cruijssen 23/08/19

Obrigado! :) Eu já li todas as dicas e espreitei bastante antes de postar! Espero que eu possa responder mais no futuro!
Margon

3

Excel, 10 bytes

=TRUNC(A1)

TRUNC trunca um número para um número inteiro removendo a parte fracionária do número.




2

Ruby , 11 bytes

proc &:to_i

Eu escolhi essa porque se distingue das lambdas que os jogadores de Ruby normalmente usam (felizmente, tinha o mesmo número de bytes que a solução "tradicional"):

->n{n.to_i}

Experimente online!


2

ReRegex , 12 bytes

\..+//#input

Experimente online!

ReRegex é uma linguagem de programação que corresponde e substitui repetidamente até que não haja correspondências.

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

Código da máquina FPU Intel 8087, 14 bytes

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 entrada é um valor único de precisão em um local de memória A(a DD), a saída é um valor inteiro no local de memória B(a DW).

O 8087 deve primeiro ser colocado no modo zero, definindo a palavra de controle ( 0F7FH). Em seguida, carregue o valor do ponto flutuante e armazene de volta em um número inteiro.






2

Espaço em branco (com compilador vii5ard ), 18 17 bytes

[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]

Letras S(espaço), T(guia) e N(nova linha) adicionadas apenas como destaque.
[..._some_action]adicionado apenas como explicação.

Experimente online. Você precisará copiar e colar o código sozinho (observe que o SE converte as guias em vários espaços!) Para executar o código no vii5ard do Whitespace-compilador on-line. Ao clicar em executar, ele solicitará uma entrada (ou seja -285.5) e, após clicar em entrar, continuará e emitirá -283.

Explicação em pseudo-código:

Integer i = STDIN as integer
Print i as integer

O espaço em branco só pode usar E / S como números inteiros ou caracteres únicos; portanto, nesse caso, ele leria a entrada como número inteiro e ignoraria quaisquer outros caracteres finais. -283.5Ou seja, ou -283abc5ambos seriam inseridos (e, portanto, gerados) como -283.

Infelizmente, isso acima não funciona no TIO por dois motivos (todos os compiladores do Whitespace são um pouco diferentes ..):

  1. Isso causará um no parseerro quando tentarmos ler uma entrada como número inteiro, que não é um número inteiro válido. Então, em vez disso, leremos um caractere de cada vez e pararemos (com um erro) assim que encontrarmos a .ou não houver mais entrada (por exemplo, 50/-50 ).
  2. No compilador vii5ard também é possível pressionar 0 com apenas SSN, enquanto no TIO ele requer um adicional Sou T: SSSN/ SSTN. O primeiro Sé Habilitar manipulação de pilha ; o segundo Sé Empurre o que segue como inteiro ; o terceiro S/ Té positivo / negativo, respectivamente; e qualquer S/ Tdepois disso (seguido de um N) é o número que queremos inserir no binário, onde S=0e T=1. Para o número 0, essa parte binária não importa, pois é 0 por padrão. Mas no TIO ainda teríamos que especificar o positivo / negativo e, com a maioria dos outros compiladores do Whitespace, como o vii5ard, não.

Espaço em branco (com compilador TIO ), 48 bytes

[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]

Letras S(espaço), T(guia) e N(nova linha) adicionadas apenas como destaque.
[..._some_action]adicionado apenas como explicação.

Experimente online (apenas com espaços brutos, guias e novas linhas).

Explicação em pseudo-código:

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 byte

ï

Na versão herdada (escrita em Python), a conversão para o número inteiro interno funciona conforme o esperado para truncar os valores decimais.

Experimente online.

Na nova versão do 05AB1E (escrita em Elixir), ela funciona apenas em strings (mesmo que números inteiros / decimais / strings devam ser intercambiáveis, a menos que seja possível classificar lexicográfico x numérico, por exemplo). Acho que posso relatar um erro para @Adnan ..

Experimente on-line para comparar entradas inteiras / decimais (fornecendo resultado incorreto) versus entradas de string (fornecendo resultados corretos).


1
ïfunciona bem no 05AB1E não herdado . É entrada de matriz que funciona de uma maneira estranha.
Grimmy


1

Aheui (esótopo) , 9 bytes

방망희

Experimente online!

A idéia básica da resposta triangular (ou qualquer outro idioma aceita a entrada numérica como número inteiro).

Fato engraçado. 방망희(pronunciado bang-mang-heui( ade ark)) soa quase o mesmo que 방망이(pronunciado bang-mang-i( ade ark, isoa como E)), que significa morcego.

Como isso funciona?

toma o número como inteiro.

imprime valor como número.

finaliza o programa.


1

PowerShell , 19 bytes

$args-replace'\..*'

Experimente online!

O PowerShell, por padrão, faz o arredondamento dos banqueiros , que é praticamente o oposto de quantos outros idiomas fazem o arredondamento. Portanto, tradicionalmente usamos o [Math]::Truncate()strip decimal e qualquer parte decimal e atingimos o arredondamento "para zero" em que estamos interessados ​​aqui. No entanto, isso é um pouco longo, portanto, usando essa dica , podemos arredondar para zero, lançando implicitamente a entrada em uma sequência de caracteres, executando um regex -replacepara se livrar do período e de qualquer coisa após ele e deixando a saída no pipeline para impressão implícita.


Eu não acho que isso daria o resultado desejado para números negativos.
Oct

@ Octopus Com certeza? Apenas apara a parte decimal, que move o número em direção a zero, seja de flutuações positivas ou negativas.
AdmBorkBork 23/08/19

Certo, duh. Ri muito.
Oct

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.