Tugas Anda adalah menampilkan representasi pohon kehidupan yang legendaris, Yggdrasil .
Anda harus menulis sebuah program yang hasilnya persis seperti itu:
/\
/**\
/****\
/******\
/******\
/********\
/**********\
/************\
/**************\
/************\
/**************\
/****************\
/******************\
/********************\
/**********************\
/******************\
/********************\
/**********************\
/************************\
/**************************\
/****************************\
/******************************\
/************************\
/**************************\
/****************************\
/******************************\
/********************************\
/**********************************\
/************************************\
/**************************************\
/******************************\
/********************************\
/**********************************\
/************************************\
/**************************************\
/****************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************\
/**************************************\
/****************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/****************************************************************\
/******************************************************************\
/********************************************************************\
/**********************************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/****************************************************************\
/******************************************************************\
/********************************************************************\
/**********************************************************************\
/************************************************************************\
/**************************************************************************\
/****************************************************************************\
/******************************************************************************\
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|________|
Tidak ada spasi spasi tambahan. Baris baru terakhir dapat dihilangkan.
Untuk mempermudah pemeriksaan, berikut adalah jumlah md5 dari output yang diharapkan:
374899e56bc854d04639c43120642e37
- Tidak ada baris baru di akhir.03afb81d960b8e130fe2f9e0906f0482
- Baris baru di akhir
Celah standar berlaku. Ini kode-golf, jadi entri terkecil dalam byte menang!
code-golf
ascii-art
kolmogorov-complexity
caird coinheringaahing
sumber
sumber
Jawaban:
Golfscript,
8477767572 karakterPendekatan yang berbeda dari Howard . Klik pada jumlah karakter untuk mencobanya.
Terima kasih kepada Howard karena telah menyimpan 3 karakter!
Penjelasan :
Ini kurang lebih adalah port langsung dari solusi Python saya . Mengambil beberapa kebebasan ekspresif (menggunakan variabel bernama alih-alih melacak posisi tumpukan, dan
print
benar-benar menyimpan hal-hal di tumpukan, bukan mencetak):sumber
'\\'n
menarik baris baru ke string (+/- 0 karakter) dan sekarang garis miring terbalik tidak perlu lagi melarikan diri (-1 karakter).4*4+
sama dengan)4*
dan'_-'[=]
dapat ditulis'_-'1/=
yang membuat yang terakhir+
menjadi usang.Haml & Sass
37 + 277 = 314
Haml:
Kelancangan:
* Sass memungkinkan arahan kontrol, gabungan, dan dereferensi variabel. Kesemuanya berguna saat menata rambut, tetapi bertele-tele saat bermain golf.
akan dihasilkan menjadi:
HTML:
CSS:
halaman yang dihasilkan
sumber
CJam , 62 byte
Cobalah online!
Bagaimana itu bekerja
sumber
GolfScript, 79 karakter
Coba kodenya di sini . Perhatikan bahwa jeda baris tidak opsional dalam kode ini
sumber
Python,
148129126121 karakterTerima kasih kepada Falko karena telah menyimpan 3 karakter dan untuk flornquake karena telah menyelamatkan 5 karakter lainnya dengan cemerlang!
sumber
'**'*j
untuk menyimpan 3 karakter. Terlepas dari ini, solusi saya konvergen ke kode yang sama persis. :)for c in'-'*11+'_':print' '*35+'|'+c*8+'|'
.Pesta,
236 19719310 byte kode + nama file 1-byte + file data 182-byte = total 193 byte
Penjelasan
y
adalah file yang berisi Yggdrasil, tanpa baris baru yang tertinggal, dikompresi dengan algoritma zopfli (dipanggil sebagaizopfli --i64
) dan kemudian dengan 8 byte terakhir dihapus. zopfli kompatibel dengan gzip, jadi saya bisa mendekompres file dengan utilitas Bash standar yang dirancang untuk gzip. Ukuran file data adalah 182 byte (229 byte saat gzip normal digunakan). Ukuran Yggdrasil asli, tanpa garis baru yang tertinggal, adalah 5876 byte.Penghapusan 8 byte terakhir menyebabkan pesan kesalahan, yang ditekan dengan mengirimkan kesalahan standar ke file yang disebut
j
. Jikaj
ada, itu akan ditimpa.Base64 of
y
is (digunakanbase64 -d
untuk mendapatkan file asli):Dan md5sum adalah:
sumber
C, 169
Tidak disatukan (dan sedikit terurai):
sumber
Ruby - 100
Letakkan flattens otomatis, sehingga kami dapat mengumpulkan semua baris bahkan dalam array bersarang. Membutuhkan Ruby 1.9
Coba ideone
sumber
PowerShell
104101sumber
C #
258234bytesBerkat beberapa pengguna yang menjengkelkan untuk pengeditan yang disarankan memanfaatkan metode String.PadLeft!
Kode ini cukup sederhana, tidak banyak yang tersisa untuk golf.
Kode yang diformat:
sumber
\r
tidak ada gunanya di sini. Ini kode golf.J,
98 88 8475sumber
Perl, 127
Tidak Disatukan:
sumber
Ruby -
139129126123121Hoisted "menempatkan" di luar pembuatan array (saran dari bitpwner).
Tidak diseret ("menempatkan" tanpa cedera):
sumber
PHP
223202181160156Sunting Saya menemukan cara alias fungsi dengan variabel dan mampu memangkas beberapa karakter lagi. Itu
str_repeat
fungsi benar-benar verboseSunting 2: Terima kasih semuanya atas sarannya!
Golf:
Dapat dibaca:
Output: http://brobin.me/yggdrasil.php
sumber
(39-$j)
,($j*2)
dan($i==11)
. -2 dengan mengganti\n
dengan karakter garis nyata baru (PHP memungkinkannya dalam litterals). -5 karakter dengan mengganti (keduanya)for($i=0;$i<12;$i++)
denganfor($i=12;$i-->0;)
dan$i==11
dengan$i==0
.$s(($i==0?'_':'-'),8)
dengan$s($i?'-':'_',8)
. (==> -5 karakter)$s('*',$j*2)
dengan$s('**',$j)
. Saya pikir itu peningkatan terakhir yang bisa saya temukan.($j*2)
bagian dalam untuk ke($j++*2)
dan menghapus$j++
darifor()
argumenfor($i=12;$i-->0;)
dapat disingkat menjadifor($i=12;$i--;)
- 2 karakter lainnya.Delphi 429
Akan berusaha meningkatkannya nanti.
Golf
ungolfed
sumber
Javascript,
288281Chrome menyembunyikan duplikasi
console.log
, gunakan IE sebagai gantinya.Tidak Disatukan:
sumber
for(i=0;i++<39-w;)
sebagai gantifor(i=0;i<39-w;++i)
, dan sebagainya. Juga,p=console.log
bukannyac=console
danp
bukannyac.log
(walaupun saya hanya menguji yang terakhir di Node.js, itu tidak berfungsi di Firefox). Ini menghemat 12 byte.c=console.log
juga tidak berfungsi di Chrome, jadi saya tidak menggunakannya. Trik for loop menyimpan 7 byte.JavaScript (console.log),
168166(Ruang kosong hanya untuk dibaca)
sumber
C (219)
Terima kasih kepada semua orang untuk tips golfnya - berhasil menurunkannya menjadi 219. Jangan berpikir itu akan jauh lebih rendah.
Wajib termasuk:
sumber
32
sebagai ganti' '
dan42
bukannya'*'
:)Haskell,
153148Terus terang, tidak ada trik, hanya bermain golf:
The
%
Operator menarik garis tunggal, argumen pertama menjadiString
panjang 3 yang berisi perbatasan dan karakter mengisi baris yang (sekarang dengan asumsi tepat 3Char
s, tabungan 5 bytes), yang kedua, sebuahInt
, menspesifikasikan setengah jumlah karakter mengisi. Pencocokan pola, penghitungan dan penambahan digunakan dalam kombinasi untuk menghemat byte dengan menjaga "lem" antaraChar
danString
. Dalam versi kedua ini, saya juga membuat#
infinite dan memperkenalkan atake 85
untuk membuatnya terbatas lagi (sayangnya, tidak ada byte yang disimpan).The
#
Operator menciptakan urutan untukn
argumen untuk%
diperlukan untuk pohon:[0..3], [3..7], ...
bersambung.&
hanyalah singkatan untuk infiksreplicate
, yang muncul tiga kali.Pohon disatukan di baris terakhir, baris baru ditambahkan oleh
unlines
.sumber
Lua - 164
sumber
Mathematica
191178Tentu bukan solusi terbaik:
Tidak menghitung baris baru. Mathematica memelototi output, karena tidak mengambil lebar yang sama untuk spasi putih untuk "*" dan "/". Tetapi hasilnya benar.
sumber
Jawa - 286
Golf pertamaku.
Golf:
Tidak Disatukan:
Tes di sini
sumber
Python 2, 117
Versi lain yang saya coba meliputi:
sumber
Pyth,
101100999081 byteCobalah online!
Terjemahan Python 3:sumber
a
fungsi yang didefinisikan dalam Python Anda setara dengan+
pada daftar?<list>+<str>
bukan operasi yang valid, tapi saya bisa dengan mudah digunakan["-"]*11+["_"]
. Saya memutuskan untuk mendefinisikan fungsi saya sendiri untuk lebih akurat menerjemahkan apa yang sebenarnya dilakukan Pyth.Powershell, 88 byte
sumber
Groovy 118
sumber
C, 194
Kode ini adalah kekacauan panas dan pasti bisa bermain golf lebih banyak. Namun, ini adalah kesempatan untuk mencoba beberapa hal yang belum pernah saya lakukan sebelumnya: menggunakan literal untuk string tanda bintang, dan menggunakan specifier lebar
*
dengan string masukprintf
.sumber
Racket
223 220 211 204198Golf:
Tidak Disatukan:
sumber
Majelis (MIPS, SPIM) ,
768671659655654 byteCobalah online!
Sunting: Disimpan ~ 100 byte dengan pengkodean keras setiap karakter dalam register dan cukup menulis ke stack, kemudian menyalahgunakan fakta bahwa MIPS tidak memiliki tipe sehingga kata implisit untuk string ascii diperbolehkan.
Sunting 2: menghapus alokasi tumpukan duplikat. (
addi $sp -4
) Ups!Sunting 3: dalam penulisan ulang, secara tidak sengaja membuat tunggul pohon 1 karakter terlalu pendek. (36 menggantikan 35). Tetap.
Sunting 4: -4 byte dengan menggunakan $ 8 dan $ 9, bukan $ t0 dan $ t1. artinya sama, tetapi $ t0 lebih mudah dibaca. sayangnya, semua register t lainnya memiliki panjang yang sama ketika ditulis dengan baik ($ t2 == $ 10, tetapi keduanya adalah 3 karakter), jadi sisanya adalah pembasuhan. Saya bisa (secara teori) menggunakan register 'a' yang tersisa (5-7. Print syscall menggunakan 4), tetapi afaik perilaku tidak didefinisikan ketika menggunakan syscall.
-1 Byte dengan mengatur t8 ke 0 dan bercabang pada kurang dari pada tidak sama. juga mengharuskan saya untuk menyusun ulang add ops, yang sayangnya membuat waktu eksekusi memakan waktu 3 opcode lebih lama.
Bukan yang terbaik di MIPS, tapi setelah membersihkan nurani saya dalam diskusi meta, saya mengirimkannya. MIPS tidak dirancang untuk ini (tidak ada output, tidak untuk loop) tetapi cukup menyenangkan untuk melakukan ini mungkin terlepas dari itu.
Sayangnya, saya belum membuat versi berkomentar untuk solusi baru ini, tetapi Anda dapat melihat versi yang lama, dengan dokumentasi lengkap di sini
Jangan ragu untuk mengambil kredit dan meningkatkan jawaban ini jika Anda bisa mengalahkannya - Saya mungkin kehilangan beberapa optimasi di sana-sini.
sumber
addi $sp -4
yang benaraddi $sp $sp -4
- benar dari SPIM atau MIPS secara umum, jadi jika ada orang lain, tolong beri tahu saya.Cobra - 166
228260sumber