Đọc bảng


11

Bài tập

Đọc nội dung của một bảng cho một tập hợp tọa độ.

Định dạng bảng

Các bảng sẽ ở định dạng cơ bản này:

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

Tên cột luôn là duy nhất trong các cột . Tên hàng cũng là duy nhất trong hàng . Điều này bao gồm các tên giống nhau ngoại trừ khoảng trắng. Giá trị, tên col và tên hàng sẽ không bao giờ có |-bên trong chúng. Tên và giá trị sẽ không bao giờ có không gian bên trong chúng, nhưng có thể có không gian hàng đầu hoặc dấu. Col width được điều chỉnh dựa trên tiêu đề / nội dung. Chiều rộng cột luôn nhất quán từ trên xuống dưới.

Đầu vào

Một bảng và một danh sách ngăn cách không gian của [name]s.

Thí dụ

[table]
row col

Nếu bạn đang viết một hàm, đây có thể là các chuỗi riêng biệt, nếu không thì row colsẽ luôn là dòng cuối cùng trong đầu vào. row colcó một số linh hoạt cho định dạng và có thể được đại diện theo nhiều cách. (ví dụ(row, col) , r, c...). Yêu cầu khó khăn duy nhất là nó phải là một dòng và nó phải xuất hiện theo thứ tự col row.

Đầu ra

Nội dung của một ô được chỉ định bởi đầu vào không có khoảng trắng ở đầu hoặc cuối từ ô .

Ví dụ

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

Các ô được yêu cầu trong đầu vào luôn tồn tại trong bảng?
Sản phẩm ETH

Ồ, bây giờ tôi hiểu rồi;) Vâng, nó sẽ
J Atkin

Có vẻ như đầu vào sẽ được cung cấp dưới dạng một chuỗi mặc dù bạn chưa làm cho nó rõ ràng. Có bao nhiêu tính linh hoạt trên định dạng đầu vào? Là truyền một mảng các giá trị cho một chức năng có thể chấp nhận? (Tôi đoán là không, nó phải là một chuỗi) Hàng / col có thể được đưa ra làm đối số riêng cho bảng không? (Tôi đoán có lẽ.) Hãy làm rõ.
Cấp sông St

cái đó có giúp ích không?
J Atkin

Không có cột đi lên / xuống và hàng đi sang trái / phải? Tôi tin rằng tọa độ trong các ví dụ của bạn được đảo ngược.
KoreanwGlass

Câu trả lời:


2

Võng mạc, 90 byte

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

Regex nhóm cân bằng đầu tiên của tôi . Nó vẫn có thể chơi golf tốt. Sẽ cố gắng làm điều đó sau.

Ý tưởng chính là đếm các ống cho đến tên cột và sau đó sử dụng cùng một lượng ống lên trên hàng bắt đầu bằng tên của hàng mong muốn. Sau đó, chúng tôi nắm bắt giá trị tiếp theo đó là kết quả.

Hãy thử trực tuyến tại đây.


5

JavaScript (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)])

KIỂM TRA trong 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>


Đẹp, BTW Tại sao chỉ trong firefox? (FWIW Tôi sử dụng firefox)
J Atkin

Lần trước tôi đã kiểm tra, Chrome vẫn chưa triển khai Nhiệm vụ hủy cấu trúc - Đã được xác nhận, điều này gây ra lỗi trong Chrome "Bên trái chuyển nhượng không hợp lệ"
edc65

@JAtkin BTW tại sao không phải là một upvote?
edc65

Tôi đọc từ trên xuống dưới, để lại một bình luận, phải làm một cái gì đó khác và quên đi;)
J Atkin

4

Haskell, 117 116 111 byte

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

Ví dụ sử dụng:

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

Làm thế nào nó hoạt động:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.