Wprowadzenie
Mój dziadek jest fanem Jamesa Bonda, ale zawsze nie jest pewien, jak uszeregować swoich ulubionych aktorów. Jako taki zawsze tworzy listy, co jest bardzo pracochłonne. Poprosił mnie o opracowanie programu, który ułatwi mu życie, ale nie mam na to czasu, muszę pracować! Więc będę na was liczyć.
Wyzwanie
Wyzwanie jest proste. Dane wejściowe będą składały się z listy w następującym formacie:
<number> <space> <actor's name> <newline>
Twoim zadaniem jest posortowanie ich na podstawie liczby na początku wiersza, zaczynając od ostatniego, a kończąc na pierwszym. Wszystkie numery powinny zostać usunięte.
Jednak mój dziadek czasami popełnia błędy. W związku z tym musisz zweryfikować dane. Jeśli jedno z nazwisk na liście nie odnosi się do jednego z aktorów, który grał w Bonda, musisz go odrzucić. W przypadku powtórzeń powtórzenia należy usunąć, a nazwa powinna zachować najniższą wagę, z jaką była skojarzona (przykład # 3).
Nie ma ograniczenia co do liczby linii.
Dane wyjściowe muszą być tylko pewnego rodzaju listą, bez względu na to, czy jest to tablica, łańcuch rozdzielany przecinkami, tylko wartości oddzielone spacjami lub coś zupełnie innego, tj.
Pierce Brosnan, Sean Connery, David Niven
Końcowy znak nowej linii lub spacja jest dozwolony.
Przykład wejścia i wyjścia
Wkład:
1 Sean Connery
2 Emma Watson
5 Timothy Dalton
4 Roger Moore
3 Daniel Craig
Wydajność:
Timothy Dalton, Roger Moore, Daniel Craig, Sean Connery
Wkład:
2 Timothy Dalton
4 George Lazenby
5 George Lazenby
3 Bob Simmons
Wydajność:
George Lazenby, Bob Simmons, Timothy Dalton
Wkład:
3 Sean Connery
2 Pierce Brosnan
1 Sean Connery
Wydajność:
Pierce Brosnan, Sean Connery
Ponieważ jest to kod golfowy, wygrywa najkrótszy kod (w bajtach)!
dodatek
Lista aktorów, którzy grali rolę Bonda:
- Barry Nelson
- Bob Simmons
- Sean Connery
- Roger Moore
- David Niven
- George Lazenby
- Timothy Dalton
- Pierce Brosnan
- Daniel Craig
echo Sean Connery
ponieważ wszyscy wiedzą, że jest tylko jedna więźOdpowiedzi:
Pyth,
136132 bajtówWypróbuj tutaj!
Wyjaśnienie
źródło
Siatkówka ,
201 197191Wypróbuj online!
6 bajtów zapisanych dzięki Martinowi!
Whee, sortowanie bąbelkowe z wyrażeniem regularnym. Zauważ, że dziesięć bajtów jest zużywanych na konwersję dziesiętną na jednoargumentową na początku, jeśli jednoargumentowe wejście jest OK, to nie jest potrzebne. Ponadto, jeśli liczby nie mogą znajdować się w nazwach ludzi, można zaoszczędzić jeszcze kilka bajtów, przesuwając linię, która usuwa aktorów niezwiązanych z Bondem do końca i usuwając
1+
(niesprawdzoną z\D
wersją).Wyjaśnienie:
Program Retina składa się z kilku etapów, więc wyjaśnię każdy etap osobno.
Scena 1:
Zamienia liczby na wejściu na jednoargumentowe. Używa to specjalnego tokena zastępczego Retiny:
$*
który powtarza postać po liczbie razy równej wartości podstawowej 10 poprzedniego tokena.Etap 2:
Rzeczy
`
na etapie zmieniają używany tryb. Włącza to tryb grep, co oznacza, że każda linia, która nie pasuje do wyrażenia regularnego, jest odrzucana. Kotwice są niezbędne, aby zapobiec zsuwaniu się w pobliżu zapałek.Etap 3:
To jest etap sortowania.
+
W trybie oznacza, że etap ten należy powtarzać aż do zastąpienia powoduje żadnej zmiany po nałożeniu (tj docieramy stały punkt). Wyrażenie regularne znajduje granicę słów, po której następuje pewna liczba1
s, a następnie cała reszta wiersza aż do nowej linii. Następnie, jeśli następna linia ma więcej1
s niż to, wyrażenie regularne będzie pasować i zamienimy linie.Etap 4:
Ten etap
+
ponownie korzysta z trybu, ale także wykorzystuje,s
aby.
meta-znak pasował również do nowych linii. To usuwa zduplikowane linie, dopasowując dokładne duplikaty po1
s i przechwytując rzeczy po pierwszym duplikacie, aby zastąpić je całym dopasowaniem. Będzie to działać bez konieczności rozważania kolejności rozłączania remisów, ponieważ nazwy są już odpowiednio posortowane, z większą liczbą powyżej, dlatego zawsze będziemy zachowywać mniejsze wartości.Etap 5:
Tutaj jest naprawdę prosty, wszystko jest w porządku, z tym wyjątkiem, że
1
przed naszymi Obligacjami mamy kilka s, więc zastępujemy je i przestrzeń za nimi niczym.źródło
426 bajtów TSQL (w tym dane + dane wejściowe)
Rozwiązanie w golfa:
Wypróbuj tutaj
SQL wyróżnia się (bez zamierzonej gry słów) w tego rodzaju zadaniach: powiązanie zbiorów, porządkowanie, odcinanie duplikatów itp.
Wystarczy utworzyć i wypełnić tabelę aktorów w następujący sposób:
Teraz, jeśli użyjemy zmiennej tabeli jako danych wejściowych, wystarczy uzyskać przecięcie obu zestawów. Usuwanie duplikatów i porządkowanie w SQL są naprawdę łatwe.
Przykład 1:
Przykład 2:
Wersja w golfa jest po prostu pełna, na przykład wejście 3
Plus ten SQL może działać dla starszych wersji DBMS (nawet przepisać na ANSI SQL) i działać bez problemu na starszych komputerach niż w większości języków.
źródło
order by min(R) desc
z wewnętrznym wyborem i usunąćmin(R)
z niego. To powinno zaoszczędzić 21 bajtów.char
zamiastvarchar
spowoduje zapisanie kolejnych 6 bajtów.Perl,
242179217 bajtówBardziej sformatowana wersja z komentarzami:
Większość wielkości to lista Obligacji; Nie mogę znaleźć dobrego sposobu na skompresowanie tego wyrażenia regularnego bez dopuszczenia fałszywych trafień.
źródło
eval
Perl i wbudowany system kompresji ...Python 2, 250 bajtów:
Próbny:
źródło
PowerShell v3 +,
227219 bajtów121 bajtów to tylko lista aktorów ...
Pobiera dane
$args
i-split
jest na nowych liniach z`n
. Potokuj dosort
, który posortuje wpisy rosnąco według liczb, co na razie jest OK. Przeciągamy je do pętli foreach|%{...}
, każda iteracja zajmuje wejście,-split
spacje, a następnie-join
drugą połowę z powrotem razem ze spacją (tj. Usuwając liczby od początku). Te (rosnąco) posortowane nazwy są teraz pozostawione w kolejce. Przesuwamy ich przez miejsce?
, dzięki czemu jest-in
to zatwierdzona lista aktorów. Wreszcie, myselect
tylko-u
nijakie wpisy, które dla duplikatów wybiorą pierwszy napotkany (tj. Ten o najniższym ciężarze) i odrzucą resztę. Przechowujemy wynikową tablicę nazw w$a
.Mamy teraz posortowaną rosnącą listę aktorów. Ponieważ wyzwanie wymaga zejścia, wykonujemy operację odwracania w miejscu
$a
, indeksując od$a.count
do do0
.Przykład
Edycja - nie trzeba używać [array] :: Reverse () podczas indeksowania
źródło
sort -Des
zamiast odwrócenia tablicy? To prawda, że może to zostać zepsute w późniejszych wersjach programu PowerShell, ale nie wydaje mi się, aby to był prawdziwy problem;)select -u
przechwyciliby i zachowali najwyższą wartość, a nie najniższą, więc w moim przykładzie pozycje Daniela Craiga i Rogera Moore'a ulegną zamianie. Moje próby naprawienia spowodowały dłuższy kod niż odwrócenie tablicy.Pyton
309286 bajtówźródło
print
lub po)
lub]
JavaScript (ES6), 232 bajty
Wyjaśnienie
źródło