you_are_enot
@you_are_enot
Пограммист любитель

Как выполнить задание в Яндекс.Контест?

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

Хотя, на локальной машине никаких проблем с выводом не возникает.

Само задание:
Даны два числа A и B. Вам нужно вычислить их сумму A+B. В этой задаче для работы с входными и выходными данными вы можете использовать и файлы и потоки на ваше усмотрение.

Ввод: стандартный ввод или input.txt
Вывод: стандартный вывод или output.txt

package main

import (
	"fmt"
	"io"
	"os"
	"strconv"
	"strings"
)

func main() {
	input, err := os.Open("input.txt")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer input.Close()

	file, err := os.Create("output.txt")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer file.Close()

	output, err := os.OpenFile("output.txt", os.O_APPEND|os.O_WRONLY, 0777)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer output.Close()

	data := make([]byte, 64)

	for {
		n, err := input.Read(data)
		if err == io.EOF {
			break
		}

		arr := strings.Split(string(data[:n]), " ")

		a, err := strconv.Atoi(arr[0])
		if err != nil {
			fmt.Println(err)
			return
		}

		b, err := strconv.Atoi(arr[1])
		if err != nil {
			fmt.Println(err)
			return
		}

		if _, err = output.WriteString(strconv.Itoa(a + b)); err != nil {
			fmt.Println(err)
			return
		}

		_, err = os.Open("output.txt")
		if err != nil {
			fmt.Println(err)
			return
		}
	}
}
  • Вопрос задан
  • 1872 просмотра
Решения вопроса 1
У вас код сломается, когда увидит входной файл, заканчивающийся переносом строки.
Когда он сломается, он напишет ошибку в STDOUT что скорее всего будет воспринято системой проверки как вывод результата. Результат, естественно, не в том формате будет.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@msl97
Поломал голову над этой задачкой, в итоге оказалось, что нужно убрать newline char в конце переменной data. То есть заменить arr := strings.Split(string(data[:n]), " ") на
arr := strings.Split(strings.TrimSuffix(string(data[:n]), "\n"), " ")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы