Baca tabelnya

11

Tugas

Baca isi tabel yang diberikan seperangkat koordinat.

Pemformatan tabel

Tabel akan berada dalam format dasar ini:

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

Nama kolom selalu unik di dalam kolom . Nama baris juga unik di dalam baris . Ini termasuk nama-nama yang sama kecuali spasi putih. Nilai, nama col, dan nama baris tidak akan pernah ada |-di dalamnya. Nama dan nilai tidak akan memiliki ruang di dalamnya, tetapi mungkin memiliki ruang awal atau akhir. Lebar col dapat disesuaikan berdasarkan header / konten. Lebar kolom selalu konsisten dari atas ke bawah.

Memasukkan

Tabel dan daftar spasi [name]s.

Contoh

[table]
row col

Jika Anda menulis suatu fungsi, ini bisa berupa string terpisah, jika tidak maka row colakan selalu menjadi baris terakhir dalam input. row colmemiliki beberapa fleksibilitas untuk format dan dapat diwakili banyak cara. (mis (row, col). r, c, ...). Satu-satunya persyaratan sulit adalah bahwa itu harus satu baris, dan harus muncul dalam urutan col row.

Keluaran

Isi sel ditentukan oleh input tanpa spasi awal atau akhir dari sel .

Contohnya

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
J Atkin
sumber
Apakah sel yang diminta dalam input selalu ada di tabel?
ETHproduk
Oh, sekarang saya mengerti;) Ya itu akan
J Atkin
Tampaknya input akan diberikan sebagai string tunggal meskipun Anda belum membuatnya secara eksplisit. Berapa banyak fleksibilitas yang ada pada format input? Apakah melewatkan array nilai ke fungsi dapat diterima? (Saya kira tidak, itu harus berupa string) Bisakah baris / col diberikan sebagai argumen terpisah ke tabel? (Saya kira mungkin.) Mohon klarifikasi.
Level River St
Apakah itu membantu?
J Atkin
Jangan kolom naik / turun dan baris ke kiri / kanan? Saya percaya koordinat dalam contoh Anda terbalik.
Kacamata Korea

Jawaban:

2

Retina, 90 byte

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

Regex penyeimbang grup pertama saya . Seharusnya golf masih bagus. Akan mencoba melakukannya nanti.

Gagasan utamanya adalah menghitung pipa sampai nama kolom dan kemudian menggunakan jumlah pipa yang sama di baris dimulai dengan nama baris yang diinginkan. Setelah itu kita menangkap nilai selanjutnya yang hasilnya.

Cobalah online di sini.

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

TEST di 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>

edc65
sumber
Bagus, BTW Mengapa hanya di firefox? (FWIW saya menggunakan firefox)
J Atkin
Terakhir kali saya memeriksa, Chrome belum menerapkan tugas Destructure - Dikonfirmasi, ini memberikan kesalahan pada Chrome "Sisi kiri dalam penugasan"
edc65
@ AJt BTW mengapa tidak upvote?
edc65
Saya membaca dari atas ke bawah, meninggalkan komentar, harus melakukan sesuatu yang lain, dan lupa;)
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

Contoh penggunaan:

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

Bagaimana itu bekerja:

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
nimi
sumber