อ่านตาราง


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

ดูเหมือนว่าการป้อนข้อมูลจะได้รับเป็นสตริงเดียวแม้ว่าคุณจะไม่ได้ทำให้มันชัดเจน มีความยืดหยุ่นในรูปแบบอินพุตเท่าใด การส่งผ่านอาร์เรย์ของค่าไปยังฟังก์ชันที่ยอมรับได้หรือไม่ (ฉันคาดเดาไม่ได้มันต้องเป็นสตริง) สามารถให้แถว / col เป็นอาร์กิวเมนต์แยกกันในตารางได้หรือไม่ (ฉันอาจเดาได้) โปรดอธิบาย
ระดับแม่น้ำเซนต์

มันช่วยได้ไหม
J Atkin

ไม่ใช่คอลัมน์ที่ขึ้น / ลงและแถวไปทางซ้าย / ขวาใช่ไหม ฉันเชื่อว่าพิกัดในตัวอย่างของคุณกลับด้าน
KoreanwGlasses

คำตอบ:


2

เรติน่า 90 ไบต์

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

regex กลุ่มที่สมดุลครั้งแรกของฉัน มันควรจะยังคงเล่นกอล์ฟได้ดี จะลองทำดูภายหลัง

แนวคิดหลักคือการนับไปป์จนถึงชื่อคอลัมน์จากนั้นใช้จำนวนท่อที่เท่ากันในแถวเริ่มต้นด้วยชื่อของแถวที่ต้องการ หลังจากนั้นเราจับค่าถัดไปซึ่งเป็นผลลัพธ์

ลองออนไลน์ได้ที่นี่


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

ทดสอบใน 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 ทำไมต้องเป็น Firefox (FWIW ฉันใช้ Firefox)
J Atkin

ครั้งล่าสุดที่ฉันตรวจสอบ Chrome ยังไม่ได้ใช้งานการทำลายล้าง - ยืนยันสิ่งนี้จะทำให้เกิดข้อผิดพลาดใน Chrome "ด้านซ้ายมือไม่ถูกต้องในการมอบหมาย"
edc65

@JAtkin BTW ทำไมไม่โหวตขึ้นมา?
edc65

ฉันอ่านจากบนลงล่างทิ้งความคิดเห็นต้องทำอย่างอื่นและลืมไป)
J Atkin

4

Haskell, 117 116 111 bytes

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.