Wprowadzenie
Myślę, że wszyscy zgadzają się, że ładne zdjęcia muszą mieć ładną ramkę. Ale większość wyzwań na tej stronie dotyczących ASCII-Art chce tylko surowego obrazu i nie dba o jego zachowanie.
Czy nie byłoby miło, gdybyśmy mieli program, który pobiera trochę ASCII-Art i otacza go ładną ramką?
Wyzwanie
Napisz program, który pobiera trochę ASCII-Art jako dane wejściowe i generuje go w ładnej ramce.
Przykład:
***** *** * *** *****
staje się
╔═══════╗ ║ ***** ║ ║ *** ║ ║ * ║ ║ *** ║ ║ ***** ║ ╚═══════╝
- Musisz użyć dokładnie takich samych znaków dla ramki jak w przykładzie:
═ ║ ╔ ╗ ╚ ╝
- Góra i dół ramki są wstawiane przed pierwszym i po ostatnim wierszu danych wejściowych.
- Lewa i prawa część ramki muszą mieć dokładnie jedną dopełnienie spacji do najszerszej linii wejścia.
- Na wydruku mogą nie znajdować się początkowe ani końcowe białe spacje. Dozwolony jest tylko końcowy znak nowej linii.
- Możesz założyć, że dane wejściowe nie zawierają niepotrzebnych początkowych białych znaków.
- Możesz założyć, że wejście nie ma końcowych białych znaków w żadnym wierszu.
- Nie musisz obsługiwać pustych danych wejściowych.
- Dane wejściowe będą zawierać tylko drukowalne znaki ASCII i znaki nowej linii.
Zasady
- Dozwolona funkcja lub pełny program.
- Domyślne reguły wejścia / wyjścia.
- Obowiązują standardowe luki .
- To jest golf golfowy , więc wygrywa najmniej bajtów. Tiebreaker to wcześniejsze zgłoszenie.
Happy Coding!
Korzystając ze wspaniałej grafiki ASCII, która została stworzona w dowolnym wyzwaniu na tej stronie, zachęca się do wprowadzania danych do programu i wyświetlania go w ładnej ramce!
#
cztery razy. Dostosowanie takiego podejścia tutaj będzie co najwyżej trudne , aw najgorszym przypadku nie.)Odpowiedzi:
CJam, 45 znaków / 52 bajty
Próba uniknięcia tych drogich 3-bajtowych znaków była ... interesująca.
Wypróbuj online
Wyjaśnienie
źródło
Haskell, 139 bajtów
Jako przykład wrabiam bałwana „12333321” .
Jak to działa:
źródło
JavaScript (ES6), 138 bajtów
Jest to 138 bajtów w kodowaniu IBM866, które w chwili pisania jest nadal obsługiwane w Firefox, ale 152 w UTF-8.
źródło
Bash,
173171150148147 bajtów,157136134133 znakówMultiline:
Przykładowe wykonanie:
Przykład uruchomienia ze skryptu:
źródło
...?${#2}+2:n))
zamiast tego+1
upuścisz 2 spacje iprintf -v z %${n}s;
zamiastprintf -v z " %*.s" $n
.AWK, 159 bajtów
Najwyraźniej
awk
może wydrukować Unicode, jeśli możesz dowiedzieć się, jak go wprowadzić do kodu.źródło
Perl, 111 znaków
(wynik obejmuje +5 za flagi tłumacza)
Najpierw znajdujemy najdłuższą długość linii
$n
, sortując numerycznie długości wszystkich linii.Ustawiamy
$l
się jako pasek nagłówka / stopki, który będzie$n
powtórzeniem znaku poziomej ramki.Następnie drukujemy każdą linię sformatowaną do wyrównania do lewej w polu szerokości
$n
, umieszczonym pomiędzy znakami ramki.Wynik:
źródło
Pyth, 44 znaki (58 bajtów)
Wyjaśnienie
Wypróbuj tutaj.
źródło
PHP 5.3, 209 bajtów
Działa to tylko przy użyciu kodowania OEM 860 . Jest to rozszerzony nadzbiór ASCII, używany w portugalskich wersjach DOS. Ponieważ jestem Portugalczykiem (i lubiłem robić te „ramki” w Pascalu), a to jest standardowe kodowanie, zacząłem z tym:
Oto base64:
Ta odpowiedź była oparta na mojej odpowiedzi na: https://codegolf.stackexchange.com/a/57883/14732 (ciężkie podnoszenie zostało tam wykonane, wystarczyło trochę drgnąć).
źródło
22+58+11+5+11+24+66+12=209
Ostatnie 12 to znaki nowego wiersza, a jako DOS oznacza CRLF, czyli dwa bajty na znak nowego wiersza. Witryna charactercountonline nie liczy nowych linii. Każdy z glifów spoza ASCII ma 1 bajt w OEM 860.\n
język\r\n
, podczas otwierania pliku ASCII / trybie tekstowym.Python 3, 119 bajtów
126 bajtówWkład:Wydajność:
źródło
print"╔"+h+"╗\n"+"".join(o)+"╚"+h+"╝"
.def f(x):
n='\n';s="║ ";e=" ║";h=(x.find(n)+2)*"═";return"╔"+h+"╗"+n+s+x.replace(n,e+n+s)+e+n+"╚"+h+"╝"
<s>...</s>
). Możesz także dodać<!-- language-all: lang-python -->
przed swoim blokiem kodu, aby dodać podświetlanie składni do swojego kodu.Python 2, 115 bajtów
Wygląda tutaj na mniej niż 115, ale plik roboczy zawiera 3-bajtową sygnaturę BOM UTF-8, co powoduje wzrost do 115 bajtów. Jeśli miałbyś uruchomić go w Pythonie 3, nie potrzebowałbyś BOM i spadłby do 112 bajtów.
źródło
sed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' codeGolf.py
C, 290 bajtów
Funkcja gry w golfa
B
, z zależnościami; przyjmuje dane jako znak zakończony znakiem null *Nieco niepoznana funkcja w pełnym programie
wkład
wydajność
Doceniamy wskazówki C do gry w golfa!
źródło