Latar Belakang
Anda bekerja sebagai programmer untuk perusahaan penjualan mobil. Tugas Anda untuk minggu ini adalah memprogram parser XML yang mengambil data tentang model yang tersedia dari berbagai produsen mobil, dan mencetak informasi yang cantik tentang model-model terbaru. Beruntung bagi Anda, departemen pengujian hanya menyediakan satu uji kasus! Semakin cepat Anda dapat menulis kode yang melewatinya, semakin banyak waktu yang Anda miliki untuk penundaan selama sisa minggu ini.
Memasukkan
Input Anda persis seperti data XML ini, disediakan oleh departemen pengujian. Ini berisi data tentang beberapa produsen mobil, seri mobil mereka, dan model dalam seri ini. Anda dapat mengasumsikan baris baru yang tertinggal.
<?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>
Keluaran
Output Anda adalah string ini. Ini daftar pabrikan mobil dalam urutan abjad, diikuti oleh titik dua dan jumlah seri yang mereka buat. Di bawah masing-masing produsen, itu mencantumkan nama seri, nama model, dan kode masing-masing model mereka, mulai dari yang terbaru dan mundur ke tahun. Trailing whitespace dan line break dapat diterima, selama output Anda terlihat mirip dengan ini saat dicetak.
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)
Aturan dan Penilaian
Anda dapat menulis fungsi atau program lengkap. Hitungan byte terendah menang, dan celah standar tidak diizinkan.
Perhatikan bahwa input sudah diperbaiki: Anda tidak perlu mendukung input lain dari yang diberikan di sini. Program Anda diizinkan untuk mengembalikan omong kosong atau bahkan macet jika inputnya diubah dengan cara apa pun. Anda juga dapat mengabaikan input dan mengkode output, jika diinginkan. Namun, Anda tidak boleh menggunakan parser pustaka XML atau HTML atau built-in.
Jawaban:
CJam,
109107 bytePerhatikan bahwa empat karakter dalam string di awal tidak dapat dicetak.
Cobalah online di penerjemah CJam .
Ide
Ini pada dasarnya adalah hardcode yang membagi input pada semua kemunculan < , > dan " , memilih potongan tertentu dan interleave dengan bagian sisa dari output.
Setelah memisahkan input, potongan pada indeks 110 , 114 dan 122 adalah Car Corporation , Corporation Car dan First and Only Model . Kode untuk seri dan nama dapat ditemukan di indeks 116 dan 126, yang dapat dihitung dengan menambahkan 2 dan 4 ke indeks nama. Akhirnya, jumlah seri adalah panjang dari string Car Corporation dibagi 9 (jelas).
Dengan demikian, kami menyandikan bagian dari output yang sesuai dengan pabrikan ini sebagai
[114 122 110]
atau lebih tepatnya string"rzn"
.Kode
sumber
Bubblegum ,
227225 byteIni tidak terlalu kompetitif, tetapi saya tidak bisa menolak untuk mengirim jawaban Bubblegum pertama saya ke tantangan kompleksitas-kolmogorov yang sebenarnya .
Hexdump dapat dibalik dengan
xxd -r -c 18 > xml.bg
.Kode sepenuhnya mengabaikan input. Kompresi telah dilakukan dengan zopfli , yang menggunakan format DEFLATE tetapi mendapatkan rasio yang lebih baik daripada (g) zip.
Terima kasih kepada @ Sp3000 untuk -2 byte!
sumber
sed, 449 byte
Diasumsikan sed akan dijalankan dengan
-nr
opsi.Versi tidak disatukan:
sumber
Bash,
388368365Tes kecil karena:
sumber
car_manufacturer.txt
,. 2. Sebuah string di sini akan lebih pendek 3 byte. 3. Menggunakan zopfli bukan vanilla gzip menyimpan 12 byte lebih banyak.<<L
dengan<<<(base encoded stuff)
.