Pertimbangkan tujuh gerbong kereta ASCII ini.
Mesin (E)
__
====== \/
| [] |=========
| )
================
O-O-O O-O-O \\
Mobil penumpang (P)
===============
| [] [] [] [] |
===============
O-O O-O
Gerbong (B)
===============
|-|-| | |-|-|
===============
O-O O-O
Tanker (T)
_____---_____
( )
===============
O-O O-O
Hopper (H)
_______________
\ | | | | | | /
===============
O-O O-O
Flatbed (F)
===============
O-O O-O
Gerbong (C)
=====
====| |====
| [] [] |
=============
O-O O-O
Tulis sebuah program yang ketika diberi urutan karakter EPBTHFC
, output itu representasi kereta ASCII, gunakan --
untuk kopling mobil. Karakter input paling kiri menjadi mobil kereta paling kanan. Kereta selalu menghadap ke kanan.
Misalnya, input EEHTBPFC
harus menghasilkan
__ __
===== ====== \/ ====== \/
====| |==== =============== =============== _____---_____ _______________ | [] |========= | [] |=========
| [] [] | | [] [] [] [] | |-|-| | |-|-| ( ) \ | | | | | | / | ) | )
=============--===============--===============--===============--===============--===============--================--================
O-O O-O O-O O-O O-O O-O O-O O-O O-O O-O O-O O-O O-O-O O-O-O \\ O-O-O O-O-O \\
Detail
- Ini adalah kode golf; program terpendek dalam byte menang.
- Urutan satu atau lebih huruf
EPBTHFC
adalah input yang valid. - Program Anda harus dapat meng-output semua 7 jenis mobil persis seperti yang muncul di atas.
- Ambil input dari baris perintah atau langsung dari pengguna (mis. Kotak pesan). Output ke stdout. (Kutipan di sekitar input baik-baik saja.)
- Ketinggian output harus 6 atau tinggi maksimum yang diperlukan untuk gerbong kereta yang ditarik.
- Jangan letakkan kopling (
--
) di bagian depan mobil pertama atau di belakang mobil terakhir.
code-golf
ascii-art
kolmogorov-complexity
Hobi Calvin
sumber
sumber
E
di depan dan mungkinkah ada di suatuE
tempat di tengah?Jawaban:
Perl, 265 byte
Karena entri ini berisi byte yang tidak sesuai dengan karakter ASCII yang dapat dicetak, entri ini tidak dapat disalin secara langsung di sini. Sebaliknya, saya menyediakannya sebagai hex dump. Pengguna pada sistem Unix-ish dapat merekonstruksi skrip dengan mengumpankan hex dump berikut ke
xxd -r
perintah:Script menggunakan fitur Perl 5.10
say
, dan karenanya harus dijalankanperl -M5.010
. Dibutuhkan argumen baris perintah tunggal yang terdiri dari huruf-hurufEPBTHFC
dan output pengaturan kereta mobil yang sesuai. Misalnya, inputFEH
menghasilkan output berikut:Kode yang dapat dibaca di awal skrip cukup mendekompresi string yang dikompresi zlib yang berisi isi skrip dan mengevaluasinya. Kode yang didekompresi, pada gilirannya, terlihat seperti ini:
Perhatikan bahwa semua gerbong kereta memiliki garis-garisnya yang empuk dengan panjang yang seragam, dan termasuk kopling (yang dilepas dari mobil paling kanan oleh loop keluaran). Kompresi DEFLATE yang digunakan oleh zlib sangat bagus dalam mengompresi data berulang seperti itu, jadi tidak perlu mencoba dan mengompresnya dengan tangan.
Perhatikan bahwa ini adalah upaya cepat pertama. Saya yakin akan mungkin untuk memotong beberapa byte dari panjang dengan bermain dengan variasi seperti menata ulang mobil kereta di sumbernya.
sumber
Python, 464
Saya melakukan pendekatan menggunakan kutukan. Itu tidak bisa bersaing, tetapi saya bersenang-senang dengannya (~ 630 bytes):
sumber
sl
2.0Python (
582488476450 Chars)Ascii-salad adalah string yang dikompresasikan dengan basis-zlib yang berisi angka-angka ...
sumber
string.decode('base64')
2.j=lambda y:y==4and'--'or' '
3. indentasi 1 spasi 4.for c in A[::-1]:i.append(C[c][y])
5.f.append(j(y).join(i)
for l in((y==4and'--'or' ').join(C[c][y]for c in A[::-1])for y in range(6-h,6)):print l
for y in range(6-h,6):print(y==4and'--'or' ').join(C[c][y]for c in A[::-1])
Python,
402369Terima kasih atas perbaikannya, ugoren!
sumber
range(6)
,for x,y in zip("EPBTHFC",range(0,42,6)):
Javascript,> 471 byte
Wah, sudah di atas skor terbaik, dan saya masih belum bisa mencetak semuanya secara berurutan. Tapi saya menghabiskan sore ini dan masih ingin menunjukkannya.
Hanya
console.log(c(L)); // L=train car letter
dan itu akan mencetak satu mobil di konsol. Saya tahu ada banyak pemangkasan yang bisa saya lakukan bahkan untuk ini saja, tetapi saya menyerah. : Psumber
<marquee>
kau setan jahat. Mengapa mereka pernah mencela Anda?Java (583 karakter)
Dengan kompresi dasar buatan sendiri - tidak yakin itu sangat efisien :-) String kereta (misalnya
EEHTBPFC
) harus dilewatkan sebagai parameter.Dibuka:
sumber
C #,
758664603562bytesBukan skor yang bagus, 200 atau lebih byte dalam string yang disandikan dengan buruk, dan sekitar 80 byte yang ditujukan untuk mendekode itu. Jumlah kode yang dihabiskan memilah kopling pada mesin! Sekarang meninggalkan ruang putih di bagian depan kereta, yang tidak rapi tetapi dalam aturan, dan juga memiliki dimensi data-string yang dikodekan, sesuatu yang saya enggan lakukan pada awalnya.
Diformat sedikit:
String dikompresi sangat sederhana dengan mengganti karakter yang diulang dengan representasi string dari jumlah karakter yang diikuti oleh karakter (minus 1), atau hanya karakter jika hanya ada satu dari mereka (saya ingin tetap dengan ASCII dan menghindari melakukan apa pun di tingkat sub-char). Encoder (tidak termasuk dalam skor):
sumber
Ini solusi saya di PHP (kompatibel v5.4), 512bytes. Bisa lebih pendek, tetapi hanya membuat build cepat untuk mencoba ini.
Ini adalah versi spread-out agar mudah dibaca:
sumber
Python, 491 byte
Saya suka bagaimana itu keluar, meskipun itu tidak akan menjadi pemenang.
sumber
if j==5...x[j]+=y[w[i]][j]+k
kex[j]+=y[w[i]][j]+('\\ 'if j==5 and w[i]=='E'else'--'if j==4 and i!=u-1 else' ')
untuk menghemat sedikit. (Anda juga dapat meletakkan tab alih-alih dua spasi di depanx[j]...
.)GNU sed , 491 bytes
Cobalah online!
Penjelasan
Ini pada dasarnya adalah skema kompresi khusus yang sangat naif. Baris pertama ditambahkan ke setiap huruf dalam input spasi dan
#
, untuk menandai akhir setiap bagian:7 baris berikutnya menggantikan setiap huruf dengan representasi terkompresi dari gambar ASCII yang sesuai:
14 baris berikutnya melakukan "dekompresi". Misalnya, sebuah
S
dekompresi menjadi enams
es, dans
dekompres menjadi dua spasi, jadiS
menjadi 12 spasi.Didekompresi, garis dari setiap mobil didahului oleh nomor baris, dan setiap mobil diakhiri oleh
#
. Sisa kode ditambahkan0123456;
(nomor garis dan pembatas) ke ruang pola dan kemudian, dalam satu lingkaran, menggantikan setiap digit dengan garis yang sesuai dari setiap mobil.Akhirnya, ia memotong ruang pola menjadi garis-garis dengan memisahkan angka dan membersihkan karakter asing:
Ada banyak ruang untuk perbaikan di sini. Saya tidak teliti sama sekali tentang menemukan set kompresi optimal, dan menggunakan tabel pencarian bukannya 14 terpisah
s///g
akan menjadi kemenangan yang mudah. Saya mungkin atau mungkin tidak mie dengan ini lagi.sumber
Python 3 , 529 byte
Cobalah online!
Kupikir aku akan mempostingnya karena tidak menggunakan kompresi apa pun, tidak seperti sebagian besar jawaban lain di sini.
sumber
C (gcc) ,
501499490489484 byte-2 -9 -1 -5 bytes berkat ceilingcat .
Cobalah online!
sumber