Примечание: на этот вопрос @Willbeing вдохновил этот вопрос, где задачей было подсчитать количество идеальных тарелок определенной длины, но это немного отличается.
Мы называем идеальный номерной знак той табличкой, текст которой удовлетворяет следующим условиям:
- Он состоит из символов, которые могут быть как заглавными буквами (
[A-Z]
), так и цифрами ([0-9]
) - Суммируя позиции своих букв в английском алфавите, 1 индексирует (т.е.:)
A=1,B=2,...,Z=26
дает целое число n - Получение каждого куска цифр, суммирование их и затем умножение всех результатов дает тот же результат, n
- n - идеальный квадрат (например:
49
(7 2 ) ,16
(4 2 ) )
Почти идеальный номерной знак соответствует условиям для идеального номерного знака, за исключением того, что п является не идеальным квадратом.
вход
Строка, представляющая текст номерного знака, взятый как ввод в любой стандартной форме, кроме жесткого кодирования.
Выход
Если данная строка представляет собой почти идеальный номерной знак, верните истинное значение (например, True
/ 1
), в противном случае верните ложное значение (например, False
/ 0
). Любая стандартная форма вывода принимается, принимая во внимание, что эти лазейки строго запрещены.
Примеры
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!
счет
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
источник
n
это не идеальный квадрат?s/licence/license/ig
это, имейте в виду, что «лицензия» - это правильное написание на британском английском (а также на английском языке в других частях света).Ответы:
Желе ,
29 2830 байт+1 байт исправить ошибку разысканы ChristianSievers (неправильно дело с подстроками только нули) +1 байт исправить ложные срабатывания для
"0"
,"00"
... найдено во время выше фиксаций (0 является квадратом).Попробуйте онлайн! или запустить тесты
Как?
источник
11AA0
?MATL,
36343335 байтПопробуйте это на MATL Online
объяснение
источник
'0'
или'00'
(FWIW, я тоже исправил это в своем коде).Python 2,
120118 байтПопробуйте онлайн!
Интерпретирует каждый символ как число в base-36 (
h
). Преобразуется в десятичную и добавляет к сумме ifh>9
(имеется в виду буква), в противном случае добавляет переменную, которая умножается для формирования работающего продукта позже.источник
Perl 5 , 80 байт
79 байт кода +
-p
флаг.Попробуйте онлайн!
$.*=eval s/./+$&/gr for/\d+/g;
умножает суммы последовательных цифр. (Я использую,$.
потому что это начальное значение1
, что означает, что это нейтральный элемент для умножения). Точнее говоря, для каждого блока цифр (for/\d+/g
) перед каждой цифрой ставитсяs/./+$&/gr
знак «+
а», затем строкаeval
обрабатывается и умножается на текущий продукт.Во-вторых,
$t-=64-ord for/\pl/g;
суммы в$t
каждой букве (for/\pl/g
). (ord
возвращает код ascii для буквы и64-..
устанавливает его между 1 и 26.Наконец,
$.==$t
проверяет, что оба значения одинаковы, и($.**.5|0)**2!=$.
что это не идеальный квадрат.источник
Python 2,
267207 байтСохранено 60 байтов благодаря ovs
Функция с использованием:
print(g('A1B2C3'))
Попробуйте онлайн!
источник
Python 3 ,
163 156 155 164161 байтПопробуйте онлайн!
источник
from math import*
Корочеa
, просто используйтеfor x in input():
. Вы можете иметь ложные срабатывания для пластин, заканчивающихся строкой нулей (например11AA00
), так как финалm*=t
не выполняется.Сетчатка, 143 байта
Возвращает 1 для истины, 0 для ложных
Попробуйте онлайн!
Объяснение:
Сначала мы заменяем все ненулевые цифры их унарным представлением. Мы удаляем все нули с соседней цифрой, чтобы они не влияли на наши унарные операции.
Разделите полученную строку на буквы, стараясь исключить пустые строки (это проблема, когда две буквы являются последовательными
AA
).Сортировать строку лексикографически. Затем несколько раз сделайте следующее:
1) Замените каждый
1
числом1
s на следующей строке (это имитирует умножение)2) Убрать вторую строку
1
сЗаменить буквы
J-S
с1J
,1K
и т.д. и заменить буквыT-Z
с2T
,2U
и т.д. Затем, замените каждую из группA-I
,J-S
иT-Z
с1-9
. Нам останется числовое значение каждой буквы (например,13
дляM
).Конвертировать каждую строку, кроме первой, в унарную (первая строка уже в унарной). Объединить эти строки. Теперь мы остались со строкой формы
<product of digits>\n<sum of letters>
.Замените квадратное число пустой строкой. Это использует метод "дерева различий" .
Вернуть,
1
если две строки по обе стороны\n
совпадают. В противном случае вернитесь0
.источник
11AA0
,0AA11
и т.д.