Wprowadzenie
Grasz w pasującą grę, w której monety są wkładane u góry i opadają na dno (na górną monetę) z powodu grawitacji.
Więc to
O <- inserting this coin
OO O
OOOOO
stanie się tym
O
OO O
OOOOO
Teraz wyobraź sobie, że ktoś obraca tablicę zgodnie z ruchem wskazówek zegara. Staną się następujące zdarzenia:
1. Tablica jest obrócona
OOO
OO
O
OO
O
2. Monety spadają z powodu grawitacji
O
O
OO
OO
OOO
Twoje zadanie
Twoim zadaniem jest symulacja obrotu tablicy, pisząc program lub funkcję. Dla uproszczenia mamy do czynienia tylko z jednym rodzajem monety (nie jest to zbyt ekscytująca gra polegająca na dopasowywaniu, prawda?). Możesz założyć, że grawitacja jest stosowana dopiero po zakończeniu obrotu. Płyta jest obracana zgodnie z ruchem wskazówek zegara.
Wejście
Dane wejściowe będą ciągiem znaków, który zawiera 3 typy znaków:
- O (kapitał o) LUB 0 (zero) - moneta (Ty decydujesz, które obsługuje Twoje rozwiązanie)
- (spacja) - puste pole
- \ n (nowa linia) - koniec wiersza
Dane wejściowe reprezentują stan płyty. Możesz założyć, że dane wejściowe są dobrze uformowane i zawierają prawidłowy stan planszy (nie płyną żadne monety). Wejście może być parametrem funkcji lub może być odczytane ze standardowego wejścia lub z pliku.
Wynik
Wyjście to nowy stan płytki po obrocie. Dane wyjściowe zawierają te same 3 typy znaków co dane wejściowe. Dane wyjściowe mogą zostać zwrócone z funkcji lub zapisane na standardowym wyjściu lub w pliku.
Próba
Wejście 1:
O
OO O
OOOOO
Wyjście 1:
O
O
OO
OO
OOO
Input2:
O O
O O
Wyjście 2:
OO
OO
Możesz użyć dowolnego języka i standardowej biblioteki wybranego języka. Najkrótszy program w bajtach wygrywa.
źródło
Odpowiedzi:
GolfScript,
1412 znakówDane wejściowe należy podać na STDIN, znakiem dla monet mogą być dowolne znaki spacje. Spróbuj tutaj . Dzięki Peterowi za zwrócenie uwagi na redukcję dwóch postaci.
źródło
transpose
Ruby, które poradzi sobie z tablicami o różnych długościach ...([nil]*a.map(&:size).max).zip(*a)
. Nie nadaje się do gry w golfa.-1%
z$
." "
.JavaScript (E6) 103
Pierwsza próba, tylko operacje na macierzach. Każdy wiersz w ciągu wejściowym musi być wypełniony.
Całkiem niewygodny.
Pseudo kod
źródło
[...x]
. Jak to jest nazywane?spread
[ developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Ruby 2.0, 59 znaków
Wejście przez stdin, zakłada, że wszystkie linie mają tę samą długość. Jest to prawdopodobnie znacznie dłużej niż to konieczne. Ale przynajmniej jest czytelny ...
źródło
$<.map
zamiast tego użyć .1..-1
), po prostu wybieram 50 wierszy, zaczynając od drugiego (1,50
).J -
493124 bajtówMyślę, że mogą tam występować niepotrzebne obroty, ale w przeciwnym razie działa dobrze. Jest to funkcja, która pobiera dane wejściowe zgodnie z opisem, monety są
O
. Wejście nie wymaga spacji końcowych.Nowa wersja, zainspirowana odpowiedzią JavaScript edc65 :
Wyjaśnienie:
Stara wersja:
Wyjaśnienie:
Przykłady (zauważ, że ciągi wielowierszowe zaczynają się
0 : 0
i kończą na nawiasie):źródło
Haskell - 86
Właśnie się uczę, więc jestem pewien, że można to poprawić.
Przykładowe dane wejściowe:
Przykładowe dane wyjściowe:
źródło
Python 2 (69)
(79)Pobiera dane wypełnione spacjami, aby wszystkie linie miały jednakową długość.
split
Tworzy arrat każdej linii.zip
Skutecznie transpozycję macierzy. Następniesorted
sortuje krotki w porządku leksykograficznym, powodując, że wszystkie monety spadają na dno. Na koniec drukujemy każdą linię, zamieniając ją z powrotem w ciąg znaków, jednak najpierw musimy ją odwrócić. Działanieprint'O'*c.count('O')
jest równoważne i wykorzystuje tę samą liczbę znaków.Przykładowy przebieg:
źródło
C,
167119 bajtówTa krótsza wersja jest (niestety?) Znacznie bardziej przejrzysta niż oryginał.
źródło
Rakieta: 130
Wymaga padania spacjami, aby linie były równe długości.
źródło
C # -
209174 bajtówRacja, muszę spróbować golfa Code w pewnym momencie. Utworzono funkcję (r), która obraca tablicę i drukuje ją. Chyba trochę oszukuję, kiedy drukuję swoją tablicę znaków, ale jeśli nie możesz zrozumieć, dlaczego nie powinnaś być zła :)
Dzięki ProgramFOX za wskazówki :)
Oszukać
źródło
char[]
iy
zmniejszy liczbę znaków do 192 znaków. Ponadto, nie jest tak naprawdę konieczne podanie słowa kluczowegostatic
podczas zamieszczania odpowiedzi tutaj. Usunięcie go zmniejszy liczbę twoich postaci do 185 znaków.