Королю Древнего Рима трудно определить, действителен ли магический квадрат или нет, потому что проверяемый им магический квадрат не содержит разделителей между числами. Он нанял разработчика программного обеспечения, чтобы помочь ему определить, действителен ли магический квадрат или нет.
Описание входа
Входные данные поступают в STDIN или аргументы командной строки. Вы не можете предварительно инициализировать ввод в переменной (например, «эта программа ожидает ввод в переменной x
»). Ввод в следующем формате:
<top>,<middle>,<bottom>
Каждый из <top>
, <middle>
и <bottom>
это строка , которая будет всегда содержать только символы в верхнем регистре I
, V
и X
. Он не будет содержать пробелов или любых других символов. Каждая строка представляет три римские цифры, в результате чего получается матрица чисел 3х3. Однако эти римские цифры могут (но не обязательно) быть неоднозначными . Позвольте мне проиллюстрировать это на примере. Рассмотрим следующий пример строки из трех римских цифр без пробелов между каждым числом:
IVIIIIX
Поскольку между буквами нет пробелов, здесь есть две возможности для чисел:
- 1, 8, 9 (
I VIII IX
) - 4, 3, 9 (
IV III IX
)
Если учесть, что все три строки матрицы могут быть неоднозначными, существует вероятность, что с одного входа будет много разных матриц 3х3.
Обратите внимание, что такие последовательности, как 1, 7, 1, 9 ( I VII I IX
) невозможны, поскольку каждая строка всегда будет представлять три римские цифры. Также обратите внимание, что римские цифры должны быть действительными, поэтому такие последовательности, как 1, 7, 8 ( I VII IIX
) также невозможны.
Описание выхода
Вывод:
- Целое число
A
, гдеA
- количество уникальных матриц 3х3, которые можно сформировать из неоднозначного ввода, и: - Truthy значение , если какой - либо из уникальных 3x3 матриц образуют магический квадрат, или:
- Falsy значение , если ни один из уникальных 3x3 матриц не образуют магический квадрат.
Истинные и ложные ценности должны быть последовательными. Они разделены запятой.
Требуется некоторое объяснение того, что считается уникальным. Пока матрица не имеет точно такие же числа в тех же позициях, что и ранее найденная матрица, она считается уникальной. Это означает, что отражения и т. Д. Ранее найденных матриц считаются уникальными.
Пример входов и выходов
В этих примерах я использую true
свою истинную ценность и false
свою ложную ценность.
Вход: VIIIIVI,IIIVVII,IVIXII
Выход: 24,true
(Волшебный треугольник 8-1-6, 3-5-7, 4-9-2.)
Вход: IIIXVIII,IVIII,VIIII
Выход:210,false
Дополнительно
- Вам не разрешается использовать встроенные функции преобразования римских цифр, если у выбранного вами языка есть такие.
источник
Ответы:
Perl, 219
237Добавлены разрывы строк для ясности.
Проверь меня .
источник
Пролог - 686
Ungolfed
Конечно,
p
также может быть определено как:В этом случае окружение скажет «Да» или «Нет» после записи количества квадратов.
пример
Используя затмение .
Результаты примера для второго вставлены здесь .
источник
Python, 442 символа
Сначала строится код,
N
который представляет собой отображение строки римских цифр на ее значение для всех возможных чисел, которые нам могут понадобиться. Разбивает каждую строку на три всеми возможными способами и проверяет, какие из получающихся троек имеют все отображенияN
. Финалany
видит, является ли любая комбинация магическим квадратом.источник
Haskell,
451429423 байтаПрименение:
Около 70 байтов только для правильного формата ввода и вывода.
Функция
r
преобразует римское число (заданное в виде строки) в целое число (если оно не верное,0
возвращается римское число ).s
разбивает строку римских цифр на 3 подстроки и сохраняет эти тройки с действительными римскими числами и преобразует ихr
в целые числа.e
проверяет, равны ли все целые числа трехэлементного списка.p
берет три строки римских цифр, разбивает ихs
на списки целых чисел, объединяет одно целое число каждого списка в тройки и сохраняет одинаковые суммы во всех направлениях.f
вычисляет количество допустимых матриц и проверяет, лиp
возвращает ли пустой список (нет правильного решения) или нет (существует правильное решение). Основная функцияi
читает входные данные из STDIN, преобразует их в список строк (q
помогает путем замены,
на\n
) и звонкиp
.источник
R
489474464Это стало намного больше, чем я хотел, но я подозреваю, что могу немного проиграть.
Он использует метод грубой силы, вычисляя все возможные комбинации римских цифр и соответствующие им цифры.
Как только это будет сделано, он сравнивает входные данные со списком римских цифр и получает возможные цифры.
Оттуда он проходит каждую матрицу чисел и проверяет магический квадрат, наконец выводя результат.
Тестовый забег. Он ожидает ввода после вставки в RGui.
источник