Problema
Você está preso em uma cabana no meio da floresta, com apenas uma velha brincadeira para se divertir. Após a inspeção, você vê que as letras do scrabble estão tão gastas que apenas os pontos de cada letra são visíveis.
No entanto, você decide jogar um jogo. Você puxa sete letras da sacola e as coloca em sua bandeja, seu desafio é determinar o que essas cartas podem ser.
Geralmente, dada uma lista de pontos, converta-a em qualquer sequência ou lista de letras possível.
Scrabble Tiles e Distribuições
- 2 peças em branco (marcando 0 pontos)
- 1 ponto: E × 12, A × 9, I × 9, O × 8, N × 6, R × 6, T × 6, L × 4, S × 4, U × 4
- 2 pontos: D × 4, G × 3
- 3 pontos: B × 2, C × 2, M × 2, P × 2
- 4 pontos: F × 2, H × 2, V × 2, W × 2, Y × 2
- 5 pontos: K × 1
- 8 pontos: J × 1, X × 1
- 10 pontos: Q × 1, Z × 1
Portanto, se você tiver uma lista de pontos [10,10,8,5,1,1,1]
, "QZJKEEE"
seria válido, mas "QQJKEEE"
não seria válido (pois há apenas 1 bloco Q na sacola)
Regras específicas de problemas
- Você pode assumir que todas as entradas são válidas e que sempre haverá 7 blocos (ou seja, não haverá uma lista de sete blocos de 10 pontos e não haverá 9 blocos)
- Você pode assumir que nenhum bloco foi retirado anteriormente da sacola (portanto, a distribuição é a distribuição padrão de blocos em inglês, conforme definido acima)
- Você não precisa gerar uma palavra válida, apenas uma sequência de letras válida.
- A ordem da sua string é irrelevante, desde que para cada bloco haja uma letra correspondente.
- Os pontos são baseados nos pontos padrão do scrabble em inglês, conforme definido acima.
- Você pode produzir em maiúsculas ou minúsculas; para um bloco em branco, você pode gerar um caractere de espaço ou um sublinhado '_'
- Sua resposta pode aparecer como qualquer representação razoável dos blocos, como Lista, String, Matriz ou Sequência
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta com as regras de E / S padrão , para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código (ou seja, TIO ).
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste
Obviamente, como você pode gerar qualquer valor possível, é difícil definir casos de teste estritos.
Alguns casos com um possível valor de retorno válido :
[10,0,10,5,8,8,0] -> "Q ZKJX "
[1,1,1,1,1,1,1] -> "EEEEEEE"
[1,2,3,4,5,8,0] -> "NDBHKJ "
[2,2,2,2,2,2,2] -> "DGDGDGD"
Alguns casos com um valor de retorno inválido :
[10,0,10,5,8,8,0] -> "Q QKJX " - Too many Qs
[1,1,1,1,1,1,1] -> "EEEEEE " - Space is 0 points not 1
[1,2,3,4,5,8,0] -> "NDBH" - Too short
[1,2,3,4,5,8,0] -> "NDBHKJ I" - Too long
[1,2,3,4,5,8,0] -> "ÉDBHKJ1" - Contains none scrabble characters
[2,2,2,2,2,2,2] -> "GDGDGDG" - Contains too many Gs (case for invalid cycling)
[2,2,2,2,2,2,2]
(o único caso em que é importante começar com umD
e não com umG
método de ciclismo)Respostas:
JavaScript (ES6), 72 bytes
Uma variante mais curta sugerida por @supercat
Experimente online!
JavaScript (ES6),
137 ... 84 78 7776 bytesEconomizou 10 bytes usando o método de ciclagem de Neil
Retorna uma lista de blocos. Usa
_
para azulejos em branco.Experimente online!
Quão?
Para cada número de pontos, percorremos um grupo de exatamente 4 blocos, começando com o segundo bloco de cada grupo (isso é importante para
G
vsD
):Todos esses grupos são armazenados como uma única sequência de 31 caracteres:
NB : Nós não precisa armazenar a final
"_"
em"_XJ_"
, como ele nunca será acessado de qualquer maneira.O número de pontosn é convertido no índice correto Eun nessa cadeia de caracteres com:
fonte
a=>a.map(o=n=>('?ED?BWQ?_EG?CFZ?_EDJMH?K?EGXPV'[n*9.4+(o[n]=7-~o[n])&31]))
. Uma versão mais curta, "quase",a=>a.map(o=n=>("_EDBFK_EDCHJQEGMVXZEGPW"[n+(o[n]=5-~o[n])%24]))
mas essa abordagem precisaria de uma maneira compacta de mapear os valores 8 e 10 para 11 e 12, além de um pequeno ajuste na string para corrigir um problema isolado.'_??VKWZHQFP?M?CGBGXDJD'[(n*96+(o[n]=32-~o[n]))%68%33]||'E'
, com uma string de pesquisa de apenas 22 caracteres. O código completo ainda é 2 bytes mais longo que a sua solução.Carvão , 33 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
Geléia ,
31 30 2726 bytesUm link monádico que aceita uma lista de números inteiros que gera uma lista de caracteres.
- uma confusão do meu anterior, abaixo, e minha melhoria do Nick Kennedy
Experimente online!
A saída não é fornecida na mesma ordem que a entrada (isso é permitido).
Usar duas de minhas próprias adições ao idioma em uma resposta não acontece com frequência! (
ṃ
eɓ
aqui).Quão?
anterior @ 30
Um link monádico que aceita uma lista de números inteiros que gera uma lista de caracteres.
Experimente online!
A saída dessa pessoa também é mista (isso é permitido).
Quão?
fonte
' NWGMZQ'
após o índice multidimensional em seria uma façanha sem nenhumW
na string. ;)Pitão -
9286838180756052494236 bytesPassa pela entrada, exibindo as letras disponíveis. Eu só tenho um de cada letra que juntos dá 7 para essa categoria de pontos. Agora, usando a codificação de string compactada.
Aliás, esta é a string carta original antes da codificação:
"_ E DG BCMP FHVW K JX QZ"
.Experimente online .
fonte
Perl 5 , 71 bytes
Experimente online!
fonte
05AB1E ,
70523938292625 bytes-18 bytes graças a @ExpiredData .
-13 bytes, utilizando o mesmo estender ao tamanho a partir de 7 @Maltysen resposta Pyth 's .
-9 bytes criando uma porta da resposta de @JonathanAllan Jelly , por isso não deixe de votar nele!
-3 bytes graças a @Emigna .
Resulta em uma lista de caracteres e usa letras minúsculas e um espaço para espaços em branco.
Experimente online ou verifique mais alguns casos de teste .
Explicação:
Veja este 05AB1E ponta do meu (seção Como cordas compressa não fazem parte do dicionário? ) Para entender por que
.•3Oû}α›ηö‡.ÝŽ{•
é"endgmpfykkzzzzjxzzqz "
.Resposta anterior de 38 bytes:
Experimente online ou verifique mais alguns casos de teste .
Explicação:
Veja este 05AB1E ponta do meu (seção Como cordas compressa não fazem parte do dicionário? ) Para entender por que
.•Mñ&Àû«ì{₆v*Å+µ-•
é"e dg bcmp fhvw k jx qz"
.fonte
" 0eeeeeee0ddddggg0bbccmmp0ffhhvvw0k000jx00qz"
?{v
vez de7F
e emy
vez deI{Nè
.C (gcc) , 110 bytes
Experimente online!
Usa a
_
matriz como um índice na cadeia estática"DDDDGGGBBCCMMPFFHHVVWKJXQZ"
dinamicamente, com exceções para 0 e 1.O argumento é uma
-1
matriz de pontuações terminada que é transformada no local em uma-1
sequência terminada.fonte
C # (compilador interativo do Visual C #) ,
10490 bytesExperimente online!
fonte
Geléia ,
3432 bytesExperimente online!
Eu não tinha visto uma resposta Jelly mais curta quando escrevi isso, e isso usa uma abordagem diferente, então pensei que valeria a pena postar também.
Obrigado a @ JonathanAllan por salvar 2 bytes!
fonte
ṃ
, você pode salvar 2 bytesPython 3 ,
178142135127112117 bytesExperimente online!
-1 byte graças a cdlane
correto graças a mathmandan
fonte
d=list(map(list,"...".split('_')))
salvar outro bytef
provavelmente não precisa ser nomeada, para que você possa salvar 2 bytes. No entanto,f
consome as entradas ded
, portanto, não tenho certeza se ele se encaixa no requisito de consenso de que "a função deve ser reutilizável arbitrariamente com frequência, sem ... reafirmar ... qualquer outro código que acompanha o envio". (Por exemplo, executarf([10,0,10,5,8,8,0])
mais de uma vez resultaria em erro.) Consulte a meta-discussão aqui: codegolf.meta.stackexchange.com/a/7615/36885Python 2 , 102 bytes (ou talvez 95?)
(Também é bom para o Python 3.)
Experimente online!
Eu não acho que o seguinte seria aceitável:
Esta segunda versão daria saída como
['__', 'JX', 'QZ', 'K']
. Portanto, as letras estariam corretas, mas seriam coletadas pelo valor do ponto. (Se isso fosse aceitável, economizaria 7 bytes.)fonte
PHP , 101 bytes
Como um programa independente, insira via linha de comando:
Experimente online!
Ou 112 bytes como uma função
Experimente online!
Saída
fonte
Ruby ,
7776 bytesExperimente online!
fonte
Perl 6 , 63 bytes
Experimente online!
Portanto, basicamente ele mantém uma pesquisa de compensações para cada valor de bloco e as incrementa conforme necessário, usando o deslocamento para extrair um caractere do conjunto disponível.
fonte