Przeczytaj tabele

11

Zadanie

Przeczytaj zawartość tabeli, biorąc pod uwagę zestaw współrzędnych.

Formatowanie tabeli

Tabele będą miały ten podstawowy format:

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

Nazwy kolumn są zawsze unikalne w obrębie kolumn . Nazwy wierszy są również unikalne w obrębie wierszy . Obejmuje to te same nazwy, z wyjątkiem białych znaków. Wartości, nazwy kolumn i nazwy wierszy nigdy nie będą |-w nich znajdować się. Nazwy i wartości nigdy nie będą miały w nich spacji, ale mogą mieć spację wiodącą lub końcową. Szerokość kolumny jest regulowana w zależności od nagłówka / treści. Szerokość kolumny jest zawsze spójna od góry do dołu.

Wejście

Tabela rozdzielona spacjami lista [name]s.

Przykład

[table]
row col

Jeśli piszesz funkcję, mogą to być osobne ciągi, w przeciwnym razie row colzawsze będzie to ostatni wiersz na wejściu. row colma pewną elastyczność formatu i może być reprezentowany na wiele sposobów. (np (row, col), r, c...). Jedynym trudnym wymaganiem jest to, aby była to jedna linia i aby występowała w kolejności col row.

Wynik

Zawartość komórki określona przez dane wejściowe bez spacji wiodących lub końcowych z komórki .

Przykłady

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
źródło
Czy komórka wymagana w danych wejściowych zawsze będzie istnieć w tabeli?
ETHproductions
Och, teraz rozumiem;) Tak, będzie
J Atkin
Wygląda na to, że dane wejściowe zostaną podane w postaci pojedynczego ciągu, chociaż nie zostało to wyraźnie określone. Jaką elastyczność ma format wejściowy? Czy przekazanie tablicy wartości do funkcji jest dopuszczalne? (Zgaduję, że nie, to musi być ciąg znaków) Czy wiersz / col można podać jako osobne argumenty do tabeli? (Pewnie chyba.) Proszę o wyjaśnienie.
Level River St
To pomaga?
J Atkin
Czy kolumny nie idą w górę / w dół, a wiersze w lewo / w prawo? Wierzę, że współrzędne w twoich przykładach są odwrócone.
KoreanwGlasses

Odpowiedzi:

2

Siatkówka, 90 bajtów

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

Moja pierwsza grupa równoważąca regex. Nadal powinno dobrze grać w golfa. Spróbuję to zrobić później.

Głównym pomysłem jest zliczanie rur do nazwy kolumny, a następnie użycie tej samej ilości rur w rzędzie, zaczynając od nazwy żądanego wiersza. Następnie przechwytujemy następną wartość, która jest wynikiem.

Wypróbuj online tutaj.

randomra
źródło
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 w przeglądarce 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
źródło
Fajnie, BTW Dlaczego właśnie w Firefoxie? (FWIW używam firefoxa)
J Atkin
Ostatnim razem, gdy sprawdzałem, Chrome nie wdrożył jeszcze zadania Destrukturyzacja - potwierdzone, to daje błąd w Chrome „Nieprawidłowe przypisanie lewej strony”
edc65,
@JAtkin BTW, dlaczego nie upvote?
edc65
Czytałem od góry do dołu, zostawiłem komentarz, musiałem zrobić coś innego i zapomniałem;)
J Atkin
4

Haskell, 117 116 111 bajtów

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

Przykład użycia:

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

Jak to działa:

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
źródło