좌표를 값과 일치


10

3 개의 입력 항목, 좌표 쌍 목록, 2D 문자열 및 단일 문자 문자열이 제공되면 2D 문자열의 각 좌표에있는 문자가 단일 문자와 같은지 여부를 출력합니다. 어떤 순서로든 입력을받을 수 있으며 좌표는 1- 색인이 될 수 있습니다.

2D 문자열을 2D 목록, 행 목록 또는 2D 문자열로 사용할 수 있습니다.

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

문자열은

#_
__

좌표 (0,0)(왼쪽 상단부터) 의 문자 는 #입니다. 이것은 세 번째 입력 항목과 동일 #하므로 출력 True(또는 진실한 값)

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

문자열은

#_
_#

(0,0)및 의 좌표에있는 문자 (1,1)는 모두 #이므로 출력은 true입니다.

모든 좌표가 해시와 일치하는 경우에만 출력이 참입니다. 모든 해시가 일치하는 좌표를 가질 필요는 없습니다. 단일 문자가없는 경우 (#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

마지막 테스트 사례는 공백을 단일 문자 문자열로 사용하고 공백 주위를 해시합니다.

관련. (이 도전의 역)


입력이 "\ n"대신 2d 배열이라고 가정 할 수 있습니까?
rahnema1

@ rahnema1은 2D 배열이 아니라 배열 / 행 목록입니다.
Rɪᴋᴇʀ

@EasterlyIrk이 카테고리는 성가신 I / O 형식에
JungHwan Min

첫 번째 예제에서 좌표는 형식 (row, column) 이지만 마지막 예제에서 좌표는 형식 (column, row)입니다.
rahnema1

1
좌표를 1- 색인 할 수 있습니까?
user41805

답변:



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

자바 스크립트 (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

2 차원 배열의 문자를 A좌표 로 취하는 함수 (0 기반)B 두 개의 열 행렬로 사용 [col row]하고 일치하는 문자를C . 두 요소 좌표 (행렬 곱셈 사용)는 선형 인덱스로 변환됩니다.

참고 : 희소 행렬을 사용한 이전 답변은 잘못되었습니다.

다른 기고자 :

스튜이 그리핀[0 1 0]이 잘못된 값으로 간주 될 수 있음을 알리는 5 바이트 저장을위한 !!

2 바이트를 절약 한 Luis Mendo~0 == true 하고 희소 행렬에 대한 알림 .

온라인으로 사용해보십시오


2
Nice :) all3 바이트를 건너 뛰고 저장할 수 있습니다 . Octave에서는 1 1 1true이고 1 0 1false이므로 괜찮습니다. :)
Stewie Griffin

1
훌륭한 접근 방식! 논리 인덱스 인덱스 배열과 같은 크기 일 필요 는 없다는 사실을 어떻게 활용하는지 좋아합니다.
Luis Mendo

1
스튜이의 제안 이외에, 당신은 대체 할 수있는 true~0에 저장 2 바이트
루이스 Mendo

@StewieGriffin 감사합니다 정말 괜찮습니다 :)
rahnema1

@LuisMendo 좋은 지적
rahnema1

3

수학, 28 바이트

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

1- 색인. 배열은 티카으로 구성하는 방법으로 인해, 입력 좌표를 반전해야한다 (예 (row, column))

용법

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

True


2

하스켈, 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

펄 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 목록으로 예상합니다.

-1 바이트에 대한 b2gills 덕분입니다.


당신이 사용하는 경우 $_대신 \c사용할 수있는 당신이 .map:{…}한 바이트를 저장
브래드 길버트는 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는 단일 문자 문자열입니다.


당신은 대체 할 수 false1<0true1>0와 3 바이트를 저장합니다.
pinkfloydx33

1

하스켈, 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

또한 부울 논리를 수행함에 따라 암시 적 조건 if n/=lines m!!s!!f then False else c t m n은로 대체 될 수 있습니다 n/=lines m!!s!!f&&c t m n.
Laikoni

마지막으로 OP가 말한 것처럼 You may take the 2D string as a 2D list, a list of lines, or a 2D string.을 삭제 lines하고 직접 라인 목록을 입력으로 가져올 수 있습니다 .
Laikoni

1

스칼라, 68 바이트

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

1

클로저, 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 ["#_##" "#_##"]) \#)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.