fundo
No Boggle , uma rodada é pontuada somando os pontos para cada palavra única que um jogador encontrou (ou seja, qualquer palavra que mais de um jogador tenha encontrado vale 0 ponto). Os pontos são calculados com base no número de letras em cada palavra, da seguinte maneira:
3 letras: 1 ponto
4 letras: 1 ponto
5 letras: 2 pontos
6 letras: 3 pontos
7 letras: 5 pontos
8 ou mais letras: 11 pontos
Desafio
Nesse desafio, escreva um programa ou função que inclua uma lista de listas de strings representando as palavras de cada jogador e produza uma lista das pontuações dos jogadores. Você pode assumir que haverá pelo menos 2 jogadores e todas as palavras terão 3 ou mais letras e serão todas em minúsculas (ou todas em maiúsculas, se preferir). Você também pode assumir que cada jogador usará cada palavra apenas uma vez; isto é, nenhuma lista de jogadores conterá duplicatas. Isso é código de golfe, então a resposta mais curta em bytes vence.
Regras
A entrada pode ser obtida em qualquer formato razoável. Os exemplos incluem uma lista de listas de strings, uma lista de strings separados por vírgula, uma string separada por vírgula em cada linha de entrada, etc. A saída pode estar na forma de uma lista de números inteiros (ou o equivalente no seu idioma) ou você pode imprimir os valores para stdout usando um separador de sua escolha (como uma nova linha).
Casos de teste
Entrada => Saída
[["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]
fonte
f
vez de-
R ,
142126121117 bytesExperimente online!
Toma
L
como uma lista de vetores de strings; retorna os valores.Primeiro, são
unlist
as palavras, encontra as duplicatas e as remove das listas de palavras dos jogadores. Em seguida, ele pega essas listas de palavras exclusivas e calcula as pontuações de cada uma delas,pmin
para garantir que palavras com mais de 8 sejam pontuadas como 11.fonte
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 bytes
Um pouco semelhante à resposta de Rick Hitchcock, mas criada principalmente de forma independente; Eu usei um método diferente de summing (
reduce
) e um método diferente para verificar termos repetidos (filter
+includes
). Crédito a ele pela idéia de verificar o item em[1]
vez de verificar.length>1
, no entanto.Casos de teste
Mostrar snippet de código
fonte
s+=
e removendo os parênteses ao redor dos ternários. E 3 mais, usandomap
em vez dereduce
: tio.run/##NY/...reduce
eincludes
sua resposta são bem diferentes das minhas.JavaScript (ES6),
10693 bytes[Salvou 13 (!) Bytes, graças a Arnauld, Shaggy e JollyJoker.]
Casos de teste:
Mostrar snippet de código
fonte
c[7]?11:c[6]?5:c[5]?3:c[4]?2:1
por'00011234'[c.length]||11
.[15,2,0]
vez do[16,2,0]
último caso de teste, mas provavelmente isso é facilmente corrigido. Trabalhará um pouco mais depois do jantar, a menos que você poste uma resposta genial (como costuma fazer). Obrigado! :)'00011235'
.'11235'[c.length-3]||11
, certo?Perl 6 , 64 bytes
Experimente online!
fonte
Pitão , 26 bytes
Usa a fórmula de H.PWiz .
Verifique todos os casos de teste.
A versão inicial, 33 bytes :
Verifique todos os casos de teste.
Explicação
fonte
Haskell ,
7675 bytesExperimente online!
fonte
Japt ,
292524232120 bytesTente
Explicação
Entrada implícita da matriz
U
.Mapeie a matriz (
Ë
) e reduza cada sub-matriz adicionando (x
) depois de passar seus elementos pela função a seguir, ondeX
está a palavra atual.Count (
è
) os elementosU
que contêm (ø
)X
.Verifique se é igual a 1.
AND lógico (
&&
).Subtraia (
n
) 3 do mínimo de (m
) 8 e do comprimento (Ê
) deX
.Fatorial, raiz quadrada e arredondada, respectivamente.
fonte
Python 2 ,
1061058884 bytes-1 byte graças a Jonathan Frech
-1 (17) bytes graças a reffu
Experimente online!
fonte
Geléia , 26 bytes
Experimente online!
fonte
Java 8,
202200198 bytesOU (também 198 bytes )
Definitivamente, você pode jogar golfe .. Infelizmente, o Java não possui build-ins ou métodos curtos para remover todos os itens de todas as listas que estão presentes em múltiplos.
Explicação:
Experimente aqui.
fonte
R, 117 bytes
Uma abordagem completamente diferente da outra resposta R :
Casos de teste:
Pega os nomes que ocorrem apenas uma vez na lista, converte seu comprimento em um fator com base nos pontos de corte especificados e converte isso em pontuações que são somadas.
fonte
Perl 5 , 104 + 2 (-na) = 106 bytes
Experimente online!
fonte
Clojure, 102 bytes
next
retornanil
se houver apenas uma palavraw
:)fonte
PHP , 226 bytes
Eu acho que isso ainda pode ser um pouco reduzido.
Ungolfed:
Experimente online!
fonte
Scala , 242 bytes
A função recebe, como parâmetro
a
,Seq[Set[String]]
ae retorna anArray[Int]
. Eu uso uma matriz para que seja mutável (perda de 4 caracteres).Experimente online!
Pode ser otimizado, já que eu nem trabalhei no
parte. Obrigado por este desafio!
fonte
Swift 4 , 164 bytes *
A expressão acima é tecnicamente correta, pura Swift. No entanto, a expressão é tão complexa que, devido a uma explosão exponencial no sistema de inferência de tipo, não pode ser processada antes que o compilador desista após um tempo limite arbitrário (como 15s ou algo assim).
Para tornar essa expressão compilável com o compilador atual, ela pode ser dividida assim:
Casos de teste:
Quebrado:
fonte
ASP + Python , 137 bytes
Espera dados formatados como:
Precisa de clingo 5.2.1 com suporte a python.
Ungolfed:
A função python é fortemente inspirada na resposta python .
fonte