terça-feira, 8 de fevereiro de 2011

Problema de Lógica: Que dia é hoje?

Quando depois de amanhã for ontem, hoje está tão distante de domingo como hoje esteve de domingo quando anteontem era amanhã. Que dia é hoje?






RESPOSTA






Quando depois de amanhã for ontem, ou seja, um dia após depois de amanhã, serão três dias à frente. Quando anteontem era amanhã, ou seja, um dia antes de anteontem, eram três dias atrás. Se, a partir de hoje, estes dois dias estão à mesma distância de domingo, no caso três dias, então hoje é domingo. Nenhum outro dia da semana fica na mesma distância de domingo três dias antes ou à frente, pois a semana tem sete dias.

sábado, 5 de fevereiro de 2011

Os movimentos no Cubo Mágico

O Cubo Mágico ou Cubo de Rubik (www.rubiks.com) é um quebra-cabeça mecânico tridimensional inventado pelo húngaro Ernö Rubik em 1974. O quebra-cabeça consiste em 26 peças ou cubinhos distintos, dispostos em uma estrutura 3x3x3 e unidos por um mecanismo central, que seria o 27º cubinho, o qual permite rotacionar cada face do cubo, ou seja, um conjunto de nove cubinhos, para ambos os sentidos.

Quebra-cabeças desse tipo são conhecidos como jogos de permutação, porque são baseados em movimentações, ou permutações, das partes do quebra-cabeça. O objetivo é restaurar as partes desordenadas em um arranjo predeterminado. Jogos de permutação estão diretamente relacionados à análise combinatória, responsável pela análise das possibilidades e das combinações possíveis dos elementos do quebra-cabeça.

Cada face do cubo possui uma cor, tradicionalmente branco, amarelo, vermelho, laranja, verde e azul, e desta forma, cada cubinho possui uma, duas ou três cores, dependendo da sua localização. No cubo oficial as cores são arranjadas com o branco oposto ao amarelo, o vermelho oposto ao laranja e o verde oposto ao azul.

O cubinho central de cada face é fixo no mecanismo, portanto não se move. Os outros cubinhos podem embaralhar-se, saindo-os de sua face inicial. A cor do cubinho central determina a cor de sua face. Para o quebra-cabeça ser resolvido, cada face deve estar inteiramente com a mesma cor.

Existem três tipos de cubinhos: o cubinho central, de apenas uma cor; os cubinhos de aresta, com duas cores; e os cubinhos de canto, com três cores. Durante o embaralhamento, os cubinhos de aresta, 12 no total, somente assumem posições nas arestas e os cubinhos de canto, 8 no total, somente assumem posições nos cantos.

Cubinho central, de aresta e de canto

Um Cubo Mágico 3x3x3, que possui 8 cubinhos de canto e 12 cubinhos de aresta, tem 8! = 40.320 arranjos para os cantos e 12!/2 = 239.500.800 arranjos para as arestas, pois um quarto de volta de uma face faz uma permutação ímpar dos cantos e uma permutação ímpar das arestas, o que conjuntamente é par. Os cantos podem ainda ser rotacionados, onde sete deles independentemente e o oitavo dependendo dos sete precedentes, dando 3^7 = 2187 possibilidades. Também onze arestas podem ser rotacionadas independentemente, com a rotação da décima segunda dependendo das precedentes, dando 2^11 = 2048 possibilidades. O total de permutações possíveis no Cubo Mágico é de:

8! x 3^7 x 12!/2 x 2^11 = 43.252.003.274.489.856.000

Na resolução do quebra-cabeça, uma sequência de movimentos que possui um efeito desejado no cubo é denominada algoritmo. Um conjunto de algoritmos pode ser aplicado para cada método de resolução do Cubo Mágico.

A maior parte dos algoritmos tem o objetivo de trocar apenas algumas peças sem alterar a posição das restantes, pois a medida que o quebra-cabeça vai sendo resolvido, algumas peças já estarão nas posições corretas. Por exemplo, existe um algoritmo que rotaciona dois cubinhos de canto sem alterar o resto e um algoritmo que troca a localização de três cubinhos de aresta também sem modificar o restante do cubo.

Enquanto alguns algoritmos possuem poucos movimentos, outros são verdadeiros esforços para a memória. Para se obter sucesso na aplicação do algoritmo é importante que se mantenha a orientação das faces do cubo, um pequeno descuido e o resultado do algoritmo vai por água abaixo.

Os algoritmos são escritos em uma notação específica, talvez a mais usada seja a notação de Singmaster, desenvolvida pelo professor de matemática David Singmaster. A notação padroniza os nomes das faces e o sentido da rotação. A figura a seguir mostra as referências para as faces, com as letras U, D, L, R, F, B, para as palavras em inglês Upper, Down, Left, Right, Front e Back. As cores não estão amarradas aos nomes das faces, pois isto pode variar dependendo das peças que serão rearranjadas.

Cada letra corresponde a uma face

No algoritmo, o sentido do movimento é horário ou anti-horário. Em um movimento anti-horário de uma face, a letra correspondente segue de um apóstrofo, exemplo U'. Se não tiver o apóstrofo o sentido é horário. O movimento descrito por uma letra é sempre de 90 graus de giro, ou seja, um quarto de volta. A seguir uma imagem que ilustra todos os movimentos das faces.

Movimentos de cada face do Cubo Mágico

Por exemplo, um algoritmo hipotético descrito como U L' F U' movimenta, na ordem como é lido, a face de cima em sentido horário, a face da esquerda em sentido anti-horário, a face frontal em sentido horário e a face de cima em sentido anti-horário. Durante todos os movimentos, as orientações das faces do cubo não podem modificar-se. Isto pode ser verificado pelos cubinhos centrais, que nunca mudam de localização durante as rotações.

A notação se estende em mais denominações, para rotações duplas, nomeação de camadas, eixos e até rotações de todo o cubo. Não será tratada aqui de forma completa pois a intenção deste artigo é apenas mostrar alguns algoritmos.

Vamos então para alguns dos algoritmos mais conhecidos para aplicar na resolução do Cubo Mágico:

1) Trocar dois cubinhos de aresta invertendo as cores:

U' U' L F L L U L U' F R' U R F F U' U'


2) Trocar dois cubinhos de aresta sem inverter as cores:

D L D L' D D F' D F D' R' F' R


3) Trocar três cubinhos de aresta em sentido horário:

F F U L R F F L' R' U F F


4) Trocar três cubinhos de aresta em sentido anti-horário:

F F U' L R F F L' R' U' F F


5) Trocar dois pares opostos de cubinhos de aresta:

L' L' F' F' L' L' F' F' L' L' F' F'


6) Inverter as cores de dois cubinhos de aresta:

U F B R' R' F' F' B' B' L F L' B' B' F' F' R' R' B' F' U' F'


7) Rotacionar dois cubinhos de canto em sentido anti-horário:

F' U' U' F U F' U F B' U' U' B U' B' U' B


8) Rotacionar dois cubinhos de canto em sentido horário:

B' U B U B' U' U' B F' U' F U' F' U' U' F


9) Trocar três cubinhos de canto em sentido horário:

F' U B' U' F U B U'


Para aplicar um algoritmo, localize os cubinhos que serão movimentados e posicione o cubo deixando semelhante a imagem descritiva do movimento. Não importam quais as cores das faces, não serão necessariamente as mesmas das ilustrações. Com o cubo posicionado, verifique pela cor dos cubinhos centrais qual face está em cima, na frente e na esquerda. Mantenha o cubo assim e faça os movimentos de rotação nas faces escritas no algoritmo.

Dentre as diversas soluções para o Cubo Mágico podemos aplicar alguns ou todos estes algoritmos, em uma ordem ou número de vezes dependendo do embaralhamento, e assim aos poucos reorganizando as peças em suas faces. A dica é começar pelas peças de aresta, formando cruzes com as cores dos cubinhos centrais e por fim organizar as peças de canto, completando o quebra-cabeça.

terça-feira, 25 de janeiro de 2011

Recuperando e organizando os arquivos pelos tipos

Com o propósito de recuperar todos os arquivos, alocados e não alocados, de um computador, a coleção The Sleuth Kit (TSK) traz em seu repertório forense a ferramenta denominada sorter.

O sorter é um script em Perl que analisa um sistema de arquivos para organizar os arquivos alocados e não alocados pelos seus tipos. Este script classifica os arquivos de uma imagem ou dispositivo de armazenamento em categorias, executando o comando "file" em cada arquivo e organizando os arquivos de acordo com regras pré-estabelecidas.

A ferramenta sorter trabalha utilizando outras ferramentas do TSK. Basicamente, o script executa a ferramenta "fls" para identificar os arquivos, cada arquivo identificado é visualizado com a ferramenta "icat", e a seguir, o comando "file" é executado para identificar o tipo do arquivo, baseado nas informações do cabeçalho. O sorter utiliza as regras definidas em seu arquivo de configuração, para classificar os arquivos, e também compara a extensão de cada arquivo, se houver, com a regra para seu tipo identificado.

Após toda esta varredura os arquivos são copiados, se a linha de comando conter o argumento -s, para um diretório no computador forense, fornecido com o argumento -d. Dentro deste diretório são criados subdiretórios nomeados de acordo com as categorias. Cada arquivo é renomeado usando o nome do sistema de arquivos, seguido do endereço e da extensão original.

Pode-se também gerar um índice em HTML, com o argumento -h, e os arquivos não identificados podem ser ignorados utilizando o argumento -U.

O sorter trabalha com imagens ou acessando diretamente o dispositivo de armazenamento. Existem outros argumentos para sua linha de comando, conforme sua página manual, mas uma linha de comando básica é exemplificada a seguir:

$ sorter -i raw -f fat32 -o 63 -d ~/data-sorter -s -h imagem.dd

Ou, acessando diretamente o dispositivo (geralmente necessita estar como superusuário):

# sorter -i raw -f fat32 -o 63 -d ~/data-sorter -s -h /dev/sdb

O argumento -i especifica o tipo onde o sistema de arquivos está localizado. O argumento -f especifica o tipo do sistema de arquivos. O argumento -o especifica o setor onde inicia o sistema de arquivos. O argumento -d, como já descrito, especifica para onde irão os arquivos e o argumento -s salva os arquivos no diretório.

Para os arquivos não alocados, o sorter recupera o que ainda estiver disponível, o que ainda não foi sobreposto. Se o arquivo foi sobreposto parcialmente, o sorter consegue recuperar parte do arquivo, resultando em um arquivo incompleto.

O resultado da ferramenta sorter pode ocupar bastante espaço em disco, às vezes mais do que o tamanho da unidade de armazenamento. Já vi um disco rígido de 40 GB retornar 60 GB de dados. Portanto, certifique-se de possuir espaço suficiente.

Esta ferramenta é muito utilizada na computação forense nos casos que necessitam uma recuperação de todos os arquivos, incluindo imagens, vídeos e documentos.

terça-feira, 18 de janeiro de 2011

Retirando os intervalos comerciais de uma gravação

Quem possui um dispositivo de captura de vídeo no computador, pode gravar um programa de televisão direto para seu disco rígido (http://dan-scientia.blogspot.com/2009/05/capturando-transmissao-da-tv-com-o.html). Em uma operação normal, antes de iniciar o programa ativa-se a gravação e só desliga após o término, sem se preocupar em pular os intervalos comerciais.

É muito chato ficar controlando o intervalo enquanto assistimos e gravamos o programa, também é difícil prever com exatidão o momento que termina uma parte ou que inicia a próxima. Felizmente, esta edição simultânea é desnecessária pois podemos fazer isto depois.

Com a ferramenta MEncoder, distribuído juntamente com o MPlayer, é possível copiar trechos de um arquivo de vídeo e gravá-los gerando outros arquivos. Assim, escolhemos somente o programa, deixando de fora os intervalos comerciais.

Antes de extrair é preciso anotar os tempos de cada parte do programa, a hora do início e do fim, e calcular a duração de cada parte. Reproduzindo o vídeo, da gravação na íntegra, por exemplo com o MPlayer, podemos pressionar a tecla "o" para alterar o estado do OSD até aparecer na tela o relógio da reprodução.

Se, por exemplo, anotarmos que a primeira parte vai do tempo 00h00m27s até 00h13m12s, podemos calcular que esta parte termina em 13 x 60 + 12 = 792 segundos e que a duração desta parte tem 792 - 27 = 765 segundos. Então, a linha de comando para o MEncoder copiar somente este trecho, para um outro arquivo, é:

$ mencoder gravacao.mpg -o parte1.mpg -oac copy -ovc copy -ss 00:00:27 -endpos 765

Este procedimento se repete para as outras partes que existirem. Quando tivermos todas as partes separadas em arquivos, podemos juntá-las gerando agora um novo arquivo com todo o programa, sem os intervalos comerciais. Um exemplo de linha de comando para juntar as partes é:

$ mencoder -oac copy -ovc copy -o editado.mpg parte1.mpg parte2.mpg parte3.mpg parte4.mpg

Consulte a página manual do MEncoder para informações detalhadas sobre sua linha de comando. Esta ferramenta é bastante versátil.

sábado, 15 de janeiro de 2011

Produtos curiosos da matemática

Os números na matemática podem fazer muitas curiosidades. Eu encontrei estas combinações fascinantes de números em operações de multiplicação (algumas com complemento da soma). Veja o que os números podem apresentar:


1 x 7 + 3 = 10
14 x 7 + 2 = 100
142 x 7 + 6 = 1000
1428 x 7 + 4 = 10000
14285 x 7 + 5 = 100000
142857 x 7 + 1 = 1000000
1428571 x 7 + 3 = 10000000
14285714 x 7 + 2 = 100000000
142857142 x 7 + 6 = 1000000000
1428571428 x 7 + 4 = 10000000000
14285714285 x 7 + 5 = 100000000000
142857142857 x 7 + 1 = 1000000000000
...


1 x 8 + 1 = 9
12 x 8 + 2 = 98
123 x 8 + 3 = 987
1234 x 8 + 4 = 9876
12345 x 8 + 5 = 98765
123456 x 8 + 6 = 987654
1234567 x 8 + 7 = 9876543
12345678 x 8 + 8 = 98765432
123456789 x 8 + 9 = 987654321


1 x 9 + 2 = 11
12 x 9 + 3 = 111
123 x 9 + 4 = 1111
1234 x 9 + 5 = 11111
12345 x 9 + 6 = 111111
123456 x 9 + 7 = 1111111
1234567 x 9 + 8 = 11111111
12345678 x 9 + 9 = 111111111
123456789 x 9 + 10 = 1111111111


9 x 9 + 7 = 88
98 x 9 + 6 = 888
987 x 9 + 5 = 8888
9876 x 9 + 4 = 88888
98765 x 9 + 3 = 888888
987654 x 9 + 2 = 8888888
9876543 x 9 + 1 = 88888888
98765432 x 9 + 0 = 888888888


1 x 1 = 1
11 x 11 = 121
111 x 111 = 12321
1111 x 1111 = 1234321
11111 x 11111 = 123454321
111111 x 111111 = 12345654321
1111111 x 1111111 = 1234567654321
11111111 x 11111111 = 123456787654321
111111111 x 111111111 = 12345678987654321
1111111111 x 1111111111 = 1234567900987654321
11111111111 x 11111111111 = 123456790120987654321
...


11 x 11 = 121
112211 x 11 = 1234321
1122332211 x 11 = 12345654321
11223344332211 x 11 =  123456787654321
112233445544332211 x 11  = 1234567900987654321
...


11 x 11 = 121
121 x 11 = 1331
12321 x 11 = 135531
1234321 x 11 = 13577531
123454321 x 11 = 1357997531


111 x 11 = 1221
121 x 11 = 1331
131 x 11 = 1441
141 x 11 = 1551
151 x 11 = 1661
161 x 11 = 1771
171 x 11 = 1881
181 x 11 = 1991


4 x 4 = 16
34 x 34 = 1156
334 x 334 = 111556
3334 x 3334 = 11115556
33334 x 33334 = 1111155556
333334 x 333334 = 111111555556
...


7 x 7 = 49
67 x 67 = 4489
667 x 667 = 444889
6667 x 6667 = 44448889
66667 x 66667 = 4444488889
666667 x 666667 = 444444888889
6666667 x 6666667 = 44444448888889
...


9 x 9 = 81
99 x 99 = 9801
999 x 999 = 998001
9999 x 9999 = 99980001
99999 x 99999 = 9999800001
999999 x 999999 = 999998000001
9999999 x 9999999 = 99999980000001
...


7 x 9 = 63
77 x 99 = 7623
777 x 999 = 776223
7777 x 9999 = 77762223
77777 x 99999 = 7777622223
777777 x 999999 = 777776222223
...


3 x 37 = 111
33 x 3367 = 111111
333 x 333667 = 111111111
3333 x 33336667 = 111111111111
33333 x 3333366667 = 111111111111111
333333 x 333333666667 = 111111111111111111
3333333 x 33333336666667 = 111111111111111111111
33333333 x 3333333366666667 = 111111111111111111111111
333333333 x 333333333666666667 = 111111111111111111111111111
3333333333 x 33333333336666666667 = 111111111111111111111111111111
...


7 x 15873 = 111111
14 x 15873 = 222222
21 x 15873 = 333333
28 x 15873 = 444444
35 x 15873 = 555555
42 x 15873 = 666666
49 x 15873 = 777777
56 x 15873 = 888888
63 x 15873 = 999999


3 x 37 = 111 e 1 + 1 + 1 = 3
6 x 37 = 222 e 2 + 2 + 2 = 6
9 x 37 = 333 e 3 + 3 + 3 = 9
12 x 37 = 444 e 4 + 4 + 4 = 12
15 x 37 = 555 e 5 + 5 + 5 = 15
18 x 37 = 666 e 6 + 6 + 6 = 18
21 x 37 = 777 e 7 + 7 + 7 = 21
24 x 37 = 888 e 8 + 8 + 8 = 24
27 x 37 = 999 e 9 + 9 + 9 = 27


1 x 9 = 09 e 0 + 9 = 9
2 x 9 = 18 e 1 + 8 = 9
3 x 9 = 27 e 2 + 7 = 9
4 x 9 = 36 e 3 + 6 = 9
5 x 9 = 45 e 4 + 5 = 9
6 x 9 = 54 e 5 + 4 = 9
7 x 9 = 63 e 6 + 3 = 9
8 x 9 = 72 e 7 + 2 = 9
10 x 9 = 90 e 9 + 0 = 9

Ferramentas de linha de comando do The Sleuth Kit

O The Sleuth Kit (TSK) é uma coleção de ferramentas de linha de comando para Unix que permite investigar um computador, isto é, trata-se de uma coleção de ferramentas forenses. O objetivo destas ferramentas é o acesso aos arquivos e aos sistemas de arquivos. O TSK suporta os sistemas de arquivos FAT, Ext2/3, NTFS, UFS, e ISO 9660.

Ao todo são 27 ferramentas que fornecem informações ou conteúdo de arquivos, unidades de dados, volumes, partições, sistemas de arquivos e metadados como Mac times e inode. Veja abaixo uma lista das ferramentas com uma breve descrição da respectiva funcionalidade:

blkcalc - Converte entre números de unidades não alocadas no disco e números de unidades regulares no disco.
blkcat - Mostra o conteúdo da unidade de dados do sistema de arquivos (blocos) em uma imagem de disco.
blkls - Lista as unidades de dados do sistema de arquivos (blocos).
blkstat - Mostra os detalhes de uma unidade de dados do sistema de arquivos (bloco ou setor).
ffind - Encontra o nome de um arquivo ou diretório pelo inode.
fls - Lista os nomes dos arquivos e diretórios de uma imagem de disco.
fsstat - Mostra os detalhes gerais de um sistema de arquivo.
hfind - Consulta um valor de Hash em uma base de dados de Hash.
icat - Retorna o conteúdo de um arquivo baseado no seu número inode.
ifind - Encontra a estrutura de metadados que foi alocada para uma unidade de disco ou nome de arquivo.
ils - Lista a informação do inode.
img_cat - Retorna o conteúdo de um arquivo imagem.
img_stat - Mostra os detalhes de um arquivo imagem.
istat - Mostra os detalhes de uma estrutura de metadados, isto é, inode.
jcat - Mostra o conteúdo de um bloco journal em um sistema de arquivos com journal.
jls - Lista o conteúdo de um sistema de arquivos com journal
mactime - Cria uma linha do tempo ASCII das atividades dos arquivos.
mmcat - Retorna o conteúdo de uma partição para a saída padrão.
mmls - Mostra o esboço da partição de um volume do sistema (tabela de partição).
mmstat - Mostra os detalhes sobre volumes do sistema (tabela de partição).
sigfind - Encontra a assinatura binária em um arquivo.
sorter - Classifica os arquivos de uma imagem em categorias baseadas nos tipos de arquivo.
srch_strings - Mostra os caracteres imprimíveis das strings de um arquivo.
tsk_comparedir - Compara o conteúdo de um diretório com o conteúdo de uma imagem ou dispositivo local.
tsk_gettimes - Coleta os MAC times de uma imagem de disco para um arquivo.
tsk_loaddb - Popula um banco de dados SQLite com os metadados de uma imagem de disco.
tsk_recover - Exporta os arquivos de uma imagem para um diretório local.

Com estas ferramentas podemos recuperar arquivos deletados, montar uma linha do tempo do uso dos arquivos, procurar por determinada string, entre outras coisas, tarefas corriqueiras na computação forense.

As ferramentas funcionam acessando o conteúdo tanto na forma de imagem como diretamente ao dispositivo. Mas lembre-se, é sempre recomendável criar a imagem da unidade de armazenamento para preservar a integridade da prova.

O TSK pode ser obtido pelo endereço www.sleuthkit.org. Algumas distribuições Linux fornecem seu pacote pelos repositórios oficiais de software.

Existe o Autopsy que é a interface gráfica para esta coleção (http://dan-scientia.blogspot.com/2010/10/computacao-forense-com-o-sleuth-kit-e.html), entretanto, é possível com apenas poucos comandos realizar algumas tarefas do Autopsy, e em alguns casos, até de forma mais agilizada. Mas isto fica para uma outra postagem.

terça-feira, 11 de janeiro de 2011

Problema de Lógica: Número de caramelos na taça

Num concurso de televisão três concorrentes procuram acertar o número de caramelos contidos numa taça de cristal. José diz que há 260, Maria crê que há 274 e Carlota propõe que sejam 234. Sabe-se que um deles se enganou em 9 caramelos, outro em 17 e outro em 31. Qual o número de caramelos na taça?





RESPOSTA





Como não sabemos precisamente qual foi o engano de cada um, vamos montar uma tabela com todos os enganos, tanto para mais como para menos, para cada palpite dado, e assim, calcular os possíveis valores:

     260  274  234
------------------
+9   269  283  243
-9   251  265  225
+17  277  291  251
-17  243  257  217
+31  291  305  265
-31  229  243  203

O número correto será aquele que repetir três vezes, estando em colunas (palpites) diferentes e linhas (enganos) diferentes. Este número é o 243. José com seu palpite de 260, errou em 17 unidades, Maria com seu palpite de 274, errou em 31 unidades, e Carlota com seu palpite de 234, errou em 9 unidades. Portanto na taça há 243 caramelos.