Desafio:
Pegue uma sequência de letras maiúsculas ou minúsculas como entrada (opcional) e calcule a pontuação que essa sequência obteria em um jogo de Scrabble em inglês.
Regras:
A pontuação de cada letra é a seguinte (use isso mesmo se houver outras versões do jogo):
1 point: E, A, I, O, N, R, T, L, S, U
2 points: D, G
3 points: B, C, M, P
4 points: F, H, V, W, Y
5 points: K
8 points: J, X
10 points: Q, Z
A pontuação de uma string é simplesmente a soma da pontuação de cada uma das letras usadas. Você pode assumir que você tem muitos blocos disponíveis; portanto, palavras longas e palavras com muitas das mesmas letras são entradas válidas.
Casos de teste:
ABC -> 7
PPCG -> 11
STEWIE -> 9
UGPYKXQ -> 33
FIZZBUZZ -> 49
ABCDEFGHIJKLMNOPQRSTUVWXYZ -> 87
A resposta mais curta em cada idioma vence! Os formatos de entrada e saída são flexíveis; portanto, você pode usar a entrada como uma matriz de caracteres (maiúscula ou minúscula), se desejar.
Respostas:
sed 4.2.2 , 81
A saída é unária .
Reduz cada letra a uma combinação de letras com pontuação mais baixa até que todas as letras tenham 1 pontuação. Em seguida, substitui aqueles com
1
s para fornecer uma contagem unária.Experimente online!
fonte
Haskell ,
8684 bytesExperimente online!
Explicação
A maioria das letras dá uma pontuação de 1 e, portanto, não precisamos controlá-las. Em vez disso, apenas diminuímos cada pontuação (economiza 1 byte
10
também) e adicionamos o comprimento da string à pontuação resultante.Obrigado @nimi por -2 bytes (reorganizando as palavras e usando em
[1..]
vez de[4,3..]
)!fonte
zip[1..]$words"DG BCMP FHVWY K . . JX . QZ"
dá outra alternativa com o mesmo comprimentoOitava , 50 bytes
Experimente online!
Desafio aceito. Explicação:
fonte
-47
mas isso é um código de golfe para você!==
isso no Octave. Não funciona no MATLAB. Bom saber.bsxfun
) também é mais curta, com 61 bytes: Experimente online!Beatnik , 733 bytes
Já que realmente precisava ser feito, aqui está. Foi realmente desagradável depurar e forneceu alguns desafios.
A entrada deve conter apenas letras maiúsculas. A saída é unária (espero que esteja tudo bem?)
Experimente online!
O processo geral é:
Termina com um erro.
Uma explicação mais completa:
fonte
Brain-Flak ,
210, 204, 198, 184, 170 bytesExperimente online!
Obrigado a @JoKing por salvar 14 bytes!
Versão legível:
fonte
Pitão, 40 bytes
Experimente aqui
Explicação
fonte
Python 2 , 78 bytes
Experimente online!
Versão mais curta, porta da resposta de DanielIndie ,
7170 bytes-1 byte graças a Sunny Patel
Experimente online!
fonte
JavaScript (Node.js) ,
71666362 bytesExperimente online!
fonte
Java 8,
757170 bytes-1 byte, alterando
"02210313074020029000033739".charAt(c-65)-47
para não imprimíveis (e dois\n
) para que-47
possa ser removido. Inspirado pela resposta Octave da @Sanchises .Experimente online.
fonte
Oitava / MATLAB, 85 bytes
Experimente online!
fonte
Geléia , 19 bytes
Um link monádico que aceita uma lista de caracteres maiúsculos que retorna um número inteiro
Experimente online! Ou veja a suíte de testes .
Quão?
fonte
R ,
90bytes 63Experimente online!
Recebe a entrada como uma sequência maiúscula. R lida com imprimíveis e seqüências de linhas múltiplas sem problemas, então isso é bom. Agora estamos quase o dobro do pacote externo!
E porque o CRAN tem tantos brindes aleatórios:
R + ScrabbleScore 31 bytes
Experimente online!
Infelizmente,
sws
verifica a validade por padrão.fonte
utf8ToInt
vez de,match
e consegui diminuir um pouco mais!Emojicode , 358 bytes
Experimente online!
Explicação:
Alterei os nomes das variáveis de letras simples para palavras mais significativas e ampliei algumas partes do meu código para torná-lo mais legível para pessoas não familiarizadas com o idioma. Você pode testar o programa expandido aqui .
fonte
05AB1E , 21 bytes
Recebe a entrada como uma lista minúscula de caracteres.
Experimente online! ou como um conjunto de testes
fonte
Oitava , 73 bytes
Experimente online!
Usa
ismember
para mapear cada caractere no fluxo de entradax
para seu índice na cadeia de pesquisa'QZJXKFHVWYBCMPDG'
. Qualquer elemento não encontrado será mapeado para um índice de 0 (isso incluirá os caracteres de 1 ponto).Em seguida, adicionamos 1 ao índice para fazer com que os 0 se tornem referências de 1 índice válidas e pesquisamos na string
'09977433333222211'
. Este é um elemento mais longo que a primeira cadeia de pesquisa. Os dígitos representam o valor do ponto de cada elemento na string original, menos 1, com o elemento extra sendo um '0' nobeginning
.Finalmente, a sequência resultante é convertida em números inteiros subtraindo
47
('0'-1
), produzindo o valor do ponto para cada letra, e todos os valores do ponto são somados.fonte
C ++, 95 bytes
Experimente online (não é um link TIO)
Explicação:
m
, uma matriz dos valores de cada letra em ordem, menos 1. O menos 1 é por causa de Q e Z: eu não poderia ter um número de dois dígitos láp
até chegarmos ao caractere nulo e adiciona a pontuação do número (*p
nos fornece a letra e,-65
portanto, podemos indexar adequadamente a matriz). Comom
é a,char*
ele se converte em a,char
então nós menos48
o trazemos de volta para 0, mas adicionamos1
uma vez quem
é declarado como uma pontuação a menos para cada personagem.Eu não sou um pôster ávido aqui, então espero ter feito isso corretamente. Eu acredito que eles retornam
n
contam como imprimir o valor, e que declarar uma função é bom.fonte
Haskell , 66 bytes
Experimente online! A mesma abordagem da resposta JavaScript de DanielIndie .
Haskell ,
8281 bytesExperimente online!
fonte
PowerShell , 60 bytes
Experimente online!
fonte
Japonês , 36 bytes
Recebe a entrada como uma sequência minúscula e retorna um número.
Breve explicação:
Experimente online!
fonte
Ruby , 60 bytes
Experimente online!
Um lambda, aceitando entrada como uma matriz de caracteres (maiúsculos) e retornando um número inteiro.
fonte
Perl 5
-pF
, 50 bytesExperimente online!
fonte
Gforth , 109 bytes
A entrada deve estar em maiúscula:
C PPCG 11 OK
Legível
Experimente online!
fonte
Perl 6 , 52 bytes
Experimente online!
Mapeia todos os caracteres para um dígito e os soma. E adiciona 1 para cada caractere, porque não há um dígito 10 sem incorrer em bytes unicode.
fonte
Retina 0.8.2 , 41 bytes
Experimente online! O link inclui casos de teste. Explicação: Como a resposta de Haskell, as letras não triviais são traduzidas para 1 a menos que sua pontuação e 1 é adicionado mais tarde quando os caracteres são convertidos em unários. Colocar o
FHVWY
último permite que todos eles sejam mapeados para uma pontuação de 3 + 1.fonte
C (gcc),
7872 bytesNa verdade, existem 26 caracteres nessa sequência. Veja o código renderizado corretamente e execute-o aqui .
Agradecimentos a gastropner por jogar 6 bytes.
Versão não destruída:
fonte
Excel, 91 bytes
Explicação:
A1
{ }
às duas extremidades.MID(A1,ROW(A:A),1)
extrai cada caractere por vez (e muitos valores vazios também, pois ele retornará tantos valores quanto houver linhas na planilha)CODE(MID(~)&"z")
extrai o valor ASCII para cada caractere. A&"z"
anexa umz
para o final doMID()
resultado porqueCODE()
não faz como entradas vazias. O valor ASCII paraz
é maior que todas as letras maiúsculas, portanto, é efetivamente ignorado mais tarde.MID("02210313074020029000033739",CODE(~)-64,1)
extrai uma letra da string de pontuação com base em seu valor ASCII ajustado em 64 para que as letras sejam 1-26 em vez de 65-90."0"&MID(~)
precede zero aoMID()
resultado porque o Excel não permite que você faça contas com seqüências de caracteres vazias, das quais haverá várias.0+("0"&MID(~))
transforma todas essas seqüências em números.SUM(0+("0"&MID(~)))
adiciona todas as strings que agora são números.LEN(A1)+SUM(~)
adiciona o comprimento da entrada à soma porque todos os valores na sequência de pontuação (02210313074020029000033739
) foram ajustados para baixo em um para que todos tivessem um dígito de comprimento.Existe uma solução muito semelhante no Planilhas Google, mas ela é fornecida com 97 bytes porque
ArrayFromula()
é maior que{}
(mas pelo menos pode suportar0 + "" = 0
).fonte
SUBSTITUTE()
, chegando a 527 bytes.Wolfram Language (Mathematica) , 74 bytes
Claro que o Wolfram | Alpha suporta a pontuação do Scrabble! Esta é uma função anônima.
Isso não funciona no TIO.
Para executar, vá aqui , role para baixo e clique em "Criar um novo notebook» ". O código a ser usado no notebook está neste programa TIO para que você possa copiá-lo. Cole cada chamada de função em seu próprio bloco de código. Se você executar muitos em um único bloco, a execução não será concluída.
Observe que
WolframAlpha
envia uma solicitação usando a Internet. Embora existam outras respostas no PPCG que o utilizam, achei que você deveria saber.Este programa usa a função abaixo mais curta, mas chama cada caractere individual da entrada (enviando uma chamada separada para Wolfram | Alpha a cada vez!)
Isso funciona apenas para entradas até o comprimento 15, a largura de uma placa Scrabble. (49 bytes)
O mesmo que acima, mas exibirá o resultado em uma caixa, juntamente com a entrada da palavra Scrabble válida. (45 bytes)
fonte
C # (.NET Core) , 50 + 18 = 68 bytes
+18 bytes para
using System.Linq;
Experimente online!
fonte
K (oK) ,
6038 bytesSolução:
Experimente online!
Explicação:
Índice nas pontuações, resumir o resultado.
fonte
Japt
-x
,43393530 bytesExperimente online!
Solução de 35 bytes:
Execute on-line
fonte