parent
509750b2ab
commit
f851eb004b
@ -1,75 +1,78 @@ |
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"flag" |
||||
"strconv" |
||||
"log" |
||||
"math" |
||||
"bufio" |
||||
"os" |
||||
"fmt" |
||||
"flag" |
||||
"strconv" |
||||
"log" |
||||
"math" |
||||
"bufio" |
||||
"os" |
||||
) |
||||
|
||||
type Opts struct { |
||||
From string |
||||
To string |
||||
From string |
||||
To string |
||||
Numbers []string |
||||
} |
||||
|
||||
func parse_opts() (Opts, []string) { |
||||
var opts Opts |
||||
func ParseOpts() Opts { |
||||
var opts Opts |
||||
|
||||
flag.StringVar(&opts.From, "from", "", "Convert from") |
||||
flag.StringVar(&opts.To, "to", "", "Convert to") |
||||
flag.Parse() |
||||
flag.StringVar(&opts.From, "from", "", "Convert from") |
||||
flag.StringVar(&opts.To, "to", "", "Convert to") |
||||
flag.Parse() |
||||
|
||||
return opts, flag.Args() |
||||
opts.Numbers = flag.Args() |
||||
|
||||
return opts |
||||
} |
||||
|
||||
func to_si(num string) string { |
||||
number, err := strconv.ParseFloat(num, 64) |
||||
if err != nil { log.Fatal("that's not a number") } |
||||
mag := math.Floor(math.Log10(number)) |
||||
number, err := strconv.ParseFloat(num, 64) |
||||
if err != nil { log.Fatal("that's not a number") } |
||||
mag := math.Floor(math.Log10(number)) |
||||
|
||||
switch { |
||||
case mag < 3: |
||||
return num |
||||
case mag == 3: |
||||
// need to separate k from hundres
|
||||
as_k := math.Floor(float64(number) / 1000.0) |
||||
mod := math.Ceil(float64(int(number) % 1000)) |
||||
return fmt.Sprintf("%d.%dk", int(as_k), int(mod)) |
||||
case mag > 3 && mag < 6:
|
||||
as_m := math.Ceil(float64(number) / 1000.0) |
||||
return fmt.Sprintf("%dk", int(as_m)) |
||||
case mag == 6: |
||||
// need to separate mil from k
|
||||
as_m := math.Floor(float64(number) / 1000000.0) |
||||
mod := math.Ceil(float64(int(number) % 1000000) / 1000.0) |
||||
return fmt.Sprintf("%d.%dM", int(as_m), int(mod)) |
||||
case mag > 6 && mag <= 9: |
||||
as_m := math.Ceil(float64(number) / 1000000.0) |
||||
return fmt.Sprintf("%dM", int(as_m)) |
||||
default: |
||||
return fmt.Sprintf("%sbesos", num) |
||||
} |
||||
switch { |
||||
case mag < 3: |
||||
return num |
||||
case mag == 3: |
||||
// need to separate k from hundres
|
||||
as_k := math.Floor(float64(number) / 1000.0) |
||||
mod := math.Ceil(float64(int(number) % 1000)) |
||||
return fmt.Sprintf("%d.%dk", int(as_k), int(mod)) |
||||
case mag > 3 && mag < 6: |
||||
as_m := math.Ceil(float64(number) / 1000.0) |
||||
return fmt.Sprintf("%dk", int(as_m)) |
||||
case mag == 6: |
||||
// need to separate mil from k
|
||||
as_m := math.Floor(float64(number) / 1000000.0) |
||||
mod := math.Ceil(float64(int(number) % 1000000) / 1000.0) |
||||
return fmt.Sprintf("%d.%dM", int(as_m), int(mod)) |
||||
case mag > 6 && mag <= 9: |
||||
as_m := math.Ceil(float64(number) / 1000000.0) |
||||
return fmt.Sprintf("%dM", int(as_m)) |
||||
default: |
||||
return fmt.Sprintf("%sbesos", num) |
||||
} |
||||
} |
||||
|
||||
func main() { |
||||
opts, nums := parse_opts() |
||||
opts := ParseOpts() |
||||
|
||||
if opts.From != "" { |
||||
log.Fatal("you should implement this") |
||||
} |
||||
if opts.From != "" { |
||||
log.Fatal("you should implement this") |
||||
} |
||||
|
||||
if len(nums) == 0 { |
||||
scanner := bufio.NewScanner(os.Stdin) |
||||
for scanner.Scan() { |
||||
num := scanner.Text() |
||||
fmt.Println(to_si(num)) |
||||
} |
||||
} else { |
||||
for _, num := range nums { |
||||
fmt.Println(to_si(num)) |
||||
} |
||||
if len(opts.Numbers) == 0 { |
||||
scanner := bufio.NewScanner(os.Stdin) |
||||
for scanner.Scan() { |
||||
num := scanner.Text() |
||||
fmt.Println(to_si(num)) |
||||
} |
||||
} else { |
||||
for _, num := range opts.Numbers { |
||||
fmt.Println(to_si(num)) |
||||
} |
||||
} |
||||
} |
||||
|
||||
@ -1,45 +1,45 @@ |
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"flag" |
||||
"os" |
||||
"log" |
||||
"crypto/sha512" |
||||
"fmt" |
||||
"flag" |
||||
"os" |
||||
"log" |
||||
"crypto/sha512" |
||||
) |
||||
|
||||
type Opts struct { |
||||
Inputs []string |
||||
Inputs []string |
||||
} |
||||
|
||||
func parse_opts() Opts { |
||||
var opts Opts |
||||
func ParseOpts() Opts { |
||||
var opts Opts |
||||
|
||||
flag.Parse() |
||||
opts.Inputs = flag.Args() |
||||
flag.Parse() |
||||
opts.Inputs = flag.Args() |
||||
|
||||
return opts |
||||
return opts |
||||
} |
||||
|
||||
func to_hex(hash [sha512.Size]byte) string { |
||||
result := "" |
||||
func ToHex(hash [sha512.Size]byte) string { |
||||
result := "" |
||||
|
||||
for _, b := range hash { |
||||
result += fmt.Sprintf("%x", b) |
||||
} |
||||
for _, b := range hash { |
||||
result += fmt.Sprintf("%x", b) |
||||
} |
||||
|
||||
return result |
||||
return result |
||||
} |
||||
|
||||
func main() { |
||||
opts := parse_opts() |
||||
opts := ParseOpts() |
||||
|
||||
for _, fname := range opts.Inputs { |
||||
in_data, err := os.ReadFile(fname) |
||||
if err != nil { log.Fatal(err) } |
||||
for _, fname := range opts.Inputs { |
||||
in_data, err := os.ReadFile(fname) |
||||
if err != nil { log.Fatal(err) } |
||||
|
||||
hash := sha512.Sum512(in_data) |
||||
hash := sha512.Sum512(in_data) |
||||
|
||||
fmt.Println(to_hex(hash), fname) |
||||
} |
||||
fmt.Println(ToHex(hash), fname) |
||||
} |
||||
} |
||||
|
||||
Loading…
Reference in new issue