Jeśli chcesz, napisz program, który sortuje miasta zgodnie z zasadami gry o nazwie miasta.
Każda nazwa miasta powinna zaczynać się od ostatniej litery w poprzedniej nazwie miasta. Na przykład
Lviv -> v -> Viden -> n -> Neapolis -> s -> Sidney -> y -> Yokogama -> a -> Amsterdam -> m -> Madrid -> d -> Denwer
Na posortowanej liście pierwsza litera pierwszego miasta i ostatnia litera ostatniej
nie powinny pasować do niczego, nie musi być tą samą literą.- Możesz założyć, że nazwy miast mają tylko litery.
- Dane wyjściowe programu powinny mieć taką samą wielkość liter jak dane wejściowe
Przykład:
% ./script Neapolis Yokogama Sidney Amsterdam Madrid Lviv Viden Denwer
["Lviv", "Viden", "Neapolis", "Sidney", "Yokogama", "Amsterdam", "Madrid", "Denwer"]
code-golf
graph-theory
sorting
defhlt
źródło
źródło
["Viden" ... "Lviv"]
nieprawidłowa?)Odpowiedzi:
Ruby,
585544 znakówJeszcze jedna implementacja ruby. Używa również wyrażenia regularnego bez rozróżniania wielkości liter (jako stare rozwiązanie Ventero ), ale test przebiega inaczej.
Poprzednia wersja:
źródło
!~
zamiast negować całe wyrażenie.Python (
162141124)Brutalna siła dla zwycięstwa.
źródło
&(j[0][0]!=j[-1][-1])
warunek; patrz komentarze do pytania powyżej.from itertools import*;print[j for j in permutations(raw_input().split())if all(x[-1]==y[0].lower()for x,y in zip(j,j[1:]))]
j
,x
,y
? Jak są zdefiniowane? Przepraszam, jeśli te pytania są słabe, jestem nowy w Pythonie i chciałbym z nim więcej popracować.j
zawiera permutację miast, która jest generowana za pomocąpermutations
polecenia. Dużeif
na końcu zasadniczo potwierdza, że dla wszystkich wartości wj
, ostatnia litera jednej wartości wj
jest taka sama jak pierwsza litera następnej wartości wj
. Szczerze mówiąc, nie wiem też, cozip
robi,zip
działa w tajemniczy sposób.Ruby 1.9,
6354 znakówNowe rozwiązanie jest oparte na Howarda „s rozwiązania :
Wykorzystuje to fakt, że zawsze będzie prawidłowe rozwiązanie.
Stare rozwiązanie, oparte na w0lf „s rozwiązania :
źródło
max_by
. Twoja nowa wersja zainspirowała mnie do stworzenia jeszcze nowszej (i krótszej) wersji.Rubinowy
74 72 104 103 7170Demo: http://ideone.com/MDK5c (w wersji demo, której użyłem
gets().split()
zamiast$*
; Nie wiem, czy Ideone może symulować argumenty wiersza poleceń).źródło
$*.permutation{|p|p p if p.inject(p[0][0]){|m,e|m.casecmp(e[0])==0?e[-1]:?_}>?_}
ale twój jest o 9 znaków krótszy!p$*.permutation.find{|i|i.inject{|a,e|a&&e[0]=~/#{a[-1]}/i&&e}}
jest nieco krótszy. Ruby 1.8 (!) Rozwiązanie, które jest jeszcze krótsze:p$*.permutation.find{|i|i.inject{|a,e|a&&a[-1]-32==e[0]&&e}}
-32
rozwiązanie jest również bardzo pomysłowe, ale opiera się na tym, że nazwy zaczynają się od dużej litery, a kończą na małej, co nie zawsze musi być.Python, 113
Bardzo podobny do odpowiedzi @ beary605 i jeszcze bardziej brutalny.
źródło
Haskell ,
9474 bajtyRekurencyjnie znajduje wszystkie rozwiązania. -7 bajtów, jeśli można wypisać wszystkie rozwiązania zamiast pierwszego. Dzięki @Lynn za pozbycie się nieznośnego importu, goląc 18 bajtów z wyniku!
Wypróbuj online!
źródło
Data.Char
importu za pomocąlast b==[r!!0!!0..]!!32
. Ponadto nie potrzebujesz parens wg[x|x<-c,x/=b]
fromEnum
że będzie koniecznością. Zabawne, zabrałem te nawiasy już raz, ale musiałem skopiować z niewłaściwej zakładki ...GolfScript, 78 znaków
Pierwsza wersja w GolfScript. Podchodzi także do brutalnej siły. Możesz zobaczyć skrypt działający na przykładowym wejściu online .
źródło
Łuska , 10 bajtów
Wypróbuj online!
Wyjaśnienie
Alternatywnie 10 bajtów
We could also count the number of adjacent pairs which satisfy the predicate (
#
), sort on (Ö
) that and take the last element (→
) for the same number of bytes:Try it online!
źródło
Jelly,
2518 bytes (Improvements welcome!)Try it online!
Thanks to @Lynn for most of these improvements!
25-byte solution:
Try it online!
źródło
Ðf
wybrałemX
losowe rozwiązanie zamiast pierwszego, aleḢ
działa równie dobrze.)Ðf
szybkiego w wielu innych programach, aby zaoszczędzić trochę miejsca!Mathematica 236 znaków
Zdefiniuj listę miast:
Znajdź ścieżkę obejmującą wszystkie miasta:
Wynik:
Powyższe podejście zakłada, że miasta można ułożyć jako wykres ścieżki.
Wykres p pokazano poniżej:
źródło
C 225
Uruchom z nazwami krajów jako argumentami wiersza poleceń
Uwaga:
źródło
#define L(x)for(int i=x;i<n;i++)
and don't declarei
at the beginning ofmain
you save 1 byte.J,
6965605954 charactersSomewhat off the pace.
Example:
źródło
C#, 398
And here is C# with Linq 5 cents
źródło
K, 96
.
źródło
C # (.NET Core) , 297 bajtów
Wypróbuj online!
źródło