Deskripsi tugas:
Gambar kubus dalam seni ASCII dalam proyeksi kabinet secara kasar.
Monospaced fonts
sering memiliki karakter yang sekitar dua kali lebih tinggi dari lebar. Karena input adalah panjang garis vertikal (tidak termasuk sudut), garis horizontal digambar dengan karakter dua kali lebih banyak sehingga gambar yang dihasilkan benar-benar kira-kira kubus. Garis surut ditarik setengah panjang seperti yang diamanatkan oleh proyeksi kabinet.
Sudut kubus diwakili oleh +
, garis horizontal oleh -
, garis vertikal oleh |
dan yang diagonal digunakan /
.
Meringkas: Biarkan input menjadi n , lalu
- Tepi horizontal kubus digambar dengan
-
dan terdiri dari 2 n karakter. - Tepi vertikal kubus digambar dengan
|
dan terdiri dari n karakter. - Tepi diagonal kubus digambar dengan
/
dan terdiri dari n / 2 karakter. - Sudut kubus digambar dengan
+
. Sudut tidak dihitung untuk panjang tepi seperti yang dijelaskan di atas (lihat contoh di bawah ini juga).
Memasukkan:
Input, diberikan pada input standar, adalah bilangan positif tunggal, genap n (2 ≤ n ≤ 30) yang memberikan panjang garis vertikal kubus. Diikuti oleh satu baris break.
Keluaran:
Outputnya adalah kubus pada output standar mengikuti aturan di atas. Trailing whitespace pada garis diabaikan.
Masukan sampel 1:
2
Output sampel 1:
+----+
/ /|
+----+ |
| | +
| |/
+----+
Masukan sampel 2:
4
Output sampel 2:
+--------+
/ /|
/ / |
+--------+ |
| | |
| | +
| | /
| |/
+--------+
ETA: Saya sekarang menerima solusi terpendek. Saya akan memperbarui jawaban yang diterima ketika jawaban yang lebih pendek muncul.
Karena beberapa orang bertanya berapa lama entri dari para kontestan kami adalah:
227 - Python
240 - Perl
310 - C
315 - C
326 - VB.NET
459 - C
Serta solusi kami sendiri (tidak diberi peringkat dengan yang lain):
140 - Golfscript
172 - Ruby
183 - PowerShell
Jawaban:
Golfscript - 96 karakter
Sebagian besar kekompakan berasal dari penyimpanan yang agresif hampir semuanya ke variabel (kecuali Anda termasuk yang ditulis dalam skrip golf).
Beberapa trik kecil lainnya di sini.
'LR''str'*
->'LstrR'
.'/'
hanya perlu melewati dua elemen stack (@
) bukannya 3 (@ .. \
).sumber
Python -
248243230227191Sedikit berantakan tetapi pada dasarnya mencetak garis kubus demi baris (menggunakan penyangga string).
Terima kasih kepada @marcog, untuk menunjukkan baris pertama, @ThomasO untuk menunjukkan baris kedua dan @Juan untuk membuat saya sadar bahwa saya dapat menggabungkan baris.
sumber
s=" ";p="+";b="|";f="/";n="\n"
untuks,p,b,f,n=" +|/\n"
.Python - 179
Saya ingin mencatat bahwa saya mengambil beberapa ide dari JPvdMerwe (Menggunakan string untuk mencetak sekali, dan satu-liner untuk itu saya tidak tahu adalah sintaks yang benar dalam Python).
sumber
fortran 77 - 484 karakter
Tidak ada gunanya memberikan versi "tidak tersentuh". Dan perhatikan bahwa penurunan harga tidak sesuai dengan persyaratan indentasi.
Saya mencoba fortran karena inline untuk loop yang disediakan oleh
write
pernyataan itu. Jelas mereka membantu tetapi tidak menambahkan cukup untuk membunuh kata-kata bahasa. Ini dapat dikurangi dengan menggunakan input bentuk bebas.Validasi:
Untungnya spec tidak mengatakan seperti apa ukurannya:
tetapi ukuran aneh lainnya masuk akal:
sumber
Solusi saya sendiri, karena sudah dipukuli sampai mati oleh Python:
Windows PowerShell, 183
sumber
PostScript, 237
Sejarah:
def
ed beberapa hal lagi yang sering muncul.def
s.def
yang menyimpan dua byte lagi.[
dan]
memiliki properti bagus saat digunakan sebagai variabel :-). Terima kasih untuk KirarinSnow .def
s. Thansk lagi :-).sumber
Ruby 1.9,
172 165162 karaktersumber
Ruby - 423 karakter
Benar-benar tidak ingin membagikan ini karena ini adalah hitungan yang mengerikan, tetapi karena saya sudah menulisnya mungkin juga.
Mungkin bisa dikurangi sedikit tapi saya ragu pendekatan brute-force ini akan mendekati jumlah karakter yang layak jadi saya tidak bisa diganggu.
sumber
PHP,
401392382363 karakter:Saya awalnya melakukan ini untuk melihat seberapa pendek saya bisa melakukan ini dalam PHP, karena saya tahu itu akan cukup panjang. Saya yakin itu bisa dikurangi, tetapi tidak banyak mengingat PHP tidak memiliki banyak pintasan.
Validasi:
http://codepad.viper-7.com/ftYYz9.php53
Versi Tidak Digubah: http://codepad.viper-7.com/4D3kIA
sumber
Perl, 163
Perl 5.10 atau lebih baru, jalankan dengan
perl -E '<code here>'
Versi yang diganti:
sumber
Perl,
269 269 262 256 245 244 237 226 228 224217 charsIde dasarnya adalah melakukan segalanya dengan penggantian regex. Karena dua karakter yang digunakan (+ dan /) adalah karakter khusus dan banyak muncul di regex, layak menggunakan karakter lain dan menggantikannya untuk mencetak.
Versi yang sedikit lebih terbaca:
Dalam arti saya curang dengan menggunakan $ b sebagai penghitung di loop perantara - Saya malah bisa menambahkan spasi putih di loop lebih dari $ a dan kemudian menggunakan pengganti regex untuk loop itu juga - tapi saya akan membiarkan sedikit penyimpangan dari solusi regex murni.
Tidak diragukan lagi beberapa orang yang menakutkan dapat mengubah ini menjadi skrip sed yang lebih pendek.
sumber
y
untuktr
tidak jelas, dan untuk cara "sementara" bisa pergi sebelum atau sesudah ...Lua,
294302292 byteGolf:
Tidak Disatukan:
sumber
or 6
setelahread()
, yang menghemat empat byte :-)(...)
itu tidak berfungsi untuk saya lagi di Lua 5.1.4.Kanvas , 63 byte
Coba di sini!
sumber