Lucky and even lucky numbers: Difference between revisions
Content added Content deleted
(Added Go) |
(→{{header|Go}}: More idiomatic error handling.) |
||
Line 202: | Line 202: | ||
import ( |
import ( |
||
"fmt" |
"fmt" |
||
"log" |
|||
"os" |
"os" |
||
"strconv" |
"strconv" |
||
Line 241: | Line 242: | ||
} |
} |
||
func printSingle(j int, odd bool) { |
func printSingle(j int, odd bool) error { |
||
if odd { |
if odd { |
||
if j >= len(luckyOdd) { |
if j >= len(luckyOdd) { |
||
return fmt.Errorf("the argument, %d, is too big", j) |
|||
} |
} |
||
fmt.Println("Lucky number", j, "=", luckyOdd[j-1]) |
fmt.Println("Lucky number", j, "=", luckyOdd[j-1]) |
||
} else { |
} else { |
||
if j >= len(luckyEven) { |
if j >= len(luckyEven) { |
||
return fmt.Errorf("the argument, %d, is too big", j) |
|||
} |
} |
||
fmt.Println("Lucky even number", j, "=", luckyEven[j-1]) |
fmt.Println("Lucky even number", j, "=", luckyEven[j-1]) |
||
} |
} |
||
return nil |
|||
} |
} |
||
func printRange(j, k int, odd bool) { |
func printRange(j, k int, odd bool) error { |
||
if odd { |
if odd { |
||
if k >= len(luckyOdd) { |
if k >= len(luckyOdd) { |
||
return fmt.Errorf("the argument, %d, is too big", k) |
|||
} |
} |
||
fmt.Println("Lucky numbers", j, "to", k, "are:") |
fmt.Println("Lucky numbers", j, "to", k, "are:") |
||
Line 264: | Line 266: | ||
} else { |
} else { |
||
if k >= len(luckyEven) { |
if k >= len(luckyEven) { |
||
return fmt.Errorf("the argument, %d, is too big", k) |
|||
} |
} |
||
fmt.Println("Lucky even numbers", j, "to", k, "are:") |
fmt.Println("Lucky even numbers", j, "to", k, "are:") |
||
fmt.Println(luckyEven[j-1 : k]) |
fmt.Println(luckyEven[j-1 : k]) |
||
} |
} |
||
return nil |
|||
} |
} |
||
func printBetween(j, k int, odd bool) { |
func printBetween(j, k int, odd bool) error { |
||
var r []int |
var r []int |
||
if odd { |
if odd { |
||
max := luckyOdd[len(luckyOdd)-1] |
max := luckyOdd[len(luckyOdd)-1] |
||
if j > max || k > max { |
if j > max || k > max { |
||
return fmt.Errorf("at least one argument, %d or %d, is too big", j, k) |
|||
} |
} |
||
for _, num := range luckyOdd { |
for _, num := range luckyOdd { |
||
Line 292: | Line 295: | ||
max := luckyEven[len(luckyEven)-1] |
max := luckyEven[len(luckyEven)-1] |
||
if j > max || k > max { |
if j > max || k > max { |
||
return fmt.Errorf("at least one argument, %d or %d, is too big", j, k) |
|||
} |
} |
||
for _, num := range luckyEven { |
for _, num := range luckyEven { |
||
Line 306: | Line 309: | ||
fmt.Println(r) |
fmt.Println(r) |
||
} |
} |
||
return nil |
|||
} |
} |
||
Line 311: | Line 315: | ||
nargs := len(os.Args) |
nargs := len(os.Args) |
||
if nargs < 2 || nargs > 4 { |
if nargs < 2 || nargs > 4 { |
||
log.Fatal("there must be between 1 and 3 command line arguments") |
|||
} |
} |
||
filterLuckyOdd() |
filterLuckyOdd() |
||
Line 317: | Line 321: | ||
j, err := strconv.Atoi(os.Args[1]) |
j, err := strconv.Atoi(os.Args[1]) |
||
if err != nil || j < 1 { |
if err != nil || j < 1 { |
||
log.Fatalf("first argument, %s, must be a positive integer", os.Args[1]) |
|||
} |
} |
||
if nargs == 2 { |
if nargs == 2 { |
||
printSingle(j, true) |
if err := printSingle(j, true); err != nil { |
||
⚫ | |||
} |
|||
return |
return |
||
} |
} |
||
Line 327: | Line 333: | ||
k, err := strconv.Atoi(os.Args[2]) |
k, err := strconv.Atoi(os.Args[2]) |
||
if err != nil { |
if err != nil { |
||
log.Fatalf("second argument, %s, must be an integer", os.Args[2]) |
|||
} |
} |
||
if k >= 0 { |
if k >= 0 { |
||
if j > k { |
if j > k { |
||
log.Fatalf("second argument, %d, can't be less than first, %d", k, j) |
|||
} |
|||
⚫ | |||
log.Fatal(err) |
|||
} |
} |
||
⚫ | |||
} else { |
} else { |
||
l := -k |
l := -k |
||
if j > l { |
if j > l { |
||
log.Fatalf("second argument, %d, can't be less in absolute value than first, %d", k, j) |
|||
} |
|||
⚫ | |||
log.Fatal(err) |
|||
} |
} |
||
⚫ | |||
} |
} |
||
return |
return |
||
Line 351: | Line 361: | ||
odd = false |
odd = false |
||
default: |
default: |
||
log.Fatalf("third argument, %s, is invalid", os.Args[3]) |
|||
} |
} |
||
if os.Args[2] == "," { |
if os.Args[2] == "," { |
||
printSingle(j, odd) |
if err := printSingle(j, odd); err != nil { |
||
log.Fatal(err) |
|||
} |
|||
return |
return |
||
} |
} |
||
Line 360: | Line 372: | ||
k, err := strconv.Atoi(os.Args[2]) |
k, err := strconv.Atoi(os.Args[2]) |
||
if err != nil { |
if err != nil { |
||
log.Fatal("second argument must be an integer or a comma") |
|||
} |
} |
||
if k >= 0 { |
if k >= 0 { |
||
if j > k { |
if j > k { |
||
log.Fatalf("second argument, %d, can't be less than first, %d", k, j) |
|||
} |
|||
if err := printRange(j, k, odd); err != nil { |
|||
log.Fatal(err) |
|||
} |
} |
||
⚫ | |||
} else { |
} else { |
||
l := -k |
l := -k |
||
if j > l { |
if j > l { |
||
log.Fatalf("second argument, %d, can't be less in absolute value than first, %d", k, j) |
|||
} |
|||
⚫ | |||
log.Fatal(err) |
|||
} |
} |
||
⚫ | |||
} |
} |
||
}</lang> |
}</lang> |