ゼロに向かって丸める


14

これは簡単なタスクです。正または負の実数を指定して、ゼロに近い次の整数に丸めます。

チャレンジ

  • 1つの正または負の実数の合理的な形式(stdin、関数など)で入力を行います。

  • この数値を「ゼロに向かって」丸めます-これが正の場合は切り捨て、負の場合は切り上げます。

  • 番号を返すか、コンソールに出力します。

テストケース

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

ルール

楽しんで! より多くのジミーの課題が近日公開予定


3
月I出力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よりも人気があることを示している
a'_」

1
Err ...なぜ賛成票ですか?これは非常に些細な答えです...
MilkyWay90

それはあなたのコードの素晴らしい説明だと思います。:)
チャスブラウン

3
@ChasBrown私はそうは思わない...説明は標準的な口径の説明でもない。
MilkyWay90

@Chasは、説明が彼自身のものよりも無限に完全であることを指摘していると思います。
prl

21

2
申し訳ありませんが、私はあなたをninja'ed(codegolf.stackexchange.com/a/190673/83048
MilkyWay90

2
あら!しかし、あなたはPython 3を使用しています... :)
チャスブラウン

確かに、Python 2でも動作することを知っておくべきです
MilkyWay90

残念ながら、あなたは約1分で
竹のようになった

3
奪われたぜ!:)
チャスブラウン

12

Perl 5、2 -p056l15バイト

<>

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

それはどのように機能しますか?

-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

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


l15はそう\nではありません\r\nl12になります。ただし、TIOでも同じように見えます。
グリムミー

第二の選択肢のために、またそこだ-Minteger -p $_/=1
ナウエルFouilleul

4
あなたはバイト数のフラグを含める必要があるため、第一の溶液は、実際には8バイトです
ジョン・ドヴォルザーク

2
@JohnDvorakは、実際にはメタポストcodegolf.meta.stackexchange.com/questions/14337/…に従って、フラグはバイトを追加しませんが、言語の異なるバージョンとしてカウントします。
ニックケネディ

@NahuelFouilleul私もその1つについて考えましたが、2バイトに逆になったので問題ではありませんでした。
Xcali

6

ラビリンス六角形、3バイト

指摘してくれたFryAmTheEggmanに感謝します。

?!@

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

どうやって?

LabyrinthとHexagonyは、できるだけ早くあなたに教えます!...

? - 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
これは、マーティンの他の言語の一部にも当てはまる場合がありますが、まったく同じプログラムがHexagonyで機能します
FryAmTheEggman

3
へえ、私はいつも六角形で答えを作りたかった。しようとせずにそれを行うことは、私が起こる可能性があると思った最後のことでした!
ジョナサンアラン

IO@バックハンドでも同じように機能し&.@、Befungeでも機能します。おそらく、整数入力を備えた多くの言語で、整数処理のみが同じになります。
Jo King

@JoKingだから、誰かが整数のI / Oを持つ言語を見つけて、stdinからstack / listにすべての数値を読み取って、デフォルトでstdoutに出力するのを待っています。私はそれができると信じており、それはゼロバイトで答えになるでしょう。
tsh

@tshおそらく!
ジョナサンアラン

6

brainfuck、26バイト

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

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

.数値が小数の場合、末尾に出力します

特別なゴルフはあまりありません。ただし、46を引いてキャラクターがaかどうかを確認する代わり.に、5を足して5を掛けて255を求め、さらに1を足してゼロにロールオーバーします。3を減算し、6を乗算し、2を減算すると、同じバイト数になります


6

C(tcc)、 39 21 10バイト

私は実際、Cを使用することを誰も考えていなかったことに非常に驚きました。

f(float i){}

これは、アイデンティティ関数ではないようです。f関数の暗黙的なint型は、浮動小数点を切り捨てます。

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
Margon

私が助けてくれてうれしいし、インスピレーションだと聞いて楽しい。:Dようこそ!あなたがそれらをまだ見ていない場合はああ、と、Javaでゴルフのためのヒント<すべての言語>でのゴルフのためのヒントは、両方をお読み興味があるかもしれません。滞在を楽しんで!:)
ケビンクルーッセン

ありがとうございました!:)私はすでにすべてのヒントを読み、投稿する前に実際にたくさん潜んでいました!将来もっと答えられることを願っています!
マーゴン





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

入力はメモリ位置の単精度値A(a DD)、出力はメモリ位置の整数値B(a DW)です。

8087は、制御ワード(0F7FH)を設定して、最初にゼロモードに丸める必要があります。次に、浮動小数点値をロードし、整数に戻します。






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]説明としてのみ追加。

オンラインでお試しください。オンラインのWhitespace-compiler vii5ardでコードを実行するには、コードを自分でコピーして貼り付ける必要があります(SEはタブを一連のスペースに変換します!)。[実行]をクリックすると、入力(つまり-285.5)が要求され、[入力]をクリックすると、続行して出力されます-283

擬似コードの説明:

Integer i = STDIN as integer
Print i as integer

空白は整数または単一文字としてのみI / Oを使用できるため、この場合、入力を整数として読み取り、他の後続文字を無視します。すなわち、-283.5またはの-283abc5両方が入力(したがって出力)として使用され-283ます。

残念ながら、これは2つの理由でTIOでは機能しません(すべてのWhitespaceコンパイラはわずかに異なります。):

  1. no parse有効な整数ではない整数として入力を読み取ろうとすると、エラーが発生します。そのため、代わりに一度に1文字ずつ読み取り、.入力が検出されるか入力がなくなるとすぐに(エラーで)停止します(つまり50/ -50)。
  2. vii5ardコンパイラでは、just SSNで0をプッシュすることもできますが、TIOでは追加のSor TSSSN/ が必要SSTNです。1つ目Sは、スタック操作の有効化です。2つ目S、整数として続くプッシュです。3番目のS/ Tはそれぞれ正/負です。そして、その後のS/ T(後に続くN)は、バイナリでプッシュする番号です。ここでS=0およびT=1です。整数0の場合、デフォルトでは0であるため、このバイナリ部分は重要ではありません。しかし、TIOでは、ポジティブ/ネガティブを指定する必要があり、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で記述されている)では、整数へのキャスト組み込みが期待どおりに機能し、10進数値を切り捨てます。

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

05AB1Eの新しいバージョン(Elixirで記述)では、文字列に対してのみ動作します(たとえば、辞書編集と数値の並べ替えを行わない限り、整数/小数/文字列はすべて交換可能である必要があります)。@Adnanにバグを報告できると思います。

オンラインで試して、整数/小数入力(誤った結果を与える)と文字列入力(正しい結果を与える)を比較してください


1
ï非レガシー05AB1Eで正常に動作します。奇妙な方法で機能するのは配列入力です。
グリムミー


1

Aheui(エソトープ)、9バイト

방망희

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

三角形の答え(または他の言語では整数として数値入力を使用)の基本的な考え方。

楽しい事実。방망희(発音bang-mang-heuiaof ark))は방망이(発音bang-mang-iaof ark、のiような音E)とほぼ同じで、コウモリを意味します。

どのように機能しますか?

整数として数値を取ります。

値を数値として出力します。

プログラムを終了します。


1

PowerShell、19バイト

$args-replace'\..*'

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

PowerShellは、デフォルトで銀行家の丸めを行います。これは、他の言語が丸めを行う数とほぼ逆です。したがって、従来は[Math]::Truncate()、小数点と小数部分を取り除き、ここで関心のある「ゼロへの」丸めを達成するために使用していました。しかし、それは少し長いので、このtipを使用して、暗黙的に入力を文字列にキャストし、正規表現-replaceを実行してピリオドとその後のものを取り除き、出力をパイプラインに残すことでゼロに丸めることができます暗黙的な印刷。


これが負の数に対して望ましい結果を与えるとは思わない。
タコ

@Octopusそうですか?これは、小数部分を切り捨てるだけで、正または負の浮動小数点数から数値をゼロに向かって移動します。
AdmBorkBork

そうですね 笑。
タコ

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