Diberi nomor N
, bagaimana saya bisa mencetak pohon Natal tinggi N
menggunakan paling sedikit karakter kode? N
diasumsikan dibatasi pada nilai minimum 3
, dan nilai maksimum 30
(batas dan pengecekan error tidak diperlukan). N
diberikan sebagai satu-satunya argumen baris perintah untuk program atau skrip Anda.
Semua bahasa dihargai, jika Anda melihat bahasa sudah diterapkan dan Anda dapat mempersingkat, edit jika mungkin - komentar sebaliknya dan berharap seseorang membersihkan kekacauan. Sertakan baris baru dan Spasi Putih untuk kejelasan, tetapi jangan memasukkannya dalam jumlah karakter.
Pohon Natal dihasilkan seperti itu, dengan "belalainya" yang hanya terdiri dari "*" terpusat
N = 3:
*
***
*****
*
N = 4:
*
***
*****
*******
*
N = 5:
*
***
*****
*******
*********
*
N mendefinisikan tinggi cabang yang tidak termasuk batang satu baris.
Selamat PPCG Natal!
c=:[:((\:i.@#),}.)"1[:$&'*'"0[:>:0,~i.
Brainfuck, 240 karakter
Belum selesai. Ini bekerja, tetapi hanya dengan angka satu digit.EDIT: Selesai! Bekerja untuk penerjemah menggunakan 0 sebagai EOF. Lihat
NOTE
s dalam sumber komentar untuk mereka yang -1.Sunting lagi: Saya harus mencatat bahwa karena Brainfuck tidak memiliki metode standar untuk membaca argumen baris perintah, saya menggunakan stdin (input standar) sebagai gantinya. ASCII, tentu saja.
EDIT ketiga kalinya: Ya ampun, sepertinya saya menanggalkan
.
(output) karakter ketika mengkondensasi kode. Tetap...Inilah manajemen memori dasar dari loop utama. Saya yakin ini bisa sangat dioptimalkan untuk mengurangi jumlah karakter sekitar 30 atau lebih.
Versi kental:
Dan versi cantiknya:
sumber
Perl, 50 karakter
(1 ruang yang relevan)
perl: satu versi baris:
dan sekarang dengan whitesapce lebih banyak:
Penjelasan yang Diperluas untuk Pengguna Non-Perl.
sumber
Bahasa: Python (melalui shell), Jumlah Char: 64 (2 spasi signifikan)
sumber
x86 asm 16-bit, 50 byte
Belum ada versi perakitan? :)
(Catatan: N terbatas pada 1 - 9 dalam versi ini)
Unduh disini
sumber
Bahasa: Skrip Batch Windows ( mengejutkan! )
sumber
setlocal enabledelayedexpansion
perintah.Ruby, 64 byte
Selamat Natal semua!
Sunting: Perbaikan ditambahkan seperti yang disarankan oleh Joshua Swink
sumber
n=$*[0].to_i;puts [*1..n,1].map{|i|" "*(n-i)+"*"*(2*i-1)}
membawanya ke 58.Bahasa: C #, Jumlah Char: 120
Hanya kode, tanpa pemformatan (120 karakter):
Versi dengan 109 karakter (hanya kode):
Hasil untuk tinggi = 10:
sumber
Bahasa: dc (melalui shell) Jumlah Char: 83
Versi dc yang sedikit lebih pendek:
EDIT: berubah konstan 10 menjadi $ 1
sumber
trik python, "-c" ... @ 61 karakter (dan satu baris)
sumber
Berikut ini adalah versi Haskell yang hemat-ruang, pada 107 karakter:
menjalankannya:
Selamat Natal, semuanya :)
sumber
Bahasa: dc (melalui shell), Jumlah Char: 119 (1 spasi signifikan)
Hanya untuk ketidakjelasan itu :)
sumber
Lebih baik C ++, sekitar 210 karakter:
Minimalkan ke 179:
sumber
Bahasa: python, tanpa trik, 78 karakter
sumber
Groovy 62B
_
sumber
Meningkatkan jawaban ΤΖΩΤΖΙΟΥ. Saya tidak bisa berkomentar, jadi di sini ada posting baru. 72 karakter.
Menggunakan trik "python -c", 61 karakter.
Saya mempelajari fungsi pusat dan "python -c" dapat menerima lebih dari satu kode baris. Terima kasih, ΤΖΩΤΖΙΟΥ.
sumber
C # menggunakan Linq:
170 karakter.
sumber
AWK, 86 karakter dalam satu baris.
sumber
Bahasa: Java, Jumlah Char: 219
Sebagai referensi, saya dapat mencukur solusi Java sebelumnya, menggunakan rekursi, hingga 231 karakter, dari minimum sebelumnya 269. Meskipun sedikit lebih lama, saya suka solusi ini karena
T
benar-benar berorientasi objek. Anda bisa membuat hutan kecilT
contoh berukuran acak . Berikut adalah evolusi terbaru pada taktik itu:sumber
class T{public static void main(String[]v){long n=new Long(v[0]),r=1,s;String o="";for(;r<=n;r++){for(s=n-r;s-->0;)o+=' ';for(;++s<2*r;)o+='*';o+="\n";}while(n-->1)o+=' ';System.out.println(o+"*");}}
(199 karakter / byte)Bahasa: PowerShell, Hitungan Char: 41 (termasuk 1 spasi)
sumber
21 karakter dengan dyalog APL.
⍳ memberikan vektor bilangan bulat dimulai dengan 1.
1, ⍨ menambahkan satu ke ujung vektor. Ini akan menjadi kaki pohon.
'*' \ ¨⍨ memberikan vektor * -strings dengan panjang yang diberikan oleh vektor sebelumnya.
↑ mentransformasikan vektor ke matriks dan menambahkan spasi ke kanan.
m ← menyimpan matriks dalam m.
0 1 ↓ turun nol baris dan kolom pertama.
⌽ membalikkan matriks.
m, ⍨ bergabung dengan m di sisi kanan.
sumber
m,⍨⌽0 1↓m←
->(⌽,0 1↓⊢)
Bahasa: C, Jumlah Char: 133
Peningkatan versi C.
Bekerja dan bahkan mengambil ketinggian pohon sebagai argumen. Membutuhkan kompiler yang mentolerir kode gaya K&R.
Saya merasa sangat kotor sekarang .. Ini kode yang jelek.
sumber
R (62 byte)
Saya belum melihat solusi R. Perbaiki saya jika saya melewatkannya.
Keluaran:
sumber
Bahasa: C, Hitung Char: 176 (2 spasi relevan)
sumber
Versi shell, 134 karakter:
sumber
Bahasa: Python, Jumlah char signifikan: 90
Itu jelek tapi berhasil:
...
sumber
Karena ini adalah CW: Saya tidak suka kode golf selalu diatur dalam "jumlah karakter" atau semacamnya. Tidak bisakah mereka disusun berdasarkan jumlah instruksi untuk kompiler / juru bahasa (atau kriteria serupa)? Ini adalah solusi Ruby lagi , dan pada dasarnya sama, tetapi sekarang untuk konsumsi manusia juga:
sumber
Arang , 9 byte (tidak bersaing)
Cobalah online!
Verbose
Cobalah online!
sumber
Jelly , 12 byte
Cobalah online!
sumber
PHP, 111 karakter
(Char terakhir harus menjadi baris baru.)
Versi yang dapat dibaca:
sumber