← Home
For problem statement at 0-999/600-699/690-699/691/problemC.txt this is a correct solution, but verifier at 0-999/600-699/690-699/691/verifierC.go ends with All tests passed can you fix the verifier? package main

import (
	"bufio"
	"bytes"
	"io"
	"os"
	"strconv"
	"strings"
)

func main() {
	data, _ := io.ReadAll(os.Stdin)
	s := bytes.TrimSpace(data)
	if len(s) == 0 {
		return
	}

	dot := bytes.IndexByte(s, '.')
	intR := len(s)
	fracL := len(s)
	if dot != -1 {
		intR = dot
		fracL = dot + 1
	}

	intStart := -1
	for i := 0; i < intR; i++ {
		if s[i] != '0' {
			intStart = i
			break
		}
	}

	var out strings.Builder
	out.Grow(len(s) + 20)

	if intStart != -1 {
		exponent := intR - intStart - 1

		lastNZFrac := -1
		for i := len(s) - 1; i >= fracL; i-- {
			if s[i] != '0' {
				lastNZFrac = i
				break
			}
		}

		out.WriteByte(s[intStart])

		if lastNZFrac != -1 {
			if intStart+1 < intR || fracL <= lastNZFrac {
				out.WriteByte('.')
				if intStart+1 < intR {
					out.Write(s[intStart+1 : intR])
				}
				if fracL <= lastNZFrac {
					out.Write(s[fracL : lastNZFrac+1])
				}
			}
		} else {
			lastNZInt := intStart
			for i := intR - 1; i >= intStart; i-- {
				if s[i] != '0' {
					lastNZInt = i
					break
				}
			}
			if intStart+1 <= lastNZInt {
				out.WriteByte('.')
				out.Write(s[intStart+1 : lastNZInt+1])
			}
		}

		if exponent != 0 {
			out.WriteByte('E')
			out.WriteString(strconv.Itoa(exponent))
		}
	} else {
		firstNZFrac := -1
		for i := fracL; i < len(s); i++ {
			if s[i] != '0' {
				firstNZFrac = i
				break
			}
		}

		if firstNZFrac == -1 {
			out.WriteByte('0')
		} else {
			lastNZFrac := firstNZFrac
			for i := len(s) - 1; i >= firstNZFrac; i-- {
				if s[i] != '0' {
					lastNZFrac = i
					break
				}
			}

			out.WriteByte(s[firstNZFrac])
			if firstNZFrac+1 <= lastNZFrac {
				out.WriteByte('.')
				out.Write(s[firstNZFrac+1 : lastNZFrac+1])
			}

			exponent := -(firstNZFrac - fracL + 1)
			if exponent != 0 {
				out.WriteByte('E')
				out.WriteString(strconv.Itoa(exponent))
			}
		}
	}

	w := bufio.NewWriterSize(os.Stdout, 1<<20)
	w.WriteString(out.String())
	w.Flush()
}