3つの入力整数の差


30

入力として3つの整数x、y、およびzを受け取る関数diffを実装します。これらの数値の1つを別の数値から引くと3番目の数値が得られるかどうかを返します。

Test cases:
diff(5, 3, 2) yields True because 5 - 3 = 2
diff(2, 3, 5) yields True because 5 - 3 = 2
diff(2, 5, 3) yields True because 5 - 3 = 2
diff(-2, 3, 5) yields True because 3 - 5 is -2
diff(-5, -3, -2) # -5 - -2 is -3
diff(2, 3, -5) yields False
diff(10, 6, 4) yields True because 10 - 6 = 4
diff(10, 6, 3) yields False

関数に名前を付ける必要はありません。デフォルトの入力メソッドを実装できますが、上記の例は厳密なガイドラインではありません。


5
これは合理的な挑戦ですが、Pythonや関数に制限する必要はありません。一般に、そのような制限は参加を制限するために眉をひそめられます。また、いくつかのテストケースを含める必要があります。
-xnor

ちょっと修正しました。これで十分です!
ミール

2
良く見えます!一部の言語には機能がないため、特定のプログラムではデフォルトのインプットメソッドを許可することを強くお勧めします。また、関数に別の名前を付けることも名前を付けないこともできます。
-xnor

最初の段落と最後の段落は矛盾しているため、再確認するために、関数を記述する必要がありますか、それとも完全なプログラムで問題ありませんか?
Sp3000

完全なプログラムは問題ありません。デフォルトの入力方法に従うことを除いて、可能な限り少ない制限を課します。python3の例はすてきです!
ミール

回答:



51

Python 3、21バイト

lambda*l:sum(l)/2in l

2つの数値が他の数値に加算されると、3つの数値の合計は他の数値の2倍になるため、合計の半分はリストの要素になります。Python 3は、数字がでは3.0なくのように指定されない限り、フロア分割を回避するために必要です3


7

ES6、31バイト

(a,b,c)=>a+b==c|b+c==a|c+a==b

関数に名前を付ける必要がある場合は、5バイトを追加しますdiff

編集:@Alex Lのおかげで2バイト保存


あなたは置き換えることによって、2つのバイトを保存することができます|||(と思う)
HyperNeutrino

@AlexL。ああ、私はブール値を返す必要があるのであまりにもハングアップしました。
ニール

ブール値であっても、|両方の値がブール値である場合にのみブール値を返します。だからtrue | false == true、しかし3 | 5 == 7。同じことが適用さ&&&ます。唯一の違い|||:それはブールに来るとき|第1の値と第2の値を取り、見つけるORこれら二つの。||最初の値を取ります。trueの場合、return true、それ以外の場合、2番目の値を返します。
ハイパーニュートリノ

@AlexL。true | falseJavaScriptで1と評価されます(これは真実ですが、ブール値ではありません)。
ニール

ああ。申し訳ありませんが、私は実際にJSを使用していません。私は主にJavaを使用しています。Javaから情報を入手しました。;)
HyperNeutrino

4

APL、8 5バイト

+/∊+⍨

これは、配列を受け入れてブール値(APLでは0/1)を返すモナド関数列です。xnorのPython 3 answerと同じアルゴリズムを使用します

説明:

   +⍨  ⍝ Double the input (+⍨x is the same as x+x)
  ∊    ⍝ Test the membership of
+/     ⍝ The sum of the input

オンラインで試す

デニスのおかげで3バイト節約できました!


4

JavaScriptのES6、38の 34 33バイト

x=>x.some(a=>2*a==x[0]+x[1]+x[2])

非常に単純な匿名関数であり、Pythonの回答から借用しています。入力xを配列として受け取ります。trueまたはを返しますfalse。Molarmanfulとjrichに削られたバイト

各数値を引数としてとる38バイトのプログラム:

(a,b,c)=>[a,b,c].some(t=>t==(a+b+c)/2)

試してみてくださいx=>x.some(a=>a==eval(x.join`+`)/2)。4バイト節約できます。
ママファンロール

@ӍѲꝆΛҐӍΛПҒЦꝆありがとう!ナイストリック。
コナーオブライエン

x=>x.some(a=>2*a==x[0]+x[1]+x[2])動作するようです。
-jrich

@jrichありがとう!ナイストリック!
コナーオブライエン

3

Oracle SQL 11.2、49バイト

SELECT 1 FROM DUAL WHERE(:1+:2+:3)/2IN(:1,:2,:3);

@xnorソリューションの書き直し、彼への称賛。


3

J、6バイト

+/e.+:

J.jsで試してください。

使い方

+/e.+:    Monadic verb. Argument: A
    +:    Double the elements of A.
+/        Compute the sum of the elements of A.
  e.      Test for membership.

3

DUP、31文字/ 39バイト

[2ø2ø2ø++2/\%3ø^=3ø2ø=3ø3ø=||.]

Try it here!

初めてのDUP提出!Unicodeはカキです。

無名関数/ラムダです。使用法:

5 3 2[2ø2ø2ø++2/\%3ø^=3ø2ø=3ø3ø=||.]!

説明

[                               {start lambda}
 2ø2ø2ø                         {duplicate 3 inputnums}
       ++                       {push sum(3 popped stack items)}
         2/\%                   {push (popped stack item)/2}
             3ø^=3ø2ø=3ø3ø=     {for all 3 inputs, -1 if inputnum=sum/2; else 0}
                           ||   {check if any of the 3 resulting values are truthy}
                             .  {output top of stack (boolean value)}
                              ] {end lambda}

私は、その者を考えていないどのようにエンコードする作品...
コナー・オブライエン

øコードポイント248があるため、ISO 8859-1としてエンコードされている場合は1バイトです。
デニス

1
...通訳限り、罰金であることができ、実際に仕事 ISO 8859-1エンコードされたソースファイルと。
マーティンエンダー

@MartinBüttnerそれをテストすることは不可能だと思う。
ママファンロール


3

Perl 6の、20の 19バイト

バイトカウントが等しい2つの関数があるため、両方を追加します。あなたの空想をくすぐるいずれかを感謝します。

{@_@_.sum div 2}
{@_∋+~(@_.sum/2)}

使用法:呼び出し可能な変数にいずれかを割り当てます。
編集:バイト削減のための@ b2gillsに感謝


{@_∋@_.sum div 2}そして{@_∋+~(@_.sum/2)}両方の短い
ブラッド・ギルバートはb2gills

おかげでああ、私はいつもあなたが義母方法として合計を呼び出すことができます忘れて
ホットキー

何をするの?
ユーザー112638726

「∋」は「含む」中置演算子であり、左が右を含むことを示します。左が右の要素であると言うのは、「ε」「要素」操作の姉妹です。これらは両方ともset opsであり、perl 6は実際には他の多くのものもサポートしています!docs.perl6.org/language/…–
ホットキー

3

Java 8(ラムダ関数)、29バイト

// Lambda Signature: (int, int, int) -> boolean

(a,b,c)->a+b==c|a+c==b|b+c==a

Javaコードのゴルフソリューションは通常、プログラムが完全に機能するプログラムである必要がない場合にのみ短くなります。(*咳咳*クラス宣言、メインメソッド)


2

Pyth、6バイト

/Q/sQ2

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

入力を整数のリストとして期待します。他の2つを減算して数字を作成できない場合は0を出力し、少なくとも1つが可能な場合は> 0を出力します。

説明:

@xnorの答えと同じアルゴリズム

/ Q / sQ2

   sQ#リスト内のすべての要素を合計します
  / 2#合計を2で割る
/ Q#リスト内の上記の数のオカレンスをカウント

2

05AB1E、非競合

4バイト、バカなことのために競合しない。コード:

DO;¢

0を偽として、> 0を真実として使用します。CP-1252エンコードを使用します。


これを非競合にする「愚かな」ことは何ですか?
カイルKanos

@KyleKanos スタックのトップを半分にするInfo.txtですでに書い;ています。しかし、私はそれを実装したことはありません-_-。
アドナン

1
あ。それがどのように行われるかを見ることができます
カイルカノス

2

コナ 16文字

{((+/x)%2)_in x}

スタックからベクターを取得し、それらを合計し、2で除算し、ベクター内にあるかどうかを判別します。真実として1を、偽として0を返します。

経由で呼び出された

> {((+/x)%2)_in x} [(2;3;5)]
1
> {((+/x)%2)_in x} [(2;3;4)]
0

2

jq、17文字

xnorPython 3の答えの別の書き直しです。Upvotesはそれに行くべきです。)

contains([add/2])

入力:3つの整数の配列。

サンプル実行:

bash-4.3$ jq 'contains([add/2])' <<< '[5, 3, 2]'
true

bash-4.3$ jq 'contains([add/2])' <<< '[2, 3, -5]'
false

オンラインテスト:

jq、18文字

(17文字のコード+ 1文字のコマンドラインオプション。)

contains([add/2])

入力:3つの整数のリスト。

サンプル実行:

bash-4.3$ jq -s 'contains([add/2])' <<< '5 3 2'
true

bash-4.3$ jq -s 'contains([add/2])' <<< '2 3 -5'
false

2

MATL、5バイト

@xnorの優れたアプローチの使用:

s2/Gm

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

s    % implicitly input array of three numbers. Compute their sum
2/   % divide by 2
G    % push input again
m    % ismember function: true if sum divided by 2 equals some element of the input

ブルートフォースアプローチ、12バイト

Y@TT-1h*!s~a

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

Y@       % input array of three numbers. Matrix with all
         % permutations, each one on a different row
TT-1h    % vector [1,1,-1]
*        % multiply with broadcast
!s       % transpose, sum of each column (former row)
~a       % true if any value is 0


2

CJam、10 12バイト

l~:d_:+2/&

@MartinBüttnerのおかげで2バイトが削除されました。

これにより、数値は真実の結果として表示され、出力は偽の結果として表示されません。

ここで試してみてください

l~     e# read line and evaluate. Pushes the array
:d     e# convert array to double
_      e# duplicate
:+     e# fold addition on the array. Computes sum of the array
2/     e# divide sum by 2
&      e# setwise and (intersection)

2

真剣に、6バイト

,;䫡u

falseの場合は0、それ以外の場合は正の整数を出力します。



2

Haskell、20バイト

(\l->sum l/2`elem`l)

xnorのソリューションを使用します。


以来(/)、整数のための仕事と挑戦は整数を要求しない、私はこれが実際に有効なソリューションであることはよく分かりません。
ゼータ

私はそれを見ませんでした。型変換はコードの一部である必要がありますか?このように:(\l->sum l/2`elem`l).map fromIntegerそして次のように使用できます:((\l->sum l/2`elem`l).map fromInteger) ([2,3,5] :: [Integer])。私は...入力は、私が入力タイプは、それらが書かれただけの方法を指定しなかったと思った3.0ではなく3にする必要はありませんでしたので、XNORのpython 3の使用に言及して私を投げたものを推測します
basile-ヘンリー

型が本当に問題である場合、入力としてリストを取っているという事実は問題ではありませんか?
バジルヘンリー

いい視点ね。私はそれについてOPに尋ねます。しかし、他のすべての答えもリストを使用していることを考えると、それは大丈夫だと思います(また、タプルを使用するときに関数がチェックを入力しなかった理由もわかりました)。
ゼータ

はい入力タプルの代わりのリストでもないが、だった場合sumでもelem動作します、私はおそらくそれがリストだっ指定されているはずですが、この答えは(Haskellで)提出XNOR何文字通りあるので、私はそれが必要だったとは思いませんでした。:)
バジルヘンリー

2

Perl、24 + 4 = 28バイト

$^+=$_/2 for@F;$_=$^~~@F

-paX実行するにはフラグが必要で1、Trueとして出力され、Falseとしては何も出力されません。

-X すべての警告を無効にします。

$ perl -paXe'$^+=$_/2 for@F;$_=$^~~@F' <<< '5 3 7'
$ perl -paXe'$^+=$_/2 for@F;$_=$^~~@F' <<< '5 3 8'
1

感動的なもの。これに触発された:($_=eval(y/ /+/r)/2~~@F同じコマンドラインオプションを使用)。
マナトワーク

@manatwork興味深い使い方tr:)
andlrc

-XPerlバージョン[5.10 .. 5.18)を指定することで、これを省くことができます。(スマートマッチは5.10で導入され、実験的な警告は5.18で導入されました。これら2つの間のバージョンは、~~なしで-X
正常に動作し


1

パイロン、8

xnorのアルゴリズムのさらに別の実装。

i:As2A/_

使い方:

i    # Get command line input.
:A   # Initialize a constant A.
  s  # Set A to the sum of the stack.
2    # Push 2 to the stack.
A    # Push A to the stack.
/    # Divide A/2
_    # Check if the top of the stack is in the previous elements.
     # Print the stack on quit.

1

SpecBAS-36バイト

xnors式を使用

1 INPUT a,b,c: ?(a+b+c)/2 IN [a,b,c]

trueの場合は1、falseの場合は0を出力します


1

05AB1E6 5 バイト

;Oм_O

@xnorのPython 3アルゴリズムのポートを作成して-1バイト。

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

·        # Halve every item in the input-array
         #  i.e. [10,6,4] → [5.0,3.0,2.0]
 O       # Sum this array
         #  i.e. [5.0,3.0,2.0] → 10.0
  м_O    # Output 1 if the input-array contain this sum, 0 otherwise
         #  i.e. [10,6,4] and 10.0 → 1

м_O短縮できると確信していますが、どのコマンドを使用する必要があるのか​​わかりません。


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