Wenn Sie möchten, schreiben Sie ein Programm, das Städte nach den Regeln des Stadtnamensspiels sortiert.
Jeder Name der Stadt sollte mit dem letzten Buchstaben des vorherigen Städtenamens beginnen. Z.B
Lviv -> v -> Viden -> n -> Neapolis -> s -> Sidney -> y -> Yokogama -> a -> Amsterdam -> m -> Madrid -> d -> Denwer
In der sortierten Liste sollten der erste Buchstabe der ersten Stadt und der letzte Buchstabe der letzten
nicht übereinstimmen. Es musssich nicht um den gleichen Buchstaben handeln.- Sie können davon ausgehen, dass Städtenamen nur Buchstaben haben.
- Die Programmausgabe sollte die gleiche Groß- und Kleinschreibung haben wie die Eingabe
Beispiel:
% ./script Neapolis Yokogama Sidney Amsterdam Madrid Lviv Viden Denwer
["Lviv", "Viden", "Neapolis", "Sidney", "Yokogama", "Amsterdam", "Madrid", "Denwer"]
code-golf
graph-theory
sorting
defhlt
quelle
quelle
["Viden" ... "Lviv"]
Antworten:
Ruby,
585544 ZeichenNoch eine Ruby-Implementierung. Verwendet auch Regex ohne Berücksichtigung der Groß- / Kleinschreibung (wie die alte Lösung von Ventero ), aber der Test wird anders durchgeführt.
Vorherige Version:
quelle
!~
den gesamten Ausdruck negieren, anstatt ihn zu verwenden.Python (
162141124)Brute Force für den Sieg.
quelle
&(j[0][0]!=j[-1][-1])
Bedingung entfernen ; Siehe die Fragenkommentare oben.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
? Wie sind sie definiert? Es tut mir leid, wenn diese Fragen lahm sind, ich bin neu in Python und würde gerne noch mehr damit arbeiten.j
Enthält eine Permutation der Städte, die mit dempermutations
Befehl generiert wird . Das große Zeichenif
am Ende bestätigt grundsätzlich, dass für alle Werte inj
der Zeile der letzte Buchstabe eines Werts inj
der Zeile der erste Buchstabe des nächsten Werts in der Zeile istj
. Ehrlich gesagt, weiß ich auch nicht, was derzip
macht,zip
arbeitet auf mysteriöse Weise.Ruby 1.9,
6354 ZeichenNeue Lösung basiert auf Howard ‚s Lösung :
Dies nutzt die Tatsache, dass es immer eine gültige Lösung geben wird.
Alte Lösung, basierend auf w0lf ‚s Lösung :
quelle
max_by
. Und Ihre neue Version hat mich zu einer noch neueren (und kürzeren) inspiriert.Ruby
74 72 104 103 7170Demo: http://ideone.com/MDK5c (in der Demo habe ich verwendet
gets().split()
statt$*
, ich weiß nicht , ob Ideone können Befehlszeilen args simulieren).quelle
$*.permutation{|p|p p if p.inject(p[0][0]){|m,e|m.casecmp(e[0])==0?e[-1]:?_}>?_}
aber deine ist 9 Zeichen kürzer!p$*.permutation.find{|i|i.inject{|a,e|a&&e[0]=~/#{a[-1]}/i&&e}}
ist ziemlich viel kürzer. Eine Ruby 1.8 (!) Lösung, die noch kürzer ist:p$*.permutation.find{|i|i.inject{|a,e|a&&a[-1]-32==e[0]&&e}}
-32
Lösung ist auch sehr genial, aber es beruht auf der Tatsache, dass Namen mit einem Großbuchstaben beginnen und mit einem Kleinbuchstaben enden, was möglicherweise nicht immer der Fall ist.Python, 113
Sehr ähnlich der Antwort von @ beary605 und noch brutaler.
quelle
Haskell ,
9474 BytesFindet rekursiv alle Lösungen. -7 Bytes, wenn es in Ordnung ist, alle Lösungen anstelle der ersten auszugeben. Vielen Dank an @Lynn, der den lästigen Import beseitigt hat und 18 Bytes weniger hat!
Probieren Sie es online!
quelle
Data.Char
Import mit loswerdenlast b==[r!!0!!0..]!!32
. Außerdem brauchen Sie keine Eltern ing[x|x<-c,x/=b]
fromEnum
wäre ein Muss. Komisch, ich habe diese Klammern schon einmal entfernt, aber ich muss von der falschen Registerkarte kopiert haben ...GolfScript, 78 Zeichen
Eine erste Version in GolfScript. Es macht auch einen Brute-Force-Ansatz. Das Skript wird in der Online- Beispieleingabe ausgeführt .
quelle
Schale , 10 Bytes
Probieren Sie es online!
Erläuterung
Alternativ 10 Bytes
Wir könnten auch die Anzahl benachbarter Paare zählen, die das Prädikat (
#
) erfüllen , danach sortieren (Ö
) und das letzte Element (→
) für dieselbe Anzahl von Bytes nehmen:Probieren Sie es online!
quelle
Jelly ,
2518 bytes (Verbesserungen erwünscht!)Probieren Sie es online!
Vielen Dank an @Lynn für die meisten dieser Verbesserungen!
25-Byte-Lösung:
Probieren Sie es online!
quelle
Ðf
ichX
eine zufällige Lösung anstelle der ersten gewählt habe,Ḣ
funktioniert das aber genauso gut.)Ðf
schnell in vielen meiner anderen Programme etwas Platz sparen!Mathematica 236 Zeichen
Definieren Sie die Liste der Städte:
Suchen Sie den Pfad, der alle Städte enthält:
Ausgabe:
Bei dem obigen Ansatz wird davon ausgegangen, dass die Städte als Pfaddiagramm angeordnet werden können.
Das Diagramm p ist unten dargestellt:
quelle
C 225
Führen Sie mit Ländernamen als Befehlszeilenargumente aus
Hinweis:
quelle
#define L(x)for(int i=x;i<n;i++)
mir nicht sicher, ob es genau gültig ist, aber wenn Sie dies tun undi
zu Beginn nicht deklarierenmain
, sparen Sie 1 Byte.J,
6965605954 ZeichenEtwas aus dem Tempo.
Beispiel:
quelle
C # 398
Und hier ist C # mit Linq 5 Cent
quelle
K 96
.
quelle
C # (.NET Core) , 297 Byte
Probieren Sie es online!
quelle