Закруглемо до нуля


14

Це просте завдання. Давши додатне чи від’ємне дійсне число, округляйте його до наступного цілого числа, ближчого до нуля.

Змагання

  • Візьміть дані через будь-яку розумну форму (stdin, функція тощо) одного додатного чи негативного реального числа.

  • Заокруглюйте це число "до нуля" - це означає, що якщо воно позитивне, ви округлите, а якщо воно негативне - то округлите його.

  • Поверніть номер або виведіть його на консоль.

Тестові справи

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

Правила

Веселіться! ще найближчі виклики Джиммі


3
Можу чи я вихід 3.00для 3.14?
TSH

1
@A_ Якщо повідомлення про помилки є більш жорстким. І ваш вихід у stdout. Це дозволено за замовчуванням.
TSH

1
Також 0.01і -0.01повинні поступатися 0...
roblogic

2
Гм, це здається нерозумно тривіальним для кодового гольфу. Більшість язичників мають для цього вбудований, ні? Схоже, ми повинні вважати, що всі вхідні та вихідні дані є рядками?
Восьминіг

2
3.00, безумовно, ціле число. Точніше, у стандартних математичних позначеннях, а також у багатьох мовах програмування позначення "3,00" позначає число 3, яке є цілим числом; але в багатьох мовах програмування вказується, що номер повинен зберігатися у форматі з плаваючою комою. (Але це ціле число незалежно від формату, в якому він зберігається.)
Tanner Swett

Відповіді:



40

Python 3 , 3 байти

int

Спробуйте в Інтернеті!

Скорочує цифри після коми після коми.

ПРИМІТКА. Це тривіальна відповідь. Будь ласка, подивіться на інші відповіді, перш ніж подавати заявку


18
Це свідчить про те, що Python 3 популярніший за Python 2.

1
Помилка ... Чому звернення? Це досить тривіальна відповідь ...
MilkyWay90

Я думаю, що це ваше відмінне пояснення коду. :)
Chas Brown

3
@ChasBrown Я не думаю, що так ... пояснення навіть не є стандартним поясненням калібру.
MilkyWay90

Я думаю, @Chas вказує, що пояснення нескінченно повніше, ніж його власне.
prl

21

2
Вибачте, але я вас ніндзя'ed ( codegolf.stackexchange.com/a/190673/83048 )
MilkyWay90

2
Аргумент! Але ви використовуєте Python 3 ... :)
Chas Brown

Правда, люди повинні знати, що це працює і в Python 2
MilkyWay90

На жаль, ви отримали
бамбук

3
Я вуз пограбував! :)
Час Браун

12

Perl 5 -p056l15 , 2 байти

<>

Спробуйте в Інтернеті!

Як це працює?

-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.
Grimmy

для другого варіанту є також-Minteger -p $_/=1
Науель Фоль

4
Перше рішення - це фактично 8 байт, тому що вам потрібно включити прапори до числа байтів
Джон Дворак

2
@JohnDvorak насправді відповідно до мета-повідомлення codegolf.meta.stackexchange.com/questions/14337/… , прапори не додають байти, а рахуються як інша версія мови.
Нік Кеннеді

@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
Це може бути правдою для деяких інших мов Мартіна, але точно така ж програма працює в Гексагонії .
FryAmTheEggman

3
Хе, я завжди хотів зробити відповідь у "Гексагоні". Робити це без спроб було останнє, що я думав, що може статися!
Джонатан Аллан

IO@в Backhand працює так само, як і &.@в Befunge. Можливо, багато мов із цілим введенням, і лише ціла обробка буде однаковою
Jo King

@JoKing Отже, ми чекаємо, коли хтось дізнається мову з цілим i / o, а також прочитає все число від stdin до стека / списку, а потім за замовчуванням надрукує їх у stdout. Я вважаю, що це може бути, і це буде відповідь у нульових байтах.
TSH

@tsh, швидше за все!
Джонатан Аллан

6

мозковий ебать , 26 байт

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

Спробуйте в Інтернеті!

Виводи з проміжком, .якщо число було десятковим

Немає великого спекулятивного гольфу, за винятком того, що замість того, щоб відняти 46, щоб перевірити, чи є символ а ., я додаю 5 і помножую на 5, щоб отримати 255, а потім додаю ще один, щоб перекинутись на нуль. Віднімання 3, множення на 6 і віднімання 2 - це одне і те ж число


6

C (tcc), 39 21 10 байт

Я насправді був дуже здивований, ніхто не думав використовувати C.

f(float i){}

Це не функція ідентичності, як здається. Неявний тип int функції f скорочує плаваючу точку.

ТІО

Менш ймовірність обдурити людей, але має меншу довжину байтів:

f(int i){}

ТІО


Не працюйте з floatцим, оскільки для цього використовується інший регістр для введення значень з плаваючою комою.
Hauleth



3

Java (OpenJDK 8) , 15 байт 9 байт

s->(int)s

Спробуйте в Інтернеті!

завдяки @ kevin-cruijssen


9 байт за допомогою інтерфейсу лямбда, щоб ми могли використовувати примітиви та просту роль (int). І тут весела альтернатива 15 байт з використанням посилання на метод. :)
Kevin Cruijssen

1
@KevinCruijssen дякую, що вказав на 9 байт відповіді! А альтернативні рішення на 15 байт геніально! Також великий шанувальник ваших відповідей! Я був натхненний , щоб приєднатися до спільноти і для ваших вкладів: D
Маргон

Радий, що можу допомогти, і цікаво почути, що я натхненник. : D Ласкаво просимо! О, і якщо ви їх ще не бачили, поради щодо гольфу на Яві та поради щодо гри в гольф на <всіх мовах> можуть бути зацікавлені і для ознайомлення. Насолодитися перебуванням! :)
Кевін Кройсейсен

Дякую! :) Я вже читав усі поради та багато ховався насправді перед публікацією! Сподіваюся, я можу відповісти більше в майбутньому!
Маргон

3

Excel, 10 байт

=TRUNC(A1)

TRUNC обрізає число до цілого числа, видаляючи дробову частину числа.





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

Машинний код FPU Intel 8087, 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

Keg, 19 17 13 bytes

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

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

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




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).


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.


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.


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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.