Pertanyaan ini telah menyebar seperti virus di kantor saya. Ada beberapa pendekatan:
Cetak yang berikut ini:
1
121
12321
1234321
123454321
12345654321
1234567654321
123456787654321
12345678987654321
123456787654321
1234567654321
12345654321
123454321
1234321
12321
121
1
Jawaban dinilai dalam karakter dengan lebih sedikit karakter yang lebih baik.
code-golf
ascii-art
kolmogorov-complexity
Eric Wilson
sumber
sumber
Jawaban:
J,
29 26 24 23 2221 karakterTerima kasih kepada FUZxxl untuk
"+
triknya (saya rasa saya belum pernah menggunakannyau"v
sebelumnya, heh).Penjelasan
sumber
"0]
, tulis"+
.,.0(<#":)"+9-+/~|i:8
⍪↑{(0<⍵)/⍕⍵}¨9-∘.+⍨|9-⍳17
APL (
3331)Jika spasi yang memisahkan angka diperbolehkan (seperti pada entri Mathematica), itu bisa disingkat menjadi
2826:Penjelasan:
⍳9
: daftar angka 1 hingga 91↓⎕D
:⎕D
adalah string '0123456789',1↓
menghapus elemen pertama⍴∘(1↓⎕D)¨⍳9
: untuk setiap elemen N⍳9
, ambil elemen N pertama dari1↓⎕D
. Ini memberikan daftar: ["1", "12", "123", ... "123456789"] sebagai string⌽¨
: membalikkan setiap elemen dari daftar ini. ["1", "21", "321" ...](Program singkat :)
⍳¨⍳9
: daftar 1 ke N, untuk N [1..9]. Ini memberikan daftar [[1], [1,2], [1,2,3] ... [1,2,3,4,5,6,7,8,9]] sebagai angka.⌽∘⍕∘
: kebalikan dari representasi string dari masing-masing daftar ini. ["1", "2 1" ...]A←⌽↑
: membuat matriks dari daftar daftar, melapisi di sebelah kanan dengan spasi, dan lalu membalikkannya. Ini memberikan kuadran atas berlian. Itu disimpan dalam A.A←A,0 1↑⌽A
: A, dengan kebalikan dari A minus kolom pertama terpasang di sebelah kanan. Ini memberikan bagian atas dari persegi panjang. Ini kemudian disimpan dalam A lagi.A⍪1↓⊖A
:⊖A
adalah A dicerminkan secara vertikal (memberikan bagian bawah),1↓
menghilangkan baris atas bagian bawah danA⍪
merupakan bagian atas di bagian atas1↓⊖A
.sumber
Clojure,
191179 byte-12 byte dengan mengubah bagian luar
doseq
menjadiloop
, yang memungkinkan saya untuk menyingkirkanatom
(yay).Dobel "untuk-loop". Loop luar (
loop
) melewati setiap baris, sedangkan loop dalam (doseq
) melewati setiap angka di baris, yang berada dalam rentang(concat (range 1 n) (range n 0 -1))
, di manan
adalah angka tertinggi di baris.Karena bug dalam logika dalam upaya pertama saya (tidak sengaja memasukkan spasi-awalan antara masing-masing nomor sebagai gantinya), saya berhasil mendapatkan ini:
Bahkan tidak benar mengabaikan bug yang jelas, tetapi itu terlihat keren.
sumber
Mathematica
83 49 43 5451Dengan 3 byte disimpan berkat Kelly Lowder.
Analisis
Bagian utama dari kode
Sum[DiamondMatrix[k, 17], {k, 0, 8}]
,, dapat diperiksa di WolframAlpha .Berikut ini menunjukkan logika pendekatan yang mendasari, pada skala yang lebih kecil.
sumber
f = Table[# - Abs@k, {k, -8, 8}] &; f[f[9]] /. n_ /; n < 1 -> "" // Grid
Table[9 - ManhattanDistance[{9, 10}, {j, k}], {j, 18}, {k, 18}] /. n_ /; n < 1 -> "" // Grid
Grid@#@#@9&[Table[#-Abs@k,{k,-8,8}]&]/.n_/;n<1->""
50 karakter.ArrayPlot[Sum[k~DiamondMatrix~17, {k, 0, 8}], AspectRatio -> 2]
Python 2,
72696761Tidak pandai:
sumber
s=`0x2bdc546291f4b1`
'L'
.C, 79 karakter
sumber
Python 2,
6059Menyalahgunakan backticks dan repunits.
sumber
in
kata kunci dapat dihapus, seperti yang Anda lakukan denganprint
keyboard.L
di tengah tujuh garis output.GolfScript,
333130 karakterSolusi GolfScript lainnya
Terima kasih kepada @PeterTaylor untuk char lainnya.
Versi previos:
( jalankan online )
sumber
17,{8-abs." "*10@-,1>.-1%1>n}%
Mathematica
5550454138sumber
Javascript, 114
Entri pertama saya di Codegolf!
Jika ini dapat dipersingkat lebih jauh, silakan komentar :)
sumber
PHP,
9290 karakterMenghitung dan mencetak jarak posisi Manhattan dari pusat. Mencetak spasi jika kurang dari 1.
Pengguna anonim menyarankan peningkatan berikut (84 karakter):
sumber
<?
dilewati per meta . Juga, Anda tampaknya memiliki beberapa masalah penyandian dalam kode kedua.<?
dalam bytecount. Saya telah membuat beberapa perbaikan lainnya juga.Arang (tidak bersaing), 13 byte
Tidak bersaing karena bahasanya jauh lebih baru dari pertanyaan.
Cobalah online!
Bagaimana?
Menarik sembilan, berturut-turut lebih kecil, berlian nomor konsentris di atas satu sama lain:
sumber
Gangguan Umum, 113 karakter
Pertama saya perhatikan bahwa elemen-elemen berlian dapat diekspresikan seperti:
dll.
x
secara rekursif menghitung basis (1, 11, 111, dll), yang dikuadratkan, dan kemudian dicetak berpusat olehformat
. Untuk membuat angka naik ke istilah tertinggi dan mundur lagi saya gunakan(- 8 (abs (- n 8)))
untuk menghindari putaran keduasumber
JavaScript, 81
sumber
PowerShell (2 opsi):
928445 bytePenjelasan:
1..8+9..1
atau1..9+8..1
menghasilkan array bilangan bulat yang naik dari 1 hingga 9 kemudian turun kembali ke 1.|%{
...}
mem-pipe array integer keForEach-Object
loop melalui alias bawaan%
.' '*(9-$_)+
kurangi integer saat ini dari 9, lalu buat string dari banyak ruang di awal output untuk baris ini.[int64]($x='1'*$_)*$x
mendefinisikan$x
sebagai string1
s selama integer saat ini besar. Kemudian dikonversi ke int64 (diperlukan untuk output 111111111 2 dengan benar tanpa menggunakan notasi E) dan kuadrat.sumber
long
bukannyaint64
1..8+9..1|%{' '*(9-$_)+ +($x='1'*$_+'L')*$x}
Vim,
623938 penekanan tombolTerima kasih kepada @DJMcMayhem karena telah menghemat satu ton byte!
Jawaban Vim pertamaku, sangat mengasyikkan!
Saya mencoba menulis angka-angka melalui rekaman, tetapi jauh lebih lama
Cobalah online!
Penjelasan:
SUNTING:
Saya menggunakan
H
bukannyagg
menyimpan 1 bytesumber
ma
dan mengubah`ai<space>
keI<space>
.APL (Dyalog Classic) ,
2019 byteCobalah online!
⎕d
adalah digit'0123456789'
1↓
drop the first ('0'
),⍨\
swap catenate scan, yaitu awalan terbalik'1' '21' '321' ... '987654321'
↑
campur menjadi matriks yang diisi dengan spasi:⌽
membalikkan matriks secara horizontal(
...)⍣2
lakukan ini dua kali:⍉⊢⍪1↓⊖
transposisi (⍉
) dari matriks itu sendiri (⊢
) disatukan secara vertikal (⍪
) dengan matriks terbalik secara vertikal (⊖
) tanpa baris pertama (1↓
)sumber
R, 71 karakter
Sebagai catatan:
sumber
message(rep(" ",9-i),s[c(1:i,i:1-1)])
for(i in s<-c(1:9,8:1))...
untuk menyimpan bytek (
6450 karakter)Metode lama:
sumber
(1+!9)#'"1"
is,\9#"1"
CJam,
3127 byteCJam jauh lebih baru dari tantangan ini, jadi jawaban ini tidak memenuhi syarat untuk diterima. Namun, ini adalah tantangan kecil Sabtu malam yang rapi. ;)
Uji di sini.
Idenya adalah untuk membentuk kuadran kiri atas terlebih dahulu. Inilah cara kerjanya:
Pertama, bentuk string
" 123456789"
, gunakan8S*9,:)+
. String ini panjangnya 17 karakter. Sekarang kita ulangi string 9 kali, dan kemudian membaginya menjadi substring dengan panjang 9 dengan9/
. Ketidakcocokan antara 9 dan 17 akan mengimbangi setiap baris satu karakter ke kiri. Mencetak setiap substring pada barisnya sendiri yang kita dapatkan:Jadi jika kita hanya membuang setiap baris lain (yang dengan mudah bekerja dengan melakukan
2%
), kita mendapatkan satu kuadran yang diinginkan:Akhirnya, kami merefleksikan ini dua kali, mentransposisi kisi-kisi di antaranya untuk memastikan bahwa dua operasi pemantulan berjalan dengan sumbu yang berbeda. Mirroring itu sendiri adil
Terakhir, kami hanya bergabung dengan semua baris dengan baris baru, dengan
N*
.sumber
GolfScript, 36 karakter
Dengan asumsi bahwa ini dimaksudkan sebagai tantangan kode-golf , inilah solusi dasar GolfScript:
sumber
Ruby, 76 karakter
Perbaikan disambut baik. :)
sumber
f=->x{[*1..x]+[*1...x].reverse};puts f[9].map{|i|(f[i]*'').center 17}
[*-8..8].map{|i|puts' '*i.abs+"#{eval [?1*(9-i.abs)]*2*?*}"}
Befunge-93 , 155 chars
Cobalah online!
Pasti bisa bermain golf lagi, tapi ini adalah program Funge pertamaku dan kepalaku sudah sakit. Meskipun begitu, banyak bersenang-senang
sumber
JavaScript, 170 byte
Golf kode pertama saya :)
Golf
Tidak disatukan
sumber
Perl
5654 karakterMenambahkan 1 char untuk
-p
switch.Menggunakan kuadrat kuadrat untuk menghasilkan urutan.
sumber
Perl, 43 +1
menambahkan +1
-E
yang diperlukan untuksay
say$"x(9-$_).(1x$_)**2for 1..9,reverse 1..8
sunting: sedikit dipersingkat
sumber
Python, 65
sumber
I=int;
kode Anda dan gantikan semua contoh selanjutnyaint
denganI
int
digunakan, dan itu digunakan 3 kali, sehingga menghemat 6 karakter dengan biaya 6 karakter.Groovy
7775versi lama:
sumber
each
denganany
untuk menyimpan dua karakter.Scala - 86 karakter
sumber
Javascript, 137
Dengan rekursi:
Pertama kali di CG :)
Atau 118
Jika saya dapat menemukan implementasi JS yang dijalankan
111111111**2
dengan presisi yang lebih tinggi.(Di sini: 12345678987654320).
sumber