Jika Anda suka, tulislah program yang mengurutkan kota-kota sesuai dengan aturan permainan nama kota.
Setiap nama kota harus dimulai dari huruf terakhir dalam nama kota sebelumnya. Misalnya
Lviv -> v -> Viden -> n -> Neapolis -> s -> Sidney -> y -> Yokogama -> a -> Amsterdam -> m -> Madrid -> d -> Denwer
Dalam daftar yang diurutkan huruf pertama dari kota pertama dan huruf terakhir dari yang terakhir
tidak boleh cocok dengan apa pun yangtidak harus menjadi huruf yang sama.- Anda dapat menganggap nama kota hanya memiliki huruf.
- Output program harus memiliki kapitalisasi yang sama dengan input
Contoh:
% ./script Neapolis Yokogama Sidney Amsterdam Madrid Lviv Viden Denwer
["Lviv", "Viden", "Neapolis", "Sidney", "Yokogama", "Amsterdam", "Madrid", "Denwer"]
code-golf
graph-theory
sorting
defhlt
sumber
sumber
["Viden" ... "Lviv"]
tidak valid?)Jawaban:
Ruby,
585544 karakterNamun implementasi ruby lain. Menggunakan juga case regens tidak sensitif (sebagai solusi lama Ventero ) tetapi tes dilakukan secara berbeda.
Versi sebelumnya:
sumber
!~
alih-alih meniadakan seluruh ekspresi.Python (
162141)124)Kekuatan brutal untuk menang.
sumber
&(j[0][0]!=j[-1][-1])
kondisinya; lihat komentar pertanyaan di atas.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
? Bagaimana mereka didefinisikan? Saya minta maaf jika pertanyaan-pertanyaan ini lemah, saya baru di Python dan ingin bekerja dengannya lagi.j
berisi permutasi dari kota-kota, yang dihasilkan denganpermutations
perintah. Besarif
pada akhirnya pada dasarnya memvalidasi bahwa untuk semua nilai dalamj
, huruf terakhir dari satu nilai dalamj
adalah sama dengan huruf pertama dari nilai berikutnya dalamj
. Jujur, saya juga tidak tahu apa yangzip
dilakukannya,zip
bekerja dengan cara yang misterius.Ruby 1.9,
6354 karakterSolusi baru didasarkan pada Howard 's solusi :
Ini menggunakan fakta bahwa akan selalu ada solusi yang valid.
Solusi tua, berdasarkan w0lf 's solusi :
sumber
max_by
. Dan versi baru Anda menginspirasi diri saya untuk versi yang lebih baru (dan lebih pendek).Ruby
74 72 104 103 7170Demo: http://ideone.com/MDK5c (dalam demo yang saya gunakan
gets().split()
alih-alih$*
; Saya tidak tahu apakah Ideone dapat mensimulasikan args baris perintah).sumber
$*.permutation{|p|p p if p.inject(p[0][0]){|m,e|m.casecmp(e[0])==0?e[-1]:?_}>?_}
tetapi milik Anda lebih pendek 9 karakter!p$*.permutation.find{|i|i.inject{|a,e|a&&e[0]=~/#{a[-1]}/i&&e}}
sedikit lebih pendek. Solusi Ruby 1.8 (!) Yang bahkan lebih pendek:p$*.permutation.find{|i|i.inject{|a,e|a&&a[-1]-32==e[0]&&e}}
-32
solusinya juga sangat cerdik, tetapi bergantung pada kenyataan bahwa nama dimulai dengan huruf besar dan diakhiri dengan huruf kecil, yang mungkin tidak selalu demikian.Python, 113
Sangat mirip dengan jawaban @ beary605, dan bahkan lebih kasar.
sumber
Haskell ,
9474 byteSecara rekursif menemukan semua solusi. -7 byte jika tidak apa-apa untuk menampilkan semua solusi, bukan yang pertama. Terima kasih kepada @Lynn karena telah menyingkirkan impor sial, mengurangi nilai 18 byte!
Cobalah online!
sumber
Data.Char
impor denganlast b==[r!!0!!0..]!!32
. Juga, Anda tidak perlu orangtua dig[x|x<-c,x/=b]
fromEnum
akan menjadi suatu keharusan. Lucu, saya sudah mengambil tanda kurung itu sekali, tapi saya harus menyalin dari tab yang salah ...GolfScript, 78 karakter
Versi pertama dalam GolfScript. Ini juga melakukan pendekatan brute force. Anda dapat melihat skrip berjalan pada input contoh online .
sumber
Sekam , 10 byte
Cobalah online!
Penjelasan
Atau, 10 byte
Kita juga bisa menghitung jumlah pasangan yang berdekatan yang memenuhi predikat (
#
), urutkan pada (Ö
) itu dan ambil elemen terakhir (→
) untuk jumlah byte yang sama:Cobalah online!
sumber
Jelly ,
2518 byte (Selamat datang di perbaikan!)Cobalah online!
Terima kasih kepada @Lynn untuk sebagian besar peningkatan ini!
Solusi 25-byte:
Cobalah online!
sumber
Ðf
saya gunakanX
untuk memilih solusi acak dan bukan yang pertama, tetapiḢ
berfungsi dengan baik.)Ðf
cepat di banyak program saya yang lain untuk menghemat ruang!Mathematica 236 karakter
Tentukan daftar kota:
Temukan jalur yang mencakup semua kota:
Keluaran:
Pendekatan di atas mengasumsikan bahwa kota-kota dapat diatur sebagai grafik jalur.
Grafik p ditunjukkan di bawah ini:
sumber
C, 225
Jalankan dengan nama negara sebagai argumen baris perintah
catatan:
sumber
#define L(x)for(int i=x;i<n;i++)
dan tidak menyatakani
pada awalmain
Anda menghemat 1 byte.J,
6965605954 karakterAgak melambat.
Contoh:
sumber
C #, 398
Dan di sini adalah C # dengan Linq 5 sen
sumber
K, 96
.
sumber
C # (.NET Core) , 297 byte
Cobalah online!
sumber