配列に2以外のものが含まれているかどうかを判別


20

数値または配列で構成される配列を取得し、2s のみが含まれる場合に出力します。

出力は真実または偽の値である必要があります(これにより回答が破壊される場合はご容赦ください)

真実のテストケース

[2]
[2,2]
[[2],[2,2],2]
[]
[[],[]]

Falseyテストケース

[1]
[22]
[2,2,2,1]
[[1,2],2]

標準の抜け穴は禁止されています。

デフォルトのIOルールが適用されます。

コードゴルフ、最少バイトが勝ちます!


配列を表す文字列を取得できますか?
小麦ウィザード

配列内に数字と他の配列以外のオブジェクトがありますか?
ウィートウィザード

配列と数字のみが存在し、配列を表す文字列は問題ありません。
アタコ

2
どんな数字?Compex int、compex float、float int、int、負ではない?
-RosLuP

1
FTRおよび適切な数学的思考の名において:配列に[[2]]は2 含まれませ
反時計回りを回すのをやめた

回答:


8

MATL、3バイト

2=p

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

技術的には、これは単に

2=

ゼロ要素を含む配列は偽物ですが、これは安価に思えます。


0を含むリストは偽物ですか?ちょっと、あなた。
エリックアウトゴルファー

ATacoがユニークな出力ペアが有効であると述べたので、私は2バイトバージョンが有効だとは思わない。
エリックアウトゴルファー

2=空の行列では失敗すると思いますか?
スチューウィーグリフィン

@stewiegriffinそれは処理する必要がある奇妙なエッジケースのように見えますが、便利に機能します:オンラインで試してみてください!
DJMcMayhem

はい、2=p正常に動作します。結局、短いバージョンでは2=ありません。また、「奇妙なエッジケース」は2つのテストケースです。:
Stewie Griffin

15

パイソン243の 40バイト

f=lambda l:l>=[]and all(map(f,l))or l==2

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


この回答を投稿した時点では、このメタコンセンサスに従って、エラーをスローする/エラーをスローしないことで出力することが依然として許可されていました。したがって、26バイトのこの回答は有効でした。

f=lambda l:l==2or map(f,l)

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


1
これは、要素がリストであるかどうかを確認するためのきちんとした方法です。
アドナン

これが私がそのコンセンサスが好きではない理由です。それは本当にパイソンゴルフを台無しにします。
小麦ウィザード

ただし、終了コードを使用するためall、を必要としません。エラー以外は真実です。
小麦ウィザード

11

プロローグ(SWI)43 33バイト

匂い... 再帰

10バイトを節約してくれたEmignaLeaky Nunに感謝します!

コード

a([]).
a([X|T]):-(X=2;a(X)),a(T).

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

説明:

非Prologユーザーの場合、リストは次の方法でフォーマットされます[Head | Tail]

Headリストの最初の要素であり、尾は残りのリストです。 ここでテストしてください!。ここで重要なケースは、1つの要素を持つリストの末尾がに等しいこと[]です。ここでテストできます

% State that an empty array is truthy.
a([]).

% If the list is not empty (covered by the previous line), we need to check
% whether the Head is equal to 2 or whether the head is truthy.
% After that, we only need to check if the remaining list is truthy.
a([Head | Tail]) :- (Head = 2; a(Head)), a(Tail).


9

オクターブ、13バイト

@(x)~any(x-2)

すべてのテストケースを確認します。

これは、入力引数を1つとる匿名関数xです。2すべての要素から減算し、ゼロ以外の要素があるかどうかを確認します。trueすべての値がゼロの場合に取得する出力を無効にします。

これx-2は、空のマトリックスを含むすべてのサイズのマトリックスで機能するため[]です。

x-2 入力に空の行列が存在しない場合は十分です。





6

JavaScript(ES6)、22 19 23 22バイト

a=>!/[^2,]|22/.test(a)

試して

f=
a=>!/[^2,]|22/.test(a)
console.log(" "+f([2])+": "+JSON.stringify([2]))
console.log(" "+f([2,2])+": "+JSON.stringify([2,2]))
console.log(" "+f([[2],[2,2],2])+": "+JSON.stringify([[2],[2,2],2]))
console.log(" "+f([])+": "+JSON.stringify([]))
console.log(" "+f([[],[]])+": "+JSON.stringify([[],[]]))
console.log(f([1])+": "+JSON.stringify([1]))
console.log(f([22])+": "+JSON.stringify([22]))
console.log(f([2,2,2,1])+": "+JSON.stringify([2,2,2,1]))
console.log(f([[1,2],2])+": "+JSON.stringify([[1,2],2]))


良いですね!もっと短くすることができるのだろうかと思うが、疑う。
アーナウド

ありがとう、@ Arnauld; まだそれを改善する方法を見つけていません。
シャギー



4

Mathematica、24バイト

Cases[t=Flatten@#,2]==t&

Trueまたはを返す純粋な関数False。後にFlattenネストされた配列をINGの、それを呼び出してtCases[t,2]「パターン」と一致する要素のリストを返す2と、==tそれは全体のリストのかどうかのチェックを。

Mathematica、29バイト

(#//.{2->{},{{}..}->{}})=={}&

短くはありませんが、もっと楽しいです。inputから始まり#、結果の変化が止まるまで2つの置換ルールが適用されます(//.):最初に、すべて2のsがsに置換され{}ます。エントリがすべて空のセット({{}..})であるリストは、空のセットに(繰り返し)置き換えられます。残りが空のセット(=={})の場合、勝ちます。


Outgolfedですが、ここで何が行われているのかを本当に知りたいです。
パベル

4

Haskell、36バイト

匿名関数で、を受け取り、Stringを返しますBool

使用 (all((==2).fst).(reads=<<).scanr(:)[]) "[2,2,2,1]"

all((==2).fst).(reads=<<).scanr(:)[]

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

使い方

  • Haskellには組み込みの混合型リストがないため、引数として文字列を使用します。
  • scanr(:)[] 文字列のすべての接尾辞のリストを生成します。
  • (reads=<<)各接尾辞の先頭で数値を解析し、成功をタプルのリストに結合しようとします(n,restOfString)
  • all((==2).fst)解析されたすべての数値がであるかどうかをチェックします2

どうnot.all(`elem`"2,[]")ですか?
-zbw

@zbwのような数字のために失敗します22
Ørjanヨハンセン

4

Python 2、38バイト

lambda l:l.strip('[],2')==l*('22'in l)

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

スペースなしの文字列を受け取り、ブール値を出力します。

のすべての文字'[],2'を削除lすると空の文字列が得られるかどうかを確認します。また22、それがサブストリングではないことを確認します。サブストリングである場合、入力lは空のストリングの代わりに使用され、除去の結果と比較され、常に失敗します。


4

Ruby、28 23 22バイト-GBで5バイト節約

->x{x.flatten-[2]==[]}

「フラット化」は非常に長いにもかかわらず、正規表現ベースのソリューションや、ベースケースのエラーをレスキューしなければならない再帰的なものよりもまだ短いです。ただし、Rubyの組み込みのセットと配列の融合は、驚くほど便利な場合があります。


1
x.flatten.uniq == [2]
ニックM

1
@NickM- []またはのようなテストケースでは動作しません[[],[]][2,*x].flatten.uniq==[2]少し長い
-ymbirtt

1
x.flatten | [2] == [2]は短くなります。
GB

@GBとx.flatten-[2]==[]まだ短いです。ヒントをありがとう!
-ymbirtt

1
そして、まだ正規表現勝利:codegolf.stackexchange.com/a/120781/18535 :-)
GB

3

JavaScript(ES6)、26バイト

f=a=>a.map?a.every(f):a==2

テストケース


あなたはf=それを参照したので数える必要があります。
リーキー修道女

@LeakyNun確かに。一定。
アーナウルド


3

R、28バイト

function(x)!any(unlist(x)-2)

unlist(x)(ネストされた)リストをベクトルに変換します。次に2、そのベクトルから減算されます。any(警告付きで)数値を論理値に変換し、TRUEs があるかどうかを確認します。これは!て出力されます。

これはネストされたリストで機能します。これはunlist、デフォルトでは、初期リストのすべてのリストエントリをリストから外すために再帰的に機能するためです。

これはまた、空のリストで動作unlist(list())となりnumeric()、空の数値ベクトル。強制any作ることlogical()であると解釈され、FALSEany、その後に反転TRUEすることにより!ます。


1
pryr::f(!any(unlist(x)-2))数バイト節約します。
BLT

これも同じ長さall(unlist(x)==2)です。
ジュゼッペ

またはあなたも言うことができるany(unlist(x)-2)、一貫した返すTRUE平坦化配列の非2値と一貫性がある場合はFALSE、すべての値がある場合2...
ジュゼッペ

1
@Giuseppeしかし偽TRUEとしてカウントされるかどうかわからない:/
JAD




2

網膜14 11バイト

^(\W|2\b)+$

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


\Wそんなに良い基準とは思えない:そう2.2ではない数字だが2、私はそれが一致すると思う
アーロン

@Aaron配列に10進数を含めることができるかどうかについて、OPに尋ねました。彼らが浮動小数点数が配列に存在すると述べている場合、私は自分の提出を変更します。
KritixiのLithos

昨日、RosLupが同じ質問をして、まだ答えが出ていないようです。OPがすぐに明らかになることを願っています!
アーロン


2

JavaScript(ES6)、53 50 48バイト

_=>(_+"").split`,`.map(c=>!c?2:c).every(c=>c==2)

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

テストケース:

let f =

_=>(_+"").split`,`.map(c=>!c?2:c).every(c=>c==2)

console.log(f([2]))
console.log(f([2,2]))
console.log(f([[2],[2,2],2]))
console.log(f([]))
console.log(f([[],[]]))

console.log(f([1]))
console.log(f([22]))
console.log(f([2,2,2,1]))
console.log(f([[1,2],2]))


f([])そしてf([[],[]])truthyする必要があります
アルノー

@Arnauld今は正しいですか?
アルジュン

私はそう思う。:
アーナルド

!c代わりに数バイト節約できると思いますc==""
シャギー

@Arnauldそれを指摘してくれてありがとう。このチャレンジは、実際には19バイト目にCMCとして投稿されました。そのCMCには、[[]、[]]などのテストケースに関して何も言うことがありませんでした。メインサイトに課題が投稿されたとき、ルールを見ずにすぐにソリューションを追加しました(CAPTCHAを要求しました!)。もう一度ありがとう!:)
アルジュン


2

Java 8、126 55 27バイト

s->s.matches("(\\W|2\\b)+")

のポート @KritixiLithosの驚くべき網膜の回答を除いた、^...$以来、String#matches常に全体の文字列に一致し、追加^...$暗黙のうちに。

-2を私に思い出させるため@Jakobのおかげでバイト^...$するために必要ではありませんString#matches

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


リストソリューションに関するすべての作業を無効にするのは嫌ですが、文字列を強制して文字列ソリューションを使用することはできませんか?
ヤコブ

@Jakob説明の意味ですか?現在、正規表現のStringソリューションを使用しています。文字列ソリューションは移植であるため、リストの元の回答とその説明をそのまま保持しました。リストソリューションを削除するだけですか?または、文字列ソリューションの説明を追加しますか?
ケビンCruijssen

リストソリューションがある限り、その中に文字列ソリューションを使用して短縮することもできます。同様にboolean c(java.util.List l){return(l+"").matches("^(\\W|2\\b)+$");}、右の仕事でしょうか?リストソリューションのさらなるゴルフを計画している場合に備えて、それを指摘したかっただけです。
ヤコブ

1
ああ、あなたは削除することで2つのバイトを失う可能^$するので、正規表現でString.matches文字列全体に対してのみテスト。
ヤコブ

@Jakobリストの回答を完全に削除し、Java 8に変換して、を削除しました^...$。私は過去にそれを倍のかなり多くを使用したにも関わらず、それについて忘れてしまった...
ケビンCruijssen

1

Python 2 44 43 42バイト

テイク xリストの文字列表現として。これは、例のように表現にスペースがないことも前提としています。

lambda x:set(x)<=set("[],2"*0**("22"in x))

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


説明

これらは両方とも、入力の文字列表現の文字を受け取り、それ以外の文字[], 2が含まれているかどうかを判別します。これを行うには、セットにキャストし、それらのキャラクターだけのセットと比較します。ただし、2以外の数字(2桁または22桁など)がある場合、これは失敗します。この場合にパッチを適用するには、セットを作成するために使用する文字列にxcontains かどうかの否定を掛けます"22"。それが含まれている場合、これは空のセットになり、そうでない場合は前と同じになります。



失敗[22]
リーキー修道女

@LeakyNun修正済み
ウィートウィザード

@LeakyNunあなたの提案は失敗しました[]
ウィートウィザード

lambda x:set(x)<=set("[],2"*-~-("22"in x))-1
ovs

1

オーム、6バイト

∙e]Å2N

用途 CP-437エンコードをます。

説明:

∙e]Å2E
∙e           ■Evaluate the input to form an array
   Å         ■any(              ,             )
  ]          ■    flatten(input)
    2N       ■                   lambda x:x!=2
             ■implict end of any and print

1

PHP、46バイト

<?=!preg_match('/:"(?!2")/',serialize($_GET));

@JörgHülsermann例を挙げていただけますか?すべてのテストケースが機能しているようです。ブラウザを介さずにテストする場合、のスカラー値を$_GET文字列として渡しますか?
user63956

<?=!preg_match('/:"(?!2")/',$argn);入力は、シリアル化された配列の文字列表現です-11バイト
ヨルグヒュルザーマン

1

PHP <7.0、29バイト

JSONエンコードされた文字列配列として入力

<?=!ereg("22|[013-9]",$argn);

PHP <7.0、42バイト

非推奨の関数eregを使用します

<?=!ereg("22|[013-9]",json_encode($_GET));

PHP、50バイト

trueの場合は1、falseの場合は何も出力しません

-1以外の削除の場合はバイト !

または、true 1の場合は+ 1バイト、false 0は+前に追加!

<?=!preg_match('#22|[013-9]#',json_encode($_GET));

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


2
$r変数は必要ありません<?array_walk_recursive($_GET,function($i){$i-2&&die;})?>1
-user63956

1

Pyth、6バイト

!-.nQ2

私のCJamの答えに非常に似ています。私はまだPythが初めてなので、ゴルフをすることができるものがあれば教えてください。

説明:

    Q   Input:     [[[], [2]], [1]]
  .n    Flatten:   [2, 1]
 -   2  Remove 2s: [1]
!       Not:       False
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.