Obraz mojego szkicowania tego wyzwania z moimi zaawansowanymi umiejętnościami rysowania.
tło
Wojny Stickman miały miejsce dawno temu, kiedy dominujący gatunek Ziemi został zrobiony tylko z patyków. Historycy żałują, że w tamtym czasie nie było malarzy ani aparatów, moglibyśmy użyć zdjęć tej wojny w dzisiejszych książkach historycznych. Właśnie tam przydają się twoje moce kodujące. Stickmenów można bardzo łatwo wyciągnąć, a historykom udało się znaleźć dane o tym, ilu stickmenów stoczyło wojny¹. Teraz musisz odtworzyć obraz z chwili tuż przed wybuchem wojny!
Oto odważni stickmani biorący udział w wojnie:
O / | / | \ / | | / \ Swordsman OA / | \ | | | / \ | Włócznik . . ” *. „O * „\ | /. . | * „./ \ *. Mag O / | \ | / \ Wieśniak O / | \ / \ Dziecko
Wejście
Otrzymuj za pośrednictwem standardowego lub równoważnego przedstawienia każdego stickmana, który pojawił się po każdej stronie pola bitwy. Na przykład, jeśli dwóch Mieczników walczyło po prawej stronie i dwóch włóczników po lewej stronie, twój wkład może być {Sword: 2}, {Spear: 2}
, [2,0,0,0,0], [0,2,0,0,0]
lub a "WW", "SS"
.
Wynik
Reprezentacja każdego odważnego stickmana na polu bitwy, zgodnie z poniższymi zasadami. Może być pokazany na standardowym ekranie lub zapisany w pliku, niezależnie od tego, co kołysze twoją łódź.
Zasady
- Po lewej stronie znajdą się wszystkie stickmeny z pierwszej tablicy / łańcucha / obiektu otrzymanego przez twój program.
- Ci stickmen muszą wyglądać dokładnie tak, jak pokazano wcześniej w tym pytaniu.
- Kolejność lewej armii musi być
Infants Villagers Mages Swordsmen Spearmen
. - Armia po prawej stronie będzie zachowywać się tak samo, ale z postaciami i porządkiem dublowanym.
- Każdy stickman będzie oddzielony 1 spacją.
- Każda klasa będzie oddzielona 3 spacjami.
- Armie zostaną rozdzielone 8 polami.
- Ponieważ stickmen nie lata, musisz narysować ziemię za pomocą minusów
-
. - Ziemia musi kończyć się na tej samej kolumnie, na której kończy się ostatni stickman prawej armii.
Przykład
Załóżmy, że mój program przewiduje dwie tablice o długości 5 i każdą wartość w tablicy reprezentuje w porządku, Infants Villagers Mages Swordsmen Spearmen
.
Dane wejściowe: [1,1,2,3,1] [0,0,1,1,1]
. . . . ” *. . ” *. . * ”. O 'O *' O * O / O / O / OAAO \ O * O ' O / | \ '\ | /. „\ | /. | / | \ / | / | \ / | / | \ / / | \ | | / | \ \ / | \ | . \ | / ” / | \ | . | *. | * | | | | | | | | | | | | * | . / \ / \ './ \ *. „./ \ *. / \ / \ / \ / \ | | / \ / \. * / \ '. -------------------------------------------------- -------------------------------------
Uwagi końcowe
Pamiętaj, że obowiązują standardowe luki i że mag jest całkowicie asymetryczny tylko dlatego.
Rezultatem najbardziej uprzywilejowanej odpowiedzi będzie „okładka” tego wyzwania. Najkrótsza odpowiedź do końca miesiąca (31.08.2014) zostanie wybrana jako zwycięzca.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach.
¹ Potrzebne cytat
źródło
IVMMWWWS SWM
byłaby w granicach „czegokolwiek, co ci pomoże”?Odpowiedzi:
JavaScript (E6) 336
344 356 369 424 478 522 570Edycja 6 Ostatnia edycja była błędna. Naprawiono błąd i skrócono. To wszystko, co mam nadzieję.
Edytuj 5 W końcu znalazłem sposób na pozbycie się pomnożenia przez 23 - od samego początku niepokoiłem się. Plus kolejna zmiana na wejściu (@William krzyknie, gdy będzie za dużo). Teraz funkcja oczekuje jednego parametru tablicy zawierającego 2 podcienie. Bez tej zmiany jest to 349 - wciąż poprawa
Edycja 4 Ogolono trochę więcej bajtów i małą zmianę formatu wejściowego. W nowym formacie wejściowym brakująca klasa jest reprezentowana jako pusty element tablicy. Więc
D([1,,2,3,1],[,3,1,1,2])
zamiastD([1,0,2,3,1],[0,3,1,1,2])
. Myślę, że nadal przestrzega zasad.Edytuj 3 Gra w golfa więcej. Brak zmian w algorytmie, ale nadużywanie dużej ilości array.map i funkcji lokalnych w celu uniknięcia pętli.
Edytuj kompresję 2 ciągów, właściwą drogę ...
Edytuj Dodano kompresję napisów, dużo pracy i niewiele zyskane. Teraz stickmen lustrzane są generowane z szablonu, a nie przechowywane.
Wykonałem kilka prób, najpierw uruchomionych.
Do gry w golfa.NB Kołmogorow-biznes wciąż do rozwiązania.Testuj w konsoli FireFox.
Zmień „return”, dodając alert „Dodaj” (...), aby mieć instrukcję wyjściową (choć w ogóle nie jest przydatna)console.log(D([[1,,2,3,1],[,3,1,1,2]]))
Wynik
Kod do gry w golfa
Kod (edycja 2)
Kod bez golfa (1. wersja)
źródło
Python
362353Edycja: Usunięcie jednej pętli for i użycie instrukcji exec pozwoliło zaoszczędzić 9 bajtów
Wejście:
Wynik:
źródło
C
418414Przykładowe dane wejściowe:
Przykładowe dane wyjściowe:
Kod w golfa (podziały linii służą wyłącznie do odczytu; powinna to być jedna długa linia kodu):
Maksymalna szerokość pola bitwy to 999 (mogłem zaoszczędzić 2 znaki, ograniczając je do 99). Użyłem struktury kontrolnej 1 bajta na znak wyjściowy (spacja), rysując liczby od dołu do góry.
Struktura sterowania zawiera 5 przesunięć.
Niektóre inne niejasne bity:
f%27%5
tłumaczy znakiVWSMI
na liczby0, 1, 2, 3, 4
t*3%12%5+4
oblicza szerokość typu stickmant
t^3|~o||(s=d[5]+p,*s--=46,*s=39)
uwzględnia asymetrię lewo / prawoargc=3
do generowania flag kierunku rysowania1
i-1
Nieskluczony kod:
źródło
*a
przecinku? Pozbywa się ostrzeżenia i ma taką samą liczbę bajtów.f=*a
jako warunku zatrzymania; kompilator może narzekać, ale mam na myśli. Nie mogę go usunąć, ponieważ wfor
składni -loop powinny znajdować się dwa średniki .Haskell, 556
Format wejściowy
Zamówienie: [Niemowlak, Wieśniak, Mag, Szermierz, Włócznik], [Włócznik, Szermierz, Mag, Wieśniak, Niemowlę]
Przykładowe dane wyjściowe
Kod
Nie golfił
źródło
Haskell (
736733720 bajtów)Zadzwoń za pomocą ./stickmanwars 2 3 1 3 4 -1 3 2 4 1 0 4 2 1 . -1 oznacza ogranicznik dla dwóch tablic. Mam nadzieję, że to w porządku.
Cóż, moje pierwsze wyzwanie golfowe i pierwszy raz użyłem haskell do prawdziwej aplikacji po tym, jak nauczyłem się go w tym semestrze na uniwersytecie. Prawdopodobnie nie jest to nawet najlepsze lub najkrótsze rozwiązanie, ale dobrze się bawiłem, tworząc je i było to dobre ćwiczenie :) Krytyka i opinie są bardzo mile widziane.
Grał w golfa z tego:
źródło
Haskell, 450
Fajne wyzwanie! Może uda mi się trochę pograć w golfa. Zasadniczo przechowuję kolumny z liczbami, aby łatwo je ze sobą połączyć, a następnie przerzucić całą tablicę za
String
pomocą Haskellatranspose
.Format wejściowy to
([Infants,Villagers,Mages,Swordsmen,Spearmen],[Infants,Villagers,Mages,Swordsmen,Spearmen])
Oto przykład z PO:
Oto moje ulubione przedstawienie niesławnego rytualnego dzieciobójstwa w drugiej erze!
źródło
Python (
612,522,460, 440)Każda „linia” jest obszywana prawym dopełnieniem i jest dodawana ponownie podczas rekonstrukcji.
Wcześniej odwróciłem stickmen w moim wewnętrznym kodowaniu, ponieważ zaoszczędziło mi to konieczności odwracania ich indywidualnie podczas renderowania ich w kodzie.
Przykładowy przebieg:
Kod:
źródło
Python (476)
Inny solver od mojego poprzedniego; dłużej, ale bardziej funkcjonalnie.
Kod:
źródło