Dostałem to wyzwanie od Codingame i jestem ciekaw lepszych rozwiązań niż moje:
Biorąc pod uwagę szerokość za pomocą standardowego wejścia, narysuj pusty kwadrat „#” dla danej szerokości i długości.
Przykład:
5 wyników w
#####
# #
# #
# #
#####
Użyłem Pythona, aby rozwiązać ten problem, więc jestem szczególnie zainteresowany innym kodem Pythona. Ale nie krępuj się opublikować swoje rozwiązanie w dowolnym języku, który chcesz.
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
źródło
źródło
Odpowiedzi:
Pyke, 11 bajtów
Wypróbuj tutaj!
źródło
Węgiel , 6 bajtów
Kod:
Wyjaśnienie:
Wypróbuj online!
źródło
N
można również użyć w wyrażeniu, np.int(input())
W Pythonie. Gdyby tym wyzwaniem było „narysowanie pustego prostokąta o danej szerokości i wysokości”, rozwiązaniem mogłoby byćBNN#
.MATL , 12 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Jolf, 8 bajtów
źródło
#
potrzebne są trzy ?Python 2,
6254 bajtyZwraca,
#\n#
gdy wejście jest1
55 Bajtów, która jest drukowana
62 bajtów wersja, która działa dla dowolnego wejścia:
źródło
f=
chyba że go użyjesz - czego nie robisz.COW ,
426405348330 bajtówWypróbuj online! Zmień liczbę w drugim wierszu na dowolną liczbę, aby zmienić dane wyjściowe.
Interpreter COW, którego tu używam, został napisany w Perlu (i jest nowszy niż to wyzwanie), ale nadal możesz uzyskać ten sam wynik, wpisując kod tutaj .
Wyjaśnienie
źródło
Python 2,
5958 bajtówrepl.it
Uwaga: Dane wejściowe
1
produkują dane wyjściowe##
, ale pusty kwadrat nigdy nie byłby wytwarzany dla danych wejściowych mniejszych niż3
, więc myślę, że to jest w porządku.źródło
Java 7,
113112110 bajtów1 bajt zapisany dzięki @ OlivierGrégoire ;
2 bajty zapisane dzięki @cliffroot .
Pochodzące rozwiązanie oparte na moich Tworzenie przekreślonego Plac odpowiedź .
Wypróbuj tutaj.
źródło
for(int i=n,j;i-->0;r+="\n")
? Ponieważ nie obchodzi nas, która z nich jest najwyższa, czy najwyższa, utrzymanie tego porządku nie ma sensu, prawda?PowerShell v2 +,
4847 bajtów-1 bajt dzięki JohnLBevan
Pobiera dane wejściowe
$n
, ustawia$z
jako$n
znaki skrótu, z$n
późniejszą dekrementacją. Hermetyzuje to w parens, aby umieścić kopię w potoku. Następnie zastosowano operator przecinek utworzyć szereg wstępnie zmniejszany$n
linii#
, spacji#
. Zostaną w przygotowaniu. Następnie umieszcza$z
ponownie w rurociągu. Wyjście za pośrednictwem niejawnegoWrite-Output
na końcu wprowadza nową linię między elementami, więc otrzymujemy to za darmo.Ponieważ kod OP nie działa na dane wejściowe
n <= 1
, zrozumiałem, że nie musimy też obsługiwać danych wejściowych1
.Przykłady
źródło
param($n)($z='#'*$n--);,("#$(' '*--$n)#")*$n;$z
C, 98 bajtów
Stosowanie:
źródło
05AB1E , 20 bajtów
Wypróbuj online!
Lub 18 bajtów, jeśli możemy zignorować
1 <= n
:Wypróbuj online!
źródło
WinDbg,
206200182170 bajtów-6 bajtów z usuwania parenów
.if
i używaniaj
zamiast drugiego.if
-18 bajtów przy użyciu
f
zamiast a.for
do skonstruowania ciągów.-12 bajtów przez ciągi nie kończące wartości NULL, zamiast tego przekazujące długość do
da
Dane wejściowe są przekazywane przez pseudo-rejestr
$t0
(npr $t0 = 5; {above-code}
.).Wyjaśnienie:
Przykładowe dane wyjściowe:
źródło
JavaScript,
6158 bajtówZaoszczędź 3 bajty dzięki @lmis !
(Nie obsługuje
0
lub1
)Za 13 dodatkowych bajtów ( 71 bajtów ) możesz!
Te rozwiązania są dość proste: zajmują dużo miejsca, aby nie powtarzać się w celu zaoszczędzenia kilku bajtów. Unminified bez variablsm wyglądałoby to tak:
Spróbuj!
źródło
!n?'':n==1?'#':
dodatkowe 15 bajtów na początku treści funkcji, możesz obsługiwać dane wejściowe0
i1
.n=>(b='#'[r='repeat'](n))
a następnie#${" "[r](n-=2)}
itd. oszczędza 3 bajty, unikając powtórzeniarepeat
:)Python, 109 bajtów
źródło
list(' '*n)
z[' ']*n
. Można również wymienićx%(n-1)
zx%~-n
for
blok w zrozumienie listy, możesz zaoszczędzić więcej niż 20 bajtówint()
i nawiasy wokółprint
.<1
zamiast==0
.Rubinowy, 39 bajtów
Okazuje się, że jest w ten sposób krótszy niż wszystkie fantazyjne rzeczy, których próbowałem. Pamiętaj, że w ogóle nie obsługuje 0 lub 1.
źródło
Python 2, 50 bajtów
Działa dla
n>=2
. Drukuje każdą linię ze znakiem funta,n-2
odpowiedniego symbolu, a następnie innym znakiem funta.Aliasing symbolu funta daje tę samą długość:
Inne próby:
źródło
Haskell, 49 bajtów
Pracuje dla
n>=2
. Definiuje operację umieszczania znaku pomiędzy#
dlan
długość do rubryki nowej linii zakończony sznurkiem, a następnie stosuje się go dwukrotnie, aby uczynić siatkę 2D.Zadzwoń jak:
źródło
C,
8382807877 bajtówPrzekradnij się i pomiń bajt ...
Odlicz także j i zaoszczędź jeszcze kilka ...
Odlicz i od n do zera i zapisz kilka bajtów ...
Trochę łatwiejsze do zrozumienia i 1 bajt więcej
źródło
&&
zamiast&
?Groovy,
5150 bajtówźródło
PHP,
8169 bajtówUruchom z
-r
; podaj dane wejściowe jako argument.Zgłasza a
DivisionByZeroError
dla danych wejściowych =1
.źródło
R, 68
70bajtówDziała dla n> 1. Dzięki @Billywob przez kilka bajtów zamieniając tablicę na macierz.
Wykorzystuje rbind i cbind do umieszczania wierszy i kolumn
#
wokół n-2 kwadratowej macierzy spacji. Nowe linie są również powiązane z wierszami. Nowa linia w źródle jest znacząca. Dane wejściowe pochodzą ze STDINźródło
\n
. Możesz jednak zapisać dwa bajty, używającmatrix
zamiastarray
.Common Lisp,
150130 bajtów-20 dzięki @Cyoce i @AlexL.
Stosowanie:
Zasadniczo używa
format
dwa razy dla górnej i dolnej części i pętli dla rzędów pomiędzy. Wywołanie formatu dla górnej i dolnej linii wypisuje linię zaczynającą się od#
i dopełniany do odpowiedniej szerokości za pomocą#
s. Wywołanie formatu między wierszami działa podobnie, z tym że dopełnienie to spacje i a#
drukowane jest na końcu linii.Uwaga: Jestem raczej nowy w Lisp i oczekuję, że będę miał dużo miejsca na poprawę.
źródło
s
? Czy może funkcja anonimowa?dotimes (h (- v 2))
czy może byćdotimes(h(- v 2))
?Haskell, 67 bajtów
Przykład użycia:
Jak to działa:
źródło
Galaretka , 13 bajtów
TryItOnline! lub spróbuj od 0 do 15
W jaki sposób?
źródło
Pypeć , 16 bajtów
15 bajtów kodu, +1 dla
-n
flagi.Działa dla danych wejściowych> = 2. Wypróbuj online!
Wyjaśnienie nieco nie golfowej wersji
Najpierw definiujemy funkcję,
y
która pobiera argument łańcuchowy, powtarza goa-2
razy (gdziea
jest pierwszym wejściem wiersza poleceń) i zawija wynik#
.Następnie stosujemy tę funkcję dwa razy - raz normalnie, a następnie ponownie z mapą - aby uzyskać kwadrat jako listę ciągów znaków:
Na wejściu
4
,(y s)
powoduje"# #"
orazy M (y s)
w["####"; "# #"; "# #"; "####"]
. Ta ostatnia wartość jest następnie drukowana za pomocą-n
flaga powoduje, że jest ona oddzielana znakiem nowej linii.Sztuczki golfowe
Aby przejść z wersji bez golfa do gry w golfa:
Y
jest operatorem, co oznacza, że możemy go użyć w wyrażeniu. ZamiastY...
następnie(ys)
możemy po prostu zrobić(Y...s)
.y
; więcyM(Y_Xa-2WR'#s)
nie zadziała. Rozwiązanie: zamień operandyM
operatora ap. Tak długo, jak jedna z nich jest funkcją, a druga typem iterowalnym, nie ma znaczenia, w jakiej kolejności są one wprowadzane.źródło
Rakieta 113 bajtów
Nie golfowany:
Testowanie:
Wydajność:
źródło
SpecBAS - 57 bajtów
?
jest skrótemPRINT
,#13
oznacza powrót karetki, który można przyczepić do końca łańcucha bez potrzeby+
dołączania do niego.Apostrof przesuwa kursor wydruku w dół o jedną linię.
źródło
Utknął,
2927 bajtówDość cholernie tęsknię za językiem „golfowym”, ale zapomniałem, jak wiele z tego działa: P.
Wyjaśnienie:
źródło
C #,
154152 bajtyGra w golfa:
Nie golfowany:
EDYCJA 1: Optymalizacja zakresu pętli.
źródło
Lithp , 117 bajtów
Podział linii na dwie części dla czytelności:
Przykładowe użycie:
źródło