표를 읽으십시오


11

직무

좌표 세트가 주어진 테이블의 내용을 읽습니다.

테이블 형식

테이블은 다음과 같은 기본 형식입니다.

      |[name]|[name]|
---------------------
[name]| [val]|[val] |
[name]| [val]|[val] |

열 이름은 항상 열 내에서 고유 합니다. 행 이름도 행 내에서 고유 합니다 . 여기에는 공백을 제외하고 동일한 이름이 포함됩니다. 값, 열 이름 및 행 이름은 그 |-안에 절대 포함되지 않습니다 . 이름과 값에는 공백이 없어야하지만 선행 또는 후행 공백이있을 수 있습니다. 열 너비는 헤더 / 내용에 따라 조정 가능합니다. 열 너비는 항상 위에서 아래로 일정합니다.

입력

테이블과 공백으로 구분 된 [name]s 목록 .

[table]
row col

함수를 작성하는 경우 이들은 별도의 문자열 일 수 있습니다. 그렇지 않으면 row col입력에서 항상 마지막 행이됩니다. row col형식에 유연성이 있으며 여러 가지 방법으로 표현 될 수 있습니다. (예 : (row, col), r, c...). 유일한 어려운 요구 사항은 한 줄이어야하며 순서대로 나타나야한다는 것 col row입니다.

산출

에서 선행 또는 후행 공간이없는 입력 으로 지정된 셀의 내용 .

In:
   |a|z |_*|
------------
atb|1|85|22|
b  |5|6 |e$|
/+*|8|we|th|
atb a

Out:
1


In:
  | x| b |
----------
ab|l |mmm|
b |le| l |
b b

Out:
l

In:
   |a|z |_*|  ab  |
-------------------
atb|1|85|22| 5    |
b  |5|6 |e$|  8   |
/+-|8|we|th| 126  |
atb ab

Out:
5

입력에서 요청한 셀이 항상 테이블에 있습니까?
ETHproductions

오, 지금 나는 그것을 얻는다;) 그렇습니다
J Atkin

명시 적으로 만들지 않았지만 입력이 단일 문자열로 제공되는 것 같습니다. 입력 형식에 어느 정도의 유연성이 있습니까? 함수에 값 배열을 전달할 수 있습니까? (아니라고 추측합니다. 문자열이어야합니다) 행 / 열을 테이블에 대한 별도의 인수로 제공 할 수 있습니까? (아마도 추측하고 있습니다.) 명확히하십시오.
Level River St

도움이 되나요?
J Atkin

열이 위 / 아래로 이동하지 않고 행이 왼쪽 / 오른쪽으로 이동하지 않습니까? 귀하의 예에서 좌표가 반전되었다고 생각합니다.
KoreanwGlasses

답변:


2

레티 나, 90 바이트

s`^(?=.*\n(.*) (.*))((?<a>\|)|.)*\|\s*\2\s*\|.*\n\1\s*((?<-a>\|)|[^|])*\|\s*([^\s|]*).*
$5

내 첫 번째 균형 그룹 정규식. 여전히 골프를 잘할 수 있어야합니다. 나중에 시도합니다.

주요 아이디어는 열 이름까지 파이프를 계산 한 다음 원하는 행 이름으로 시작하는 행에서 동일한 양의 파이프를 사용하는 것입니다. 그런 다음 결과 인 다음 값을 캡처합니다.

여기에서 온라인으로 사용해보십시오.


5

자바 스크립트 (ES6), 108

t=>(S=s=>s.split(/ *\| */),t=t.split`
`,[y,x]=t.pop().split` `,S(t.find(r=>S(r)[0]==y))[S(t[0]).indexOf(x)])

Firefox 테스트

f=t=>(
 S=s=>s.split(/ *\| */),
 t=t.split`\n`,
 [y,x]=t.pop().split` `,
 S(t.find(r=>S(r)[0]==y))[S(t[0]).indexOf(x)]
)

function test(){
  r=f(T.value);
  O.textContent=r
}
test()
#T { width: 50%; height: 9em}
Input<br><textarea id=T>   |a|z |_*|  ab  |
-------------------
atb|1|85|22| 5    |
b  |5|6 |e$|  8   |
/+-|8|we|th| 126  |
atb ab</textarea><br>
<button onclick="test()">Find</button>
<span id=O></span>


좋은, BTW 왜 파이어 폭스에? (FWIW 저는 firefox를 사용합니다)
J Atkin

내가 마지막으로 확인했을 때, Chrome은 아직 Destructuring assignment를 구현하지 않았습니다.-확인되었습니다. Chrome에서 "잘못된 잘못된 왼쪽 할당"
edc65

@JAtkin BTW 왜 공감하지 않습니까?
edc65

나는 위에서 아래로 읽고, 의견을 남겼고, 다른 것을해야했고, 잊었다;)
J Atkin

4

하스켈, 117 (116) 111 바이트

import Data.Lists
s=splitOn"|".filter(>' ')
(t#b)a|l<-lines t=[c|r<-l,(d,c)<-zip(s$l!!0)$s r,d==a,s r!!0==b]!!0

사용 예 :

*Main> ("  | x| b |\n----------\nab|l |mmm|\nb |le| l |\nb b" # "b") "b"
"l"

작동 방식 :

s=splitOn"|".filter(>' ')         -- helper function to remove spaces and split a
                                  -- line at bars into words
l<-lines t                        -- split table at \n into lines and bind to l
[c|r<-l,                      ]   -- take c for every line r in l, where
       (d,c)<-zip(s$l!!0)$s r     -- a pair (d,c) is made by zipping the (split)
                                  -- header of the table with the (split) line r 
        ,d==a                     -- and d (=header element) equals parameter a
        ,s r!!0==b                -- and the first word in r equals parameter b
                             !!0  -- pick the first (and only) element
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.