Vòng về không


14

Đây là một nhiệm vụ đơn giản. Cho một số thực dương hoặc âm, làm tròn nó đến toàn bộ số nguyên tiếp theo gần bằng 0.

Các thách thức

  • Đưa đầu vào thông qua bất kỳ hình thức hợp lý nào (stdin, hàm, v.v.) của một số thực dương hoặc âm.

  • Làm tròn số này "về không" - điều này có nghĩa là nếu nó dương thì bạn sẽ làm tròn xuống và nếu nó âm thì bạn sẽ làm tròn số.

  • Trả lại số hoặc xuất nó ra bàn điều khiển.

Các trường hợp thử nghiệm

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

Quy tắc

Chúc vui vẻ! sắp có thêm nhiều thử thách của Jimmy


3
Tôi có thể đầu ra 3.00cho 3.14?
tsh

1
@A_ Nếu thông báo lỗi nằm trong stderr. Và đầu ra của bạn là trong thiết bị xuất chuẩn. Nó được cho phép theo mặc định.
tsh

1
Ngoài ra 0.01-0.01nên mang lại 0...
roblogic

2
Hmm, điều này có vẻ tầm thường vô lý cho một golf mã. Hầu hết các lang sẽ có một nội dung cho việc này, phải không? Có vẻ như chúng ta sẽ giả sử tất cả đầu vào và đầu ra là chuỗi?
Bạch tuộc

2
3,00 chắc chắn là một số nguyên. Chính xác hơn, trong ký hiệu toán học tiêu chuẩn cũng như trong nhiều ngôn ngữ lập trình, ký hiệu "3.00" biểu thị số 3, là một số nguyên; nhưng trong nhiều ngôn ngữ lập trình, nó chỉ ra rằng số này sẽ được lưu trữ ở định dạng dấu phẩy động. (Nhưng đó là một số nguyên bất kể định dạng được lưu trữ trong.)
Tanner Swett

Câu trả lời:


13

Thạch , 1 byte

r

Một chương trình đầy đủ (dưới dạng Liên kết đơn âm, nó trả về một danh sách có độ dài).

Hãy thử trực tuyến!

Làm sao?

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

Hãy thử trực tuyến!

Cắt các chữ số sau dấu thập phân.

LƯU Ý: Đây là một câu trả lời tầm thường. Xin hãy xem các câu trả lời khác trước khi nâng cao


18
Điều này chứng tỏ rằng Python 3 phổ biến hơn Python 2.
a'_ '

1
Ơ ... Tại sao các upvote? Đây là một câu trả lời khá tầm thường ...
MilkyWay90

Tôi nghĩ đó là lời giải thích tuyệt vời của bạn về mã. :)
Chas Brown

3
@ChasBrown Tôi không nghĩ vậy ... lời giải thích thậm chí không phải là một lời giải thích tầm cỡ tiêu chuẩn.
MilkyWay90

Tôi đoán @Chas đang chỉ ra rằng lời giải thích hoàn toàn đầy đủ hơn lời giải thích của anh ấy.
prl


12

Perl 5 -p056l15 , 2 byte

<>

Hãy thử trực tuyến!

Làm thế nào mà làm việc?

-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

Hoặc nếu bạn thích một câu trả lời truyền thống hơn:

Perl 5 , 6 byte

$_=int

Hãy thử trực tuyến!


l15 không \n, nó \r. \nsẽ là l12. Nó trông giống nhau trong TIO, mặc dù.
Grimmy

cho lựa chọn thứ hai, cũng có-Minteger -p $_/=1
Nahuel Fouilleul

4
Giải pháp đầu tiên thực sự là 8 byte vì bạn cần bao gồm các cờ trong số byte của mình
John Dvorak

2
@JohnDvorak thực sự trên mỗi bài đăng meta codegolf.meta.stackexchange.com/questions/14337/ , cờ không thêm byte mà được tính là một phiên bản khác của ngôn ngữ.
Nick Kennedy

@NahuelFouilleul Tôi cũng nghĩ về điều đó, nhưng nó không thành vấn đề vì tôi đã nhận được 2 byte theo cách khác.
Xcali

6

Mê cung & Hexagony , 3 byte

Cảm ơn FryAmTheEggman đã chỉ ra rằng tôi đã viết một số Hexagony!

?!@

Hãy thử trực tuyến! & Hãy thử trực tuyến!

Làm sao?

Labyrinth và Hexagony đều sẽ cho bạn biết sớm nhất có thể! ...

? - 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
Điều này có thể đúng với một số ngôn ngữ khác của Martin, nhưng cùng một chương trình hoạt động trong Hexagony .
FryAmTheEggman

3
Heh, tôi đã luôn muốn đưa ra câu trả lời trong Hexagony. Làm điều đó mà không cố gắng là điều cuối cùng tôi nghĩ có thể xảy ra!
Jonathan Allan

IO@trong Backhand hoạt động theo cách tương tự, và &.@trong Befunge. Có lẽ rất nhiều ngôn ngữ có đầu vào số nguyên và chỉ xử lý số nguyên sẽ giống nhau
Jo King

@JoKing Vì vậy, chúng tôi đang chờ đợi ai đó tìm ra một ngôn ngữ có số nguyên i / o và cũng đọc tất cả các số từ stdin đến stack / list và sau đó in chúng ra stdout theo mặc định. Tôi tin rằng có thể có một, và nó sẽ là một câu trả lời bằng byte.
tsh

@tsh có lẽ nhất!
Jonathan Allan

6

Brainfuck , 26 byte

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

Hãy thử trực tuyến!

Đầu ra có dấu .nếu số là số thập phân

Không có nhiều cách chơi golf cụ ​​thể, ngoại trừ việc thay vì trừ 46 để kiểm tra xem một nhân vật có phải là một không ., tôi thêm 5 và nhân với 5 để có 255, sau đó thêm một lần nữa để chuyển sang không. Trừ 3, nhân với 6 và trừ 2 là cùng một tổng số


6

C (tcc), 39 21 10 byte

Tôi thực sự khá ngạc nhiên khi không ai nghĩ đến việc sử dụng C.

f(float i){}

Đây không phải là một chức năng nhận dạng như nó có vẻ là. Kiểu int ngầm định của hàm f chấm dứt dấu phẩy động.

TIO

Ít có khả năng lừa mọi người nhưng có độ dài byte ngắn hơn:

f(int i){}

TIO


Không làm việc với floatvì điều này sử dụng đăng ký khác nhau cho đầu vào của các giá trị dấu phẩy động.
Hauleth



3

Java (OpenJDK 8) , 15 byte 9 byte

s->(int)s

Hãy thử trực tuyến!

cảm ơn @ kevin-cruijssen


9 byte bằng cách sử dụng lambda giao diện để chúng ta có thể sử dụng nguyên thủy và truyền đơn giản (int). Và đây là một thay thế 15 byte thú vị bằng cách sử dụng một tham chiếu phương thức. :)
Kevin Cruijssen

1
@KevinCruijssen cảm ơn bạn đã chỉ ra câu trả lời 9 byte! Và các giải pháp thay thế 15byte là tuyệt vời! Cũng là fan hâm mộ lớn của câu trả lời của bạn! Tôi cũng được truyền cảm hứng để tham gia cộng đồng vì những đóng góp của bạn: D
Margon

Vui mừng tôi có thể giúp đỡ, và vui khi nghe tôi là một nguồn cảm hứng. : D Chào mừng bạn! Ồ, và nếu bạn chưa nhìn thấy chúng, các mẹo chơi golf trong Java và các mẹo chơi golf bằng <tất cả các ngôn ngữ> có thể khiến cả hai thích thú khi đọc qua. Tận hưởng kì nghỉ của bạn! :)
Kevin Cruijssen

Cảm ơn bạn! :) Tôi đã đọc tất cả các mẹo và ẩn giấu rất nhiều trước khi đăng! Hy vọng tôi có thể trả lời nhiều hơn trong tương lai!
Margon

3

Excel, 10 byte

=TRUNC(A1)

TRUNC cắt một số thành một số nguyên bằng cách loại bỏ phần phân số của số đó.




2

Ruby , 11 byte

proc &:to_i

Tôi đã chọn cái này bởi vì nó phân biệt chính nó với lambdas mà những người chơi golf Ruby thường sử dụng (may mắn thay, nó có cùng một quy tắc như giải pháp "truyền thống"):

->n{n.to_i}

Hãy thử trực tuyến!


2

ReRegex , 12 byte

\..+//#input

Hãy thử trực tuyến!

ReRegex là một ngôn ngữ lập trình phù hợp và thay thế nhiều lần cho đến khi không có kết quả khớp.

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

Mã máy 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

Đầu vào là giá trị chính xác đơn ở vị trí bộ nhớ A(a DD), đầu ra là giá trị nguyên tại vị trí bộ nhớ B(aDW ).

Trước tiên, 8087 phải được đặt thành vòng tròn về chế độ 0 bằng cách đặt từ điều khiển ( 0F7FH). Sau đó tải giá trị dấu phẩy động và lưu lại thành một số nguyên.






2

Khoảng trắng (với trình biên dịch 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]

Chữ cái S(dấu cách), T(tab) và N(dòng mới) được thêm vào dưới dạng chỉ tô sáng.
[..._some_action]chỉ thêm vào giải thích.

Hãy thử trực tuyến. Bạn sẽ phải tự sao chép-dán mã (lưu ý rằng SE chuyển đổi các tab thành một loạt khoảng trắng!) Để chạy mã tại trình biên dịch vii5ard trực tuyến vii5ard. Khi nhấp vào chạy, nó sẽ yêu cầu đầu vào (nghĩa là -285.5) và sau khi nhấp vào, nó sẽ tiếp tục và xuất ra-283 .

Giải thích bằng mã giả:

Integer i = STDIN as integer
Print i as integer

Khoảng trắng chỉ có thể sử dụng I / O làm số nguyên hoặc ký tự đơn, vì vậy trong trường hợp này, nó sẽ đọc đầu vào dưới dạng số nguyên và bỏ qua bất kỳ ký tự dấu nào khác. Tức là -283.5hoặc -283abc5cả hai sẽ là đầu vào (và do đó đầu ra) là-283 .

Thật không may, điều này ở trên không hoạt động trên TIO vì hai lý do (tất cả các trình biên dịch Whitespace hơi khác nhau ..):

  1. Nó sẽ no parsebáo lỗi khi chúng ta cố đọc đầu vào dưới dạng số nguyên, đây không phải là số nguyên hợp lệ. Vì vậy, thay vào đó, chúng tôi sẽ đọc một ký tự một lần và dừng (có lỗi) ngay khi chúng tôi gặp phải .hoặc không có thêm đầu vào (tức là 50/-50 ).
  2. Trong trình biên dịch vii5ard, bạn cũng có thể ấn 0 chỉ SSNtrong khi trên TIO, nó yêu cầu thêm Shoặc T: SSSN/ SSTN. Đầu tiên SKích hoạt thao tác ngăn xếp ; thứ hai SĐẩy cái gì sau số nguyên ; thứ ba S/ Tlà tích cực / tiêu cực tương ứng; và bất kỳ S/ Tsau đó (theo sau là N) là số chúng tôi muốn đẩy ở dạng nhị phân, ở đâu S=0T=1. Đối với số nguyên 0, phần nhị phân này không thành vấn đề, vì nó là 0 theo mặc định. Nhưng trên TIO, chúng tôi vẫn phải chỉ định dương / âm và với hầu hết các trình biên dịch khoảng trắng khác như vii5ard thì không.

Khoảng trắng (với trình biên dịch 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]

Chữ cái S(dấu cách), T(tab) và N(dòng mới) được thêm vào dưới dạng chỉ tô sáng.
[..._some_action]chỉ thêm vào giải thích.

Dùng thử trực tuyến (chỉ có không gian thô, tab và dòng mới).

Giải thích bằng mã giả:

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

ï

Trong phiên bản kế thừa (được viết bằng Python), castin thành số nguyên hoạt động như mong đợi để cắt bớt các giá trị thập phân.

Hãy thử trực tuyến.

Trong phiên bản mới của 05AB1E (viết bằng Elixir), nó chỉ hoạt động trên các chuỗi (mặc dù tất cả các số nguyên / số thập phân / chuỗi đều có thể hoán đổi cho nhau, trừ khi sắp xếp từ vựng và số chẳng hạn). Đoán tôi có thể báo cáo lỗi cho @Adnan ..

Hãy thử trực tuyến để so sánh đầu vào số nguyên / thập phân (cho kết quả không chính xác) với đầu vào chuỗi (cho kết quả chính xác).


1
ïchỉ hoạt động tốt trên 05AB1E không kế thừa . Đó là đầu vào mảng hoạt động theo một cách kỳ lạ.
Grimmy


1

Aheui (bí truyền) , 9 byte

방망희

Hãy thử trực tuyến!

Ý tưởng cơ bản từ câu trả lời tam giác (hoặc bất kỳ ngôn ngữ nào khác lấy đầu vào số là số nguyên).

Sự thật thú vị. 방망희(phát âm bang-mang-heui( acủa ark)) âm gần giống như 방망이(phát âm bang-mang-i( acủa ark, inghe giống như E), có nghĩa là dơi.

Nó làm việc như thế nào?

lấy số là số nguyên.

in giá trị dưới dạng số.

chấm dứt chương trình.


1

PowerShell , 19 byte

$args-replace'\..*'

Hãy thử trực tuyến!

PowerShell theo mặc định thực hiện làm tròn số ngân hàng , điều này hoàn toàn trái ngược với số lượng ngôn ngữ khác làm tròn số. Vì vậy, theo truyền thống, chúng tôi sẽ sử dụng [Math]::Truncate()để loại bỏ dấu thập phân và bất kỳ phần thập phân nào và đạt được làm tròn "về 0" mà chúng tôi quan tâm ở đây. Tuy nhiên, điều đó hơi dài, vì vậy bằng cách sử dụng mẹo này , chúng ta có thể làm tròn về 0 bằng cách ngầm định nhập đầu vào thành một chuỗi, thực hiện một biểu thức chính quy -replaceđể loại bỏ giai đoạn và bất cứ điều gì sau đó và để đầu ra trên đường ống cho in ngầm.


Tôi không nghĩ rằng điều này sẽ mang lại kết quả mong muốn cho các số âm.
Bạch tuộc

@Octopus Chắc chắn không? Nó chỉ cắt phần thập phân, di chuyển số về 0 cho dù từ phao dương hay âm.
admBorkBork

Phải rồi, duh. Cười lớn.
Bạch tuộc

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.