Biorąc pod uwagę ciąg, który jest potencjalnie zapakowany, przełącz pole. Staje się to wyraźniejsze w przypadkach testowych i wyjaśnieniach.
Wejście wyjście
Format wejściowy
Dane wejściowe będą albo pojedynczym ciągiem oddzielonym CR, LF lub CRLF, albo listą ciągów. Format wejściowy zależy od Ciebie.
Format wyjściowy
Format wyjściowy musi być taki sam jak format wejściowy.
Wyjaśnienie + przykład
Weźmy jako przykład ciąg w pudełku:
+-------------+
|Hello, World!|
+-------------+
Aby przełączyć pole, usuwamy pierwszy i ostatni wiersz oraz pierwszą i ostatnią kolumnę. Możesz założyć, że po ostatnim wierszu nie będzie końcowych białych znaków (z opcjonalnym końcowym znakiem nowej linii na końcu ostatniego wiersza) i że nie będzie żadnych białych znaków końcowych w żadnym wierszu, oczywiście nie licząc nowego wiersza.
Stałoby się to:
Hello, World!
Inna droga
Jeśli ciąg nie znajduje się w polu, dodaj do niego pole. To jest dość proste; dodawaj +---...---+
do własnej linii z k
myślnikami, gdzie k
jest długość najdłuższej linii, a następnie dla każdej linii, dopełniaj ją końcowymi spacjami, aby pasowała do długości najdłuższej linii, a następnie dodawaj i dołączaj znak potoku ( "|"
). Na koniec dodaj wiersz zawierający tę samą +---...---+
konfigurację co pierwszy wiersz.
Na przykład:
Hello, World!
staje się:
+-------------+
|Hello, World!|
+-------------+
Możesz założyć, że żadna z linii wejściowych nie będzie miała spacji końcowych.
Kolejny przykład ciągu, który powinien zawierać pole:
Hello,
World!
staje się
+----------+
|Hello, |
| World!|
+----------+
Przykład czegoś, co wciąż powinno być zapakowane:
+--------+
| |
--------+
staje się:
+----------+
|+--------+|
|| ||
| --------+|
+----------+
Zasady + specyfikacje
- Obowiązują standardowe luki
- Żaden wiersz danych wejściowych nie będzie zawierał początkowych ani końcowych białych znaków zarówno ogólnie, jak i w każdym wierszu, niezależnie od tego, czy został wstawiony
- Pudełka będą miały tylko
+
rogi i|
krawędzie pionowe oraz-
boki poziome. - Pudełko musi mieć swoje plusy, aby mogło być uważane za pudełko; jeśli ma wysokość lub szerokość 2 (to znaczy bez zawartości), nadal powinien być rozpakowany, co spowoduje powstanie wiązki nowych linii, w zależności od wysokości pudełka.
- Jeśli wejście zawiera pole, ale tekst poza polem, całość powinna być zapakowana.
- Twój program musi sprawdzić cały obwód łańcucha. Jeśli pojedynczy znak na zewnątrz jest niepoprawny (brakujący lub inny znak niż powinien), należy go zapakować, a nie rozpakować.
- Sam rozpakowany ciąg może zawierać
+ | -
. Jeśli sam rozpakowany ciąg ma wokół siebie pudełko, zwróć ciąg wraz z pudełkiem; należy go rozpakować tylko raz.
Edge Cases
1: Małe pudełka
Wejście:
++
++
Dane wyjściowe to pusty lub nowy wiersz
Wejście:
+----+
+----+
Dane wyjściowe są puste lub nowy wiersz
Wejście:
++
||
||
++
Wyjście to 2 nowe linie lub 3 nowe linie
2: Częściowe pudełko
Wejście:
+-------+
| Hello |
+ ------+
Wynik:
+---------+
|+-------+|
|| Hello ||
|+ ------+|
+---------+
3: Tekst poza polem
Wejście:
+-------+
a| Hello |
+-------+
Wynik:
+----------+
| +-------+|
|a| Hello ||
| +-------+|
+----------+
Odpowiedzi:
JavaScript (ES2017), 199 bajtów
Naiwne rozwiązanie. Może być najlepszy, zobaczymy ...
źródło
'+--+\n|hi|\n|world|\n+----------+'
. Usuwa linie, nawet jeśli nie są prostokątne.SOGL V0.12 , 72 bajty
Wypróbuj tutaj!
+7 bajtów (
⁰I{_=}¹χ
), ponieważ elementwise jest równe, nie jest zaimplementowany+1 bajt (
▓
), ponieważ nie można zagwarantować, że będzie to kwadrat+1 bajt (
A
), ponieważ jestem leniwy i nie implementuję wpisywanych danych wejściowych (więc oczekuje to danych wejściowych na stosie. łatwość użycia, link online zawiera →, aby można było użyć pola wprowadzania)źródło
⁰I{_=}¹χ
jest +8 bajtów, a nie +7.=
, ale ponieważ to nie działa, zmienia długość o -1 + 8 = +7Galaretka , 46 bajtów
Wypróbuj online!
źródło
Retina ,
197195 bajtówWypróbuj online! Wyjaśnienie:
Ten etap sam w sobie jest dość skomplikowany, więc trochę go podzielę.
+
oznacza, że etap się powtarza, aż nie będzie już można znaleźć zamienników.m`^
oznacza, że etap dopasowuje się na początku dowolnej linii.((.)*)
następnie dopasowuje całą linię. Teraz$1
jest po prostu dopasowana linia, ale$2
jest to lista dopasowań, tj. Znaków.(¶
następnie dopasowuje koniec linii, a tym samym początek następnej linii.(?<-2>.)*
używa grupy równoważącej .NET. W<-2>
Usuwa mecze z$2
tak długo jak znak może być dopasowana w drugiej linii. W tym momencie może się zdarzyć jedna z trzech rzeczy:$2
wciąż zostało kilka dopasowań.$2
nie ma żadnych dopasowań, a my jesteśmy na końcu linii.(?(2)$|(.)))
pomaga odróżnić je za pomocą warunku. Jeśli$2
nadal pozostało kilka dopasowań, musimy to zrobić, ponieważ druga linia jest zbyt krótka, więc dopasowujemy koniec linii, ale jeśli$2
nie ma żadnych dopasowań, chcemy, aby druga linia była dłuższa, więc dopasowujemy postać (która wchodzi$4
, abyśmy wiedzieli, że dopasowanie się stało). W przeciwnym razie dwie linie mają tę samą długość i dopasowanie nie powiedzie się w tym momencie (może się zgadzać ponownie w późniejszej linii).Ciąg zastępujący to
$1$#4$* $3$#2$*
. W$#4
Zwraca1
jeśli dopasowane dodatkowy znak w drugim wierszu,0
czy nie. Oznacza to, że$#4$*
dodaje spację do pierwszego wiersza, jeśli drugi wiersz był dłuższy. Podobnie$#2$*
dodaje spacje do drugiej linii, jeśli pierwsza linia była dłuższa. (W rzeczywistości kończy się to dodaniem dokładnie odpowiedniej liczby spacji. Gdybyśmy tylko balansowali dwie linie, to+
mogłaby zostać dodana do czwartej grupy przechwytywania, aby osiągnąć to bezpośrednio również w przypadku dłuższej drugiej linii.)Konsekwencją tego wszystkiego jest to, że ten etap wypełnia wejście w prostokąt. Możemy teraz narysować wokół niego pudełko.
Umieść
|
s po każdej stronie.Umieść
+-...-+
na górze.I znowu na dole.
Sprawdź, czy stworzyliśmy podwójne pudełko. Jeśli tak, dodatkowe puste linie są dodawane u góry iu dołu, aby pozostałe etapy były dopasowane, aby usunąć oba pola.
Jeśli występuje końcowa pusta linia, usuń dwa znaki na początku i na końcu każdej linii.
Jeśli jest wiodący pusty wiersz, usuń go i następne dwa wiersze (które będą
-
pozostałymi na górze pola). Jeśli występuje końcowa pusta linia, usuń ją i poprzednie dwa wiersze. Na(\G|¶)
dotyczy przypadku, w którym jest tylko sześć linii (a więc 5¶
S), ponieważ nie miał zawartość skrzynki.źródło