Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Проблема. Некорректно разбирается JSON. На выходе получается
- // Тест:
- // JSON-строка: {
- // Ошибка разбора JSON: unexpected end of JSON input
- // JSON-строка: "dir": "root",
- // Ошибка разбора JSON: invalid character ':' after top-level value
- // JSON-строка: "files": [".zshrc"],
- // Ошибка разбора JSON: invalid character ':' after top-level value
- // JSON-строка: "folders": [
- // Ошибка разбора JSON: invalid character ':' after top-level value
- // JSON-строка: {
- // Ошибка разбора JSON: unexpected end of JSON input
- // JSON-строка: "dir": "desktop",
- // Ошибка разбора JSON: invalid character ':' after top-level value
- // JSON-строка: "files": ["config.yaml"]
- // Ошибка разбора JSON: invalid character ':' after top-level value
- // JSON-строка: },
- // Ошибка разбора JSON: invalid character '}' looking for beginning of value
- // JSON-строка: {
- // Ошибка разбора JSON: unexpected end of JSON input
- // JSON-строка: "dir": "downloads",
- // Ошибка разбора JSON: invalid character ':' after top-level value
- // JSON-строка: "files": ["cat.png.hack"],
- // Ошибка разбора JSON: invalid character ':' after top-level value
- // JSON-строка: "folders": [
- // Ошибка разбора JSON: invalid character ':' after top-level value
- // JSON-строка: {
- // Ошибка разбора JSON: unexpected end of JSON input
- // JSON-строка: "dir": "kta",
- // Ошибка разбора JSON: invalid character ':' after top-level value
- // JSON-строка: "files": [
- // Ошибка разбора JSON: invalid character ':' after top-level value
- // JSON-строка: "kta.exe",
- // Ошибка разбора JSON: invalid character ',' after top-level value
- // JSON-строка: "kta.hack"
- // Ошибка разбора JSON: json: cannot unmarshal string into Go value of type main.Directory
- // JSON-строка: ]
- // Ошибка разбора JSON: invalid character ']' looking for beginning of value
- // JSON-строка: }
- // Ошибка разбора JSON: invalid character '}' looking for beginning of value
- // JSON-строка: ]
- // Ошибка разбора JSON: invalid character ']' looking for beginning of value
- // JSON-строка: }
- // Ошибка разбора JSON: invalid character '}' looking for beginning of value
- // JSON-строка: ]
- // Ошибка разбора JSON: invalid character ']' looking for beginning of value
- // JSON-строка: }
- // Ошибка разбора JSON: invalid character '}' looking for beginning of value
- // Всего зараженных файлов: 0
- // Тест:
- // JSON-строка: { "dir"
- // Ошибка разбора JSON: unexpected end of JSON input
- // JSON-строка: :
- // Ошибка разбора JSON: invalid character ':' looking for beginning of value
- // JSON-строка: "awesomeproject"
- // Ошибка разбора JSON: json: cannot unmarshal string into Go value of type main.Directory
- // JSON-строка: ,
- // Ошибка разбора JSON: invalid character ',' looking for beginning of value
- // JSON-строка: "files" : [ "go.mod",
- // Ошибка разбора JSON: invalid character ':' after top-level value
- // JSON-строка: "go.sum"
- // Ошибка разбора JSON: json: cannot unmarshal string into Go value of type main.Directory
- // JSON-строка: ],
- // Ошибка разбора JSON: invalid character ']' looking for beginning of value
- // Ошибка чтения строки: EOF
- // Всего зараженных файлов: 0
- // Не имею ни малейшего представления как его считать грамотно, возможно
- // проблема где-то при чтении из буфера
- ////////////////////////////////////////////////////////////////////////////////
- // Входные данные:
- 2
- 23
- {
- "dir": "root",
- "files": [".zshrc"],
- "folders": [
- {
- "dir": "desktop",
- "files": ["config.yaml"]
- },
- {
- "dir": "downloads",
- "files": ["cat.png.hack"],
- "folders": [
- {
- "dir": "kta",
- "files": [
- "kta.exe",
- "kta.hack"
- ]
- }
- ]
- }
- ]
- }
- 8
- { "dir"
- :
- "awesomeproject"
- ,
- "files" : [ "go.mod",
- "go.sum"
- ],
- "folders":[{"dir":"cmd"}]}
- ////////////////////////////////////////////////////////////////////////////////
- package main
- import (
- "bufio"
- "encoding/json"
- "fmt"
- "os"
- "strings"
- )
- type Directory struct {
- Dir string `json:"dir"`
- Files []string `json:"files"`
- Folders []Directory `json:"folders"`
- }
- func countInfectedFiles(dir Directory) int {
- count := 0
- for _, file := range dir.Files {
- if strings.HasSuffix(file, ".hack") {
- count++
- }
- }
- for _, folder := range dir.Folders {
- count += countInfectedFiles(folder)
- }
- return count
- }
- func solve(in *bufio.Reader, out *bufio.Writer) {
- var n int
- fmt.Fscan(in, &n)
- fmt.Println("Тест:")
- in.ReadString('\n')
- totalInfectedFiles := 0
- for j := 0; j < n; j++ {
- jsonStr, err := in.ReadString('\n')
- if err != nil {
- fmt.Println("Ошибка чтения строки:", err)
- continue
- }
- jsonStr = strings.TrimSpace(jsonStr)
- if jsonStr == "" {
- fmt.Println("Ошибка: пустая строка с данными JSON")
- continue
- }
- fmt.Println("JSON-строка:", jsonStr)
- var dir Directory
- err = json.Unmarshal([]byte(jsonStr), &dir)
- if err != nil {
- fmt.Println("Ошибка разбора JSON:", err)
- continue
- }
- var filesCount int
- _, err = fmt.Fscan(in, &filesCount)
- if err != nil {
- fmt.Println("Ошибка чтения количества файлов:", err)
- continue
- }
- for k := 0; k < filesCount; k++ {
- var fileName string
- _, err = fmt.Fscan(in, &fileName)
- if err != nil {
- fmt.Println("Ошибка чтения имени файла:", err)
- continue
- }
- dir.Files = append(dir.Files, fileName)
- }
- infectedFiles := countInfectedFiles(dir)
- totalInfectedFiles += infectedFiles
- fmt.Printf("Для теста %d количество зараженных файлов: %d\n", j+1, infectedFiles)
- }
- fmt.Printf("Всего зараженных файлов: %d\n", totalInfectedFiles)
- }
- func main() {
- in := bufio.NewReader(os.Stdin)
- out := bufio.NewWriter(os.Stdout)
- defer out.Flush()
- var countTest int
- fmt.Fscan(in, &countTest)
- for i := 0; i < countTest; i++ {
- solve(in, out)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement