Membuat Crossed Square
Anda harus mengambil input bilangan bulat dari satu atau lebih dan menampilkan kotak yang terbuat dari karakter yang dapat dicetak pilihan Anda dengan palang diagonal melalui tengah.
Gagasan umum adalah untuk output menjadi bujur sangkar yang memiliki lintas diagonal melalui itu.
Input: 7
Output:
*******
*# #*
* # # *
* # *
* # # *
*# #*
*******
Dalam contoh di atas, '* mewakili kotak luar dan' # 'mewakili lintas diagonal.
Perhatikan bahwa contoh di atas menggunakan dua karakter yang berbeda sehingga lebih mudah untuk melihat seperti apa outputnya, program Anda harus menggunakan satu karakter saja.
Memasukkan
Bilangan bulat 1 atau lebih, dijamin aneh.
Keluaran
Kotak yang terdiri dari karakter pilihan Anda dengan tanda silang di tengah.
- Salib harus diagonal
- Kuadrat dapat berupa output melalui fungsi atau ditulis ke output
- Mengejar baris baru tidak apa-apa
- Dapat ditampilkan sebagai grafik, diagram atau gambar jika Anda mau
Contohnya
Input: 1
Output:
*
Input: 3
Output:
***
***
***
Input: 5
Output:
*****
** **
* * *
** **
*****
Input: 7
Output:
*******
** **
* * * *
* * *
* * * *
** **
*******
Spesifikasi
- Fungsi atau program lengkap diizinkan
- Anda bisa mendapatkan input dengan cara pilihan Anda
- Celah standar tidak diijinkan
- Program harus bekerja tanpa ada pernyataan tambahan yaitu
using
dalamC#
, mereka harus dimasukkan dalam entri - Anda dapat mengeluarkan dari suatu fungsi atau mencetak hasilnya
Ini kode golf sehingga solusi terpendek menang.
0,1,2,3,...
?n
dan mencetak ukuran persegi2n+1
.*
tetapi baginya itu akan menjadi input 0?1
akan menghasilkan contoh untuk Anda3
.Jawaban:
MATL ,
201917 byteAnda dapat mencobanya secara eksperimental di MATL online . Anda mungkin perlu menyegarkan halaman jika tidak berhasil.
Contoh dijalankan:
Versi ASCII: 19 byte
Cobalah online!
sumber
VBA Excel, 168 byte
Petunjuk:
Saya menemukan Excel dengan bantuan VBA adalah alat yang efektif dan memadai untuk tantangan ini. Atur lembar kerja Excel seperti berikut ini
Ya, kami menggunakan piksel kecil berbentuk persegi klasik seperti dulu dengan menggunakan sel dalam lembar kerja sebagai piksel. Ha ha...
Di sini saya menggunakan sel A1 sebagai input dan saya mengubah warna font menjadi merah. Mengapa merah Karena merah adalah tiga huruf sehingga cocok untuk bermain golf. Tulis dan jalankan kode berikut di Jendela Segera:
Ungolfed the code:
Penjelasan Langkah-demi-Langkah:
Looping melalui diagonal sel rentang:
Cells(i, i).Interior.Color = vbRed
Langkah dan hasil akhir:
Cells(i, N + 1 - i).Interior.Color = vbRed
sumber
Cells.RowHeight=48:set r=[A1]:r.Resize(r,r).Interior.Color=0:[B2].Resize(r-2,r-2).Clear:For i=1To[A1]:set r=Union(r,Cells(i,i),Cells(i,r-i+1)):Next:r.Interior.Color=0
JavaScript (ES6), 96 byte
sumber
Python 2, 65 byte
Gunakan ide Jonathan Allan untuk menghasilkan angka biner seperti:
Baris dibuat dengan bit aritmatika dan ditampilkan dalam biner. Masing-masing bagian itu or'ed ke sisanya. Bagian diproduksi oleh kekuatan 2
n
(tetap) dani
(jatuh) melalui1
n
i
dann/i
n-1
saati==1
ataui==n
.Sebenarnya, (1) dan (4) dikombinasikan dengan memproduksi
1
kapan1<i<n
dann-1
sebaliknya.sumber
Python,
114 110 9690 byteBenar-benar berubah:
Mengembalikan daftar string, karakter menggunakan
1
dan0
.-6 byte berkat TheBikingViking
Uji di ideone
Sebelumnya Python 2 @ 110
Uji di ideone
sumber
lambda n:[bin(sum(2**p for p in[range(n),{0,n-1,r,n-1-r}][0<r<n-1]))[2:]for r in range(n)]
.Java 7,
131130128125124122 byte3 byte disimpan berkat @LeakyNun ;
1 byte disimpan berkat @ OliverGrégoire dalam jawaban saya untuk Draw a square of # dengan tantangan lebar yang diberikan ;
2 byte disimpan berkat @cliffroot .
Tidak digabungkan & kode uji:
Coba di sini.
Keluaran:
sumber
String c(int n){String r="";for(int i=-1,j;++i<n;r+="\n")for(j=0;j<n;r+=i<1|j<1|n-i<2|n-j<2|i==j|i==n-++j?"*":" ")return r;}
4 byte disimpan;
bagian dalam untuk loop.i-->0
bukann-->0
dan Anda juga dapat menggunakani*j<1
bukani<1|j<1
untuk 2 byteMatlab,
68 66 6458 byteKarena output grafis juga diperbolehkan:
Output mana misalnya
Versi ascii saja adalah:
Ini menggunakan pengindeksan
0,1,2,3,...
Atau dengan pengindeksan
1,3,7,...
:sumber
C #,
112101 byteTerima kasih kepada TheLethalCoder untuk mengingatkan saya bahwa hal-hal pernyataan-maupun-ekspresi lambda anonim ini diperbolehkan dalam C #.
Siapa bilang C # bukan bahasa golf yang menyenangkan?
sumber
Logo, 155 byte
Solusi grafis, diimplementasikan sebagai fungsi
Saya memperlengkapi kembali jawaban saya untuk Alphabet Triangle dan sedikit mengubah sudut. Seperti sebelumnya,
r
menggambar garis karakter. Kali ini,b
fungsinya menggambar kotak dengan menggambar satu tepi lurus dan satu diagonal, berputar, dan berulang empat kali. Ini menyebabkan diagonal digambar dua kali (di atas satu sama lain), tapi itu kode kurang dari penanganan secara terpisah. Jawaban ini juga menangani angka genap dengan benar. Saya harus menambahkan penanganan khusus untuk masukan1
agar tidak maju.Saya menerapkannya sebagai fungsi,
b
yang mengambil ukuran sebagai argumen:Cobalah di penerjemah Logo Calormen.com . Untuk memanggilnya, tambahkan baris dan panggil
b
dalam format berikut:... atau coba piring sampler, yang menarik empat sampel dalam ukuran 5, 7, 9, dan 11, berputar 90 derajat di antaranya:
sumber
R, 102 byte
Perhatikan bahwa lebih efisien untuk mengekspresikan kondisi menggunakan% in% daripada i == 1 | j == 1 | ...
sumber
n=scan();for(i in n:1){for(j in n:2){z=" ";if(i%in%c(1,n,n-j+1)|j%in%c(i,n))z="*";cat(z)};cat("*\n")}
Haskell,
102100969187 byteany
any
denganelem
Versi tidak disatukan:
Saya yakin ini masih bisa diperbaiki, tetapi inilah yang saya buat untuk saat ini.
Versi lama:
sumber
[1..s]
dua kali, saya pikir Anda bisa mendefinisikannya diwhere
.c s=unlines$(\m->(m#)<$>z)<$>z where z=[1..s];m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' '
<$>[1..s]
menjadi sebuah fungsi, bukan? Sukac s=unlines$f(\m->f(m#))where m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' ';f=(<$>[1..s])
c s=unlines$f$f.(#)where f=(<$>[1..s]);m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' '
Java, 130 byte
Program Tes
sumber
int
sebelumj
dan menggunakanint i=0,j;
sebagai gantinya. Anda juga dapat mengganti semua||
dengan|
dan menghapus tanda kurung di cek-ternary. Juga, Anda menggunakans-1
empat kali, jadi saya akan meletakkan ini dalam variabel. Anda juga dapat mengubah==0
ke<1
. Jadi secara total menjadis->{for(int i=0,j,x=s-1;i<s;i++)for(j=0;j<s;j++)System.out.print(x-i==j|i==j|i<1|j<1|i==x|j==x?j==x?"*\n":"*":" ");}
( 116 byte ) Cukup sedikit lebih pendek dari jawaban Java 7 saya , pendekatan yang sangat bagus!C,
140121114 byte19 byte berkat Quentin.
7 byte disimpan dengan beralih dari loop bersarang ganda ke satu loop.
Saran bermain golf diterima.
sumber
int i,j;for(i=0;
tofor(int i=0,j;
int i,j;
setelahscanf
!n+~i-j
dll.#include
sepenuhnya.PowerShell (133)
Kikuk, tetapi itu bekerja dengan cukup baik.
Saran bermain golf pasti diterima, sudah terlalu lama sejak saya menggunakan PowerShell.
sumber
SILOS , 212 byte
Cobalah online!
sumber
GNU sed,
117114 +1 (r flag) = 115 byteKarena sed tidak memiliki dukungan asli untuk angka, input diberikan secara unary berdasarkan konsensus ini . Bagian kedua dari kotak adalah bagian pertama yang disimpan dalam urutan terbalik di ruang tunggu.
Menjalankan:
Keluaran:
sumber
Python, 89 byte
Ini adalah kemunduran! Saya menggunakan modul kura-kura python.
Inilah hasilnya ketika n = 200:
sumber
Scala,
141137 byteMenjalankan:
$ scala cross.scala 10
Secara teknis saya bisa menghapus barang cetakan dan pergi ke sesuatu seperti
Ini akan membuatnya 135 atau 121 byte tergantung pada apakah Anda menghitung hal-hal sintaks fungsi.
Versi yang dapat dibaca:
sumber
Pyth,
2725 byteCobalah online!
Mungkin golf.
sumber
Python 2, 83 byte
Memodifikasi daftar karakter baris untuk menempatkan tempat
*
pertama, terakhir, ke-i, dan ke-ke-terakhir. Baris pertama dan terakhir dimulai sebagai semua*
, dan sisanya sebagai semua spasi. Berfungsi untuk evens juga. Sebuahlambda
ekspresi mungkin lebih pendek dari modifikasi, tapi aku suka metode ini.sumber
Pyke,
282423 byteCoba di sini!
sumber
Mathematica, 81 byte
Menciptakan sistem koordinat dengan asal di tengah, dan menghitung kemana
*
s harus pergi. Output array string, satu per baris.sumber
Javascript (
289270 bytes)Tidak Disatukan:
EDIT: Disimpan 19 byte berkat Philipp Flenker.
sumber
size==1
Perl, 83 +1 = 84 byte
Jalankan dengan
-n
bendera.Baris baru literal menyimpan 1 byte lebih dari
\n
atau$/
.Dapat dibaca:
Kode mencetak baris teratas dan menyimpannya
$c
, lalu mencetak banyak ruang dengan slot yang sesuai digantia
s, lalu mencetak baris atas lagi.Penugasan ke
$\
variabel memberi tahu juru bahasa untuk mencetak konten (tanda bintang, baris baru, dan tanda bintang lain) setiap kali selesaiprint
, tetapi ini TIDAK terjadi setelah asay
.sumber
SmileBASIC, 46 byte
(Tidak, SB TIDAK menggunakan grafik 1-indeks ...)
sumber
Arang, 8 byte (tidak bersaing; tantangan tanggal akhir bahasa)
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan: Saat digunakan sebagai parameter pada
PolygonHollow
perintah,+
gambarlah sebuah kotak, dan panah kemudian buat diagonal. Ada beberapa karakter cara pintas lain tetapi mereka perlu didefinisikan ulang untuk menjadi berguna misalnyaY
setara dengan↖↗↓
tetapi jika itu setara↗↓↖
makaY+
akan cukup.sumber
SHELL ( 135 Bytes ):
tes:
sumber
Kotlin ,
123116 byteubah jika dengan \ n ke println
Cobalah online!
sumber