Hintergrund
Sie arbeiten als Programmierer für eine Autoverkaufsfirma. Ihre Aufgabe für diese Woche ist es, einen XML-Parser zu programmieren, der Daten zu verfügbaren Modellen verschiedener Autohersteller aufnimmt und Informationen zu den neuesten Modellen druckt. Zum Glück hat die Testabteilung nur einen Testfall zur Verfügung gestellt! Je schneller Sie Code schreiben können, der ihn übergibt, desto mehr Zeit steht Ihnen für den Rest der Woche zur Verfügung.
Eingang
Ihre Eingabe besteht genau aus diesen XML-Daten, die von der Testabteilung bereitgestellt werden. Es enthält Daten zu einigen Autoherstellern, ihren Fahrzeugserien und den Modellen dieser Serien. Sie können von einem nachgestellten Zeilenumbruch ausgehen.
<?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>
Ausgabe
Ihre Ausgabe ist diese Zeichenfolge. Es listet die Autohersteller in alphabetischer Reihenfolge auf, gefolgt von einem Doppelpunkt und der Anzahl der Serien, die sie herstellen. Unter jedem Hersteller werden der Serienname, der Modellname und der Code jedes einzelnen Modells aufgelistet, beginnend mit dem neuesten Modell und rückwärts nach Jahr. Nachgestellte Leerzeichen und Zeilenumbrüche sind zulässig, sofern Ihre Ausgabe beim Drucken ähnlich aussieht.
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)
Regeln und Wertung
Sie können entweder eine Funktion oder ein vollständiges Programm schreiben. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.
Beachten Sie, dass die Eingabe fest ist: Sie müssen keine anderen Eingaben als die hier angegebene unterstützen. Ihr Programm kann Unsinn zurückgeben oder sogar abstürzen, wenn die Eingabe in irgendeiner Weise geändert wird. Bei Bedarf können Sie auch die Eingabe ignorieren und die Ausgabe hart codieren. Möglicherweise verwenden Sie jedoch keine XML- oder HTML-Parser-Bibliotheken oder integrierten Funktionen.
Antworten:
CJam,
109107 BytesBeachten Sie, dass vier der Zeichen in der Zeichenfolge am Anfang nicht druckbar sind.
Probieren Sie es online im CJam-Interpreter aus .
Idee
Dies ist im Grunde ein Hardcode, der die Eingabe bei jedem Auftreten von < , > und " aufteilt, bestimmte Blöcke auswählt und sie mit den übrigen Teilen der Ausgabe verschachtelt.
Nach der Aufteilung der Eingabe lauten die Blöcke bei den Indizes 110 , 114 und 122 " Car Corporation" , " Corporation Car" und " First and Only Model" . Die Codes für Serien und Namen finden Sie in den Indizes 116 und 126, die durch Addition von 2 und 4 zu den Indexen der Namen berechnet werden können. Schließlich ist die Anzahl der Serien die Länge des Strings Car Corporation geteilt durch 9 (offensichtlich).
Wir kodieren also den Teil der Ausgabe, der diesem Hersteller entspricht, als
[114 122 110]
oder vielmehr den String"rzn"
.Code
quelle
Bubblegum ,
227225 BytesDas ist nicht sehr konkurrenzfähig, aber ich konnte einfach nicht widerstehen, meine erste Bubblegum-Antwort auf eine echte Herausforderung der Kolmogorov-Komplexität zu veröffentlichen .
Der Hexdump kann mit umgekehrt werden
xxd -r -c 18 > xml.bg
.Der Code ignoriert die Eingabe vollständig. Die Komprimierung wurde mit zopfli durchgeführt , das das DEFLATE-Format verwendet, aber ein besseres Verhältnis als (g) zip erzielt.
Danke an @ Sp3000 für -2 Bytes!
quelle
sed, 449 bytes
Vorausgesetzt, sed wird mit den
-nr
Optionen ausgeführt.Ungolfed-Version:
quelle
Bash,
388368365Kleiner Test, weil:
quelle
car_manufacturer.txt
. 2. Eine Here-Zeichenfolge wäre 3 Byte kürzer. 3. Die Verwendung von zopfli anstelle von Vanille-Gzip spart 12 weitere Bytes.<<L
mit<<<(base encoded stuff)
.