Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Adson aquino

Google Developer Day 2011

Recommended Posts

Aí galera alguém fez a prova do Google Developer Day 2011?

 

Eu acabei de fazer a minha agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vixi mano vim ver sua pergunta hoje, foi mal, eu respondi as 4 primeiras a última não consegui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui responder as 5 questões dessa prova. As 3 primeiras são tranquilas, para quem conhece um pouco de programação consegue resolver sem problemas.

As outras 2 já precisa ter um conhecimento razoável. Abaixo vou explicar como fiz para solucionar as questões, mas não vou colocar o código pois o Google altera os valores de forma aleatória.

 

1-) A primeira coisa a fazer é quebrar o texto e transforma-lo em um array. Para isso use a função explode() com o separador sendo o "espaço". Depois crie um array para que contenha o conjunto de letras do tipo "foo". Por exemplo: $array_exp = array('m','c','g','f','h');

Depois faça um loop para cada item do array de palavras e dentro verifique se a string possui mais do que N caracteres (use a função strlen()), sendo N o numero máximo de caracteres determinado. Verifique também se o ultimo caractere NÃO pertence ao array que contem o conjunto de letras "foo". Para isso utilize a função in_array() na forma negativa. Lembrando também que a preposição precisa (ou não) conter uma letra determinada. Para isso utilize a função strpos() no qual retorna TRUE ou FALSE.

Pronto, feito essas condições já é possivel contar as preposições.

 

2-) A segunda questão utiliza a mesma ideia da primeira, ou seja, terá que quebrar o texto utilizando a função explode() e depois realizar um loop para cada palavra. Dentro desse loop verifique o tamanho de cada palavra utilizando a função strlen() e depois se o primeiro caracter está ou não dentro do array de letras do tipo "foo". Dentro desse mesmo loop é possivel contar também se o verbo é em primeira pessoa apenas fazendo a verificação se o primeiro caractere pertence ao conjunto de letras do tipo "foo".

 

4-) A quarta questão é a mais complexa que achei. Na questão eles pedem para ordenar o texto de acordo com a ordem lexicográfica "fgjhksmvtnrlzqpcxwdb" e não a ordem lexicográfica convencional de "abcdef.."

É possível utilizar a função usort() e a uksort() nativa do PHP, mas achei uma solução mais simples e prática.

No meu caso fiz um mapa das letras relacionando com a ordem lexicográfica convencional, ou seja,

f = a

g = b

j = c

h = d

e assim por diante. Este mapa coloquei em forma de array da seguinte forma:

$array_key = array("j"=>"a","l"=>"b","t"=>"c","d"=>"d","p"=>"e", ... );

Depois criei uma função que converte o alfabeto Googlon no nosso alfabeto convencional. Nesta função eu passo a palavra no formato Googlon e transformo ela utilizando um loop simples para encontrar a referencia no $array_key. Onde aparece a letra "j" eu troco pela letra "a" e assim por diante. No final retorno essa palavra transformada e insiro no meu array "traduzido".

Depois com esse array "traduzido" eu uso a função sort() para deixar na ordem correta.

Pronto... ja temos o array ordenado, mas o problema ainda não acaba aqui. É preciso voltar as palavras para o alfabeto Googlon. Para isso criei outra função que faz o processo inverso. Neste caso utilizo a função array_search() para retornar a chave e montar a palavra novamente.

Pronto, agora sim basta imprimir esse array final que teremos o alfabeto Googlon ordenado.

 

5-) A ultima questão parece ser complexa mas pensando da forma certa ela fica muito fácil. Quem já estudou um pouco sobre transformação de números em bases consegue resolver esse problema tranquilamente. Como o alfabeto Googlon tem 20 letras eles utilizaram essa base para calcular os valores. Na questão é falado que a ordem do alfabeto representa os valores da potencia, ou seja, j=0, l=1, t=2, ...

Então a palavra "fht" pode ser calculada da seguinte forma:

 

f h t

0 3 8

0x20^0 + 3x20^1 + 8x20^2

0x1 + 3x20 + 8x400

0 + 60 + 3200 = 3260

 

Entendendo essa ideia fica fácil entender como resolver o problema. O que temos que fazer é uma função que calcula esse valor, utilizando a função pow() para a potência de 20. A função fica da seguinte forma:

 

function calc_base_20($word){

global $arr_map;

$tam = strlen($word);

$value = 0;

for($i=0;$i<$tam;$i++){

$mult = array_search($word[$i],$arr_map);

$value += pow(20,$i) * $mult;

}

return $value;

}

 

onde $arr_map é o meu array com a ordem das palavras "jltdpxgfqsrwmhknczbv".

 

Depois para descobrir se esse é um número bonito é preciso apenas verificar se o valor é maior que o número determinado na questão e se é divisível por 5.

Um problema que encontrei foi de dividir um valor maior que 2147483648 pois esse é o maior inteiro em 32bits em PHP.

Por isso fiz um "artificio técnico" e transformei o inteiro em string e peguei apenas o ultimo caractere do numero. Se esse caractere for 0 ou 5 então o numero todo é divisível por 5.

Pronto, entendendo isso basta criar um loop para chamar a função que calcula o valor e com esse valor retornado verificar essas duas condições acima.

 

 

Bom é isso pessoal, espero que tenham entendido a ideia e que consigam resolver os probleminhas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hi.

 

Provinha bacana do Google. Comecei às 10 da manhã e terminei agora =O.

Fiz todas as questões também. :-)

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Eu queria fazer a prova, mas não estou encontrando meios de realizá-la.

 

Será que alguém pode me dar um help?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não achei difícil...

Achei muito bem bolada, isso sim :-)

 

Só uma dica, na questão 4 que você mencionou, "Marcelo K", acho que fica mais rápido com strtr e depois um ksort, não?

 

@braços e boa sorte a todos :-)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigadão Adson!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nopes,

 

Só para as respostas, mas é muuuito mais fácil você usar uma linguagem para calcular, obter os resultados e colocar no gabarito :-)

A não ser que queira fazer a ordenação daquele texto gigante no "olhometro" heheheh.

 

@braços e fique com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gente fiz as 3 primeiras...mais tou fazenu com um amigo de escola e não temos noção nehuma de php, estamos fazendo meio que na raça usando o excel (bem avançado), mas paramos na quarta questão.

 

Peço um HELP...qualquuer opinião ou dica jah ajuda. Obrigao gaalera...tou desde que começou as inscrições tentando.

 

"Um professor universitário utilizará os textos A e B para ensinar o Googlon aos alunos. Para ajudar os alunos a compreender o texto, esse professor precisa criar uma lista de vocabulário para cada texto, isto é, uma lista ordenada (e sem repetições) das palavras que aparecem em cada um dos textos.

 

Essas listas devem estar ordenadas e não podem conter repetições de palavras. No Googlon, assim como no nosso alfabeto, as palavras são ordenadas lexicograficamente, mas o problema é que no Googlon, a ordem das letras no alfabeto é diferente da nossa. O alfabeto Googlon, em ordem, é: kptcgmflvrwqnzdxbjhs. Assim, ao fazer essas listas, o professor deve respeitar a ordem alfabética Googlon.

 

Mas como os Googlons escrevem números? Bem, no Googlon, as palavras também são números dados em base 20, onde cada letra é um dígito, e os dígitos são ordenados do menos significativo para o mais significativo (o inverso do nosso sistema). Ou seja, a primeira posição é a unidade, a segunda posição vale 20, a terceira vale 400, e assim por diante. Os valores das letras são dados pela ordem em que elas aparecem no alfabeto Googlon (que é diferente da nossa ordem, como vimos acima). Ou seja, a primeira letra do alfabeto Googlon representa o dígito 0, a segunda representa o dígito 1, e assim por diante.

 

Por exemplo, a palavra szctwmj tem o valor numérico de 1105617479.

 

OBS: os números nesse problema podem ser grandes, então se você está usando um tipo de dados de tamanho limitado, tenha cuidado com possíveis overflows.

 

Os Googlons consideram um número bonito se ele satizfaz essas duas propriedades:

 

é maior ou igual a 870470

é divisível por 5

 

Ao consideramos o Texto A como uma lista de números (isto é, interpretando cada palavra como um número usando a convenção explicada acima), notamos que existem 75 números bonitos distintos.

 

E no Texto B, quantos números bonitos distintos existem?"

 

Galera o maximo que chegamos foi nisso. Mais quando vamos faze o vocabulario do texto B temos que usar a ordem Googlons?

 

 

k = a

p = b

t = c

c = d

g = e

m = f

f = g

l = h

v = i

r = j

w = k

q = l

n = m

z = n

d = o

x = p

b = q

j = r

h = s

s = t

? u

? v

? w

? x

? y

? z

1 =?

2 =?

3 =?

4 =?

5 =?

6 =?

7 =?

8 =?

9 =?

0 =?

Compartilhar este post


Link para o post
Compartilhar em outros sites

hufersil,

 

creio que seja mais rápido mesmo usar o strstr(), mas como não tenho muita experiência com a função kusort() acabei fazendo dessa forma que comentei.

Mas posta ae sua solução (não o código e sim a ideia) para compartilhar com o pessoal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A idéia é simples :)

 

A lógica que eu usei foi: "como o interpretador PHP ordena as letras?"

Logo, lembramos que utiliza a mesma que a nossa (abcdefg...).

 

Então vem a segunda pergunta para ajudar: "o que eu preciso fazer para transformar o alfabeto Googlon no nosso?"

Logo, entra a função strtr.

 

Ai ficou fácil.

- Convertemos cada token (palavra googlon) para o nosso alfaberto.

- Pegamos o valor da string convertida e colocamos como indice de um array, onde o valor é palavra ainda em googlon.

- Finalmente, ordenamos pelo indice ;)

 

@braços e fique com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.