Tabloları okuyun


11

Görev

Bir koordinat kümesi verilen bir tablonun içeriğini okuyun.

Tablo biçimlendirme

Tablolar şu temel biçimde olacaktır:

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

Sütun adları her zaman sütunlar içinde benzersizdir . Satır adları satırlar içinde de benzersizdir . Boşluk dışında aynı adları içerir. Değerler, sütun adları ve satır adlarının içinde asla bulunmaz |-. İsimler ve değerlerin içinde asla boşluk olmayacak, ancak önde veya arkada boşluk olabilir. Sütun genişliği üstbilgiye / içeriğe göre ayarlanabilir. Sütun genişliği her zaman yukarıdan aşağıya tutarlıdır.

Giriş

Bir tablo ve boşlukla ayrılmış [name]s listesi .

Misal

[table]
row col

Bir işlev yazıyorsanız, bunlar ayrı dizeler olabilir, aksi takdirde row colgirişteki her zaman en son satır olacaktır. row colbiçim için biraz esnekliğe sahiptir ve birçok şekilde temsil edilebilir. (örneğin (row, col),, r, c...). Tek zor gereksinim, bir satır olması ve sırayla görünmesi gerektiğidir col row.

Çıktı

Hücrede önden veya arkadan boşluk olmadan girdi tarafından belirtilen hücrenin içeriği .

Örnekler

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

Girdide istenen hücre her zaman tabloda var mı?
ETHproductions

Oh, şimdi anlıyorum;) Evet olacak
J Atkin

Görünüşe göre girdiyi açık yapmamış olsanız da tek bir dize olarak verilecektir. Girdi biçiminde ne kadar esneklik var? Bir işleve bir değer dizisi iletmek kabul edilebilir mi? (Hayır tahmin ediyorum, bu bir dize olmalı) Satır / col tabloya ayrı bağımsız değişken olarak verilebilir mi? (Muhtemelen tahmin ediyorum.) Lütfen açıklığa kavuşturun.
Level River St

Bu yardımcı olur mu?
J Atkin

Sütunlar yukarı / aşağı, satırlar sola / sağa gitmiyor mu? Örneklerinizdeki koordinatların tersine döndüğüne inanıyorum.
KoreanwGlasses

Yanıtlar:


2

Retina, 90 bayt

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

İlk dengeleme grubu regex'im. Hala iyi golf edilebilir olmalıdır. Daha sonra yapmaya çalışacağım.

Ana fikir, sütun adına kadar boruları saymak ve daha sonra istenen satırın adıyla başlayarak aynı miktarda boru kullanmaktır. Bundan sonra sonuç olan bir sonraki değeri yakalarız.

Burada çevrimiçi deneyin.


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'ta TEST

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>


Güzel, BTW Neden sadece firefox'ta? (FWIW Firefox kullanıyorum)
J Atkin

En son kontrol ettiğimde, Chrome henüz tahrip etmedi - Onaylandı, bu Chrome'da "
Ödevde

@JAtkin BTW neden bir oylama yapmıyorsunuz?
edc65

Yukarıdan aşağıya okudum, yorum bıraktım, başka bir şey yapmak zorunda kaldım ve unuttum;)
J Atkin

4

Haskell'in 117 116 111 bayt

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

Kullanım örneği:

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

Nasıl çalışır:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.