-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy path139.go
More file actions
54 lines (48 loc) · 1.23 KB
/
139.go
File metadata and controls
54 lines (48 loc) · 1.23 KB
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
// UVa 139 - Telephone Tangles
package main
import (
"fmt"
"os"
"strings"
)
type cost struct {
code, name string
price int
}
func solve(number string, duration int, costs []cost) string {
if !strings.HasPrefix(number, "0") {
return fmt.Sprintf("%-16s%-5s%30s%5d%6.2f%7.2f", number, "Local", number, duration, 0.0, 0.0)
}
for _, v := range costs {
if strings.HasPrefix(number, v.code) {
unit := float64(v.price) / 100.0
return fmt.Sprintf("%-16s%-25s%10s%5d%6.2f%7.2f", number, v.name, number[len(v.code):], duration, unit, float64(duration)*unit)
}
}
return fmt.Sprintf("%-16s%-25s%10s%5d%6s%7.2f", number, "Unknown", "", duration, "", -1.0)
}
func main() {
in, _ := os.Open("139.in")
defer in.Close()
out, _ := os.Create("139.out")
defer out.Close()
var code, token, number string
var costs []cost
var duration, price int
for {
if fmt.Fscanf(in, "%s", &code); code == "000000" {
break
}
fmt.Fscanf(in, "%s", &token)
tokens := strings.Split(token, "$")
fmt.Sscanf(tokens[1], "%d", &price)
costs = append(costs, cost{code, tokens[0], price})
}
for {
if fmt.Fscanf(in, "%s", &number); number == "#" {
break
}
fmt.Fscanf(in, "%d", &duration)
fmt.Fprintln(out, solve(number, duration, costs))
}
}