Biorąc pod uwagę taki tekst:
# #### ## #
## # ## #
#### ##
Wyprowadzaj ten sam tekst, ale łącząc piksele ze znakami ─│┌┐└┘├┤┬┴┼
. Jeśli piksel nie ma sąsiadów, nie zmieniaj go.
Zatem wynik ostatniego tekstu to:
│ ─┬── ┌─ │
└─ │ ┌┘ │
└──┘ ─┘
- Możesz wziąć dane wejściowe jako tablicę boolowską.
- Dane wejściowe zawsze będą zawierać co najmniej 1 piksel.
- Znaki rysowania w ramkach można liczyć jako 1 bajt.
- Możesz założyć, że dane wejściowe są wypełnione spacjami.
Przypadki testowe
## #
=>
── #
###
#
=>
─┬─
│
##### ##
# # #
########
=>
─┬─┬─ ┌─
│ │ │
─┴─┴──┴─
# #
#####
# #
=>
│ │
─┼─┼─
│ │
# # # # #
# # # #
# # # # #
# # # #
# # # # #
=>
# # # # #
# # # #
# # # # #
# # # #
# # # # #
#####
#####
#####
#####
#####
=>
┌┬┬┬┐
├┼┼┼┤
├┼┼┼┤
├┼┼┼┤
└┴┴┴┘
Ponieważ jest to gra w golfa , wygrywa najkrótszy kod.
-|r7LJE3TW+
jest odpowiednim 1-bajtowym zamiennikiem znaków blokowych.Odpowiedzi:
Galaretka ,
605251504948 bajtówZapisano bajt dzięki @ Dennis.
Dane wejściowe to tablica boolowska z 1 i 0. Iteruje się nad każdą kolumną i każdym rzędem konwertując głowę i ogon każdego przyrostka o rozmiarze 3 z pary cyfr dwójkowych na dziesiętne i mnoży to przez środek każdego przyrostka. Następnie sumuje się ze sobą, aby znaleźć indeks
'#───│┌┐┬│└┘┴│├┤┼ '
.Wypróbuj online! ( przypadek 2 ) ( przypadek 3 ) ( przypadek 4 )
Wyjaśnienie
To opiera się na tym samym pomyśle, co moja odpowiedź w J, ale zamiast przetwarzać na każdej podtablicy 3x3, przetwarzam każdy wiersz i każdą kolumnę, wciąż uzyskując tę samą tabelę indeksów.
Ponad połowa bajtów jest wydawana na generowanie listy znaków w polu
'#───│┌┐┬│└┘┴│├┤┼ '
. Literały łańcuchowe zaczynają się od“
w galarecie i mają różne znaczenia w zależności od terminatora. Terminator’
oznacza tutaj, że ciąg zostanie przeanalizowany jako punkty kodowe każdego znaku zgodnie ze stroną kodową Jelly i zostanie przekonwertowany z listy bazowych 250 cyfr na dziesiętne.Następnie przekonwertuj ten ułamek dziesiętny na listę cyfr w bazie bijective 61 i zwiększaj każdy o 9471, aby przenieść go do zakresu znaków w polu i przekonwertuj każdą za pomocą Pythona
chr
. Następnie”#
dodaj literał znaku i dodaj spację⁶
.źródło
J ,
827266 bajtówDane wejściowe to tablica boolowska z 1 i 0. Reguły stanowią, że każdy znak pola liczy się jako jeden bajt, a nie trzy, i że zastosowano go tutaj.
Stosowanie
Wyjaśnienie
Najpierw wejście jest wypełnione zerami ze wszystkich stron.
Następnie wybierana jest każda podtablica o rozmiarze 3
Następnie brane jest pod uwagę tylko 5 wartości w każdej podtablicy
Wartości
ABCD
są wybierane przez spłaszczenie każdej podtablicy i wybranie według indeksów1 7 3 5
. Wartości te są mnożone przezE
indeks 4. Następnie jest konwertowany z listy cyfr binarnych na dziesiętny i zwiększany oE
. Tex
nie są potrzebne wartości.Służy to jako wskaźnik do wyboru, którą postać narysować zgodnie z poniższą tabelą (nieco zmieniono nieco w golfa). Ostatnia kolumna dopasowuje wartość wyjściową każdej podtablicy do znaku ramki.
Ponadto w J ciąg znaków
' #───│┌┐┬│└┘┴│├┤┼'
używa 8-bitowych znaków, dzięki czemu ma długość 47 (na każdy bajt) na 17 potrzebnych znaków. Polecenieucp
konwertuje go na znaki 16-bitowe, co pozwala na długość 17.źródło
JavaScript (ES6),
155121103102 znakówEdycja: zapisano 18 bajtów za pomocą ETHproductions
Edycja: zapisano 1 bajt przy użyciu pierwszego parametru replace () jako
'#'
Jak to działa
Iterujemy wszystkie
#
znaki znalezione w ciągu wejściowym. Dla każdego z nich sprawdzamy, czy jego sąsiedzi są również#
znakami za pomocąt()
funkcji:Parametr
x
zt()
funkcji jest przesunięcie sąsiada w stosunku do aktualnej pozycjip
. Korzystamy z -1 / + 1 do testu w lewo / w prawo sąsiadów i -w / + W górę / sąsiadów dole (w
to szerokość rzędu, to znaczy położenia pierwszego końca linii + 1).Każdy sąsiad ma przypisaną inną wagę (1, 2, 4 lub 8) zgodnie z następującym kompasem:
Każda kombinacja wagi prowadzi do unikalnej wartości w [0 .. 15]. Na przykład, jeśli zarówno sąsiad u góry, jak i sąsiad po prawej stronie są ustawione, suma będzie wynosić 1 + 4 = 5, co przekłada się na
└
użycie poniższej tabeli:Dlatego
'#│─┘─└─┴││┐┤┌├┬┼'[weight_sum]
prowadzi do oczekiwanego charakteru.źródło
s=>(w=s[0].length+1,s=s.join`\n`).replace(/#/g,(_,p)=>'#│─┘─└─┴││┐┤┌├┬┼'[t=x=>s[p+x]>' ',t(-w)+2*t(-1)+4*t(1)+8*t(w)])
s=>s.replace(/#/g,(_,p)=>'#│─┘─└─┴││┐┤┌├┬┼'[t=x=>s[p+x]>' ',t(-w)+2*t(-1)+4*t(1)+8*t(w)],w=s.indexOf`\n`+1)
Python 2.7,
318315 bajtów (270267 znaków)Jestem pewien, że można to jeszcze pograć w golfa (szczególnie chciałbym pozbyć się tego irytującego komentarza z pierwszej linii), ale oto mój wpis:
Oto wyjaśnienie, jak to wszystko działa:
EDYCJA: Usunięto wcześniej niektóre spacje
for ... in ...
źródło
JavaScript (ES6),
150139133131 znakówPobiera dane wejściowe jako tablicę ciągów, np
f(["###", " # "])
.Testowy fragment kodu
Pokaż fragment kodu
źródło
ALPACA , 414 + 2 = 416 bajtów
Wymaga
-fI
flag.To rozwiązanie wykorzystuje bardzo dużą liczbę bajtów, ale jest wyjątkowe, ponieważ wykorzystuje automat komórkowy. ALPACA jest zwykle używany jako język języka, ale tutaj używam go jako języka programowania.
Wersja bez golfa:
źródło
PHP, 203 bajty
Można to prawdopodobnie zrobić w krótszy sposób.
odczytuje dane wejściowe ze STDIN. biegać z
-r
.źródło
Python 3, 149 bajtów
Pobiera dane wejściowe podobne
##\n #\n
i zwraca dane wyjściowe podobne['─', '┐', '\n', ' ', '│', '\n']
.źródło
R,
199212 bajtówEDYCJA: Teraz jest to funkcja, a nie fragment kodu.
Dane wejściowe to macierz
m
1s i 0s. To jest dość brzydkie i zuchwałe.Kilka testów:
źródło
x = "┼"
działa dobrze dla mnie.Perl,
8988 bajtówObejmuje +2 za
-0p
. Znaki specjalne są liczone jako 1 bajt, ale aby faktycznie były wyświetlane jako pojedyncze znaki, najlepiej również dodać opcję -C.Podaj dane na STDIN z wypełnionymi spacjami wierszami, aby wszystkie miały tę samą długość:
connect.pl
:źródło
MATL, 102 znaki
Przypisuję sąsiadowi wartość (1, 2, 4 lub 8); ich suma będzie pasować do znaku w ciągu zawierającym znaki rysunkowe. Myślę, że wciąż jest dużo miejsca na ulepszenia, ale na przybliżony szkic:
Ulepszenia, które należy wprowadzić:
Wypróbuj online! (może nie obsługiwać znaków rysunkowych)
źródło