Ogród programisty
Będąc profesjonalnym programistą, nie możesz ryzykować wystawienia się na surowe, nie sztuczne światło słoneczne, ale masz również słabość do kwiatów i chcesz utrzymać ogród w dobrej formie przez cały rok.
W tym celu co miesiąc wynajmowany jest ogrodnik, aby uporządkować kwietnik u podnóża domu. Musisz jednak upewnić się, że ogrodnik prawidłowo wykonuje swoją pracę, i wypracować odpowiednią zapłatę dla ciężko pracującego faceta. Oczywiście najlepsze jest oprogramowanie.
Wejście
Twój program otrzyma dane wejściowe opisujące kwietnik, gdy wydaje się aktualny, oraz szczegóły dotyczące elementów, które należy usunąć. Program musi wydrukować ogród bez bałaganu i wydrukować zestawienie wynagrodzenia ogrodników. Dane wejściowe mogą pochodzić z STDIN lub jako pojedynczy argument wiersza poleceń.
Pierwszy wiersz wprowadzania ma format
width height unwanted_item_type_count
gdzie width
jest szerokość klombu, height
to wysokość klombu (oba w znakach ASCII) i unwanted_item_type_count
informuje, ile kolejnych wierszy będzie zawierać opis rodzaju przedmiotu, który należy usunąć z ogrodu.
Każdy wiersz dla każdego niepożądanego typu elementu ma format
width height string_representation name fee_per_item
gdzie width
jest szerokość elementu, height
jest wysokością elementu (oba w znakach ASCII), string_representation
jest ciągiem znaków elementu bez podziałów linii, name
jest identyfikatorem typu elementu (spacje zostaną zastąpione podkreśleniami), oraz fee_per_item
to, ile ogrodnik musi zapłacić za usunięcie każdego rodzaju przedmiotu.
Na przykład
3 2 .R.\|/ rouge_flower 3
Reprezentuje nazwę typu elementu rouge_flower
, którego usunięcie kosztuje 3, i wygląda następująco:
.R.
\|/
Elementy nie będą zawierać spacji, a żaden element nie może mieć obramowania składającego się wyłącznie z kropek, a reprezentacja ciągu będzie miała dokładnie opisany rozmiar. W związku z tym wszystkie poniższe dane są nieprawidłowe:
3 1 ( ) space 0
1 1 . dot 0
2 1 .! bang 0
3 2 .@.\|/. plant 0
Należy pamiętać, że 0 jest jednak ważną opłatą (opłaty będą zawsze liczbami całkowitymi większymi niż -1).
Zauważ również, że kwietnik składa się głównie z kropek ( .
), a nie spacji, i możesz bezpiecznie używać białych znaków jako ograniczenia dla wszystkich danych wejściowych. Kwietnik jest zawsze ograniczony samymi kropkami.
Po wyświetleniu niepożądanych typów elementów pojawia się reprezentacja klombu ASCII o danej szerokości i wysokości.
Wynik
Dane wyjściowe powinny być do STDOUT lub odpowiedniej alternatywy, jeśli twój język nie obsługuje tego.
Wyjście zaczyna się od wydruku klombu, ale ze wszystkimi niechcianymi przedmiotami usuniętymi (zastąpionymi kropkami), więc możesz zobaczyć, jak powinien wyglądać i sprawdzić, czy ogrodnik wykonał swoją pracę. Każdy element w kwietniku będzie otoczony prostokątem kropek i będzie elementem jednokierunkowym (tzn. Wewnątrz elementu nie będzie żadnych oddzielających kropek ). Na przykład
.....
.#.#.
.....
pokazuje 2 oddzielne pozycje
.....
.\@/.
.....
pokazuje 1 pozycję
......
.#....
....|.
....|.
.o--/.
......
jest nieważny, ponieważ podczas gdy kamień (#) można dopasować, wąż (nie mogłeś powiedzieć, że to był wąż?) nie może, ponieważ kamień zakłóca wymagane otoczenie kropek.
...
\@.
...
Jest to również nieprawidłowe, ponieważ ślimak znajduje się na krawędzi klombu, a krawędź musi zawsze być otoczona kropkami we właściwym wejściu.
Następnie powinna zostać wyświetlona lista każdego rodzaju niechcianego elementu, podając liczbę, koszt jednej pozycji i koszty wszystkich pozycji (liczba * koszt jednej pozycji), w formacie:
<count> <name> at <cost_per_item> costs <cost>
Następnie powinna pojawić się pojedyncza linia, w której uzyskany zostanie całkowity koszt (suma kosztów niepożądanych przedmiotów):
total cost <total_cost>
Przykład
Dla tego podanego wejścia
25 18 3
4 2 .\/.\\// weeds 5
2 1 \@ snails 2
1 1 # stones 1
.........................
.\@/.................\@..
............\/...........
......O....\\//..^|^.....
.#...\|/.........^|^.....
..................|......
.................\|/.....
..\@.....\/...........#..
........\\//....#........
....*....................
...\|/......\/......\@/..
...........\\//..........
..................*......
.......\@/.......\|/.....
...O.....................
..\|/.......*............
.......#...\|/....\@.....
.........................
Program powinien wygenerować ten wynik
.........................
.\@/.....................
.........................
......O..........^|^.....
.....\|/.........^|^.....
..................|......
.................\|/.....
.........................
.........................
....*....................
...\|/..............\@/..
.........................
..................*......
.......\@/.......\|/.....
...O.....................
..\|/.......*............
...........\|/...........
.........................
3 weeds at 5 costs 15
3 snails at 2 costs 6
4 stones at 1 costs 4
total cost 25
Wyjście musi być zakończone przez przerwanie linii.
To jest gra w golfa, może wygrać najkrótszy kod.
Dodatkowa walizka testowa
Edycja: zawierało Unicode, co nie jest dozwolone w kwietniku, jest zbyt nowoczesne. Przykro nam z tego powodu.
25 15 5
5 3 ..@..\\|//.\|/. overgrown_plants 3
5 3 @-o....|...\|/. semi-articulated_plant 4
3 2 .|.\@/ mutant_plants 5
1 1 $ dollars 0
1 1 # stones 1
.........................
........@................
....$..\|/...........@...
............|.......\|/..
...#.......\@/...........
.........................
.........................
......@.......@......@...
.....\|/....\\|//...\|/..
.............\|/.........
.#....................#..
.........$.......|.......
...\/.......\/..\@/..\/..
..\\//.....\\//.....\\//.
.........................
Oczekiwany wynik:
.........................
........@................
.......\|/...........@...
....................\|/..
.........................
.........................
.........................
......@..............@...
.....\|/............\|/..
.........................
.........................
.........................
...\/.......\/.......\/..
..\\//.....\\//.....\\//.
.........................
1 overgrown_plants at 3 costs 3
0 semi-articulated_plants at 4 costs 0
2 mutant_plants at 5 costs 10
2 dollars at 0 costs 0
3 stones at 1 costs 3
total cost 16
\@
i@/
na przykład ... Czy są zobowiązani wiecznie wskazywać na zachód?Odpowiedzi:
Perl - 636
Jest zdecydowanie więcej golfa, które można zrobić. I prawdopodobnie także lepsze sposoby, aby to zrobić.
635 znaków + 1 dla
-C
flagi do obsługi euro.Jeśli masz zapisane dane wejściowe,
input.txt
możesz je uruchomić za pomocą:Oto wyodrębniona wersja. Przeszedłem i dodałem kilka komentarzy, które pomogą wyjaśnić różne rzeczy. Może kiedyś zmienię nazwy zmiennych na bardziej czytelne. Mogą istnieć pewne przypadki krawędzi, z którymi to nie działa, ale działa przynajmniej z przykładami.
Możesz zaproponować ulepszenia!
źródło
-C
flagi. I tak zostawię to, żeby było kompatybilne, ponieważ jest to tylko 1 znak różnicy.Python 3, 459 bajtów
Zakłada, że dane wejściowe zostaną podane jako lista ciągów znaków.
źródło
~H
podstęp; Nie mogę tego teraz przetestować, ale spróbuję to zrobić dzisiaj.ValueError: not enough values to unpack (expected 3, got 1)
, python 3.6.6); czy możesz podać link do TIO lub opis, jak go uruchomić. Myślę, że może to być naginanie reguł, zakładając, że dane wejściowe są w jednym wierszu, ale nie byłem do końca jasny w tym pytaniu, więc nie będę narzekać.