10˚ Encontro Locaweb – Problema 2

8 maio, 2008

Ae, esse eu resolvi e ganhei os ingressos :D, está lá em Problema 2.

O problema era: Onde fica isso?

67 7A 69 70 3A 1F 8B 08 08 D0 11 1B 48 02 FF 65 00 CB 28 29 29 B0 D2 D7 CF 4D 2C 28 D6 4B CF CF 4F CF 49 D5 4B CE CF D5 4B 2A 02 0B D9 E7 E4 D8 EA 1A 19 E9 59 1A 1A 99 9B 98 EA E8 9A 18 EB 19 19 98 19 1B 02 00 29 22 3E 34 36 00 00 00

Primeiro chute de qualquer um, isso são bytes em hexadecimal. Mas não podia ser apenas uma string, dava pra perceber pelos 3 últimos bytes 0. Mas como não conhecia nenhum arquivo que o magic number começava com 67, era a primeira opção. E como estava com o Eclipse com as ferramentas de Java aberto, fui logo para o código (mas devia ter considerado usar uma linguagem de script, Groovy por exemplo seria mais adequado).

Primeira tentativa:

class Problem2 {
public static void main(String[] args) {
String[] input=”67 7A 69 70 3A 1F 8B 08 08 D0 11 1B 48 02 FF 65 00 CB 28 29 29 B0 D2 D7 CF 4D 2C 28 D6 4B CF CF 4F CF 49 D5 4B CE CF D5 4B 2A 02 0B D9 E7 E4 D8 EA 1A 19 E9 59 1A 1A 99 9B 98 EA E8 9A 18 EB 19 19 98 19 1B 02 00 29 22 3E 34 36 00 00 00″.split(” “);
byte[] output=new byte[input.length];

for (int i = 0; i < input.length; i++) { output[i] = (byte)Integer.parseInt(input[i], 16); System.out.print((char)output[i]); } } } [/sourcecode]

E como resultado:

gzip:??H?e … e alguns caracteres não representáveis.

Mas o gzip era a dica que eu precisava, então vamos para …

Segunda tentativa:

import java.io.ByteArrayInputStream;
import java.util.zip.GZIPInputStream;

class Problem2 {
public static void main(String[] args) throws Exception {
String[] input = “67 7A 69 70 3A 1F 8B 08 08 D0 11 1B 48 02 FF 65 00 CB 28 29 29 B0 D2 D7 CF 4D 2C 28 D6 4B CF CF 4F CF 49 D5 4B CE CF D5 4B 2A 02 0B D9 E7 E4 D8 EA 1A 19 E9 59 1A 1A 99 9B 98 EA E8 9A 18 EB 19 19 98 19 1B 02 00 29 22 3E 34 36 00 00 00″
.split(” “);
byte[] byteRepresentation = new byte[input.length];
byte[] output = new byte[input.length];
for (int i = 0; i < input.length; i++) { byteRepresentation[i] = (byte) Integer.parseInt(input[i], 16); } GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(byteRepresentation)); gis.read(output); for (int i = 0; i < output.length; i++) { System.out.print((char)output[i]); } gis.close(); } } [/sourcecode]

E o resultado foi:

Exception in thread "main" java.io.IOException: Not in GZIP format
	at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:137)
	at java.util.zip.GZIPInputStream.(GZIPInputStream.java:58)
	at java.util.zip.GZIPInputStream.(GZIPInputStream.java:68)
	at Problem2.main(a.java:14)

Droga, não funcionou o gzip, pesquisando um pouco vi que o gzip do começo não era nem header nem magic number do formato, então resolvi tirar esse pedaço e fui para a …

Terceira tentativa:

import java.io.ByteArrayInputStream;
import java.util.zip.GZIPInputStream;

class Problem2 {
public static void main(String[] args) throws Exception {
// Tirei os 5 primeiros bytes
String[] input = “1F 8B 08 08 D0 11 1B 48 02 FF 65 00 CB 28 29 29 B0 D2 D7 CF 4D 2C 28 D6 4B CF CF 4F CF 49 D5 4B CE CF D5 4B 2A 02 0B D9 E7 E4 D8 EA 1A 19 E9 59 1A 1A 99 9B 98 EA E8 9A 18 EB 19 19 98 19 1B 02 00 29 22 3E 34 36 00 00 00″
.split(” “);
byte[] byteRepresentation = new byte[input.length];
byte[] output = new byte[input.length];
for (int i = 0; i < input.length; i++) { byteRepresentation[i] = (byte) Integer.parseInt(input[i], 16); } GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(byteRepresentation)); gis.read(output); for (int i = 0; i < output.length; i++) { System.out.print((char)output[i]); } gis.close(); } } [/sourcecode]

E agora, finalmente.

http://maps.google.com.br/maps?ll=-22.912745,-43.20631

Onde era isso? Meu primeiro impulso foi responder, estação do metrô Estácio, mas em tempo lembrei que tinha um centro de convenções lá perto. E assim ganhei os ingressos.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: