Если хотите, напишите программу, которая сортирует города по правилам игры с названиями городов.
Каждое название города должно начинаться с последней буквы в названии предыдущего города. Например
Lviv -> v -> Viden -> n -> Neapolis -> s -> Sidney -> y -> Yokogama -> a -> Amsterdam -> m -> Madrid -> d -> Denwer
В отсортированном списке первая буква первого города и последняя буква последнего
не должны совпадать, ничтоне должно совпадать.- Вы можете предположить, что названия городов имеют только буквы.
- Вывод программы должен иметь такую же прописную букву, как ввод
Пример:
% ./script Neapolis Yokogama Sidney Amsterdam Madrid Lviv Viden Denwer
["Lviv", "Viden", "Neapolis", "Sidney", "Yokogama", "Amsterdam", "Madrid", "Denwer"]
code-golf
graph-theory
sorting
defhlt
источник
источник
["Viden" ... "Lviv"]
недействителен?)Ответы:
Рубин,
585544 персонажаЕще одна рубиновая реализация. Также используется регулярное выражение без учета регистра (как старое решение Ventero ), но тест проводится по-другому.
Предыдущая версия:
источник
!~
вместо отрицания всего выражения.Питон (
162141124)Грубая сила для победы.
источник
&(j[0][0]!=j[-1][-1])
условие; см. вопрос к комментариям выше.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
? Как они определены? Извините, если эти вопросы неэффективны, я новичок в Python и хотел бы поработать с ним еще.j
содержит перестановку городов, которая генерируется с помощьюpermutations
команды. Большое значениеif
в конце подтверждает, что для всех значений вj
, последняя буква одного значения вj
совпадает с первой буквой следующего значения вj
. Честно говоря, я тоже не знаю, чтоzip
делает,zip
работает таинственным образом.Рубин 1.9,
6354 персонажаНовое решение основано на Говарда «S решения :
При этом используется тот факт, что всегда будет действительное решение.
Старое решение, основанное на w0lf «s решения :
источник
max_by
. И ваша новая версия вдохновила меня на еще более новую (и более короткую) версию.Рубин
74 72 104 103 7170Демо: http://ideone.com/MDK5c (в демо, которое я использовал
gets().split()
вместо$*
; я не знаю, может ли Ideone имитировать аргументы командной строки).источник
$*.permutation{|p|p p if p.inject(p[0][0]){|m,e|m.casecmp(e[0])==0?e[-1]:?_}>?_}
но ваш на 9 символов короче!p$*.permutation.find{|i|i.inject{|a,e|a&&e[0]=~/#{a[-1]}/i&&e}}
немного короче. Решение Ruby 1.8 (!),p$*.permutation.find{|i|i.inject{|a,e|a&&a[-1]-32==e[0]&&e}}
-32
решение также очень гениальное, но оно основано на том факте, что имена начинаются с заглавной буквы и заканчиваются строчными, что не всегда так.Python, 113
Очень похоже на ответ @ beary605, и даже более грубо.
источник
Хаскелл ,
9474 байтаРекурсивно находит все решения. -7 байт, если можно вывести все решения вместо первого. Спасибо @Lynn за избавление от надоедливого импорта, сократив 18 байт за счет!
Попробуйте онлайн!
источник
Data.Char
импорта с помощьюlast b==[r!!0!!0..]!!32
. Кроме того, вам не нужны парены вg[x|x<-c,x/=b]
fromEnum
что это обязательно. Забавно, я уже убрал эти скобки, но, должно быть, скопировал их не с той вкладки ...GolfScript, 78 символов
Первая версия в GolfScript. Это также делает подход грубой силы. Вы можете увидеть скрипт, запущенный на примере ввода онлайн .
источник
Шелуха , 10 байт
Попробуйте онлайн!
объяснение
В качестве альтернативы 10 байтов
Мы также можем посчитать количество соседних пар, которые удовлетворяют предикату (
#
), отсортировать по (Ö
) и взять последний элемент (→
) для того же количества байтов:Попробуйте онлайн!
источник
Желе ,
2518 байт (Улучшения приветствуются!)Попробуйте онлайн!
Спасибо @Lynn за большинство этих улучшений!
25-байтовое решение:
Попробуйте онлайн!
источник
Ðf
я использую,X
чтобы выбрать случайное решение вместо первого, ноḢ
работает так же хорошо.)Ðf
быстро во многих других моих программах, чтобы сэкономить место!Mathematica 236 символов
Определите список городов:
Найдите путь, который включает в себя все города:
Выход:
Вышеупомянутый подход предполагает, что города могут быть организованы в виде графика пути.
График p показан ниже:
источник
С 225
Запускать с именами стран в качестве аргументов командной строки
Замечания:
источник
#define L(x)for(int i=x;i<n;i++)
и не объявляетеi
в началеmain
, сохраните 1 байт.J,
6965605954 символовНесколько не в темпе.
Пример:
источник
C #, 398
А вот C # с Linq 5 центов
источник
К, 96
,
источник
C # (.NET Core) , 297 байт
Попробуйте онлайн!
источник