Saya mendapat tantangan ini dari Codingame dan saya ingin tahu tentang solusi yang lebih baik daripada saya:
Diberi lebar melalui input standar gambarlah sebuah persegi berongga '#' dalam lebar dan panjang yang diberikan.
Contoh:
5 hasil
#####
# #
# #
# #
#####
Saya menggunakan python untuk menyelesaikan ini jadi saya khususnya tertarik pada kode python lainnya. Tapi tolong kirimkan solusi Anda dalam bahasa apa pun yang Anda inginkan.
code-golf
string
ascii-art
number
code-golf
grid
code-golf
string
ascii-art
code-golf
alphabet
cipher
code-golf
math
number
code-golf
quine
code-golf
palindrome
polyglot
code-golf
number
array-manipulation
counting
logic
code-golf
string
primes
binary
decision-problem
code-golf
ascii-art
kolmogorov-complexity
popularity-contest
code-golf
probability-theory
code-golf
string
code-golf
python
polyglot
programming-puzzle
c++
code-golf
math
code-golf
binary
integer
bitwise
code-golf
rational-numbers
code-golf
string
palindrome
code-golf
ascii-art
code-golf
code-golf
string
fibonacci
code-golf
math
sequence
code-golf
code-golf
string
palindrome
code-golf
string
code-golf
math
primes
source-layout
code-golf
sequence
binary
integer
code-golf
math
arithmetic
game
code-golf
restricted-source
palindrome
code-golf
restricted-source
palindrome
code-golf
combinatorics
binary
code-golf
string
math
code-golf
ascii-art
number
code-golf
cipher
code-golf
base-conversion
counting
code-golf
sequence
random
classification
code-golf
string
subsequence
code-golf
permutations
code-golf
string
code-golf
string
cipher
code-golf
kolmogorov-complexity
arithmetic
integer
code-golf
quine
markov-chain
code-golf
string
code-golf
code-golf
ascii-art
maze
sebingel
sumber
sumber
Jawaban:
Pyke, 11 byte
Coba di sini!
sumber
Arang , 6 byte
Kode:
Penjelasan:
Cobalah online!
sumber
N
juga bisa digunakan dalam ekspresi, sepertiint(input())
pada Python. Jika tantangan ini adalah "menggambar persegi panjang berongga dengan lebar dan tinggi yang diberikan," solusinya bisaBNN#
.MATL , 12 byte
Cobalah online!
Penjelasan
sumber
Jolf, 8 byte
sumber
#
diperlukan?Python 2,
6254 byteKembali
#\n#
ketika input1
Versi 55 Bytes yang dicetak
Versi 62 Bytes yang berfungsi untuk input apa pun:
sumber
f=
kecuali Anda menggunakannya –– yang tidak Anda lakukan.SAP ,
426405348330 byteCobalah online! Ubah nomor pada baris kedua ke nomor apa saja untuk mengubah output.
Penerjemah COW yang saya gunakan di sini ditulis dalam Perl (dan lebih baru dari tantangan ini), tetapi Anda masih bisa mendapatkan hasil yang sama dengan memasukkan kode di sini .
Penjelasan
sumber
Python 2,
5958 byterepl.it
Catatan: Input
1
menghasilkan output##
, tetapi kotak kosong tidak akan pernah diproduksi untuk input kurang dari3
, jadi saya kira ini baik-baik saja.sumber
Java 7,
113112110 byte1 byte disimpan berkat @ OlivierGrégoire ;
2 byte disimpan berkat @cliffroot .
Solusi turunan berdasarkan pada jawaban saya pada Create a Crossed Square .
Coba di sini.
sumber
for(int i=n,j;i-->0;r+="\n")
? Karena kita tidak peduli yang mana yang merupakan garis bawah atau yang teratas, tidak masuk akal untuk menjaga ketertiban itu, kan?PowerShell v2 +,
4847 byte-1 byte terima kasih kepada JohnLBevan
Mengambil input
$n
, ditetapkan$z
sebagai$n
tanda pagar, dengan$n
post-decremented. Meringkas bahwa dalam parens untuk menempatkan salinan pada pipa. Kemudian gunakan operator koma untuk membuat larik$n
garis#
, spasi,, yang telah ditentukan sebelumnya#
. Itu dibiarkan di dalam pipa. Kemudian tempatkan$z
lagi di saluran pipa. Output melalui implisitWrite-Output
pada akhirnya memperkenalkan garis baru antar elemen, jadi kami mendapatkannya secara gratis.Karena kode OP tidak berfungsi untuk input
n <= 1
, saya menganggap itu berarti kita juga tidak perlu mendukung input1
.Contohnya
sumber
param($n)($z='#'*$n--);,("#$(' '*--$n)#")*$n;$z
C, 98 byte
Pemakaian:
sumber
05AB1E , 20 byte
Cobalah online!
Atau 18 byte jika kita dapat mengabaikan
1 <= n
:Cobalah online!
sumber
WinDbg,
206200182170 byte-6 byte dari menghapus parens dari
.if
dan menggunakanj
bukan yang kedua.if
-18 byte dengan menggunakan
f
alih-alih.for
untuk membangun string.-12 byte oleh bukan string NULL-mengakhiri, bukannya melewati panjang ke
da
Input diteruskan melalui register semu
$t0
(misr $t0 = 5; {above-code}
.).Penjelasan:
Output sampel:
sumber
JavaScript,
6158 byteDisimpan 3 byte berkat @lmis !
(Tidak menangani
0
atau1
)Untuk 13 byte tambahan ( 71 byte ), Anda bisa!
Solusi ini cukup sederhana: mereka melakukan banyak penyimpanan untuk tidak mengulangi sendiri untuk menghemat beberapa byte. Tanpa tanda kutip tanpa variabel, akan terlihat seperti:
Cobalah!
sumber
!n?'':n==1?'#':
, 15 byte tambahan di awal badan fungsi, Anda dapat menangani input0
dan1
.n=>(b='#'[r='repeat'](n))
dan kemudian#${" "[r](n-=2)}
dll. menghemat 3 byte dengan menghindari pengulanganrepeat
:)Python, 109 byte
sumber
list(' '*n)
dengan[' ']*n
. Anda juga dapat menggantix%(n-1)
denganx%~-n
for
blok menjadi daftar pemahaman Anda dapat menyimpan lebih dari 20 byteint()
dan kurung di sekitarprint
.<1
sebagai ganti==0
.Ruby, 39 byte
Ternyata menjadi lebih pendek dengan cara ini daripada semua hal mewah yang saya coba. Harap diperhatikan bahwa ini tidak menangani 0 atau 1 sama sekali.
sumber
Python 2, 50 byte
Bekerja untuk
n>=2
. Mencetak setiap baris dengan tanda pon,n-2
simbol yang sesuai, lalu tanda pon lain.Simbol Aliasing the pound memberikan panjang yang sama:
Upaya lain:
sumber
Haskell, 49 byte
Bekerja untuk
n>=2
. Menentukan operasi penyisipan karakter antara#
untukn
string -character newline-terminated, kemudian menerapkannya dua kali untuk membuat kisi 2D.Sebut seperti:
sumber
C,
8382807877 BytesMenyelinap dalam multiply dan menyimpan ...
Hitung mundur j dan simpan beberapa ...
Hitung mundur saya dari n ke nol dan simpan beberapa byte ...
Sedikit lebih mudah dimengerti dan 1 byte lebih
sumber
&&
bukan&
?Groovy,
5150 bytesumber
PHP,
8169 byteJalankan dengan
-r
; memberikan input sebagai argumen.Melempar
DivisionByZeroError
input untuk =1
.sumber
R, 68
70byteBerfungsi untuk n> 1. Terima kasih kepada @Billywob untuk beberapa byte yang menukar array untuk sebuah matriks.
Menggunakan rbind dan cbind untuk meletakkan baris dan kolom
#
di sekitar n-2 matriks ruang. Baris baru terikat ke baris juga. Baris baru di sumbernya signifikan. Masukan dari STDINsumber
\n
. Anda bisa menyimpan dua byte dengan menggunakanmatrix
bukanarray
.Common Lisp,
150130 byte-20 terima kasih kepada @Cyoce dan @AlexL.
Pemakaian:
Pada dasarnya menggunakan
format
dua kali untuk bagian atas dan bawah dan satu lingkaran untuk baris di antaranya. Panggilan format untuk bagian atas dan bawah menghasilkan garis yang dimulai dengan#
dan diisi dengan lebar yang sesuai dengan#
s. Panggilan format untuk baris di antara karya-karya yang sama, kecuali padding adalah spasi dan#
akan dicetak di akhir baris.Catatan: Saya agak baru di Lisp dan berharap memiliki banyak ruang untuk perbaikan dalam hal ini.
sumber
s
? Atau apakah saya fungsi anonim?dotimes (h (- v 2))
atau mungkinkahdotimes(h(- v 2))
?Haskell, 67 byte
Contoh penggunaan:
Bagaimana itu bekerja:
sumber
Jelly , 13, byte
TryItOnline! atau coba 0 hingga 15
Bagaimana?
sumber
Pip , 16 byte
15 byte kode, +1 untuk
-n
bendera.Bekerja untuk input> = 2. Cobalah online!
Penjelasan dari versi yang agak tidak disunat
Pertama, kita mendefinisikan fungsi
y
yang mengambil argumen string, mengulanginyaa-2
kali (di manaa
input baris perintah pertama), dan membungkus hasilnya#
.Selanjutnya, kami menerapkan fungsi ini dua kali - sekali normal, sekali lagi dengan peta - untuk mendapatkan kuadrat sebagai daftar string:
Untuk input
4
,(y s)
hasil dalam"# #"
dany M (y s)
dalam["####"; "# #"; "# #"; "####"]
. Nilai yang terakhir ini kemudian dicetak, dengan-n
bendera yang menyebabkannya dipisahkan oleh baris baru.Trik bermain golf
Untuk mendapatkan dari yang tidak disunat ke versi golf:
Y
adalah operator, yang artinya kita dapat menggunakannya dalam ekspresi. Alih-alihY...
diikuti(ys)
, kita bisa melakukannya(Y...s)
.y
; jadiyM(Y_Xa-2WR'#s)
tidak akan bekerja. Solusi: menukar operan dariM
operator ap. Selama salah satu dari mereka adalah fungsi dan yang lainnya adalah tipe yang dapat diubah, tidak masalah urutannya.sumber
Racket 113 byte
Tidak Disatukan:
Pengujian:
Keluaran:
sumber
SpecBAS - 57 byte
?
adalah singkatan untukPRINT
,#13
adalah carriage return yang dapat ditempel pada akhir string tanpa perlu+
bergabung dengan mereka.Apostrof memindahkan kursor cetak ke bawah satu baris.
sumber
Terjebak,
2927 BytesCukup lama untuk bahasa "golf", tetapi saya lupa bagaimana banyak dari itu bekerja: P
Penjelasan:
sumber
C #,
154152 byteGolf:
Tidak Disatukan:
EDIT1: Optimasi rentang loop.
sumber
Lithp , 117 byte
Garis terbagi dua agar mudah dibaca:
Penggunaan sampel:
sumber