Diberi nomor n
, Keluaran daftar urutan indeks berbasis 1 jatuh di salah satu diagonal n*n
matriks kuadrat.
Contoh:
Untuk masukan dari 3
:
Kuadrat tersebut harus:
1 2 3
4 5 6
7 8 9
Sekarang kami memilih semua indeks yang diwakili oleh \
, /
atau X
( #
atau posisi non-diagonal ditolak)
\ # /
# X #
/ # \
Outputnya adalah:
[1,3,5,7,9]
Kasus uji:
1=>[1]
2=>[1,2,3,4]
3=>[1,3,5,7,9]
4=>[1,4,6,7,10,11,13,16]
5=>[1,5,7,9,13,17,19,21,25]
Tidak akan ada jawaban yang diterima. Saya ingin tahu kode terpendek untuk setiap bahasa.
Jawaban:
Oktaf , 28 byte
Fungsi anonim yang memasukkan angka dan menghasilkan vektor kolom angka.
Cobalah online!
sumber
JavaScript (ES6), 48 byte
Menghasilkan daftar bilangan bulat yang dipisahkan tanda hubung sebagai string.
Diformat dan dikomentari
Uji kasus
Tampilkan cuplikan kode
sumber
&
untuk menyimpan byte?4%3
dan4%5
tidak memiliki 1-bit yang sama, tetapi keduanya tidak nol.n=5
dan menemukan bahwa itu tidak akan berhasil.k%~-n&&k%-~n
harus bekerja. trik yang bagus dengan pemisah!R ,
38353438 byte3 byte disimpan ketika saya ingat tentang keberadaan
which
fungsi ..., 1 byte disimpan berkat @Rift+4 byte untuk argumen
ec=T
ketika dipanggil sebagai program penuh olehsource()
Cobalah online!
Penjelasan:
sumber
d=diag(n<-scan());which(d|d[n:1,])
source
) ini tidak mencetak apa pun. Anda harus meneleponcat
. Lihat posting ini di meta .Jelly , 8 byte
Cobalah online!
Menggunakan algoritma Luis Mendo pada jawaban MATL-nya.
sumber
ŒD
.ŒD
melakukan sesuatu yang sama sekali berbeda dari X dengan ukuran tertentu.Oktaf ,
4137 byteIni bekerja di MATLAB juga. Tidak ada fungsi spesifik Oktaf yang licik :)
Cobalah online!
Penjelasan:
Alih-alih membuat matriks persegi, dan menemukan dua diagonal, saya pikir saya lebih suka menghitung diagonal secara langsung. Ini lebih pendek 17 byte! =)
Ini seperti apa, tanpa
unique
:Ya, saya mungkin harus membalik urutan diagonal untuk membuatnya lebih ramah manusia.
sumber
MATL , 6 byte
Cobalah online!
Penjelasan
Pendekatan yang sama dengan jawaban Oktaf saya.
Pertimbangkan input
3
sebagai contoh.Pengindeksan linear adalah kolom-utama , berbasis 1. Untuk informasi lebih lanjut, lihat cuplikan ke-12 di sini .
sumber
t
duplikat, bukan transpos. Juga, saya telah menambahkan contoh yang berhasilPython 2 ,
5453 byteCobalah online!
sumber
Oktaf,
6854 byteTerima kasih kepada @Stewie Griffin karena telah menghemat 14 byte!
Cobalah online!
MATLAB, 68 byte
Penjelasan:
sumber
Mathematica, 42 byte
Cobalah online!
@KellyLowder memindahkannya ke ..
Mathematica, 37 byte
dan @alephalpha membuang meja!
Mathematica, 34 byte
sumber
##&@@@Table[{i-#,1-i}+i#,{i,#}]⋃{}&
lebih pendek 5 byteUnion@@Range[{1,#},#^2,{#+1,#-1}]&
Proton , 41 byte
Cobalah online!
sumber
MATL , 14 byte
Cobalah online!
sumber
C (gcc) ,
6558 byte-7 byte terima kasih kepada Titus!
Cobalah online!
sumber
i%-~n&&i%~-n||printf("%d ",i+1)
(-7 byte)C # (.NET Core) ,
9783 byteCobalah online!
Perubahan di sini didasarkan pada pergeseran antar angka untuk ditemukan. Dua shift mulai dari 0 adalah
n-1
dann+1
, jadi jikan=5
, angka untukn-1
akan0,4,8,12,16,20
dan untukn+1
akan0,6,12,18,24
. Menggabungkan ini dan memberikan 1-pengindeksan (bukan pengindeksan 0) memberi1,5,7,9,13,17,19,21,25
. Offset darin
dicapai menggunakan negasi bitwise (operasi komplemen bitwise), di mana~-n==n-1
dan-~n==n+1
.Versi lama
Cobalah online!
Pendekatan ini menggunakan indeks kolom dan baris untuk menentukan apakah angka ada di diagonal.
i/n
memberikan indeks baris, dani%n
memberikan indeks kolom.Hanya Mengembalikan Array Angka
Jika membangun hanya nomor array dianggap diperhitungkan terhadap biaya byte, maka berikut ini dapat dilakukan, berdasarkan saran Dennis.Verweij (
using System.Linq;
menambahkan 18 byte tambahan):C # (.NET Core) , 66 + 18 = 84 byte
Cobalah online!
sumber
&
. Tambahan&
ada di sana hanya untuk mematahkan perbandingan jika input pertama adalah MSDNusing System;
? (Saya menganggap membungkusnya dalamnamespace System.Linq
tidak valid?)Javascript,
7363 byteversi lama
Disimpan 10 byte berkat @Shaggy
Pertama kali bermain golf! di sini berharap aku tidak mengacaukannya terlalu buruk.
Tampilkan cuplikan kode
sumber
filter
fungsi Anda :!(--x%(n+1)&&x%(n-1))
dan dengan membuat array Anda seperti ini:[...Array(n*n+1).keys()]
[1...n*n]
rentang denganArray(n*n).fill().map((x,i)=>i+1)
" -[...Array(n*n)].map((_,y)=>y+1)
adalah cara yang lebih pendek untuk melakukan itu, untuk referensi di masa mendatang.n=>[...Array(n*n+1).keys()].filter(x=>!(--x%-~n&&x%~-n))
Pyth ,
2018 byte( Ini versi awalnya .)
Test Suite.
Pyth , 18 byte
Test Suite.
sumber
Perl 5 , 56 + 1 (-n) = 57 byte
Cobalah online!
sumber
perl -e
. Baris perintah untuk contoh ini adalahperl -ne
. Itu perbedaan +1.Java (OpenJDK 8) , 71 byte
Cobalah online!
Jawaban Port of scottinet .
sumber
Japt , 16 byte
Sepertinya tidak bisa melakukan lebih baik dari ini tetapi saya yakin itu mungkin Harus mengorbankan 2 byte untuk persyaratan yang tidak perlu yang kami gunakan 1-pengindeksan.
Menguji
sumber
Oktaf, 32 byte
Cobalah online!
sumber
PHP,
5654 + 1 byte+1 byte untuk
-R
benderamencetak angka yang diawali dengan tanda hubung. Jalankan sebagai pipa dengan
-nR
atau coba online .membutuhkan PHP 5.6 atau lebih baru untuk
**
operator.Tambahkan satu byte untuk PHP yang lebih lama: Ganti
;$z**.5<$n=$argn
dengan$z=$argn;$z<$n*$n
.sumber
Ruby, 45 byte
Bekerja secara internal sebagai nol diindeks. memeriksa apakah
i
modulon+1
ataun-1
0, jika dicetaki+1
.sumber