Redondear hacia cero

14

Esta es una tarea simple. Dado un número real positivo o negativo, redondea al siguiente entero entero más cercano a cero.

El reto

  • Tome información a través de cualquier forma razonable (stdin, función, etc.) de un número real positivo o negativo.

  • Redondee este número "hacia cero"; esto significa que si es positivo, redondeará hacia abajo y, si es negativo, redondeará hacia arriba.

  • Devuelva el número o envíelo a la consola.

Casos de prueba

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

Reglas

¡Que te diviertas! más desafíos de Jimmy próximamente

conecta tu cargador
fuente
3
¿Puedo dar salida 3.00para 3.14?
tsh
1
@A_ Si los mensajes de error están en stderr. Y su salida está en stdout. Está permitido por defecto.
tsh
1
También 0.01y -0.01debería ceder 0...
roblogic
2
Hmm, esto parece irracionalmente trivial para un código de golf. La mayoría de los langs tendrán algo incorporado para esto, ¿no? ¿Parece que debemos asumir que todas las entradas y salidas son cadenas?
Pulpo
2
3.00 ciertamente es un número entero. Más precisamente, en la notación matemática estándar, así como en muchos lenguajes de programación, la notación "3.00" denota el número 3, que es un número entero; pero en muchos lenguajes de programación, indica que el número se debe almacenar en un formato de punto flotante. (Pero es un número entero independientemente del formato en el que esté almacenado).
Tanner Swett

Respuestas:

13

Jalea , 1 byte

r

Un programa completo (como un enlace monádico devuelve una lista de longitud uno).

Pruébalo en línea!

¿Cómo?

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
Jonathan Allan
fuente
40

Python 3 , 3 bytes

int

Pruébalo en línea!

Trunca los dígitos después del punto decimal.

NOTA: Esta es una respuesta trivial. Por favor, eche un vistazo a las otras respuestas antes de votar

MilkyWay90
fuente
18
Esto demuestra que Python 3 es más popular que Python 2.
a'_ '23 de
1
Err ... ¿Por qué los votos a favor? Esta es una respuesta bastante trivial ...
MilkyWay90
Creo que es tu excelente explicación del código. :)
Chas Brown el
3
@ChasBrown No lo creo ... la explicación ni siquiera es una explicación de calibre estándar.
MilkyWay90
Supongo que @Chas está señalando que la explicación es infinitamente más completa que la suya.
prl
21

Python 2 , 3 bytes

int

Pruébalo en línea!

Chas Brown
fuente
2
Lo siento, pero te ninja ( codegolf.stackexchange.com/a/190673/83048 )
MilkyWay90
2
Arg! Pero estás usando Python 3 ... :)
Chas Brown
Es cierto, la gente debería saber que también funciona en Python 2
MilkyWay90
Desafortunadamente, te engañaste por aproximadamente un minuto :(
connectyourcharger
3
Me robaron! :)
Chas Brown
12

Perl 5 -p056l15 , 2 bytes

<>

Pruébalo en línea!

¿Cómo 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

O si prefiere una respuesta más tradicional:

Perl 5 , 6 bytes

$_=int

Pruébalo en línea!

Xcali
fuente
l15 no es \n, es \r. \nsería l12. Sin embargo, se ve igual en TIO.
Grimmy el
para la segunda opción, también hay-Minteger -p $_/=1
Nahuel Fouilleul
44
La primera solución es en realidad 8 bytes porque necesita incluir las banderas en su conteo de bytes
John Dvorak
2
@JohnDvorak en realidad según la meta publicación codegolf.meta.stackexchange.com/questions/14337/… , las banderas no agregan bytes sino que cuentan como una versión diferente del idioma.
Nick Kennedy el
@NahuelFouilleul También pensé en eso, pero no importó ya que llegué a 2 bytes en la otra dirección.
Xcali el
6

Laberinto y Hexagonía , 3 bytes

¡Gracias a FryAmTheEggman por señalar que había escrito algo de Hexagony!

?!@

Pruébalo en línea! ¡Y pruébalo en línea!

¿Cómo?

¡Labyrinth y Hexagony te contarán lo antes posible! ...

? - 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
Jonathan Allan
fuente
3
Esto puede ser cierto para algunos de los otros idiomas de Martin, pero el mismo programa funciona exactamente en Hexagony .
FryAmTheEggman
3
Heh, siempre quise responder en Hexagony. ¡Hacerlo sin intentar fue lo último que pensé que podría pasar!
Jonathan Allan el
IO@en Backhand funciona de la misma manera, y &.@en Befunge. Probablemente muchos idiomas con entrada de enteros, y solo el manejo de enteros será el mismo
Jo King
@JoKing Así que estamos esperando que alguien descubra un idioma con E / S entera y también lea todos los números desde stdin para apilar / lista y luego imprimirlos en stdout por defecto. Creo que podría haber uno, y sería una respuesta en cero bytes.
tsh
@tsh muy probablemente!
Jonathan Allan
6

brainfuck , 26 bytes

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

Pruébalo en línea!

Salidas con un final .si el número era decimal

No hay mucho golf en cuanto a golf, excepto que en lugar de restar 46 para verificar si un personaje es un ., agrego 5 y multiplico por 5 para obtener 255, luego agrego uno más para rodar a cero. Restar 3, multiplicar por 6 y restar 2 es el mismo bytecount

Jo King
fuente
6

C (tcc) 39 21 10 bytes

De hecho, me sorprendió que nadie pensara en usar C.

f(float i){}

Esta no es una función de identidad como parece ser. El tipo int implícito de la función f trunca el punto flotante.

TIO

Es menos probable que engañe a las personas pero tiene una longitud de byte más corta:

f(int i){}

TIO

un'_'
fuente
No trabaje floatya que esto usa un registro diferente para la entrada de valores de coma flotante.
Hauleth
3

Java (OpenJDK 8) , 15 bytes 9 bytes

s->(int)s

Pruébalo en línea!

gracias a @ kevin-cruijssen

Margon
fuente
9 bytes mediante el uso de una interfaz lambda para que podamos usar primitivas y una conversión simple a (int). Y aquí una alternativa divertida de 15 bytes usando una referencia de método. :)
Kevin Cruijssen
1
@KevinCruijssen gracias por señalar la respuesta de 9 bytes. ¡Y las soluciones alternativas de 15bytes son brillantes! También gran fan de tus respuestas! Me inspiré para unirme a la comunidad también por sus contribuciones: D
Margon
Me alegro de poder ayudar, y es divertido escuchar que soy una inspiración. : D ¡Bienvenido! Ah, y si aún no los ha visto, los consejos para jugar golf en Java y los consejos para jugar golf en <todos los idiomas> podrían estar interesados ​​en leerlos. ¡Disfruta tu estancia! :)
Kevin Cruijssen
¡Gracias! :) ¡Ya leí todos los consejos y aceché mucho antes de publicar! ¡Espero poder responder más en el futuro!
Margon el
3

Excel, 10 bytes

=TRUNC(A1)

TRUNC trunca un número a un entero eliminando la parte fraccionaria del número.

Wernisch
fuente
3

R , 13 5 bytes

Gracias Robin Ryder

trunc

Pruébalo en línea!

Robert S.
fuente
2
Existe consenso en que es aceptable responder con una función o un programa completo. Aquí, la forma de la función es de solo 5 bytes .
Robin Ryder
2

Ruby , 11 bytes

proc &:to_i

Elegí este porque se distingue de las lambdas que usualmente utilizamos los golfistas de Ruby (afortunadamente, tenía el mismo bytecount que la solución "tradicional"):

->n{n.to_i}

Pruébalo en línea!

Tinta de valor
fuente
2

ReRegex , 12 bytes

\..+//#input

Pruébalo en línea!

ReRegex es un lenguaje de programación que coincide y reemplaza una y otra vez hasta que no haya coincidencias.

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
MilkyWay90
fuente
2

Código de máquina Intel 8087 FPU, 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

La entrada es un valor de precisión único en una ubicación de memoria A(a DD), la salida es un valor entero en la ubicación de memoria B(a DW).

El 8087 primero debe ponerse en modo redondo hacia cero configurando la palabra de control ( 0F7FH). Luego cargue el valor de coma flotante y almacénelo de nuevo a un entero.

640 KB
fuente
2

Barrilete ,19 17 13 bytes

Esto genera algunos caracteres no imprimibles finales. Además, esto sale con un error. (¡Ahora necesitamos una entrada invertida!)

?'(:\.>')"([,
un'_'
fuente
Salir con un error está permitido por defecto
EdgyNerd
2

Los espacios en blanco (con 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]

Se agregaron letras S(espacio), T(tabulación) y N(nueva línea) solo como resaltado.
[..._some_action]agregado solo como explicación.

Pruébalo en línea. Tendrá que copiar y pegar el código usted mismo (¡tenga en cuenta que SE convierte las pestañas en un montón de espacios!) Para ejecutar el código en el compilador de espacios en línea vii5ard. Al hacer clic en Ejecutar, solicitará una entrada (es decir -285.5), y después de hacer clic en Intro continuará y saldrá-283 .

Explicación en pseudocódigo:

Integer i = STDIN as integer
Print i as integer

Los espacios en blanco solo pueden usar E / S como números enteros o caracteres individuales, por lo que en este caso leería la entrada como número entero e ignoraría cualquier otro carácter final. Es decir, -283.5o -283abc5ambos serían de entrada (y, por tanto, de salida) como -283.

Desafortunadamente, lo anterior no funciona en TIO por dos razones (todos los compiladores de Whitespace son ligeramente diferentes ...):

  1. Dará un no parseerror cuando intentemos leer una entrada como un entero, que no es un entero válido. Entonces, en su lugar, leeremos un carácter a la vez y nos detendremos (con un error) tan pronto como nos encontremos con el .o no haya más entradas (es decir, 50/ -50).
  2. En el compilador vii5ard también es posible presionar 0 con solo SSN, mientras que en TIO requiere un adicional So T: SSSN/ SSTN. El primero Ses Habilitar manipulación de pila ; el segundo Ses Empujar lo que sigue como entero ; el tercero S/ Tes positivo / negativo respectivamente; y any S/ Tafter that (seguido de an N) es el número que queremos ingresar en binario, donde S=0y T=1. Para el entero 0, esta parte binaria no importa, ya que es 0 por defecto. Pero en TIO todavía tendríamos que especificar lo positivo / negativo, y con la mayoría de los otros compiladores de espacios en blanco como vii5ard no.

Espacio en blanco (con 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]

Se agregaron letras S(espacio), T(tabulación) y N(nueva línea) solo como resaltado.
[..._some_action]agregado solo como explicación.

Pruébelo en línea (solo con espacios en bruto, pestañas y nuevas líneas).

Explicación en pseudocódigo:

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

05AB1E , 1 byte

ï

En la versión heredada (que está escrita en Python), la conversión integrada al entero funciona como se espera para truncar los valores decimales.

Pruébalo en línea.

En la nueva versión de 05AB1E (escrita en Elixir) solo funciona en cadenas (a pesar de que los enteros / decimales / cadenas deben ser intercambiables, a menos que se ordene lexicográficos versus numéricos, por ejemplo). Supongo que puedo informar un error a @Adnan ..

Pruébelo en línea para comparar entradas enteras / decimales (que dan un resultado incorrecto) frente a entradas de cadena (que dan resultados correctos).

Kevin Cruijssen
fuente
1
ïfunciona bien en 05AB1E no heredado . Es una entrada de matriz que funciona de una manera extraña.
Grimmy el
@Grimy Ah, es cadena vs entero / decimal. Las cadenas funcionan correctamente, pero los enteros / decimales no.
Kevin Cruijssen
1

Aheui (esótopo) , 9 bytes

방망희

Pruébalo en línea!

La idea básica de la respuesta triangular (o cualquier otro idioma toma la entrada numérica como un entero).

Hecho de la diversión. 방망희(pronunciado bang-mang-heui( ade ark)) suena casi igual que 방망이(pronunciado bang-mang-i( ade ark, isuena como E), lo que significa murciélago.

¿Cómo funciona?

toma el número como entero.

imprime el valor como número.

termina el programa

LegenDUST
fuente
1

PowerShell , 19 bytes

$args-replace'\..*'

Pruébalo en línea!

PowerShell por defecto realiza el redondeo de los banqueros , que es más o menos lo contrario de cuántos otros idiomas hacen el redondeo. Entonces, tradicionalmente usamos [Math]::Truncate()para quitar el punto decimal y cualquier parte decimal y lograr el redondeo "a cero" que nos interesa aquí. Sin embargo, eso es un poco largo, por lo que con este consejo , podemos redondear hacia cero lanzando implícitamente la entrada a una cadena, realizando una expresión regular -replacepara eliminar el período y cualquier cosa posterior, y dejando la salida en la tubería para impresión implícita

AdmBorkBork
fuente
No creo que esto dé el resultado deseado para números negativos.
Pulpo
@ Octopus ¿Seguro que sí? Simplemente recorta la parte decimal, lo que mueve el número hacia cero, ya sea de los flotadores positivos o negativos.
AdmBorkBork
De acuerdo, duh. Jajaja
Pulpo