Biorąc pod uwagę liczbę n
, wypisz uporządkowaną listę indeksów 1 opartych na przekątnej n*n
macierzy kwadratowej.
Przykład:
Dla danych wejściowych 3
:
Kwadrat powinien być:
1 2 3
4 5 6
7 8 9
Teraz możemy wybrać wszystkie indeksy reprezentowanych przez \
, /
lub X
( #
lub pozycje spoza przekątne są odrzucane)
\ # /
# X #
/ # \
Dane wyjściowe wynoszą:
[1,3,5,7,9]
Przypadki testowe:
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]
Nie będzie akceptowanej odpowiedzi. Chcę znać najkrótszy kod dla każdego języka.
Odpowiedzi:
Oktawa , 28 bajtów
Anonimowa funkcja, która wprowadza liczbę i wyprowadza wektor kolumnowy liczb.
Wypróbuj online!
źródło
JavaScript (ES6), 48 bajtów
Zwraca rozdzieloną myślnikiem listę liczb całkowitych w postaci łańcucha.
Sformatowane i skomentowane
Przypadki testowe
Pokaż fragment kodu
źródło
&
aby zapisać bajt?4%3
i4%5
nie mają wspólnego 1-bit, ale oba są niezerowe.n=5
i zauważyłem, że to nie zadziała.k%~-n&&k%-~n
powinno działać. niezła sztuczka z separatorem!R ,
38353438 bajtów3 bajty zapisane, gdy przypomniałem sobie o istnieniu
which
funkcji ..., 1 bajt zapisany dzięki @Rift+4 bajty dla argumentu
ec=T
wywołanego przez program jako pełny programsource()
Wypróbuj online!
Wyjaśnienie:
źródło
d=diag(n<-scan());which(d|d[n:1,])
source
) nic to nie drukuje. Musisz zadzwonićcat
. Zobacz ten post na meta .Galaretka , 8 bajtów
Wypróbuj online!
Wykorzystuje algorytm Luisa Mendo do odpowiedzi MATL.
źródło
ŒD
.ŒD
robi coś zupełnie innego niż X o określonym rozmiarze.Oktawa ,
4137 bajtówNawiasem mówiąc, działa to również w MATLAB. Brak podstępnej funkcji specyficznej dla Octave :)
Wypróbuj online!
Wyjaśnienie:
Zamiast tworzyć kwadratową macierz i znaleźć dwie przekątne, pomyślałem, że raczej zamiast tego obliczam przekątne bezpośrednio. To było 17 bajtów krótszych! =)
Tak to wygląda bez
unique
:Tak, prawdopodobnie powinienem zmienić kolejność przekątnych, aby uczynić go bardziej przyjaznym dla człowieka.
źródło
MATL , 6 bajtów
Wypróbuj online!
Wyjaśnienie
Takie samo podejście jak moja odpowiedź Octave.
Rozważ dane wejściowe
3
jako przykład.Indeksowanie liniowe jest główne , oparte na 1. Aby uzyskać więcej informacji, zobacz fragment długości 12 tutaj .
źródło
t
jest duplikatem, a nie transpozycją. Dodałem również wypracowany przykładPython 2 ,
5453 bajtówWypróbuj online!
źródło
Oktawa,
6854 bajtówDzięki @Stewie Griffin za uratowanie 14 bajtów!
Wypróbuj online!
MATLAB, 68 bajtów
Wyjaśnienie:
źródło
Mathematica, 42 bajty
Wypróbuj online!
@ KellyLowder grał w golfa do ...
Mathematica, 37 bajtów
a @alephalpha wyrzuciło stół!
Mathematica, 34 bajty
źródło
##&@@@Table[{i-#,1-i}+i#,{i,#}]⋃{}&
jest 5 bajtów krótszyUnion@@Range[{1,#},#^2,{#+1,#-1}]&
Proton , 41 bajtów
Wypróbuj online!
źródło
MATL , 14 bajtów
Wypróbuj online!
źródło
C (gcc) ,
6558 bajtów-7 bajtów dzięki Titusowi!
Wypróbuj online!
źródło
i%-~n&&i%~-n||printf("%d ",i+1)
(-7 bajtów)C # (.NET Core) ,
9783 bajtówWypróbuj online!
Zmiana tutaj opiera się na przesunięciu między liczbami do znalezienia. Dwie zmiany zaczynające się od 0 są,
n-1
an+1
więc jeślin=5
liczby dlan-1
byłyby0,4,8,12,16,20
in+1
byłyby0,6,12,18,24
. Łącząc je i dając 1-indeksowanie (zamiast 0-indeksowanie) daje1,5,7,9,13,17,19,21,25
. Przesunięcie odn
jest uzyskiwane za pomocą negacji bitowej (operacja bitowego uzupełnienia), gdzie~-n==n-1
i-~n==n+1
.Stara wersja
Wypróbuj online!
Podejście to wykorzystuje indeksy kolumn i wierszy do ustalenia, czy liczby są na przekątnych.
i/n
daje indeks wiersza ii%n
daje indeks kolumny.Zwracanie tylko tablicy liczb
Jeśli uważa się, że konstruowanie tylko tablicy liczb liczy się do kosztu bajtu, wówczas można wykonać następujące czynności, w oparciu o sugestię Dennis.Verweij (
using System.Linq;
dodaje dodatkowe 18 bajtów):C # (.NET Core) , 66 + 18 = 84 bajtów
Wypróbuj online!
źródło
&
. Dodatek&
służy tylko do przerwania porównania, jeśli pierwsze wejście jest fałszywe MSDNusing System;
? (Zakładam, że zawinięcie go wnamespace System.Linq
nie jest ważne?)JavaScript,
7363 bajtystara wersja
Zaoszczędź 10 bajtów dzięki @Shaggy
Pierwszy raz w golfa! mam nadzieję, że nie zepsułem się tak bardzo.
Pokaż fragment kodu
źródło
filter
funkcji:!(--x%(n+1)&&x%(n-1))
i tworząc tablicę w ten sposób:[...Array(n*n+1).keys()]
[1...n*n]
zakresu za pomocąArray(n*n).fill().map((x,i)=>i+1)
” -[...Array(n*n)].map((_,y)=>y+1)
jest to krótszy sposób na zrobienie tego w przyszłości.n=>[...Array(n*n+1).keys()].filter(x=>!(--x%-~n&&x%~-n))
Pyth ,
2018 bajtów( Oto wersja początkowa .)
Pakiet testowy.
Pyth , 18 bajtów
Pakiet testowy.
źródło
Perl 5 , 56 + 1 (-n) = 57 bajtów
Wypróbuj online!
źródło
perl -e
. Wiersz polecenia dla tego przykładu toperl -ne
. To różnica +1.Java (OpenJDK 8) , 71 bajtów
Wypróbuj online!
Port szkockiej odpowiedzi .
źródło
Japt , 16 bajtów
Wydaje się, że nie radzę sobie lepiej, ale jestem pewien, że to możliwe. Musiałem poświęcić 2 bajty z powodu niepotrzebnego wymagania, że używamy 1-indeksowania.
Sprawdź to
źródło
Oktawa, 32 bajty
Wypróbuj online!
źródło
PHP,
5654 + 1 bajtów+1 bajt dla
-R
flagidrukuje liczby poprzedzone myślnikami. Uruchom jako potok z
-nR
lub spróbuj online .wymaga PHP w wersji 5.6 lub nowszej dla
**
operatora.Dodaj jeden bajt dla starszych PHP: Wymienić
;$z**.5<$n=$argn
z$z=$argn;$z<$n*$n
.źródło
Rubinowy, 45 bajtów
Działa wewnętrznie jako indeksowany zerem. sprawdza, czy
i
modulon+1
lubn-1
ma wartość 0, jeśli tak drukujei+1
.źródło