tło
Pracujesz jako programista w firmie zajmującej się sprzedażą samochodów. Twoim zadaniem na ten tydzień jest zaprogramowanie parsera XML, który pobiera dane o dostępnych modelach od różnych producentów samochodów i ładnie drukuje informacje o najnowszych modelach. Na szczęście dla ciebie dział testowy dostarczył tylko jeden przypadek testowy! Im szybciej możesz napisać kod, który go mija, tym więcej czasu masz na odwlekanie w pozostałej części tygodnia.
Wejście
Twój wkład to dokładnie ten fragment danych XML dostarczony przez dział testowy. Zawiera dane dotyczące niektórych producentów samochodów, ich serii samochodów i modeli w tych seriach. Możesz założyć końcowy znak nowej linii.
<?xml version="1.0" ?>
<products>
<manufacturer name="Test Manufacturer 1">
<series title="Supercar" code="S1">
<model>
<name>Road Czar</name>
<code>C</code>
<year>2011</year>
</model>
<model>
<name>Ubervehicle</name>
<code>U</code>
<year>2013</year>
</model>
<model>
<name>Incredibulus</name>
<code>I</code>
<year>2015</year>
</model>
<model>
<name>Model 1</name>
<code>01</code>
<year>2010</year>
</model>
</series>
<series title="Test series 22" code="Test">
<model>
<name>Test model asdafds</name>
<code>TT</code>
<year>2014</year>
</model>
</series>
</manufacturer>
<manufacturer name="Car Corporation">
<series title="Corporation Car" code="CC">
<model>
<name>First and Only Model</name>
<code>FOM</code>
<year>2012</year>
</model>
</series>
</manufacturer>
<manufacturer name="Second Test Manufacturer">
<series title="AAAAAAAAAAAAAA" code="D">
<model>
<name>Some older model</name>
<code>O</code>
<year>2011</year>
</model>
<model>
<name>The newest model</name>
<code>N</code>
<year>2014</year>
</model>
</series>
<series title="BBBBBBBBBBBBBBB" code="asdf">
<model>
<name>Another newest model here</name>
<code>TT</code>
<year>2015</year>
</model>
</series>
</manufacturer>
</products>
Wynik
Twój wynik to ten ciąg. Podaje producentów samochodów w kolejności alfabetycznej, a następnie dwukropek i liczbę wyprodukowanych serii. Pod każdym producentem wymieniono nazwę serii, nazwę modelu i kod każdego z ich modeli, zaczynając od najnowszego i cofając się z roku na rok. Dopuszczalne są końcowe spacje i podziały wierszy, pod warunkiem, że wydruk będzie wyglądał podobnie do tego.
Car Corporation: 1 series
Corporation Car, First and Only Model (CC-FOM)
Second Test Manufacturer: 2 series
BBBBBBBBBBBBBBB, Another newest model here (asdf-TT)
AAAAAAAAAAAAAA, The newest model (D-N)
AAAAAAAAAAAAAA, Some older model (D-O)
Test Manufacturer 1: 2 series
Supercar, Incredibulus (S1-I)
Test series 22, Test model asdafds (Test-TT)
Supercar, Ubervehicle (S1-U)
Supercar, Road Czar (S1-C)
Supercar, Model 1 (S1-01)
Zasady i punktacja
Możesz napisać funkcję lub pełny program. Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone.
Zauważ, że dane wejściowe są stałe: nie musisz obsługiwać żadnych innych danych wejściowych niż podane tutaj. Twój program może zwracać bzdury, a nawet awarię, jeśli dane wejściowe zostaną zmodyfikowane w jakikolwiek sposób. W razie potrzeby możesz również zignorować dane wejściowe i zakodować dane wyjściowe. Nie można jednak używać bibliotek parserów XML lub HTML ani wbudowanych funkcji.
Odpowiedzi:
CJam,
109107 bajtówZauważ, że czterech znaków w ciągu na początku nie można wydrukować.
Wypróbuj online w interpretatorze CJam .
Pomysł
Jest to w zasadzie twardy kod, który dzieli dane wejściowe we wszystkich wystąpieniach < , > i " , wybiera określone fragmenty i przeplata je z pozostałymi częściami wyniku.
Po podzieleniu danych wejściowych fragmenty o indeksach 110 , 114 i 122 to Car Corporation , Corporation Car i First and Only Model . Kody serii i nazwy można znaleźć w indeksach 116 i 126, które można obliczyć, dodając 2 i 4 do indeksów nazw. Na koniec liczba serii to długość łańcucha Car Corporation podzielona przez 9 (oczywiście).
Zatem kodujemy część wyniku, która odpowiada temu producentowi, a
[114 122 110]
raczej ciąg"rzn"
.Kod
źródło
Bubblegum ,
227225 bajtówNie jest to zbyt konkurencyjne, ale po prostu nie mogłem się oprzeć opublikowaniu mojej pierwszej odpowiedzi na Bubblegum na rzeczywiste wyzwanie złożoności Kołmogorowa .
Zrzut heksowy można odwrócić za pomocą
xxd -r -c 18 > xml.bg
.Kod całkowicie ignoruje dane wejściowe. Kompresja została wykonana z zopfli , który używa formatu DEFLATE, ale uzyskuje lepszy stosunek niż (g) zip.
Dzięki @ Sp3000 za -2 bajty!
źródło
sed, 449 bajtów
Zakłada, że sed działa z
-nr
opcjami.Wersja bez golfa:
źródło
Bash,
388368365Mały test, ponieważ:
źródło
car_manufacturer.txt
. 2. Łańcuch tutaj miałby 3 bajty krótszy. 3. Użycie zopfli zamiast waniliowego gzip pozwala zaoszczędzić jeszcze 12 bajtów.<<L
z<<<(base encoded stuff)
.