Wyzwanie
Biorąc pod uwagę prostokątną siatkę drukowanych znaków ascii jako ciąg znaków lub standardowe wejście, napisz funkcję lub program, który zwinie znaki spacji w stos na dole.
Zasady:
- Dane wyjściowe mają takie same wymiary i znaki jak dane wejściowe.
- Ma charakteru miejsca na
(row a,column b)
nie mogą mieć znak spacji' '
na(a-1, b)
,(a-1,b-1)
lub(a-1,b+1)
, w którym wiersze są numerowane od dołu skrajnej. Powoduje to, że wszystkie stosy pionowe powinny zwinąć się na boki. - Postać niebędąca spacją może podróżować w większości
(initial height - final height)
miejsc w lewo lub w prawo (patrz ryc. 1). - Możesz założyć, że obraz ma wystarczająco dużo miejsca, aby zwinąć się bez znaków wypadających z ekranu.
Ryc. 1: możliwe końcowe lokalizacje dla postaci @#$
pokazanych x,y,z
odpowiednio jako.
..............
...@..........
..xxx.........
.xxxxx...#....
xxxxxxx.yyy.$.
Kolejność zwijania się postaci można dowolnie wybierać. Końcowe spacje nie są w porządku, ale końcowe znaki nowej linii są.
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach!
Przykład
(__)
(oo)
/------\/
/ | ||
* /\---/\
~~ ~~
..."Have you mooed today?"...
Jedno możliwe wyjście:
--(_
/----|/|(o_)
/|/~\---~\\/o)
..."Have*you~mooed~today?"...
Odpowiedzi:
JavaScript (ES6),
1009088 bajtówWymaga, aby ciąg miał co najmniej dwie linie i wszystkie linie były dopełniane do równej długości. Dane wyjściowe dla przykładowego obrazu:
Zauważ, że gdy próbuje przesunąć elementy w prawo, jeśli to możliwe,
*
nie mieści się międzyHave
iyou
.Edycja: Oszczędność 10% dzięki produktom @ETH. Zaoszczędź kolejne 2 bajty dzięki @DanielIndie.
Retina 0.8.2 , 50 bajtów
Wypróbuj online! Nieco inne podejście do mojej odpowiedzi JavaScript, ta grupa równoważąca dopasowuje spację poniżej znaku spacji;
(?<-1>)?
pozwala przestrzeń za jedną kolumnę w lewo, podczas gdy.?
pozwala przestrzeń za jedną kolumnę w prawo.Siatkówka , 40 bajtów
Wypróbuj online! Port mojej odpowiedzi JavaScript. Stopień
0L$
atomowy pobiera dane wejściowe i zastępuje dwie długości w drugim wierszu, co powoduje polecenie, które faktycznie wykonuje zamianę, która jest następnie oceniana na pierwotnym wejściu przez stopień~
złożony.źródło
\n
dosłownie nową linią, aby sprowadzić ją do dwóch cyfr ;-)l=s.search`\n`
zaoszczędzić kilka bajtów.f=
Jest wymagany do rekurencji, ale wciąż oszczędza mi 2 bajty, dzięki!Python 2, 298 bajtów
Pobiera dane wejściowe jako listę ciągów znaków (po jednym w wierszu)
Przykład: dane wejściowe:
Wynik:
źródło
C, 252 bajtów
Nie testowany kod testu:
Wynik testu:
źródło
Algodoo (niekonkurujący)
Dane wejściowe - zastosowano zdegenerowany przykład.
Runnning - domyślna grawitacja i odbijanie.
Wyjście - dokładność można regulować za pomocą ustawień tarcia i gęstości na obiektach.
Algodoo jest programowalną logiką .
źródło
JavaScript, 286 bajtów
Przykłady
Wynik:
Inny przykład:
Wynik:
Funkcja bez golfa
źródło
c>" "
, gdziec
symbolizuje postać jest testowane.