Ini merupakan masalah pada Luogu OJ. Saya memutuskan untuk mempostingnya di sini karena di Luogu OJ, banyak orang, termasuk saya dan teman saya, tertarik tentang bagaimana menyelesaikan masalah ini dalam karakter paling sedikit.
Tugas Anda adalah menampilkan seni ASCII berikut:
************
####....#.
#..###.....##....
###.......###### ### ###
........... #...# #...#
##*####### #.#.# #.#.#
####*******###### #.#.# #.#.#
...#***.****.*###.... #...# #...#
....**********##..... ### ###
....**** *****....
#### ####
###### ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
########################################## #----------#
#.....#......##.....#......##.....#......# #----------#
########################################## #----------#
#.#..#....#..##.#..#....#..##.#..#....#..# #----------#
########################################## ############
Ini adalah kode-golf, sehingga program terpendek menang.
code-golf
ascii-art
kolmogorov-complexity
Sangat Radioaktif
sumber
sumber
Jawaban:
Brainfuck , 1347 bytes
Mengapa saya melakukan ini pada diri saya sendiri
Cobalah online!
Versi "dapat dibaca":
sumber
T-SQL,
322 298288 byteMenggunakan kompresi G-Zip yang dibangun ke dalam SQL 2016 dan yang lebih baru, bersama dengan pengkodean Base64, lihat kiat posting ini untuk detailnya .
Di SSMS, Anda harus output sebagai teks setelah mengutak-atik batas karakter SSMS di pengaturan, atau cukup salin dan tempel output ke jendela kode:
EDIT : Disimpan 24 byte dengan string terkompresi yang lebih baik, terima kasih kepada @someone; menyimpan 10 byte dengan menggunakan konversi implisit
CONCAT
, terima kasih kepada @digscoop.sumber
H4sIAAAAAAACA6WRQYrEIBQF955CqJ0wdf/jjehM2rwOdofUQvIoHj9f65m2UMLRsYNng/4ZQU0NThjUtBFLDXwRBpWIWYfGpCaIRCy5cZswuFVX6U3bOAA73/+8nXYw2368uWwfj3r5MKzfq4W0UHhEQcUBsk0/b9yafllX9P/YpeDu7rVDTF6226WoPpy6bMUmPZ66UH4BHz4rVE8EAAA=
,. Saya tidak dapat menguji ini karena saya tidak tahu caranya, tetapi Anda mungkin atau mungkin tidak dapat menghilangkannya=
.=
), dan menyimpan 24 byte; kira rutin encoding saya jauh dari ideal.DECLARE @ XML='H4sIAAAAAAACA6WRQYrEIBQF955CqJ0wdf/jjehM2rwOdofUQvIoHj9f65m2UMLRsYNng/4ZQU0NThjUtBFLDXwRBpWIWYfGpCaIRCy5cZswuFVX6U3bOAA73/+8nXYw2368uWwfj3r5MKzfq4W0UHhEQcUBsk0/b9yafllX9P/YpeDu7rVDTF6226WoPpy6bMUmPZ66UH4BHz4rVE8EAAA='SELECT CONCAT('',DECOMPRESS(@.value('.','varbinary(max)')))
CONCAT
trik, tetapi bukan variabel XML, karena itu akan menambahkan kembali 3 byte (akan lebih pendek, meskipun, dalam situasi saya sudah memiliki variabel)PHP ,
176155 byte-21 byte berkat string super terkompresi Ryan Moore .
Versi ini menggunakan output mentah dari gzdeflate dan berisi data biner yang tidak dapat dicetak , sehingga kode itu sendiri dan tautan TIO tidak dapat diposting di sini, tetapi berikut ini adalah kumpulan hex-nya:
Berkat @dzaima , ini adalah TIO yang menggunakan bash untuk membuat dan menjalankan file ini: Coba online!
Ini pada dasarnya membalikkan deflate dan mencetak hasilnya. Simpan sebagai file biner kemudian jalankan seperti ini:
php mario.php
PHP ,
239216 byte-23 byte berkat string super terkompresi Ryan Moore .
Cobalah online!
Sama seperti versi di atas, tetapi menggunakan base64_encode pada output
gzdeflate
, sehingga kode dapat dibaca dan tautan TIO juga tersedia. Ini pada dasarnya membalikkan base64 dan mengempis dan mencetak hasilnya.sumber
Bubblegum , 138 byte
Cobalah online!
sumber
Jelly ,
235213 byteCobalah online!
Menggunakan kombinasi pengkodean run-length dan penggantian urutan panjang-2 yang sama dengan satu digit. Tidak menggunakan pustaka kompresi standar seperti gzip. Secara keseluruhan memiliki 169 byte data terkompresi dan 44 kode.
Penjelasan
Langkah 1: ganti nilai dalam data antara 17 dan 39 dengan pasangan byte prestored
Langkah 2: Jalankan decode panjang dan konversikan ke string
sumber
LaTeX,
452448 byteDibuat dengan penggantian bigram (dan satu trigram) alih-alih memprogram loop untuk mengganti beberapa simbol berturut-turut.
LaTeX, 506 byte
Kemungkinan besar akan ada varian yang lebih efisien, tetapi ini adalah apa yang saya berhasil dapatkan dengan tangan (tidak ada alat kompresi bawaan di LaTeX ...). Saya membuat lingkaran kecil untuk menggantikan urutan berurutan.
Output terminal (dari kedua kode):
sumber
Bash + coreutils + xz,
243242240 bytesumber
Keg ,
22041012745 byteCobalah online!
Disimpan 267 byte berkat @Sriotchilism O'Zaic
Program 1012 byte
Cobalah online!
Ini hanya pengodean run-length dari gambar ascii tetapi diimplementasikan dalam Keg
Program lama
Cobalah online!
Saya tahu ini mungkin tidak akan memenangkan kompetisi apa pun, tapi hei, ini terlihat bagus. Secara harfiah hanya melarikan diri dari setiap karakter dan mencetaknya. Maksud saya, ini bisa bermain golf, tetapi tidakkah Anda hanya menyukai program seni ascii?
sumber
JavaScript (Node.js) ,
265264 byteDisimpan 1 byte berkat @ Night2
Kempes.
Cobalah online!
JavaScript (Node.js) , 318 byte
Pergantian string yang berurutan.
Cobalah online!
JavaScript (ES7), 340 byte
Hancur.
Cobalah online!
Atau di sini:
Tampilkan cuplikan kode
sumber
C (gcc) ,
322320318316 byte-2 bytes berkat ceilingcat.
Cobalah online!
sumber
Bash + coreutils,
269262261 BytesAgak sepele - tidak ada yang pintar terjadi di sini. Saya tidak yakin apakah saya diizinkan menggunakan gzip seperti ini. Jika tidak, saya tidak ragu seseorang akan meneriaki saya.
(lebih baik jika saya menghapus spasi / tanda kutip)
Terima kasih kepada @manatwork karena telah menghemat satu byte
Cobalah online!
sumber
echo
perintah dan sebuah pipa dengan membuatnyabase64 -d<<<...|gunzip
Python3,
921 916 752 751 539 534476 byteDan ini adalah versi adil yang wajib. Saya menggunakan skrip untuk menghitung karakter individu, harus identik:
Cobalah online!
Atas perkenan orang-orang hebat dalam komentar yang jauh lebih baik daripada saya!
Dan inilah skrip (python3) untuk orang lain yang mungkin ingin menghasilkan beberapa kode dan terlalu malas / efisien untuk menghitung secara manual:
Lubang Python3 disalahgunakan, 167 byteKarena tidak ada yang dikatakan tentang celah standar, saya akan menyelinap di sini selama saya bisa. TIO tidak suka urllib karena alasan tertentu, jika ada yang tahu situs untuk meng-host skrip tolong beri tahu saya. Jelas penyingkat tautan dapat menghemat beberapa byte, tetapi saya tidak ingin turun lebih jauh dari lubang kelinci itu.
sumber
many people, including me and my friend, are interested about how to solve this problem within the fewest characters
, saya pikir itu mungkin layak tertawa; yang mana yang cocok dengan tema pemrograman rekreasi posting ini dan bagian-bagian dari situs ini.print(input())
MarioLANG ,
3287 32863285 BytesSaya harus melakukan ini untuk tema.
Cobalah online!
Ini mengerikan dan saya sangat menyesal.Loops bisa menjadi sangat mahal (dengan byte bijaksana) di MarioLANG jika Anda tidak pintar tentang mereka dan juga saya hampir kehilangan keinginan untuk hidup pada saat saya sampai sejauh ini sehingga Mario benar-benar hanya berjalan dalam garis lurus, pertama mengatur 6 sel memori ke nilai ASCII yang benar, kemudian beralih di antara mereka ke output dalam urutan yang benar. Ini pasti bisa diturunkan lebih jauh dan jika Anda benar-benar membenci diri sendiri, saya sangat menyarankan Anda mencobanya.(Disimpan satu byte dengan menghapus sama dengan terakhir (karakter lantai) sejak Mario hits instruksi terakhir saat ia jatuh bahkan tanpa itu dan yang lain dengan menyadari bahwa ia benar-benar bisa mengenai dua instruksi di musim gugur.)
5413 Bytes
Cobalah online!
Ini adalah port dari jawaban The random guy menggunakan Dennis's Brainfuck to MarioLANG converter membuat perubahan yang sangat kecil untuk menghemat beberapa byte. Meskipun ini jelas jauh lebih lama, itu mencakup lebih banyak fitur bahasa dan lebih baik menunjukkan bagaimana bahasa bekerja jadi saya pikir saya akan memasukkannya.
sumber
Pyth , 211 byte
Cobalah online!
Metode kompresi: Karena hanya ada 6 karakter, spasi, baris baru dan juga
#.-*
, ganti masing-masing dengan surat daria-f
. Setelah itu, jalankan-panjang encode semuanya (aaaaaccc
->5a3c
dll), lalu kompres menggunakan zlib.String yang dikompresi adalah
sumber
Bash , 486 byte
Cobalah online!
String Run-Length Encoded $ S yang dihasilkan oleh program non-golf di sini: Cobalah online!
Kemudian variabel $ a, $ b, $ c dalam $ S diganti dengan inspeksi manual, dan tanda centang tunggal harus diloloskan dalam $ S untuk memungkinkan variabel yang akan digunakan.
sumber
Perl,
422396370366365 karakterRun-length dikodekan dalam 2 langkah: karakter berturut-turut dan pola beberapa karakter berturut-turut.
Cobalah online!
sumber
PHP,
608565557 byteMenggunakan GMP,
5kJvr...
string dibuat dengan terlebih dahulu menggunakan substitusi untuk mengubah aslinya ke basis56, lalu GMP untuk mengkonversi ke basis 62.Jalankan online.
sumber
Python3, 557 byte
Jalankan panjang yang disandikan, kemudian beberapa substring berulang (spasi kemudian tiga "#", "-" dikelilingi oleh blok, dll) diekstraksi secara manual. Pasti ruang untuk perbaikan
Python3, 789 byte
Bersenang-senang dengan generator nomor acak. Gambar dijalankan panjangnya disandikan, kemudian dipecah menjadi potongan-potongan 6. Potongan pertama (indeks untuk simbol untuk dicetak) dihasilkan dari generator angka pseudo-acak. Yang kedua adalah pengkodean base64 dari 6 angka.
sumber
print(line1,line2,...,sep='\n')
C,
114210681044 byteIni tidak terlalu bagus, tapi saya berhasil. Pada dasarnya, saya pergi baris demi baris dan di mana saja satu fungsi ditambah dua atau lebih panggilan fungsi lebih pendek dari teks asli, saya mengganti teks dengan fungsi.
Menghemat 99 byte hanya dengan menggunakan printf langsung.
Disimpan 69 byte dengan menghapus penentu int dan void , dan #include <stdio> . Menyimpan 2 byte lainnya dengan mendeklarasikan saya sebagai global alih-alih di dalam for loop. Menyimpan 3 byte lainnya mengubah printf ke putchar di dua tempat. Menghapus 21 byte lainnya dengan perubahan yang disarankan oleh @Christian Gibbons: Deklarasi variabel yang dihapus di awal, mengubah loop for menjadi loop decrementing while , mengubah '\ n' menjadi 10 di fungsi n () . Menyimpan 3 byte lainnya mengubah putchar (10) menjadi menempatkan ("") , berkat jawaban ini .
1143 byte
Cobalah online di sini .
Tidak diikat (ish)
sumber
s,a,h,d,m,
dari awal, itu akan secara implisit dinyatakan sebagaiint
ketika Anda menginisialisasi mereka segera setelah itu.for(;i++>n;)
akan memungkinkan Anda untuk menghindari menulisi
lagi di dalam loop.putchar('\n')
->putchar(10)
untuk mencukur beberapa byte lagi. Juga terlihat seperti Anda punya asing;
di Andaz
fungsi.i
semuanya. Alih-alih for-loop, lakukanwhile(n--)
x()
ke atas, Anda dapat memilikic()
dano()
memanggilnya untuk menyimpan beberapa byte.x()
itu sendiri dapat mengambilint*
, karena semua pointer cenderung memiliki ukuran yang sama, dan mencetak menggunakanprintf(c)
untuk menghemat beberapa byte lagi. Dua fungsi dapat disingkat:n(){p(10,1);}
danp(c,n){while(n--)x(&c);}
(mengasumsikan little endian). Setiap kali Anda memanggil suatu fungsi tanpa argumen, Anda dapat menggunakan pemanggilan fungsi sebelumnya sebagai argumen, seperti:c();n();
->n(c());
.Python ,
340378 byteSaya mengacaukan pengkodean dalam jawaban asli, inilah yang didasarkan pada kompresi LZW. Mungkin mengunjungi kembali jawaban asli saya di beberapa titik.
Cobalah online!
sumber
JavaScript murni 419 byte (tanpa lib)
Kompresi (1 langkah: hitung setiap karakter dalam hex, mis.
**********
Memberi*a
, 2 langkah: konversi dua karakter seperti * 1 atau # 4 menjadi kode ascii gratis char witch tunggal)Tampilkan cuplikan kode
Dekompresi
Tampilkan cuplikan kode
sumber
PowerShell + tar, 265 = 9 + 256 byte
Skrip ini berfungsi dengan Windows dan Linux. Script mengekstrak output dari arsip tar
t
(256 byte). Thet
harus ditempatkan di direktori yang sama seperti script.Cobalah online!
Script powershell untuk membuat arsip tar
t
:sumber
Perl dengan Filter: modul sh, 672 byte
Ini panjang tetapi juga agak tidak terbaca jadi saya pikir itu memenuhi syarat sebagai jawaban golf ...
Penjelasan: filter menggantikan
S
dengan" "
dan angka denganx(num) .
, jadi misalnyaS14
menjadi" "x14
. Dalam Perl ini berarti "cetak spasi 14 kali". Selain itu ada beberapa kompresi manual untuk urutan yang sering terjadi menggunakan variabel$a
-$h
.sumber
s/regex/replace/g
sintaksis secara asli?e
pengubah regex yang diperlukan di sini untuk mengeksekusi operator x setelah substitusi - tetapi sekarang saya lakukan: DSOGL V0.12 , 971 byte
Saya cukup menyalin seluruh string ke kompresor. Saya menyadari bahwa tali itu tidak banyak dikompresi.
Coba Di Sini!
sumber