Решение вернуло код ошибки отличный от нуля

Сообщение Кратко Сообщается ли номер теста? Значение вердикта Возможная причина
OK OK Нет Решение зачтено Программа верно работает на соответствующем наборе тестов
Compilation error CE Нет Компиляция программы завершилась с ошибкой 1. в программе допущена синтаксическая или семантическая ошибка 2. неправильно указан язык
Wrong answer WA Да Ответ неверен 1. ошибка в программе 2. неверный алгоритм
Presentation error PE Да Тестирующая система не может проверить выходные данные, так как их формат не соответствует описанному в условиях задачи 1. неверный формат вывода 2. программа не печатает результат 3. лишний вывод
Time-limit exceeded TL Да Программа превысила установленный лимит времени 1. ошибка в программе 2. неэффективное решение
Memory limit exceeded ML Да Программа превысила установленный в условиях лимит памяти 1. ошибка в программе (например, бесконечная рекурсия) 2. неэффективное решение
Output limit exceeded OL Да Программа превысила установленный в условиях лимит вывода 1. программа выводит больше информации, чем установлено в ограничениях
Run-time error RE Да Программа завершила работу с ненулевым кодом возврата 1. ошибка выполнения 2. программа на C или C++ не завершается оператором return 0 3. ненулевой код возврата указан явно 4. Программа на Java описана в пакете
Precompile check failed PCF Нет Программа не прошла проверку на качество кода перед компиляцией 1. плохое качество кода 2. неправильно отформатированный код
Idleness limit exceeded IL Да Программа слишком долго не отвечала на запросы системы и не выполняла действий 1. программа ожидает ввода с консоли, которого не должно быть 2. не использован flush()

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

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='')

Руководство пользователя NSUTS

Оглавление

1

Руководство пользователя NSUTS 1

Оглавление 1

Регистрация на олимпиаду 2

Вход в систему 3

Общий вид страниц системы тестирования 4

Раздел «Новости» 5

Раздел «Сдать» 6

7

Раздел «Результаты» 7

Раздел «Рейтинг» 8

Олимпиады ACM 8

Школьные олимпиады 9

10

Проверка вне NSUTS 10

Раздел «Вопросы» 10

Раздел «Участники» 11

Раздел «Help» 11

Раздел «Тур» 11

Редактирование учетной записи 12

Желтая панель 13

Восстановление пароля 13

Регистрация на олимпиаду

Перейти на страницу регистрации можно либо по ссылке, данной вам организаторами, либо нажав на ссылку registration page на главной странице. В этом случае вам будет предложен список олимпиад, на которые вы можете зарегистрироваться. Выберите нужную.

Страница регистрации имеет следующий вид:

Рамками обозначены поля специфичные для отдельной олимпиады (могут отсутствовать). Красная рамка – это поля, общие для всей команды. Синей рамкой обозначены поля, которые заполняются на каждого участника команды. Нажимая на кнопки, вы можете менять число участников в команде.

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

    1. Вход в систему

Для входа в систему тестирования вам необходимо ввести логин пользователя и пароль. Эти данные могут быть выданы вам организаторами олимпиады, либо получены после прохождения регистрации (см. Регистрация)

После ввода логина, пароля и нажатия на кнопку Submit происходит проверка введенных данных. Если есть ошибки, вам будет выдано сообщение об ошибке и предложение восстановить утерянный пароль (см.

Восстановление пароля)

    1. Общий вид страниц системы тестирования

Элементы страницы:

  1. Заголовок
  2. Название команды
  3. Кнопка выхода из системы
  4. Название текущей олимпиады
  5. Название текущего тура
  6. «Желтая панель», на которой отображаются
  1. число пользователей online
  2. уведомления пользователю
  3. новости тура
  1. содержание текущего раздела. Переход между разделами осуществляется переключением вкладок.

      1. Раздел «Новости»


Подразделы:

  1. Тур (название тура)
  2. Условий задач
  3. Все новости

Подраздел “Тур”

– Название Тура

– Информация о туре;

– Время Начала тура;

– Время Заморозки (только для ACM);

– Время окончания тура;

– Тип тура

  1. ACM
  2. Школьный
  3. Проверка вне NSUTS

Подраздел “Условия Задач”
Если тур закрыт, то раздел не отражается
Если тур открыт, то

2.1. если задачи доступны, то отражаются ссылки на все доступные условия задач;

(Что бы скачать условие задачи, нажмите на ссылку).

если доступных задач нет, то отображается надпись «условий нет».
если условия задач доступны только после открытия тура, то

3.1. если тур уже начался, то отражаются ссылки на все доступные условия задач;

3.2. если тур еще не начался, то отображается время до начала тура;

Подраздел «Все Новости»:

Здесь отображаются все новости текущего тура

    1. Раздел «Сдать»

По умолчанию, сдавать решения могут все участники олимпиады. Однако в некоторых случаях (нарушение правил олимпиад, попытка отправить решение, которое может повредить систему, отправка решений «угадывающих» ответы тестов и других), жюри может лишить пользователей этой возможности.
Если тур еще не начался или уже закончился, то у пользователя нет возможности сдавать задачи.

Если тур открыт и уже начался, то возможность сдавать задачи есть.

Описание функциональных элементов раздела:

Язык (список) Список всех доступных компиляторов
Задача (список) Список всех доступных задач
Выберите наиболее удобный для вас способ отправки решения задачи.

Ограничение на размер исходного кода — 100 килобайт.

Если вы и загрузите файл, и напишите решение в поле для ввода, то на проверку отправится решение, сцепленное из первого и второго.

Обзор Загрузка решения из файла. Нет ограничений на тип отправляемого файла и на его расширение
(Поле для Ввода текста) Вы также можете написать решение в этом поле.
Отправить (кнопка) Отправить решение на проверку

Раздел «Результаты»

Раздел состоит из следующих блоков (по числу задач в туре): имя задачи, таблицы посылок (по числу посылок)

Время HH:MM:SS DD-MM-YY ||

выбранный компилятор || ссылка «view source»

Время отправления Задачи ||

Компилятор, который выбрал участник Олимпиады в Разделе «Сдать»/ «Язык» ||

ссылка для просмотра

исходного кода решения и «шапки», состоящей из номера задачи, времени отправления решения на проверку, и компилятора.

Результат Один из вариантов ответов тестирующие системы (см. ниже)
Баллы число Баллы, начисленные участнику за верное решение.

Ответы тестирующей системы
В графе «результат» Вы видите результат тестирования Вашей программы по каждому тесту. Для компактности статус тестирования сокращён по первой букве:

Queued = Задача находится в очереди

Testing = Решение проверяется в данный момент

A = ACCEPTED = решение засчитано как верное

W = Wrong Answer = неверный ответ на тесте

T = Time limit exceeded = решение не уложилось в отведенное процессорное время

R = Run-time error = решение вернуло код ошибки, отличный от нуля

O = No output file = отсутствует файл output.txt

M = Memory limit exceeded = решение не уложилось в отведенное ограничение по памяти

D = Deadlock — Timeout = решение не уложилось в отведенное глобальное время

S = Security violation = решение совершило действие запрещенное правилами

K = Compiled = решение успешно скомпилировано, но будет проверено на тестах позже.

    1. Раздел «Рейтинг»

По умолчанию этот раздел доступен всем участникам, но в случае необходимости жюри может лишить участника возможности смотреть рейтинг.

В этом разделе вы можете увидеть одно из следующих сообщений:

1) Тур закончился

2) Тур не начался. До начала тура осталось «число» минут

3) Идет n-ая минута тура

4) Тур заморожен. Надпись означает, что рейтинг не обновляется.
Построение рейтинга различается в зависимости от типа олимпиады.

Олимпиады ACM

Краткие правила построения рейтинга для олимпиад ACM:

  • Рейтинг доступен к просмотру участниками до момента заморозки

(как правило 1 час до конца олимпиады)

  • Решение запускается на наборе тестов, одинаковом для всех участников
  • Запуск тестов производится последовательно до тех пор, пока все тесты не будут пройдены (в этом случае решение считается принятым), либо пока не будет обнаружен первый тест, на котором решение не работает
  • Команде сообщается результат, а также, если решение не принято, номер первого непройденного теста.
  • из двух команд, выше в рейтинге та, у которой решено большее число задач;
  • если число задач одинаково, то выше оказывается команда, имеющая меньшее штрафное время.
  • Если число задач и штрафное время одинаково у нескольких команд, то эти команды занимают несколько подряд идущих мест.
  • Штрафное время — это сумма штрафного времени по всем задачам. Штрафное время для задачи равно 0, если задача не сдана. Если же задача сдана, то её штрафное время считается по формуле: время_сдачи_правильного_решения +(количество_неудачных_попыток * 20 мин)

Полные правила ACM олимпиад вы можете прочитать на сайте http://neerc.ifmo.ru/information/contest-rules.html.

В таблице рейтинга

Место Место, занятое командой или участником
Список задач Список сданных задач

+ — задача решена с первой попытки

+N — задача решена после N неудачных попыток

-N — задача не решена (с N неудачными попытками)

Время (с точостью до секунды) – время сдачи задачи, отсчитываемое от начала тура

Задачи Число решенных задач
Время Суммарное штрафное время по всем задачам

Школьные олимпиады

Правила построения рейтинга для Школьных Олимпиад:

  • Решение запускается на наборе тестов, одинаковом для всех участников
  • Запуск тестов производится последовательно до тех пор, пока все тесты не будут пройдены
  • за каждый пройденный тест начисляется определенное количество баллов. В рейтинг помещается сумма полученных баллов по каждой задаче за последнюю посылку, а также сумма баллов по всем задачам.
  • Команде сообщается результат проверки по каждому тесту

В таблице рейтинга:

Место Место, занятое командой или участником
Список задач Список сданных задач

Суммарное число баллов за отдельную задачу

Всего сумма число баллов за все задачи

Проверка вне NSUTS

Порядок построения рейтинга оговаривается отдельно. Как правило, это суммарное число баллов, полученное за задачу.

Раздел «Вопросы»

В этом разделе участник может задать вопрос членам жюри.

Раздел состоит из двух частей: зоны для отправки нового вопроса и таблицы вопросов и ответов.

Компилятор (список) Если ваш вопрос относится к компилятору, языку и/или задаче укажите их.
Задача (список)
Поле для ввода вопроса Введите текст вопроса.

Запрещены любые ругательства и нецензурные слова.

Отправить (кнопка) Отправить вопрос администраторам олимпиады.

Администрация имеет право:

– удалить ваш вопрос

– не ответить на ваш вопрос

– опубликовать ваш вопрос для просмотра всеми участниками олимпиады

Таблица вопросов и Ответов содержит:

  1. Время отправления вопроса (московское)
  2. Имя участника или название команды отправителя
  3. Статус вопроса (см. ниже)
  4. Тексты вопроса и ответа

Статусы вопросов:

Отправлен жюри еще не ответили на ваш вопрос
Новый вопрос, на который еще не ответили жюри
Отвечен вопрос, на который уже ответили
Открыт вопрос, который опубликован. Любой пользователь может просмотреть этот вопрос и ответ на него, в разделе «Вопросы».

Ответ может быть изменен администратором впоследствии. Также может быть изменен статус вашего вопроса (опубликован для всех). Обо всех изменениях вы можете узнавать по уведомлениям на желтой панели.

    1. Раздел «Участники»

Здесь вы можете посмотреть список всех участников олимпиады.

Содержание полей может варьироваться для каждой олимпиады. Это могут быть поля с названиями команд, учебными заведениями и прочей информацией, введенной при регистрации.
Зеленым цветом выделены пользователи online (подробнее см.

Желтая панель)

Раздел «Help»

Краткое описание системы тестирования и параметров компиляции.

    1. Раздел «Тур»

Здесь вы можете выбрать другой открытый тур в текущей олимпиаде.

Рядом с названием тура в квадратных скобках обозначен его тип (см. Рейтинг).

Выбранный тур отображается в правом верхнем углу рядом с названием текущей олимпиады.

    1. Редактирование учетной записи

При нажатии на названии команды (в правом верхнем углу рядом со ссылкой «Выйти»), вы попадаете на страницу редактирования учетной записи.

По умолчанию все участники могут редактировать свои данные. Однако администратор может запретить эту функциональность. В этом случае вы сможете только просматривать свои данные без возможности их изменения.

Страница редактирования учетной записи выглядит следующим образом:

При нажатии на кнопку «Отправить» или «Сохранить пароль», введенные данные будут проверены на корректность. В случае обнаружения ошибок будет выдано соответствующее сообщение.

    1. Желтая панель

Вы можете видеть желтую панель справа справа на каждой странице системы.

Здесь отображается следущая информация:

  1. Число пользователей online

Пользователь считается online, если с момента его последнего обновления станицы прошло не менее 40 минут.

  1. Уведомления (если есть)

Возможны следующие уведомления:

Сообщение Переход по ссылке на страницу
«Вам Поступил(о) N ответ(ов) на Ваш(и) вопрос(ы)» «Вопросы»
«Опубликован(о) N новых ответ(ов) на вопрос(ы)» «Вопросы»
«Было произведено перетестирование. Возможно статус проверки какого-нибудь из решений изменился» «Результаты»

При переходе по ссылке, счетчик уведомлений обнуляется.

  1. Новости тура (или надпись «Здесь будут новости»)

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

    1. Восстановление пароля

Вы можете восстановить пароль, полученный при регистрации, если перейдете по ссылке восстановить пароль на странице входа в систему.

Введите login и ваш e-mail. После нажатия на кнопку Submit и совпадении всех данных, на вашу почту будет выслано письмо с новым паролем к системе или информация о недопустимости восстановления пароля для вас.

На сайте где я компилирую код пишет: «Программа завершила работу с ненулевым кодом возврата» как это исправить и что это такое?

Вот код:

a = int(input())
b = int(input())
d = a + b
print(d)

Kromster's user avatar

Kromster

13.5k12 золотых знаков43 серебряных знака72 бронзовых знака

задан 15 дек 2020 в 19:04

gusen's user avatar

9

в задача сказано что надо вводить данные в одну строку, а у вас в две

a, b = map(int, input().split())

с помощью метода split разделяем значения по пробелу, а с помощью map превращаем все элементы вчисло

ответ дан 16 дек 2020 в 7:27

Danis's user avatar

DanisDanis

19.2k5 золотых знаков20 серебряных знаков55 бронзовых знаков

1

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

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

Прежде чем начать, давайте разберемся с терминологией. В отличие от программы, библиотека не может использоваться напрямую, например, в терминале. Любая библиотека — это код на конкретном языке, который вызывается другим кодом на этом же языке. Говорят, что у библиотеки есть клиент. Клиент — тот, кто использует библиотеку:

// http-клиент в js, эту библиотеку мы будем использовать в качестве примера
import axios from 'axios';

// С точки зрения axios, этот файл содержит клиентский код
// То есть код, который использует axios.

const runProgram = async () => {
  const url = 'https://ru.hexlet.io';
  // Вызов библиотеки идет в клиентском коде
  const response = await axios.get(url);
  console.log(response.body);
}

В свою очередь, находящийся внутри библиотеки код называется библиотечным кодом. Это разделение довольно важно, так как у каждой из этих частей своя зона ответственности.

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

Про ошибки

Что вообще считать ошибкой, а что нет? Представьте функцию, которая ищет символ внутри строки и не находит его. Является ли это ошибкой?

// Эта функция ищет символ в строке и возвращает его индекс
// Данный вызов ничего не найдет
'lala'.indexOf('j'); // -1

Такое поведение нормально для данной функции. Если значения нет, все нормально, функция все равно выполнила свою задачу и вернула что-то осмысленное.

А что насчет http запроса как в примере выше? Как вести себя функции axios.get, которая не смогла загрузить указанную страницу? С точки зрения функции такая ситуация не является нормальной. Если функция не может выполнить свое основное предназначение, это ошибка. Именно об этих ошибках и пойдет речь. Ниже конкретные примеры того, как делать стоит и как не стоит при использовании библиотек и их проектировании.

Завершение процесса

Во всех языках программирования есть возможность досрочно остановить процесс операционной системы, в котором выполняется код. Обычно это делается с помощью функции, имеющие в названии слово exit. Вызов этой функции останавливает программу целиком.

if (/* что-то не получилось */) {
  process.exit();
}

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

Проще говоря, библиотека не может решать за программу, когда ей завершаться. Это не ее зона ответственности. Задача библиотеки — оповестить клиентский код об ошибке, а дальше уже не ее забота. Оповещать можно с помощью исключений:

import axios from 'axios';

const runProgram = async () => {
  const url = 'https://ru.hexlet.io';
  try {
    const response = await axios.get(url);
    // Делаем что-нибудь полезное с response
    console.log(response.body);
  } catch (e) {
    // Для отладки хорошо бы вывести полную информацию
    console.error(e.message);
    // exit нужно делать на уровне программы,
    // так как важно установить правильный код возврата (отличный от 0)
    // только так снаружи можно будет понять что была ошибка
    process.exit(1);
  }
}

Вопрос на самоконтроль. Можно ли написать тесты на библиотеку, которая выполняет остановку процесса?

Имитация успеха

Иногда разработчик пытается скрыть от клиентского кода любые или почти любые ошибки. Код в таком случае перехватывает все возможные ошибки (исключения) и всегда возвращает какой-то результат. Ниже гипотетический пример с функцией axios.get. Как бы она выглядела в этом случае:

// Очень упрощенный код внутри axios.get
const get = (url) => {
  // Тут на самом деле сложный асинхронный код, выполняющий http запрос
  // Опустим его и посмотрим на то место где возникает ошибка
  // Ниже упрощенный пример обработки ошибки
  if (error) {
    // Генеральная идея — этот код возвращает какой-то результат,
    // который сложно или невозможно отличить от успешно выполненного запроса
    const response = { body: null };
    return response;
  }
}

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

import axios from 'axios';

const runProgram = async () => {
  const url = 'https://ru.hexlet.io';
  // Как узнать что тут произошла ошибка и предупредить пользователя?
  const response = await axios.get(url);
  console.log(response.body);
}

Правильное решение — использовать исключения.

Подавление ошибок

Этот способ очень похож на предыдущий. Код с подавлением ошибки выглядит примерно так:

// Очень упрощенный код внутри axios.get
const get = (url) => {
  if (error) {
    console.error(`Something was wrong during http request: ${error}`);
    return null;
  }
}

Что здесь происходит? Разработчик выводит сообщение об ошибке в консоль и возвращает наружу, например, null. Такой код появляется тогда, когда программист еще не до конца осознал, что такое библиотека. Главный вопрос, который должен вызывать этот код: а как клиентский код узнает об ошибке? Ответ здесь — никак. Подобную библиотеку невозможно использовать правильно. Представьте, если бы так себя вел axios.get:

import axios from 'axios';

const runProgram = async () => {
  const url = 'https://ru.hexlet.io';
  // Во время ошибки идет вывод в консоль
  // А если консоли вообще нет?
  // Даже если есть, как обработать ошибку?
  const response = await axios.get(url);
  console.log(response.body);
}

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

import { promises as fs } from 'fs';

// Клиент этой функции (библиотеки) никогда не узнает о том, что произошла ошибка
const getData = async (filepath) => {
  try {
    const json = await fs.readFile(filepath);
    return JSON.parse(json);
  } catch (e) {
    console.log(e.message);
     // Тут масса вариантов. Возврат {}, null, '' и т.п.
    return {};
  }
}

Правильное решение — порождать исключения и не подавлять исключения.

Коды возврата

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

Вопрос на самоконтроль: как должна себя вести функция валидации в случае нахождения ошибок: выкидывать исключение или возвращать ошибки, например, как массив?

Исключения

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

if (error) {
  throw new Error(/* чем больше тут полезной информации, тем лучше */);
}

Anioni

2 / 2 / 0

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

Сообщений: 2

1

30.07.2019, 20:49. Показов 5850. Ответов 2

Метки нет (Все метки)


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

Добрый вечер.При отправке в проверочный сайт ошибка runtime-error. В значении ошибок, Run-time error значится как — Программа завершила работу с ненулевым кодом возврата.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
int main()
{
   int a, b = 0;
   std::cin >> a;
   if ( a == 0 )
   {
       std::cout<<1;
       exit(1);
   }
   if (a>0)
   {
       b=a*(a+1)/2;
   }
   else
   {
       b=-((-a*(-a+1)-1)/2);
   }
   std::cout << b << std::endl;
   return 0;
}



1



Модератор

4908 / 3142 / 498

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

Сообщений: 6,566

Записей в блоге: 9

30.07.2019, 21:25

2

Значит на сайте, во входной поток программы, передаётся 0.
И что?



0



зомбяк

1581 / 1215 / 345

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

Сообщений: 3,939

31.07.2019, 15:46

3

Цитата
Сообщение от Anioni
Посмотреть сообщение

exit(1);

Ну вот в этом месте вывод кода 1, соответственно на него и ругается. Если указать return 0; то ругаться будет не на это.



1



Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Решить дилемму ошибка
  • Речевая ошибка совершить безумие
  • Решена ошибка 1004 spore
  • Решить вопрос ошибка

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии