Zaokrąglić w kierunku zera

14

To proste zadanie. Biorąc pod uwagę dodatnią lub ujemną liczbę rzeczywistą, zaokrąglij ją do następnej liczby całkowitej bliższej zera.

Wyzwanie

  • Przyjmij dane wejściowe za pomocą dowolnej rozsądnej formy (standardowa, funkcja itp.) Jednej dodatniej lub ujemnej liczby rzeczywistej.

  • Zaokrąglaj tę liczbę „w kierunku zera” - oznacza to, że jeśli jest dodatnia, zaokrąglisz w dół, a jeśli jest ujemna, zaokrąglisz w górę.

  • Zwróć numer lub wyślij go do konsoli.

Przypadki testowe

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

Zasady

Baw się dobrze! kolejne wyzwania Jimmy już wkrótce

podłącz ładowarkę
źródło
3
Czy mogę wysyłać dane 3.00dla 3.14?
tsh
1
@A_ Jeśli komunikaty o błędach są w stderr. A twoje wyjście jest na standardowym poziomie. Jest to dozwolone domyślnie.
tsh
1
Również 0.01i -0.01powinien dać 0...
roblogic
2
Hmm, wydaje się to nieracjonalnie trywialne dla golfa kodowego. Większość języków ma do tego wbudowane, nie? Wygląda na to, że mamy założyć, że wszystkie dane wejściowe i wyjściowe są łańcuchami?
Octopus
2
3,00 z pewnością jest liczbą całkowitą. Dokładniej, w standardowej notacji matematycznej, a także w wielu językach programowania, notacja „3.00” oznacza liczbę 3, która jest liczbą całkowitą; ale w wielu językach programowania wskazuje, że liczba ma być zapisana w formacie zmiennoprzecinkowym. (Ale jest to liczba całkowita niezależnie od formatu, w jakim jest przechowywana.)
Tanner Swett

Odpowiedzi:

13

Galaretka , 1 bajt

r

Pełny program (jako monadyczny link zwraca listę o długości jeden).

Wypróbuj online!

W jaki sposób?

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
źródło
40

Python 3 , 3 bajty

int

Wypróbuj online!

Obcina cyfry po przecinku.

UWAGA: To banalna odpowiedź. Proszę spojrzeć na inne odpowiedzi przed głosowaniem

MilkyWay90
źródło
18
To pokazuje, że Python 3 jest bardziej popularny niż Python 2.
1
Err ... Dlaczego głosy poparcia? To dość trywialna odpowiedź ...
MilkyWay90
Myślę, że to twoje doskonałe wyjaśnienie kodu. :)
Chas Brown,
3
@ChasBrown Nie sądzę ... wyjaśnienie nie jest nawet standardowym wyjaśnieniem kalibru.
MilkyWay90
Wydaje mi się, że @Chas wskazuje, że wyjaśnienie jest nieskończenie bardziej kompletne niż jego własne.
prl
21

Python 2 , 3 bajty

int

Wypróbuj online!

Chas Brown
źródło
2
Przepraszam, ale ja cię ninja ( codegolf.stackexchange.com/a/190673/83048 )
MilkyWay90
2
Arg! Ale używasz Python 3 ... :)
Chas Brown,
To prawda, że ​​ludzie powinni wiedzieć, że działa również w Pythonie 2
MilkyWay90
Niestety dostałeś oszołomienia o około minutę :(
connectyourcharger
3
Wuz okradłem! :)
Chas Brown
12

Perl 5 -p056l15 , 2 bajty

<>

Wypróbuj online!

Jak to działa?

-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

Lub jeśli wolisz bardziej tradycyjną odpowiedź:

Perl 5 , 6 bajtów

$_=int

Wypróbuj online!

Xcali
źródło
Nie 15 \n, to jest \r. \nbyłoby l12. Jednak w TIO wygląda tak samo.
Grimmy,
dla drugiej opcji jest też-Minteger -p $_/=1
Nahuel Fouilleul
4
Pierwsze rozwiązanie to w rzeczywistości 8 bajtów, ponieważ musisz uwzględnić flagi w liczbie bajtów
John Dvorak
2
@JohnDvorak faktycznie dla meta post codegolf.meta.stackexchange.com/questions/14337 /... flagi nie dodają bajtów, ale liczą się jako inna wersja języka.
Nick Kennedy
@NahuelFouilleul Też o tym myślałem, ale to nie miało znaczenia, ponieważ mam 2 bajty w drugą stronę.
Xcali,
6

Labirynt i sześciokąt , 3 bajty

Dzięki FryAmTheEggman za zwrócenie uwagi, że napisałem trochę Sześciokąta!

?!@

Wypróbuj online!I wypróbuj online!

W jaki sposób?

Labirynt i Sześciokąty powiedzą ci tak wcześnie, jak to możliwe! ...

? - 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
źródło
3
Może to dotyczyć niektórych innych języków Martina, ale dokładnie ten sam program działa w Hexagony .
FryAmTheEggman
3
Hej, zawsze chciałem udzielić odpowiedzi w Hexagony. Robienie tego bez prób było ostatnią rzeczą, o której myślałem, że może się zdarzyć!
Jonathan Allan
IO@w Backhand działa w ten sam sposób, a &.@w Befunge. Prawdopodobnie wiele języków z wprowadzaniem liczb całkowitych i tylko obsługa liczb całkowitych będzie taka sama
Jo King
@JoKing Czekamy więc na kogoś, kto znajdzie język z całkowitymi wejściami / wyjściami, a także przeczyta wszystkie liczby od standardowego wejścia do stosu / listy, a następnie wydrukuje je domyślnie na standardowe wyjście. Wierzę, że może być jeden i byłby to odpowiedź w zerowych bajtach.
tsh
@tsh najprawdopodobniej!
Jonathan Allan
6

pieprzenie mózgu , 26 bajtów

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

Wypróbuj online!

Wyprowadza znak końcowy, .jeśli liczba była dziesiętna

Nie ma zbyt wielu mądrych golfów, z wyjątkiem tego, że zamiast odejmować 46, aby sprawdzić, czy dana postać jest ., dodam 5 i mnożę przez 5, aby uzyskać 255, a następnie dodaj jeszcze jeden, aby przejść do zera. Odejmowanie 3, mnożenie przez 6 i odejmowanie 2 to ta sama liczba bajtów

Jo King
źródło
6

C (tcc), 39 21 10 bajtów

Byłem właściwie zaskoczony, że nikt nie pomyślał o użyciu C.

f(float i){}

To nie jest funkcja tożsamości, jak się wydaje. Niejawny typ int funkcji f obcina zmiennoprzecinkowy.

TIO

Mniejsze prawdopodobieństwo oszukiwania ludzi, ale ma krótszy bajt:

f(int i){}

TIO


źródło
Nie pracuj z, floatponieważ używa to innego rejestru do wprowadzania wartości zmiennoprzecinkowych.
Hauleth,
4

J , 6 bajtów

**<.@|

Wypróbuj online!

Znak *razy *zaokrąglić w dół <.wartości bezwzględnej@|

Jonasz
źródło
3

Java (OpenJDK 8) , 15 bajtów 9 bajtów

s->(int)s

Wypróbuj online!

dzięki @ kevin-cruijssen

Margon
źródło
9 bajtów za pomocą interfejsu lambda, dzięki czemu możemy użyć operacji podstawowych i prostej rzutowania na (int). A tutaj 15-bajkowa alternatywa zabawy przy użyciu odwołania do metody. :)
Kevin Cruijssen
1
@KevinCruijssen dziękuję za wskazanie odpowiedzi na 9 bajtów! A 15-bajtowe alternatywne rozwiązania są genialne! Również wielki fan twoich odpowiedzi! Zainspirowałem się do przyłączenia do społeczności również za twój wkład: D
Margon
Cieszę się, że mogłem pomóc i fajnie jest usłyszeć, że jestem inspiracją. : D Witaj! Aha, a jeśli jeszcze ich nie widziałeś, zarówno wskazówki dotyczące gry w golfa w Javie, jak i wskazówki dotyczące gry we wszystkie języki mogą być interesujące. Miłego pobytu! :)
Kevin Cruijssen
Dziękuję Ci! :) Przeczytałem już wszystkie wskazówki i sporo się czaiłem przed opublikowaniem! Mam nadzieję, że mogę w przyszłości odpowiedzieć na więcej!
Margon
3

Excel, 10 bajtów

=TRUNC(A1)

TRUNC obcina liczbę do liczby całkowitej, usuwając ułamkową część liczby.

Wernisch
źródło
3

R, 13 5 bytes

Thanks Robin Ryder

trunc

Try it online!

Robert S.
źródło
2
There is consensus that it is acceptable to answer with either a function or a full program. Here, the function form is only 5 bytes.
Robin Ryder
2

Ruby, 11 bytes

proc &:to_i

I picked this one because it distinguishes itself from the lambdas that us Ruby golfers typically use (thankfully, it had the same bytecount as the "traditional" solution):

->n{n.to_i}

Try it online!

Value Ink
źródło
2

ReRegex, 12 bytes

\..+//#input

Try it online!

ReRegex is a programming language which matches and replaces over and over until there are no matches.

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
źródło
2

JavaScript, 6 bytes

x=>x^0

Try it online!


JavaScript, 8 bytes

Using built in is 2 bytes longer...

parseInt

Try it online!

tsh
źródło
Also x=>~~x? Still 6 bytes though.
mherzig
2

Intel 8087 FPU machine code, 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

Input is single precision value in a memory location A (a DD), output is integer value at memory location B (a DW).

The 8087 must first be put into round towards zero mode by setting the control word (0F7FH). Then load the floating point value and store back to an integer.

640KB
źródło
2

Keg, 19 17 13 bytes

This outputs some trailing unprintable characters. Also, this exits with an error. (Now we need reversed input!)

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

źródło
Exiting with an error is allowed by default
EdgyNerd
2

Whitespace (with vii5ard compiler), 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]

Letters S (space), T (tab), and N (new-line) added as highlighting only.
[..._some_action] added as explanation only.

Try it online. You'll have to copy-paste the code yourself (note that SE converts the tabs to a bunch of spaces!) in order to run the code at the online Whitespace-compiler vii5ard. When clicking run, it will ask for an input (i.e. -285.5), and after clicking enter it will continue and output -283.

Explanation in pseudo-code:

Integer i = STDIN as integer
Print i as integer

Whitespace can only use I/O as integers or single characters, so in this case it would read the input as integer and ignore any other trailing characters. I.e. -283.5 or -283abc5 would both be input (and thus output) as -283.

Unfortunately this above doesn't work on TIO for two reasons (all Whitespace compilers are slightly different..):

  1. It will give a no parse error when we try to read an input as integer, which isn't an a valid integer. So, instead we'll read one character at a time, and stop (with an error) as soon as we've encountered the . or there is no more input (i.e. 50/-50).
  2. In the vii5ard compiler it's also possible to push 0 with just SSN, whereas on TIO it requires an additional S or T: SSSN/SSTN. The first S is Enable Stack Manipulation; the second S is Push what follows as integer; the third S/T is positive/negative respectively; and any S/T after that (followed by an N) is the number we want to push in binary, where S=0 and T=1. For integer 0 this binary part doesn't matter, since it's 0 by default. But on TIO we'd still have to specify the positive/negative, and with most other Whitespace compilers like vii5ard not.

Whitespace (with TIO compiler), 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]

Letters S (space), T (tab), and N (new-line) added as highlighting only.
[..._some_action] added as explanation only.

Try it online (with raw spaces, tabs and new-lines only).

Explanation in pseudo-code:

Start LOOP:
  Character c = STDIN as character
  If(c == '.'):
    Exit program
  Print c as character
  Go to the next iteration of LOOP
Kevin Cruijssen
źródło
1

05AB1E, 1 byte

ï

In the legacy version (which is written in Python), the cast to integer builtin works as expected to truncate the decimal values.

Try it online.

In the new version of 05AB1E (written in Elixir) it only works on strings (even though integers/decimals/strings should all be interchangeable, unless sorting lexicographical vs numeric for example). Guess I can report a bug to @Adnan..

Try it online to compare integer/decimal input (giving incorrect result) vs string inputs (giving correct results).

Kevin Cruijssen
źródło
1
ï works just fine on non-legacy 05AB1E. It's array input that works in a weird way.
Grimmy
@Grimy Ah, it's string vs integer/decimal. Strings work correct, but integers/decimals not.
Kevin Cruijssen
1

Aheui (esotope), 9 bytes

방망희

Try it online!

Basic idea from that of triangular answer (or any other languages takes numeric input as integer).

Fun fact. 방망희(pronounced bang-mang-heui(a of ark)) sounds almost same as 방망이(pronounced bang-mang-i(a of ark, i sounds like E), which means bat.

How does it works?

takes number as integer.

prints value as number.

terminates program.

LegenDUST
źródło
1

PowerShell, 19 bytes

$args-replace'\..*'

Try it online!

PowerShell by default does bankers' rounding, which is pretty much the opposite of how many other languages do rounding. So, traditionally we'd use [Math]::Truncate() to strip the decimal point and any decimal part and achieve the "to zero" rounding we're interested in here. However, that's a bit long, so using this tip, we can round-toward-zero by implicitly casting the input to a string, performing a regex -replace to get rid of the period and anything after it, and leaving the output on the pipeline for implicit printing.

AdmBorkBork
źródło
I don't think this would give the desired result for negative numbers.
Octopus
@Octopus Sure it does? It just trims off the decimal portion, which moves the number toward zero whether from positive or negative floats.
AdmBorkBork
Right, duh. Lol.
Octopus
1

Triangular, 3 bytes

$.%

Try it online!

Triangular takes numeric input as an integer; any decimal values are truncated. If it's acceptable to just leave the input on the stack without printing it, then this solution can instead be:


Triangular, 1 byte

$

Try it online!

Reinstate Monica
źródło