座標とその値を一致させる


10

3つの入力項目、座標ペアのリスト、2D文字列、および1文字の文字列を指定すると、2D文字列の各座標の文字が1文字と等しいかどうかが出力されます。入力は任意の順序で取ることができ、座標には1インデックスを付けることができます。

2D文字列は、2Dリスト、線のリスト、または2D文字列として取得できます。

例: (0,0), "#_\n__", "#" -> True

文字列は

#_
__

座標(0,0)(左上から)の文字は#です。これは3番目の入力項目に等しい#ので、出力True(または任意の真の値)

例: [(0,0), (1,1)], "#_\n_#", "#" -> True

文字列は

#_
_#

座標の文字(0,0)(1,1)の両方であるが#、その出力は真です。

すべての座標がハッシュに一致する場合にのみ、出力は真になります。ただし、すべてのハッシュが一致する座標を持つ必要はありません。#2D文字列に(一部のテストケースで)単一の文字が出現しない場合でも、出力は不正です。

座標は常に2D文字列の境界内にあると想定できます。

その他のテストケース:(読みやすくするために、1文字を2番目にしています)

[(0,0), (2,1), (3,0)], #

#_##
#_##

True


[(0,0), (1,1), (3,0)], #

#_##
#_##

False (1,1 is not a hash)



[(1,1)], a

#a##
#a##

True


[(4, 0), (3, 0), (2, 0), (1, 0), (0, 0), (0, 1), (0, 2), (0, 3), (1, 3), (2, 3), (2, 2), (3, 2), (4, 2), (4, 3)], ' '


 ####
 #   
   # 

True

最後のテストケースでは、単一の文字列としてスペースを使用し、スペースをハッシュしています。

関連。(この課題の逆)


「\ n」を使用する代わりに、入力が2D配列であると想定できますか?
rahnema1 2017年

@ rahnema1は2D配列ではなく、行の配列/リストです。
Rɪᴋᴇʀ

@EasterlyIrkこれは厄介なI / Oフォーマットの
JungHwan Min

最初の例では座標は形式です(row, column) が、最後の例では座標は形式です(column, row)
rahnema1 2017年

1
座標に1インデックスを付けることはできますか?
user41805

回答:


1

Dyalog APL、8 バイト

座標ペア(行、列)、次に2D配列、文字のリストを要求します。

∧/⎕=⎕[⎕]

[⎕] 座標のプロンプトを表示し、それらを使用してピックを散布する

プロンプト入力(2D配列)

= 選択した要素を比較する

入力(文字)

∧/ すべてが真かどうかを確認します(AND削減)

テストケース⎕IO←0例と一致させるためですが、これは必須ではありません):

最初の例

2番目の例

3番目の例

4番目の例

5番目の例


6

Python、39バイト

入力を受け取ります:

  1. a(x, y)整数座標のリスト
  2. b 文字列のリスト
  3. c 単一の文字列

lambda a,b,c:{b[y][x]for x,y in a}=={c}

2
このサイトでは、関数に名前を付ける必要はありません。を削除できf=ます。PPCGへようこそ!
Rɪᴋᴇʀ

PPCGへようこそ。最初の回答がいいですね。
FlipTack 2017年

4

JavaScript(ES6)、37バイト

入力を受け取ります:

  1. a[x, y]整数座標の配列
  2. s 文字列の配列
  3. c 単一の文字列

(a,s,c)=>a.every(([x,y])=>s[y][x]==c)

4

オクターブ、45 38 29バイト

@(A,B,C)A(1+B*[rows(A);1])==C

charの2D配列との2つの列行列としてのA座標(0ベース)と、一致する文字のを受け取る関数。線形インデックスに変換された2つの要素の座標(行列乗算を使用)。B[col row]C

注:疎行列を利用する以前の回答は間違っていました。

その他の貢献者:

[0 1 0]は誤った値と見なされる可能性があることに注意して、5バイトを節約してくださったStewie Griffin氏!!

Luis Mendoが2バイトを節約し~0 == true、スパースマトリックスについて通知してくれました

オンラインで試す


2
ニース:) all3バイトをスキップして保存できます。1 1 1はtrueで、1 0 1Octaveではfalseであるため、問題ありません。:)
Stewie Griffin

1
素晴らしいアプローチ!これが、論理インデックスインデックス付き配列と同じサイズである必要がないという事実を利用する方法が気に入っています
Luis Mendo

1
Stewieの提案に加えて、あなたは置き換えることができますtrue~02つのバイトを保存するために
ルイスMendo

@StewieGriffinありがとう、本当に大丈夫です:)
rahnema1 2017年

@LuisMendo良い点
rahnema1 2017年

3

Mathematica、28バイト

#3~Extract~#~MatchQ~{#2...}&

1インデックス付き。Mathematicaで配列がどのように構造化されているかにより、入力座標は逆でなければなりません(すなわち(row, column)

使用法

#3~Extract~#~MatchQ~{#2...}&[{{1, 1}, {2, 3}, {1, 4}}, "#", {{"#", "_", "#", "#"}, {"#", "_", "#", "#"}}]

True


2

Haskell、27バイト

s!c=all(\(x,y)->s!!y!!x==c)

使用例:( ["#_##","#_##"] ! '#' ) [(0,0), (2,1), (3,0)]-> True


2

ゼリー、10バイト

ịṪ⁸ịḢð€Q⁼⁵

これは完全なプログラムとしてのみ機能します。入力順序は、インデックス、文字列配列、シングルトン文字列です。

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

使い方

ịṪ⁸ịḢð€Q⁼⁵  Main link.
            Left argument:  P (array of coordinate pairs)
            Right argument: S (array of strings)
            Third argument: C (singleton string)

     ð€     Combine the links to the left into a dyadic chain and call it with each
            p = (x, y) in P as left argument and S as the right one.
ị             Unindex; retrieve the strings of S at indices x and y.
 Ṫ            Tail; yield s, the string of S at index y.
  ⁸ị          Unindex; retrieve the characters of s at indices x and y.
    Ḣ         Head; yield the character of s at index x.
       Q    Unique; deduplicate the resulting string/array of characters.
        ⁼⁵  Compare the result with the third argument.

2

Perlの641の、40バイト

->\c,\h,\n{all map {n eq h[.[0];.[1]]},c}

->$_,\h,\n{all .map:{n eq h[.[0];.[1]]}}

2D文字列を2Dリストとして期待します。

-1バイトのb2gillsに感謝します。


$_代わりに使用した場合、1バイトの節約を\c使用でき.map:{…}ます
Brad Gilbert b2gills

@ BradGilbertb2gills:ああ、私はスペースがオプションであることを知りませんでした.map: {…}。知っておくと便利です。また、プレフィックス||がまだ実装されていないのは残念n eq h[||$_]です。内部ラムダを単純に作成できる可能性があります...
smls

2

C#、80 77バイト

pinkfloydx33のおかげで3バイト節約

a=>b=>c=>{foreach(var i in a){if(b[i[0]][i[1]]!=c){return 1<0;}}return 1>0;};

aは座標のペア、bは行のリスト、cは1文字の文字列です。


あなたは置き換えることができますfalse1<0してtrue1>0し、3つのバイトを保存します。
pinkfloydx33 2017年

1

Haskell、72 63バイト

c [] _ _ =1<2;c ((f,s):t) m n |n/=lines m!!s!!f=1>2|1>0=c t m n

c [(0,0), (1,0), (3,0)] "#_##\n#_##" '#' 出力の 入力 False

入力 c [(4, 0), (3, 0), (2, 0), (1, 0), (0, 0), (0, 1), (0, 2), (0, 3), (1, 3), (2, 3), (2, 2), (3, 2), (4, 2), (4, 3)] " \n ####\n # \n # " ' '

出力 True

アンゴルフ

checkfunc :: [(Int,Int)] -> String -> Char -> Bool
checkfunc [] _ _ = True
checkfunc (x:xs) string char | char /= ((lines string)!!(snd x))!!(fst x)= False  -- Checks first coordinates and returns False if no match
                             | otherwise = checkfunc xs string char --Otherwise iterate over remaining coordinate pairs

まだ不要な空白が残っています:c[]_ _=1<2;c((f,s):t)m n|n/=lines m!!s!!f=1>2|1>0=c t m n
Laikoni 2017年

また、ブール論理を実行しているので、暗黙の条件if n/=lines m!!s!!f then False else c t m nをに置き換えることができますn/=lines m!!s!!f&&c t m n
Laikoni 2017年

最後に、OPが言うYou may take the 2D string as a 2D list, a list of lines, or a 2D string.ように、をドロップしてlines、行のリストを入力として直接取得できます。
Laikoni 2017年

1

Scala、68バイト

def f(l:(Int,Int)*)(s:String*)(c:Char)=l forall{x=>s(x._2)(x._1)==c}

1

Clojure、39バイト

#(apply = %3(map(fn[[x y]]((%2 y)x))%))

例(文字列入力はvecのvec文字):

(def f #(apply = %3(map(fn[[x y]]((%2 y)x))%)))
(f [[0 0] [1 1] [3 0]] (mapv vec ["#_##" "#_##"]) \#)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.