Наталья Кайда 16 февраля 2022

🐍🧩 Задача об определении латинского квадрата

Напишите программу, которая проверяет, является ли заданная квадратная матрица латинским квадратом.
🐍🧩 Задача об определении латинского квадрата

Латинский квадрат – это квадратная матрица размером n x n, каждая строка и каждый столбец которой содержат все числа от 1 до n. В Средние века латинским квадратам приписывались магические свойства: такие таблицы использовались во время проведения оккультных ритуалов. Напишите программу для определения латинского квадрата.

Входные данные:

  • число n – количество строк и столбцов в матрице;
  • n строк, c n чисел в каждой.

Выходные данные:

Программа должна вывести YES, если введенная матрица является латинским квадратом, и NO в обратном случае.

        # Пример ввода:
4
2 3 4 1
3 4 1 2
4 1 2 3
1 2 3 4


Пример вывода:
#YES
    

Решение

Первый способ– с использованием функции sorted():

        n = int(input())
matrix = [[int(i) for i in input().split()] for _ in range(n)]
for i in range(n):
    if sorted(matrix[i]) != list(range(1, n + 1)) or sorted([matrix[j][i] for j in range(n)]) != list(range(1, n + 1)):
        print('NO')
        break
else:
    print('YES')
    

Второй способ – с использованием функции all():

        n = int(input())
square = [[*map(int,input().split()) ] for i in range(n)]
a = all([all([c in row for c in range(1,n + 1)]) for row in square])
b = all([all([c in row1 for c in range(1, n + 1)]) for row1 in zip(*square)])

print(('NO','YES')[a and b])

    

Третий способ – с использованием транспонирования и множеств:

        n = int(input())
sq_set = set(range(1, n + 1))
square = []
for i in range(n):
    square.append(list(map(int, input().split())))
tr_square = list(map(list, zip(*square)))
vector_1 = [set(row) == sq_set for row in square]
vector_2 = [set(row) == sq_set for row in tr_square]
vector = vector_1 + vector_2
if all(vector):
    print('YES')
else:
    print('NO')

    
***

Материалы по теме




МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию
Разработчик C++
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ