Вокруг к нулю


14

Это простая задача. Учитывая положительное или отрицательное действительное число, округлите его до следующего целого числа ближе к нулю.

Соревнование

  • Возьмите ввод через любую разумную форму (стандартный, функция и т. Д.) Одного положительного или отрицательного действительного числа.

  • Округлить это число «до нуля» - это означает, что если оно будет положительным, вы будете округлять, а если оно отрицательным, вы будете округлять.

  • Верните номер или выведите его на консоль.

Контрольные примеры

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

правила

Веселиться! больше проблем Джимми в ближайшее время


3
Могу ли я выводить 3.00для 3.14?
TSH

1
@A_ Если сообщения об ошибках находятся в stderr. И ваш вывод в стандартный вывод. Это разрешено по умолчанию.
TSH

1
Также 0.01и -0.01должен уступить 0...
roblogic

2
Хм, это кажется необоснованно тривиальным для кода гольфа. У большинства языков есть встроенные функции для этого, нет? Похоже, мы должны предполагать, что все входные и выходные данные являются строками?
Осьминог

2
3,00, безусловно, является целым числом. Точнее, в стандартных математических обозначениях, а также во многих языках программирования, обозначение «3,00» обозначает число 3, которое является целым числом; но во многих языках программирования это означает, что число должно храниться в формате с плавающей запятой. (Но это целое число независимо от формата, в котором оно хранится.)
Тэннер Светт

Ответы:



40

Python 3 , 3 байта

int

Попробуйте онлайн!

Усекает цифры после десятичной точки.

ПРИМЕЧАНИЕ: это тривиальный ответ. Пожалуйста, посмотрите на другие ответы, прежде чем голосовать


18
Это показывает, что Python 3 более популярен, чем Python 2.

1
Э-э-э ... Почему против? Это довольно тривиальный ответ ...
MilkyWay90

Я думаю, что это ваше отличное объяснение кода. :)
Час Браун

3
@ChasBrown Я так не думаю ... объяснение даже не стандартного калибра.
MilkyWay90

Я думаю, @Chas указывает, что объяснение бесконечно более полное, чем его собственное.
Prl

21

2
Извините, но я вас ниндзя ( codegolf.stackexchange.com/a/190673/83048 )
MilkyWay90

2
Arg! Но вы используете Python 3 ... :)
Час Браун

Правда, люди должны знать, что это работает и в Python 2
MilkyWay90

К сожалению, вас ошарашило примерно на минуту :(
connectyourcharger

3
Я ограбил wuz! :)
Час Браун

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

Попробуйте онлайн!


Это не \nтак \r. \nбудет 12 Тем не менее, он выглядит так же в 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. Вероятно, много языков с целочисленным вводом, и только целочисленная обработка будет одинаковой
Джо Кинг,

@JoKing Итак, мы ждем, чтобы кто-нибудь узнал язык с целочисленным вводом-выводом, а также прочитал все числа из stdin в stack / list и затем распечатал их по умолчанию в stdout. Я считаю, что может быть один, и это будет ответ в нулевых байтах.
TSH

@tsh наиболее вероятно!
Джонатан Аллан

6

брейкфук , 26 байт

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

Попробуйте онлайн!

Вывод с трейлингом, .если число было десятичным

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


6

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

Я был очень удивлен, что никто не подумал об использовании C.

f(float i){}

Это не функция идентичности, как кажется. Неявный тип int функции f обрезает число с плавающей точкой.

TIO

Менее вероятно, чтобы обмануть людей, но имеет более короткую длину байта:

f(int i){}

TIO


Не работайте с floatэтим, поскольку он использует другой регистр для ввода значений с плавающей запятой.
Хаулет



3

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

s->(int)s

Попробуйте онлайн!

благодаря @ kevin-cruijssen


9 байтов , используя интерфейс лямбда, так что мы можем использовать примитивы и простое приведение к (int). А вот забавная 15-байтовая альтернатива с использованием ссылки на метод. :)
Кевин Круйссен

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

Рад, что смог помочь, и радостно слышать, что я вдохновляю. : D Добро пожаловать! Да, и если вы еще не видели их, вам может быть интересно прочитать советы по игре в гольф на Java и советы по игре в гольф на всех языках . Приятного пребывания! :)
Кевин Круйссен

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

3

Excel, 10 байт

=TRUNC(A1)

TRUNC усекает число до целого числа, удаляя дробную часть числа.




2

Рубин , 11 байт

proc &:to_i

Я выбрал этот, потому что он отличается от лямбд, которые обычно используют наши игроки в гольф на Ruby (к счастью, у него был тот же байтовый счет, что и у «традиционного» решения):

->n{n.to_i}

Попробуйте онлайн!


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

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

Ввод - это значение одинарной точности в ячейке памяти ADD), вывод - целочисленное значение в ячейке памяти BDW).

8087 сначала нужно перевести в режим обнуления, установив управляющее слово ( 0F7FH). Затем загрузите значение с плавающей запятой и сохраните обратно в целое число.





2

Бочонок ,19 17 13 байт

Это выводит некоторые конечные непечатаемые символы. Кроме того, это выходит с ошибкой. (Теперь нам нужен обратный ввод!)

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

Выход с ошибкой разрешен по умолчанию
EdgyNerd

2

Пробелыкомпилятором vii5ard ), 18 17 байт

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

Буквы S(пробел), T(табуляция) и N(новая строка) добавляются только как подсветка.
[..._some_action]добавлено только в качестве объяснения.

Попробуйте онлайн. Вам нужно будет скопировать и вставить код самостоятельно (обратите внимание, что SE преобразует вкладки в кучу пробелов!), Чтобы запустить код в онлайн-компиляторе Whitespace vii5ard. При нажатии кнопки «Выполнить» он запросит ввод (т. Е. -285.5), А после нажатия кнопки « Ввод» он продолжит и выведет -283.

Объяснение в псевдокоде:

Integer i = STDIN as integer
Print i as integer

Пробельные символы могут использовать ввод / вывод только как целые или одиночные символы, поэтому в этом случае он будет читать ввод как целое число и игнорировать любые другие завершающие символы. Т.е. -283.5или -283abc5оба были бы введены (и, следовательно, выведены) как -283.

К сожалению, это выше не работает на TIO по двум причинам (все компиляторы Whitespace немного отличаются ..):

  1. Это даст no parseошибку, когда мы попытаемся прочитать входные данные как целое число, которое не является допустимым целым числом. Таким образом, вместо этого мы будем читать по одному символу за раз и останавливаемся (с ошибкой), как только мы встретили .или больше нет ввода (то есть 50/ -50).
  2. В компиляторе vii5ard также можно нажать 0 с помощью just SSN, тогда как в TIO это требует дополнительного Sили T: SSSN/ SSTN. Первый S- это « Включить манипуляцию стека» ; вторая S- Push, которая следует как целое число ; третий S/ Tположительный / отрицательный соответственно; и любой S/ Tпосле этого (с последующимN ) - это число, которое мы хотим вставить в двоичном формате, где S=0и T=1. Для целого числа 0 эта двоичная часть не имеет значения, поскольку по умолчанию она равна 0. Но в TIO нам все равно придется указывать положительный / отрицательный, а с большинством других компиляторов Whitespace, таких как vii5ard, нет.

Пробелы (с компилятором TIO ), 48 байт

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

Буквы S(пробел), T(табуляция) и N(новая строка) добавляются только как подсветка.
[..._some_action]добавлено только в качестве объяснения.

Попробуйте онлайн (только с пробелами, вкладками и новыми строками).

Объяснение в псевдокоде:

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 байт

ï

В унаследованной версии (написанной на Python) встроенная функция приведения к целочисленному типу работает, как ожидается, для усечения десятичных значений.

Попробуйте онлайн.

В новой версии 05AB1E (написанной на Elixir) он работает только со строками (даже если целые / десятичные числа / строки должны быть взаимозаменяемыми, если, например, не выполняется сортировка лексикографических и числовых). Думаю, я могу сообщить об ошибке в @Adnan ..

Попробуйте онлайн, чтобы сравнить целочисленный / десятичный ввод (давая неверный результат) со строковым вводом (давая правильные результаты).


1
ïотлично работает на не-унаследованных 05AB1E . Это массив ввода, который работает странным образом.
Grimmy


1

Ахей (эзотоп) , 9 байт

방망희

Попробуйте онлайн!

Основная идея из треугольного ответа (или любого другого языка принимает числовой ввод как целое число).

Интересный факт. 방망희(произносится bang-mang-heui( aиз ark)) звучит почти так же, как 방망이(произносится bang-mang-i( aиз ark, iзвучит как E), что означает летучая мышь.

Как это работает?

принимает число как целое число

печатает значение как число.

завершает программу


1

PowerShell , 19 байт

$args-replace'\..*'

Попробуйте онлайн!

PowerShell по умолчанию выполняет банковское округление , что в значительной степени противоположно тому, как это делают многие другие языки. Итак, традиционно мы использовали бы [Math]::Truncate()для удаления десятичной точки и любой десятичной части и достижения округления «до нуля», в котором мы заинтересованы. Однако это немного длинно, поэтому, используя этот совет , мы можем округлить до нуля, неявно приводя входные данные к строке, выполняя регулярное выражение, -replaceчтобы избавиться от периода и всего, что после него, и оставляя вывод в конвейере для неявная печать.


Я не думаю, что это даст желаемый результат для отрицательных чисел.
Осьминог

@ Осьминог Конечно, это так? Он просто обрезает десятичную часть, которая перемещает число к нулю, как из положительных, так и из отрицательных чисел.
AdmBorkBork

Хорошо, да. Лол.
Осьминог

1

Треугольный , 3 байта

$.%

Попробуйте онлайн!

Треугольный принимает числовой ввод как целое число; любые десятичные значения усекаются. Если допустимо просто оставить ввод в стеке, не печатая его, тогда это решение может быть:


Треугольный , 1 байт

$

Попробуйте онлайн!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.