Napisz program, który pobiera prostokątny blok tekstu złożonego z X
„i .
”, na przykład A
:
......
..XX..
.X..X.
.XXXX.
.X..X.
.X..X.
Wyjście reprezentacji tej siatki obróconej o 45 stopni w kierunku przeciwnym do ruchu wskazówek zegara poprzez narysowanie ukośnika - do przodu lub do tyłu w zależności od kontekstu - wszędzie na X
granicy a .
lub boku siatki (ze spacjami wypełniającymi resztę):
/\/\
/ /\ \
\/ / \
/\/ /\ \
\ / \/
\ \
\ \
\/
Liczba końcowych i wiodących spacji (i nowych linii) nie ma znaczenia, dopóki kształt X
liter na wejściu jest utrzymywany przez ukośniki. Można przycinać dodatkowe wiersze lub kolumny .
.
Do We / Wy możesz użyć dowolnej kombinacji parametrów stdin / stdout / files / wiersza poleceń. Na przykład skrypt może przyjąć nazwę pliku X.
wzoru i przepisać plik ukośnikiem. Albo twój skrypt może pobierać X.
wzorzec od standardowej linii po linii (naciskając d
po zakończeniu) i wyświetlać wynik na standardowej linii .
Dane wejściowe mogą być dowolnie duże, ale można założyć, że są zawsze dobrze sformatowane.
Żadne znaki oprócz / \
i znaki nowej linii nie powinny znajdować się w wynikach.
Punktacja
Najkrótszy kod w bajtach wygrywa. Użyj https://mothereff.in/byte-counter jako licznika bajtów, jeśli używasz znaków spoza ASCII.
Bonus: Minus 50 bajtów, jeśli możesz zmienić (zamienić, nie usunąć) jeden znak w swoim programie, dzięki czemu siatka ukośnika zostanie obrócona o 45 stopni zgodnie z ruchem wskazówek zegara , np .:
/\/\
/ /\ \
/ \ \/
/ /\ \/\
\/ \ /
/ /
/ /
\/
Próbki wejściowe
XXXXXXXXX
X.......X
X.XXXXX.X
X.X...X.X
X.X.X.X.X
X.X...X.X
X.XXXXX.X
X.......X
XXXXXXXXX
XXX...XXX....XXX...XXX
X..X..X..X..X.....X...
XXX...XXX...X.....X.XX
X.....X.....X.....X..X
X.....X......XXX...XXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...X
X...X...............X...............X...........X...................X...X
X...X...XXXXXXXXX...X...XXXXX...XXXXXXXXX...XXXXX...XXXXX...XXXXX...X...X
X...............X.......X...X...........X...........X...X...X.......X...X
XXXXXXXXX...X...XXXXXXXXX...XXXXXXXXX...XXXXX...X...X...X...XXXXXXXXX...X
X.......X...X...............X...........X...X...X...X...X...........X...X
X...X...XXXXXXXXXXXXX...X...X...XXXXXXXXX...XXXXX...X...XXXXXXXXX...X...X
X...X...............X...X...X.......X...........X...........X.......X...X
X...XXXXXXXXXXXXX...XXXXX...XXXXX...X...XXXXX...XXXXXXXXX...X...XXXXX...X
X...........X.......X...X.......X...X.......X...........X...X...........X
X...XXXXX...XXXXX...X...XXXXX...X...XXXXXXXXX...X...X...X...XXXXXXXXXXXXX
X.......X.......X...X...X.......X.......X.......X...X...X.......X.......X
XXXXXXXXXXXXX...X...X...X...XXXXXXXXX...X...XXXXX...X...XXXXX...XXXXX...X
X...........X...X...........X.......X...X.......X...X.......X...........X
X...XXXXX...X...XXXXXXXXX...XXXXX...X...XXXXX...XXXXX...XXXXXXXXXXXXX...X
X...X.......X...........X...........X.......X...X...X...............X...X
X...X...XXXXXXXXX...X...XXXXX...XXXXXXXXX...X...X...XXXXXXXXXXXXX...X...X
X...X...........X...X...X...X...X...........X...............X...X.......X
X...XXXXXXXXX...X...X...X...XXXXX...XXXXXXXXX...XXXXXXXXX...X...XXXXXXXXX
X...X.......X...X...X...........X...........X...X.......X...............X
X...X...XXXXX...XXXXX...XXXXX...XXXXXXXXX...XXXXX...X...XXXXXXXXX...X...X
X...X...................X...........X...............X...............X...X
X...XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
( źródło labiryntu )
Powiązane pytania:
Narysuj krzywą Hilberta za pomocą ukośników
Wyrównaj wyrównany poziomo, prostokątny kształt ASCII wzdłuż przekątnej
Odpowiedzi:
Python 2 -
236, 228, 226, 221, 250, 248246 - 50 = 196Dodałem opcjonalną funkcję bonusową, która zmienia kierunek z zgodnego z ruchem wskazówek zegara na przeciwny. Zasadniczo druga linia po prostu obraca wejście o 90 stopni. Aby przełączać się między obiema opcjami, zamień
s=zip(...)
na coś podobnegoS=zip(...)
(np. Przypisz do zmiennej, która nie będzie ponownie używana).źródło
s
zB
os=B+s+B
.MATLAB - 286-50 = 236
Zminimalizowane:
Rozszerzony:
Kod można dodatkowo zmniejszyć o 6 znaków (w celu powiązania bieżącej potencjalnej szansy) poprzez wyeliminowanie rzutowania na typ
char
, ale powoduje to ostrzeżenie MATLAB i nie byłem pewien, czy było to dozwolone.Można go zmniejszyć o dodatkowe 13 znaków, jeśli dane wejściowe muszą mieć format „zaznaczony”, na przykład
['X..';'.X.';'..X']
, ale nie sądziłem, że było to dozwolone. Obecnie skrypt akceptuje tylko dwie liczby (wymiary wiersza i kolumny), a następnie odczytuje pojedynczy ciąg znaków siatki.Premia
Zmieniając
1
wywołaniex = rot90( ..., 1 );
na a0
, transformacja zmienia się z obrotu w lewo o 45 ° na obrót w lewo o 45 °. W rzeczywistości możliwe są wszystkie możliwe obroty o 45 ° + n · 90 ° poprzez stopniowanie tego parametru od0
do3
.Przykładowe dane wyjściowe:
źródło
Perl - 409
Odczytuje ze standardowego i drukuje na standardowe.
Przykładowe wyniki:
źródło