Зіставте координати з їх значеннями


10

Дано 3 елементи введення, список пар координат, 2D-рядок та односимвольну рядок, виводить, чи є символ у кожної координати 2D-рядка рівним одиничному символу. Ви можете взяти вхід у будь-якому порядку, і координати можуть бути 1-індексованими.

Ви можете прийняти 2D рядок як двовимірний список, список рядків або 2D рядок.

Приклад: (0,0), "#_\n__", "#" -> True

Рядок є

#_
__

Значок у координаті (0,0)(зліва вгорі) є #. Це дорівнює третьому вхідному елементу #, тож ви Trueвиводите (або будь-яке триєдне значення)

Приклад: [(0,0), (1,1)], "#_\n_#", "#" -> True

Рядок є

#_
_#

Символи в координатах (0,0)і (1,1)є обома #, тому вихід є істинним.

Вихід є вірним лише якщо кожна координата відповідає хешу. Не у кожного хеша має бути відповідна координата. Якщо жодної знаки ( #у деяких тестових випадках) в 2D-рядку не зустрічається , вихід все ще просто хибний.

Можна припустити, що координати завжди будуть в межах 2D-рядка.

Більше тестових випадків: (Я поставив єдину знаку секунди для полегшення читабельності)

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

Зверніть увагу, що останній тестовий випадок використовує пробіли як єдину рядок char та хеші навколо пробілів.

Пов'язані. (навпаки цього виклику)


Чи можна припустити, що вхід - це 2d масив замість того, щоб використовувати "\ n"?
рахнема1

@ rahnema1 - це не двовимірний масив, а масив / список рядків так.
Rɪᴋᴇʀ

@EasterlyIrk Я вважаю, що це підпадає під категорію громіздких форматів вводу-виводу
JungHwan Min

У першому прикладі координати є у форматі, (row, column) але в останньому прикладі координати є у форматі(column, row) .
rahnema1

1
Чи можуть координати бути 1-індексованими?
користувач41805

Відповіді:


1

Діалог APL , 8 байт

Підказки до списку пар координат (рядок, стовпець), потім 2D масив, потім символ.

∧/⎕=⎕[⎕]

[⎕] підкажіть координати і використовуйте їх для розсіювання вибору

запит на запит (2D масив)

= порівняйте вибрані елементи з

вхід (символ)

∧/ перевірте, чи всі вірні (AND-зменшення)

Тестові приклади ( ⎕IO←0щоб відповідати прикладам, але це не обов'язково):

Перший приклад

Другий приклад

Третій приклад

Четвертий приклад

П'ятий приклад


6

Пітон, 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

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

Функція, яка приймає 2D масив символів як Aі координат (на основі 0) Bу вигляді матриці двох стовпців [col row]і відповідного символу якC . Координати двох елементів (за допомогою матричного множення) перетворені на лінійний індекс.

Примітка. Попередня відповідь, що використовувала розріджену матрицю, була помилковою.

Інші учасники:

Стіві Гріффін для збереження 5 байт, зазначивши, що [0 1 0] можна вважати помилковим значенням !!

Луїс Мендо для збереження 2-х байт ~0 == trueта повідомлення про розріджену матрицю.

Спробуйте в Інтернеті


2
Приємно :) Ви можете пропустити allі зберегти три байти. 1 1 1є правдою, а 1 0 1в Octave - хибною, тому це повинно бути нормально. :)
Стюі Гріффін

1
Чудовий підхід! Мені подобається, як це використовує той факт, що логічні показники не повинні мати такий самий розмір, як індексований масив
Луїс Мендо

1
Окрім пропозиції Стюі, ви можете замінити true, ~0щоб зберегти 2 байти
Луїс Мендо

@StewieGriffin Спасибі це справді добре :)
rahnema1

@LuisMendo Хороший момент
rahnema1

3

Математика, 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 6 , 41 40 байт

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

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

Очікує 2D-рядок як 2D-список.

Завдяки b2gills за -1 байт.


Якщо ви використовували $_замість \cвас, ви могли б використовувати .map:{…}один байт
Бред Гілберт b2gills

@ BradGilbertb2gills: О, я не розумів, що простір не потрібен .map: {…}. Це корисно знати. Також прикро, що префікс ||ще не реалізований, він може зробити внутрішню лямбда просто n eq h[||$_]...
smls

2

C #, 80 77 байт

Збережено 3 байти, завдяки pinkfloydx33

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

a - пара координат, b - список ліній, а c - рядок з одним символом.


Ви можете замінити falseз 1<0і trueз 1>0і зберегти 3 байта.
pinkfloydx33

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

UnGolfed

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
Лайконі

Крім того, як ви виконуєте булеву логіку, неявна умовна умова if n/=lines m!!s!!f then False else c t m nможе бути замінена на n/=lines m!!s!!f&&c t m n.
Лайконі

Нарешті, як каже ОП, You may take the 2D string as a 2D list, a list of lines, or a 2D string.ви можете скинути linesта безпосередньо взяти список рядків як вхідний.
Лайконі


1

Clojure, 39 байт

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

Приклад (рядок введення є символом vec символів):

(def f #(apply = %3(map(fn[[x y]]((%2 y)x))%)))
(f [[0 0] [1 1] [3 0]] (mapv vec ["#_##" "#_##"]) \#)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.