Zobacz Dziurę nr 1, jeśli jesteś zdezorientowany.
Co robi każde dziecko po tym, jak zbierze wiadra cukierków w Halloween?
Sortuj według rodzaju i wielkości, oczywiście 1 !
Wyzwanie
Biorąc pod uwagę wyrzuconą torbę cukierków o różnych kształtach i rozmiarach, posortuj cukierki od lewej do prawej na podstawie:
- Po pierwsze: ilość cukierków (więc 5 z jednego pozostanie więcej niż 4 z drugiego)
- Po drugie (jeśli po pierwszej są jakieś remisy): jeśli kwota jest taka sama, cukierki o większej powierzchni wewnętrznej (na podstawie liczby znaków) będą miały wyższą pozycję.
Jeśli po drugim sortowaniu nadal jest remis, możesz wybrać jedno z nich jako pierwsze.
Wejście
Otrzymasz cukierki przez standardowe wejście; rozrzucony. Zobacz przykłady poniżej.
Wynik
Wyjmij cukierki uporządkowane we właściwej kolejności. Uwaga: cukierki należy zawsze umieszczać w bardzo schludnych kolumnach, aby uśmierzyć rybę OCD 2 . Cukierki tego samego rodzaju powinny być umieszczone bezpośrednio pod sobą. Zobacz przykłady poniżej.
Co rozumiesz przez „wnętrze”?
Wewnętrzna powierzchnia kawałka cukierka jest mierzona przez całkowitą liczbę postaci tworzących cukierki jako całość.
Każda biała spacja w obrębie „granicy” jest uważana za część obszaru cukierka.
Obramowanie to dowolna połączona pętla znaków, każdy znak po przekątnej lub obok sąsiada.
Na przykład,
+--------+
| |
| |
| |
| |
+--------+
ma więcej powierzchni niż
XXXXXXXX
XXXXXXXX
XXXXXXXX
XXXXXXXX
mimo że ma ogólnie mniej znaków.
Przykłady
Wejście:
_ \| |/ _
_ lllllll -*------------*- -\ /- lllllll
lllllll lllllllll | /\ /\ / | +|\ooooo/|+ lllllllll
lllllllll llll+llll | / \/ \/ | ||o o|| llll+llll
llll+llll lllllllll -*------------*- ||o o|| lllllllll
lllllllll lllllll /| |\ +|/ooooo\|+ lllllll
lllllll | -/ \- |
| | _ |
| -\ /- | lllllll |
| +|\ooooo/|+ | lllllllll |
| ||o o|| | llll+llll |
| ||o o|| + lllllllll rrr--rrr +
+ +|/ooooo\|+ lllllll rr||rr
-/ \- | | || |
| | || |
| | || |
| | || |
| \| |/ | || |
+ -*------------*- | || |
| /\ /\ / | | || |
-\ /- | / \/ \/ | | || |
+|\ooooo/|+ -*------------*- rr||rr
||o o|| /| |\ rrr--rrr
||o o||
+|/ooooo\|+
-/ \-
Stanie się
_ \| |/ -\ /- rrr--rrr
lllllll -*------------*- +|\ooooo/|+ rr||rr
lllllllll | /\ /\ / | ||o o|| | || |
llll+llll | / \/ \/ | ||o o|| | || |
lllllllll -*------------*- +|/ooooo\|+ | || |
lllllll /| |\ -/ \- | || |
| | || |
| \| |/ -\ /- | || |
| -*------------*- +|\ooooo/|+ | || |
| | /\ /\ / | ||o o|| | || |
| | / \/ \/ | ||o o|| rr||rr
+ -*------------*- +|/ooooo\|+ rrr--rrr
/| |\ -/ \-
_
lllllll \| |/ -\ /-
lllllllll -*------------*- +|\ooooo/|+
llll+llll | /\ /\ / | ||o o||
lllllllll | / \/ \/ | ||o o||
lllllll -*------------*- +|/ooooo\|+
| /| |\ -/ \-
|
|
|
|
+
_
lllllll
lllllllll
llll+llll
lllllllll
lllllll
|
|
|
|
|
+
_
lllllll
lllllllll
llll+llll
lllllllll
lllllll
|
|
|
|
|
+
Drugi przykład:
qq \/
qq qq qq +-----+
qq qq qq + |
jjjjjjjj qq qq | |
jjjjjj \/ qq qq | |
jjjj +-----+ <---notice that the left side is not connected qq +-------+
jj jj + | <--> <-->
j j | |
jj <> jj | | <--> qq jjjjjjjj
jj jj +-------+ qq jjjjjj
jjjj qq qq jjjj
qq qq jj jj
j j
+---------------------------------------------------------+ jj <> jj
ooooo +---------------------------------------------------------+ jj jj
o yyyyyy jjjj
o ww - notice diagonal border, allowed
o ww jjjjjjjj
o yyyyyy ooooo ooooo jjjjjj
ooooo o yyyyyy o yyyyyy jjjj
o ww o ww jj jj
o ww o ww j j
o yyyyyy o yyyyyy jj <> jj
ooooo ooooo jj jj
jjjj
Rozwiązanie:
qq ooooo jjjjjjjj <--> \/ +---------------------------------------------------------+
qq o yyyyyy jjjjjj +-----+ +---------------------------------------------------------+
o ww jjjj <--> + |
qq o ww jj jj | |
qq o yyyyyy j j <--> | |
ooooo jj <> jj +-------+
qq jj jj
qq ooooo jjjj \/
o yyyyyy +-----+
qq o ww jjjjjjjj + |
qq o ww jjjjjj | |
o yyyyyy jjjj | |
qq ooooo jj jj +-------+
qq j j
ooooo jj <> jj
qq o yyyyyy jj jj
qq o ww jjjj
o ww
qq o yyyyyy jjjjjjjj
qq ooooo jjjjjj
jjjj
qq jj jj
qq j j
jj <> jj
qq jj jj
qq jjjj
Zauważ, że kolumny mają 1 znak odstępu między nimi i są wyrównane poziomo u góry. Pamiętaj również, że każdy cukierek jest w dokładnych kolumnach, każdy cukierek z 1 znakiem odstępu między nimi.
Punktacja
To jest golf golfowy, więc wygrywa najkrótszy program (w bajtach).
1 Co jeszcze byś zrobił? Oczywiście chcesz pokazać swoją niesamowitą moc i moc w ilości zebranych cukierków, prawda?
2 Wiem, co myślisz! Ryba musi patrzeć przez zakrzywioną miskę na twoje cukierki, więc i tak by się zniekształciła! Moja ryba żyła (zanim umarła) w prostokątnym akwarium.
Odpowiedzi:
Ruby, 928 znaków
Uff, ten był zabawny!
Możesz podać dane wejściowe na STDIN lub możesz przekazać plik wejściowy jako argument (jak
ruby organize.rb candy.txt
), a plik zostanie automatycznie potraktowany jako STDIN.Wszystkie średniki można zastąpić znakami nowej linii; Właśnie skleiłem kilka linii, aby zmniejszyć przestrzeń pionową.
Ungolfed (2367 znaków):
źródło