Biorąc pod uwagę liczbę n , wygeneruj pierwsze n kolumn tego wzoru:
#
# #
# # # #
# # # # # # # #
# # # # # # # # # # # # # # # #
################################ ...
Wysokość kolumny przy (1-indeksowanym) n jest liczbą końcowych 0
bitów w reprezentacji binarnej n plus jeden. W rezultacie w dolnej warstwie jest wypełniona każda kolumna, druga warstwa co druga kolumna, trzecia warstwa co czwarta kolumna itp.
Zasady
- Możesz wprowadzać i wyprowadzać dowolną standardową metodą.
- Możesz założyć, że wejście jest liczbą całkowitą od 1 do 999 włącznie.
- Dane wyjściowe mogą zawierać dowolną ilość białych znaków, o ile wzór jest nienaruszony.
- Wzór musi być indeksowany 1 i mieć ten sam format, jak pokazano tutaj.
- Możesz użyć dowolnego pojedynczego znaku spacji zamiast
#
, ale nie możesz zmienić znaku spacji.
Przypadki testowe
1
#
2
#
##
3
#
###
4
#
# #
####
5
#
# #
#####
7
#
# # #
#######
32
#
# #
# # # #
# # # # # # # #
# # # # # # # # # # # # # # # #
################################
Kilka większych przypadków testowych można znaleźć tutaj .
Punktacja
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach w każdym języku.
#
?Odpowiedzi:
Python 2 , 54 bajty
Wypróbuj online!
Drukuje z dużą ilością wiodących białych znaków. Każdy wiersz
i
odliczający odn
powtarza wzór2**i-1
spacji, po których następuje#
. Ten wzór powtarza się do szerokości linijki, która jest wejściemn
. Odbywa się to przez pomnożenie ciągu wzorcan
i pobranie pierwszychn
znaków[:n]
.Wzorzec można wykonać przez formatowanie łańcucha dla alternatywy o równej długości.
Słodka metoda krojenia jest dłuższa.
źródło
Python 3 , 74 bajty
Wypróbuj online!
źródło
a=2**len(bin(n))
dla 72 bajtówV ,
17, 16 bajtówWypróbuj online!
Hexdump:
Dzięki @KritixiLithos za oszczędność jednego bajtu!
Algorytm ten jest strasznie nieefektywny, ale powinien teoretycznie działać dla każdego rozmiaru wejściowego.
Działa, generując pierwsze n iteracje następującego wzorca:
A następnie odciąć wszystkie oprócz pierwszych n kolumn. W związku z tym powstanie mnóstwo wiodących białych znaków, ale OP powiedział:
Wyjaśnienie:
źródło
|
.JavaScript (ES6),
6158 bajtówZaoszczędzono 1 bajt dzięki @ETHProductions, a następnie 2 kolejne bajty, gdy zobaczyłem, że można użyć dowolnego znaku.
Rozwiązanie rekurencyjne.
Przypadki testowe:
Pokaż fragment kodu
Animacja:
Pokaż fragment kodu
źródło
c/2|0
na,c>>1
aby zapisać bajt.APL (Dyalog) , 21 bajtów
Wypróbuj online!
'# '[
… `] Indeksuje ciąg za pomocą⎕
uzyskać dane wejściowe⍳
że wielu í ntegers2⊥⍣¯1
konwertuj na binarny, używając tyle cyfr, ile potrzeba (jedna liczba w każdej kolumnie )⊖
odwróć do góry nogami∨⍀
skumulowana redukcja OR w pionie0⍪
konkatenuj zera na górze⊖
odwróć do góry nogami (tj. ponownie do góry)1+
dodaj jeden (dla indeksowania 1)źródło
Galaretka ,
1110 bajtówWypróbuj online!
1 bajt zapisany po tym, jak OP dodał relaksację, że postać nie musi być
#
.źródło
Oktawa, 45 bajtów
Wypróbuj w Octave Online!
Zamiast
'#'
wydruków'!'
.źródło
PHP , 139 bajtów
Wypróbuj online!
źródło
Japt ,
2017 bajtówZaoszczędź 3 bajty dzięki produktom @Shaggy i @ETH
Wypróbuj online!
Wyjaśnienie:
Wejście: 5
źródło
l
n&-n
, aby uchwycić tylko końcowy1
i wszystko spływu0
swn
. Nie jestem pewien, czy to pomoże, ale wartoC,
8474 bajtyNie golfowany:
Testuj z:
Wyjaśnienie
Ponownie, rekurencja wymaga mniej znaków w C niż iteracja, więc dwie pętle są wyrażone jako dwie rekurencyjne wywołania.
Ponadto C jest doskonałym językiem do gry w sztuczki z wyrażeniami boolowskimi, pozwalając na decyzję, czy wyrazić puste miejsce czy
#
wyrazić32+3*!(i&m)
. Spacja ma wartość ASCII wynoszącą 32,#
jest to ASCII 35, więc otrzymujemy puste miejsce, jeśli którykolwiek z bitów w masce jest ustawionyi
.źródło
int i,l,m
?Pyth , 15 bajtów
Spróbuj!
wyjaśnienie
źródło
Python 2 , 47 bajtów
Wypróbuj online!
źródło
JavaScript (ES8), 71 bajtów
Funkcja padStart () została wprowadzona w ECMAScript 2017!
Pokaż fragment kodu
JavaScript (ES6), 77 bajtów
Pokaż fragment kodu
źródło
Mathematica, 69 bajtów
źródło
( WESRRMICGSE ): 237 bajtów
W porządku. „splaining time.
Po pierwsze, zamień każdy
COUNTA(R1C:R[-1]C,R[1]C:R[1024]C)+1
po prostu[i]
na dane wejściowe. token zlicza liczbę komórek, nie licząc siebie, zawierających formułę, a następnie dodaje jedną, aby uwzględnić siebie. Ponieważ WESRRMICGSE przeciąga formułę zgodnie z podanymi danymi wejściowymi, ten token zawsze daje dane wejściowe.mamy:
Jest to o wiele bardziej czytelne. Często zobaczysz
FLOOR(LOG([i],2),1)
token, co oznacza po prostu pobranie najbliższej potęgi 2, która jest mniejsza niż liczba input ([i]
). np4->4, 5->4, 6->4, 7->4, 8->8 ...etc
. : Zastąpię toGS[[i]]
lepszy. rozkładając klauzulę if, testujemy, czy rząd jest mniejszy lub równy
GS[[i]]+3
, ponieważ wysokość wszystkich linijek jest równa GS [[i]] + 1, to wybiera wiersze, które są równe wysokości linijka.+1
dla 1-indeksujących wierszy i+1
ponownie dla przesunięcia WESRRMICGSE.FALSE
Wynik uzyskuje pustej komórki ( „”) oraz rzeczywiste wydajności wynikówLEFT(REPT(REPT(" ",,FLOOR(POWER(2,LOG([i],2)-ROW()+2),1),1)-1) &"#",[i]),[i])
obecnie wciąż edytuję, bądźcie czujni
źródło
Haskell ,
6462 bajtówWypróbuj online! Przykładowe zastosowania:
f 10
.źródło
k, 33 bajtów
Wydaje się, że działa to tylko w tłumaczu AW .
Wersja OK (którą możesz wypróbować online) wydaje się zawierać błąd, który wymaga niewielkiej zmiany, aby działała:
źródło
C #, 174 bajtów
Ta metoda ma dwa parametry, dane wejściowe dla długości linijki i dane wyjściowe, które są linijką jako ciągiem znaków.
Gra w golfa:
Zębaty:
Wypróbuj online!
źródło
Func<int, string>
pozwoliłaby Ci zaoszczędzić trochę bajtów?Węgiel drzewny ,
2723 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zapisano 4 bajty, przełączając na
JumpTo
.źródło
JumpTo
(przepraszam)J, 38 bajtów
Nie najlepiej. Lmk, jeśli liczba bajtów jest wyłączona - rozmawiam przez telefon.
źródło
3
na początku jest wejście ...0|.@|:'#'#"0~1#.2~:/\i.#:@,]
Java (OpenJDK 8) , 91 bajtów
Wypróbuj online!
Nie golfowany:
źródło
CJam, 34 bajty
Meh
źródło
C (gcc) , 70 bajtów
Wypróbuj online!
źródło
n+~x
zamiastn^x+1
Perl 5 , 60 + 1 (-n) = 61 bajtów
Wypróbuj online!
źródło