ゼロから遠ざかる


24

ゼロから遠ざかる

ゼロに向かっラウンドに触発されました。

任意の合理的な方法で入力された数値を、「ゼロから離れる」ように数値を切り上げます-正の数値は切り上げ、負の数値は切り捨てます。

入力を文字列として(たとえば、STDINを介して)取得する場合は、小数点の有無にかかわらず数値を処理できる必要があります。数値として使用する場合、少なくとも浮動小数点精度(倍精度は不要)または有理数を処理できる必要があります。

必要に応じて、小数点付きの浮動小数点数(42.0など)を出力できます。(または、回答が短くなる場合は、テストケースに浮動小数点と出力整数を出力させることもあります。)

標準的な抜け穴などは許可されません

テストケース

-99.9 => -100
-33.5 => -34
-7    => -7
-1.1  => -2
0     => 0
2.3   => 3
8     => 8
99.9  => 100
42.0  => 42
-39.0 => -39

サンドボックスリンク


STDINなどの文字列コンテキストで数値を使用している.0場合、テストケースが示唆するようにサポートする必要がありますか?
ジョーキング

@JoKing yes-質問を更新して明確にします。これは、実際には、元のケースだったが、その後、サンドボックス内の人が非小数のテストケースを追加することを示唆ので、ええと、ここで我々は申し訳ありませんが、両方である
バリューインク

インスピレーションを与えて
くれてうれしい

それは彼らが違い言うことができないので、整数入力を取ることによって、出力整数前回の挑戦にとてもよくやったすべての言語は、とてもうまく動作しないことをおかしい-0.10.1
ジョー・キング

回答:


15

Excel、13バイト

=ROUNDUP(A1,)

代替案

=EVEN(A1*2)/2

4
EVEN
なんて

13
@tsh「奇数機能」を意味すると思います。
負の7

2
@negativesevenユーザー名がチェックアウトします。:-P
Veky


8

ゼリー、4 バイト

ĊṠ¡Ḟ

整数を生成する数値を受け入れる単項リンク。

オンラインでお試しください!または、テストスイートを参照してください。

どうやって?

ĊṠ¡Ḟ - Link: number, N
  ¡  - repeat...
 Ṡ   - ...number of times: sign of N (repeating -1 is the same as 0 times)
Ċ    - ...action: ceiling
   Ḟ - floor (that)

では¡、負の数に対してどのように機能しますか?私は、それが文書化されないと思う
coinheringaahing caird

1
Jellyのwikiには文書化されていませんが、コードのループを使用して¡繰り返しの性質が実装さfor index in range(repetitions)れています。range([stop=]-1)以降空でstartデフォルト0stepデフォルト1と「正のステップについては、範囲の内容は、r式によって決定されると。」docsr[i] = start + step*ii >= 0r[i] < stop
ジョナサンアラン

¡の動作はPythonの動作に依存してrangeおり、range(-1).__iter__().__next__()すぐにthrowしStopIterationます。
無関係な文字列

6

Python 3、23バイト

lambda i:i-i%(1|-(i>0))

オンラインでお試しください!

xnorのおかげで-1バイト


1
あなたは(1|-(i>0))バイトを節約するために行うことができます(1,-1)[i>0]
7:06のxnor

@xnor素敵な発見、ありがとう!
Jitse

よくやった。62バイトでしたಥ_had:g=lambda r:0if r==0 else(int(r)+r/abs(r)if r/int(r)!=1 else r)
user14492

「|」とは何ですか の前に '-'?
ウィリアム

1
@jaaq私もそのソリューションが本当に好きです!私の最初のアプローチも24バイトでした。
Jitse

5

ゼリー5 4バイト

AĊ×Ṡ

オンラインでお試しください!

これは再帰的な Staxの回答をJellyに移植するため、その回答を確認してください。

ニック・ケネディのおかげで-1バイト

ゼリー6 5バイト

ĊḞ>?0

オンラインでお試しください!

ジョナサン・アランのおかげで-1バイト

これの仕組み

ĊḞ>?0 - Monadic link. Takes a float, x, as argument

   ?  - If:
  > 0 -   x > 0
      - Then:
Ċ     -   ceil(x)
      - Else:
 Ḟ    -   floor(x)

ĊḞ>?06と同じように機能します。
ジョナサンアラン

1
AĊ×Ṡは4で、機能的には最初の回答と同じです。
ニックケネディ

@NickKennedyとジョナサン、提案のためのおかげで、彼らはで編集してきた
coinheringaahing caird

5

Java(JDK)、18バイト

d->d.setScale(0,0)

オンラインでお試しください!

説明

BigDecimal入力および出力としてa を使用します。数値のスケールを設定BigDecimalするメソッドsetScaleがあります。最初のパラメーターはドット区切りの後の桁数で、2番目は丸めモードです。ROUND_UPは「ゼロから離れる」丸めであり、値がある0ため、その値をハードコーディングします。


5

Vim、36バイト/キーストローク

:s/-/-<Space>
:g/\..*[1-9]/norm <C-v><C-a>lD
:s/<Space><cr>

オンラインでお試しください!またはすべてのテストケースを検証してください!

説明:

:s/             " Replace...
   -            "   A dash
    /-<Space>   "   With a dash and a space

:g/                             " On Every line matching this regex...
   \.                           "   A dot
     .*                         "   Followed By anything
       [1-9]                    "   Followed by a digit other than 0
            /norm               " Run the following keystrokes...
                  <C-v><C-a>    "   Increment the number by 1
                                "   This also conveniently places our cursor just before the dot
                            l   "   Move one character right
                             D  "   Delete everything after the cursor

:s/             " Replace...
   <Space>      "   A space
                "   (With nothing)

使用$F-a <esc>の代わりと最初の行及びマクロ/条件としての代わりに、:gおよび:normバイト29を与えるtio.run/##HczBCoJAFEZhWva/QpuLCNbizoxalBXRInqJMpjGCYVwmkx7/...
KritixiのLithos


4

C#(Visual C#コンパイラ)41バイト27バイト 24バイト

s=>(int)s+Math.Sign(s%1)

オンラインでお試しください!

ここで最初の投稿、それを楽しんで、それが好き願っています。ここでC#の場所が空いていると感じた

-14 tnxから@expired data
-3 tnxから@ night2


1
このサイトへようこそ、そして最初の回答がいいです!コードゴルフをお楽しみください!
coinheringaahing caird

27バイト...まだいくつかの保存が必要
期限切れデータ

@Expired、いやが素敵な、コーディングのこの種のは、私のように見えますが、ライブラリ全体のことを忘れ、心が答えとして、それを投稿すること一見とても奇妙だった
hessam hedieh

1
@ Night2、コメントのtnx、答え全体を入力せず、Code golf submission機能を使用しました、最後に自分の言葉を少し追加しましたが、編集のためにそのコード行を変更しただけで、すぐに忘れましたリンクを更新して、最初のステップに戻ります。一度だけ変更します。ここでちょっと変更します。とにかく、ヒントも
tnx

1
TIOリンクを24バイトバージョンに編集しましたが、コード行自体はまだ27バイトバージョンです。
バリューインク

4

Runic Enchantments18 16バイト

1µ-i:'-A{*+'.A@

オンラインでお試しください!

(ゼロから離れて)0.999999を「加算」し、結果をフロアします。µは、言語の演算子の無限小に最も近いものです。Trunc(x)コマンドが適切に機能することで、回答が0入力としてサポートされるようになりました。


1
@JoKing Oof. Good catch. It's doing a divide by input to get the "sign" of the input value, which of course, divides by 0 when the input is 0. There's no (good) way around that right now. Will need this commit first. I'll poke Dennis (side benefit, the answer will get shorter).
Draco18s

1
@JoKing Answer now handles 0 correctly.
Draco18s



2

Retina 0.8.2、38バイト

\.0+
.
\b9+\..
0$&
T`9d`d`.9*\..
\..*

オンラインでお試しください!リンクにはテストケースが含まれます。説明:

\.0+
.

数値が整数でないことを確認するために、小数点の後のゼロを削除します。小数点の後に数字がない場合、次の2つの一致は失敗します。

\b9+\..
0$&

整数部分がすべて9sである場合、0インクリメントをオーバーフローさせるためにaのプレフィックスを付けます。

T`9d`d`.9*\..

数値の整数部分を増やします。

\..*

数値の小数部分を削除します。



2

JavaScript(ES6)、20バイト

n=>n%1?n<0?~-n:-~n:n

オンラインでお試しください!

コメント済み

n =>        // n = input
  n % 1 ?   // if n is not an integer:
    n < 0 ? //   if n is negative:
      ~-n   //     return -(floor(-n) + 1) = -floor(-n) - 1
    :       //   else:
      -~n   //     return -(-(floor(n) + 1)) = floor(n) + 1
  :         // else:
    n       //   return n unchanged

16バイトの回答(n=>(~~n-n%1)%1+n)に対する回答を書いていたのは、コードが-1〜1の数字で機能しないことが判明するまででした。左!
ガストファンデワル


2

MathGolf、5バイト

‼σ±ü*

オンラインでお試しください!

説明

演算子の使用法を見つけるのは素晴らしいことです。

‼       apply next two operators to (implicit) input
 σ      sign (-1, 0, or 1)
  ±     absolute value
   ü    ceiling of that absolute value
    *   multiply the rounded absolute value with the sign

2

PHP、30バイト

<?=0^$argn-=0<=>fmod($argn,1);

オンラインでお試しください!

数値が整数でない場合、符号に基づいて-1(負の小数の場合)または1(正の小数の場合)が追加され、新しい数の整数部分が出力されます。


PHP、32バイト

<?=[ceil,floor][$argn<0]($argn);

オンラインでお試しください!

基本的にfloor、0未満の場合は入力の出力、それ以外の場合は入力ceil


PHP、34バイト

<?=($argn>0?:-1)*ceil(abs($argn));

オンラインでお試しください!





1

APL(Dyalog Unicode)、15バイト

{⍎'⌈⌊'[0>⍵],⍕⍵}

オンラインでお試しください!

シンプルなDfn。を使用し⎕IO←0ます。

どうやって:

{⍎'⌈⌊'[0>⍵],⍕⍵}  Main function, argument ⍵.
            ⍕⍵   Stringified argument
           ,     Appended to
      [0>⍵]      This item... (0 if  is positive or 0, else 1)
  '⌈⌊'           of this string (which are the functions Ceiling and Floor, respectively)
                Executed as APL code.

1

sed、131バイト+ -rフラグ用2バイト

/^-?[^.]*(\.0*)?$/bQ
s/^(-?)9/\109/
s/([0-8]9*)\..*$/_\1/
h
s/.*_//
y/0123456789/1234567890/
G
s/(.*)\n(.*)_(.*)/\2\1/
:Q
s/\..*$//

非ゴルフ

#!/bin/sed -rf

# identify integers
/^-?[^.]*(\.0*)?$/ b isInt

# add a leading 0 if we'll need it later
s/^(-?)9/\109/

# convert to format: -?[0-9]_[0-8]9*
s/([0-8]9*)\..*$/_\1/

# move the part that will remain constant into the hold buffer
h
s/.*_//

# [0-8]9* can be incremented via character substitution
y/0123456789/1234567890/

# reassemble parts
G
s/(.*)\n(.*)_(.*)/\2\1/

:isInt
# Get rid of anything after the decimal point
s/\..*$//


1

JavaScript(node.js)、30 23 21バイト

s=>~~s+Math.sign(s%1)

C#の回答に触発されました。

-7バイトの@Value Inkと@Gust van de Walに感謝します!

再びありがとう、@ Gust van de Wal、さらに-2バイトありがとう!


Why use += when + will do the trick in this case? -1 byte
Value Ink

代わりにparseInt()、私は使用したい~~ようなスタートを行うか、または別のビット演算子で、|0または^0バイトの別のチャンクを保存するために最後に
ガストバン・デ・ウォルマートは、

@ValueInkうわー、私が書いた理由がわからない+=、それを指摘するthx
射手座

外側の括弧は削除できます
ガスト

@GustvandeWalああ、私はそれを知りませんでした!ありがとう
射手座




0

Red, 46 bytes

func[n][(pick[0 1]n = t: to 0 n)*(sign? n)+ t]

Try it online!

The slightly more readable version is 2 byte longer (those long function names!):

func[n][to 1(sign? n)* round/ceiling absolute n]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.