表を読む


11

仕事

座標セットを指定してテーブルの内容を読み取ります。

テーブルの書式設定

テーブルは次の基本形式になります。

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

列名は、列内で常に一意です。行名もrows内で一意です。これには、空白を除いて同じ名前が含まれます。値、列名、行名は|-内部にありません。名前と値の内部にスペースが含まれることはありませんが、先頭または末尾にスペースが含まれる場合があります。列幅は、ヘッダー/コンテンツに基づいて調整可能です。列幅は常に上から下まで一貫しています。

入力

テーブルと[name]sのスペース区切りリスト。

[table]
row col

関数を作成している場合、これらは別々の文字列にすることができます。そうでない場合は、row col常に入力の最後の行になります。row colこの形式にはある程度の柔軟性があり、さまざまな方法で表現できます。(例えば(row, col)r, c、...)。唯一の厳しい要件は、それが1行であり、順序で表示される必要があること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アトキン

入力は明示的にしていませんが、単一の文字列として入力されるようです。入力フォーマットにはどれくらいの柔軟性がありますか?関数に値の配列を渡すことは受け入れられますか?(いいえ、それは文字列でなければなりません)行/列をテーブルへの個別の引数として与えることができますか?(おそらく推測しています。)明確にしてください。
レベルリバーセント

それは役立ちますか?
Jアトキン

列が上下に移動し、行が左右に移動しませんか?あなたの例の座標は逆になっていると思います。
KoreanwGlasses

回答:


2

網膜、90バイト

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

私の最初のバランスグループ正規表現。それはまだよくゴルフできるはずです。後でやろうとします。

主なアイデアは、列名までパイプをカウントし、目的の行の名前から始まる行で同じ量のパイプを使用することです。その後、結果である次の値をキャプチャします。

こちらからオンラインでお試しください。


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>


ニース、ところでなぜFirefoxだけで?(FWIW、私はFirefoxを使用して)
Jアトキン

前回チェックしたとき、Chromeはまだ割り当ての破壊を実装していませんでした-確認、Chromeで「割り当ての左側が無効です」というエラーが発生しました
-edc65

@JAtkinところで、なぜ投票しないのですか?
edc65

上から下に読み、コメントを残し、何か他のことをしなければならなかった、そして忘れてしまった;)
Jアトキン

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.