$ ls -l x.* | perl -lanE 'say "$F[8]\t$F[4] bytes"'
x.go 694 bytes
x.pl 294 bytes
####
$ time go run x.go > /dev/null
real 0m1.222s
user 0m1.097s
sys 0m0.220s
$ time perl x.pl > /dev/null
real 0m5.358s
user 0m4.778s
sys 0m0.497s
##
##
$ go build x.go
$ time ./x > /dev/null
real 0m0.947s
user 0m0.890s
sys 0m0.126s
##
##
$ cat x.go
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
// Seed the random number generator
seed := rand.NewSource(time.Now().UnixNano())
r1 := rand.New(seed)
// Generate random integers
var ints []int
for i := 0; i < 10000000; i++ {
n := r1.Intn(10)
ints = append(ints, n)
}
// Count ints occurrence
count := make(map[int]int)
for _, n := range ints {
count[n]++
}
// Sort ints
var intsSorted []int
for n := range count {
intsSorted = append(intsSorted, n)
}
// Print out ints occurrence
for n := range intsSorted {
fmt.Printf("%d\t%d\n", n, count[n])
}
}
$ cat x.pl
#!/usr/bin/perl
use warnings;
use strict;
# Generate random integers
my @ints;
push @ints, int rand 10 for 1 .. 10_000_000;
# Count ints occurrence
my %count;
$count{$_}++ for @ints;
# Print out ints occurrence
for my $int ( sort keys %count ) {
printf "%d\t%d\n", $int, $count{$int};
}