Resolvendo a Provinha do Google Developer Day Brasil 2011 com Powershell

Basicamente a provinha é composta por 5 questões, onde somos apresentados ao idioma Googlon, até então um idioma desconhecido. Arqueólogos encontraram dois pergaminhos, e baseado em um dos pergaminhos, temos que descobrir informações do outro. Abaixo reproduzo o conteúdo de uma provinha com todas as questões resolvidas utilizando somente powershell. Lembre-se de que existe variações da provinha para cada usuário.

Instruções

Responda à provinha preenchendo os campos apropriados dessa página.A correção é feita inteiramente por máquina, portanto você deve responder exatamente ao que se pede, sem colocar nenhum dado adicional, explicação ou formatação. Você pode (e deve) escrever programas para ajudar a calcular as respostas das questões, mas o seu código-fonte não deve ser enviado.

Nas respostas que pedem texto, espaços e tabulações em excesso serão desconsideradas, portanto não se preocupe caso você digite espaços ou tabulações a mais, mas tome cuidado para não cortar ou juntar palavras. Em outras palavras, qualquer número de espaços em branco é equivalente a um espaço em branco, e espaços em branco no início ou final da resposta não serão considerados.

Quando uma resposta for um número, por favor utilize a notação decimal pura, usando só digitos e sem separadores ou outros caracteres embutidos. Por exemplo, digite 16384 (e nunca 16.384 ou 16 384).

Atenção ao comprimento máximo de alguns campos e certifique-se de que sua resposta está corretamente representada.

Esta página não salva respostas, portanto preencha-a completamente de uma única vez. Caso precise guardar suas respostas para continuar a prova posteriormente, você deve fazê-lo por conta própria (num arquivo por exemplo).

Importante: os resultados de correção da provinha não serão divulgados e não haverá revisão ou vista de provas.

Questões

Arqueólogos encontraram um pergaminho com os seguintes textos:


Texto A


Texto B



Esses pergaminhos estão no antigo e misterioso idioma Googlon. Após muitos anos de estudo, os linguistas já conhecem algumas características desse idioma.

Primeiramente, as letras Googlon são classificadas em dois grupos: as letras v, k, b, p e s são chamadas "letras tipo foo", enquanto que as demais são conhecidas como "letras tipo bar".

Os linguistas descobriram que as preposições em Googlon são as palavras de 5 letras que terminam numa letra tipo bar, mas onde não ocorre a letra w. Portanto, é fácil ver que existem 56 preposições no Texto A. E no Texto B, quantas preposições existem?

# Textos da Prova
$textoA = "wsnmx fvjxrdfd nqxhxs mlzlpk glrxnsh dlrbnkxq znsnkrfc kjdqxgm ddcf dghwxk wmx wrflj tlqx zhpmzrtf xfgm slgfdjl hzvqf vksfg tqz jmjq rfgcwcf ckggzsd wpnn jxhmhnhf mbbxzl pwctdf drnnzlr kqbtck ddrpbj dmsbns prfcvllg cckfsb xwqplnvv smnw cgqt lcdgwf wxhr pfh hqfqlzxp bnbftrf hkrw thsbxw xwsxlm ftzzzct tnqrkjjf gjkz gqdw lsr xcxjtpfn rblfvc wwfrgkj ttfjct xcdgbt kmszsfzw hrhmj gnlqwj ztkzbhz dcrplxs zgp qmq rppnmhtw qwbpchlg xrpqrgj mlz vnrhwv kptzcdbq qtx whjsms lmrtr xgtmm qzwjvwpp jtwtwvd rwdqbl pnrs gkp gjvnt tpk bbkcm npjsm jbccm qlrm jccrdqcc rwwcvl jvztkpk stdszmgx qvz tlcds fgrq xmf xrct tnbd bntr vvnhtp cccwsn lpvbwzvd cqc lnkx cxdcm znlnfhwn tvncrlp gnx csszngw pzczndn wgcm khzcrr xtzk tjhvvkn zkv dbnzpfd rrxsvsn ckhf xqqn zgpwvsw rdcphz bpmm qrf kngpvgn hsgfnpn btwqck kgh sqtjmwd zfhlkk ppxkr lwgwvv ndxxb gzrdtx drvpdrkx tbb ndsbv bzjtb sljgvv dmdmwpk ggdnqs cfvlqp fnp nzrppwnq mvcqqc hsfs tvqq wsxzwklg nqgqlsd bnb jbmrj cpzphpj mdqt tpd bgjsmmk cfnxqwxl wwvskkqt hlqdhcjt cdwr qgnkf mhhmfw kkwq ndd bqw mgnfbjjm fwmgdn vrznbw sgqvm zqkj zxxl fbzpvkpf sdrdv kwtkz pnt lmqfsc xdqg gtwp lbwfl twffjh bczhjrg mfnpgj lgnhnxt zldxgtz zmwm tppxrzvc qmhpsbwm zqz bjwjjk xbqhbjz srlfjjxl rztzw fthvzqc kjbc qfrshq bdhlsfn jdxfmflq xxcr nknfth ppcd fpfjg wnbjfpxb xlz xzh gjttmmr khkg nqhkg dhbk zqpxdt sjcvxvqx jrrr tpvh qwqnhwzg rmkcw gpbvbq dvcpx pgdzjczr dgq bnkkv dqqzqgp tpmfhn qtrxfg hlf xxvwd nmmkz fdfm zqkfphvr cmkgbcrk fphzmgq ttx rxxvt xcd gnvjq qkprlzx sfrlqck drlxrmz zbnxwtq ckn tfx flnxpp jsgc lbfb rvhkzrcg thb fkxdhfgx fmgz jtgkqcg jgbwfj fpmxvvwx qnrzhb zcbvwfv gzpkfzb tlgxktvn dnw vkc bcctnt xvqx ffzwtw sxdnxkrr xjgzcnkl mskkwvq wvdbdrb ncw kqfc bfcnmf tkftr wvmhqws tfwqg vhdbd kpn kzkppvdx hdsrg zjwh vdzr rxd bntfzzg dgfqtp wwxgmrs rlgkl ggx pgvh gvdqvj dwjx vpx zhxwsm hjfkd kmhbb tffxqwx ssxdlrlg xnkl vdj vvvqvkt dtzdr rsbkttr zsjrgx ndtcfzn krdtfdnx jbrbz dpnb kscmpcv hww ztlmfx xjgsznp nptvhk tjzf drcvhb qwzgd crj jrggwgd hhrv jgnw lcjbd rvqm sxgqszt qvfz pkzzxl vgqccdb jvckq gsjgx bssxsgl jjlkz grkrmwl gvbv dlcsq ksv sqhtp zsngs ktxwlzcv bfmsx srs qnzwn tqdpml jthvdxn tnlf qmfxb bpdjs gjdjpndt ftn pzs gzslct zdqgxvd rlbvs kmxrllff sktwbqrw xpd pnxdtfh qqwrhpd jfgbndbl fxbx cqn dwch zqlr mdml dmll sjnnjtg nmkkrgz cmwvdwb chzpssnm kbj nsjhnk rplxrvfc sxn bnxmbsnj cgpld xfzkm zbfrhgbd xbjfdl ccz kwfrhd tlpgt jqsgd ctbjhjzk sngcd jzsj pcx cqjmfg dxzf cnm kkk jlk gdpn tbk dvpmzkbv bvdd xzfc lzfsrvtw fbf vmqsznl jrbzthww mfwzkrbb ffrtkrkt nlsnjqlj clvjxr mvr sxdgsc pwn njqzb xmcj pjvvqzj sqx sgrsljpm vmqgbm zgfxhqwt xnhjtkq tslbxnxx cxtgzd slvn wrgg fvd pkjvvqc scjskc djqw vskkg ftqdrqdt gprhkqwf sps jptghq crfpwk drhsjmhg cldnplf tttlzxb cdq lzkjjp fcfr zdjgx ftkvgm wvrm fxq jzsmlhn mfttvnjj knt tgxcmdvv vxcgpjfs sbhrw tnr rwsnldxb fbksps wswnxhkm fwd hqmp zrl qjzztbfx wtw hcsj lswsxpz rgvpvjmr rxvtj vdwt vnlqn llvkn hdkngmbc jxlffh slksjkfm rjdd jfscrc kvfvxx dtrlx zvwvw ffdlv zfvtkwsb qnbhhrk mjfxvz lmdfzq sstqtkct qzws shq jbv rkkf wcwzl jvwwlfs dzwprncj zxk szqwm zjrmf zkhq kklnqffb cfvdl xxrzlsbg fxjpqgfd kqscnbc ntk hpvq jltncl bpg scwvd rdn rvbxbgwc xqgzvt kbbgqj bzx tmnxc sktnxsl dgh kmm nrsv djsr mzdbf jhcbfqj rtdwpp zzgzpjgc jngdxg bswwfhd vmc nmt bwgrqwd jjtfgdcq jrtfj mphx shlqssf hdtn kxgt nvk mpcgtpl plf snp nnr hcsflf bmmbvk rfwhxth kjcf lxzf dfkwrx jqmfzl lvbdd qgxcwgnk gqfm lkv gftlv qxnjfsj bsjjs xsslpth hdp lqzfpxph vxvphqx rwqfdbwm kclnh swrlw jwzhp fnrxlxxg bmrklrqn srmqwqs zskbckdx xqdxv ljkmt xdvlw pcrqh tmp tmflb bsmfg mmxvzcj smdlk mhbf xlvxb fcdrwcpp hwv ldfzv dkfxwc vwfqk bgf mcnmpwpk wfhv fqfkhwb srgrbxq qgs hbkttrkf mslmvwn nsgptg kdwbxjd bdj vph tsxtk qkq zhxkhb rmjqzcb mfndgn wqss hlcn xkkc ntsg rlzr rwvcmpxq rppkgkt hzfbz zxlxs qxz nwl bgzjldt pdznwv jgbqxf tvbpbns hmfdjb xcprbcsw sdn wvfp cxwsf lzg cqmdvd nmmvw lzlchc crs qtmj vtfpfhbf rtsmrtrs jctxt rjrcnd xlpcwb cdhtpzm dzlkthz sjtxszxc"
$textoB = "fwkp cxlzh pbzkzz vgpkhp gwpw zggswp xnwm dhxhxs rjgdpwg zfwbqf lvxk rtrxmn ljz flmjks ssgcff wkgsjfjg rfz lfxn vwl jtf zcgtn qfqk crtfv hdlhx bxts cqqwf xnz wjrbkvx cxxwbj ktrpdnvg stlwv mkkkg gfrttnc rwmtlcgx tmlxw grrfzjdc gzsjbl ljgh fmq jgslrqgl crnt dzztc dhmlmx pjwhmzrb nsttfp wbqnsz kgpv bpglstfp xtlsgrnz qntwgqf vxhmj wjmgvjw bcxkx rtxhtwjk mmxvb mnzz bgp tcvhvk swqgwn tpt csm gzrprs xsd svsqdjn dtfbdxs rxc ctgs hcsdlxs bkqj rkz hpcf npw kbkk pdg zxcph qcjkmpm xbhjz dcr gdtkvl vstwzmz lmctnhvw pzj gkgxqcg jlrcjfxt vbvw xccx gcl lmnbh zncnwz jbqqt sff grdfmq ppdl wvfr rzd xvv mzgkk cqtkm chszh grvjwcgn wtdkw xkn xnvqkp zwxs ljnjgcvj rdbchr vxrrc hfwsz nqt wsmmdk vxzwvrzq rvtnzpmv pfpq pwxrw hzdhcz rvts wmnxmh gjr mvrxpz bzsbfn hsr llnxhl rdqzhbxn prczfgdv csdsf qzzmqgp wzhdj sdnts mkrgqr xvvjf jgs hrdbrj pxszszp mjjzb pxlcqp bmrjjs kstmxqm nltp vfbkpnl ccgrxc xlhdd xgsm khkttd jlhzkkc lfwhmqp pxdqjxsh bjmlgnfh kfl zjvmq wqtb fwx rwtznp gjpw nvmx wfx sntbbjg nbq rkpjgx pcml vvh khkfqx hmlccvl stbblb czt pql gsnmvrvt fdrxzkw gzb dfw srhpgsjg hfxjfqb vjwdmdtv wffb kwqxp sxlf qzfjc hss rzzcbvg zrvmhqvp lnmx wfbt jvjhm xmmwr hwb grz mzltffc mnwx zhckw dhxpf dkgvm vsl pcxhlqmv vpwdstmp fxjtrrw vvqv dgrscjmt ffkf qnkqn rppnvdd cvtrbq xrmn ktgb svj kkwqln lhrhkb qbjhjmx xvxcbbsc wvnt znxd dpl jkxb tlwc smrsmwvx ltsjd hvtrwhf lrf wwmbjbl xwwk bmqnl xxnjnzd cwvhx rxggdmcp mrqhjp lkmqjg chqnztk lpvjtl dmcb xlfvx zpgtdfkf ptbtgdj dsbl sghdnv gszq dgq fndf cjcjh rldsf fwjrrrxl rxcs tnmshg psfjs kfft kqxtnt hgf mxkkl lldwtfqr hzbnb flj htqlrvzm lcr rsmfxgm fmncl hlmjr qshfhtl bcvmdnbr qvvvd sqwsvzl ftscmjsf mwkddmwn ffjm hslpw mlmkj vlbkp tgfg xsqms bvbln sdcrstgl ljw bzxpt hlb zhkzr bfmhlcd gjbtkb msmjpx mxwp dlrzctzm hclr vgsk hgxfxcmg bkh jrqzh wlrcgxxm kqtpcfd rtxzvqf llqhm vppvmc tmxsgnsj kqrnx tsdlcxnx chcnzfg dnf vxjd xdlxdcjz fvjndb tqsfmdh cggdz sjlkqxwf tczrzmn pmhcxqtv qrlpsc jwfdtxcp wfbnwrk fjt njtzt hwzvpvx fqdpsv wjg qvgxfmmk sldn nmvplk smnbmsfm cbvcsjj npghjddw bxbhjfjx ccpfdqx kcrccmfr nglzt sjdllsz dkk dpmqvj wkd kgpjvg ckmmkc ptzk ntpw kzpgqlrk nrlxb pmbfvnhw cvhvr cvqmtj gmtpprwm lwvddwfk qbqx gdn bmrrwdk lnglzfk qmdsccfz ddbxbpj jrjrlknp wgvh tcd cbhvgp drpz bcl crh nsbcqv gwdr lpnxgzwd shnd rffqg krhxcxql vmw kqzf pxkclht lgbbddd hvqdmrjr thgvzsmq knsw vcfnbm vnwb mbrkbt xfjl dclrh sbdvkg xxz pmjzlx zshzfslz dqb qgg njxtd cljtsl cfchlpl szfpnsj cpsbqpcx drmjm hfzvbgx lfndmtx sxb fpmjv hhxpx jjtsxfwd tstlf ptxvvtk lkrlrwcs jfpsqx dth zvcqvgv gxjthhc wjrptcf smck bjtwkl sbxtbdp qnkm cmzq wrwkkkq bpmcd gpzvv xzlkln jrp wpt smqpzr wtdk bwvs jxg cst wrnk tdpxq xxdbdzcc kfswx grpjch svjnnh ncdvrvtn dgqg bmnjcp lhx bgj whrrj xfgsvgt vpmpnb pnlqpzd xvhrtp wwwcvgw gcb pmkrf rfzthjpn qwlnssn vdm hhhk vzhznghb tzhw dtbb wzkdhrpg mbt kgkpxz bdnjn gxpwmvtq rkhq rtwtcww wzvq xmr jjpdft mdq gmxnzt dgcsmlgb qtwmqgdb dlw mnq jmcgqqf mcjhb nqmtq ptr gbzcvmrw mdkgtq xtjxzwf zqtfjzdt dxw zvmsd rfsppg tlswss lfdbcd fwwkw mqkhvwq sqksrz mzbx vhnpcqb hdh vzpmq hqlfvjdj kprhfmd vnwmvdt bxjwdjv hnc mnbkngg bplcm vhxct vppptmg jplqsq zvxdgjnh lkxwwg zzrtjnn tvjlg lshpnb csnl fbng xqcd cff hqzn mbklxsbz sgjts pkbdgds khsxwrkz jqwklmch hgdx kwk qqb kzgmlxw nmpb vmpsqkh hrc hrlkpd flqrslr sxctxfkh dzh dbtnhf mtfxggk knww zsjpf fdgcmfhl zhrb jxqhtksl dswwbkgk tcdqwh wbwsgqs rfcmv rwfj lts dnwzzw tjpvsr cbvbtzsp mnmhnkpd mksxqjdh bznx mfcldzk rsqdpwg hpqlbqm qntkf xxgjw tpdxpj thll sqsgbjlc pmjbrnf glnlcs rxfbkc lsgwhgv vqkjwksd lqbbxk sddzcmjk mrbdhf qdpj dttgxb hjz mxblmt ntsdmc vmbnnmbs vfz qwtj jtllmwj shpbpcf lrglxfd ttlphm hpsll gsqnr gpsq vfbqhjdx szhxfxlk hmbxpwt ljpnhnq hbsv dzlwb gbnxh pjr nbrldqs cpd cxmjtx hgvvzl dplr kwb snfs sntt vkkjhcvw bmqtjhqz lwqfsfg gthdm phh drfwn pmcp rhx jwzzwcg xzzmrmz vzmfzcl nzs sdvtdxnl hxlktxf rqc vjmc fhpvpbq vmlgqgpp bfkzzkjw qrz mfmxdpwq rhqgvrx wmv thtgt mffwd kjll spc bbd mdjnthsg hzk pqlkbpz"

# Criando Array de palavras
$wordsA = $textoA.Split()
$wordsB = $textoB.Split()

# Definindo letras de foo
$foo = "v","k","b","p","s"
# Ordem do alfabeto googlon e alfabetica
$global:googlonOrder = "dcxkjsmvrlgftwpqznbh"
$global:alphaOrder   = "abcdefghijklmnopqrst"

## Pergunta 1
$prepA = $wordsA | where{$_.length -eq 5 -and $_ -notmatch "w"-and $foo -notcontains $_.substring(4)}
$prepB = $wordsB | where{$_.length -eq 5 -and $_ -notmatch "w"-and $foo -notcontains $_.substring(4)}

Write-Host
Write-Host "PERGUNTA 1"
Write-Host ----------------------------------------------------
Write-Host "Existem $($prepA.Count) preposições no Texto A."
Write-Host "Existem $($prepB.Count) preposições no Texto B."

Resposta: Existem preposições no Texto B.

Um outro fato interessante descoberto pelos linguistas é que, no Googlon, os verbos sempre são palavras de 6 ou mais letras que terminam numa letra tipo foo. Além disso, se um verbo começa com uma letra tipo foo, o verbo está em primeira pessoa.

Assim, lendo o Texto A, é possível identificar 72 verbos no texto, dos quais 16 estão em primeira pessoa.

Já no Texto B, quantos são os verbos?

## Pergunta 2
$verbosA = $wordsA | where{$_.length -ge 6 -and $foo -match $_.substring($_.length-1)}
$verbosB = $wordsB | where{$_.length -ge 6 -and $foo -match $_.substring($_.length-1)}

Write-Host
Write-Host "PERGUNTA 2"
Write-Host ----------------------------------------------------
Write-Host "Há $($verbosA.Count) verbos no Texto A."
Write-Host "Há $($verbosB.Count) verbos no Texto B."

Resposta: verbos no Texto B.

E quantos verbos do Texto B estão em primeira pessoa?

## Pergunta 3
$prPessoaA = $verbosA | where{$foo -match $_[0]}
$prPessoaB = $verbosB | where{$foo -match $_[0]}
Write-Host "PERGUNTA 3"
Write-Host ----------------------------------------------------
Write-Host "Há $($prPessoaA.Count) verbos em primeira pessoa no Texto A."
Write-Host "Há $($prPessoaB.Count) verbos em primeira pessoa no Texto B."

Resposta: verbos em primeira pessoa no Texto B.

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, é: dcxkjsmvrlgftwpqznbh. Assim, ao fazer essas listas, o professor deve respeitar a ordem alfabética Googlon.

O professor preparou a lista de vocabulário para o Texto A:

Lista de vocabulário do Texto A


Como seria a lista de vocabulário do Texto B?

## Pergunta 4
function WordToAlpha($word){
    for ($i=0; $i -lt $word.length; $i++){
            $index = $googlonOrder.LastIndexOf($word[$i])
            $newword += $alphaOrder[$index]
    }
    return $newword  
}

function WordToGooglon($word){
    for ($i=0; $i -lt $word.length; $i++){
            $index = $alphaOrder.LastIndexOf($word[$i])
            $newword += $googlonOrder[$index]
    }
    return $newword  
}

# Convetendo de ordem Googlon para Alfabetica e Ordenando
$wordsAlphaA = $wordsA | select -uniq | foreach{ WordToAlpha $_ } | sort-object
$wordsAlphaB = $wordsB | select -uniq | foreach{ WordToAlpha $_ } | sort-object
# Convetendo de ordem Alfabetica para Googlon
$wordsGooglonA = $wordsAlphaA | foreach{ WordToGooglon $_ }
$wordsGooglonB = $wordsAlphaB | foreach{ WordToGooglon $_ }


Write-Host
Write-Host "PERGUNTA 4"
Write-Host ----------------------------------------------------
Write-Host Vocabulario do Texto A:
[system.string]::Join(" ",$wordsGooglonA)
Write-Host ----------------------------------------------------
Write-Host Vocabulario do Texto B:
[system.string]::Join(" ",$wordsGooglonB)
Write-Host ----------------------------------------------------

Lista de vocabulário do Texto B

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 wsnmx tem o valor numérico de 374913.

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 875106
  • é divisível por 4
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 117 números bonitos distintos.

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

## Pergunta 5
Function wordToGNumber($word) {
    for ($i=($word.length-1); $i -ge 0; $i--){
            $index = $googlonOrder.LastIndexOf($word[$i])
            $number += $index * ([math]::pow(20,$i))
    }
    return $number  
}

$prettyNumersA = $wordsA | foreach{ wordToGNumber $_ } | where{$_ -ge 875106 -and ($_%4) -eq 0}
$prettyNumersB = $wordsB | foreach{ wordToGNumber $_ } | where{$_ -ge 875106 -and ($_%4) -eq 0}

Write-Host
Write-Host "PERGUNTA 5"
Write-Host ----------------------------------------------------
Write-Host "Há $($prettyNumersA.Count) numeros bonitos no Texto A."
Write-Host "Há $($prettyNumersB.Count) numeros bonitos no Texto B."

Resposta: No Texto B, há números bonitos distintos (atenção!).

O artigo ficou bem extenso, por isso, meus cumprimentos aos nerds valentes que leram até o final. Sei que a maior parte das soluções para esta provinha foi desenvolvida utilizando outras linguagens e a idéia era compartilhar uma solução diferente, mas tão eficiente quanto. ;-)

Comentários

Postagens mais visitadas deste blog

Consultando usuario atualmente logado

BIG-IP Cookie decode