Uwaga: Inspiracją do tego pytania jest @Willbeing, gdzie zadaniem było policzyć liczbę doskonałych płyt o określonej długości, ale jest nieco inna.
Idealną tablicę rejestracyjną nazywamy tablicą , której tekst spełnia następujące warunki:
- Składa się ze znaków, które mogą być dużymi literami (
[A-Z]
) lub cyframi ([0-9]
) - Sumując pozycje swoich liter w alfabecie angielskim, indeks 1 (tzn .
A=1,B=2,...,Z=26
:) daje liczbę całkowitą n - Pobranie każdego kawałka cyfr, zsumowanie ich, a następnie pomnożenie wszystkich wyników daje ten sam wynik, n
- n jest idealnym kwadratem (np .:
49
(7 2 ) ,16
(4 2 ) )
Prawie idealny tablicy rejestracyjnej spełnia warunki idealnego tablicy rejestracyjnej, oprócz tego, że n jest nie idealny kwadrat.
Wejście
Ciąg znaków reprezentujący tekst tablicy rejestracyjnej, pobierany jako dane wejściowe w dowolnej standardowej formie, z wyjątkiem kodowania na stałe.
Wynik
Jeśli podany ciąg reprezentuje prawie idealną tablicę rejestracyjną, zwróć prawdziwą wartość (np .: True
/ 1
), w przeciwnym razie zwróć wartość fałsz (np .: False
/ 0
). Każda standardowa forma wyników jest akceptowana, przy czym należy pamiętać, że te luki są surowo zabronione.
Przykłady
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!
Punktacja
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach!
źródło
n
to nie idealny kwadrat?s/licence/license/ig
, pamiętaj, że „licencja” to poprawna pisownia w brytyjskim angielskim (a także angielskim w innych częściach świata).Odpowiedzi:
Galaretka ,
29 2830 bajtów+1 bajt naprawić błąd zauważony przez ChristianSievers (niesłusznie czynienia z podciągi z samych zer) +1 bajt naprawić fałszywych alarmów dla
"0"
,"00"
... Znaleziono podczas powyższej mocowania (0 to idealny kwadrat).Wypróbuj online! lub uruchom testy
W jaki sposób?
źródło
11AA0
?MATL,
36343335 bajtówWypróbuj w MATL Online
Wyjaśnienie
źródło
'0'
Lub'00'
(FWIW Właśnie to naprawiłem w moim kodzie).Python 2,
120118 bajtówWypróbuj online!
Interpretuje każdy znak jako liczbę w bazie 36 (
h
). Konwertuje na dziesiętny i dodaje do sumy ifh>9
(co oznacza, że jest to litera), w przeciwnym razie dodaje się do zmiennej, która zostaje pomnożona, aby utworzyć działający produkt później.źródło
Perl 5 , 80 bajtów
79 bajtów kodu +
-p
flaga.Wypróbuj online!
$.*=eval s/./+$&/gr for/\d+/g;
mnoży sumy kolejnych cyfr. (Używam,$.
ponieważ jest to wartość początkowa1
, co oznacza, że jest to element neutralny do mnożenia). Dokładniej, dla każdej części cyfr (for/\d+/g
)s/./+$&/gr
umieszcza+
przed każdą cyfrą, a następnie ciąg jesteval
oznaczany i mnożony przez bieżący produkt.Po drugie,
$t-=64-ord for/\pl/g;
sumy w$t
każdej literze (for/\pl/g
). (ord
zwróć kod ascii dla litery i spraw,64-..
aby zawierała się w przedziale od 1 do 26.Na koniec
$.==$t
sprawdza , czy obie wartości są takie same i($.**.5|0)**2!=$.
czy nie jest to idealny kwadrat.źródło
Python 2,
267207 bajtówZaoszczędzono 60 bajtów dzięki ovs
Funkcja z użyciem:
print(g('A1B2C3'))
Wypróbuj online!
źródło
Python 3 ,
163 156 155 164161 bajtówWypróbuj online!
źródło
from math import*
jest krótszya
, po prostu użyjfor x in input():
. Możesz mieć fałszywe alarmy dla tablic kończących się ciągiem zer (np.11AA00
), Ponieważ finałm*=t
nie jest wykonywany.Siatkówka, 143 bajty
Zwraca 1 dla wartości true, 0 dla wartości false
Wypróbuj online!
Wyjaśnienie:
Po pierwsze, zamieniamy wszystkie niezerowe cyfry na ich jednoargumentową reprezentację. Usuwamy wszelkie zera z sąsiednią cyfrą, aby nie wpływały one na nasze jednoargumentowe operacje
Podziel powstały ciąg na litery, uważając, aby wykluczyć puste linie (jest to problem, gdy dwie litery są następujące po sobie
AA
).Posortuj ciąg leksykograficznie. Następnie kilkakrotnie wykonaj następujące czynności:
1) Zamień każdy
1
na liczbę1
s w następującym wierszu (to naśladuje mnożenie)2) Usuń drugą linię
1
sZastąpić litery
J-S
z1J
,1K
itp i zastąpić literyT-Z
z2T
,2U
itp Następnie zastąpić każdą z grupA-I
,J-S
orazT-Z
z1-9
. Pozostanie nam wartość liczbowa każdej litery (np.13
DlaM
).Konwertuj każdą linię oprócz pierwszej na unarną (pierwsza linia jest już unarna). Połącz te linie. Pozostaje nam teraz ciąg formularza
<product of digits>\n<sum of letters>
.Zamień liczbę kwadratową na pusty ciąg. Używa to metody „drzewa różnic” .
Zwróć,
1
jeśli dwa ciągi po obu stronach\n
meczu. W przeciwnym razie wróć0
.źródło
11AA0
,0AA11
itp.