Wrong answer python ошибка

Выполняя задание на Степике, столкнулся с проблемой. Написанная программка выдает правильные ответы, но не принимается проверкой, пишет:

Failed test #5 of 15. Wrong answer

(Здесь впервые задаю вопрос, не обессудьте, может не в верной форме))

Задание: Узнав, что ДНК не является случайной строкой, только что поступившие в Институт биоинформатики студенты группы информатиков предложили использовать алгоритм сжатия, который сжимает повторяющиеся символы в строке.

Кодирование осуществляется следующим образом:
s = ‘aaaabbсaa’ преобразуется в ‘a4b2с1a2’, то есть группы одинаковых символов исходной строки заменяются на этот символ и количество его повторений в этой позиции строки.

Напишите программу, которая считывает строку, кодирует её предложенным алгоритмом и выводит закодированную последовательность на стандартный вывод. Кодирование должно учитывать регистр символов.

и решение:

s = input()
a = len(s)
b = ""
j = 1
for i in range(0, a-1):
    if s[i] == s[i + 1]:
        j +=1
        if j == len(s):
            b = s[0] + str(j)
    else:
        b = b +s[i]+ str(j)
        j = 1        
if len(s)>= 2 and s[a - 1]!= s[a - 2]:
    b += s[a - 1] + "1"
elif len(s) >=3:
    if s[a - 1] == s[a - 2] and s[a-2] != s[a - 3]:
        b += s[a-1] + "2"
elif len(s) == 1:
    b = b + s[0] + "1"
print(b)

Выполняя задание на Степике, столкнулся с проблемой. Написанная программка выдает правильные ответы, но не принимается проверкой, пишет:

Failed test #5 of 15. Wrong answer

(Здесь впервые задаю вопрос, не обессудьте, может не в верной форме))

Задание: Узнав, что ДНК не является случайной строкой, только что поступившие в Институт биоинформатики студенты группы информатиков предложили использовать алгоритм сжатия, который сжимает повторяющиеся символы в строке.

Кодирование осуществляется следующим образом:
s = ‘aaaabbсaa’ преобразуется в ‘a4b2с1a2’, то есть группы одинаковых символов исходной строки заменяются на этот символ и количество его повторений в этой позиции строки.

Напишите программу, которая считывает строку, кодирует её предложенным алгоритмом и выводит закодированную последовательность на стандартный вывод. Кодирование должно учитывать регистр символов.

и решение:

s = input()
a = len(s)
b = ""
j = 1
for i in range(0, a-1):
    if s[i] == s[i + 1]:
        j +=1
        if j == len(s):
            b = s[0] + str(j)
    else:
        b = b +s[i]+ str(j)
        j = 1        
if len(s)>= 2 and s[a - 1]!= s[a - 2]:
    b += s[a - 1] + "1"
elif len(s) >=3:
    if s[a - 1] == s[a - 2] and s[a-2] != s[a - 3]:
        b += s[a-1] + "2"
elif len(s) == 1:
    b = b + s[0] + "1"
print(b)

День добрый. Начал изучать питон. Взял курсы в ВШЭ.
Первая неделя, дают в домашку задачу по математике.

Стрелки на часах показывали полночь. Прошло A часов и B минут, куда будут показывать часовая и минутная стрелки?

Целые числа A и B вводятся по одному в строке, обратите внимание, что в этой задаче число B может принимать значение 60 и более. Ваша программа должна вывести два целых числа через пробел: куда показывает часовая стрелка (это число должно лежать в пределах от 0 до 23) и куда показывает минутная стрелка (это число должно лежать в пределах от 0 до 59).

Моё решение

   
A = int(input())
B = int(input())
Hours = A % 24
finalMinute = B % 60
calcHours = ((B // 60) % 24) % 24
finalHours = Hours + calcHours
print (finalHours, finalMinute)

Ответ Failed test #7 of 9. Wrong answer

На курсах, в обсуждении писали, что ответ может быть неверен если поставить в минутах, например 1800 минут и т.п. я пробовал разные пятизначные цифры ставить. Всегда показывает время правильно. т.е. он считает правильно но выходит ошибка. Я не совсем понимаю что за неправильный ответ.

Подскажите пожалуйста, куда копать. Бьюсь уже несколько дней, так и подмывает забить.
Но принципиально хочется разобраться, что я делаю не так.

И это последние (% 24) явно лишние но это типа двойная проверка.

Отредактировано FishHook (Июнь 15, 2020 17:15:59)

Работа с тестирующей системой, расшифровка сообщений. «Задача A+B» на разных языках

Тестирующая система TestSys расположена по адресу: ts.lokos.net.

Для входа в систему следует использовать логин (обычно — 2 цифры) и пароль выданные преподавателем.

Задача «A+B» на разных языках программирования

Нужно ввести из входного файла два целых числа и вывести их сумму в выходной файл.

Pascal

const FN = 'aplusb'; { Название входного и выходного файла }
var a,b : longint; { Входные данные }
begin
  assign(Input,FN+'.in'); reset(input);
  assign(Output,FN+'.out'); rewrite(output);
  read(a,b); { Читаем исходные данные из входного файла }
  writeln(a+b); { Записываем результат в выходной файл }
end.

Delphi

{$APPTYPE CONSOLE}
const FN = 'aplusb'; { Название входного и выходного файла }
var a,b : Int64; { Входные данные }
begin
  reset(Input,FN+'.in');
  rewrite(Output,FN+'.out');
  read(a,b); { Читаем исходные данные из входного файла }
  writeln(a+b); { Записываем результат в выходной файл }
end.

C/C++

#include <stdio.h>
#define s "aplusb"

int main() {
  freopen(s".in","r",stdin); // Стандартный поток ввода из входного файла
  freopen(s".out","w",stdout); // Стандартный поток вывода в выходной файл
  long long a,b;
  scanf("%lld%lld",&a,&b);
  printf("%lld",a+b);
  return 0;
}

Сообщения тестирующей системы

  • Accepted Все в порядке! Ваша программа принята! Она откомпилировалась
    без
    ошибок и прошла все тесты.
  • Presentation Error (PE) — неправильный формат вывода, проверяющая
    программа не
    смогла прочитать ваш выходной файл или ваша программа вообще не создала выходной файл.
  • Wrong Answer (WA)— неправильный ответ на тест. 
  • Compile Error (CE) — ошибки компиляции программы. Посмотрите что вы отправляете (нажмите
    view в
    отправках).
  • Runtime Error (RT) — ошибка времени выполнения (выход за границы массива, переполнение
    переменной, деление на ноль, корень из отрицательного числа, ошибка в имени входного файла).
  • Time Limit (TL) — ваша программа выполнялась на каком-то тесте больше времени по условию
    задачи.
  • Memory Limit (ML) — ваша программа использовала больше памяти, чем разрешено по условию
    задачи.

Компиляторы

  • Pascal: Borland Delphi 7.0, Free Pascal 2.6.0;
  • C/C++: Visual C++ 2010 Express Edition, GNU C++ 4.6.1 (MinGW), Code::Blocks 10.05;
  • C#: Visual C# 2010 Express Edition;
  • Java: Sun JDK 7 update 9, Eclipse 4.2.
  • Python: Python 3.3.0, Wing IDE 101 4.1.9.

Примеры ошибок в решениях:

Presentation Error (PE)

Неправильное имя выходного файла:

{$APPTYPE CONSOLE}
var A,B : Int64;
begin
  Assign(Input,'aplusb.in'); Reset(Input);
  Assign(Output,'YA_NE_POMNU.out'); Rewrite(Output);
  Read(A,B);
  Write(A+B);  
end.

Программа выводит на экран вместо файла:

{$APPTYPE CONSOLE}
var A,B : Int64;
begin
  Assign(Input,'aplusb.in'); Reset(Input);
  { Assign(Output,'aplusb.out'); Rewrite(Output); }
  Read(A,B);
  Write(A+B);  
end.

Неверное решение:

{$APPTYPE CONSOLE}
var A,B : Int64;
begin
  Assign(Input,'aplusb.in'); Reset(Input);
  Assign(Output,'aplusb.out'); Rewrite(Output);
  Read(A,B);
  Write(A-B);  
end.

Точности/разрядности типов данных не хватает:

{$APPTYPE CONSOLE}
var A,B : Extended;
begin
  Assign(Input,'aplusb.in'); Reset(Input);
  Assign(Output,'aplusb.out'); Rewrite(Output);
  Read(A,B);
  Write((A+B):0:0);  
end.

Compile Error (CE)

{$APPTYPE CONSOLE}
var A,B : Int64;
begin
  ЯВНО НЕВЕРНАЯ СТРОКА!!!
  Assign(Input,'aplusb.in'); Reset(Input);
  Assign(Output,'aplusb.out'); Rewrite(Output);
  Read(A,B);
  Write(A+B);  
end.

Комментарий тестирующей системы:

Borland Delphi Version 15.0 
Copyright (c) 1983,2002 Borland Software Corporation 
a.dpr(4) Error: Illegal character in input file: 'Я' ($DF) 
a.dpr(4) Error: Illegal character in input file: 'А' ($C0) 
a.dpr(4) Error: Illegal character in input file: '!' ($21) 
a.dpr(9) 

Runtime Error (RE)

Программа завершилась с ненулевым кодом возврата, либо создала исключительную ситуацию (exception) и не
обработала
ее.

{$APPTYPE CONSOLE}
var A,B : Integer; { Integer переполняется на больших числах }
begin
  Assign(Input,'aplusb.in'); Reset(Input);
  Assign(Output,'aplusb.out'); Rewrite(Output);
  Read(A,B);
  Write(A+B);  
end.
{$APPTYPE CONSOLE}
var A,B : Int64; 
begin
  Assign(Input,'aplusb.in'); Reset(Input);
  Assign(Output,'aplusb.out'); Rewrite(Output);
  Read(A,B);
  Write(A div B); { Когда B равно 0, тут будет деление на ноль! }
end.

Для поиска RE в программе на Delphi используйте директивы:

{$O Off} { Выключаем оптимизацию }
{$R+} { Включаем проверку границ массивов }
{$Q+} { Включаем проверку переполнений }

Time Limit (TL)

Программа не завершилась за отведенный период времени.

Возможные причины:

  • Неэффективное решение;
  • Ошибка в программе (например, зацикливание).
{$APPTYPE CONSOLE}
var 
  A,B : Int64;
  I,K : Integer;  
begin  
  Assign(Input,'aplusb.in'); Reset(Input);
  Assign(Output,'aplusb.out'); Rewrite(Output);
  Read(A,B);
  { Цикл выполняется слишком долго!!! }
  for I:=Low(Integer) to High(Integer) do 
    K := I;           
  Write(A+B);  
end.

Memory Limit (ML)

Программа попыталась использовать больше памяти, чем разрешается.

{$APPTYPE CONSOLE}
var 
  A,B : Int64;
  T : array [1..100000000] of Integer; { Слишком большой массив!!! }
  I : Integer;
begin
  Assign(Input,'aplusb.in'); Reset(Input);
  Assign(Output,'aplusb.out'); Rewrite(Output);
  for I:=Low(T) to High(T) do T[I]:=2135;
  Read(A,B);
  Write(A+B);  
end.

Delphi XE2

The second type of error is a runtime error. A program with a runtime error
is one that passed the interpreter’s syntax checks, and started to execute.
However, during the execution of one of the statements in the program, an error
occurred that caused the interpreter to stop executing the program and display
an error message. Runtime errors are also called exceptions because they usually
indicate that something exceptional (and bad) has happened.

Here are some examples of common runtime errors you are sure to encounter:

  • Misspelled or incorrectly capitalized variable and function names

  • Attempts to perform operations (such as math operations) on data of the wrong type (ex.
    attempting to subtract two variables that hold string values)

  • Dividing by zero

  • Attempts to use a type conversion function such as int on a value that can’t be converted to an int

The following program contains various runtime errors. Can you spot any of them?
After locating the error, run the program to see the error message.

Notice the following important differences between syntax errors and runtime errors that can help you as you try to diagnose
and repair the problem:

  • If the error message mentions SyntaxError, you know that the problem has to do with syntax: the structure of the code,
    the punctuation, etc.

  • If the program runs partway and then crashes, you know the problem is a runtime error. Programs with syntax errors
    don’t execute even one line.

Stay tuned for more details on the various types of runtime errors. We have a whole section of this
chapter dedicated to that topic.

Check your understanding

    Which of the following is a run-time error?

  • Attempting to divide by 0.
  • Python cannot reliably tell if you are trying to divide by 0 until it is executing your program (e.g., you might be asking the user for a value and then dividing by that value—you cannot know what value the user will enter before you run the program).
  • Forgetting a colon at the end of a statement where one is required.
  • This is a problem with the formal structure of the program. Python knows where colons are required and can detect when one is missing simply by looking at the code without running it.
  • Forgetting to divide by 100 when printing a percentage amount.
  • This will produce the wrong answer, but Python will not consider it an error at all. The programmer is the one who understands that the answer produced is wrong.

    Who or what typically finds runtime errors?

  • The programmer.
  • Programmers rarely find all the runtime errors, there is a computer program that will do it for us.
  • The interpreter.
  • If an instruction is illegal to perform at that point in the execution, the interpreter will stop with a message describing the exception.
  • The computer.
  • Well, sort of. But it is a special thing in the computer that does it. The stand alone computer without this additional piece can not do it.
  • The teacher / instructor.
  • Your teacher and instructor may be able to find most of your runtime errors, but only because they have experience looking at code and possibly writing code. With experience runtime errors are easier to find. But we also have an automated way of finding these types of errors.

You have attempted of activities on this page

0 / 0 / 0

Регистрация: 22.12.2019

Сообщений: 3

1

12.01.2020, 23:05. Показов 7561. Ответов 0


Яндекс на 10-ом тесте выдает wrong answer
Не знаю что делать, уже весь код вдоль и поперек проверила, не вижу ошибки
Помогите пожалуйста

Условие на картинке

Мой код:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
a = int(input())
points = [[int(x) for x in input().split()] for i in range(a)]
choosen = [int(x) for x in input().split()]
point_to_swap = []
for ch_point_pos in choosen:
    ch_point = points[ch_point_pos - 1]
    x_points = {}
    y_points = {}
    x = 0
    y = 0
    for pos, point in enumerate(points):
        if point[0] == ch_point[0] and point[1] != ch_point[1]:
            x_points[ch_point[1] - point[1]] = pos
        if point[1] == ch_point[1] and point[0] != ch_point[0]:
            y_points[ch_point[0] - point[0]] = pos
    if x_points and y_points:
        if abs(max(x_points.keys(), key=abs)) > abs(max(y_points.keys(), key=abs)) or abs(
                max(x_points.keys(), key=abs)) == abs(max(y_points.keys(), key=abs)):
            a = max(x_points.keys(), key=abs)
            if a in x_points.keys() and -a in x_points.keys():
                point_to_swap = -a
            else:
                point_to_swap = a
            x = 1
        else:
            a = max(y_points.keys(), key=abs)
            if a in y_points.keys() and -a in y_points.keys():
                point_to_swap = -a
            else:
                point_to_swap = a
            y = 1
    elif x_points:
        a = max(x_points.keys(), key=abs)
        if a in x_points.keys() and -a in x_points.keys():
            point_to_swap = -a
        else:
            point_to_swap = a
        x = 1
    elif y_points:
        a = max(y_points.keys(), key=abs)
        if a in y_points.keys() and -a in y_points.keys():
            point_to_swap = -a
        else:
            point_to_swap = a
        y = 1
    if x == 1:
        points[ch_point_pos - 1][1] -= point_to_swap * 2
    elif y == 1:
        points[ch_point_pos - 1][0] -= point_to_swap * 2
num_point = [int(x) for x in input().split()]
if not points[num_point[0] - 1][0] == points[num_point[1] - 1][0] and not points[num_point[0] - 1][1] == 
                                                                         points[num_point[1] - 1][1]:
    print(abs(points[num_point[0] - 1][0] - points[num_point[1] - 1][0]) * abs(points[num_point[0] - 1][1] - points[num_point[1] - 1][1]))
else:
    print(0)

Миниатюры

wrong answer
 

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

Yandex Contest

Screenshot 2021-09-26 at 23 12 57

Яндекс.Контест — сервис для онлайн-проверки заданий по программированию. Он предназначен для проведения состязаний любого уровня: олимпиады, соревнования международного класса, домашние задания. Его можно использовать также для подготовки к турнирам и для приёма экзаменов. Решения проверяются автоматически — с помощью набора тестов, составленных авторами заданий. Участники отправляют свои решения в тестирующую систему, а та выдает результат.

Мы предлагаем ознакомиться с краткой инструкцией по данной платформе, чтобы вы могли уделить свое время только решению задач.

Инструкция

В конце каждой прослушанной лекции на данной платформе будут даваться задачи для самостоятельного решения.

Перейдя по ссылке к домашней работе, вам в первую очередь нужно будет авторизоваться на платформе через аккаунт в Яндексе.

copy on disk

Если у вас нет аккаунта, то пройдите самую обычную процедуру регистрации.

copy on disk

Далее вы увидите кнопку регистрации, по которой нужно перейти для выполнения задач.

Обратите внимание, что на картинке изображен обратный отсчет. Но обычно мы не делаем ограничений по времени на сдачу домашнего задания.

copy on disk

После старта вы увидите основную информацию о соревновании: название, количество оставшегося времени, кнопка досрочного завершения. Нас будет интересовать ссылка на решение задач.

copy on disk

Основная информация о задаче представлена на картинке:

copy on disk

Есть несколько типов вердиктов после отправки вашего ответа:

  • OK — ответ/код правильный;
  • WA — есть ошибка.

copy on disk

И другие. Подробнее про них вы можете прочитать здесь, а также ниже.

При этом стоит обратить внимание, что Система засчитывает задание решенным, если хотя бы одно из отправленных решений был верным (если не оговорено другое). После него вы можете отправлять хоть 10 неверных ответов, однако в системе все равно будет зафиксировано, что вы давали верный ответ.

Если вы закончили решать задачи раньше установленного времени, то можете завершить соревнование и сохранить ваши результаты:

copy on disk

Если такой кнопки в контесте нет — ничего страшного. Соревнование завершится автоматически по достижению дедлайна.

Типы ошибок в Яндекс. Контест и способы их устранения.

Как уже было сказано выше, при отправке решений в Яндекс. Контест тестовая система может не принимать решения, выдавая некоторую ошибку. Возможные типы ошибок с их краткими описаниями уже приводились выше. Ниже будут более подробно разобраны некоторые ошибки и их возможные исправления.

CE (Compilation Error)

Данная ошибка возникает, если ваша программа написана не по правилам языка Python. Попробуйте сначала запустить вашу программу в Google Colab. При этом обратите внимание на следующие моменты:

  1. Не нужно забывать про отступы. Не нужно делать никаких лишних отступов. При этом, в каждом блоке должно быть одинаковое количество пробелов в качестве отступов (рекомендуется использовать 4 пробела). В противном случае Яндекс. Контест выдаст ошибку CE (Compilation Error).
    Например, ошибочным будет такой код:
x = 123
   print(x) # Ошибка будет здесь, т.к. перед print стоят лишние отступы

Также ошибка будет в таком фрагменте:

x = 1
if x==1:
    print("One")
else:
 print("Else")
# Ошибка будет здесь, т.к. во всех блоках программы должно быть одинаковое
# количество отступов, здесь внутри else перед print используется 1 отступ, хотя
# ранее после if перед print использовалось 4 отступа
  1. Проверьте, что в качестве отступов везде используется либо только пробелы, либо только t. Обратите внимание, что Tab не всегда равен 8 проблелам. t и несколько пробелов – это разные символы. Поэтому если в программе для отступов используется и t, и пробелы – система может выдать ошибку.
  2. Не забывайте закрывать все скобки и кавычки. Например, ошибку CE вызывают следующие фрагменты кода: print('str', print('123) и т.д.
  3. Проверьте наличие двоеточия после строчки с if, else, for, while (if x>y: ).

PE (Presentation error)

Данная ошибка может возникать, если формат вывода программы неверный.

При возникновении этой ошибки рекомендуется проверить следующее:

  1. В Google Colab для вывода значения переменной достаточно указать просто её имя:

copy on disk

Это допущение сделано для упрощения разработки. В Яндекс. Контесте такого нет. Необходимо явно использовать print(), чтобы вывести значение переменной:

  1. Тестовая система проверяет ответ с эталонным посимвольно. Поэтому отличие хотя бы в одном символе может привести к ошибке. Поэтому перед отправкой решений проверяйте, что в программе нет лишних (или недостающих) пробелов, переходов на новую строку и других символов.
  2. Лишним также могут быть вспомогательные сообщения, которые указываются в параметрах input() или print(), т.к. эти сообщения попадают в стандартный поток вывода и рассматриваются тестирующей системой как часть ответа.
    Как правило, в задачах требуется просто ввести или вывести какие-то значения без каких-то дополнительных подсказок.
    Т.е. не нужно писать input(“Введите число: ”) или print(“Искомый результат: ”, res) (здесь res — некоторая переменная, показывающая результат работы программы). Нужно писать просто input() или print(res).

RE (Runtime error)

Самая частая ошибка. Возникает, если код написан в целом по правилам языка Python, однако в ходе выполнения программы обнаруживаются какие-то ошибки.
При возникновении этой ошибки следует проверить следующее:

  1. Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к RE).
  2. Попробуйте запустить код в Google Colab и самостоятельно поискать ошибку.
  3. При использовании сторонних библиотек (numpy, pandas, math, fractions, itertools и др.) не забывайте делать соответствующий import:
  1. Если программа использует работу с файлами – проверьте точное совпадение имен входного и выходного файла в вашей программе с тем, что указано в условии.
  2. Проверьте, что имена стандартных функций и арифметические операции записаны верно (при этом не забывайте, что Python чувствителен к регистру букв, т.е. Print() и print() – это разные функции). Например, 2^3 – неверная запись операции возведения в степень (нужно 2**3). Аналогично, Print('string') – неверно, т.к. написано с большой буквы (верно print('string')).
  3. Не забывайте, сколько и каких параметров принимает каждая функция. Например, функция write() принимает только одну строку в отличие от print() (который принимает сколько угодно параметров, а также именованные параметры вроде sep и end). Также функция float() принимает в качестве параметра строку, представляющую вещественное число, где в качестве разделителя используется точка, а не запятая. Т.е. запись float("3,14") приведёт к ошибке (нужно float("3.14")).
  4. Проверьте, что нигде в вашей программе не может возникнуть деление на ноль при определённых входных данных или обращение к элементу списка/словаря с несуществующим индексом/ключом (например, для lst=[1, 2, 3] обращение lst[500] вызовет ошибку, т.к. элемента с индексом 500 в списке нет. Аналогично, для словаря d = {‘cat’: 3, ‘lion’: 2, ‘dog’: 7} вызовет ошибку обращение d[‘mouse’] (т.к. такого ключа в словаре нет)).

WA (Wrong answer)

Эта ошибка возникает в том случае, когда код написан без ошибок, связанных с языком Python, однако где-то в логике программы присутствует ошибка.

Тестовая система проверяет ваш код на различных входных данных (так называемых тестах) и сверяет ответ работы программы с эталонным. Если хотя бы на одном тесте ответ отличается, программа выдаёт ошибку WA. При этом, в таблице с вердиктом (она находится внизу решения на сайте Яндекс. Контест) в строке, соответствующей ошибке WA в столбце «Тест» указывается номер теста, на котором ответ вашей программы не совпал с эталонным.

copy on disk

В случае возникновения этой ошибки, проверьте следующие моменты:

  1. Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к WA).
  2. Если ошибка возникает на тесте № 1 – следует проверить корректность работы программы на данных из условия (обычно в условии есть пример ввода и вывода).
  3. Если ошибка возникает на тесте с номером больше 1 – стоит внимательно перечитать условие и комментарии к нему и проверить, что всё учтено:
    1. Верно указаны имена входных и выходных файлов (если программа подразумевает работу с файлами).
    2. Соблюдён формат выходных данных (всегда печатается нужное количество знаков после точки в вещественных числах, в .csv-файлах используются верные разделители, а названия колонок в точности совпадают с теми, что требуются в условии).
    3. Попытайтесь подумать, на каких входных данных, которые не совпадают с примером из условия, но соответствуют условию, ваша программа может работать некорректно.

Step on Stepik: https://stepik.org/lesson/6281/step/9

Общие рекомендации по решению задач на bash

В рамках нашего курса вам будет предложено 5 заданий, в которых вам потребуется написать bash-скрипт. Эти рекомендации расскажут как стоит подходить к решению таких задач, а также покажут наиболее распространенные ошибки и варианты их исправления.

Перед отправкой скрипта на проверку мы настоятельно рекомендуем запустить его в своем терминале, чтобы »»убедиться, что в немнет синтаксических ошибок и что он корректно работает хотя бы на примерах из задания. Результаты должны совпадать с результатами из задания один в один, т.е. важны все символы, например, количество пробелов!
Для отправки скрипта на проверку вам нужно скопировать текст скрипта в соответствующую форму и нажать кнопку «Submit/Отправить». В скрипте вы можете пропустить строку шебанг (например, #!/bin/bash), т.к. наша система проверки её игнорирует и использует для запуска свою версию интерпретатора bash. Кроме того, учитывайте, что если вы копируете скрипт из текстового редактора в Windows, то в каждую строку скрипта может быть добавлен невидимый символ «возврата каретки», который вызовет ошибку проверки.

Наша система проверки не будет исследовать ваш код и искать в нем необходимые команды. Вместо этого она запускает отправленный скрипт на нескольких тестах и сверяет результаты его работы с эталонными. Таким образом, каждую задачу можно решить множеством различных способов, главное чтобы выполнялись поставленные условия. Для проверки мы используем обычный интерпретатор bash, но из-за некоторых технических особенностей и в целях безопасности на ваши скрипты накладываются небольшие ограничения, которые описаны ниже.

Если вы получаете от системы проверки ответ «Incorrect/Неверное решение», то для того, чтобы разобраться в причинах отказа стоит нажать на кнопку Feedback. Вы увидите сообщения одного из следующих видов:

Failed test #1 (или 2). Wrong answer. Результаты работы вашей программы на первом тесте отличаются от правильных. Первый тест полностью совпадают с первым примером из задания, поэтому если он у вас не работает, то проверьте ваш скрипт на этом примере. Если в задании есть второй пример, то тест №2 соответствует ему. Наиболее частые ошибки-расхождения это:

  1. Отсутствие пробела или наоборот лишний пробел. Например, «Alexey,your group is adult» не то же самое, что «Alexey, your group is adult» (сразу два расхождения).
  2. Отсутствие двоеточия. Например, «enter your age» не то же самое, что «enter your age:».
  3. Опечатки в словах. Например, «buy» вместо «bye» или «abult» вместо «adult».

Failed test #3 (4, 5, и т.д.). Wrong answer. Результаты работы вашей программы на третьем тесте отличаются от правильного. В заданиях нет третьего (и всех последующих) примеров, но они проверяют те фрагменты из задания, которые не покрыты первыми тестами. Например, если в задании написано, что калькулятор должен уметь выполнять сложение, вычитание, умножение и деление, а примеры описывают только сложение и вычитание, то тест №3 может проверять работу умножения, а тест №4 — деления. Проверьте, что ваш скрипт выполняет все условия из задания.

Failed test #1. Run time error: jailed_code: line 14: syntax error: unexpected end of file. Ошибка в синтаксисе bash. Синтаксические ошибки бывают разных видов, обычно сообщение подсказывает как номер ошибочной строки, так и то, в чем собственно ошибка. Например, «unexpected end of file» обычно означает, что вы начали какую-то конструкцию bash, например, if, но забыли завершающее слово, например, fi (возможно оно потерялось при копировании скрипта в форму). Рекомендуем перечитать слайды лекций и исправить ошибки в синтаксисе.

Failed test #1. Run time error.Ошибка во время выполнения программы. Чаще всего это вызвано тем, что код возврата вашего скрипта отличен от нуля (обычно это означает в Linux ошибку выполнения программы). Например, вы выходите из скрипта при помощи exit 1 (следует исправить на exit 0). Вы можете проверить код возврата вашего скрипта, запустив в терминале echo Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {displaystyle ?</code> сразу после его завершения (должно быть напечатано на экран число 0).<br /> <br /> Failed test #1. '''Time limit exceeded.''' Ваш скрипт &quot;завис&quot;. Например, он содержит цикл, который выполняет бесконечно или скрипт ждет ввода данных от пользователя, когда их уже не должны давать на вход. '''Проверьте''', что вы правильно описали '''условие''' '''выхода''' из цикла.<br /> <br /> Failed test #1. Run time error: jailed_code: '''fork: retry: No child processes''' ... '''Resource temporarily unavailable'''&quot;. В скрипте используются &quot;внешние&quot; вызовы, которые запрещены на нашем сервере в целях безопасности, чтобы, например, нельзя было удалить какие-то файлы из нашей системы при помощи rm. Под &quot;внешний&quot; вызов может попасть и совершенно неочевидные конструкции, поэтому к этой ошибке надо отнестись наиболее внимательно. Рассмотрим наиболее частые ситуации:<br /> # <code>echo &quot;GCD is `gcd }
$$arg1 Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {displaystyle $}
arg2`
— вызываете свою функцию gcd (т.е. не внешнюю), но в косых кавычках. Можно исправить перенеся печать «GCD is Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response («Math extension cannot connect to Restbase.») from server «https://api.formulasearchengine.com/v1/»:): {displaystyle $}
results» прямо внутрь функции gcd, а в основном коде вызывать функцию как gcd Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {displaystyle arg1 }
arg2
.

  1. echo Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {displaystyle (expr x+y)</code> -- используете внешний обработчик выражений '''expr'''. Можно исправить, сделав в два действия: <code>let &quot;result = x + y&quot;</code> и <code>echo &quot;}
    result"
    .
  2. while (true)вызов в круглых скобках также является внешним (по аналогии с косыми кавычками), стоит заменить на просто while true.
  3. pwd, touch, mkdir, rm и т.п. — запрещены.

Иногда опечатки и синтаксические ошибки также могут быть восприняты как внешний вызов:

  1. Забыли пробел после »’ (или »’перед ). Например, конструкция if [["exit" == Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {displaystyle var1 ]]</code> воспринимается как if c вызовом внешней программы <code>[[&quot;exit&quot;</code> с аргументами <code>==</code>, <code>}
    var1
    и ]].
  2. Поставили пробелы около =. Например, var1 = 10 воспринимается как вызов внешней программы var1 с аргументами = и 10.
  3. Поставили знак Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response («Math extension cannot connect to Restbase.») from server «https://api.formulasearchengine.com/v1/»:): {displaystyle »’ перед переменной, »’когда это не нужно»’. Например, если в переменной <code>var1</code> записано слово &quot;test&quot;, а вы захотите записать туда слово &quot;test2&quot; при помощи <code>}
    var1=test2</code>, то bash воспримет это как вызов программы test=test2 (из-за знака доллара вместо переменной будет подставлено её значение, т.е. test).
  4. Опечатались в команде языка bash. Например, Echo вместо echo или braek вместо break.

Чаще всего такие ошибки легко найти, если вы запустите свой скрипт в терминале. Например, при ошибке описанной в пункте 2, терминал сообщит вам «var1: command not found/var1: команда не найдена».

Если вы проверили свой скрипт всеми описанными способами, но всё-равно не можете понять что не так, а в терминале у вас всё работает, то вам может помочь чтение комментариев других участников под этой задачей. Многие ошибки повторяются, так что возможно и для вашей проблемы уже написано решение!

  • #1

Есть задача:

Вашему решению будет предоставлены две переменные a и b. Напишите списочное выражения для получения квадратов чисел из диапазона [a, b].
В решении не должно быть ничего, кроме списочного выражения.

ПРИМЕР:

Ввод
a = 1
b = 5

Вывод
[1, 4, 9, 16, 25]

В итоге решение в одну строку, но при проверке — ошибка RE (Вывод моей программы идентичен примеру)

Python:

print([i**2 for i in range(int(input()), int(input()) + 1)])

Подумал, что ввод может быть организован именно строками типа ‘a = 1’, тогда отсекаю первые 4 символа, но все равно ошибка.

Python:

print([i**2 for i in range(int(input()[4:]), int(input()[4:]) + 1)])

Если вместо input() указываю переменные a, b — в логе пишет, что эти переменные неопределены.

Что может быть не по феншую?

  • #4

Ну хз. попробуй так
upd

Python:

a = int(input('a = '))
b = int(input('b = '))

print([i**2 for i in range(a, b + 1)] if a < b
      else [i**2 for i in range(a, b - 1, -1)])

  • #2

но при проверке — ошибка RE

Что это за ошибка такая? Где она возникает?

  • #3

Что это за ошибка такая? Где она возникает?

1671554928829-png.2160

1671555351835.png

  • #5

Ну хз. попробуй так

Python:

a = int(input('a = '))
b = int(input('b = '))

print([i**2 for i in range(a, b + 1)] if a < b
      else [i**2 for i in range(b, a + 1)])

Согласен, не учел, что первое число может быть меньше второго, но дело в том, что если бы ответ был неверным, была бы ошибка WA (wrong answer)

  • #6

В общем разобрался. Основная фраза «В решении не должно быть ничего, кроме списочного выражения.»

Напишите программу, на вход которой подаётся прямоугольная матрица в виде последовательности строк, заканчивающихся строкой, содержащей только строку «end» (без кавычек)

Программа должна вывести матрицу того же размера, у которой каждый элемент в позиции i, j равен сумме элементов первой матрицы на позициях (i-1, j), (i+1, j), (i, j-1), (i, j+1). У крайних символов соседний элемент находится с противоположной стороны матрицы.

В случае одной строки/столбца элемент сам себе является соседом по соответствующему направлению.

Пример решения:

convert_to_int, input_matrix = [], []
while True:
    lst = [x for x in input().split()]                 # here we get strings
    if 'end' not in lst:
        convert_to_int = [int(item) for item in lst]   # here we convert it to integers
        input_matrix.append(convert_to_int)
        continue
    else:
        break

if not input_matrix:
    print(*input_matrix)
    quit()

N, M = len(input_matrix[0]), len(input_matrix)

out_matrix = []
for i, lst in enumerate(input_matrix):  # raw and list
    for j, value in enumerate(lst):  # column and value
        out_matrix.append(
            input_matrix[(i - 1) % M][j] + input_matrix[(i + 1) % M][j] + input_matrix[i][(j - 1) % N] +
            input_matrix[i][(j + 1) % N])

step = N
counter = 0
for index,val in enumerate(out_matrix):
    if index == len(out_matrix)-1:
        print(*out_matrix[counter:])
    elif index == N:
        print(*out_matrix[counter:index])
        counter += step
        N += step

программа (как мне кажется) корректно отрабатывает на локальной IDE согласно условиям задачи, но при проверке на сайте появляется ошибка

Failed test #4. Wrong answer

Преподаватель на курсе говорит, что проблема в

в не соответствии решения выставленным требованиям.
> на вход которой подаётся прямоугольная матрица

Есть мысль переделать программу так, чтобы output_матрица наполнялась к примеру нулями согласно значению переменных N и M, которые будут принимать их от размеров сторон input_матрицы, но видел решения у других и там такого не было хотя не факт, что оно прошло все проверки, но это никак не относится к замечанию выше и навряд ли поможет…

примеры input/output:

9 5 3
0 7 -1
-5 2 9
end
3 21 22
10 6 19
20 16 -1

Process finished with exit code 0
1
end
4

Process finished with exit code 0
1 2 3 4
5 6 7 8
end
16 16 20 20
16 16 20 20

Process finished with exit code 0
1 2
3 4
5 6
7 8
end
14 14
14 14
22 22
22 22

Process finished with exit code 0

Извините за большой текст , я новенький , учу питон и пытаюсь решить задачу только теми способами , которые нам дали на обучении.

Задача на Stepik:

Узнав, что ДНК не является случайной строкой, только что поступившие в Институт биоинформатики студенты группы информатиков предложили использовать алгоритм сжатия, который сжимает повторяющиеся символы в строке.
Кодирование осуществляется следующим образом:
s = ‘aaaabbсaa’ преобразуется в ‘a4b2с1a2’, то есть группы одинаковых символов исходной строки заменяются на этот символ и количество его повторений в этой позиции строки.
Напишите программу, которая считывает строку, кодирует её предложенным алгоритмом и выводит закодированную последовательность на стандартный вывод. Кодирование должно учитывать регистр символов

1)Не могу пройти один из тестов, все проверки которые мог придумать я реализовал( в том числе и на неверный символ ), но получаю ошибку:

Failed test #6 of 15. Wrong answer

2)Не совсем понимаю условие «Кодирование должно учитывать регистр символов» , что оно должно значить

Мой код:

s = input()
s = s.lower()

n = 0
j = 0
i = 0
ia = 0
ib = 0
ic = 0
simv_err = 0

# проверка всей строки на неверный символ

while j <= len(s)-1 :  
    if s[j] == 'a' or s[j] == 'b' or s[j] == 'c':
        j += 1
    else :
        j += 1
        simv_err += 1
if simv_err > 0 : 
    print('Неверный символ')
    
#если все символы в строке верные , начинаем считать

else :
    while i <= (len(s)-1) : 
            if s[i] == 'a' :
                i += 1
                ia += 1
                if i > (len(s)-1) or s[i] != 'a':
                    ic = 0
                    ib = 0
                    print("a",end='')
                    print(ia,end='')
            elif s[i] == 'b' :
                i += 1
                ib += 1
                ia = 0
                if i > (len(s)-1) or s[i] != 'b' :
                    ic = 0
                    ia = 0
                    print("b",end='')
                    print(ib,end='')
            elif s[i] == 'c' :
                i += 1
                ic += 1
                ib = 0
                ia = 0
                if i > (len(s)-1) or s[i] != 'c' :
                    ia = 0
                    ib = 0
                    print("c",end='')
                    print(ic,end='')

Yandex Contest

Screenshot 2021-09-26 at 23 12 57

Яндекс.Контест — сервис для онлайн-проверки заданий по программированию. Он предназначен для проведения состязаний любого уровня: олимпиады, соревнования международного класса, домашние задания. Его можно использовать также для подготовки к турнирам и для приёма экзаменов. Решения проверяются автоматически — с помощью набора тестов, составленных авторами заданий. Участники отправляют свои решения в тестирующую систему, а та выдает результат.

Мы предлагаем ознакомиться с краткой инструкцией по данной платформе, чтобы вы могли уделить свое время только решению задач.

Инструкция

В конце каждой прослушанной лекции на данной платформе будут даваться задачи для самостоятельного решения.

Перейдя по ссылке к домашней работе, вам в первую очередь нужно будет авторизоваться на платформе через аккаунт в Яндексе.

copy on disk

Если у вас нет аккаунта, то пройдите самую обычную процедуру регистрации.

copy on disk

Далее вы увидите кнопку регистрации, по которой нужно перейти для выполнения задач.

Обратите внимание, что на картинке изображен обратный отсчет. Но обычно мы не делаем ограничений по времени на сдачу домашнего задания.

copy on disk

После старта вы увидите основную информацию о соревновании: название, количество оставшегося времени, кнопка досрочного завершения. Нас будет интересовать ссылка на решение задач.

copy on disk

Основная информация о задаче представлена на картинке:

copy on disk

Есть несколько типов вердиктов после отправки вашего ответа:

  • OK — ответ/код правильный;
  • WA — есть ошибка.

copy on disk

И другие. Подробнее про них вы можете прочитать здесь, а также ниже.

При этом стоит обратить внимание, что Система засчитывает задание решенным, если хотя бы одно из отправленных решений был верным (если не оговорено другое). После него вы можете отправлять хоть 10 неверных ответов, однако в системе все равно будет зафиксировано, что вы давали верный ответ.

Если вы закончили решать задачи раньше установленного времени, то можете завершить соревнование и сохранить ваши результаты:

copy on disk

Если такой кнопки в контесте нет — ничего страшного. Соревнование завершится автоматически по достижению дедлайна.

Типы ошибок в Яндекс. Контест и способы их устранения.

Как уже было сказано выше, при отправке решений в Яндекс. Контест тестовая система может не принимать решения, выдавая некоторую ошибку. Возможные типы ошибок с их краткими описаниями уже приводились выше. Ниже будут более подробно разобраны некоторые ошибки и их возможные исправления.

CE (Compilation Error)

Данная ошибка возникает, если ваша программа написана не по правилам языка Python. Попробуйте сначала запустить вашу программу в Google Colab. При этом обратите внимание на следующие моменты:

  1. Не нужно забывать про отступы. Не нужно делать никаких лишних отступов. При этом, в каждом блоке должно быть одинаковое количество пробелов в качестве отступов (рекомендуется использовать 4 пробела). В противном случае Яндекс. Контест выдаст ошибку CE (Compilation Error).
    Например, ошибочным будет такой код:
x = 123
   print(x) # Ошибка будет здесь, т.к. перед print стоят лишние отступы

Также ошибка будет в таком фрагменте:

x = 1
if x==1:
    print("One")
else:
 print("Else")
# Ошибка будет здесь, т.к. во всех блоках программы должно быть одинаковое
# количество отступов, здесь внутри else перед print используется 1 отступ, хотя
# ранее после if перед print использовалось 4 отступа
  1. Проверьте, что в качестве отступов везде используется либо только пробелы, либо только t. Обратите внимание, что Tab не всегда равен 8 проблелам. t и несколько пробелов – это разные символы. Поэтому если в программе для отступов используется и t, и пробелы – система может выдать ошибку.
  2. Не забывайте закрывать все скобки и кавычки. Например, ошибку CE вызывают следующие фрагменты кода: print('str', print('123) и т.д.
  3. Проверьте наличие двоеточия после строчки с if, else, for, while (if x>y: ).

PE (Presentation error)

Данная ошибка может возникать, если формат вывода программы неверный.

При возникновении этой ошибки рекомендуется проверить следующее:

  1. В Google Colab для вывода значения переменной достаточно указать просто её имя:

copy on disk

Это допущение сделано для упрощения разработки. В Яндекс. Контесте такого нет. Необходимо явно использовать print(), чтобы вывести значение переменной:

  1. Тестовая система проверяет ответ с эталонным посимвольно. Поэтому отличие хотя бы в одном символе может привести к ошибке. Поэтому перед отправкой решений проверяйте, что в программе нет лишних (или недостающих) пробелов, переходов на новую строку и других символов.
  2. Лишним также могут быть вспомогательные сообщения, которые указываются в параметрах input() или print(), т.к. эти сообщения попадают в стандартный поток вывода и рассматриваются тестирующей системой как часть ответа.
    Как правило, в задачах требуется просто ввести или вывести какие-то значения без каких-то дополнительных подсказок.
    Т.е. не нужно писать input(“Введите число: ”) или print(“Искомый результат: ”, res) (здесь res — некоторая переменная, показывающая результат работы программы). Нужно писать просто input() или print(res).

RE (Runtime error)

Самая частая ошибка. Возникает, если код написан в целом по правилам языка Python, однако в ходе выполнения программы обнаруживаются какие-то ошибки.
При возникновении этой ошибки следует проверить следующее:

  1. Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к RE).
  2. Попробуйте запустить код в Google Colab и самостоятельно поискать ошибку.
  3. При использовании сторонних библиотек (numpy, pandas, math, fractions, itertools и др.) не забывайте делать соответствующий import:
  1. Если программа использует работу с файлами – проверьте точное совпадение имен входного и выходного файла в вашей программе с тем, что указано в условии.
  2. Проверьте, что имена стандартных функций и арифметические операции записаны верно (при этом не забывайте, что Python чувствителен к регистру букв, т.е. Print() и print() – это разные функции). Например, 2^3 – неверная запись операции возведения в степень (нужно 2**3). Аналогично, Print('string') – неверно, т.к. написано с большой буквы (верно print('string')).
  3. Не забывайте, сколько и каких параметров принимает каждая функция. Например, функция write() принимает только одну строку в отличие от print() (который принимает сколько угодно параметров, а также именованные параметры вроде sep и end). Также функция float() принимает в качестве параметра строку, представляющую вещественное число, где в качестве разделителя используется точка, а не запятая. Т.е. запись float("3,14") приведёт к ошибке (нужно float("3.14")).
  4. Проверьте, что нигде в вашей программе не может возникнуть деление на ноль при определённых входных данных или обращение к элементу списка/словаря с несуществующим индексом/ключом (например, для lst=[1, 2, 3] обращение lst[500] вызовет ошибку, т.к. элемента с индексом 500 в списке нет. Аналогично, для словаря d = {‘cat’: 3, ‘lion’: 2, ‘dog’: 7} вызовет ошибку обращение d[‘mouse’] (т.к. такого ключа в словаре нет)).

WA (Wrong answer)

Эта ошибка возникает в том случае, когда код написан без ошибок, связанных с языком Python, однако где-то в логике программы присутствует ошибка.

Тестовая система проверяет ваш код на различных входных данных (так называемых тестах) и сверяет ответ работы программы с эталонным. Если хотя бы на одном тесте ответ отличается, программа выдаёт ошибку WA. При этом, в таблице с вердиктом (она находится внизу решения на сайте Яндекс. Контест) в строке, соответствующей ошибке WA в столбце «Тест» указывается номер теста, на котором ответ вашей программы не совпал с эталонным.

copy on disk

В случае возникновения этой ошибки, проверьте следующие моменты:

  1. Проверьте, что выполнены все рекомендации при возникновении ошибки Presentation error (эти же ситуации иногда могут приводить и к WA).
  2. Если ошибка возникает на тесте № 1 – следует проверить корректность работы программы на данных из условия (обычно в условии есть пример ввода и вывода).
  3. Если ошибка возникает на тесте с номером больше 1 – стоит внимательно перечитать условие и комментарии к нему и проверить, что всё учтено:
    1. Верно указаны имена входных и выходных файлов (если программа подразумевает работу с файлами).
    2. Соблюдён формат выходных данных (всегда печатается нужное количество знаков после точки в вещественных числах, в .csv-файлах используются верные разделители, а названия колонок в точности совпадают с теми, что требуются в условии).
    3. Попытайтесь подумать, на каких входных данных, которые не совпадают с примером из условия, но соответствуют условию, ваша программа может работать некорректно.

День добрый. Начал изучать питон. Взял курсы в ВШЭ.
Первая неделя, дают в домашку задачу по математике.

Стрелки на часах показывали полночь. Прошло A часов и B минут, куда будут показывать часовая и минутная стрелки?

Целые числа A и B вводятся по одному в строке, обратите внимание, что в этой задаче число B может принимать значение 60 и более. Ваша программа должна вывести два целых числа через пробел: куда показывает часовая стрелка (это число должно лежать в пределах от 0 до 23) и куда показывает минутная стрелка (это число должно лежать в пределах от 0 до 59).

Моё решение

   
A = int(input())
B = int(input())
Hours = A % 24
finalMinute = B % 60
calcHours = ((B // 60) % 24) % 24
finalHours = Hours + calcHours
print (finalHours, finalMinute)

Ответ Failed test #7 of 9. Wrong answer

На курсах, в обсуждении писали, что ответ может быть неверен если поставить в минутах, например 1800 минут и т.п. я пробовал разные пятизначные цифры ставить. Всегда показывает время правильно. т.е. он считает правильно но выходит ошибка. Я не совсем понимаю что за неправильный ответ.

Подскажите пожалуйста, куда копать. Бьюсь уже несколько дней, так и подмывает забить.
Но принципиально хочется разобраться, что я делаю не так.

И это последние (% 24) явно лишние но это типа двойная проверка.

Отредактировано FishHook (Июнь 15, 2020 17:15:59)

Студворк — интернет-сервис помощи студентам

Яндекс на 10-ом тесте выдает wrong answer
Не знаю что делать, уже весь код вдоль и поперек проверила, не вижу ошибки
Помогите пожалуйста

Условие на картинке

Мой код:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
a = int(input())
points = [[int(x) for x in input().split()] for i in range(a)]
choosen = [int(x) for x in input().split()]
point_to_swap = []
for ch_point_pos in choosen:
    ch_point = points[ch_point_pos - 1]
    x_points = {}
    y_points = {}
    x = 0
    y = 0
    for pos, point in enumerate(points):
        if point[0] == ch_point[0] and point[1] != ch_point[1]:
            x_points[ch_point[1] - point[1]] = pos
        if point[1] == ch_point[1] and point[0] != ch_point[0]:
            y_points[ch_point[0] - point[0]] = pos
    if x_points and y_points:
        if abs(max(x_points.keys(), key=abs)) > abs(max(y_points.keys(), key=abs)) or abs(
                max(x_points.keys(), key=abs)) == abs(max(y_points.keys(), key=abs)):
            a = max(x_points.keys(), key=abs)
            if a in x_points.keys() and -a in x_points.keys():
                point_to_swap = -a
            else:
                point_to_swap = a
            x = 1
        else:
            a = max(y_points.keys(), key=abs)
            if a in y_points.keys() and -a in y_points.keys():
                point_to_swap = -a
            else:
                point_to_swap = a
            y = 1
    elif x_points:
        a = max(x_points.keys(), key=abs)
        if a in x_points.keys() and -a in x_points.keys():
            point_to_swap = -a
        else:
            point_to_swap = a
        x = 1
    elif y_points:
        a = max(y_points.keys(), key=abs)
        if a in y_points.keys() and -a in y_points.keys():
            point_to_swap = -a
        else:
            point_to_swap = a
        y = 1
    if x == 1:
        points[ch_point_pos - 1][1] -= point_to_swap * 2
    elif y == 1:
        points[ch_point_pos - 1][0] -= point_to_swap * 2
num_point = [int(x) for x in input().split()]
if not points[num_point[0] - 1][0] == points[num_point[1] - 1][0] and not points[num_point[0] - 1][1] == 
                                                                         points[num_point[1] - 1][1]:
    print(abs(points[num_point[0] - 1][0] - points[num_point[1] - 1][0]) * abs(points[num_point[0] - 1][1] - points[num_point[1] - 1][1]))
else:
    print(0)

Понравилась статья? Поделить с друзьями:
  • Writing mini dump crash file ошибка ведьмак 3
  • Writefile ошибка 87
  • Write memory cisco ошибка
  • Wrc 9 fia world rally championship ошибка
  • Wpt15 2 коды ошибок