Sıfıra doğru yuvarla


14

Bu basit bir görev. Pozitif veya negatif bir gerçek sayı verildiğinde, sıfıra yakın bir sonraki tam sayıya yuvarlayın.

Meydan okuma

  • Bir pozitif veya negatif gerçek sayının makul bir formundan (stdin, fonksiyon vb.) Girdiyi alın.

  • Bu sayıyı "sıfıra doğru" yuvarlayın - bu pozitifse aşağı yuvarlayacağınız ve negatifse yuvarlayacağınız anlamına gelir.

  • Numarayı iade edin veya konsola gönderin.

Test senaryoları

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

kurallar

İyi eğlenceler! Jimmy meydan okumaları yakında


3
İ çıkış Mayıs 3.00için 3.14?
tsh

1
@A_ Hata mesajları stderr'deyse. Ve çıktınız stdout'ta. Varsayılan olarak izin verilir.
tsh

1
Ayrıca 0.01ve -0.01vermelidir 0...
roblogic

2
Hmm, bu bir kod golf için mantıksız önemsiz görünüyor. Çoğu dilde bunun için bir yerleşik vardır, değil mi? Görünüşe göre tüm girdi ve çıktıların string olduğunu varsayıyoruz?
Ahtapot

2
3.00 kesinlikle bir tamsayıdır. Daha kesin olarak, standart matematiksel gösterimlerde ve birçok programlama dilinde, "3.00" gösterimi, bir tam sayı olan 3 sayısını belirtir; ancak birçok programlama dilinde, sayının kayan nokta biçiminde kaydedileceğini gösterir. (Ancak, biçimine bakılmaksızın tamsayıdır.)
Tanner Swett

Yanıtlar:


13

Jöle , 1 bayt

r

Tam bir program (monadik bir Bağlantı olarak bir uzunluk listesi döndürür).

Çevrimiçi deneyin!

Nasıl?

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 bayt

int

Çevrimiçi deneyin!

Ondalık noktadan sonraki basamakları keser.

NOT: Bu önemsiz bir cevaptır. Lütfen oylamadan önce diğer cevaplara bir göz atın


18
Bu, Python 3'ün Python 2'den daha popüler olduğunu göstermektedir.

1
Hata ... Neden upvotes? Bu oldukça önemsiz bir cevap ...
MilkyWay90

Kodun mükemmel bir açıklaması olduğunu düşünüyorum. :)
Chas Brown

3
@ChasBrown Ben öyle düşünmüyorum ... açıklama standart bir kalibre açıklama bile değil.
MilkyWay90

@Chas, açıklamanın kendisinden çok daha eksiksiz olduğunu belirtti.
prl


12

Perl 5 -p056l15 , 2 bayt

<>

Çevrimiçi deneyin!

Bu nasıl çalışıyor?

-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

Veya daha geleneksel bir cevabı tercih ediyorsanız:

Perl 5 , 6 bayt

$_=int

Çevrimiçi deneyin!


l15 değil \n, öyle \r. \nl12 olur. Yine de TIO'da aynı görünüyor.
Grimmy

ikinci seçenek için, orada da var-Minteger -p $_/=1
Nahuel Fouilleul

4
İlk çözüm aslında 8 bayttır, çünkü bayt
John Dvorak

2
@JohnDvorak aslında codegolf.meta.stackexchange.com/questions/14337/… meta yazısına göre , bayraklar bayt eklemez , ancak dilin farklı bir sürümü olarak sayılır.
Nick Kennedy

@NahuelFouilleul Ben de bunu düşündüm, ama 2 bayt başka yoldan var çünkü bu önemli değildi.
Xcali

6

Labirent ve Altıgen , 3 bayt

FryAmTheEggman'a işaret ettiği için teşekkürler Hexagony yazmıştım!

?!@

Çevrimiçi deneyin! & Çevrimiçi deneyin!

Nasıl?

Labirent ve Hexagony size mümkün olduğunca erken bilgi verecek! ...

? - 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
Bu, Martin'in diğer dilleri için geçerli olabilir, ancak aynı program Hexagony'de çalışır .
FryAmTheEggman

3
Heh, hep Hexagony'de bir cevap vermek istedim. Denemeden yapmak, olabileceğini düşündüğüm son şeydi!
Jonathan Allan

IO@Backhand aynı şekilde çalışır ve &.@Befunge'de. Muhtemelen tamsayı girişi olan birçok dil ve sadece tamsayı kullanımı aynı olacaktır
Jo King

@JoKing Bu yüzden birinin tamsayı i / o ile bir dil bulmasını ve ayrıca stdin'den yığın / listeye kadar tüm sayıları okumasını ve ardından varsayılan olarak stdout'a yazdırmasını bekliyoruz. Bir tane olabileceğine inanıyorum ve bu sıfır bayt cinsinden bir cevap olacaktır.
tsh

@tsh büyük olasılıkla!
Jonathan Allan

6

beyin , 26 bayt

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

Çevrimiçi deneyin!

.Sayı ondalık sayıysa izleyen çıktılar

Bir karakterin a olup olmadığını kontrol etmek için 46 çıkarmak yerine .5'i ekler ve 255'i elde etmek için 5 ile çarparım, sonra sıfıra yuvarlanmak için bir tane daha eklerim. 3 çıkarma, 6 ile çarpma ve 2 çıkarma aynı bayt sayımıdır


6

C (tcc), 39 21 10 bayt

Aslında hiç kimse C kullanmayı düşünmediği için oldukça şaşırdım.

f(float i){}

Bu göründüğü gibi bir kimlik işlevi değildir. F işlevinin örtülü int türü kayan noktayı keser.

TIO

İnsanları kandırmak daha az olasıdır, ancak daha kısa bayt uzunluğuna sahiptir:

f(int i){}

TIO


floatKayan nokta değerlerinin girişi için farklı bir kayıt kullandığından bu ile çalışmayın .
Hauleth



3

Java (OpenJDK 8) , 15 bayt 9 bayt

s->(int)s

Çevrimiçi deneyin!

@ kevin-cruijssen teşekkürler


Bir arayüz lambda kullanarak 9 bayt böylece ilkel ve basit bir döküm kullanabilirsiniz (int). Ve burada bir yöntem referansı kullanarak eğlenceli 15 bayt alternatifi. :)
Kevin Cruijssen

1
@KevinCruijssen 9 bayt cevabı işaret ettiğiniz için teşekkür ederiz! 15baytlık alternatif çözümler de mükemmel! Ayrıca cevaplarınızın büyük hayranı! Katkılarınız için topluluğa katılmam için ilham aldım: D
Margon

Yardım edebildiğim için mutluyum ve ilham verdiğimi duymak eğlenceli. : D Hoş geldiniz! Henüz onları görmedim eğer Oh ve Java golf için ipuçları ve <tüm dillerde> içinde golf için ipuçları hem okumaya ilgi gösterebilir. Keyfini çıkarın! :)
Kevin Cruijssen

Teşekkür ederim! :) Zaten tüm ipuçlarını okudum ve göndermeden önce çok şey gizledim! Umarım gelecekte daha fazla cevap verebilirim!
Margon

3

Excel, 10 bayt

=TRUNC(A1)

TRUNC sayının kesirli kısmını kaldırarak sayıyı tamsayı olarak keser.




2

Ruby , 11 bayt

proc &:to_i

Bunu seçtim çünkü kendisini Ruby golfçülerinin tipik olarak kullandığı lambdaslardan ayırıyor (neyse ki, "geleneksel" çözümle aynı bayt sayısına sahipti):

->n{n.to_i}

Çevrimiçi deneyin!


2

ReRegex , 12 bayt

\..+//#input

Çevrimiçi deneyin!

ReRegex, hiçbir eşleşme kalmayıncaya kadar eşleşen ve değiştirilen bir programlama dilidir.

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 makine kodu, 14 bayt

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

Girdi bir bellek konumu içinde tek hassas bir değerdir A: (a DD), çıkış bellek konumunda tamsayı değeridir B, (a DW).

8087 ilk olarak kontrol kelimesi ( 0F7FH) ayarlanarak sıfır moduna döndürülmelidir . Sonra kayan nokta değerini yükleyin ve bir tam sayıya geri saklayın.





2

Fıçı ,19 17 13 bayt

Bu, bazı arkadan yazdırılamayan karakterler çıktılar. Ayrıca, bu bir hata ile çıkar. (Şimdi ters girdiye ihtiyacımız var!)

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


2

Boşluk ( vii5ard derleyicisiyle ), 18 17 bayt

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

Harfler S(boşluk), T(sekme) ve N(yeni satır) yalnızca vurgulama olarak eklendi.
[..._some_action]yalnızca açıklama olarak eklendi.

Çevrimiçi deneyin. Kodu çevrimiçi Whitespace-compiler vii5ard'da çalıştırmak için kodu kendiniz kopyalayıp yapıştırmanız gerekir (SE'nin sekmeleri bir sürü boşluğa dönüştürdüğünü unutmayın!). Çalıştır'ı tıklattığınızda, bir giriş (yani -285.5) isteyecek ve enter'a tıkladıktan sonra devam edecek ve çıkacaktır -283.

Sahte kodda açıklama:

Integer i = STDIN as integer
Print i as integer

Boşluk yalnızca G / Ç'yi tamsayı veya tek karakter olarak kullanabilir, bu durumda girdiyi tamsayı olarak okur ve diğer diğer karakterleri yok sayar. Yani -283.5veya -283abc5her ikisi de giriş (ve dolayısıyla çıkış) olarak olacaktır -283.

Ne yazık ki bu yukarıdaki iki nedenden dolayı TIO üzerinde çalışmaz (tüm Whitespace derleyicileri biraz farklıdır.):

  1. Bu bir verecektir no parsebiz geçerli bir tamsayı değil tamsayı olarak bir giriş, okumaya çalışırken hata. Bunun yerine, her seferinde bir karakter okuyacağız ve karşılaştığımız anda (bir hata ile) dururuz .veya daha fazla girdi olmaz (yani 50/ -50).
  2. Vii5ard derleyicisinde 0'ı sadece itmek de mümkündür SSN, oysa TIO'da ek Sveya T: SSSN/ gerekir SSTN. İlk Solan Yığın Manipülasyon etkinleştirme ; İkinci Sise tamsayı olarak ne şu itin ; üçüncü S/ Tsırasıyla pozitif / negatif; ve herhangi bir S/ Tsonrasını (arkasından an N) ikiliyi itmek istediğimiz sayıdır, nerede S=0ve T=1. Tam sayı 0 için bu ikili kısım önemli değildir, çünkü varsayılan olarak 0'dır. Ancak TIO'da hala pozitif / negatif belirtmek zorundayız ve vii5ard gibi diğer birçok Whitespace derleyicisiyle değil.

Boşluk ( TIO derleyicili ), 48 bayt

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

Harfler S(boşluk), T(sekme) ve N(yeni satır) yalnızca vurgulama olarak eklendi.
[..._some_action]yalnızca açıklama olarak eklendi.

Çevrimiçi deneyin (yalnızca ham alanlar, sekmeler ve yeni satırlarla).

Sahte kodda açıklama:

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 bayt

ï

Eski sürümde (Python ile yazılır), tamsayı yerleşikine yayınlama ondalık değerleri kısaltması beklendiği gibi çalışır.

Çevrimiçi deneyin.

05AB1E'nin yeni sürümünde (Elixir ile yazılmıştır) sadece dizelerde çalışır (örneğin tamsayılar / ondalık sayılar / dizgiler birbirinin yerine geçebilir olsa da, örneğin sözlükbilimsel ve sayısal olarak sıralanmadığı sürece). Sanırım @Adnan'a bir hata bildirebilirim ..

Tamsayı / ondalık girişi (yanlış sonuç vererek) ile dize girişlerini (doğru sonuçlar vererek) karşılaştırmak için çevrimiçi deneyin .


1
ïeski olmayan 05AB1E üzerinde iyi çalışıyor . Garip bir şekilde çalışan dizi girişi.
Grimmy


1

Aheui (esotop) , 9 bayt

방망희

Çevrimiçi deneyin!

Üçgen cevaptan (veya başka dillerden herhangi biri, sayısal girdiyi tamsayı olarak alır) temel fikir.

Eğlenceli gerçek. 방망희(telaffuz bang-mang-heui( aarasında ark)) ile hemen hemen aynı sesler 방망이(telaffuz bang-mang-i( aarasında ark, igibi sesler Ebat anlamına gelir).

Nasıl çalışır?

sayıyı tamsayı olarak alır.

değeri sayı olarak yazdırır.

programı sonlandırır.


1

PowerShell , 19 bayt

$args-replace'\..*'

Çevrimiçi deneyin!

PowerShell varsayılan olarak bankacıların yuvarlamasını yapar , bu da diğer pek çok dilin yuvarlama işleminin tam tersidir. Yani, geleneksel [Math]::Truncate()olarak ondalık noktayı ve herhangi bir ondalık kısmı soyup burada ilgilendiğimiz "sıfıra" yuvarlamayı elde ederiz. Ancak, bu biraz uzun, bu yüzden bu ipucunu kullanarak , girdiyi dolaylı olarak bir dizeye dökerek, noktadan -replaceve ondan sonraki her şeyden kurtulmak için bir regex gerçekleştirerek ve çıktıyı boru hattında bırakarak sıfıra doğru yuvarlayabiliriz . örtük yazdırma.


Bunun negatif sayılar için istenen sonucu vereceğini sanmıyorum.
Ahtapot

@Octopus Emin misiniz? Sadece ondalık bölümü keser, bu da sayıyı pozitif veya negatif şamandıralardan sıfıra taşır.
AdmBorkBork

Doğru, duh. Lol.
Ahtapot

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.