// barley package main import ( "fmt" "math" "os" "strconv" ) func read_fields(file *os.File) (int, int) { var field1, field2 int _, err := fmt.Fscanf(file, "%d %d\n", &field1, &field2) if err != nil { field1 = -1 field2 = -1 // panic(fmt.Sprintf("Scan Failed: %v", err)) } return field1, field2 } func directions(field1 int, field2 int, file *os.File) { answer := "" row1 := int(math.Sqrt(float64(field1))) row2 := int(math.Sqrt(float64(field2))) if row1 == row2 { answer = "same row, " } else if row1 < row2 { answer = "down " + strconv.Itoa(row2-row1) + ", " } else { answer = "up " + strconv.Itoa(row1-row2) + ", " } column1 := field1 - (row1 * row1) - row1 column2 := field2 - (row2 * row2) - row2 if column1 == column2 { answer += "same column" } else if column1 < column2 { answer += "right " + strconv.Itoa(column2-column1) } else { answer += "left " + strconv.Itoa(column1-column2) } answer += "\n" file.WriteString(answer) } func main() { input_file, err := os.Open("barley.in") if err != nil { fmt.Println(err) } defer input_file.Close() output_file, err := os.Create("barley.out") if err != nil { fmt.Printf("error creating file: %v", err) return } defer output_file.Close() field1, field2 := read_fields(input_file) for field1 != -1 { directions(field1, field2, output_file) field1, field2 = read_fields(input_file) } }