-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy path187.go
74 lines (65 loc) · 1.55 KB
/
187.go
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// UVa 187 - Transaction Processing
package main
import (
"bufio"
"fmt"
"io"
"os"
"strings"
)
const (
end = "000"
outOfBalance = "999"
)
var accountMap map[string]string
type transaction struct {
accountNumber string
amount int
}
func solve(out io.Writer, sequence string, transactions []transaction) {
var balance int
for _, txn := range transactions {
balance += txn.amount
}
if balance != 0 {
accountMap[outOfBalance] = "Out of Balance"
transactions = append(transactions, transaction{outOfBalance, -balance})
fmt.Fprintf(out, "*** Transaction %s is out of balance ***\n", sequence)
for _, txn := range transactions {
fmt.Fprintf(out, "%s %-30s %10.2f\n", txn.accountNumber, accountMap[txn.accountNumber], float64(txn.amount)/100)
}
fmt.Fprintln(out)
}
}
func main() {
in, _ := os.Open("187.in")
defer in.Close()
out, _ := os.Create("187.out")
defer out.Close()
s := bufio.NewScanner(in)
s.Split(bufio.ScanLines)
var line string
accountMap = make(map[string]string)
for s.Scan() {
if line = s.Text(); strings.HasPrefix(line, end) {
break
}
accountMap[line[:3]] = line[3:]
}
var sequence string
var transactions []transaction
var amount int
for s.Scan() {
if line = s.Text(); strings.HasPrefix(line, end) {
solve(out, sequence, transactions)
break
}
if sequence != "" && sequence != line[:3] {
solve(out, sequence, transactions)
transactions = nil
}
sequence = line[:3]
fmt.Sscanf(line[6:], "%d", &amount)
transactions = append(transactions, transaction{line[3:6], amount})
}
}