Введение
Мой дедушка является поклонником Джеймса Бонда, но он всегда не уверен, как оценивать своих любимых актеров. Таким образом, он всегда делает списки, что является большой работой. Он попросил меня создать программу, которая облегчит его жизнь, но у меня нет на это времени, мне нужно работать! Так что я буду рассчитывать на вас, ребята.
Вызов
Задача проста. Ввод будет состоять из списка в следующем формате:
<number> <space> <actor's name> <newline>
Ваша задача - отсортировать их по номеру в начале строки, начиная с последней и заканчивая первой. Все номера должны быть удалены.
Однако мой дедушка иногда делает ошибки. Таким образом, вам нужно будет проверить данные. Если одно из имен в списке не относится к одному из актеров, сыгравших Бонда, вы должны от него отказаться. В случае повторов, повторы должны быть удалены, и имя должно поддерживать наименьший вес, с которым оно было связано (пример № 3).
Нет ограничений на количество строк.
Выходными данными должен быть только какой-то список, будь то массив, строка, разделенная запятыми, просто значения, разделенные пробелами, или что-то еще целиком, т.е.
Pierce Brosnan, Sean Connery, David Niven
Конечный перевод строки или пробел допускается.
Пример ввода и вывода
Входные данные:
1 Шон Коннери
2 Эмма Уотсон
5 Тимоти Далтон
4 Роджер Мур
3 Дэниел Крейг
Выход:
Тимоти Далтон, Роджер Мур, Дэниел Крейг, Шон Коннери
Входные данные:
2 Тимоти Далтон
4 Джордж Лазенби
5 Джордж Лазенби
3 Боб Симмонс
Выход:
Джордж Лазенби, Боб Симмонс, Тимоти Далтон
Входные данные:
3 Шон Коннери
2 Пирс Броснан
1 Шон Коннери
Выход:
Пирс Броснан, Шон Коннери
Поскольку это кодовый гольф, выигрывает самый короткий код (в байтах)!
аппендикс
Список актеров, сыгравших роль Бонда:
- Барри Нельсон
- Боб Симмонс
- Шон Коннери
- Роджер Мур
- Дэвид Нивен
- Джордж Лазенби
- Тимоти Далтон
- Пирс Броснан
- Дэниел Крейг
echo Sean Connery
потому что все знают, есть только одна связьОтветы:
Pyth,
136132 байтаПопробуй это здесь!
объяснение
источник
Сетчатка ,
201 197191Попробуйте онлайн!
6 байтов сэкономлено благодаря Мартину!
Whee, пузырьковая сортировка с регулярным выражением. Обратите внимание, что десять байтов тратятся на десятичное преобразование в унарное в начале, если унарный ввод в порядке, тогда это не нужно. Кроме того, если числа не могут быть в именах людей, тогда можно сохранить еще пару байтов, переместив строку, которая удаляет актеров, не являющихся связующими, в конец и удалив
1+
(не проверено\D
версией).Объяснение:
Программа Retina состоит из нескольких этапов, поэтому я объясню каждый этап отдельно.
Этап 1:
Заменяет числа на входе одинарными. При этом используется специальный замещающий токен Retina: он
$*
повторяет символ после того, как количество раз, равное базовому значению 10 предыдущего токена.Этап 2:
Материал перед
`
этапом меняет используемый режим. Это включает режим grep, что означает, что каждая строка, не соответствующая регулярному выражению, отбрасывается. Якоря необходимы для предотвращения скольжения ближайших спичек.Этап 3:
Это этап сортировки. Режим
+
in означает, что этот этап следует повторять до тех пор, пока замена не изменится при применении (т. Е. Мы достигнем фиксированной точки). Регулярное выражение находит границу слова, за которым следует некоторое число1
s, а затем вся остальная часть строки до новой строки. Затем, если в следующей строке больше1
s, чем это, регулярное выражение будет соответствовать, и мы поменяем строки.Этап 4:
На этом этапе
+
снова используется режим, но также используется,s
чтобы.
метасимвол также соответствовал символам новой строки. Это удаляет дубликаты строк, сопоставляя точные дубликаты после1
s и захватывая материал после первого дубликата, чтобы заменить все совпадение на него. Это будет работать без необходимости учитывать порядок разрыва связи, потому что имена уже отсортированы соответствующим образом, с большими числами выше, поэтому мы всегда будем сохранять меньшие значения.Этап 5:
Здесь действительно все просто, все в порядке, за исключением того, что
1
перед нашими облигациями у нас есть куча s, поэтому мы заменяем их и пространство после них ничем.источник
TSQL 426 байт (включая данные + ввод)
Гольф решение:
Попробуй здесь
SQL превосходит (не каламбур) в таких задачах: связывание наборов, упорядочение, удаление дубликатов и т. Д.
Все, что вам нужно, это создать и заполнить таблицу актеров следующим образом:
Теперь, если мы используем табличную переменную в качестве входных данных, нам просто нужно получить пересечение обоих множеств. Удалить дубликаты и упорядочить в SQL очень просто.
Пример 1:
Пример 2:
Гольф-версия - это просто полноценная вещь, например, ввод 3
В качестве плюса этот SQL может работать для более старых версий СУБД (даже переписать на ANSI SQL) и без проблем работать на старых компьютерах, чем большинство языков.
источник
order by min(R) desc
с внутренним выбором и удалитьmin(R)
из выбора. Это должно сэкономить 21 байт.char
вместоvarchar
сэкономит еще 6 байтов.Perl,
242179217 байтБолее отформатированная версия, с комментариями:
Большая часть размера составляет список Облигаций; Я не могу найти хороший способ сжатия этого регулярного выражения, не допуская ложных срабатываний.
источник
eval
в Perl и встроенная система сжатия ...Python 2, 250 байт:
Демо-версия:
источник
PowerShell v3 +,
227219 байт121 байт это просто список актеров ...
Принимает ввод
$args
и-split
выводит его с новой строки`n
. Передайте это к томуsort
, что отсортирует записи по возрастанию, что пока нормально. Мы передаем их в цикл foreach|%{...}
, каждая итерация принимает запись,-split
она в пробелах, затем-join
вторую половину обратно вместе с пробелом (т. Е. Убирая числа с начала). Эти (восходящие) отсортированные имена теперь остаются на конвейере. Мы направляем их через «где»,?
что гарантирует, что они являются-in
утвержденным списком действующих лиц. Наконец, мы используемselect
только-u
уникальные записи, которые для дубликатов выберут первую, с которой встречаются (т. Е. Наименее взвешенную), и отбросят остальные. Мы сохраняем результирующий массив имен в$a
.Итак, теперь у нас есть отсортированный возрастающий список актеров. Поскольку задача требует спуска, мы выполняем операцию реверсирования на
$a
месте, индексируя$a.count
снизу до0
.пример
Редактировать - не нужно использовать [массив] :: Reverse (), когда индексирование будет делать
источник
sort -Des
вместо обращения массива? Конечно, это может быть сломано в более поздних версиях PowerShell, но я не думаю, что это вероятно или реальная проблема;)select -u
бы он взял и сохранил самый высокий порядок, а не самый низкий, поэтому для моего примера позиции Дэниела Крейга и Роджера Мура поменялись местами. Мои попытки исправить это привели к увеличению длины кода, чем обращение массива.питон
309286 байтисточник
print
или после)
или]
JavaScript (ES6), 232 байта
объяснение
источник