To jest moje pierwsze pytanie o codegolf, więc z góry przepraszam, jeśli nie jest właściwe, i cieszę się z wszelkich opinii.
Mam plik w tym formacie:
a | rest of first line
b | rest of second line
b | rest of third line
c | rest of fourth line
d | rest of fifth line
d | rest of sixth line
Rzeczywista zawartość jest różna, podobnie jak separator. Treść jest tylko tekstem. Separator pojawia się tylko raz w linii. W przypadku tej układanki możesz zmienić ogranicznik, np. Użyj „%” jako ogranicznika.
Pożądane wyjście:
a | rest of first line
b | rest of second line % rest of third line
c | rest of fourth line
d | rest of fifth line % rest of sixth line
Mam już zarówno skrypty ruby, jak i awk, aby to scalić, ale podejrzewam, że można mieć krótki oneliner. tj. jednowierszowy, którego można używać wraz z potokami i innymi poleceniami w wierszu poleceń. Nie potrafię tego rozgryźć, a mój własny skrypt musi zbyt długo kompresować się w wierszu poleceń.
Preferowane najkrótsze postacie. Dane wejściowe niekoniecznie są sortowane, ale interesuje nas tylko łączenie kolejnych wierszy z dopasowywaniem pierwszych pól. Istnieje nieograniczona liczba linii z pasującymi pierwszymi polami. Pole 1 może być dowolne, np. Nazwy owoców, nazwy własne itp.
(Pracuję na MacOS, więc osobiście najbardziej interesują mnie implementacje działające na Macu).
Oto drugi przykład / test. Uwaga „|” jest ogranicznikiem. Przestrzeń przed „|” jest nieistotny i jeśli resent powinien być uważany za część klucza. Używam „%” jako ogranicznika w danych wyjściowych, ale ponownie możesz zmienić ogranicznik (ale nie używaj nawiasów kwadratowych).
Wejście:
why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination
whom|[possessive] whose
whom|[subjective] who
whoever|[objective] whomever
whoever|[possessive] whosever
who|[possessive] whose
who|[objective] whom
Pożądane wyjście:
why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination%[possessive] whose%[subjective] who
whoever|[objective] whomever%[possessive] whosever
who|[possessive] whose%[objective] whom
źródło
["A|some text", "B|other text", "A|yet some other text"]
znaczy : nie jest pożądanym wejściem do przetestowania, ponieważ słowa kluczowe dlaA
nie są jeden po drugim na liście.Odpowiedzi:
Siatkówka , 17 bajtów
Zapisane w bajtach zakodowanych według ISO 8859-1.
Używa
;
zamiast|
jako separatora pola wejściowego.Wypróbuj online.
źródło
V ,
1613 bajtówWypróbuj online!
Powiedziałeś
Wybrałem więc
|
jako separator. Jeśli jest to nieprawidłowe, daj mi znać, a ja to zmienię.Wyjaśnienie:
źródło
Perl
-0n
, 2 + 43 = 45 bajtówPróbny:
źródło
SQL (PostgreSQL),
4372 bajtyWykorzystuje to przydatną funkcję agregującą string_agg w PostgreSQL. Dane wejściowe pochodzą z tabeli o nazwie
T
z 2 kolumnamiA
iB
. Aby lepiej dostosować się do pytania, załączyłem polecenie załadowania danych z pliku do tabeli. Plik też jestT
. Nie policzyłem instrukcji tworzenia tabeli.Wyjście będzie nieuporządkowane, ale jeśli jest to problem, można to naprawić za pomocą
ORDER BY A
SQLFiddle nie chciał dla mnie grać, ale to właśnie dostaję w mojej konfiguracji.
źródło
C, 127 bajtów
Działa z gcc. Zmieniono separator na
/
. Pobiera dane wejściowe ze standardowego wejścia i zapisuje dane wyjściowe na standardowe wyjście, więc wywołaj z przekierowaniem wejściowym./a.out <filename
Nie golfowany:
źródło
Pyth - 15 bajtów
Przyjmując kilka założeń dotyczących problemu, zmieni się, gdy PO wyjaśni.
Wypróbuj online tutaj .
źródło
Python 3 - 146 bajtów
Wejście to nazwa pliku lub ścieżka pliku, wyjście to standardowe wyjście. Mógłbym być znacznie krótszy, gdybym mógł pobierać dane jako surowy tekst z wiersza poleceńPobiera dane wejściowe ze standardowego wejścia i wyjścia na standardowe wyjście. Konfiguracja z separatorem
"|"
. Aby przetestować pierwsze przykładowe wejście, użyj separatora" | "
źródło
Java 7, 167 bajtów
Prawdopodobnie można go bardziej zagrać w golfa, stosując inne podejście ...
UWAGA: Powyższa metoda tworzy i zwraca a
HashMap
z pożądanymi parami klucz-wartość. Jednak nie drukuje go w dokładnym wyniku, jak w pytaniu OP z|
ogranicznikiem wyjścia między kluczami a nowymi wartościami. Sądząc po odpowiedzi SQL MickeyT, w której zwrócił tabelę bazy danych, pomyślałem, że jest to dozwolone; jeśli nie, należy dodać więcej bajtów dla funkcji drukowania.Kod niepoznany i testowy:
Wynik:
źródło
PowerShell, 85 bajtów
Ciągi są scalane przy użyciu tablicy hashtable:
Przykład
Ponieważ PowerShell nie obsługuje przekierowania standardowego przez
<
, zakładam, żeGet-Content .\Filename.txt |
będzie on używany jako domyślna metoda we / wy.Wynik
źródło
APL, 42 znaki
źródło
⌸
nie jest jednym bajtem w kodowaniu APL.Sed, 55 bajtów
Testowe uruchomienie :
źródło
q / kdb +, 46 bajtów
Rozwiązanie:
Przykład:
Wyjaśnienie:
źródło