🐍🧩 Π—Π°Π΄Π°Ρ‡Π° ΠΎΠ± ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ латинского ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая провСряСт, являСтся Π»ΠΈ заданная квадратная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° латинским ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠΌ.

Латинский ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ – это квадратная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 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')
***

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅




Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

admin
11 дСкабря 2018

ООП Π½Π° Python: ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python допускаСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π½ΠΎ Π² Π΅Π³ΠΎ основС...
admin
28 июня 2018

3 самых Π²Π°ΠΆΠ½Ρ‹Ρ… сфСры примСнСния Python: возмоТности языка

БущСствуСт мноТСство областСй примСнСния Python, Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ особСнно...
admin
13 фСвраля 2017

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python: ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° Π΄ΠΎ профСссионала

Пошаговая инструкция для всСх, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒΒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python...