Hinweis: Dies ist inspiriert von dieser Frage von @Willbeing, bei der es darum ging, die Anzahl der perfekten Teller einer bestimmten Länge zu zählen, aber es ist etwas anders.
Wir bezeichnen ein perfektes Kennzeichen als ein Kennzeichen , dessen Text die folgenden Bedingungen erfüllt:
- Es besteht aus Zeichen, die entweder Großbuchstaben (
[A-Z]
) oder Ziffern ([0-9]
) sein können. - Wenn man die Positionen seiner Buchstaben im englischen Alphabet summiert, ergibt 1-indiziert (dh
A=1,B=2,...,Z=26
:) eine ganze Zahl n - Wenn Sie jeden Ziffernblock abrufen, summieren und dann alle Ergebnisse multiplizieren, erhalten Sie dasselbe Ergebnis, n
- n ist ein perfektes Quadrat (zB:
49
(7 2 ) ,16
(4 2 ) )
Ein nahezu perfektes Nummernschild erfüllt die Voraussetzungen für ein perfektes Kfz - Kennzeichen, außer dass n ist nicht ein perfektes Quadrat.
Eingang
Eine Zeichenfolge, die den Text des Kennzeichens darstellt und in einer beliebigen Standardform als Eingabe verwendet wird, mit Ausnahme der Hardcodierung.
Ausgabe
Wenn die angegebene Zeichenfolge ein nahezu perfektes Kennzeichen darstellt, geben Sie einen Wahrheitswert zurück (z. B.: True
/ 1
), andernfalls einen falschen Wert (z . B.: False
/ 0
). Jede Standardform der Ausgabe wird akzeptiert, wobei zu beachten ist, dass diese Lücken strengstens verboten sind.
Beispiele
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!
Wertung
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes!
quelle
n
ist nicht ein perfektes Quadrat?s/licence/license/ig
, dass "Lizenz" die richtige Schreibweise in britischem Englisch (sowie Englisch in anderen Teilen der Welt) ist, bevor jemand dies tut .Antworten:
Jelly ,
29 2830 Bytes1 Byte um einen Fehler zu beheben , indem ChristianSievers getupft +1 Byte (fälschlicherweise mit Teil von nur Nullen zu tun) für Fehlalarme zu beheben
"0"
,"00"
... während über Befestigungs gefunden (0 ist ein perfekter Platz).Probieren Sie es online! oder führen Sie Tests durch
Wie?
quelle
11AA0
?MATL,
36343335 BytesProbieren Sie es bei MATL Online aus
Erläuterung
quelle
'0'
oder'00'
(FWIW Ich habe das gerade auch in meinem Code behoben).Python 2,
120 -118 BytesProbieren Sie es online!
Interpretiert jedes Zeichen als Zahl in base-36 (
h
). Konvertiert in eine Dezimalzahl und addiert zur Summe ifh>9
(was bedeutet, dass es sich um einen Buchstaben handelt). Andernfalls wird eine Variable addiert, die später multipliziert wird, um das laufende Produkt zu bilden.quelle
Perl 5 , 80 Bytes
79 Byte Code +
-p
Flag.Probieren Sie es online!
$.*=eval s/./+$&/gr for/\d+/g;
multipliziert die Summe aufeinanderfolgender Ziffern. (Ich benutze,$.
weil es der Anfangswert ist1
, was bedeutet, dass es das neutrale Element für die Multiplikation ist.) Genauer gesagt, für jedes Stück von Ziffern (for/\d+/g
,)s/./+$&/gr
stellt einen+
vor jeder Ziffer, dann wird der Stringeval
uated, und mit dem aktuellen Produkt multipliziert.Zweitens
$t-=64-ord for/\pl/g;
Summen in$t
jedem Buchstaben (for/\pl/g
). (ord
Geben Sie den ASCII-Code für den Buchstaben zurück und geben64-..
Sie einen Wert zwischen 1 und 26 ein.
$.==$t
Überprüfen Sie abschließend , ob beide Werte gleich sind und($.**.5|0)**2!=$.
ob es sich nicht um ein perfektes Quadrat handelt.quelle
Python 2,
267207 Bytes60 Bytes dank ovs gespart
Funktion mit nutzung:
print(g('A1B2C3'))
Probieren Sie es online!
quelle
Python 3 ,
163 156 155 164161 BytesProbieren Sie es online!
quelle
from math import*
ist kürzera
, benutze es einfachfor x in input():
. Sie können für Platten, die mit einer Folge von Nullen enden (z. B.11AA00
), False Positives haben , da das Finalem*=t
nicht ausgeführt wird.Retina, 143 Bytes
Gibt 1 für wahr, 0 für falsch zurück
Probieren Sie es online!
Erläuterung:
Erstens ersetzen wir alle Ziffern ungleich Null durch ihre unäre Darstellung. Wir entfernen alle Nullen mit einer benachbarten Ziffer, damit sie unsere unären Operationen nicht beeinflussen
Teilen Sie die resultierende Zeichenfolge in Buchstaben auf, und schließen Sie dabei Leerzeilen aus (dies ist ein Problem, wenn zwei Buchstaben hintereinander stehen
AA
).Sortieren Sie die Zeichenfolge lexikografisch. Führen Sie dann wiederholt Folgendes aus:
1) Ersetzen Sie jedes
1
durch die Anzahl von1
s in der folgenden Zeile (dies ahmt die Multiplikation nach)2) Entfernen Sie die zweite Zeile von
1
sErsetzen Sie Buchstaben
J-S
mit1J
,1K
etc. und ersetzen BriefeT-Z
mit2T
,2U
usw. Ersetzen Sie dann jede der GruppenA-I
,J-S
undT-Z
mit1-9
. Wir werden mit dem numerischen Wert jedes Buchstabens belassen (zB13
fürM
).Wandle jede Zeile außer der ersten in eine unäre um (die erste Zeile ist bereits unär). Verketten Sie diese Zeilen. Wir haben jetzt eine Zeichenfolge in der Form übrig
<product of digits>\n<sum of letters>
.Ersetzen Sie eine quadratische Zahl durch die leere Zeichenfolge. Dies verwendet die "Differenzbaum" -Methode .
Kehre zurück,
1
wenn die beiden Saiten auf beiden Seiten des\n
Spiels stehen. Andernfalls kehren Sie zurück0
.quelle
11AA0
,0AA11
etc.