(Esta é minha primeira pergunta sobre código de golfe)
Quando eu era criança, meu pai e eu inventamos um jogo em que a placa que vemos nos carros pode dar certos pontos com base em algumas regras bastante simples:
A quantidade X da mesma letra ou número fornece pontos X-1, exemplos:
22 = 1 point
aa = 1 point
5555 = 3 points
Os números devem estar próximos um do outro, portanto, 3353
fornece apenas 1 ponto, pois o 5 quebra a sequência dos 3's.
Uma sequência de números X em ordem crescente ou decrescente, no mínimo 3, fornece X pontos, exemplos:
123 = 3 points
9753 = 4 points
147 = 3 points
O sistema de pontos funciona apenas para números de 1 dígito, portanto 1919
, não fornece pontos e 14710
apenas 3, (147).
As sequências podem ser combinadas para dar mais pontos, exemplos:
1135 = 4 points (1 point for 11 and 3 points for 135)
34543 = 6 points (3 points for 345 and 3 points for 543)
No entanto, você não pode dividir uma sequência maior em duas sequências menores para obter pontos extras: 1234 = 123, 234 (6 points)
não é permitido.
Sua tarefa é, dada uma sequência, determinar o número de pontos que a placa dá.
Na Dinamarca, as placas de carro estão estruturadas da seguinte forma: CC II III, onde C é caractere e I é inteiro, e, portanto, meus exemplos de entradas refletirão essa estrutura. Se desejar, você pode fazer com que a sequência se ajuste à sua própria estrutura ou, se você se sentir realmente aventureiro, deixe o programa analisar a estrutura da placa e, assim, fazer com que ela funcione em qualquer tipo de placa no mundo. Declare explicitamente a estrutura que você decide usar em sua resposta.
Você pode receber a entrada da maneira que quiser, seja uma string ou uma matriz que pareça fazer mais sentido para mim.
Entrada de teste | saída:
AA 11 111 | 5
AB 15 436 | 3
OJ 82 645 | 0
UI 65 456 | 6
HH 45 670 | 5
YH 00 244 | 5
AJ 00 754 | 1
Devido à natureza de escolher sua própria estrutura, ou mesmo cobrir todas as estruturas, não vejo necessariamente como um vencedor pode ser explicitamente determinado. Suponho que o vencedor terá os bytes mais curtos da estrutura que você decidiu. (E não aceite uma entrada como o CICIC, apenas para facilitar as coisas)
EDITAR:
Devido aos comentários solicitados, tenho algumas informações extras para compartilhar: Uma sequência de números ascendentes ou descendentes se refere a uma sequência aritmética, então X +/- a * 0, X +/- a * 1, ... X +/- a * n etc. Então 3-5-7, por exemplo, é 3 + 2 * 0, 3 + 2 * 1, 3 + 2 * 2. A sequência, no entanto, não precisa começar de 0 nem terminar em 0
MAIS EDIÇÃO:
Você pode fornecer a entrada da maneira que desejar, não precisa inserir espaços, traços ou qualquer outra coisa que torne a placa mais legível. Se você pode salvar bytes aceitando apenas letras maiúsculas ou algo parecido, faça isso também. O único requisito é que seu programa possa pegar uma string / array / qualquer coisa que contenha caracteres e números e gerar a quantidade correta de pontos de acordo com as regras estabelecidas.
XX 87 654
. Eu vim com algo que estava correto para todos os seus casos de teste, mas de alguma forma incorreto para este .. Trabalhando para corrigi-lo.
CCIIIII
, não há espaços), ou então esse problema não possui um critério de vitória objetivo, exigido por aqui. No estado em que se encontra, ((e não faça comentários como o CICIC, apenas para facilitar as coisas)) é muito subjetivo. O que é e não é uma estrutura admissível?
IA99999
(contém uma sequência decrescente de pontos de código, mas não números).