• 1
    Entrada y salida de datos
    • Tareas
  • 2
    Condiciones
    • Tareas
  • 3
    Bucle for
    • Tareas
  • 4
    Cadenas de texto
    • Tareas
  • 5
    Bucle while
    • Tareas
  • 6
    Listas
    • Tareas
  • 7
    Matrices 2D
    • Tareas
  • 8
    Diccionarios
    • Tareas
  • 9
    Conjuntos
    • Tareas
  • 10
    Funciones y recursión
    • Tareas
  • к

Lección 6. Lists

Dificultad:

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib

Tarea«Soplando el ferze»

💻 Python

You are a grandmaster and you need to write a program that receives the coordinates of the eight queens on the input on the standard chessboard 8 × 8 and conducts a complete analysis of their arrangement.

Formato de entrada

Ocho líneas, cada una de las cuales contiene dos enteros del 1 al 8, separados por un espacio & mdash; Las coordenadas de una reina (primero el número de línea, luego el número de columna).

Formato de salida

  • Escenario 1: Se descubre el ataque.
    Si al menos un par de reinas se atacan entre sí, el programa debe:
    1. Mostrar la palabra   yes .
    2. En la siguiente línea, indicar las coordenadas del primer par atacado y el tipo de ataque. Por ejemplo: 1 1 y 8 8 se atacan entre sí en diagonal.
    3. Después de eso, dibujar el tablero de ajedrez 8 × 8 con las reinas colocadas.
  • Escenario 2: No.
    Si ningún par se ataca entre sí (la disposición es correcta), el programa debe:
    1. Mostrar la palabra   no .
    2. Después de eso, dibujar el tablero de ajedrez 8 × 8 con las reinas colocadas.
  • Visualización del tablero:
    El tablero debe presentarse en forma de una cuadrícula de 8x8. Las celdas vacías se indican con el símbolo   . , y las celdas con una reina se indican con el símbolo   Q .

Ejemplo

Entrada

1 1
2 3
3 5
4 7
5 2
6 4
7 6
8 8

Salida

Sí
1 1 y 8 8 se atacan diagonalmente.
Q. . . . . . .
. . Q. . . . .
. . . . Q. . .
. . . . . . Q.
. Q. . . . . .
. . . Q. . . .
. . . . . Q. .
. . . . . . . Q

Pista

There will be no clue here, decide for yourself!

main.py
Prueba 1
Prueba 2
Prueba 3
Prueba 4
Prueba 5
Prueba 6
Prueba 7
Prueba 8
Prueba 9
Prueba 10
Solución del desarrollador
def read_and_validate_coordinates():
    """
    Считывает 8 пар координат, проверяет их на корректность.
    Возвращает список кортежей с координатами или None в случае ошибки.
    """
    coords = []
    try:
        for _ in range(8):
            # Считываем строку и разделяем на части
            parts = input().split()
            # Проверяем, что в строке ровно два элемента
            if len(parts) != 2:
                raise ValueError
            # Преобразуем в целые числа
            row, col = int(parts[0]), int(parts[1])
            # Проверяем, что координаты в диапазоне от 1 до 8
            if not (1 <= row <= 8 and 1 <= col <= 8):
                raise ValueError
            coords.append((row, col))
    except (ValueError, IndexError):
        # ValueError возникает при неудачном int() или если условия не выполнены
        # IndexError может возникнуть, если split() дал меньше 2 элементов (хотя len(parts) это покрывает)
        return None
    return coords

def find_attacking_pair(coords):
    """
    Ищет первую атакующую пару ферзей.
    Возвращает кортеж (queen1, queen2, attack_type) или None, если атак нет.
    """
    # Проверка на дубликаты координат (ферзи на одной клетке)
    if len(coords) != len(set(coords)):
        # Найдем первую дублирующуюся пару
        seen = set()
        duplicate = None
        for q in coords:
            if q in seen:
                duplicate = q
                break
            seen.add(q)
        
        # Найдем индексы дубликатов
        indices = [i for i, x in enumerate(coords) if x == duplicate]
        q1 = coords[indices[0]]
        q2 = coords[indices[1]]
        # Ферзи на одной клетке - это и горизонтальная, и вертикальная атака.
        # Выберем "вертикали" для определенности.
        return q1, q2, "вертикали"

    # Проверяем все уникальные пары ферзей
    for i in range(len(coords)):
        for j in range(i + 1, len(coords)):
            r1, c1 = coords[i]
            r2, c2 = coords[j]

            # Проверка по горизонтали
            if r1 == r2:
                return coords[i], coords[j], "горизонтали"
            
            # Проверка по вертикали
            if c1 == c2:
                return coords[i], coords[j], "вертикали"
            
            # Проверка по диагонали
            if abs(r1 - r2) == abs(c1 - c2):
                return coords[i], coords[j], "диагонали"
                
    return None, None, None

def print_board(coords):
    """
    Печатает шахматную доску 8x8 с расставленными ферзями.
    """
    board = [['.' for _ in range(8)] for _ in range(8)]
    for r, c in coords:
        # Координаты (1,1) соответствуют индексу [0][0]
        board[r - 1][c - 1] = 'Q'
    
    for row in board:
        print(' '.join(row))

def main():
    """
    Главная функция программы.
    """
    coordinates = read_and_validate_coordinates()
    
    if coordinates is None:
        print("Ошибка: координаты должны быть числами от 1 до 8.")
        return
        
    q1, q2, attack_type = find_attacking_pair(coordinates)
    
    if attack_type:
        print("YES")
        print(f"{q1[0]} {q1[1]} и {q2[0]} {q2[1]} бьют друг друга по {attack_type}.")
        print_board(coordinates)
    else:
        print("NO")


main()

🎉 ¡Felicidades! 🎉

¡Has resuelto la tarea brillantemente! Era un reto difícil, pero encontraste la solución correcta. ¡Estás un paso más cerca de dominar la programación! Sigue así, cada etapa superada te hace más fuerte.

AD

Publicidad

red-snake blue-snake green-snake

Ejecutando tu código...

Asistente de IA

¡Hola! Soy tu asistente de programación. Hazme cualquier pregunta sobre Python — puedo explicarte funciones, métodos y ayudarte con la tarea actual.