(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).Respostas:
05AB1E ,
25222018 bytesAceita uma sequência de caracteres alfabéticos minúsculos e números sem espaços.
Experimente online! ou como um conjunto de testes
fonte
Casca ,
201615 bytes-1 byte graças a @Zgarb
Recebe entrada sem espaços e em letras minúsculas.
Experimente online!
Explicação
fonte
K0
pode estar¬
aqui.IA99999
.Python 3 ,
19385 bytes-3 bytes graças a Lynn
Toma entrada como um byte-string com letras minúsculas como:
b'aa11111'
.Experimente online!
fonte
C=0!=d==c-l
é ainda mais curto.Java 8, 195 bytes
Definitivamente, você pode jogar um pouco mais usando outra técnica para verificar as seqüências.
Explicação:
Experimente aqui.
fonte
Pitão ,
5150 bytes (impressionante)Verifique todos os casos de teste ou Experimente aqui.
fonte
R ,
153,145, 143 bytesFunção anônima que pega um vetor de caracteres e retorna um número inteiro.
Entrada esperada
z(c("A", "A", "1", "1", "1", "1", "1"))
Experimente online!
Versão ungolfed
fonte
C (gcc) , 91 bytes
Experimente online!
Ideia roubada da resposta Python de Felipe Nardi Batista .
fonte
Pitão ,
4842 bytesPorta direta da minha resposta python. Recebe a entrada como uma sequência de bytes com letras minúsculas como: b'aa11111 '.
Esta é minha primeira vez em Pyth, então qualquer dica é bem-vinda: D
Experimente aqui
fonte
JavaScript,
216192186202201 bytesDesminificado
Editar histórico:
0000 XXX
formato. (-24 bytes)fonte
0000
dá 7 pontos, isso está correto? (é lido como sendo uma sequência de aritmética e um número de sequência repetida, ao mesmo tempo)