Bulat menuju nol

14

Ini tugas sederhana. Diberikan bilangan real positif atau negatif, bulatkan ke bilangan bulat keseluruhan berikutnya mendekati nol.

Tantangan

  • Ambil input melalui bentuk wajar apa pun (stdin, fungsi, dll.) Dari satu bilangan real positif atau negatif.

  • Bulatkan angka ini "ke nol" - ini berarti jika positif Anda akan dibulatkan ke bawah, dan jika negatif Anda akan mengumpulkan.

  • Kembalikan nomor atau hasilkan ke konsol.

Uji kasus

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

Aturan

Selamat bersenang-senang! lebih banyak tantangan Jimmy segera hadir

hubungkan charger Anda
sumber
3
Bisakah saya output 3.00untuk 3.14?
tsh
1
@ A_ Jika pesan kesalahan ada di stderr. Dan output Anda ada di stdout. Itu diizinkan secara default.
tsh
1
Juga 0.01dan -0.01harus menghasilkan 0...
roblogic
2
Hmm, ini sepertinya tidak masuk akal sepele untuk kode golf. Kebanyakan langs akan memiliki builtin untuk ini, bukan? Sepertinya kita menganggap semua input dan output adalah string?
Octopus
2
3,00 tentu adalah bilangan bulat. Lebih tepatnya, dalam notasi matematika standar dan juga dalam banyak bahasa pemrograman, notasi "3,00" menunjukkan angka 3, yang merupakan bilangan bulat; tetapi dalam banyak bahasa pemrograman, ini menunjukkan bahwa nomor tersebut harus disimpan dalam format floating-point. (Tapi itu bilangan bulat terlepas dari format yang disimpannya.)
Tanner Swett

Jawaban:

13

Jelly , 1 byte

r

Program lengkap (sebagai Tautan monadik ia mengembalikan daftar panjang satu).

Cobalah online!

Bagaimana?

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
sumber
40

Python 3 , 3 byte

int

Cobalah online!

Memotong digit setelah titik desimal.

CATATAN: Ini adalah jawaban yang sepele. Silakan lihat jawaban-jawaban lain sebelum upvoting

MilkyWay90
sumber
18
Ini menunjukkan bahwa Python 3 lebih populer daripada Python 2.
a'_ '23
1
Err ... Mengapa upvotes? Ini adalah jawaban yang cukup sepele ...
MilkyWay90
Saya pikir ini penjelasan Anda yang luar biasa dari kode tersebut. :)
Chas Brown
3
@ ChasBrown Saya tidak berpikir begitu ... penjelasannya bahkan bukan penjelasan kaliber standar.
MilkyWay90
Saya kira @Chas menunjukkan bahwa penjelasannya jauh lebih lengkap daripada miliknya.
prl
21

Python 2 , 3 byte

int

Cobalah online!

Chas Brown
sumber
2
Maaf, tapi saya ninja'ed Anda ( codegolf.stackexchange.com/a/190673/83048 )
MilkyWay90
2
Arg! Tapi Anda menggunakan Python 3 ... :)
Chas Brown
Benar, orang-orang harus tahu itu berfungsi di Python 2 juga
MilkyWay90
Sayangnya Anda mendapatkan bambu sekitar satu menit :(
connectyourcharger
3
Saya akan dirampok! :)
Chas Brown
12

Perl 5 -p056l15 , 2 byte

<>

Cobalah online!

Bagaimana cara kerjanya?

-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

Atau jika Anda lebih suka jawaban yang lebih tradisional:

Perl 5 , 6 byte

$_=int

Cobalah online!

Xcali
sumber
15 bukan \n, bukan \r. \nakan menjadi l12. Ini terlihat sama di TIO.
Grimmy
untuk opsi kedua, ada juga-Minteger -p $_/=1
Nahuel Fouilleul
4
Solusi pertama sebenarnya adalah 8 byte karena Anda harus menyertakan flag dalam hitungan byte Anda
John Dvorak
2
@JohnDvorak sebenarnya per meta post codegolf.meta.stackexchange.com/questions/14337/… , flag tidak menambahkan byte tetapi dihitung sebagai versi bahasa yang berbeda.
Nick Kennedy
@NahuelFouilleul Saya memikirkan hal itu juga, tetapi tidak masalah karena saya mendapatkan 2 byte sebaliknya.
Xcali
6

Labyrinth & Hexagony , 3 byte

Terima kasih kepada FryAmTheEggman untuk menunjukkan bahwa saya telah menulis Hexagony!

?!@

Cobalah online! & Cobalah online!

Bagaimana?

Labyrinth dan Hexagony akan memberi tahu Anda sedini mungkin! ...

? - 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
sumber
3
Ini mungkin benar untuk beberapa bahasa Martin lainnya, tetapi program yang sama persis berfungsi di Hexagony .
FryAmTheEggman
3
Heh, saya selalu ingin membuat jawaban dalam Hexagony. Melakukannya tanpa berusaha adalah hal terakhir yang saya pikir bisa terjadi!
Jonathan Allan
IO@di Backhand bekerja dengan cara yang sama, dan &.@di Befunge. Mungkin banyak bahasa dengan input integer, dan hanya penanganan integer akan sama
Jo King
@JoKing Jadi kami menunggu seseorang menemukan bahasa dengan integer i / o dan juga membaca semua angka dari stdin ke stack / list dan kemudian mencetaknya ke stdout secara default. Saya percaya mungkin ada satu, dan itu akan menjadi jawaban dalam nol byte.
tsh
@ tsh paling mungkin!
Jonathan Allan
6

brainfuck , 26 byte

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

Cobalah online!

Output dengan tanda .jika angka adalah desimal

Tidak ada banyak golf yang bijaksana, kecuali bahwa daripada mengurangi 46 untuk memeriksa apakah karakter adalah ., saya tambahkan 5 dan kalikan dengan 5 untuk mendapatkan 255, kemudian tambahkan satu lagi untuk berguling ke nol. Mengurangkan 3, mengalikan dengan 6 dan mengurangi 2 adalah bytecount yang sama

Jo King
sumber
6

C (tcc), 39 21 10 byte

Saya sebenarnya cukup terkejut tidak ada yang berpikir untuk menggunakan C.

f(float i){}

Sepertinya ini bukan fungsi identitas. Tipe int implisit dari fungsi f memotong titik-mengambang.

TIO

Lebih kecil kemungkinannya untuk menipu orang tetapi memiliki panjang byte yang lebih pendek:

f(int i){}

TIO

Sebuah'_'
sumber
Jangan bekerja floatkarena ini menggunakan register berbeda untuk input nilai floating point.
Hauleth
4

J , 6 byte

**<.@|

Cobalah online!

Masuk *kali *putaran ke bawah <.dari nilai absolut@|

Jonah
sumber
3

Java (OpenJDK 8) , 15 byte 9 byte

s->(int)s

Cobalah online!

terima kasih kepada @ kevin-cruijssen

Margon
sumber
9 byte dengan menggunakan antarmuka lambda sehingga kita dapat menggunakan primitif dan gips sederhana (int). Dan di sini menyenangkan 15 byte alternatif menggunakan referensi metode. :)
Kevin Cruijssen
1
@KevinCruijssen terima kasih telah menunjukkan jawaban 9 byte! Dan solusi alternatif 15bytes brilian! Juga penggemar jawaban Anda! Saya mendapat inspirasi untuk bergabung dengan komunitas ini juga atas kontribusi Anda: D
Margon
Senang saya bisa membantu, dan senang mendengar saya inspirasi. : D Selamat datang! Oh, dan jika Anda belum melihatnya, tips untuk bermain golf di Jawa dan tips untuk bermain golf di <semua bahasa> mungkin keduanya tertarik untuk dibaca. Selamat menikmati! :)
Kevin Cruijssen
Terima kasih! :) Saya sudah membaca semua tips dan banyak mengintai sebenarnya sebelum memposting! Semoga saya bisa menjawab lebih banyak di masa depan!
Margon
3

Excel, 10 byte

=TRUNC(A1)

TRUNC memotong angka ke bilangan bulat dengan menghapus bagian fraksional dari angka tersebut.

Wernisch
sumber
3

R , 13 5 byte

Terima kasih Robin Ryder

trunc

Cobalah online!

Robert S.
sumber
2
Ada konsensus bahwa dapat diterima untuk menjawab dengan fungsi atau program lengkap. Di sini, bentuk fungsinya hanya 5 byte .
Robin Ryder
2

Ruby , 11 byte

proc &:to_i

Saya memilih yang ini karena ini membedakan dirinya dari lambda yang biasanya digunakan pegolf Ruby kami (untungnya, ia memiliki bytecount yang sama dengan solusi "tradisional"):

->n{n.to_i}

Cobalah online!

Nilai Tinta
sumber
2

ReRegex , 12 byte

\..+//#input

Cobalah online!

ReRegex adalah bahasa pemrograman yang cocok dan menggantikan berulang-ulang sampai tidak ada yang cocok.

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
sumber
2

JavaScript, 6 byte

x=>x^0

Cobalah online!


JavaScript, 8 byte

Menggunakan built in adalah 2 byte lebih lama ...

parseInt

Cobalah online!

tsh
sumber
Juga x=>~~x? Masih 6 byte.
mherzig
2

Kode mesin 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

Input adalah nilai presisi tunggal di lokasi memori A(a DD), output adalah nilai integer di lokasi memori B(a DW).

8087 pertama-tama harus dimasukkan ke dalam putaran menuju mode nol dengan menetapkan kata kontrol ( 0F7FH). Kemudian muat nilai floating point dan simpan kembali ke integer.

640KB
sumber
2

Tong ,19 17 13 byte

Ini menghasilkan beberapa karakter tambahan yang tidak diinginkan. Juga, ini keluar dengan kesalahan. (Sekarang kita perlu input terbalik!)

?'(:\.>')"([,
Sebuah'_'
sumber
Keluar dengan kesalahan diizinkan secara default
EdgyNerd
2

Spasi (dengan vii5ard compiler ), 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]

Huruf S(spasi), T(tab), dan N(baris baru) ditambahkan hanya sebagai penyorotan.
[..._some_action]ditambahkan sebagai penjelasan saja.

Cobalah online. Anda harus menyalin-tempel kode sendiri (perhatikan bahwa SE mengonversi tab menjadi banyak spasi!) Untuk menjalankan kode di vii5ard Whitespace-compiler online. Saat mengklik jalankan, ia akan meminta input (yaitu -285.5), dan setelah mengklik enter akan melanjutkan dan menghasilkan -283.

Penjelasan dalam pseudo-code:

Integer i = STDIN as integer
Print i as integer

Spasi hanya dapat menggunakan I / O sebagai bilangan bulat atau karakter tunggal, jadi dalam hal ini akan membaca input sebagai bilangan bulat dan mengabaikan karakter trailing lainnya. Yaitu -283.5atau -283abc5keduanya akan menjadi input (dan dengan demikian output) sebagai-283 .

Sayangnya ini di atas tidak berfungsi pada TIO karena dua alasan (semua kompiler Whitespace sedikit berbeda ..):

  1. Ini akan memberikan no parsekesalahan ketika kita mencoba membaca input sebagai integer, yang bukan integer yang valid. Jadi, alih-alih kami akan membaca satu karakter pada satu waktu, dan berhenti (dengan kesalahan) segera setelah kami menemukan .atau tidak ada input lagi (yaitu 50/ -50).
  2. Dalam vii5ard compiler juga dimungkinkan untuk menekan 0 dengan adil SSN, sedangkan pada TIO memerlukan tambahan Satau T: SSSN/ SSTN. Yang pertama Sadalah Enable Stack Manipulation ; yang kedua Sadalah Push yang mengikuti sebagai integer ; yang ketiga S/ Tpositif / negatif masing-masing; dan setiap S/ Tsetelah itu (diikuti oleh N) adalah angka yang ingin kita dorong dalam biner, di mana S=0dan T=1. Untuk integer 0 bagian biner ini tidak masalah, karena ini 0 secara default. Tetapi pada TIO kita masih harus menentukan positif / negatif, dan dengan sebagian besar kompiler Whitespace lainnya seperti vii5ard tidak.

Spasi (dengan TIO compiler ), 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]

Huruf S(spasi), T(tab), dan N(baris baru) ditambahkan hanya sebagai penyorotan.
[..._some_action]ditambahkan sebagai penjelasan saja.

Cobalah online (dengan spasi, tab, dan hanya baris baru).

Penjelasan dalam 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
sumber
1

05AB1E , 1 byte

ï

Dalam versi lawas (yang ditulis dengan Python), cast to integer builtin berfungsi seperti yang diharapkan untuk memotong nilai desimal.

Cobalah online.

Dalam versi baru 05AB1E (ditulis dalam Elixir) ini hanya berfungsi pada string (meskipun bilangan bulat / desimal / string semua harus dipertukarkan, kecuali mengurutkan lexicographical vs numeric misalnya). Kira saya bisa melaporkan bug ke @Adnan ..

Cobalah online untuk membandingkan input integer / desimal (memberikan hasil yang salah) vs input string (memberikan hasil yang benar).

Kevin Cruijssen
sumber
1
ïberfungsi dengan baik pada non-legacy 05AB1E . Ini input array yang bekerja dengan cara yang aneh.
Grimmy
@ Grim Ah, ini string vs integer / desimal. String berfungsi dengan benar, tetapi bilangan bulat / desimal tidak.
Kevin Cruijssen
1

Aheui (esotope) , 9 byte

방망희

Cobalah online!

Ide dasar dari jawaban segitiga (atau bahasa lain menggunakan input numerik sebagai bilangan bulat).

Fakta yang menyenangkan. 방망희(diucapkan bang-mang-heui( adari ark)) terdengar hampir sama 방망이(diucapkan bang-mang-i( adari ark, isuara sepertiE ), yang berarti kelelawar.

Bagaimana cara kerjanya?

mengambil angka sebagai bilangan bulat.

mencetak nilai sebagai angka.

mengakhiri program.

LegenDUST
sumber
1

PowerShell , 19 byte

$args-replace'\..*'

Cobalah online!

PowerShell secara default melakukan pembulatan bankir , yang merupakan kebalikan dari berapa banyak bahasa yang dibulatkan. Jadi, secara tradisional kami akan gunakan [Math]::Truncate()untuk menghilangkan titik desimal dan bagian desimal apa pun dan mencapai pembulatan "ke nol" yang kami minati di sini. Namun, itu agak lama, jadi menggunakan tip ini , kita dapat membulatkan ke nol dengan secara implisit melemparkan input ke string, melakukan regex -replaceuntuk menghilangkan periode dan apa pun setelahnya, dan meninggalkan output pada pipeline untuk pencetakan implisit.

AdmBorkBork
sumber
Saya tidak berpikir ini akan memberikan hasil yang diinginkan untuk angka negatif.
Octopus
@Octopus Tentu ya? Ini hanya memotong bagian desimal, yang memindahkan angka ke nol apakah dari mengapung positif atau negatif.
AdmBorkBork
Benar ya Lol.
Octopus
1

Segitiga , 3 byte

$.%

Cobalah online!

Triangular mengambil input numerik sebagai integer; nilai desimal apa pun terpotong. Jika dapat diterima hanya meninggalkan input pada tumpukan tanpa mencetaknya, maka solusi ini bisa menjadi:


Segitiga , 1 byte

$

Cobalah online!

Pasang kembali Monica
sumber