В этом вызове, учитывая список призраков из Pac-Man, вы должны указать, каких призраков не хватает. Вы должны сделать это как можно меньше байтов
вход
Ввод будет состоять из строки или списка, который будет включать в себя число призраков, которые могут включать;
- Блинки
- чернильный
- мизинец
- Клайд
Однако ввод может также включать Pac-Man (с этой пунктуацией). Таким образом, максимальное количество элементов в списке будет пять в любом порядке. Можно предположить, что в списке не будет недопустимых элементов
Выход
Вывод будет состоять из строки или списка. Это будет включать всех призраков, которых нет на входе, в любом порядке. Однако, если Pac-Man находится на входе, все призраки будут считаться пропавшими (потому что он их ест).
Контрольные примеры
input: Clyde
output: Blinky, Inky, Pinky
alternate output: Inky, Pinky, Blinky
or one of the other 4 permutations
input: Clyde, Blinky # or however you delimit it
output: Inky, Pinky
alt: Pinky, Inky
input: Pac-Man, Clyde
Output: Blinky, Inky, Pinky, Clyde
or you could output one of the other 23 permutations
input:[null]
Output: Blinky, Inky, Pinky, Clyde
or you could output one of the other 23 permutations
Это код-гольф, поэтому чем меньше счет, тем лучше.
[null]
?Ответы:
Желе ,
2522 байтаЭто монадическая функция. Ввод / вывод в форме списков. Попробуйте онлайн!
Как это работает
источник
Сетчатка , 45 байт
Конечный перевод строки значителен. Вход и выход разделены запятыми.
Попробуйте онлайн! (Первая строка включает набор тестов, разделенных переводом строки.)
объяснение
Я не ожидал, что смогу показать последнее добавление Retina (этапы дедупликации) так скоро, но это действительно полезно для этой задачи. :)
Этап 1: Анти-Grep
Этапы анти-grep отбрасывают все строки, которые соответствуют заданному регулярному выражению. Регулярное выражение является справедливым,
-
а ввод всегда представляет собой одну строку, поэтому он отбрасывает все привидения, если вход содержитPac-Man
.Этап 2: Замена
Это просто добавляет фиксированную строку
,;BliNClyde,INPiN
. Это будет список призраков в выводе после некоторой очистки.Этап 3: Замена
Обратите внимание, что на предыдущем этапе мы написали три
*nky
призрака сN
символом (и пропустили запятую после них), а теперь расширим эту стенограмму, которая экономит пару байтов. Теперь после каждого призрака есть запятая, и у нас есть входные призраки и список всех призраков, разделенных точкой с запятой.Этап 3: дедупликация
Это новая часть. Этапы дедупликации находят все экземпляры заданного регулярного выражения и отбрасывают все сопоставленные подстроки, которые равны ранее сопоставленной подстроке. Регулярное выражение просто соответствует всем призракам, как на входе, так и в списке потенциальных выходов. Если вход содержит призрак, то тот же призрак будет снова сопоставлен во втором списке и отбрасывается. В противном случае призрак сопоставляется впервые во втором списке и сохраняется. Итак, после этого список после точки с запятой является желаемым результатом. Все, что осталось, это немного привести в порядок:
Этап 5: Замена
Мы просто сопоставляем все, вплоть до точки с запятой, а также запятую в конце строки и удаляем их.
источник
Python 3, 75 байт
Ввод - это запятая строка, а выводом будет список.
источник
if(x in s)<1
Часть умна! +1JavaScript ES6,
8578 байтКак анонимная функция
Сегодня я узнал об этой
filter
функции. Весело!15 байтов сохранено благодаря Нейлу.
Использование:
источник
Pac-Man
вне фильтра, я думаю, вы можете добавить его какa.includes("Pac-Main")||!a.includes(c)
в фильтре, после чего у вас есть только одно использование,g
и поэтому вы можете встроить его и превратить свой блок в выражение, избегая, таким образом,return
оператора.return
и{}
и сэкономил тонну байтов, спасибо!a.includes
сa[z="includes"]
(первым) иa[z]
(второй). Кроме того, я думаю, что вы можете сохранить другой байт, используя побитовое OR (|
) для ваших логических результатов вместо логического OR (||
).Pac-Man
это самый длинный возможный вход (и недействительные входы невозможно), мы можем проверить существование седьмого символа для теста наPac-Man
:c=>!a.includes(c)||a.some(v=>v[6])
. Использование этого с побитовым ИЛИ снижает счет до 78.Рубин,
5549 байтовПопробуйте онлайн!
-6 байт от @MartinEnder
Массивы Ruby могут подвергаться заданному вычитанию, что позволяет очень легко удалять соответствующих призраков.
источник
a*''
и сравнивает регулярные выражения с-
настоящим в имениPac-Man
. Если он присутствует, он ничего не вычитает из списка призраков, а если его нет, он вычитает входной список (поэтому каждый элемент в списке ввода удаляется из списка призраков)Perl, 51 байт
Код 50 байтов + 1 для
-n
использование
Я могу при необходимости изменить вывод, добавив пробел после каждого призрака, для замены + 3 байта
print$@
наprint"$@ "
.-6 байт благодаря @MartinEnder !
Perl, 53 байта
Код 51 байт + 2 для
-na
Альтернативное решение с использованием оператора smartmatch:
использование
Требуется разделенный пробелами список ввода:
источник
Pyth -
45 3835 байтЕще один байт благодаря Leaky Nun!
Ввод должен быть разделен пробелом, все строчные буквы; выводит недостающие призраки в отдельных строках, если на входе не указан pac-man.
источник
}\az
и проверяет,z
содержит ли письмоa
. 1 байт короче.C 171 байт
Передайте массив строк с нулевым символом в конце
f()
, и он выведет пропущенные имена.Попробуйте это на Ideone.
источник
PowerShell v4 +, 107 байт
Немного неуклюжий по сравнению с другими, так как в PowerShell отсутствует тернарный оператор или какой-либо
map
оператор стиля. В результате мы строим свои собственные.Принимает ввод
$n
как явный массив строк (например.\which-ghosts-are-missing.ps1 @('Clyde','Blinky')
,. Остальная часть программы представляет собой один псевдо-троичный, который состоит из массива, в который мы индексируем с помощью некоторой логики[...]
. Логика заключается в том, находится ли-
символ где-либо во входном массиве,-join
объединенном вместе в одну строку, а затем повторно привести в видеchar
массива, чтобы использовать-in
оператор. Таким образом, если онPac-Man
находится во входном массиве, это будет,$TRUE
и будет выбран второй элемент псевдо-троичного массива, иначе первый будет быть выбранным.Если дело
Pac-Man
не в массиве, выводится первая часть псевдо-троичного массива. Это комбинация входного массива,$n
объединенного с массивом всех призраков (сохраненных в$x
). Мы труба , что новый массив вGroup-Object
котором будет группа , как пункты вместе, а затем выберите с помощьюWhere-Object
(совмещенным с помощью|?{...}
только пунктов , где их.count
является-eq
UAL к1
. Это все инкапсулируются в круглых скобках, и мы выбираем.Name
свойство. Здесь требование v4 приходит, как и в v4, вы можете ссылаться на такую метку хеш-таблицы, а не на что-то подобное|Select Name
, что экономит несколько байтов.В противном случае, поскольку он
Pac-Man
находится во входном массиве, нам нужно вывести всех призраков. К счастью, мы уже сохранили их в$x
, так что это выбор в этом случае. В любом случае, конвейер теперь содержит строковый массив призраков, и вывод неявный.Примеры
источник
Python 2,
666196 байтВходные данные должны быть списком, выходными данными будет строка имен, разделенных символом
,
.Версия 61 байт, которая не обрабатывает Pac-Man:
источник
set[...]
. Просто используйте{...}
набор букв.Haskell, 91 байт
Ввод представляет собой список строк. Он решает, использовать ли список «как есть» или сделать разницу в списке в зависимости от наличия «Pac-Man».
Для дополнительного удовольствия здесь нет Pac-Man:
Будет улучшать этот ответ в ближайшее время, сделал это супер поздно ночью.
источник
Python 3, 77 байт
Вот еще один ответ на 89 байтов, с которым я играл, но не получилось :(
А вот оригинал на 85 байтов:
Все они принимают одну строку имен, разделенных пробелами / запятыми.
источник
05AB1E,
4744 байтаExplaination
Попробуйте онлайн
источник
Python 2, 151 байт
Поскольку в Python уже есть ответы с использованием наборов и строк, я решил ограничиться работой со списками, которые оказались довольно длинными и неконкурентными. Однако, поскольку выбранный подход отличается от используемого, вот он:
где ожидаемый ввод - это список строк.
Подход заключается в том, чтобы перебить все возможные комбинации (без учета порядка) из 0,1,2,3 и 4 элементов. Это сделано
который возвращается
и найдите тот, который, помимо списка ввода, приводит к полному списку призраков.
Затем проверяется, является ли строка
'Pac-Man'
частью ввода, и, если это так, возвращается весь список призраков. Если нет, возвращаются только те, которые не являются частью ввода.Обратите внимание, что список, содержащий все имена-призраки (
o
), отсортирован по алфавиту, и то же самое относится и к списку, созданному как (sorted(l+x)
). Это связано с тем, что в Python['a','b']==['b','a']
оценивается как,False
тогда['a','b']==['a','b']
как оценивается какTrue
.3 байта могут быть сохранены, если разрешено возвращать ответ в виде списка списков (удаляя
[0]
в конце первого понимания списка). Но так как я не уверен, что это правильный результат, я считаю их.источник
Объект Паскаль,
204200 байтДва цикла, использующие двоичный файл для определения присутствия ghosts + pacman. Принимает аргументы из командной строки. Спасибо @manatwork за сохранение еще нескольких байтов!
Ungolfed:
Старая версия с использованием набора,
227209 байтДва цикла, используя набор, чтобы найти, какие призраки + pacman присутствуют. Принимает аргументы из командной строки.
Ungolfed:
источник
integer
→byte
; удалить объявлениеg
и использовать его значение напрямую,ParamCount
→5
(как я понимаю задача, в любом случае не будет дублированных или недопустимых элементов ввода). По крайней мере, в FreePascal числовые литералы могут касаться ключевых слов, напримерi:=1to 5do
или5in s
. Посмотрите, поддерживает ли это вас тоже.set
было бы полезно использовать биты вместо вместо : pastebin.com/r2nB5wY3ParamCount
, что поведение не определено для чисел, больших, чем фактические входные параметры (по крайней мере, в документации ничего нет), даже если это работает.PHP программа, 84 байта
Примеры:
Функция PHP, 90 байт
принимает и возвращает массив, используйте пустой массив для пустого ввода, никаких других ложных значений!
дальнейшие мысли
in_array(...)
с ,strstr(join($argv),'-')
чтобы обнаружить-
вместоPac-Man
(-2)ereg('-',join($argv))
вместо этого (еще -2)register_globals
на<?print_r(
на<?=join(',',
(+2). Вы можете добавить;echo""
к вызову разрыв строкиисточник
JQ, 69 знаков
Входные данные - JSON, выходные данные - JSON, условный синтаксис - боль.
Образец прогона:
Он-лайн тест:
источник
TSQL (sqlserver 2016), 114 байт
Golfed:
Ungolfed:
скрипка
источник
Lotus Notes @Formula язык,
85847574 символов-1 символ путем изменения назначения @If
-9 Изменено @Contains (i; "-") на @Like (i; "% -%") и удалено @Trim (не требуется, если отображается с использованием пробела в качестве разделителя)
-1 путем удаления новой строки
Создайте форму с двумя полями: i (текст, редактируемый, многозначный) и o (текст, вычисляемый, многозначный). Введите следующую формулу в o:
В клиенте Notes создайте новый документ, используя форму, введите имя (имена) в поле i и нажмите клавишу F9, чтобы обновить документ. Ответ отображается в поле o.
Это использует тот факт, что @Like и @Replace могут использоваться как в строке, так и в списке строк.
источник
C #
135 байтов126 байтов(где я - строковый массив, содержащий входные данные)
Посмотрев на другие примеры, я вижу, что C # - довольно многословный язык :)
источник
Пайк,
4539383732 байтаПопробуй это здесь!
источник
Пакет, 141 байт
(Вычтите 6 байт,
:~1,-1
если допустимы начальные и конечные пробелы.) Требуется Pac-Man в заглавном регистре, но в призраках регистр не учитывается.источник
Japt , 38 байт (не конкурирует)
Принимает ввод как массив строк, выводит массив строк
Попробуйте онлайн
источник