Biorąc pod uwagę sześciokąt artystyczny ASCII jako dane wejściowe, wyjmij taki, którego boki są o jedną jednostkę dłuższe.
_____
____ / \
/ \ / \
/ \ / \
\ \ => \ \
\ / \ /
\____/ \ /
\_____/
Sześciokąty wejściowe będą miały symetrię 180 stopni, ale w przeciwnym razie boki mogą mieć różne długości. Powyżej długości boczne (2, 4, 3) zostają powiększone do (3, 5, 4). Długości boków będą niezerowe.
Sześciokąty są wykonane z podkreślników _
, ukośników/
i odwrotnych ukośników \
. Zwróć uwagę, że w przypadku poziomych krawędzi (wykonanych za pomocą podkreślników) górna krawędź znajduje się na własnej linii, ale dolna krawędź nie.
I / O
Mam zamiar zostać kozłem ofiarnym i wymagać sztuki ascii tutaj formatowania : wejście i wyjście powinno być ciągiem znaków z nowymi liniami reprezentującymi obraz, a nie listą linii. Oczywiście, twój kod może wydrukować każdą linię po kolei, aby wygenerować obraz, lub odczytać STDIN linię do wprowadzenia, jeśli twój język to potrafi.
Detale
Dane wejściowe mogą zawierać opcjonalny znak nowej linii, jeśli chcesz, ale w przeciwnym razie nie będą zawierać pustych linii. Możesz wybrać brak spacji na wejściu lub spacje, aby wstawić każdą linię na tej samej długości (długość najdłuższej linii).
Wyjście powinno być wyrównane do lewej krawędzi ekranu, podobnie jak wejście. Możesz mieć dodatkowe znaki nowej linii powyżej i poniżej, a także spacje końcowe.
Przypadki testowe
Wejście, a następnie wyjście.
_
/ \
\_/
__
/ \
/ \
\ /
\__/
____
/ \
/ \
\ \
\ /
\____/
_____
/ \
/ \
/ \
\ \
\ /
\ /
\_____/
_
/ \
/ /
/ /
/ /
/ /
\_/
__
/ \
/ \
/ /
/ /
/ /
/ /
\ /
\__/
Tabela liderów
<iframe src="https://xmikee1.github.io/ppcg-leaderboard/?id=185760" width="100%" height="100%" style="border: none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>
IEnumerable
znaków?Odpowiedzi:
Stax , 28 bajtów
Uruchom i debuguj
Wydaje się, że powinien istnieć sposób, aby to zrobić głównie za pomocą wyrażenia regularnego, ale wciąż szukam ...
źródło
Retina 0.8.2 , 84 bajtów
Wypróbuj online! Działa z nieregularnymi sześciokątami. I / O nie jest wypełnione. Wyjaśnienie:
Poszerz wnętrze sześciokąta.
Napraw górę.
Napraw dno.
źródło
JavaScript (ES6),
159 156 153150 bajtówWypróbuj online!
Skomentował
Uwaga: Poniższe znaki alternatywne są używane poniżej ograniczników wyrażeń regularnych, aby nie dopuścić do szału zakreślacza składni SE.
źródło
Węgiel drzewny , 48 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Wprowadź i połącz wszystkie linie z wyjątkiem pierwszej. (Wprowadzenie danych w formacie JSON sprawiłoby, że większość tego nie byłaby potrzebna przy oszczędności 11 bajtów.)
Policz liczbę
/
s,/
s i_
sznurka i użyj jej do obliczenia nowych długości boków (w przypadku_
s jako ciąg_
s tej długości).Narysuj powiększony sześciokąt.
Alternatywne rozwiązanie, również 48 bajtów:
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Wprowadź wszystkie linie. (Wprowadzanie w formacie JSON sprawiłoby, że nie byłoby to konieczne przy oszczędności 17 bajtów.)
Narysuj osobno prawą górną i lewą dolną sekcję sześciokąta.
Policz liczbę
/
s,/
si_
w ciągu i użyj jej do obliczenia nowych długości boków.Wyprowadzaj górę lub dół i przesuń w dół linii, jeśli była to linia górna.
Narysuj prawą lub lewą stronę.
źródło
APL (Dyalog Unicode) ,
7574 bajtów SBCSWypróbuj online!
'.+'⎕s'&'
podzielić dane wejściowe na linie↑⍵
mieszaj linie w macierz⍺⍳
wymienić' /\_'
z0 1 2 3
(0,0,⍨⍉)⍣3⍉
otaczaj warstwą 0 na górze i dole oraz dwiema warstwami 0 po lewej i prawej stronie{⊃0~⍨1⌷⍵,⍨⍉⍵}⌺3 3
dla każdej komórki wybierz pierwszą niezerową z: górną, dolną, lewą, prawą z sąsiedztwa 3x3 na środku2⌈/
maks. w parach w poziomiea×1=(+⍀×a)⌊⊖+⍀⊖×a←
zachowaj tylko zewnętrzną granicę wartości innych niż 0⍺[
]
wymienić0 1 2 3
z' /\_'
źródło
PowerShell , 126 bajtów
Wypróbuj online!
źródło
Perl 5 ,
177156145 bajtówCzy może być krótszy? Nie wiem jak jeszcze. Z komentarzami i dodanymi nowymi wierszami oraz nagłówkiem i stopką:
Wypróbuj online!
Wiersz nr 1 dzieli wielowierszowy ciąg wejściowy na tablicę @l.
Wiersz nr 2 powiela drugi i ostatni wiersz bez znaków _.
Wiersz nr 3 dodaje spacje w razie potrzeby w wierszu 2 do drugiego na końcu.
Linia nr 4 poszerza dwa boki ___ o jeden _ i zwraca tablicę @l linii jako jeden ciąg wielu linii.
źródło