Remarque: Ceci est inspiré par cette question de @Willbeing où la tâche consistait à compter le nombre d'assiettes parfaites d'une certaine longueur, mais c'est légèrement différent.
Nous appelons une plaque d'immatriculation parfaite cette plaque dont le texte satisfait aux conditions suivantes:
- Il se compose de caractères, qui peuvent être des lettres majuscules (
[A-Z]
) ou des chiffres ([0-9]
) - En additionnant les positions de ses lettres dans l'alphabet anglais, 1-indexé (ie:)
A=1,B=2,...,Z=26
donne un entier n - Obtenir chaque bloc de chiffres, les additionner puis multiplier tous les résultats donne le même résultat, n
- n est un carré parfait (par exemple:
49
(7 2 ) ,16
(4 2 ) )
Une plaque d'immatriculation presque parfaite remplit les conditions d'une plaque d'immatriculation parfaite, sauf que n n'est pas un carré parfait.
Contribution
Une chaîne représentant le texte de la plaque d'immatriculation, prise en entrée sous n'importe quelle forme standard, à l'exception du codage en dur.
Production
Si la chaîne donnée représente une plaque d'immatriculation presque parfaite , retournez une valeur vraie (par exemple: True
/ 1
), sinon retournez une valeur fausse (par exemple: False
/ 0
). Toute forme standard de sortie est acceptée tout en prenant note que ces failles sont strictement interdites.
Exemples
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!
Notation
C'est le code-golf , donc la réponse la plus courte en octets l'emporte!
la source
n
n'est pas un carré parfait?s/licence/license/ig
le fasse , sachez que «licence» est l'orthographe correcte en anglais britannique (ainsi qu'en anglais dans d'autres parties du monde).Réponses:
Gelée ,
29 2830 octets1 octet pour corriger un bug repéré par ChristianSievers ( à tort traitant de sous - chaînes de zéros seulement) 1 octet pour corriger les faux positifs pour
"0"
,"00"
... trouvé au - dessus de fixation (0 est un carré parfait).Essayez-le en ligne! ou exécuter des tests
Comment?
la source
11AA0
?MATL,
36343335 octetsEssayez-le sur MATL Online
Explication
la source
'0'
ou'00'
(FWIW je viens de corriger cela dans mon code aussi).Python 2,
120118 octetsEssayez-le en ligne!
Interprète chaque caractère comme un nombre en base-36 (
h
). Convertit en décimal et ajoute à la somme ifh>9
(ce qui signifie qu'il s'agit d'une lettre), sinon ajoute à une variable qui est multipliée pour former le produit en cours d'exécution plus tard.la source
Perl 5 , 80 octets
79 octets de code +
-p
indicateur.Essayez-le en ligne!
$.*=eval s/./+$&/gr for/\d+/g;
multiplie les sommes de chiffres consécutifs. (J'utilise$.
parce que sa valeur initiale est1
, ce qui signifie que c'est l'élément neutre pour la multiplication). Plus précisément, pour chaque bloc de chiffres (for/\d+/g
),s/./+$&/gr
place un+
avant chaque chiffre, puis la chaîne esteval
uée et multipliée par le produit actuel.Deuxièmement, les
$t-=64-ord for/\pl/g;
sommes dans$t
chaque lettre (for/\pl/g
). (ord
retourne le code ascii de la lettre, et le64-..
fait entre 1 et 26.Enfin,
$.==$t
vérifie que les deux valeurs sont les mêmes, et($.**.5|0)**2!=$.
que ce n'est pas un carré parfait.la source
Python 2,
267207 octets60 octets enregistrés grâce aux ovs
Fonction avec usage:
print(g('A1B2C3'))
Essayez-le en ligne!
la source
Python 3 ,
163 156 155 155 164161 octetsEssayez-le en ligne!
la source
from math import*
est plus courta
, utilisez simplementfor x in input():
. Vous pouvez avoir des faux positifs pour les plaques se terminant par une chaîne de zéros (par exemple11AA00
), car la finalem*=t
n'est pas exécutée.Rétine, 143 octets
Renvoie 1 pour vrai, 0 pour faux
Essayez-le en ligne!
Explication:
Tout d'abord, nous remplaçons tous les chiffres non nuls par leur représentation unaire. Nous supprimons tous les zéros avec un chiffre adjacent afin qu'ils n'affectent pas nos opérations unaires
Fractionnez la chaîne résultante sur les lettres, en prenant soin d'exclure les lignes vides (c'est un problème lorsque deux lettres sont consécutives
AA
).Triez la chaîne lexicographiquement. Effectuez ensuite plusieurs fois les opérations suivantes:
1) Remplacez chacun
1
par le nombre de1
s sur la ligne suivante (cela imite la multiplication)2) Retirez la deuxième ligne de
1
sRemplacer les lettres
J-S
avec1J
,1K
etc. et remplacer les lettresT-Z
avec2T
,2U
etc. Ensuite, remplacer chacun des groupesA-I
,J-S
etT-Z
avec1-9
. Il nous restera la valeur numérique de chaque lettre (par exemple13
pourM
).Convertissez chaque ligne sauf la première en unaire (la première ligne est déjà en unaire). Concatène ces lignes. Il nous reste maintenant une chaîne du formulaire
<product of digits>\n<sum of letters>
.Remplacez un nombre carré par la chaîne vide. Celui-ci utilise la méthode "arbre de différence" .
Retourne
1
si les deux cordes de chaque côté du\n
match. Sinon, revenez0
.la source
11AA0
,0AA11
etc.