Описание задачи
У вас есть музыкальная библиотека с большим количеством треков , записанных многими группами, каждая из которых имеет имя, как Queen
, Aerosmith
, Sunny Day Real Estate
, The Strokes
. Когда аудиопроигрыватель отображает вашу библиотеку в алфавитном порядке по имени группы, он обычно пропускает The
часть, поскольку многие названия групп начинаются с The
нее, упрощая навигацию по вашей медиаколлекции. В этой задаче, учитывая список (массив) строк, вам нужно отсортировать его таким образом (то есть пропустить The
слово в начале имени). Вы можете написать метод или полную рабочую программу.
Образцы входов / выходов
[Queen, Aerosmith, Sunny Day Real Estate, The Strokes] -> [Aerosmith, Queen, The Strokes, Sunny Day Real Estate]
[The Ramones, The Cure, The Pixies, The Roots, The Animals, Enrique Iglesias] -> [The Animals, The Cure, Enrique Iglesias, The Pixies, The Ramones, The Roots]
[The The, The They, Thermodynamics] -> [The The, Thermodynamics, The They]
Примечания / Крайние случаи
Сортировка лексический нечувствительна к регистру, поэтому
The Police
,The police
иthe police
все эквивалентны,Ваш алгоритм должен опускать только первое
the
слово, поэтому группы с именамиThe The
илиThe The Band
отсортированы по второмуthe
,Группа с именем
The
(трехбуквенное слово) сортируется нормально (без пропусков),Порядок двух групп с одинаковым названием, одна из которых начинается с
the
(например,The Police
иPolice
), не определена,Вы можете предположить, что если имя группы состоит из более чем одного слова, они разделяются одним пробелом. Вам не нужно обрабатывать начальные или конечные пробелы,
Все входные строки совпадают
[A-Za-z0-9 ]*
, то есть они будут состоять только из строчных и прописных букв английского алфавита, цифр и пробелов,Помните, что это задача для игры в гольф , поэтому сделайте ваш код как можно короче!
The
иThe The
? (Большинство ответов, вероятно, нужно будет изменить, если это что-то отличное от неопределенного)Ответы:
Python,
566264 байтаПопытайся
Спасибо @Chris H за то, что он указал, что
lstrip()
это не обрабатывалосьThe The
правильно, так как полоса уничтожала все подходящие символы и сортировал ее как пустую строку, и @manatwork за нахождение недостатка в использованииreplace()
. Новая версия должна работать.Старая версия:
источник
['The The', 'The', 'The Animals', 'Thermodynamics', 'The They']
. 2-й крайний вариант предполагает, что сит должен быть [«Животные», «The», «The», «Thermodynamics», «The Они»] (или поменяйте местами 2-й и 3-й пункты). Немного возни с предположением, что пространство внутриstrip('the ')
игнорируется - попробуйтеfor x in ['The The', 'The They', 'Thermodynamics', 'The', 'The Animals']: print (x.lower().strip('the '))
replace()
не намного лучше:'what the snake'.replace('the ','',1)
результаты'what snake'
.V ,
3228 байтПопробуйте онлайн!
Примечание для себя: сделайте аббревиатуру для
:sort
того, чтобы мне не понадобилось 6 целых байтов для одной команды!Объяснение:
источник
the
все в нижнем регистре, какthe pAper chAse
?Сетчатка , 34 байта
Конечный перевод строки является значительным.
I / O - одна полоса на линию.
Попробуйте онлайн!
объяснение
Дублируйте каждую строку, используя
;
в качестве разделителя.Переверните все перед
;
строчными буквами.Удалите все
the
s, которые появляются в начале строки.Сортировка строк.
Удалите начала строк, которые мы использовали для сортировки.
источник
(?i:the )?(.*)
/\L$1\E;$0
/Пайк, 16 байт
Попробуй это здесь!
источник
Perl, 52 байта
-13 байт благодаря @manatwork
-1 байт благодаря @ msh210
Одна полоса на строку в качестве входных данных, и поэтому является выходной.
Реализация довольно проста: программа печатает список диапазонов, отсортированный с помощью пользовательской функции (
f
), которая возвращает имя диапазона в нижнем регистре без возможного началаthe
.источник
sub f{lc$_[0]=~s/^the //ir}
.lc
параметра, ниi
флага в подстановке. Или вы встречали тестовый случай, где это не работает?perl -e 'sub f{lc$_[0]=~s/^the //ri}print sort{f($a)cmp f$b}<>' <<< $'Queen\nAerosmith\nSunny Day Real Estate\nThe Strokes'
.lc pop
вместоlc$_[0]
иsay
вместоprint
. (Последнее требует-M5.01
, что бесплатно.) Протестировано в Strawberry 5.20.2 только с первым контрольным примером из вопроса.Python,
667269 байтИспользует
sorted
метод Python сkey
ключевым словом аргумент для сортировки по имени минус «The». Это лямбда; чтобы назвать это, дать ему имя, поставивf=
перед.Теперь с дополнительной нечувствительностью к регистру!
источник
the
, в этом случае этот метод не будет работать должным образом.Рубин, 42 байта
Попробуйте онлайн!
источник
Perl 6 , 26 байт
Объяснение:
Тест:
источник
PowerShell v2 +,
333229 байтСохранено 3 байта благодаря @MathiasRJessen
Ввод осуществляется через аргументы командной строки. Сортирует исходные имена на основе результатов блока скрипта,
{...}
который выполняет регулярное выражение-replace
для удаления ведущих (без учета регистра)"the "
.Примеры
источник
-replace
по умолчанию нечувствителен к регистру,'^the '
будет достаточно для шаблонаJavaScript / ECMAScript 6
9370 байт70 Спасибо Нейлу и Даунгоату за совет
Читаемая версия для 70-байтового варианта
93
Читаемая версия для 93-байтового варианта
источник
^
в нем? Кроме того, localeCompare нечувствителен к регистру в моей системе, поэтому мне не нужен былtoLowerCase
только/i
флаг в регулярном выражении. Наконец, вы можете изменить это следующим образом:B=>B.sort((a,b)=>...,R=s=>...)
-sort
игнорирует дополнительный параметр, который устанавливаетсяR
.^
shuold идет в начале регулярного выраженияJava 8, 178 байт
Безголовая версия:
Звоните как таковой:
источник
void q(String[]s){...}
наs->{...}
. И вы можете изменить как(x.toLowerCase().startsWith("the ")?x.substring(4):x)
сx.replaceFirst("(?i)the ","")
. Итого получается:s->{java.util.Arrays.sort(s,(a,b)->a.replaceFirst("(?i)the ","").compareToIgnoreCase(b.replaceFirst("(?i)the ","")));}
- 118 байтовs->{ ... }
недопустимых ответах, и мне нужно было иметь полную сигнатуру метода с типами и еще много чего. Я не знаю, изменилось ли это с тех пор.Ним , 96 байт
Те
import
занимают так много байтов:|
Перевод моего Python ответа .
Это анонимная процедура; чтобы использовать это, это должно быть передано в процедуру тестирования. Вот полная программа, которую вы можете использовать для тестирования:
источник
Haskell, 84 байта
Позвонить с
Прецедент:
источник
MATL , 16 байт
Формат ввода (каждая строка соответствует тесту)
Попробуйте онлайн!
объяснение
источник
C #, 139 байт
Попробуйте онлайн!
Без учета использования ответ будет 102 байта.
источник
ToLower()
из-за нечувствительного к регистру требованияl=>l.OrderBy(b=>(b.ToLower().StartsWith("the ")?b.Substring(4):b));
Для 67 байт , а затем вам нужно добавить наusing System.Linq;
слишкомToLower
из-за нечувствительного к регистру требования. В противном случае порядок будет чувствительным к регистру.BASH, 64 байта
Ввод: стандартный ввод, одна полоса на строку. Выход: стандартный вывод
Примечание. Во вторых заменах (s / ^ The / / и s / ^ / The /) используется символ табуляции, поэтому они не всегда правильно копируют / вставляют.
источник
Bash + coreutils, 44 байта
Пояснение: формат ввода и вывода - одна полоса на строку
Тестовый прогон (используя здесь документ с EOF в качестве маркера конца):
Выход:
источник
Vim, 18 байт
Теперь, когда я понял, что это возможно, меня немного смущает мой 26-байтовый V-ответ, тем более что V должен быть короче, чем vim. Но это в значительной степени встроенный.
Пояснение (прямо из справки vim):
источник
C
216212135 + 5 (qsort
) =221217140 байтНу, я наконец-то нашел время закончить это
C
. Советы по гольфу очень ценятся.В этом представлении
M
будет представлена функция сравненияqsort
. Поэтому, чтобы вызвать это, вы должны использоватьqsort
в формате,qsort(argv++,argc--,8,M)
гдеargv
содержатся аргументы командной строки иargc
количество предоставленных аргументов.Попробуйте онлайн!
источник
05AB1E , 27 байт (не конкурирует)
Попробуйте онлайн!
объяснение
источник
Groovy, 34 байта
41% мой ответ:
.toLowerCase()
убей меня сейчас.Выход
Когда работает ...
Результат ...
[The Animals, The Cure, Enrique Iglesias, The Pixies, The ramones, The Roots]
Без отладки или вывода ошибок.
источник
q / kdb +,
3633 байтаРешение:
Пример:
Объяснение:
Удалите все «[Tt] he» из каждой входной строки, отсортируйте этот список, затем отсортируйте исходный список на основе индексации отсортированного списка.
источник
Japt ,
1110 байтПопытайся
источник
Java
176158 байтОсновная функция
); }
Функция сортировки по гольфу:
источник
the
. Сортировка должна быть без учета регистра.public String[]sort(String[]names){ for(int i=-1;++i<names.length;) names[i]=names[i].replaceFirst("(the|The)", ""); return Arrays.sort(names,String.CASE_INSENSITIVE_ORDER); }
С и The должен работать, и строки неизменныArrays.sort
возвращает тип voidthe pAper chAse