Se você tem um filho pequeno em sua casa, pode ter encontrado letras de banho de espuma. Estes podem ser umedecidos e colados em superfícies planas, como azulejos e na lateral do banho, para criar palavras e mensagens.
A gama de palavras e mensagens é um pouco limitado, se você tiver apenas um set, porém, desde que você só tem 36 caracteres: letras maiúsculas AZ e dígitos 0-9: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
. No entanto, você pode ser astuto e abusar de algumas das letras e dígitos para formar cópias extras de outras letras:
3: E
1: I
7: L (when rotated)
M: W (when rotated)
0: O
2: S (when flipped)
5: S
W: M (when rotated)
2: Z
5: Z (when flipped)
O: 0
6: 9 (when rotated)
L: 7 (when rotated)
9: 6 (when rotated)
Observe que nem todos são bidirecionais, pois é mais fácil ler um dígito como parte de uma palavra do que uma letra como parte de um número.
Cada conjunto também vem em uma variedade de cores, onde cada letra é colorida em sequência. Por exemplo, se o seu conjunto tiver três cores, vermelho, amarelo e azul, ele será como:
- Vermelho:
ADGJMPSVY147
- Amarelo:
BEHKNQTWZ258
- Azul:
CFILORUX0369
Sua tarefa, portanto, é usar três parâmetros (de qualquer maneira adequada) indicando uma palavra ou frase, o número de cores a serem usadas e o número de conjuntos que você possui e, em seguida, gerar uma representação da palavra ou frase, em um conjunto de cores adequadas, utilizando substituições, se necessário. Se não for possível criar a palavra ou frase com o número de conjuntos, digite "Nope" nas cores apropriadas.
Exemplos
Em todos esses, o primeiro parâmetro é a palavra ou frase, o segundo é o número de cores e o terceiro é o número de conjuntos disponíveis.
["bath", 3, 1]
["programming", 3, 2]
["puzzles", 3, 1]
["code golf", 5, 1]
["willow tree", 1, 1]
["impossible phrase", 8, 1]
- existe apenas 1 P em um conjunto e nenhuma substituição válida
Notas
- Você pode usar como padrão 1 conjunto, se isso ajudar (por exemplo, um valor de parâmetro padrão 1), mas você deve suportar vários conjuntos, se solicitado. O número de conjuntos que você possui sempre será um número inteiro positivo diferente de zero.
- Se você tiver vários conjuntos, todos serão coloridos da mesma maneira: se A for vermelho no primeiro conjunto, também será vermelho no segundo conjunto. As cores são aplicadas por conjunto, não para todos os conjuntos em uma determinada chamada
- Você deve suportar 1 a 36 cores - 1 significa que todos os caracteres são da mesma cor, 36 significa que todos são distintos. Só haverá números inteiros de cores.
- Você pode usar todas as cores, desde que sejam visualmente distintas - se estiver produzindo para o terminal, poderá usar uma combinação de primeiro plano e plano de fundo como uma "cor", embora não deva usar a mesma cor para primeiro plano e plano de fundo
- Sua saída deve usar os caracteres que você realmente usa, não os caracteres da entrada. Por exemplo, se você tivesse ["salgueiro", 1, 1] como entrada, poderia produzir
WIL7OM
com 7 e M girados 180 graus - Você deve usar as letras corretas primeiro e depois substituir:
MI7LOW
está incorreto para ["willow", 1, 1] - Você pode usar qualquer substituição para um determinado personagem:
SO5
eSO2
com um 2 invertido, ambos são válidos para "SOS" - Múltiplas invocações do seu código para a mesma entrada não precisam produzir saída idêntica
- A saída deve estar em maiúscula, mas a entrada pode estar em qualquer combinação de maiúsculas e minúsculas
- Deveria ser óbvio, mas um espaço não tem uma cor
Regras
- Este é um código de golfe, mas com saída semi-gráfica (não tenho certeza se você pode fazer texto invertido em um terminal, mas estou interessado em ver se o Pyth está embutido nele)
- Aplicam-se brechas padrão
- Não há bônus para funções, mas vote em respostas interessantes
- Inclua algumas capturas de tela da sua saída nas suas respostas
Desafios relacionados
- O alfabeto da minha filha - um inverso parcial desse desafio, procurando encontrar um conjunto mínimo de letras para escrever uma série de frases
- Uma letra cabe dentro da outra? - sobre um tipo diferente de letras de espuma, mas com uma alternativa semelhante ao tema das letras
NOPE
?Respostas:
HTML / JavaScript (com jQuery) / CSS - não-concorrente / não-golfe
Apenas para fazer a bola rolar e mostrar que não é impossível, aqui está uma implementação não-golfe e não-competitiva que adota uma abordagem ingênua para a tarefa.
Primeiro, ele cria uma sequência de todos os caracteres possíveis (
tempalph
), juntando quantas cópias do alfabeto houver conjuntos. Em seguida, ele percorre a frase, colocando cada letra da frase em uma variável de saída e apagando a primeira instância dessa letratempalph
. Se não puder (a letra não existe), verifica se a letra é substituível por algo deixado na string. Se isso também falhar, gera uma saída predefinida "NOPE". Supondo que ele não atinja o caso "NOPE", ele retorna a string de saída e a coloca em um DIV na página.Em seguida, ele percorre a seqüência de caracteres do alfabeto base e, se uma letra tiver sido usada, atribui a ela uma classe CSS apropriada, cada uma com um conjunto de cores predefinido.
Ele usa entradas HTML para entrada e atualizações sobre a inserção nelas.
Experimente no JSFiddle
Exemplo para
["BATH", 3, 1]
:JS:
HTML:
CSS:
fonte