Задний план
В Boggle раунд оценивается путем суммирования баллов за каждое уникальное слово, найденное игроком (т.е. любое слово, найденное более чем одним игроком, стоит 0 баллов). Очки рассчитываются на основе количества букв в каждом слове следующим образом:
3 буквы: 1 балл
4 буквы: 1 балл
5 букв: 2 балла
6 букв: 3 балла
7 букв: 5 баллов
8 или более букв: 11 баллов
Вызов
В этом задании напишите программу или функцию, которая принимает список списков строк, представляющих слова каждого игрока, и выводит список оценок игроков. Вы можете предположить, что будет не менее 2 игроков, и все слова будут состоять из 3 или более букв и будут все в нижнем регистре (или все в верхнем регистре, если вы предпочитаете). Вы также можете предположить, что каждый игрок будет использовать каждое слово только один раз; то есть ни в одном списке игроков не будет дубликатов. Это код гольфа, поэтому выигрывает самый короткий ответ в байтах.
правила
Входные данные могут быть приняты в любом разумном формате. Примеры включают в себя список списков строк, список строк, разделенных запятыми, строку, разделенную запятыми, в каждой строке ввода и т. Д. Вывод может быть в виде списка целых чисел (или эквивалента вашего языка), или вы можете напечатать значения в стандартный вывод, используя разделитель по вашему выбору (например, перевод строки).
Тестовые случаи
Вход => Выход
[["cat","dog","bird","elephant"],
["bird","dog","coyote"],
["dog","mouse"]] => [12,3,2]
[["abc","def","ghi"],
["ghi","def","abc"]] => [0,0]
[["programming","puzzles"],
["code","golf"],
[]] => [16,2,0]
источник
f
вместо-
R ,
142126121117 байтПопробуйте онлайн!
Принимает
L
в качестве списка векторов строк; возвращает значенияСначала это
unlist
слова, которые находят дубликаты, а затем удаляют их из списков слов игроков. Затем он берет эти уникальные списки слов и вычисляет баллы каждого из них, используяpmin
для того, чтобы слова длиннее 8 были оценены как 11.источник
function(L)sapply(L,function(x)sum(c(1,1,2,3,5,11)[pmin(6,nchar(x[!x%in%(l=unlist(L))[duplicated(l)]])-2)]))
JavaScript (ES6), 92 байта
Несколько похоже на ответ Рика Хичкока, но создано в основном независимо; Я использовал другой метод summing (
reduce
) и другой метод для проверки повторяющихся членов (filter
+includes
). Благодарю его за идею проверить товар,[1]
а не проверить.length>1
.Тестовые случаи
Показать фрагмент кода
источник
s+=
и удаляя скобки вокруг троичных. И еще 3, используяmap
вместоreduce
: tio.run/##NY/…reduce
иincludes
делает ваш ответ совершенно отличным от моего.JavaScript (ES6),
10693 байта[Сохранено 13 (!) Байтов, благодаря Арно, Шегги и Джолли Джокер.]
Тестовые случаи:
Показать фрагмент кода
источник
c[7]?11:c[6]?5:c[5]?3:c[4]?2:1
на'00011234'[c.length]||11
.[15,2,0]
вместо[16,2,0]
последнего контрольного примера, но это, вероятно, легко исправить. После работы поработает еще немного, если вы не отправите гениальный ответ (как вы обычно это делаете). Благодарность! :)'00011235'
.'11235'[c.length-3]||11
, верно?Perl 6 , 64 байта
Попробуйте онлайн!
источник
Pyth , 26 байт
Использует формулу H.PWiz в .
Проверьте все контрольные примеры.
Начальная версия, 33 байта :
Проверьте все контрольные примеры.
объяснение
источник
Haskell ,
7675 байтПопробуйте онлайн!
источник
Japt ,
292524232120 байтПопытайся
объяснение
Неявный ввод массива
U
.Отобразите массив (
Ë
) и уменьшите каждый вложенный массив добавлением (x
) после передачи его элементов через следующую функцию, гдеX
находится текущее слово.Count (
è
) элементы,U
которые содержат (ø
)X
.Проверьте, равно ли это 1.
Логическое И (
&&
).Вычтите (
n
) 3 из минимума (m
) 8 и длины (Ê
) изX
.Факториал, квадратный корень и округление вверх соответственно.
источник
Python 2 ,
1061058884 байта-1 байт благодаря Джонатану Фреку
-1 (17) байт благодаря reffu
Попробуйте онлайн!
источник
Желе , 26 байт
Попробуйте онлайн!
источник
Java 8,
202200198 байтИЛИ (также 198 байт )
Можно определенно играть в гольф. К сожалению, в Java нет встроенных или коротких методов для удаления всех элементов всех списков, присутствующих в нескольких.
Объяснение:
Попробуй это здесь.
источник
R, 117 байт
Совершенно другой подход от другого ответа R :
Тестовые случаи:
Принимает имена, встречающиеся в списке только один раз, преобразует их длину в коэффициент, основанный на заданных точках отсечения, и переводит его в баллы, которые затем суммируются.
источник
Perl 5 , 104 + 2 (-na) = 106 байт
Попробуйте онлайн!
источник
Clojure, 102 байта
next
возвращает,nil
если есть только одно словоw
:)источник
PHP , 226 байт
Я думаю, что это все еще можно урезать немного.
Ungolfed:
Попробуйте онлайн!
источник
Scala , 242 байта
Функция принимает в качестве параметра
a
aSeq[Set[String]]
и возвращаетArray[Int]
. Я использую массив для того, чтобы он был изменчив (потеря 4-х символов).Попробуйте онлайн!
Может быть оптимизируемым, так как я даже не работал над
часть. Спасибо за этот вызов!
источник
Swift 4 , 164 байта *
Вышеприведенное выражение является технически правильным, чисто Swift. Однако выражение настолько сложное, что из-за экспоненциального всплеска в системе вывода типов не может быть обработано, пока компилятор не сдастся после некоторого произвольного тайм-аута (например, 15 с или около того).
Чтобы сделать это выражение компилируемым с текущим компилятором, его можно разбить следующим образом:
Тестовые случаи:
Сломано:
источник
ASP + Python , 137 байт
Ожидает данные в формате:
Требуется clingo 5.2.1 с поддержкой Python.
Ungolfed:
Функция Python сильно вдохновлена ответом Python .
источник