Arrotondare verso zero


14

Questo è un compito semplice. Dato un numero reale positivo o negativo, arrotondalo all'intero intero successivo più vicino a zero.

La sfida

  • Prendi input attraverso qualsiasi forma ragionevole (stdin, funzione, ecc.) Di un numero reale positivo o negativo.

  • Arrotonda questo numero "verso zero" - questo significa che se è positivo arrotonderai per difetto e se è negativo arrotonderai per eccesso.

  • Restituisce il numero o lo emette sulla console.

Casi test

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

Regole

Divertiti! più sfide Jimmy in arrivo


3
Posso uscire 3.00per 3.14?
TSH

1
@A_ Se i messaggi di errore sono in stderr. E i tuoi output sono in stdout. È consentito per impostazione predefinita.
TSH

1
Inoltre 0.01e -0.01dovrebbe cedere 0...
roblogic

2
Hmm, questo sembra irragionevolmente banale per un codice golf. La maggior parte dei lang avrà incorporato questo, no? Sembra che dobbiamo supporre che tutti gli input e output siano stringhe?
Polpo,

2
3.00 è certamente un numero intero. Più precisamente, nella notazione matematica standard e in molti linguaggi di programmazione, la notazione "3.00" indica il numero 3, che è un numero intero; ma in molti linguaggi di programmazione, indica che il numero deve essere memorizzato in un formato a virgola mobile. (Ma è un numero intero indipendentemente dal formato in cui è memorizzato.)
Tanner Swett,

Risposte:


13

Gelatina , 1 byte

r

Un programma completo (come Link monadico restituisce un elenco di lunghezza uno).

Provalo online!

Come?

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 byte

int

Provalo online!

Tronca le cifre dopo il punto decimale.

NOTA: questa è una risposta banale. Si prega di dare un'occhiata alle altre risposte prima di votare


18
Ciò dimostra che Python 3 è più popolare di Python 2.
a'_ '23

1
Err ... Perché i voti positivi? Questa è una risposta piuttosto banale ...
MilkyWay90

Penso che sia la tua eccellente spiegazione del codice. :)
Chas Brown,

3
@ChasBrown Non credo ... la spiegazione non è nemmeno una spiegazione di calibro standard.
MilkyWay90,

Immagino che @Chas stia sottolineando che la spiegazione è infinitamente più completa della sua.
prl


12

Perl 5 -p056l15 , 2 byte

<>

Provalo online!

Come funziona?

-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 se preferisci una risposta più tradizionale:

Perl 5 , 6 byte

$_=int

Provalo online!


15 non lo è \n, lo è \r. \nsarebbe l12. Sembra lo stesso in TIO, però.
Grimmy,

per la seconda opzione, c'è anche-Minteger -p $_/=1
Nahuel Fouilleul,

4
La prima soluzione è in realtà 8 byte perché è necessario includere i flag nel conteggio dei byte
John Dvorak,

2
@JohnDvorak in realtà secondo il meta post codegolf.meta.stackexchange.com/questions/14337/… , i flag non aggiungono byte ma contano come una versione diversa della lingua.
Nick Kennedy,

@NahuelFouilleul Ci ho pensato anche io, ma non importava da quando sono arrivato a 2 byte nell'altro modo.
Xcali,

6

Labyrinth & Hexagony , 3 byte

Grazie a FryAmTheEggman per aver sottolineato che avevo scritto un po 'di esagonia!

?!@

Provalo online! E provalo online!

Come?

Labyrinth ed Hexagony ti diranno entrambi il prima possibile! ...

? - 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
Questo può essere vero per alcune delle altre lingue di Martin, ma lo stesso programma esatto funziona in Hexagony .
FryAmTheEggman,

3
Heh, ho sempre voluto dare una risposta in Hexagony. Farlo senza provare è stata l'ultima cosa che pensavo potesse succedere!
Jonathan Allan il

IO@in Backhand funziona allo stesso modo, e &.@in Befunge. Probabilmente molte lingue con input di numeri interi e solo la gestione dei numeri interi sarà la stessa
Jo King

@JoKing Quindi stiamo aspettando che qualcuno trovi una lingua con I / O interi e legga anche tutti i numeri da stdin a stack / list e li stampi su stdout per impostazione predefinita. Credo che potrebbe essercene uno, e sarebbe una risposta in zero byte.
TSH

@tsh molto probabilmente!
Jonathan Allan,

6

Brainfuck , 26 byte

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

Provalo online!

Emette con un finale .se il numero era un decimale

Non c'è molto da specifico per giocare a golf, tranne che invece di sottrarre 46 per verificare se un personaggio è un ., aggiungo 5 e moltiplico per 5 per ottenere 255, quindi ne aggiungo uno in più per passare a zero. Sottraendo 3, moltiplicando per 6 e sottraendo 2 si ottiene lo stesso importo


6

C (tcc), 39 21 10 byte

In realtà ero abbastanza sorpreso che nessuno pensasse di usare C.

f(float i){}

Questa non è una funzione identitaria come sembra. Il tipo int implicito della funzione f tronca il virgola mobile.

TIO

Meno probabilità di ingannare le persone ma ha una lunghezza di byte più breve:

f(int i){}

TIO


Non lavorare floatpoiché utilizza un registro diverso per l'immissione di valori in virgola mobile.
Hauleth



3

Java (OpenJDK 8) , 15 byte 9 byte

s->(int)s

Provalo online!

grazie a @ kevin-cruijssen


9 byte usando un'interfaccia lambda in modo da poter usare le primitive e un semplice cast per (int). E qui una divertente alternativa di 15 byte usando un riferimento al metodo. :)
Kevin Cruijssen,

1
@KevinCruijssen grazie per aver sottolineato la risposta a 9 byte! E le soluzioni alternative a 15 byte sono eccezionali! Anche grande fan delle tue risposte! Mi sono ispirato ad unirmi alla comunità anche per i tuoi contributi: D
Margon,

Sono contento di aver potuto aiutare, e divertente sapere che sono una fonte d'ispirazione. : D Benvenuto! Oh, e se non li hai ancora visti, i suggerimenti per giocare a golf in Java e quelli per giocare a golf in <tutte le lingue> potrebbero essere entrambi interessati a leggere. Goditi la permanenza! :)
Kevin Cruijssen,

Grazie! :) Ho già letto tutti i suggerimenti e in realtà mi sono nascosto molto prima di pubblicare! Spero di poter rispondere di più in futuro!
Margon,

3

Excel, 10 byte

=TRUNC(A1)

TRUNC tronca un numero a un numero intero rimuovendo la parte frazionaria del numero.




2

Rubino , 11 byte

proc &:to_i

Ho scelto questo perché si distingue dagli lambda che usiamo di solito i golfisti di Ruby (per fortuna, aveva lo stesso numero di abbonati della soluzione "tradizionale"):

->n{n.to_i}

Provalo online!


2

ReRegex , 12 byte

\..+//#input

Provalo online!

ReRegex è un linguaggio di programmazione che corrisponde e sostituisce ripetutamente fino a quando non ci sono corrispondenze.

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

Codice macchina Intel 8087 FPU, 14 byte

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

L'input è un singolo valore di precisione in una posizione di memoria A(a DD), l'output è un valore intero nella posizione di memoria B(aDW ).

L'8087 deve prima essere messo in tondo verso la modalità zero impostando la parola di controllo ( 0F7FH). Quindi caricare il valore in virgola mobile e archiviarlo in un numero intero.






2

Spazio bianco (con compilatore vii5ard ), 18 17 byte

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

Lettere S(spazio), T(scheda) e N(nuova riga) aggiunti solo come evidenziazione.
[..._some_action]aggiunto solo come spiegazione.

Provalo online. Dovrai copiare e incollare tu stesso il codice (nota che SE converte le schede in un mucchio di spazi!) Per eseguire il codice sul vii5ard del compilatore di spazi bianchi online. Quando si fa clic su Esegui, verrà richiesto un input (ad es. -285.5), E dopo aver fatto clic su Enter continuerà e verrà emesso -283.

Spiegazione in pseudo-codice:

Integer i = STDIN as integer
Print i as integer

Gli spazi bianchi possono usare l'I / O solo come numeri interi o caratteri singoli, quindi in questo caso leggono l'input come numero intero e ignorano qualsiasi altro carattere finale. Cioè -283.5o -283abc5sarebbero entrambi input (e quindi output) come -283.

Sfortunatamente questo sopra non funziona su TIO per due motivi (tutti i compilatori di Whitespace sono leggermente diversi ..):

  1. Dà un no parseerrore quando proviamo a leggere un input come intero, che non è un numero intero valido. Quindi, invece, leggeremo un carattere alla volta e ci fermeremo (con un errore) non appena avremo riscontrato l' .input o non ci sarà più input (cioè 50/ -50).
  2. Nel compilatore vii5ard è anche possibile premere 0 con just SSN, mentre su TIO richiede un ulteriore So T: SSSN/ SSTN. Il primo Sè Abilita manipolazione stack ; il secondo Sè Push ciò che segue come intero ; il terzo S/ Tè rispettivamente positivo / negativo; e any S/ Tafter that (seguito da un N) è il numero che vogliamo inserire in binario, dove S=0e T=1. Per l'intero 0 questa parte binaria non ha importanza, poiché è 0 per impostazione predefinita. Ma su TIO dovremmo ancora specificare il positivo / negativo, e con la maggior parte degli altri compilatori di Whitespace come vii5ard no.

Spazio bianco (con compilatore TIO ), 48 byte

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

Lettere S(spazio), T(scheda) e N(nuova riga) aggiunti solo come evidenziazione.
[..._some_action]aggiunto solo come spiegazione.

Provalo online (solo con spazi non elaborati, schede e nuove righe).

Spiegazione in pseudo-codice:

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

ï

Nella versione legacy (che è scritta in Python), il cast in integer incorporato funziona come previsto per troncare i valori decimali.

Provalo online.

Nella nuova versione di 05AB1E (scritta in Elisir) funziona solo su stringhe (anche se numeri interi / decimali / stringhe dovrebbero essere tutti intercambiabili, a meno che non si disponga l'ordinamento lessicografico vs numerico, ad esempio). Immagino di poter segnalare un bug a @Adnan ..

Provalo online per confrontare l'input intero / decimale (fornendo risultati errati) rispetto agli input di stringa (fornendo risultati corretti).


1
ïfunziona perfettamente su 05AB1E non legacy . È l'input di array che funziona in modo strano.
Grimmy,


1

Aheui (esotopo) , 9 byte

방망희

Provalo online!

Un'idea di base da quella della risposta triangolare (o qualsiasi altra lingua accetta input numerici come numeri interi).

Fatto divertente. 방망희(pronunciato bang-mang-heui( adi ark)) suona quasi come su 방망이(pronunciato bang-mang-i( adi ark, isuona come E), il che significa pipistrello.

Come funziona?

accetta il numero come intero.

stampa il valore come numero.

termina il programma.


1

PowerShell , 19 byte

$args-replace'\..*'

Provalo online!

PowerShell per impostazione predefinita esegue l'arrotondamento dei banchieri , che è praticamente l'opposto di quante altre lingue eseguono l'arrotondamento. Quindi, tradizionalmente useremmo [Math]::Truncate()per eliminare il punto decimale e qualsiasi parte decimale e ottenere l'arrotondamento "a zero" a cui siamo interessati qui. Tuttavia, è un po 'lungo, quindi usando questo suggerimento , possiamo arrotondare verso zero lanciando implicitamente l'input su una stringa, eseguendo una regex -replaceper sbarazzarsi del periodo e di qualsiasi cosa dopo di esso, e lasciando l'output sulla pipeline per stampa implicita.


Non penso che ciò darebbe il risultato desiderato per i numeri negativi.
Polpo,

@Octopus Sicuro? Si limita a tagliare la parte decimale, che sposta il numero verso zero sia da float positivi che negativi.
AdmBorkBork,

Giusto, duh. Lol.
Polpo,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.