ノアの整数リスト


25

前書き:

聞いたことがあると思いますが、ここで非常に簡単な要約を示します。ノアは、大洪水時に箱舟に救うために、地球上のあらゆる種類の動物、オスとメスの2種を集めました。聖書からの実際の引用は次のとおりです。

創世記7:2-3
あらゆる種類のきれいな動物7匹、オスとその仲間、あらゆる種類の汚れた動物2匹、オスとその仲間、空にあるあらゆる種類の鳥7匹、雄と雌、地球の表面に子孫を保存します。
ソース

しかし、この挑戦​​のために、私たちはきれいな/汚れた部分と彼が各動物の7つを取った部分を無視します。この課題は、この部分についてのみです。

あらゆる種類の汚れた動物のうち2 匹、オスとその仲間

チャレンジ:

入力:

正の整数のリストが(ランダムな順序で)与えられます。

出力:

「ノアのリスト」であるかどうかを示す2つの異なる値。これは必要ないする必要がtruthy / falseyのようにも可能性があり、値0/ 1のJava / C#で、または'A'/ 'B'いくつかの例を与えるために、任意の言語で。

リストはいつ「ノアのリスト」ですか?リスト内の整数が正確に2つある場合。

チャレンジルール:

  • I / Oは柔軟です。入力は、整数/浮動小数点数/文字列のリスト/配列/ストリーム、またはSTDINから1つずつ読み取ることができます。出力は、関数またはSTDOUT /ファイルへの出力から返される2つの異なる値です。
  • 入力リスト内の整数をランダムな順序であり、その範囲内で陽性であることが保証されている1n100000
  • 入力リストは空でないことが保証されています。
  • 2を超える整数(2、4、6、8など)が存在することは誤りです。つまりは、[6,4,4,6,4,7,4,7]あなたはまだこのような同等のペアを作成することができますが、falseyです[[4,4],[4,4],[6,6],[7,7]]

一般的なルール:

  • これはであるため、バイト単位の最短回答が優先されます。
    コードゴルフ言語では、非コードゴルフ言語で回答を投稿しないようにしてください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。
  • デフォルトのI / Oルールを使用した回答には標準ルールが適用されるため、STDIN / STDOUT、関数/メソッド、適切なパラメーターおよび戻り値型、完全なプログラムを使用できます。あなたの電話。
  • デフォルトの抜け穴は禁止されています。
  • 可能であれば、コードのテスト(TIOなど)へのリンクを追加してください。
  • また、回答の説明を追加することを強くお勧めします。

テストケース:

Truthy:
[7,13,9,2,10,2,4,10,7,13,4,9]
[1,2,3,1,2,3]
[10,100,1000,1,100,10,1000,1]
[123,123]
[8,22,57189,492,22,57188,8,492,57188,57189,1,1]

Falsey:
[6,4,4,6,4,7,4,7]
[2,2,2,2,2,2]
[5,1,4,5,1,1,4]
[77,31,5,31,80,77,5,8,8]
[1,2,3,2,1]
[44,4,4]
[500,30,1]
[1,2,1,1]
[2,4,6,4,4,4]
[2,23,34,4]
[2,23,3,3,34,4]

12
また、コーランでも。Surah Al-Mumenoon、27節:ですから、私たちは彼にこのメッセージでインスピレーションを与えました:「私たちの視界の中で、私たちの指導の下で箱舟を建設してください。それから、私たちのコマンドと、すべての種、雄と雌、およびあなたの家族-ことばがすでに出てきたものを除いて:そして、悪しき者を支持することなくわたしに呼びかけなさい。彼らは(洪水で)own死するでしょうから。(ユスフ)アリ)
イシャク・カーン

回答:



13

05AB1E、4バイト

¢<PΘ

オンラインでお試しください! またはテストスイートとして

説明

¢      # count all occurrences of each element in the input list
 <     # decrement each
  P    # product
   Θ   # is equal to 1

ああ、私はを準備していました¢2QPが、使用するΘことも素晴らしい代替手段です。:)
ケビンクルーッセン

私は3を持っていると思っていました{ιËが、もちろん、整数が4回発生すると失敗します。
グリムミー


8

R、20バイト

入力メソッドの変更によるdigEmAllのおかげで-6バイト

any(table(scan())-2)

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

FALSEノアのリストである場合に出力し、TRUEます。整数だけでなく、あらゆる入力タイプで機能します。

リスト内の各値のカウントを計算し、カウントのいずれかが2と異なるかどうかを確認します。


6バイトを節約する標準入力から入力を取得できます。オンラインで試してください!
digEmAll

@digEmAllありがとう。私はチャレンジ規則を読み違え、これは許可されていないと考えました。
ロビンライダー




6

Perl 6、18バイト

{so.Bag{*}.all==2}

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

  • .Bag入力リストをBag---多重度を持つセットに変換します。
  • {*} すべての多重度を抽出します。
  • .all 多重度の論理積を作成します。
  • == 2 多重度が2の場合、それぞれが真となる別の論理積の論理積になります。
  • so ジャンクションを単一のブールに折りたたみます。

5

3
また10バイト:[:*/2=1#.=私は本当にそのキャップを削除したいが、どのように理解することはできません。
コール

1
@coleでこれを試してみたところ、解決策が見つかりました。あなたは本当にあなたがキャップ削除したい場合はできません2*/@:=1#.=、また、10バイト
コナー・オブライエン

@cole素敵な代替品!
ガレンイワノフ

@ ConorO'Brienはい、@:ここでも便利です。
ガレンイワノフ

1
@GalenIvanovはモナドを愛さなくてはならない=ので、ニッチなゴルフシナリオで非常に奇妙に役立ちます
コール

4

MS SQLサーバ2017152の 150 146バイト

CREATE FUNCTION f(@ NVARCHAR(MAX))RETURNS
TABLE RETURN SELECT IIF(2=ALL(SELECT
COUNT(*)FROM STRING_SPLIT(@,',')GROUP BY
PARSE(value AS INT)),1,0)r

読み取り可能なバージョン:

CREATE FUNCTION f(@ NVARCHAR(MAX)) RETURNS TABLE RETURN
  SELECT IIF(2 = ALL(SELECT COUNT(*)
                     FROM STRING_SPLIT(@, ',')
                     GROUP BY PARSE(value AS INT)), 1, 0) AS r

SQL Fiddleで試してみてください!

-2バイト、Kevin Cruijssenのおかげ


1
エイリアスを使用しないためcCOUNT(*)?の後に削除することはできません。
ケビンクルイッセン

@KevinCruijssen、あなたは正しい、ありがとう。
アンドレイ・オデゴフ

4

Haskell61 45バイト

import Data.List
all((2==).length).group.sort

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

12バイトの@KevinCruijssenと、さらに4バイトの@nimiに感謝します。

Haskellの最初の答えですが、驚くほど簡単にできました。おそらくたくさんゴルフができます。適例...


3
私はHaskellを知りませんが、そうなると確信していall(True==).map(2==)ますall(2==)。:)
ケビンクルーッセン

4
...に移動lengthallますall((2==).length).group.sort。関数に名前を付ける必要はありませんf=。つまり、ドロップします。
nimi

実際、all(2==)GHCiでテストを行っていた時期を見落としていました。KevinとNimiに感謝します。答えを更新します。
J.サレ

4
...ああ、将来の使用のために: all(True==)ですand
nimi

4

JavaScript(ES6)、37バイト

Noahに対してfalseを返しますまたは真の非ノアのために。

a=>a.some(v=>a.map(x=>t-=v==x,t=2)|t)

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

コメント済み

a =>               // a[] = input
  a.some(v =>      // for each value v in a[]:
    a.map(x =>     //   for each value x in a[]:
      t -= v == x, //     decrement t if v is equal to x
                   //     (i.e. if v appears exactly twice, t is decremented twice)
      t = 2        //     start with t = 2
    )              //   end of map()
    | t            //   yield t, which is supposed to be equal to 0
  )                // end of some()

3

APL(Dyalog Unicode)、8バイト SBCS

匿名の暗黙の接頭辞関数。返品0/を1

∧/2=⊢∘≢⌸

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

 左引数としての各値と、右引数としてのその値の出現のインデックスに対して、以下を呼び出します。

 正しい引数(オカレンス)を集計して
 から
 してから、左側の引数を無視して返します

2= どの集計が2であるかを示すブールリスト

∧/ AND-reduction(つまり、それらはすべて本当ですか?)


3

PowerShell66 37 26バイト

マジーのおかげで-11バイト

!(($args|group|% c*t)-ne2)

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

グループ化して$l、一致する値のすべてのカウントを取得します。次に、このリストから2のすべてのカウントを除外します。リストが空の場合、ノア番号です。それ以外の場合は、まだ2以外のカウントが入力されます。リストに何TrueFalse入力しないと、空の場合と生成された場合に生成されます


1
値のバランスが取れていないと失敗します。つまり、[1,2,1,1]のようにカウントが4で、ユニークのカウントが2であるため、ノアではなくてもノアとして解決されます。
有効期限が切れたデータ

@ExpiredData Heck
ヴェスカー

私は...それだけでは動作しません実現する前に、別の言語でこのアプローチを試してみました
データ期限切れ

1
¯\ _(ツ)_ /¯ 26
mazzy

1
@mazzyありがとう。group存在するものであることをすべて忘れました
ヴェスカー

3

PHP、60バイト

function($a){return!array_diff(array_count_values($a),[2]);}

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

PHPにはこのための優れた組み込み機能がありますが、20文字でarray_count_values()はありますが、それほどゴルフには適していません。


PHPには、長い名前の素晴らしいビルトインが常にあります。
Night2

3

Mathematica、25 24バイト

MatchQ[{{_,2}..}]@*Tally

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

このTally関数は、フォームのリストを返します。このリストは、すべてのカウントが2 かどうかをチェックするパターンと照合されます。{{element, count}, ...}


3

アタッシェ、16バイト

${All&x!{_~x=2}}

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

説明

${All&x!{_~x=2}}
${             }    lambda with input x
  All&x!{     }     over each element _ of x:
         _~x            check that the number of occurrences of _ in x
            =2          is 2

代替案

17バイト: {All&_!`=&2@`~&_}

18バイト: {All[`=&2@`~&_,_]}

23バイト: Same@2&`'@Sum@Table[`=]

25バイト: Same«2'Sum@Table[`=,_]»

25バイト: Same<~2'Sum@Table[`=,_]~>

25バイト: {Same[2'Sum@Table[`=,_]]}

35バイト: {Commonest@_==Unique@_and _[0]~_=2}


3

TI-Basic、47バイト

Input(L1
SortA(L1
not(remainder(dim(L1,2)) and prod(not(△List(L1))=seq(remainder(I,2),I,1,-1+dim(L1

私はTI-Basicの大ファンです。本当にどんな目的にも適した言語ではありませんが、プログラミング(およびゴルフ)を楽しんでいます。

このコードはどのように機能しますか?

まず、リストをソートします。

次に、△List関数を使用して、ソートされたリストの要素間の差である別のリストを生成します。(たとえば、△List({1,3,7,8})は{2,4,1}を生成します)。リストのすべての非ゼロ要素をゼロに、すべてのゼロを1に変換するこのリストには適用されません。

次に、プログラムは結果のリストがパターンに適合することを確認します {1, 0, 1, 0, ...}に。これは、元のリストがNoahリストである場合にのみ真になります。

いくつかのエッジケースをキャッチするために、リストの長さが均等であるという追加のチェックもあります。

テストケースのスクリーンショットを次に示します。

Some test cases Some more test cases




3

ジュリア30文字 26バイト

!a=all(x->2==sum(a.==x),a)

このトリックをありがとう、H.PWiz!

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


1
!a=all(x->2==sum(a.==x),a)26バイトまで持つことができます。NB。このサイトでバイト単位でカウントすることをお勧めします
H.PWiz

どうもありがとうございました!!匿名関数を使用(ab)できることを知りませんでした
user3263164


2

VDM-SL、64バイト

f(a)==forall y in set inds a&card{x|x in set inds a&a(x)=a(y)}=2

説明

VDMは、主に2次論理ステートメントのように機能します。

forall y in set inds a                //Bind y to each of the indices of a

{x|x in set inds a&a(x)=a(y)}         //build a set of the indices of a who have the same
                                      //value as the value at y

card {...} = 2                        //and check the cardinality of that set is 2

VDMをTIOできないので、デバッグセッションからの出力を次に示します。


オンラインコンパイラはおそらくないでしょうが、テストケース(の一部)のスクリーンショットを検証として追加してもらえますか?:)
ケビン・クルーッセン

@KevinCruijssenは、バグを修正するためにいくつかのバイトを節約しました。これにより、おそらくコード自体が理解しやすくなりました。説明も追加します:)
期限切れのデータ





2

Excel、45バイト

=SUM(IF(FREQUENCY(A:A,A:A)=2,1))=COUNT(A:A)/2

列Aのデータを想定します。これは列Aのセル以外のセルに入力されます。ペアがある場合はTRUEを、ペアが一致しない場合はFALSEを返します

        FREQUENCY(A:A,A:A)                     Counts how many of each value there is
     IF(                  =2,1)                If this is 2, add value of 1 to array otherwise 0
=SUM(                          )               Sum the count in that array that have a exactly 2
                                 COUNT(A:A)/2  Count how many total values in column
                                =              If this is equal, return TRUE else FALSE

/ 2を削除して合計に.5を追加しようとしましたが、これは機能しませんでした。
<> 2の頻度を数えてみましたが、これは正しい量を返しませんでした。


2

オクターブ / MATLAB、22 21バイト

@(x)any(sum(x==x')-2)

数値ベクトルを入力し0、ベクトルが条件を満たしている場合に出力する無名関数または1

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

説明

@(x)                   % define anonymous function with input x
            x          % x
               x'      % x transposed and conjugated
             ==        % equality comparison, element-wise with broadcast. Gives a
                       % square matrix
        sum(     )     % sum of each column
                  -2   % subtract 2, element-wise
    any(            )  % true if and only if any value is not zero

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