Ваша задача состоит в том, чтобы отсортировать массив, содержащий строки «четверть», «десять центов», «никель» и «пенни», любое количество раз в произвольном порядке и отсортировать их так, чтобы они были в следующем порядке: quarter dime nickel penny
(другими словами, наибольшая или минимальная денежная стоимость).
правила
- Ваша программа должна принимать в качестве входных данных массив, содержащий названия монет США, и сортировать их по наибольшему или наименьшему по денежной стоимости.
- Для тех, кто не из США или не использует изменения, значения монет США, от наибольшего к наименьшему, составляют:
- Квартал: 25 центов
- Дайм: 10 центов
- Никель: 5 центов
- Пенни: 1 цент
- Для тех, кто не из США или не использует изменения, значения монет США, от наибольшего к наименьшему, составляют:
- Вы можете сортировать этот массив любым способом, если хотите, если выходные данные упорядочены по денежным значениям, показанным выше.
- Входные данные могут быть приняты любым способом, будь то аргументы командной строки или STDIN.
- Входной массив будет состоять из строчных букв, примерно так:
quarter dime nickel nickel quarter dime penny penny
- Фактический формат ввода и вывода зависит от вас.
Тестовые случаи
"penny nickel dime quarter"
-> "quarter dime nickel penny"
"nickel penny penny quarter quarter quarter dime dime dime dime"
-> "quarter quarter quarter dime dime dime dime nickel penny penny"
"quarter dime nickel nickel quarter dime penny penny"
-> "quarter quarter dime dime nickel nickel penny penny"
Это код-гольф , поэтому применяются стандартные правила и лазейки.
code-golf
string
array-manipulation
sorting
ckjbgames
источник
источник
Ответы:
Japt ,
53 байтаПроверьте это онлайн!
объяснение
Я также добавил функцию сортировки к своему языку за последние несколько недель :-)
ñ
принимает массив и функцию и сортирует массив, как если бы каждый элемент был отображен через эту функцию.g
Функция на строку занимает в рядуn
и возвращаетn
й символ в строке, обертывание , еслиn
отрицательна или мимо конца строки. Таким образом, строки могут быть выровнены следующим образом:9-й символ (0-индексированный) каждой строки выделен жирным шрифтом. Они в правильном порядке, поэтому все, что нам нужно сделать, это
ñg9
. (Хотя теперь, когда я оглядываюсь назад,ñg5
это также сработало бы ...)источник
V , 7 байт
Попробуйте онлайн!
При этом используется новая команда сортировки spiffy, которую я добавил в V около недели назад (
ú
). Сладкий выбор времени!Это работает путем сортировки каждой строки по умолчанию (значения ASCII), но игнорируя первое совпадение определенного регулярного выражения. В этом случае, регулярное выражение есть
(qu)?
, хотя оно имеет некоторые грубые вещи не ASCII, чтобы избежать использования обратной косой черты. Если вы игнорируете первые две буквы «четверти», он начинается с «а», а затем все монеты уже в алфавитном порядке.Неконкурентная версия, 4 байта
Эта функция уже была реализована, но я еще не тестировал ее, поэтому в ней была ошибка, которую я осознал только из-за этой проблемы. Там нет ссылки TIO, потому что TIO немного отстает.
Это работает путем обратной сортировки каждой строки, но игнорирует первый символ в каждой строке.
источник
Python, 36 байт
Безымянная функция, которая сортирует список по заданной ключевой функции.
Кусочки названия монеты затем,
arter
,dime
,ickel
, иpenny
- которые находятся в алфавитном (или , что более важно, порядковом) порядке.источник
el
c
Баш + coreutils, 18
Попробуйте онлайн .
источник
Python 3 ,
424138 байтБезымянная лямбда-функция, которая принимает входные данные в виде списка строк, сортирует по месту.
(Outgolfed Джонатаном Алланом)
Попробуйте онлайн!
Другие решения, с которыми я столкнулся:
источник
PowerShell , 21 байт
Попробуйте онлайн!
объяснение
Бесстыдно украл алгоритм в ответе ETHproductions (в основном). Я умножаю каждую строку на 3, а затем сортирую на основе 9-го символа полученной строки.
источник
$_
в PowerShell?1,2,3,4 | ForEach-Object { $_*2 }
будет выводить каждое число раз 2; блок скрипта запускается один раз для каждого элемента ввода.Желе , 4 байта
Попробуйте онлайн! (нижний колонтитул,
ÇY
объединяет результирующий список с переводами строки для более красивой распечатки.)Как?
N-й индекс списка в Jelly - это N-й элемент, начинающийся слева, считающий от 1 и возвращающийся к началу, когда это необходимо. (0-й справа, -1-й слева от этого и так далее).
Таким образом, шестой символ
['d','i','m','e']
является'i'
с шестью конгруэнтно два по модулю четыре.Шестой символ из четырех монет по порядку: кварт
e
, гi
, никl
, энниp
. Они расположены в алфавитном (или, что более важно, порядковом) порядке.Другим способом достижения того же результата будет сортировка по повернутым струнам
ṙ5µÞ
, гдеṙ
вращение направо, создание струн.erquart
,imed
,lnicke
, иpenny
.источник
питон , 32 байта
Попробуйте онлайн! Сортирует список по месту.
Идея состоит в том, чтобы использовать функцию сортировки клавиш без
lambda
. Хороший кандидат былx.strip
, который принимает строкуx
и удаляет ее левый и правый края всех символов на входе. Например,"abcdef".strip("faces") == "bcd"
.Метод
"npr".strip
принимает:которые лексикографически отсортированы. Я нашел строку
npr
грубой силой.npu
аnpt
также работают, и нет никого короче.источник
Bash (+ coreutils) 11 байт
Golfed
Как это работает
Обратная сортировка с использованием «ключа сортировки» от второго символа первого поля (слова) до конца строки, то есть:
Тестовое задание
Попробуйте онлайн!
источник
CJam , 8 байт
Попробуйте онлайн!
объяснение
источник
Пайк,
975 байтПопробуй это здесь!
источник
Сетчатка, 10
610 байт сэкономлено благодаря @ETHproductionsq
наb
b
обратно наq
Попробуйте онлайн .
источник
V ,
87 байт1 байт сохранен благодаря @DJMcMayhem
[Попробуйте онлайн!]
Смотрите ответ @ DJMcMayhem в V (на
10 байт меньше моего)Попробуйте онлайн!
Вот более старое решение на 1 байт больше, но оно мне действительно нравится.
V , 8 байт
[Попробуйте онлайн!]
Попробуйте онлайн!
объяснение
Теперь буфер будет в следующем формате:
Единственное, что осталось сделать сейчас, это переместить кварталы на вершину.
источник
:m0
альтернативное решение, чтобы сохранить байт (и связать меня)Úçq/:m0
:move
Japt , 3 байта
Попробуйте онлайн!
Пара других 3-байтовых решений:
Попробуйте онлайн!
Попробуйте это онлайн!
источник
T-SQL,
413634 байтаобъяснение
Предположим, что входные данные предварительно загружены в табличную переменную с именем
@
, именуемым одним столбцомa
, где каждое значение представляет собой одну монету для сортировки.select * from @
Часть шаблонные "получить все значения для возврата. Настоящая магия происходит вorder by
пункте.Используя ту же стратегию , как Johnathan Аллан , я сортирую по последним пяти символов (SQL возвращает всю строку , если она слишком коротка)
arter
,dime
,ickel
,penny
.источник
q
это следующая буква послеp
, так что для простого мода, чтобы получитьq
меньше, чемp
значение, должен быть факторq
, который является простым. Сначала вы могли бы вычесть 1, а затем модуль 7 сработал бы, но, вероятно, это заняло бы как минимум столько же байтов, сколько 113.JavaScript (ES6),
3533 байтаКонтрольные примеры
Показать фрагмент кода
источник
Befunge, 158 байт
Попробуйте онлайн!
Обработка и сортировка строк - это не те вещи, которые вы обычно хотите попробовать в Befunge, но это решение использует преимущества Джона Касунича. наблюдения том, что нам на самом деле ничего не нужно сортировать. Мы просто подсчитываем количество вхождений каждой монеты (которое легко определить по первому символу), а затем выводим столько имен каждой монеты в соответствующем порядке.
С точки зрения размера он все еще не вполне конкурентоспособен с другими языками, но этот подход, по крайней мере, лучше, чем он был бы, если бы мы попытались справиться с проблемой как с сортировкой строк.
источник
Pyth, 3 байта
демонстрация
На основе ETHproductions ответа «ы в Japt.
Объяснение:
источник
APL (Dyalog APL) , 11 байтов
Принимает и возвращает список строк.
Попробуйте онлайн!
{
анонимная функция:⍵[
...]
аргумент, проиндексированный⍋
восходящие показатели↑
матрица, строки которой дополнены5⌽
пяти шагов, повернутые¨⍵
предметы аргумента}
источник
Брахилог , 3 байта
Попробуйте онлайн!
Подход, украденный у ETHproductions 'Japt.
источник
Шелуха , 3 байта
Попробуйте онлайн!
Портировано из моего ответа на брахилоге, который отрывает ответ Japt от ETHproductions, но не является точным переводом, поскольку он использует вращение вместо простого элемента доступа к n-му элементу. Там я сделал это, потому
∋
что не позволяет индексировать после конца ввода (что, вероятно, весьма полезно во многих обстоятельствах из-за декларативного характера языка). В шелухи,!
делает пусть индексировать мимо конца ввода, с той же модульной оборачивания вокруг этого Japtñg9
использования, но это от 1 , поэтому эта программа , в частности , будет в конечном итоге один байт больше:Ö!10
.источник
Пакет, 82 байта
Принимает ввод в качестве аргументов командной строки и выводит в STDOUT. Работает путем объединения списков, полученных в результате фильтрации исходного списка на каждой монете.
источник
Рубин, 34 байта
ввод и вывод в виде массива строк
источник
Рубин, 31 байт
источник
Рубин, 30 байтов
Магические числа найдены методом проб и ошибок. Немного неуклюже, но короче, чем используя
.reverse
.источник
Perl 6 ,
40 3634 байтаПопытайся
Попытайся
Попытайся
Expanded:
источник
Mathematica, 50 байтов
источник
RProgN , 18 байт
Разъяснения
Попробуйте онлайн!
источник
Ява 8,
128112 байтЭто лямбда-выражение для
java.util.function.Function<String[],String[]>
Объяснение: Для каждой из 4 монет по порядку пройдите ввод и добавляйте название монеты к результату каждый раз, когда есть совпадение с уникальным персонажем этой монеты. Разделите результат на массив и верните его.
источник
Рубин, 27 байт
источник