Diberikan bilangan bulat n ≥ 1, menghasilkan representasi 2D † dari tanda persen lebar n . Konstruksi berjalan sebagai berikut:
- Buat n oleh n matriks (atau daftar daftar) diisi dengan nol.
- Masukkan yang di sudut kiri atas dan kanan bawah.
- Tempatkan yang diagonal dari kiri bawah ke kanan atas.
Untuk input n = 4, konstruksi ini akan terlihat seperti:
1. 4x4 matrix of 0s
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
2. 1s in TL and BR corners
1 0 0 0
0 0 0 0
0 0 0 0
0 0 0 1
3. 1s across BL-TR diagonal
1 0 0 1
0 0 1 0
0 1 0 0
1 0 0 1
Ini adalah kode-golf , sehingga program terpendek dalam byte menang.
† Saya menggunakan matriks 1s dan 0s, tetapi juga dapat diterima untuk menggunakan string karakter dan spasi non-spasi apa pun. Jadi, contoh di atas dapat terlihat seperti:
# #
#
#
# #
atau
# #
#
#
# #
Uji kasus
n
output
1
1
2
1 1
1 1
3
1 0 1
0 1 0
1 0 1
4
1 0 0 1
0 0 1 0
0 1 0 0
1 0 0 1
10
1 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 1
Catatan akhir
Menambahkan penjelasan akan sangat dihargai.
'1'+'0'*(n-2)
dengan spasi putih dimasukkanJawaban:
Jelly , 6 byte
Cobalah online!
Bagaimana itu bekerja
sumber
²Ḷ%’¬s
atau+þ%’=2
²Ḷọ’s
sangat dekat ...ḍ@
tapi itu dua byte.⁼þµ+1¦Ṫṁ³UG
... sampai solusi Dennis-²
sesuatu muncul.JavaScript (ES6), 52 byte
sumber
V , 15 byte
Cobalah online!
Penjelasan
sumber
Python 2 ,
5857 byteCobalah online!
sumber
GNU APL,
1715 byteIni adalah hari yang aneh ... GNU benar-benar mengalahkan Dyalog APL ... wah.
TIO tidak mendukung APL GNU ...
Penjelasan (input
⍵
):sumber
1=⍵∨
dan menerapkannya dalam solusi sayaPython 2 , 46 byte
Cobalah online!
Output seperti
Python 2 , 48 byte
Cobalah online!
Output seperti
Python 3 , 48 byte
Cobalah online!
Pendekatan substitusi string yang sangat berbeda dalam Python 3. Output seperti:
sumber
10L
10
?L
pada akhirnya sehingga saya dapat memotong jumlah karakter yang sama dari akhir angka besar dan kecil.10
dan10L
berbeda.Jelly , 9 byte
Cobalah online!
Bagaimana itu bekerja
sumber
APL (Dyalog) , 18 byte
Cobalah online!
Membuat ini berfungsi untuk input 1 telah menambahkan 6 byte.
Melihat testcase 4, kita melihat outputnya
Ini pada dasarnya 1 0 0 diulangi sepanjang matriks. Dengan kata lain, 1 0 0 dibentuk dalam matriks 4-oleh-4. Jadi dalam solusi ini, pertama-tama kita menghasilkan vektor ini dengan 1 dan mengekor 0s menggunakan
1=⍳⍵-1
dan kemudian membentuknya menggunakan⍵ ⍵⍴
. Tapi ini borks untuk input 1, jadi kita perlu membuat kondisional dan mendapatkan 6 byte ...sumber
Haskell , 55 byte
Pada awalnya pendekatan saya adalah secara rekursif menghasilkan matriks identitas yang ditransposisikan, tetapi kemudian memperbaiki baris pertama dan terakhir membutuhkan beberapa perbedaan kasus yang jelek / panjang. Jadi saya mencari cara lain untuk menghasilkan matriks identitas yang merupakan cara saya menemukan ide ini .
Cobalah online!
Penjelasan
menghasilkan matriks ini (untuk
n=4
):Seperti yang Anda lihat elemen kiri atas adalah
2
(secara umum), semua elemen diagonal adalah5
(secara umumn+1
) dan elemen kanan bawah adalah8
(secara umum2*n
). Jadi yang perlu kita lakukan adalah memeriksa apakahx+y
elemen[2,n+1,2*n]
.sumber
R ,
5442 byte-12 byte terima kasih kepada Jarko Dubbeldam
mengembalikan sebuah matriks; dibaca dari stdin. membuat matriks identitas
diag(n)
, membaliknya ke atas[,n:1]
, mengatur kiri atas dan kanan bawah1
, dan kemudian menulis ke konsol (''
) dengan lebarn
.Cobalah online!
sumber
pryr::f
).R+pryr
jadi saya akan menganggap itu sebagai bahasa yang terpisah; Anda bebas mengirimkannya! Kemudian Anda dapat menggunakan ide dari jawaban dukun Sapi yang saya pikir akan lebih pendek dari ini dalam konteks itu (1-liner).function(n)
mungkin masih akan lebih pendekfunction(n)matrix(rep(c(1,rep(0,n-2)),n+1),n,n)
MATL , 7 byte
Cobalah di MATL Online!
Penjelasan
Buat matriks identitas (
Xy
), balik vertikal (P
), tulis ((
) nilai 1 (l
) ke entri pertama dan terakhir (5L
), yang merupakan kiri atas dan kanan bawah.sumber
Dyalog APL,
121110 byteCobalah online
-1 byte terima kasih kepada lstefano.
Bagaimana?
sumber
,⍨⍴×,2↓⊢↑×
(10 byte). Saya tergoda untuk menambahkan: jangan gunakan terlalu banyak perjalanan ... :-PC # (.NET Core) ,
121 9188 byte-30 byte karena cara lama itu bodoh.
-3 byte dengan menggerakkan inisialisasi variabel
Cobalah online!
Loop mengulangi array untuk mengisi 1. Mengembalikan array 1 dan 0.
sumber
b
sebagaivar
untuk menghemat byte.05AB1E ,
14117 byteCobalah online!
Penjelasan
sumber
Arang ,
14127 byte-5 byte terima kasih kepada Neil !
Cobalah online!
sumber
Nν◨/ν←↙ν‖O↘
, tapi kemudian saya datang dengan↗N⸿/‖O↘
!⸿
. Apakah pengaturan ulang ke posisi semula?⸿
seperti¶
di dalamnya bergerak turun satu baris tetapi selalu pergi ke kolom nol (diukur denganJ
) daripada kolom di awal string, jadi misalnyaJ⁵¦⁵⸿
sama denganJ⁰¦⁶
.C ++, 144 byte
Ini mengambil keuntungan dari perbedaan satu byte antara '#' dan 35
sumber
'#'
dan35
?Mathematica, 72 byte
memasukkan
keluaran
sumber
Grid@s
dengans
untuk menyimpan 5 byte.Python 2 ,
8662 byteCobalah online!
-24 byte: Berkat ide dari Rod!
sumber
PowerShell , 67 byte
Cobalah online!
Mengambil input
$n
dan loop dari0
ke--$n
(yaitu,$n
pre-decremented). Setiap iterasi, kami membuat string1
diikuti dengan$n-1
0
s, lalu mengalikan3
waktu itu (misalnya,100010001000
untuk input5
). Lalu kami indeks ke dalam itu secara bergiliran mulai dari0
ke0 + $n
. Karakter-karakter itu-join
diedarkan ke dalam sebuah string, yang tersisa di jalur pipa. Output tersirat.(NB - Ini membutuhkan 9 byte tambahan untuk menangani kasus khusus
n=1
. Di bawah ini adalah kode 58-byte jika kami dijaminn>1
)sumber
Dyalog APL v16, 23 byte
Cobalah online!
Penjelasan:
sumber
Lua, 117 byte
Cobalah
Kode ini cukup sederhana. Ini menetapkan m ke argumen pertama, kemudian menambahkan 0 untuk mengubahnya menjadi angka, kemudian beralih ke belakang untuk koordinat Y, meneruskan melalui koordinat X dan akan menempatkan # jika x == y atau jika itu sudut lainnya.
Program ini tidak pernah menggunakan kata kunci "jika".
sumber
Oktaf, 37 byte
Cobalah online!
Menghasilkan matriks tipis yang mewakili tanda persen.
sumber
Japt , 12 byte
Mengembalikan array 2D / matriks.
Cobalah online!menggunakan
-Q
flag untuk menampilkan output berformat array.Penjelasan
Tersirat:
U
= input integerKuadrat
U
(²
), buat larik[0, U*U)
(o
), dan petakan setiap item dengan ...1
jika itu dapat dibagi (v
) olehU-1
(UÉ
), yang lain0
.Atur item (
h
) pada indeks 0 (T
) ke1
.Pisahkan array menjadi irisan (
ò
) dengan panjangU
.sumber
hT1
, karena0
secara teknis sudah dapat dibagi olehU
setiap orangU
. Selain itu, pekerjaan hebat :-)1
. Tanpa itu, ia kembali[[0]]
karena ternyata nol tidak dapat dibagi dengan nol.PHP, 53 byte
Panjang sisi matriks adalah
$l
. Kode ini memiliki Pemberitahuan PHP dan bahkan Peringatan PHP untuk pembagian sebanyak 0 saat$l=0
, tetapi berhasil!sumber
$l
). Sayangnya ini bukan salah satu cara kami yang diterima untuk mengambil masukan . Di pos meta yang ditautkan Anda akan menemukan alternatif, misalnya menggunakan argumen baris perintah seperti yang terlihat dalam jawaban ricdesi .while($i**.5<$n=$argn)echo$i++%~-$n?0:1,"\n"[$i%$n];
atauwhile($i**.5<$n=$argn)echo+!($i++%~-$n),"\n"[$i%$n];
(masing-masing 52 byte)<?
di awal.Python 2 , 93 byte
Cobalah online!
sumber
Ruby, 47 byte
Ini mengembalikan array array.
Kode ini cukup mudah.
n-1
array dengan1
sebagai elemen pertama dan sisanya diisi dengan0
s (misalnya[1, 0, 0, 0]
)n
irisann
elemenCobalah online!
sumber
J, 14 byte
Tidak Disatukan:
Cobalah online!
sumber
0=<:|i.@,~
?Python 3, 97 byte
Penjelasan
m=[[0+(j==n-i-1)for j in range(n)]for i in range(n)]
Ini adalah pemahaman daftar,
0+(j==n-i-1)
cara yang lebih pendek untuk mengkonversij==n-i-1
ke int (sebagai lawan dariint
fungsi) dan kemudianm[-1]=m[0]
lebih pendek daripada membuat kanan bawah 1, karena baris atas dan bawah identik.sumber
Keempat,
273 (tanpa komentar)170 (golf-ish)(273 versi untuk memperjelas versi komentar:)
(Perhatikan bahwa, karena spasi putih adalah pembatas utama di Forth, menghapus setiap carriage return tidak akan ada bedanya. Lekukan, tentu saja, tidak.)
(Berkomentar:)
(Contoh eksekusi:)
(Catatan akhir: berfungsi kurang dari satu lebar bit dari penerjemah Forth. Saya menjalankan di atas pada gforth, AMD64. Forth 16-bit kuno hanya akan memiliki lebar 15 bit, dan akan membutuhkan sedikit modifikasi.)
sumber
C # (.NET Core) , 65 byte
Cobalah online!
Algoritma secara signifikan berbeda dari jawaban C # lainnya, jadi saya memutuskan untuk mempostingnya secara terpisah daripada sebagai perbaikan. Terinspirasi oleh jawaban Jelly berperingkat teratas sebenarnya, saya melakukan sesuatu yang sedikit kurang kompak sebelumnya. Outputnya adalah array linier, jadi akan membutuhkan beberapa logika untuk membungkusnya menjadi 2D di luar metode apa adanya. Versi alternatif membutuhkan 6 byte tambahan untuk dihasilkan sebagai array 2D yang sebenarnya:
Saya juga memiliki versi yang tidak bersaing yang menarik.
Ini berakhir dengan hampir output yang benar, menghasilkan
IEnumerable<bool>
benar / salah bukan 1/0, dan itu adalah struktur linear daripada 2D, dan meskipun tidak diperlukan untuk baris kode yang tepat,using System.Collections.Generic
diperlukan untuk melakukan sesuatu yang berguna dengan keluaran. Seperti yang saya katakan, sangat dekat dengan valid tetapi tidak cukup.sumber
?1:0
karya dan saya percaya array hasilnya harus baik-baik saja. Koleksi yang menggunakan juga tidak diperlukan untuk kode itu.w*w
ke variabel dan memindahkanint
deklarasi keluar dari loop menghemat sesuatu?w*w
dengan variabel karakter tunggal menghemat 4 byte, bergerak diint i=0
luar loop membutuhkan titik koma yang biaya 1 byte, dan kemudian menambah,s=w*w
biaya deklarasi 6 byte, sehingga sebenarnya jaring +3 byte.