Sesuaikan koordinat dengan nilainya

10

Diberikan 3 item input, daftar pasangan koordinat, string 2D, dan string karakter tunggal, menampilkan apakah karakter pada setiap koordinat string 2D sama dengan karakter tunggal. Anda dapat mengambil input dalam urutan apa pun dan koordinatnya dapat diindeks 1.

Anda dapat menggunakan string 2D sebagai daftar 2D, daftar garis, atau string 2D.

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

String adalah

#_
__

Char di koordinat (0,0)(dari kiri atas) adalah #. Ini sama dengan item input ketiga #,, sehingga Anda menghasilkan True(atau nilai kebenaran apa pun)

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

String adalah

#_
_#

Karakter pada koordinat (0,0)dan (1,1)keduanya #, sehingga hasilnya benar.

Output hanya benar jika setiap koordinat cocok dengan hash. Tidak semua hash harus memiliki koordinat yang cocok. Jika tidak ada kemunculan char tunggal ( #dalam beberapa kasus uji) dalam string 2D, outputnya masih palsu.

Anda dapat mengasumsikan koordinat akan selalu berada dalam batas-batas string 2D.

Lebih banyak kasus uji: (Saya menempatkan char kedua untuk kemudahan keterbacaan)

[(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

Perhatikan case tes terakhir menggunakan spasi sebagai string char tunggal, dan hash di sekitar spasi.

Terkait (kebalikan dari tantangan ini)

Rɪᴋᴇʀ
sumber
Bisakah kita berasumsi bahwa input adalah array 2d daripada menggunakan "\ n"?
rahnema1
@ Rahnema1 bukan array 2D, tetapi array / daftar baris ya.
Rɪᴋᴇʀ
@EasterlyIrk Saya percaya ini termasuk dalam kategori Format I / O yang
rumit
Dalam koordinat contoh pertama Anda berada dalam format (row, column) tetapi dalam contoh koordinat terakhir dalam format (column, row).
rahnema1
1
Bisakah koordinat diindeks 1?
user41805

Jawaban:

1

Dyalog APL , 8 byte

Meminta daftar pasangan koordinat (baris, kolom), lalu array 2D, lalu karakter.

∧/⎕=⎕[⎕]

[⎕] meminta koordinat dan menggunakannya untuk menyebarkan pick dari

input yang diminta (array 2D)

= bandingkan elemen yang dipilih

input (karakter)

∧/ periksa apakah semuanya benar (DAN-reduksi)

Uji kasus ( ⎕IO←0untuk mencocokkan contoh, tetapi ini tidak perlu):

Contoh pertama

Contoh kedua

Contoh ketiga

Contoh keempat

Contoh kelima

Adm
sumber
6

Python, 39 byte

Mengambil input:

  1. adaftar (x, y)koordinat bilangan bulat
  2. b daftar string
  3. c string karakter tunggal

lambda a,b,c:{b[y][x]for x,y in a}=={c}
ovs
sumber
2
Di situs ini, Anda tidak perlu menyebutkan nama fungsi Anda. Anda dapat menghapus f=. Selamat datang di PPCG!
Rɪᴋᴇʀ
Selamat datang di PPCG, jawaban pertama yang bagus!
FlipTack
4

JavaScript (ES6), 37 byte

Mengambil input:

  1. aarray [x, y]koordinat bilangan bulat
  2. s berbagai string
  3. c string karakter tunggal

(a,s,c)=>a.every(([x,y])=>s[y][x]==c)
George Reith
sumber
4

Oktaf, 45 38 29 byte

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

Fungsi yang mengambil array karakter 2D sebagai Adan koordinat (berbasis 0) Bsebagai matriks dua kolom [col row]dan karakter yang cocok sebagai C. Koordinat dua elemen (menggunakan perkalian matriks) dikonversi ke indeks linier.

Catatan: Jawaban sebelumnya yang menggunakan matriks jarang salah.

Kontributor Lainnya:

Stewie Griffin karena menyimpan 5 byte, mencatat bahwa [0 1 0] dapat dianggap sebagai nilai palsu !!

Luis Mendo untuk menyimpan 2 byte itu ~0 == truedan pemberitahuan tentang matriks jarang.

Cobalah secara Online

rahnema1
sumber
2
Bagus :) Anda dapat melewati alldan menyimpan tiga byte. 1 1 1itu benar, dan 1 0 1salah dalam oktaf, jadi itu harus OK. :)
Stewie Griffin
1
Pendekatan hebat! Saya suka bagaimana ini mengeksploitasi fakta bahwa indeks logis tidak perlu memiliki ukuran yang sama dengan array yang diindeks
Luis Mendo
1
Selain saran Stewie, Anda dapat menggantinya truedengan ~0menyimpan 2 byte
Luis Mendo
@StewieGriffin Terima kasih, ini benar-benar baik-baik saja :)
rahnema1
@LuisMendo Poin bagus
rahnema1
3

Mathematica, 28 byte

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

1-diindeks. Karena bagaimana susunan disusun dalam Mathematica, koordinat input harus dibalik (yaitu (row, column))

Pemakaian

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

True

JungHwan Min
sumber
2

Haskell, 27 byte

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

Contoh penggunaan: ( ["#_##","#_##"] ! '#' ) [(0,0), (2,1), (3,0)]-> True.

nimi
sumber
2

Jelly , 10 byte

ịṪ⁸ịḢð€Q⁼⁵

Ini hanya berfungsi sebagai program lengkap. Urutan input adalah indeks, array string, string singleton.

Cobalah online!

Bagaimana itu bekerja

ịṪ⁸ịḢð€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.
Dennis
sumber
2

Perl 6 , 41 40 byte

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

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

Mengharapkan string 2D sebagai daftar 2D.

Berkat b2gills untuk -1 byte.

seseorang
sumber
Jika Anda menggunakan $_alih-alih, \cAnda bisa menggunakan .map:{…}tabungan satu byte
Brad Gilbert b2gills
@ BradGilbertb2gills: Oh, saya tidak menyadari bahwa ruang itu opsional .map: {…}. Itu berguna untuk diketahui. Juga, sayang sekali bahwa awalan ||belum diimplementasikan, itu bisa membuat lambda dalam hanya n eq h[||$_]...
smls
2

C #, 80 77 byte

Disimpan 3 byte, berkat pinkfloydx33

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

a adalah pasangan koordinat, b adalah daftar garis, dan c adalah string karakter tunggal.

Horváth Dávid
sumber
Anda dapat mengganti falsedengan 1<0dan truedengan 1>0dan menyimpan 3 byte.
pinkfloydx33
1

Haskell, 72 63 byte

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

Input dari c [(0,0), (1,0), (3,0)] "#_##\n#_##" '#' Output False

Memasukkan 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 # " ' '

Keluaran True

Tidak disatukan

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
brander
sumber
Masih ada ruang putih yang tidak perlu tersisa:c[]_ _=1<2;c((f,s):t)m n|n/=lines m!!s!!f=1>2|1>0=c t m n
Laikoni
Juga saat Anda melakukan logika boolean, kondisional implisit if n/=lines m!!s!!f then False else c t m ndapat digantikan oleh n/=lines m!!s!!f&&c t m n.
Laikoni
Akhirnya, seperti kata OP, You may take the 2D string as a 2D list, a list of lines, or a 2D string.Anda dapat menjatuhkan linesdan langsung mengambil daftar garis sebagai input.
Laikoni
1

Scala, 68 byte

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

Clojure, 39 byte

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

Contoh (input string adalah vec dari vec karakter):

(def f #(apply = %3(map(fn[[x y]]((%2 y)x))%)))
(f [[0 0] [1 1] [3 0]] (mapv vec ["#_##" "#_##"]) \#)
NikoNyrh
sumber