それは整数ですか?


26

数は全体それが小数部分を有する負でない整数である場合。そう08して233494.0、全体が、しばらく1.1して0.001233494.999はありません。


入力

お使いの言語のデフォルトのベース/エンコーディングの浮動小数点数。

たとえば、デフォルトの整数表現バイナリラムダ計算はなり教会の数字。ただし、Pythonのデフォルトの整数表現は、10進数の10進数であり、単項ではありません。

出力

truthyの入力は、全体であれば値falsyそうでない場合、値。

ご使用の言語が8桁までの小数精度のみをサポートしている場合は、1.000000002全体と見なすことができます。

入出力は、任意の標準I / Oメソッドを介して実行できます


テストケース

Input        -> Output
332          -> true
33.2         -> false
128239847    -> true
0.128239847  -> false
0            -> true
0.000000000  -> true
1.111111111  -> false
-3.1415926   -> false
-3           -> false

得点

同様に、最短提出勝利。がんばろう!


2
@StephenLeppikバニラパリティチャレンジ、Hello World、またはTruth Machineほど簡単ではありません。(実際には、それらのほとんどよりも難しいです。)
MD XF

入力を、分数を表す2つの数値として取得できますか?
-LyricLy

@LyricLyいいえ、それは一部の言語でははるかに簡単であり、他の言語では不要です。
MD XF

整数は負でない整数であることに注意してください。これを反映するように最初の文を更新してください。また、整数が負ではなく、負の数の偽の出力が有効であることを示す場合は、負の数のテストケースを追加できます。
トーマスワード

1
@ThomasWard、そのウィキペディアの記事はあなたに完全には同意していないようです: (負の整数を含む)」。タイトルを読んで整数について尋ねます。
ilkkachu

回答:


13

APL(Dyalog)、3バイト

⌊≡|

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

f←技術的な制限のためにTIOリンクに追加されていることに注意してくださいが、通常は必要ありません。


それはエレガントです!私は私の答えに不要な天井を追加した理由私は....知らない
ガレン・イワノフ

4
@GalenIvanovこれはただfloor(n) == abs(n)です。
エリックアウトゴルファー




6

、3バイト

£ΘN

オンラインでお試しください! 3番目のテストケースはTIOでタイムアウトになるため、数桁を切り捨てました。ローカルで実行しようとしましたが、6GBを超えるメモリを使用し、コンピューターが途切れ始めたため、数分後に殺しました。理論的にはある時点で終了するはずです...

説明

これは、チャレンジの説明に非常に直接対応しています。

£ΘN  Implicit input: a number.
  N  The infinite list [1,2,3,4...
 Θ   Prepend 0: [0,1,2,3,4...
£    Is the input an element of this list?

λx → floor(x) == abs(x)ハスクではどのように見えますか?
リン

@Lynnそれは§=⌊aなので、1バイト長くなります。
ズガルブ


5

///、94バイト、ハードコードされた入力

/=/\/x://:/\/\///-0/-:.0/.:.|/|:-|/|:0=1=2=3=4=5=6=7=8=9=|x/|:||/true:x:/-:/.:/|/+:++/false/||

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

2つの終端垂直線の間の入力(||

ストリップ-00...0.00...0、にすべての残りの桁を変換xSは、残り数がまだ持っているかどうかをテストxした後秒.または-続きません.

この言語は、ネイティブtruthy / falsey値を持っていない、現在出力しているので、truthyとfalseyとしてカウントいるものに応じて、7つのバイトまで救うことができるtruefalseなく、例えば、に変更することができ、TおよびF87バイトのためにそれが許可されています場合。


5

オクターブ、15バイト

@(x)any(x==0:x)

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

これは@flawrのHaskell answerで使用されているアプローチに基づいています

それは15までのバイト数をもたらしますが、それはからのすべての整数のリストを作成し、(悪気は意図していない)恥非効率的である0xしてあれば見xに含まれています。


オクターブ、18バイト

@(x)fix(x)==abs(x)

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

入力を倍精度の数値として受け取ります。全体がtrueを返します。

丸められたときの入力が入力の大きさと等しいかどうかをチェックします。これは、数値が正の整数である場合のみです。


オクターブ、18バイト

@(x)~mod(x,+(x>0))

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

18バイトの代替ソリューション。悲しいことに、modOctave の関数は暗黙的にa boolをa doubleに変換することはないので、+( )比較は大なりよりも必要です。そうでなければ、この解決策はより短かったでしょう。


オクターブ、18バイト

@(x)x>=0&~mod(x,1)

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

そしてもう1つ... 私は18バイト未満にならないようです。すべて0をtrue >=ではなくtrueにする必要があるため>です。



4

Aceto、6バイト

rfdi±=p
rは入力を取得します
fはfloatに変換します
dとiはそれを複製し、整数に変換します
±はその絶対値をプッシュします(b / cは負の値にできません)
=等しいかどうかを確認します
pは結果を出力します

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



4

QBIC、17バイト

?(:=int(a))*(a>0)

説明

?             PRINT
 (:=int(a))     if the input (: assigns the cmd line param to 'a') equals itself 
                cast to int, -1 else 0
 *              times
 (a>0)          if the input > 0, -1 else 0

どちらかのチェックが失敗した場合、これは0を返します。両方が真の場合、-1 x -1 = 1を返します。



4

C(gcc)、27 28 27 25バイト

-2 PrincePolkaに感謝

#define g(f)!fmod(f,f>=0)

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

(任意のタイプの)gパラメーターを受け取るマクロ「関数」を定義しますf。次に、キャストf mod 1がゼロかどうか、およびf負でないかどうかを確認します。


includefmodは次で定義されているため、バイトカウントにディレクティブのサイズを含める必要があると思いますmath.hそこを参照してください
-HatsuPointerKun

@HatsuPointerKunそれは働きすぎてそれなし
氏Xcoder

2
WindowsベースのCディストリビューションで-lmは必要ないと思います(私のマシンで動作します)
コナーオブライエン

25、#define g(f)!fmod(f、f> = 0)
PrincePolka

4

C#、Java:43バイト

Zacharýのおかげで-1バイトTheLetalCoderのおかげで
-1バイト

int w(float n){return(n==(int)n&&n>=0)?1:0;}

C#には、javaで実行できない特別な33バイトの最適化があります。

bool w(float n){return(int)n==n;}

検査用の

C#コード:

class Program {
    int w(float n){return(n==(int)n&&n>=0)?1:0;}

    static void Main(string[] args)
    {
        var p = new Program();
        float[] fTab = new float[]{
            332,33.2f,128239847,0.128239847f,0,0.0000f,1.1111111111f,-3.1415926f,-3
        };
        foreach (float f in fTab) {
            Console.WriteLine(string.Format("{0} = {1}", f, (p.w(f) != 0).ToString()));
        }
        Console.ReadKey();
    }
}

Javaコード:

public class MainApp {
    int w(float n){return(n==(int)n&&n>=0)?1:0;}

    public static void main(String[]a) {
        MainApp m = new MainApp();
        float testArr[] = new float[]{
                332,33.2f,128239847,0.128239847f,0,0.0000f,1.1111111111f,-3.1415926f,-3
        };

        for (float v : testArr) {
            System.out.println(v + " = " + String.valueOf(m.w(v)!=0));
        }
    }
}

私はあなたが間にスペースを削除することができると思うreturn(
ザカリー

を返すboolと、三項の必要はありません。
TheLethalCoder

@TheLethalCoder boolはJavaには存在しません
HatsuPointerKun

私はJava / C#をよく知らないのですが、作れますreturn(int)n==nか?または、それn==nは単なるintではなくintにキャストしnますか?
ザカリー

1
チェックを逆にし、ブール演算子をビット単位int w(float n){return(int)n!=n|n<0?0:1;}40バイト)に変更することにより、Java 7の回答を3バイト減らすことができます。Java 8 lambdaの場合、さらに短くなります:n->(int)n==n&n>=017 bytes、およびC#の回答にもlambda:n=>(int)n==n&n>=017 bytesと同じです。
ケビンCruijssen

4

Googleスプレッドシート、10バイト

セルからの入力をA1呼び出し、呼び出しセルに出力する匿名ワークシート関数。

=A1=Int(A1


3

Ly35 47バイト

ir"-"=[0u;]pr[["0"=![psp>l"."=[ppr!u;]p<2$]pp]]

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

Lyはフロートをサポートしていますが、現在フロートを作成する唯一の方法は除算を実行することです。入力としてフロートを取る方法はないため、代わりに文字列を手動で確認する必要がありました。

負の数のサポートを追加して13バイトを失いました。


3

JavaScript、14

n=>!(n<0||n%1)

13バイト:n=>!(n-(n|0))
イスマエルミゲル

@IsmaelMiguel。負の数では機能しません。

@ThePirateBay正確な番号は?5、5.1、-5、-5.1、0、0.1、および-0.1で試しました。
イスマエルミゲル

@IsmaelMiguel。(n=>!(n-(n|0)))(-3)戻りますがtrue、戻りfalseます。最後のテストケースを参照してください。

ああ、あなたはそれについて正しいです:/私は質問を読み
イスマエル・ミゲル




3

C#、40 37 29バイト

bool z(float x)=>x%1==0&x>=0;

@Dennis_Eのおかげで8バイト節約されました!

古い回答(37バイト)

bool z(float x){return x%1==0&&x>=0;}

古い古い回答(40バイト):

bool z(float x){return (int)x==x&&x>=0;}

2
30バイトは:bool z(float x)=>x%1==0&&x>=0;あなたは、単一を使用することができます&29バイトのために
Dennis_E

@Dennis_Eありがとう!
おいしいパスタ

x=>x%1==0&x>=0短く、コンパイルFunc<float, bool>
TheLethalCoder

3

JavaScript、17 15バイト

_=>_<0?0:_==~~_

_=>_<0?0:_==(_|0)

間違いを見つけてくれたedc65に感謝します。


3

展開されていないシンクレアZX81、20バイト

 1 INPUT A
 2 PRINT ABS A=INT A

BASICがトークン化されるため、20バイト。

数値が正であり、入力された数値がその整数値と等しい場合、単純に1(true)が出力されます。これらの条件のいずれかが満たされない出力0。


1
これはトークン化された言語ですか?もしそうなら、あなたはあなたの答えでそれを示すべきです。
テイラースコット

1
PRINTであり、以下のように申し訳ありませんが、トークン化はい、それに、すなわち、INPUTは、RAMの1つのバイトであっても> =によるシンクレアBASICの〜癖〜意図機能へ
ショーンBebbers

1
具体的には、各行番号は5バイト+ 1 newline\r\nZX81で同等)で、空白は通常Sinclairの「ワンキープレス」入力システムのためにキーワードに既に含まれているため、バイトとしてカウントされません。実行中に、それはの価値を置くように、それはより多くのバイトを取るAvar stack。各数値は常に5バイトのメモリだと思います。
ショーンBebbers

1
およびZXスペクトルも
-edc65

1
私の知る限り、トークン化モードはまったく同じです(Spectrumにはさらに多くのコードがあります)。リテラル数は6バイトです。「数値タグ」バイトの後に、5バイトの独自の浮動小数点形式でエンコードされた値が続きます)
edc65

3

C、C ++:38 37バイト

ザカリーのおかげで-1バイト

ceilingcatのおかげで-1バイト

int w(float n){return(int)n==n&n>=0;}

検査用の

C:オンラインで試す

Cコード:

#include <stdio.h>
int main() {
    float f[] = { 332,33.2f,128239847,0.128239847f,0,0.0000f,1.1111111111f,-3.1415926f,-3 };
    int t;
    for ( t = 0; t < 9; ++t) {
        printf("%f = %s\n", f[t], w(f[t])?"true":"false");
    }
    return 0;
}

C ++コード:

#include <iostream>
int main() {
    std::initializer_list <std::pair<float,bool>> test{
        {332.f,true}, {33.2f,false}, {128239847.f,true}, {0.128239847f,false}, {0.f,true}, {0.000000f,true}, {1.111111f,false}, {-3.1415926f,false}, {-3.f,false}
    };

    for (const auto& a : test) {
        if (w(a.first) != a.second) {
            std::cout << "Error with " << a.first << '\n';
        }
    }
    return 0;
}

1
これは最大でのみ機能しINT_MAXます。(私はあまり気にしませんが、一部の人は気にします。)
MD XF

return(int)n==n...動作するように変更しますか?
ザカリー

署名されたものの代わりに符号なしのintを使用して1バイトを削ることができます(その場合、 >=0テスト)。return(unsigned)n==n; また、Cでは、さらに4バイトの戻り値の型を省略できます。
トビーSpeight

さらに8バイトを保存できます。w(float n){n=n==(int)n&&n>=0;}
Johan du Toit




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