Em soma de potências de 2: 210+29+28+27+26+25
Em binário: 11111100000
Em base 8: 3740
Em base 16: 7E0
Em base 32: 1V0
Em primos: 2 5 * 3 2 * 7
E o meu favorito: 2017-1.
My Adventure in Data Engineering
Há um dia
Desobediência tecnológica
awk '{s+=$1} END {print s}'
Esse código soma valores e imprime o resultado no fim. Posso adicionar um parâmetro com o nome de um arquivo, ou posso usá-lo com um pipe:
grep -P "10\.208\S+" access_log | grep -Po "\d+$" | awk '{s+=$1} END {print s}'
O primeiro grep filtra um faixa de IPs (todos os que começam com 10.208); o segundo pega o último valor da linha (que é o número de bytes transmitidos); por fim, o awk soma os valores.
{
use integer;
my @digits=split(//,'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ');
sub to_base {
my $n=shift;
my $base=shift;
if($n<$base) {
return $digits[$n];
} else {
return to_base($n/$base, $base) . $digits[$n%$base];
}
}
}
Para ir além da base 32, bastaria adicionar novos símbolos. De qualquer forma, achei que seria mais interessante retirar a recursão e também o if.
{
my @digits=split(//,'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ');
sub to_base {
my $n=shift;
my $base=shift;
join '',
reverse
map { $digits[int(($n%($base**($_+1)))/($base**$_))] }
0..int(log($n)/log($base));
}
}
A solução advém do fato de que podemos calcular qualquer dígito sem olhar os demais e que podemos calcular quantas casas serão necessárias para uma determinada base (com log(n)/log(b), sendo n o número e b a base).