Помогите! Мои полностью автоматизированные фары от Darks Separator V3001.01 сломались! :(
Методические рекомендации
задача
Напишите программу, которая будет принимать входные данные массива (или списка на некоторых языках) любого количества строк, которые представляют собой либо букву L, либо букву D (представляющую свет или штрихи), и выводят массив, содержащий два массива, один со всеми буквами «L» и со всеми буквами «D».
правила
- Это код гольф, поэтому выигрывает самый короткий ответ в байтах
- На входе будут только прописные буквы
- На выходе должно быть одинаковое количество букв L и столько же, сколько на входе.
- Вход может иметь только один элемент (или, может быть, даже нулевые элементы)
- Если один или оба выходных массива не содержат элементов, выведите пустой список (в некоторых языках это может означать, что вам нужно вывести строку)
- Всегда иметь первый массив быть массивом L
Пример вывода:
["L","D","L","D","D"] -> [["L","L"],["D","D","D"]]
["L","L","L"] -> [["L","L","L"],[]]
["D","D"] -> [[],["D","D"]]
[] -> [[],[]]
code-golf
array-manipulation
sorting
Amorris
источник
источник
"LDLDD" -> "LL DDD"
или что-то подобное?["L","L",["D","D","D"]]
.Ответы:
APL, 8 байт
Объяснение:
⊂
: закрытый вход~⍨¨
: без каждого'DL'
: 'D' и 'L'Примеры:
источник
'DL'
а нет'LD'
?'LD'∩⍨¨⊂
или⍞∘∩¨'LD'
может быть проще объяснить.Python 3 , 37 байт
Попробуйте онлайн!
источник
Haskell , 28 байт
Попробуйте онлайн!
Если на входе может быть список символов, то
[]
вокругc
можно удалить.источник
PHP, 46 байт
Предполагается, что данный список:
$arr = ['L','L','D','D','L','D','D','D','D','L'];
foreach($arr as $b){$a[$b][]=$b;};print_r($a);
источник
$argv
вместо$arr
и ожидать, что скрипт будет запускаться из командной строки какphp -f golf.php L L D D L D D D D L
- но с другой стороны вы должны обойти $ argv [0], который является именем файлаfor(;$b=$argv[++$i];)$a[$b][]=$b;print_r($a);
или<?foreach($_GET as$b)$a[$b][]=$b;print_r($a);
Mathematica, 27 байт
Чистая функция, принимающая список
L
s иD
s (символы, а не символы / строки) в качестве входных данных и возвращающая список из двух списков. Например,возвращается
{{L, L, L}, {D, D}}
. Попробуйте онлайн!Gather
сам по себе близок к тому, что мы хотим, но не соответствует спецификации двумя способами: он не создает пустые списки, если на входе отсутствуютL
s илиD
s, и не всегда сортируетL
s влево. Замена вход#
с{L,D}~Join~#
решает обе проблемы сразу: это означает , что будет по крайней мере один ,L
и по меньшей мере одинD
, аL
с будет возвращен первый так какL
была обнаружена в первую очередь.Rest/@
затем удаляет начальныйL
иD
.(Я пробовал использовать решение
Count
, но из-за проблем с каррингом оно не оказалось короче:±q_:=#~Table~Count[q,#]&/@{L,D}
31 байт.)источник
Cases@@@{{#,L},{#,D}}&
22 байтов?Haskell, 32 байта
Просто скучная библиотечная функция.
Попробуйте онлайн!
источник
Рубин , 26 байт
Попробуйте онлайн!
источник
PHP7,
5245 байт-7 байт благодаря @ Jörg Hülsermann
Использовать с CLI как
php -r a.php L L L D D L D
Скрипт просматривает предоставленные аргументы и добавляет их в массив в зависимости от его значения.
источник
-r
опции вместо-f
удаления<?php
и удаления пробела послеas
Common Lisp,
6665 байтПопробуйте онлайн!
Если вместо строк мы используем символы, то они намного короче:
Common Lisp,
424140 байтПопробуйте онлайн!
источник
Ракетка , 48 байт
Просто примените эту анонимную функцию, например, к
'(L D L D D L)
источник
Mathematica,
2218 байт4 байта сохранены гением CalculatorFeline!
Попробуйте онлайн или в песочнице Wolfram !
Ввод - это список символов
L
иD
- не строк, а только сами буквы, как в ответе Грега Мартина . Синтаксис представляет#|L
собой сокращенныйAlternatives[#,L]
, но@@@
синтаксис заменяет головаAlternatives
сCases
, так что этот код эквивалентен{Cases[#,L],Cases[#,D]}&
.источник
{#,x}
может быть#|x
для -4 байта.@@
и@@@
работать с любой головой, а не толькоList
. Если|
не работает, то вы можете сохранить в некоторых случаях с&&
,||
или**
..
и арифметические операторы.#.L|#.D
Java 8, 105 байт
Советы приветствуются.
Новое в PPCG, я должен включитьimport java.util.*;import java.util.stream.*;
в число байтов?Не конкурирующий, он не создает пустые списки с пустым вводом. Спасибо Nevay за сохранение некоторых байтов.
источник
Stream#of
вместо,Arrays#stream
чтобы уменьшить импортjava.util.stream.*
и"D"::equals
вместоk->k.equals("D")
. Кроме того, код не соответствует требованиям, так как он не выводит пустой список, если нетL
/D
присутствует (контрольные примеры 2-4).Пролог (SWI) ,
42, 37 байтПопробуйте онлайн!
Учитывая, что
W
это список стирки,w/3
будет объединенL
иD
в списки Светов и Темных, соответственно, путем разделения стирки на предикат, который успешно выполняется, если предмет является Светом.[Редактировать: гольф -5 благодаря Fatalize ]
источник
l('L').
на 5 байт корочеl(X):-X='L'.
Japt ,
131210 байтПротестируйте это (
-Q
пометьте только для визуализации)объяснение
Неявный ввод массива
U
.Генерация массива
[0,1]
и передача каждого элемента через функцию,X
являющуюся текущим элементом.Фильтр
U
, проверяя на равенство ...... с символом в строке
LD
в индексеX
.источник
¥
должно работать ...»[["L","L","D","D"],[]]
«Нет, не собираюсь туда :)» - я 2017¥
.Pyth ,
109 байтовТестовый пакет .
источник
.g
кажется короче .05AB1E , 8 байтов
Попробуйте онлайн!
источник
Javascript (ES6), 37 байт
Это основано на (теперь удаленном) ответе Javascript (ES6).
Безголовая версия:
Пример кода:
источник
C #, 61 байт
Полная / Отформатированная версия:
источник
F # , 37 байт
Попробуйте онлайн!
Принимает input как список строк и возвращает два списка, первый с элементами, где
fun a -> a="L"
true, а другой с элементами, которые приводят к false.источник
Желе , 10 байт
Попробуйте онлайн!
В Jelly строка представляет собой список 1-символьных строк Python, например
['a', 'b', 'c']
. Вот почему вы получаете вывод, например[[['L'], ['L']], [['D'], ['D'], ['D']]]
, поскольку 1-символьные строки Jelly ведут себя одинаково.Не работает как полная программа, поэтому
ÇŒṘ
внизу.источник
string->char[]
автоматически?W€€
часть.Перс , 21 байт
Я мог или не мог реализовать функцию раздела списка специально для этой задачи. Принимает входные данные в виде массива строк.
источник
Шелуха , 7 байт
Попробуйте онлайн!
объяснение
источник
Java 8,
110106 байт-4 байта благодаря @Nevay .
Объяснение:
Попробуй это здесь.
источник
a->{String[]r={"",""};for(char c:a)r[c/69]+=c;return new char[][]{r[1].toCharArray(),r[0].toCharArray()};}
(-4 байта)Октава, 21 байт
Ввод - это массив символов, вывод - это массив ячеек. Восстановлено из моего ответа здесь .
Пример исполнения на идеоне .
источник
R 35 байт
Попробуйте онлайн!
Читает со стандартного ввода.
источник
Юлия, 26 байт
источник
Haskell (Lambdabot), 41 байт
Попробуйте онлайн!
источник
PowerShell , 27 байт
Попробуйте онлайн!
Изменить: ранее
$args.where({$_-eq'L'},'sp')
для 28 байтов. Может быть$args.where({+"0x$_"},'sp')
для 27, если не для правила, что L должны быть на первом месте.источник
CJam , 14 байтов
Ввод - это список символов (строка), вывод - это список списков символов (список строк).
Попробуйте онлайн!
Объяснение:
источник
Perl 5 , 70 байт
Попробуйте онлайн!
источник