Читать таблицы


11

задача

Прочитайте содержимое таблицы с учетом набора координат.

Форматирование таблицы

Таблицы будут в этом основном формате:

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

Имена столбцов всегда уникальны внутри столбцов . Имена строк также уникальны в строках . Это включает в себя имена, которые являются одинаковыми, кроме пробелов. Значения, имена столбцов и имена строк никогда не будут |-внутри них. Имена и значения никогда не будут иметь пробелов внутри них, но могут иметь начальный или конечный пробел. Ширина Col регулируется в зависимости от заголовка / содержимого. Ширина столбца всегда соответствует сверху вниз.

вход

Таблица и разделенный пробелами список [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 Аткин

Кажется, что ввод будет представлен в виде одной строки, хотя вы не сделали это явным. Насколько гибка входной формат? Является ли передача массива значений в функцию приемлемой? (Полагаю, нет, это должна быть строка) Можно ли задавать строку / столбец в качестве отдельных аргументов таблицы? (Наверное, наверное.) Пожалуйста, уточните.
Уровень Река Св

Это помогает?
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 Atkin

В прошлый раз, когда я проверял, Chrome еще не реализовал назначение «Разрушение». Подтверждено, что в Chrome
выдается

@JAtkin Кстати, почему не upvote?
edc65

Я прочитал сверху вниз, оставил комментарий, должен был сделать что-то еще, и забыл;)
J Аткин

4

Haskell, 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.