Stwórz program, który pobiera długość i listę interwałów i wyświetla linijkę o tej długości z dłuższymi tyknięciami dla każdego interwału, używając znaków rysowania linii ┌ ┬ ┐ │ ╵
- Pierwszy wiersz wyniku powinien rozpoczynać się od tiku dla 0 z
┌
i kończyć tikiem dla długości z┐
, z użyciem┬
dla każdego znaku pomiędzy. Wlength
tym pierwszym rzędzie będzie łącznie + 1 znaków rysowania linii. - Tyk należy wydłużyć w pionie o pół znaku, stosując
╵
i│
na podstawie interwałów wejściowych. - Odstępy są wyświetlane od najmniejszej do największej, w stosunku do przedziału przed nim. Opracować:
- Pierwszy interwał informuje, ile podstawowych tików (pierwszy wiersz - jeden znak na tik) znajduje się w drugim najmniejszym interwale (najmniejszy interwał to 1). Na przykład [3] wydłuży co trzeci tik o pół znaku.
- Drugi i kolejne przedziały dotyczą następnego najmniejszego przedziału. Na przykład [3, 5] wydłuży co 15 bazowych tików o pełny znak, a [3, 5, 2] wydłuży co 30 bazowych tików o półtora znaku.
- Pod-interwał 1 jest prawidłowy i skutecznie oznacza, że ostatnie linie interwału są przedłużane o pełny znak zamiast o pół znaku.
- Przykładowe przypadki testowe powinny pomóc wyjaśnić, jak to działa.
Przykłady / przypadki testowe
3, []:
┌┬┬┐
9, [3]:
┌┬┬┬┬┬┬┬┬┐
╵ ╵ ╵ ╵
30, [5, 2]:
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵ │
32, [4, 2, 2, 2]:
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵ │ ╵ │
│ ╵ │
48, [5, 3, 2]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ ╵ │ ╵ ╵ │ ╵ ╵ │
╵ ╵
24, [7, 3]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ ╵ │
17, [3, 2, 1]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵
╵ ╵ ╵
1, [23, 19, 13, 11, 7, 5, 3, 2, 1]
┌┐
│
│
│
│
╵
Inne zasady / uwagi
- Dane wejściowe i wyjściowe mogą mieć dowolny dogodny format
- Linijka nie musi kończyć się znacznym tyknięciem
- Lista interwałów może być pusta
- Zerowy pask zawsze znajduje się we wszystkich przedziałach.
- Możesz założyć długość linijki, a odstępy zawsze będą dodatnimi liczbami całkowitymi mniejszymi niż 120
- Końcowe białe znaki są w porządku, ale nie ma wiodących białych znaków.
- Wszelkie spacje o stałej-pojedynczej szerokości są dozwolone jako spacje, jeśli z jakiegoś powodu chcesz użyć czegoś innego niż spacje ASCII.
Wesołego golfa!
Odpowiedzi:
JavaScript (Node.js) , 123 bajty
Wypróbuj online!
Użyj tej funkcji jako
f(20)([5, 2])
.Dzięki Arnauld, oszczędza 4 bajty.
źródło
Perl 6 ,
130 122 10292 bajty-10 bajtów dzięki nwellnhof!
Wypróbuj online!
Ach tak, znacznie krótszy niż moja poprzednia metoda. Jest to anonimowy blok kodu, który zwraca listę wierszy.
Wyjaśnienie:
źródło
Dyalog APL,
66645852 bajtówWypróbuj online!
¯2¯8¯14 bajtów dzięki ngn !źródło
∊'┌'(1↓⍵⍴'┬')'┐'
->'┌┬┐'/⍨2⍵2-1
+⌿0=(×\⍺)∘.|⍳1+⍵
->⊥¨⍨0=(⍵+1)⍴⍳⌽⍺
. akceptowanie⍺
w odwrotnej kolejności jest teraz wyraźnie dozwolone , więc możesz również usunąć⌽
('┌┬┐'/⍨2⍵2-1)
->'┌┬┐'[2,⍨×⍳⍵]
('┌┬┐'/⍨2⍵2-1)⍪⍉
->'┌┐'@0⍵@0⍉'┬',
Python 3 ,
173172 bajtyWypróbuj online!
źródło
05AB1E , 51 bajtów
Nie jestem zbyt zadowolony z tego,
I¯Qiεõ}}
jak można obejść puste listy danych wejściowych .. I na pewno można grać w golfa w niektórych innych częściach ..UWAGA: Używa skompresowanych liczb całkowitych przekonwertowanych na wymagane znaki, ponieważ bezpośrednie użycie wymaganych znaków oznacza, że będę musiał policzyć cały program w UTF-8, zwiększając go zbyt mocno dla wszystkich wbudowanych znaków 05AB1E.
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (rozdział Jak skompresować duże liczby całkowite? ), Aby zrozumieć, dlaczego
•5·W4•
jest94749589
i•áΣ=Yô•
jest948495169488
.źródło
×S
może byćи
sиS
działa, ale niestety jest to bajt dłuższy niż krótszy. To dlatego, że liczby całkowite są najpierw na stosie, a łańcuchy po nim. Z×
nim nie ma znaczenia, czy jest toint,string
albostring,int
, aleи
oczekujestring,int
.и
! Będzie dobrze wiedzieć w przyszłości, nie widziałem, żeby była używana przed jedną z twoich pozostałych odpowiedzi.Węgiel drzewny , 50 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Znaki rysujące w ramce mają 3-bajtową reprezentację w grafice, więc powyższy ciąg ma tylko 40 znaków. Wyjaśnienie:
Oblicz skumulowany iloczyn przedziałów.
Wydrukuj pierwszy rząd znaczników. Lewy i prawy znak są niewłaściwe, ponieważ wynik jest odzwierciedlany później.
Obliczyć liczbę interwałów, które są współczynnikiem każdego znaku podziałki. Wygeneruj ciąg
│
s o połowie tej długości i dodaj╵
dla nieparzystych długości. Wydrukuj każdy ciąg w dół z kolejnymi ciągami w poprzednich kolumnach, tj. W odwrotnej kolejności.Odzwierciedlaj wszystko, aby ustawić linijkę w kolejności od lewej do prawej.
źródło
Płótno ,
424140 bajtówWypróbuj tutaj! ( z czcionką, która monososiuje wynik )
źródło
Emacs Lisp , 303 bajty
Użyj tej funkcji jako
(f '(30 (5 2)))
.Wersja lepiej czytelna:
źródło
Galaretka ,
4241 bajtówPełny program.
Wypróbuj online!
Lub zobacz pakiet testowy
Uwaga: ten kod został zmieniony z pełnego programu -
ñ
(następny link jako diada) został zastąpiony przez1ŀ
(link o indeksie 1 jako diada), aby umożliwić wielokrotne wywoływanie go przez stopkę .W jaki sposób?
źródło
Rubin , 126 bajtów
Wypróbuj online!
Wygląda to dość gadatliwie
each_slice
rzeczami, ale na razie to zrobi, chyba że uda mi się znaleźć bardziej golfistę.Pobiera dane
l
dotyczące długości ii
przedziałów, zwraca tablicę ciągów.źródło
R ,
175170 bajtówWypróbuj online!
Pobiera puste interwały jako
0
, zwraca macierz znaków. Łącze TIO wyświetla wydruk całkiem ładnie.źródło
Haskell ,
167164149 bajtówWypróbuj online! Lekko golfa inne podejście przez Οurous .
Wypróbuj online! Nadal istnieją pewne zwolnienia, które wyglądają, jakby można je wykorzystać, ale jak dotąd wytrzymywały wszystkie dalsze próby gry w golfa.
Poprzednie 167 bajtowe rozwiązanie jest takie samo oprócz obsługi nowej linii i prawdopodobnie jest nieco lepiej czytelne:
Wypróbuj online!
źródło
PowerShell , 152 bajty
Wypróbuj online!
Rozwinięty:
źródło
C # (interaktywny kompilator Visual C #) , 204 bajty
Wypróbuj online!
Wyjście, ale utknie w nieskończonej pętli.
źródło
Czysty ,
221201195162 bajtówWypróbuj online!
Zwraca listę list znaków UTF-8 (jako ciągi znaków, ponieważ Clean nie ma wrodzonej obsługi UTF-8).
Działa, generując pierwszą linię, a następnie biorąc iloczyn prefiksów listy podanych w grupach po dwa i sprawdza, który znak rysować, na podstawie tego, czy produkt dzieli bieżącą pozycję znaku.
Nie golfowany:
źródło