Tulis program yang menerima (melalui STDIN / baris perintah) bilangan bulat non-negatif N.
Ketika N adalah 0, program Anda harus mencetak O
(itu modal Oh, bukan nol).
Ketika N adalah 1, program Anda harus mencetak
\|/
-O-
/|\
Ketika N adalah 2, program Anda harus mencetak
\ | /
\|/
--O--
/|\
/ | \
Ketika N adalah 3, program Anda harus mencetak
\ | /
\ | /
\|/
---O---
/|\
/ | \
/ | \
Untuk N yang lebih besar, pola ini berlanjut dengan cara yang sama persis. Masing-masing dari delapan sinar dari "matahari" harus terbuat dari N dari yang sesuai -
, |
, /
, atau \
karakter.
Detail
- Alih-alih sebuah program, Anda dapat menulis fungsi yang mengambil integer. Fungsi harus mencetak desain matahari secara normal atau mengembalikannya sebagai string.
Anda juga harus
- tidak memiliki spasi sama sekali, atau
- hanya memiliki cukup ruang trailing sehingga polanya sempurna (2N + 1) * (2N + 1) persegi panjang.
Output untuk setiap atau semua N dapat secara opsional memiliki baris tambahan.
Mencetak gol
Kode terpendek dalam byte menang.
code-golf
ascii-art
kolmogorov-complexity
Hobi Calvin
sumber
sumber
N=0
.Jawaban:
Pyth,
393836 byteCobalah secara online: Pyth Compiler / Executor
Penjelasan
Solusi 36 byte lainnya adalah:
sumber
C:
11610299959290Saya pikir saya semakin dekat dengan solusi minimal menggunakan pendekatan ini, tetapi saya tidak bisa berhenti merasa bahwa ada pendekatan yang jauh lebih baik di C. Ungolfed:
sumber
c,r;s(n){for(r=c=-n;r<=n;c++)putchar(c>n?c=-c,r++,10:c?r?c-r?c+r?32:47:92:45:r?124:79);}
GNU sed, 252 +1
Fiuh - Saya mengalahkan jawaban php!
Skor +1 untuk menggunakan
-r
parameter.Karena keterbatasan sed, kita harus membakar hampir 100 byte hanya mengkonversi N ke string ruang N. Sisanya adalah hal yang menyenangkan.
Penjelasan
:
) mengkonversi N ke string N spasis/ //
menghapus satu ruangs^.*^\\&|&/^;ta
mengonversi ruang N-1 menjadi:\
+ ruang|
N-1 + + ruang N-1 +/
\
satu ruang ke kanan dan/
satu ruang ke kiri ...\|/
, yang diganti dengan-O-
dan melompat ken
labeldengan
-
dan cetak-0-
dengan/|\
, dan gantidengan
-
dan lompat kembali ke loop utama\
satu ruang ke kanan dan/
satu ruang ke kiri ...\$
yang menunjukkan selesai, dan berhenti.Keluaran
sumber
J,
373440 bytePemakaian:
Penjelasan (dari kiri ke kanan):
i:
menghasilkan daftar-n, -(n-1), ..., n-1, n
( )"*/~@i:
menciptakan produk Descartes dari i: dengan dirinya sendiri dalam susunan matriks, misalnya untukn = 1
membuat3-by-3
matriks berikutuntuk setiap elemen matriks dengan bilangan bulat,
x y
kami melakukan hal berikut+&|,-,+,[,]
hitung daftar properti+&|
abs(x)+abs(y)
, sama dengan0
iff (jika dan hanya jika)x=0
dany=0
-
xy, sama dengan0
iffx=y
yaitu kita berada di diagonal+
x + y, sama dengan0
iffx=-y
yaitu kita berada di anti-diagonal[
x, sama dengan0
iffx=0
yaitu kita berada di baris tengah]
y, sama dengan0
iffy=0
yaitu kita berada di kolom tengah'O\/-|'#~0=
bandingkan nilai properti di atas0
dan ambili
karakter th dari string'O\/-|'
jikai
properti th benar.{.
mengambil karakter pertama dari sebuah string dan jika tidak ada yang mengembalikan karakter ruang sebagai padding seperti yang kita butuhkan1:echo
Cobalah online di sini.
sumber
PHP, 182 byte
Ini sepertinya kegiatan yang menyenangkan untuk jawaban pertama saya. Komentar pada kode saya dipersilakan.
Berikut adalah kode un-golfed dengan komentar:
Diedit dengan kode oleh royhowie
sumber
if(($y-$h)==($x-$h))
melakukan hal yang sama denganif(($y==$x)
. Anda dapat menyimpan karakter lain dengan menggantinyaif($x==y$)foo();else bar();
denganif($x^$y)bar();else foo();
. Anda juga harus mencoba menggunakan operator ternary alih-alihif .. else
pernyataan.function s($n){$e=2*$n+1;for($i=0;$i<$e*$e;$i++){$x=$i%$e;$y=floor($i/$e);echo$y==$x?($x==$n?"O":"\\"):($e-1==$x+$y?"/":($y==$n?"-":($x==$n?"|":" ")));echo$x==$e-1?"\n":"";}}
$r
; cukup gunakanecho
($r.=
jumlah byte yang sama denganecho
). 2. operator ternary yang digunakan (menyimpan banyak karakter). 3.$h
tidak berguna karena sama dengan$n
. 4. Anda tidak perlu menggunakanfloor
untuk$x = floor($i%$e);
, karena modulus pada integer tidak perlu menjadi bulat ke bawah.Python 2, 99
Cetakan baris demi baris, menciptakan setiap baris dengan memeriksa apakah koordinat
(i,j)
(berpusat di(0,0)
) memenuhij==-i
,j==0
,j==i
, atau tidak, dengan hack untuk membuat pekerjaan garis tengah.sumber
R
bukannya.5
menghemat 1 byte.CJam,
48 45 43 4138 byteIni masih terlalu lama dan saya masih melakukan beberapa hal yang berlebihan, tetapi begini:
Cobalah online di sini
sumber
SpecBAS - 117 byte
Ini mencetak garis miring dan garis putus-putus dalam satu lingkaran, dan kemudian mem-plon "O" di tengah.
Output menggunakan 1, 2 dan 9
sumber
"-": NEXT y: PRINT AT s,s;"O"
untuk"-";AT s,s;"O": NEXT y
menyelamatkan dua byte.JavaScript (ES6) 97
98Ini sepertinya cukup berbeda ...
sumber
OS / 2 Classic Rexx, 102 ... atau 14 untuk "versi penipu"
Keluarkan umpan baris untuk "bermain golf".
Versi Cheater, beri nama skrip apa pun kode sumber yang Anda inginkan di bawah 255 karakter (memerlukan disk HPFS):
EDIT: Hanya untuk memperjelas, versi penipu tidak dimaksudkan untuk dihitung! Itu hanya untuk menjadi konyol dan menunjukkan seekor anjing tua masih bisa melakukan trik. :)
mis. Untuk kesenangan dan permainan nyata, implementasi ekspresi "lambda" gaya Java-8 / C11 pada daftar iterator. Tidak diuji, tetapi harus berjalan pada mainframe IBM 1979. ;)
- Kode panggilan menganggap Anda sudah membuat batang (array), secara alami.
sumber
Haskell,
1099896 byteTerima kasih kepada nimi dan Mauris atas bantuan mereka!
Penjelasan:
Operator
#
menentukan karakter yang muncul pada koordinat (i, j), dengan matahari berpusat pada (0,0). Fungsif
membangun String hasil dengan memetakan#
semua pasangan koordinat mulai dari -n hingga n.Pemakaian:
sumber
s
, misalnya0#0='O'
,0#_='-'
, dll dan1<2
bukanTrue
.map(i#)[-n..n]
untuk menghemat dua byte.R,
177149 byteMickey T. adalah pria! Dia membantu saya memperbaiki solusi saya yang awalnya salah dan menghemat 28 byte. Terima kasih, Mickey!
Penjelasan + tidak dikumpulkan:
Saran lebih lanjut dipersilakan!
sumber
scan
benar - benar membutuhkanw=
. Itu juga bisa digeser lebih dalam ke perintah. Theif
dapat membuang jika Anda mengubah cara matriks ditangani dalam beberapa kasus. Menerapkan ini saya dapatkanm=matrix(" ",(w=2*(n=scan()+1)-1),w);m[row(m)-rev(col(m))==0]='/';diag(m)="\\";m[,n]='|';m[n,]="-";m[n,n]="O";m[,w]=paste0(m[,w],'\n');cat(t(m),sep='')
. Golf lebih lanjut mungkin saya pikir.C #,
230226 byteSeperti yang diminta, versi tanpa tanda: string ug (int n) {
Ini adalah posting pertama saya, jadi saya minta maaf jika saya melakukan kesalahan. Setiap komentar dan koreksi sangat kami harapkan.
sumber
s=2*n+1
daripadas=(n*2)+1
danw==s-h-1
bukannyaw==(s-h)-1
akan membuat ini sedikit lebih pendek.Ruby:
9892 karakterProc yang mengembalikan string dengan Matahari.
Contoh dijalankan:
sumber
Karat, 215 karakter
Saya mencoba menggunakan metode pengiris string (dengan membuat string
n-1
spasi dan mengiris ke dan dari indeks) seperti:Tapi itu sebenarnya 3 chars lebih lama.
Kode tidak dikunci:
Bagian yang saya suka adalah bagaimana saya mencukur beberapa karakter pada string format. Sebagai contoh,
setara dengan
karena "penambahan otomatis" untuk posisi argumen string format tidak terpengaruh oleh menentukan nomor secara manual, dan bertindak sepenuhnya independen.
sumber
Oktaf 85
Matriks bulding seperti biasa =)
eye
menghasilkan matriks identitas, sisanya adalah cukup jelas.sumber
IDL 8.3, 135 byte
Tak tahu apakah ini bisa dipukul lebih ... Ini sangat mudah. Pertama kita membuat
m x m
array (m=2n+1
) dari string kosong; kemudian, kita menarik karakter dalam baris (y=x
,y=-x
,y=n
, danx=n
). Kemudian kita menjatuhkan O pada titik(n, n)
, dan mencetak semuanya, diformat sebagaim
string dengan panjang 1 pada setiap baris sehingga tidak ada spasi tambahan dari mencetak array secara asli.Uji:
sumber
Matlab,
9387 byteSayangnya fungsi header harus sangat besar ... Selain itu saya pikir golfnya cukup baik. Saya ingin tahu apakah itu dapat dilakukan dengan lebih baik dengan beberapa perbedaan sintaksis dalam Oktaf.
sumber
N=input('')
menyimpan 2 karakter. Selain itu Anda bisa menulis[E V D;H 79 H;D V E '']
untuk mengubah seluruh matriks menjadi array char, yang akan menghemat satu atau dua byte lagi. (Saya baru saja mengirimkan program Oktaf dengan pendekatan yang sedikit berbeda, tetapi sebelum saya menemukan program Anda =)Javascript ( ES7 Draft ) 115
sumber
Pyth - 52 byte
Bagian yang sulit adalah mencari tahu cara mengganti garis miring untuk setiap sisi. Saya setuju untuk mendefinisikan lambda yang menggunakan simbol untuk digunakan.
Kemungkinan bisa bermain golf lebih banyak, penjelasannya segera hadir.
Cobalah online di sini .
sumber
Perl, 94
Ada banyak operator ternary bersarang di sini, tapi saya pikir kodenya cukup mudah.
Cobalah di sini: ideone.com/E8MC1d
sumber
for$x(-($n=<>)..$n){map{print$x^$_?$x+$_?$x?$_?$":'|':'-':'/':$x?'\\':O}-$n..$n;print$/}
- Beberapa penyesuaian: konversi inner untuk memetakan dan ubah $ y menjadi $ _; sebaris($n=<>)
.C # - 291 (program lengkap)
sumber
JavaScript (ES6),
139135140 +1 byte(+1 untuk
-p
bendera dengan simpul di konsol)tetap:
pemakaian:
ungolfed:
sumber
(A=Array).from(A(m))
Python 3,
193186 byteGolf
Keluaran
Tidak disatukan
sumber
s=' ',b='\\',f='/',d='|',g='-'
adalah sangat panjang, sehingga Anda akan lebih baik bergerak dengan menambahkans,b,f,d,g=" \/|-"
ke baris kedua." \/|-"
sebagai string tunggal, daripada membaginya menjadi karakter individu. Anda dapat membongkar dari string sepertix,y,z="123"
, yang membuatx="1"
,y="2"
danz="3"
.CJam,
5955 byteIni tidak akan memenangkan penghargaan apa pun, tetapi saya cukup senang itu berhasil!
Terima kasih kepada Sp3000 untuk tips golf.
sumber
S
alih-alih'
versi untuk ruang dan 2) Untuk'-A*'O'-A
dapat Anda lakukan'-A*_'O\
karena membuatnya dua kali lebih lamaPython,
175 129 127125 BytesCobalah online di sini .
sumber
Ruby - 130 byte
pemakaian:
sumber
f=->n{a=(0...n).map{|i|(s=' ')*i+?\\+s*(m=n-1-i)+?|+s*(m)+?/+s*i};puts(a+[?-*n+'O'+?-*n]+a.reverse.map(&:reverse))}
(Lihat Tips untuk bermain golf di Ruby untuk lebih banyak lagi.)Perl
8591908986BTidak Disatukan:
sumber
Prolog, 219 byte
Tidak, ini bukan bahasa golf. Tapi saya pikir situs ini membutuhkan lebih banyak Prolog.
Diuji dengan
swipl
di Linux. Memohon seperti:swipl -s asciiSun.prolog
; lalu cari ukuran matahari yang Anda inginkan:Tidak Disatukan:
sumber
JavaScript (ES6),
142140134117 byteCobalah
sumber