Znasz te półki, które można ustawiać jeden na drugim, które są po prostu drewnianymi skrzynkami, które można ze sobą łączyć? Zamierzamy symulować budowę niektórych półek z książkami z grafiką ASCII.
Wszystkie nasze książki są dogodnie jednolite pod względem wielkości i wszystkie wyglądają następująco:
|X|
|X|
|X|
Półki na książki to pojedyncze pudełka, zawsze po środku o wysokości trzech znaków (wystarczająco, by zmieścić książkę stojącą pionowo), złożone z |
znaków po lewej i prawej stronie, -
znaków na górze i na dole oraz wystarczająco szerokich, aby zmieściły się w X
książkach (gdzie X
jest wejście liczba całkowita). Oto na przykład półka o dużych rozmiarach 3
:
|---------|
| |
| |
| |
|---------|
ponieważ można 3
do tego dopasować książki
|---------|
||X||X||X||
||X||X||X||
||X||X||X||
|---------|
Dane wejściowe będą dwie ściśle dodatnie liczby całkowite, X
a Y
gdzie X
jest szerokość półek, które mamy (mierzone w książkach), i Y
to, ile książek musimy ułożyć w stos. Jeśli mamy więcej książek niż mieści się na jednej półce, musimy dodać więcej półek na górę. Na przykład tutaj jest wejście 4 wide / 6 books
:
|------------|
||X||X| |
||X||X| |
||X||X| |
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
Jeśli Y % X > 0
, co oznacza, że liczba książek nie jest całkowitą wielokrotnością rozmiaru półki, pozostałe książki powinny znaleźć się na najwyższym lewym skrajnym miejscu (jak w przypadku 4 6
powyżej), a pozostała część tej półki powinna być wypełniona spacje.
Wkład
- Dwa ściśle dodatnie liczby całkowite w dowolnym, wygodnym formacie , każdy
>0
. - Możesz wziąć dane wejściowe w dowolnej kolejności (np. Najpierw rozmiar półek, a następnie liczba książek lub odwrotnie). Podaj w swoim zgłoszeniu kolejność wprowadzania.
- Możesz bezpiecznie założyć, że żadne dane wejściowe nie będą większe niż domyślny
[int]
rozmiar twojego języka (lub równoważny).
Wydajność
Wynikowa reprezentacja artystyczna książek i półek ASCII.
Zasady
- Wiodące lub końcowe znaki nowej linii lub białe znaki są opcjonalne, o ile same znaki są odpowiednio ustawione w linii.
- Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je wydrukować.
- Jeśli to możliwe, dołącz link do internetowego środowiska testowego, aby inni mogli wypróbować Twój kod!
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
Dalsze przykłady
6 wide / 2 books
|------------------|
||X||X| |
||X||X| |
||X||X| |
|------------------|
2 wide / 6 books
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|
4 wide / 9 books
|------------|
||X| |
||X| |
||X| |
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
Odpowiedzi:
JavaScript (ES6),
1009998 bajtówPobiera szerokość
w
i liczbę książekb
w składni curry(w)(b)
.Sformatowane i skomentowane
Przypadki testowe
Pokaż fragment kodu
źródło
Bash (+ narzędzia),
130,108, 106 bajtówPojedynczy, ciągły potok powłoki do renderowania twoich półek na książki.
Dziennik zmian:
printf + seq
nieprzetworzonymprintf
bajtem -10Grał w golfa
Wypróbuj online!
Jak to działa
$./shelf 2 3
printf %$2s\\n
- generuj n białych znaków, po jednym na książkę (pokazane jako_
)___
fold -$1
- złóż je według długości półkised "s/ /|X|/g;"
- wymień_
sięX
, dodawać okładki książki:;/.\{$[$1*3]\}/!s/$/ /;t
- prawa podkładka ze spacjami (pokazane jako_
)h;s/./-/gp;x;p;p;p;x
- trzykrotnie każdą linię i dodaj---
przed i po niej.sed 's/.*/|&|/'|tac
- zawiń linie| |
, odwróć za pomocą tacźródło
t
zamiastb
tego nie potrzebujesz{}
. Możesz pominąć,s/./-/g
ponieważ są już-
s. Wypróbuj online!Python 2,
133113105 bajtówJestem pewien, że jest lepszy sposób ...
Dane wejściowe są pobierane
width, books
-20 bajtów dzięki @ovs za zauważenie niepotrzebnej funkcji lambda!
-8 bajtów dzięki @ovs za skrócenie danych wejściowych.
źródło
X,Y=input()
jest krótszym sposobem na przyjęcie wartości.X, Y
, prawda?'|'
jako zmienną.Partia, 261 bajtów
Wykorzystuje moją sztuczkę z odpowiedzi partii na Zagrajmy w tenisa, aby łatwo wydrukować wiele
|
postaci.źródło
Haskell , 100 bajtów
x#y
zwraca ciąg znaków dla szerokościx
iy
książek.Wypróbuj online!
Główną funkcją / operatorem jest
#
. Kiedyx<y
dzieli książki nay-x
ix
, a następnie powraca. Kiedyx>=y
,w
ib
są dwa typy linii, minus zewnętrzne|
s oraz znak nowej linii.Operator pomocnika
s?n
łączyn
kopie ciągus
.źródło
PowerShell ,
149134 bajtówWypróbuj online!
Pobiera wejściowy idth
$w
i$b
ooks. Ustawia sznurek$s
jako jedną z poziomych półek. Mamy więc dwaif
stwierdzenia.Pierwszy sprawdza, czy mamy „resztki” książek. Jeśli tak, wysyłamy półkę, (liczbę książek plus liczba miejsc)
*3
i kolejną półkę.Następnie sprawdzamy, czy po usunięciu pozostałych (
$a
) pozostały jeszcze książki . Taki sam rodzaj konfiguracji, z tą różnicą, że wykorzystujemy$w
liczbę książek. Ponieważ w tym momencie$b
jest gwarantowana wielokrotność$w
(ponieważ usunęliśmy resztę$a
), nie musimy się martwić o zaokrąglanie.Usunięto
[math]::Floor()
połączenie, oszczędzając 15 bajtówWszystkie te ciągi są pozostawione w potoku, a domniemane
Write-Output
dzieje się po zakończeniu programu.źródło
CJam ,
6261 bajtówPobiera dane wejściowe jako
width books
Wypróbuj online!
Wyjaśnienie
źródło
Python 3, 142 bajty
Nadal nad tym pracuję.
b
dotyczy „liczby książek” iw
szerokości półki.źródło
R=b%w
zostanie przeniesiony do następnej linii. Ponadto powinieneś być w stanie usunąć białe znaki wokół tych trzech,=
aby zaoszczędzić trochę bajtów.d+3*p+d if R!=0 else ''
zR and d+3*p+d or''
d+3*p+d
?AHK, 208 bajtów
Kilka rzeczy mnie frustruje od dalszego grania w golfa:
%1%
&%2%
) w funkcjach matematycznych, ponieważ oczekują one wprowadzenia zmiennej lub liczby i przyjmie, że nieskalowany1
będzie numerem jeden, a nie nazwą zmiennejŁatwiejsza do odczytania wersja powyższego wygląda następująco:
Jeśli a
Loop
nie używa nawiasów{}
, to tylko następny wiersz jest częścią pętli. Jeśli ustawiasz wartość zmiennej za pomocą:=
zamiast=
, możesz upuścić znaki zmiany znaczenia dla znaku procentu. Tylda n jest znakiem nowej linii.źródło
Java 7,
230224222 bajtówWyjaśnienie:
Kod testowy:
Wypróbuj tutaj.
Wydajność:
źródło
.repeat
naprawdę bardzo pomaga w tym wyzwaniu .PowerShell, 109 bajtów
Skrypt testu mniej golfowego:
Wydajność:
PowerShell, 109 bajtów, alternatywa
źródło
Python 2 ,
120118 bajtówWypróbuj online!
Zamierzałem spróbować tego w ciągu ostatnich kilku dni. Teraz, kiedy wreszcie mam czas, jest już krótsza odpowiedź w języku Python. No cóż, właśnie napisane jako alternatywa.
Dane wejściowe przyjmowane jako szerokość, książki
źródło
SOGL , 64 bajty
Objaśnienie: Pierwsza funkcja:
druga funkcja:
ta funkcja oczekuje liczby (liczby książek) na stosie i wyświetla książki z półkami
Dalszy podany przykład to e = 3 (szerokość półki) ib = 8 (kwota książki)
jest to górna / dolna linia półki i zawsze pozostaje na pierwszej części stosu (pół pusta półka)
Pierwsza główna część
I ostatnia część
źródło
Java (JDK) , 124 bajty
Wypróbuj online!
Kredyty
źródło
PHP> = 7,1, 138 bajtów
Wersja online
źródło
Płótno , 33 bajty
Wypróbuj tutaj!
Objaśnienie (niektóre postacie zostały zastąpione, aby wyglądały bardziej monospace):
źródło
Pip
-n
, 45 bajtówPobiera odpowiednio szerokość i liczbę książek jako argumenty wiersza poleceń. Wypróbuj online!
Wyjaśnienie
Wykonujemy pętlę, aby drukować półki jedna po drugiej od góry do dołu. Przy każdej iteracji aktualizujemy
b
(liczbę książek do wydrukowania) odejmujący
(liczbę książek wydrukowanych na tej iteracji). Gdyb
osiągnie wartość 0, pętla kończy się.Ponieważ jest to trochę skomplikowane, oto przykład pierwszej iteracji, gdy
a = 3, b = 8
:który następnie drukuje jako
źródło
Pyth , 56 bajtów
Akceptuje szerokość półki, liczenie książek jako osobne argumenty w tej kolejności. Spróbuj go online tutaj , lub sprawdzić wszystkie przypadki testowe od razu tutaj .
źródło
Dalej (gforth) , 622 bajtów (zminimalizowane (usuń komentarze, wcięcia, nazwy słów 1-znakowych) do 303 bajtów)
Moja pierwsza gra z Forthem :)
Wypróbuj online!
Wydajność
źródło