Biorąc pod uwagę 3 elementy wejściowe, listę par współrzędnych, ciąg 2D i ciąg jednoznakowy, określ, czy znak na każdej współrzędnej ciągu 2D jest równy jednemu znakowi. Dane wejściowe można przyjmować w dowolnej kolejności, a współrzędne mogą być indeksowane 1.
Możesz wziąć ciąg 2D jako listę 2D, listę linii lub ciąg 2D.
Przykład: (0,0), "#_\n__", "#" -> True
Ciąg jest
#_
__
Znak na współrzędnej (0,0)
(od lewego górnego rogu) to #
. Jest to równe trzeciemu elementowi wejściowemu #
, więc wyprowadzasz True
(lub dowolną prawdziwą wartość)
Przykład: [(0,0), (1,1)], "#_\n_#", "#" -> True
Ciąg jest
#_
_#
Znaki na współrzędnych (0,0)
i (1,1)
są oba #
, więc wynik jest prawdziwy.
Dane wyjściowe są prawdziwe tylko wtedy, gdy każda współrzędna pasuje do skrótu. Jednak nie każdy skrót musi mieć pasującą współrzędną. Jeśli nie ma żadnych wystąpień pojedynczego znaku ( #
w niektórych przypadkach testowych) w ciągu 2D, wynik jest nadal po prostu fałszem.
Możesz założyć, że współrzędne zawsze będą się mieścić w granicach ciągu 2D.
Więcej przypadków testowych: (Dla większej czytelności umieszczam jeden znak na drugim miejscu)
[(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
Zwróć uwagę, że ostatni przypadek testowy używa spacji jako łańcucha pojedynczego znaku i hasha wokół spacji.
Związane z. (odwrotność tego wyzwania)
(row, column)
ale w ostatnim przykładzie współrzędne są w formacie(column, row)
.Odpowiedzi:
Dyalog APL , 8 bajtów
Monity o listę par współrzędnych (wiersz, kolumna), następnie tablicę 2D, a następnie znak.
[⎕]
monituj o współrzędne i użyj ich do rozproszenia wybierania⎕
monit o wprowadzenie (tablica 2D)=
porównaj wybrane elementy z⎕
wejście (znak)∧/
sprawdź, czy wszystkie są prawdziwe (redukcja AND)Przypadki testowe (
⎕IO←0
aby dopasować przykłady, ale nie jest to konieczne):Pierwszy przykład
Drugi przykład
Trzeci przykład
Czwarty przykład
Piąty przykład
źródło
Python, 39 bajtów
Pobiera dane wejściowe:
a
lista(x, y)
współrzędnych całkowitychb
lista ciągówc
ciąg jednoznakowyźródło
f=
. Witamy w PPCG!JavaScript (ES6), 37 bajtów
Pobiera dane wejściowe:
a
tablica[x, y]
współrzędnych całkowitychs
tablica ciągówc
ciąg jednoznakowyźródło
Oktawa,
453829 bajtówFunkcja, która przyjmuje tablicę 2D znaków jako
A
i współrzędne (w oparciu o 0)B
jako macierz dwukolumnową[col row]
i pasujący znak jakoC
. Współrzędne dwóch elementów (z wykorzystaniem mnożenia macierzy) przeliczone na indeks liniowy.Uwaga: poprzednia odpowiedź, w której użyto rzadkiej macierzy, była błędna.
Inni współautorzy:
Stewie Griffin za zapisanie 5 bajtów, zauważając, że [0 1 0] można uznać za fałszywą wartość !!
Luis Mendo za zapisanie 2 bajtów
~0 == true
i powiadomienie o rzadkiej matrycy.Wypróbuj online
źródło
all
i zapisać trzy bajty.1 1 1
jest prawdą i1 0 1
fałszem w Octave, więc powinno być OK. :)true
przez,~0
aby zapisać 2 bajtyMathematica, 28 bajtów
1-indeksowany. Ze względu na strukturę tablic w Mathematica współrzędne wejściowe muszą zostać odwrócone (tj.
(row, column)
)Stosowanie
źródło
Haskell, 27 bajtów
Przykład użycia:
( ["#_##","#_##"] ! '#' ) [(0,0), (2,1), (3,0)]
->True
.źródło
Galaretka , 10 bajtów
Działa to tylko jako pełny program. Kolejność wprowadzania to indeksy, tablica łańcuchów, łańcuch singletonów.
Wypróbuj online!
Jak to działa
źródło
Perl 6 ,
4140 bajtówOczekuje, że ciąg 2D jako lista 2D.
Dzięki b2gills za -1 bajt.
źródło
$_
zamiast tego,\c
możesz.map:{…}
zaoszczędzić jeden bajt.map: {…}
. Warto wiedzieć. Szkoda, że prefiks||
jeszcze nie został zaimplementowany, może sprawić, że wewnętrzna lambda po prostun eq h[||$_]
...C #,
8077 bajtówZaoszczędź 3 bajty dzięki pinkfloydx33
a jest parą współrzędnych, b jest listą linii, a c jest łańcuchem jednoznakowym.
źródło
false
ze1<0
itrue
ze1>0
i zapisać 3 bajty.Haskell,
7263 bajtyWejście
c [(0,0), (1,0), (3,0)] "#_##\n#_##" '#'
WyjściaFalse
Wejście
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 # " ' '
Wynik
True
UnGolfed
źródło
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
może zostać zastąpiony przezn/=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.
, możesz upuścićlines
i bezpośrednio wziąć listę linii jako dane wejściowe.Scala, 68 bajtów
źródło
Clojure, 39 bajtów
Przykład (ciąg wejściowy to vec vec znaków):
źródło