Nota: Isso é inspirado nesta pergunta no @Willbeing, onde a tarefa era contar o número de pratos perfeitos de um determinado comprimento, mas é um pouco diferente.
Chamamos uma placa perfeita de placa cujo texto satisfaz as seguintes condições:
- Consiste em caracteres, que podem ser letras maiúsculas (
[A-Z]
) ou dígitos ([0-9]
) - Somando as posições de suas letras no alfabeto inglês, 1 indexado (ie :)
A=1,B=2,...,Z=26
fornece um número inteiro n - Obter cada pedaço de dígito, somar e depois multiplicar todos os resultados dá o mesmo resultado, n
- n é um quadrado perfeito (por exemplo:
49
(7 2 ) ,16
(4 2 ) )
Uma placa quase perfeita atende às condições para uma placa perfeita, exceto que n não é um quadrado perfeito.
Entrada
Uma sequência que representa o texto da placa do veículo, tomada como entrada em qualquer formato padrão, exceto na codificação codificada.
Resultado
Se a sequência especificada representar uma placa quase perfeita , retorne um valor verdadeiro (por exemplo: True
/ 1
), caso contrário, retorne um valor falso (por exemplo: False
/ 0
). Qualquer forma padrão de saída é aceita enquanto se observa que essas brechas são estritamente proibidas.
Exemplos
licence plate -> output
A1B2C3 -> 1
A + B + C = 1 + 2 + 3 = 6
1 * 2 * 3 = 6
6 is not a perfect square, 6 = 6 => nearly perfect plate
01G61 -> 1
(0 + 1) * (6 + 1) = 7
G = 7
7 is not a perfect square, 7 = 7 => nearly perfect plate
11BB2 -> 0
(1 + 1) * 2 = 4
B + B = 2 + 2 = 4
4 = 4, but 4 is the square of 2 => perfect license plate (not what we want)
67FF1 -> 0
(6 + 7) * 1 = 13
F + F = 6 + 6 = 12
12 != 13 => not perfect at all!
Pontuação
Isso é código-golfe , então a resposta mais curta em bytes vence!
fonte
n
for um quadrado perfeito?s/licence/license/ig
isso, lembre-se de que "licença" é a grafia correta no inglês britânico (assim como em outras partes do mundo).Respostas:
Geléia ,
29 2830 bytes1 byte para corrigir um bug descoberto por ChristianSievers (incorretamente lidar com substrings de apenas zeros) +1 byte para corrigir falsos positivos para
"0"
,"00"
... encontrado durante fixação acima (0 é um quadrado perfeito).Experimente online! ou execute testes
Quão?
fonte
11AA0
?MATL,
36343335 bytesExperimente no MATL Online
Explicação
fonte
'0'
ou'00'
(FWIW também corrigi isso também no meu código).Python 2,
120118 bytesExperimente online!
Interpreta cada caractere como um número na base-36 (
h
). Converte em decimal e adiciona à soma seh>9
(ou seja, é uma letra); caso contrário, adiciona a uma variável que é multiplicada para formar o produto em execução posteriormente.fonte
Perl 5 , 80 bytes
79 bytes de código +
-p
sinalizador.Experimente online!
$.*=eval s/./+$&/gr for/\d+/g;
multiplica as somas de dígitos consecutivos. (Estou usando$.
porque seu valor inicial é1
, o que significa que é o elemento neutro para multiplicação). Mais precisamente, para cada parte dos dígitos (for/\d+/g
),s/./+$&/gr
coloca a+
antes de cada dígito, a sequência éeval
atualizada e multiplicada pelo produto atual.Em segundo lugar,
$t-=64-ord for/\pl/g;
somas em$t
cada letra (for/\pl/g
). (ord
retorne o código ascii da letra e64-..
faça com que fique entre 1 e 26.Finalmente,
$.==$t
verifica se os dois valores são iguais e se($.**.5|0)**2!=$.
não é um quadrado perfeito.fonte
Python 2,
267207 bytesEconomizou 60 bytes graças a ovs
Função com uso:
print(g('A1B2C3'))
Experimente online!
fonte
Python 3 ,
163 156 155 164164 bytesExperimente online!
fonte
from math import*
é menora
, apenas usefor x in input():
. Você pode ter falsos positivos para placas que terminam com uma sequência de zeros (por exemplo11AA00
), pois a finalm*=t
não é executada.Retina, 143 bytes
Retorna 1 para verdadeiro, 0 para falso
Experimente Online!
Explicação:
Primeiro, substituímos todos os dígitos diferentes de zero por sua representação unária. Removemos quaisquer zeros com um dígito adjacente para que eles não afetem nossas operações unárias
Divida a sequência resultante em letras, tomando cuidado para excluir linhas vazias (este é um problema quando duas letras são consecutivas
AA
).Classifique a sequência lexicograficamente. Em seguida, faça o seguinte:
1) Substitua cada um
1
pelo número de1
s na linha a seguir (isso imita a multiplicação)2) Remova a segunda linha de
1
sSubstituir letras
J-S
com1J
,1K
etc. e substituir letrasT-Z
com2T
,2U
etc. Em seguida, substituir cada um dos gruposA-I
,J-S
eT-Z
com1-9
. Seremos deixados com o valor numérico de cada letra (por exemplo,13
paraM
).Converta todas as linhas, exceto a primeira, em unário (a primeira linha já está em unário). Concatene essas linhas. Agora ficamos com uma string do formulário
<product of digits>\n<sum of letters>
.Substitua um número quadrado pela sequência vazia. Isso usa o método "árvore da diferença" .
Retorne
1
se as duas cordas de cada lado da\n
partida. Caso contrário, retorne0
.fonte
11AA0
,0AA11
, etc.