Biorąc pod uwagę liczbę całkowitą n ≥ 1, wyświetl dwuwymiarową reprezentację † znaku procentu szerokości n . Konstrukcja wygląda następująco:
- Utwórz macierz n na n (lub listę list) wypełnioną zerami.
- Wstaw je w lewym górnym i prawym dolnym rogu.
- Umieść je po przekątnej od lewego dolnego rogu do prawego górnego rogu.
Dla danych wejściowych n = 4 ta konstrukcja wyglądałaby następująco:
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
To jest golf golfowy , więc wygrywa najkrótszy program w bajtach.
† Używam macierzy 1 i 0, ale dopuszczalne jest również użycie ciągów znaków i spacji niebiałych białych znaków. Tak więc powyższy przykład może wyglądać następująco:
# #
#
#
# #
lub
# #
#
#
# #
Przypadki testowe
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
Ostatnia uwaga
Bardzo byłoby mile widziane dodanie wyjaśnienia.
'1'+'0'*(n-2)
z wstawioną białą spacjąOdpowiedzi:
Galaretka , 6 bajtów
Wypróbuj online!
Jak to działa
źródło
²Ḷ%’¬s
lub+þ%’=2
²Ḷọ’s
jest tak blisko ...ḍ@
tylko dwa bajty.⁼þµ+1¦Ṫṁ³UG
... dopóki nie²
pojawiło się jakieś rozwiązanie Dennisa .JavaScript (ES6), 52 bajty
źródło
V , 15 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Python 2 ,
5857 bajtówWypróbuj online!
źródło
GNU APL,
1715 bajtówTo jest jeden dziwny dzień ... GNU faktycznie pokonało Dyalog APL ... woah.
TIO nie obsługuje GNU APL ...
Objaśnienie (wejście jest
⍵
):źródło
1=⍵∨
i wdrożyć ją w moim rozwiązaniuPython 2 , 46 bajtów
Wypróbuj online!
Wyjścia jak
Python 2 , 48 bajtów
Wypróbuj online!
Wyjścia jak
Python 3 , 48 bajtów
Wypróbuj online!
Zupełnie inne podejście do podstawiania ciągów w Pythonie 3. Dane wyjściowe, takie jak:
źródło
10L
10
?L
na końcu, więc mogę odciąć tę samą liczbę znaków od końca dużych i małych.10
i10L
byłem inny.Galaretka , 9 bajtów
Wypróbuj online!
Jak to działa
źródło
APL (Dyalog) , 18 bajtów
Wypróbuj online!
Aby ta praca działała dla wejścia 1, dodano 6 bajtów.
Patrząc na przypadek testowy 4, widzimy wynik
Zasadniczo jest to 1 0 0 powtarzane w całej matrycy. Innymi słowy, 1 0 0 ukształtowany w matrycy 4 na 4. Tak więc w tym rozwiązaniu najpierw generujemy ten wektor z 1 i końcowymi zerami za pomocą,
1=⍳⍵-1
a następnie kształtujemy go za pomocą⍵ ⍵⍴
. Ale to borks dla wejścia 1, więc musimy stworzyć warunek i uzyskać 6 bajtów ...źródło
Haskell , 55 bajtów
Początkowo moim podejściem było rekurencyjne generowanie transponowanej macierzy tożsamości, ale następnie ustalenie pierwszej i ostatniej linii wymagało pewnych brzydkich / długich rozróżnień wielkości liter. Więc szukałem innego sposobu na wygenerowanie matrycy tożsamości, w jaki sposób znalazłem ten pomysł.
Wypróbuj online!
Wyjaśnienie
generuje tę macierz (dla
n=4
):Jak widać, lewy górny element to
2
(ogólnie), wszystkie elementy ukośne to5
(ogólnien+1
), a dolny prawy element to8
(ogólnie2*n
). Więc wszystko, co musimy zrobić, to sprawdzić, czyx+y
jest elementem[2,n+1,2*n]
.źródło
R ,
5442 bajtów-12 bajtów dzięki Jarko Dubbeldam
zwraca macierz; czyta ze standardowego. tworzy matrycę tożsamości
diag(n)
, odwraca ją od góry do dołu[,n:1]
, ustawia lewy górny i prawy dolny na1
, a następnie zapisuje w konsoli (''
) o szerokościn
.Wypróbuj online!
źródło
pryr::f
).R+pryr
rozważyć inny język; możesz to przesłać! Następnie możesz skorzystać z pomysłu z odpowiedzi szarlatana Krowy, który moim zdaniem byłby w tym kontekście jeszcze krótszy (1-liniowy).function(n)
prawdopodobnie będzie jeszcze krótszefunction(n)matrix(rep(c(1,rep(0,n-2)),n+1),n,n)
MATL , 7 bajtów
Wypróbuj w MATL Online!
Wyjaśnienie
Utwórz macierz tożsamości (
Xy
), odwróć w pionie (P
), napisz ((
) wartość 1 (l
) do pierwszego i ostatniego wpisu (5L
), które są lewym górnym i prawym dolnym rogu.źródło
Dyalog APL,
121110 bajtówWypróbuj online
-1 bajt dzięki lstefano.
W jaki sposób?
źródło
,⍨⍴×,2↓⊢↑×
(10 bajtów). Kusi mnie, aby dodać: nie używaj zbyt wielu dojazdów ... :-PC # (.NET Core) ,
121 9188 bajtów-30 bajtów, bo stary sposób był głupi.
-3 bajty poprzez zmianę inicjalizacji zmiennej
Wypróbuj online!
Pętle iterują tablicę, wypełniając jedynki. Zwraca tablicę 1 i 0.
źródło
b
jakvar
zaoszczędzić kilka bajtów.05AB1E ,
14117 bajtówWypróbuj online!
Wyjaśnienie
źródło
Węgiel drzewny ,
14127 bajtów-5 bajtów dzięki Neilowi !
Wypróbuj online!
źródło
Nν◨/ν←↙ν‖O↘
, ale potem wymyśliłem↗N⸿/‖O↘
!⸿
robi. Czy resetuje się do pierwotnej pozycji?⸿
jest tak¶
, że przesuwa się w dół o rząd, ale zawsze idzie do kolumny zero (mierzonej przezJ
), a nie do kolumny na początku łańcucha, więc na przykładJ⁵¦⁵⸿
jest taki sam jakJ⁰¦⁶
.C ++, 144 bajty
Wykorzystuje różnicę jednobajtową między „#” a 35
źródło
'#'
i35
?Mathematica, 72 bajty
wkład
wydajność
źródło
Grid@s
sięs
, aby zapisać 5 bajtów.Python 2 ,
8662 bajtówWypróbuj online!
-24 bajty: Dzięki pomysłowi Rod!
źródło
PowerShell , 67 bajtów
Wypróbuj online!
Pobiera dane wejściowe
$n
i pętle od0
do--$n
(tj.$n
Wstępnie dekrementowane). Podczas każdej iteracji tworzymy ciąg znaków1
poprzedzony$n-1
0
s, a następnie mnożymy te3
czasy (np.100010001000
Dla wprowadzenia5
). Następnie indeksujemy to rotacyjnie, zaczynając od0
do0 + $n
. Znaki te są-join
edytowane w ciąg, który pozostawia się w potoku. Wynik jest niejawny.(Uwaga: Wymaga to dodatkowych 9 bajtów, aby obsłużyć specjalny przypadek
n=1
. Poniżej znajduje się 58-bajtowy kod, jeśli mamy gwarancjęn>1
)źródło
Dyalog APL v16, 23 bajty
Wypróbuj online!
Wyjaśnienie:
źródło
Lua, 117 bajtów
Spróbuj
Kod jest dość prosty. Ustawia m na pierwszy argument, następnie dodaje do niego 0, aby przekonwertować go na liczbę, a następnie iteruje do tyłu dla współrzędnej Y, do przodu przez współrzędną X i wstawi # jeśli x == y lub jeśli są to pozostałe rogi.
Ten program nigdy nie używa słowa kluczowego „if”.
źródło
Oktawa, 37 bajtów
Wypróbuj online!
Generuje rzadką macierz reprezentującą znak procentu.
źródło
Japt , 12 bajtów
Zwraca tablicę / macierz 2D.
Wypróbuj online! używając
-Q
flagi, aby wyświetlić wyjście w formacie tablicowym.Wyjaśnienie
Implikowany:
U
= liczba całkowita wejściowaSquare
U
(²
), utwórz tablicę[0, U*U)
(o
) i zamapuj każdy element przez ...1
jeśli jest podzielna (v
) przezU-1
(UÉ
), else0
.Ustaw pozycję (
h
) w indeksie 0 (T
) na1
.Podziel tablicę na plasterki (
ò
) o długościU
.źródło
hT1
, ponieważ0
jest to technicznie już podzielneU
dla każdegoU
. Poza tym świetna robota :-)1
. Bez tego zwraca,[[0]]
ponieważ najwyraźniej zero nie jest podzielne przez zero.PHP, 53 bajty
Długość boku matrycy wynosi
$l
. Ten kod zawiera Powiadomienie PHP, a nawet Ostrzeżenie PHP dla dzielenia przez 0 kiedy$l=0
, ale działa!źródło
$l
). Niestety nie jest to jeden z naszych akceptowanych sposobów przyjmowania informacji . W połączonym meta postu znajdziesz alternatywy, np. Używając argumentów wiersza poleceń, jak widać w odpowiedzi Ricdesi .while($i**.5<$n=$argn)echo$i++%~-$n?0:1,"\n"[$i%$n];
lubwhile($i**.5<$n=$argn)echo+!($i++%~-$n),"\n"[$i%$n];
(po 52 bajty)<?
na początku.Python 2 , 93 bajty
Wypróbuj online!
źródło
Ruby, 47 bajtów
Zwraca tablicę tablic.
Kod jest dość prosty.
n-1
tablicę1
jako pierwszy element, a resztę wypełnia0
s (np.[1, 0, 0, 0]
)n
plastryn
elementówWypróbuj online!
źródło
J, 14 bajtów
Nie golfowany:
Wypróbuj online!
źródło
0=<:|i.@,~
?Python 3, 97 bajtów
Wyjaśnienie
m=[[0+(j==n-i-1)for j in range(n)]for i in range(n)]
Jest to zrozumienie listy,
0+(j==n-i-1)
jest to krótszy sposób na konwersjęj==n-i-1
na int (w przeciwieństwie doint
funkcji), a następniem[-1]=m[0]
jest krótszy niż wykonanie prawej dolnej 1, ponieważ górne i dolne rzędy są identyczne.źródło
Dalej,
273 (bez komentarzy)170 (golf-ish)(Wersja 273 w celu wyjaśnienia wersji komentowanej:)
(Zauważ, że ponieważ białe znaki są głównym ogranicznikiem w Forth, usunięcie każdego powrotu karetki nie zrobiłoby żadnej różnicy. Wcięcie oczywiście tak.)
(Skomentowane:)
(Przykłady wykonania:)
(Uwaga końcowa: działa do jednego bitu mniej niż szerokość interpretera Fortha. Uruchomiłem powyższe na gforth, AMD64. Starożytny 16-bitowy Forth miałby szerokość tylko 15 bitów i wymagałby niewielkiej modyfikacji.)
źródło
C # (.NET Core) , 65 bajtów
Wypróbuj online!
Algorytm różni się znacznie od innych odpowiedzi w języku C #, więc postanowiłem opublikować go osobno, a nie jako ulepszenie. Zainspirowany faktycznie najlepiej ocenianą odpowiedzią Jelly, robiłem wcześniej coś nieco mniej kompaktowego. Dane wyjściowe są tablicą liniową, więc wymagałoby to pewnej logiki, aby zawinąć je w 2D poza metodą w obecnej postaci. Alternatywna wersja wymaga 6 dodatkowych bajtów do wyprowadzenia jako prawdziwa tablica 2D:
Mam też ciekawą, niekonkurującą wersję.
W efekcie uzyskuje się prawie prawidłowy wynik, co daje w wyniku
IEnumerable<bool>
true / false zamiast 1/0, i jest to struktura raczej liniowa niż 2D, i chociaż nie jest potrzebna dla tej dokładnej linii kodu,using System.Collections.Generic
jest niezbędna do zrobienia czegokolwiek przydatnego z wydajność. Tak jak powiedziałem, jest to bardzo ważne, ale nie do końca.źródło
?1:0
pracach i uważam, że tablica wyników powinna być w porządku. Korzystanie z kolekcji również nie jest konieczne dla tego kodu.w*w
zmiennej i przeniesienieint
deklaracji poza pętlę ocaliłoby cię?w*w
zmienną jednoznakową pozwala zaoszczędzić 4 bajty, wyjścieint i=0
poza pętlę wymaga średnika, który kosztuje 1 bajt, a następnie dodanie,s=w*w
do deklaracji kosztuje 6 bajtów, więc w rzeczywistości uzyskuje +3 bajty.