Jump to content

[Haskell] Mais um problema... Como fazer isto?


Recommended Posts

Posted

Eu aqui não quero ajuda com código, apenas quero ajuda a pensar como vou resolver este problema para depois tentar programar eu prórpio, se futuramente tiver uma dúvida sobre isso, voltarei a colocar aqui.

O problema é o seguinte, eu tenho um determinado texto cifrado usando a cifra de cesar. O objectivo é tentar descobrir o seu conteúdo que nos é dito que apenas são digitos escritos por extenso. É suposto fazer isto por força bruta. O texto crifrado é: "RLWRGRLVGRLVCHURQRYHRLWRTXDWURXPCHURVHWH". E eu fiz o seguinte:

*TP1> [[a | a <- decryptCesar x "RLWRGRLVGRLVCHURQRYHRLWRTXDWURXPCHURVHWH"] | x <- [1..26]]
["QKVQFQKUFQKUBGTQPQXGQKVQSWCVTQWOBGTQUGVG",
"PJUPEPJTEPJTAFSPOPWFPJUPRVBUSPVNAFSPTFUF",
"OITODOISDOISZERONOVEOITOQUATROUMZEROSETE",
"NHSNCNHRCNHRYDQNMNUDNHSNPTZSQNTLYDQNRDSD",
"MGRMBMGQBMGQXCPMLMTCMGRMOSYRPMSKXCPMQCRC",
"LFQLALFPALFPWBOLKLSBLFQLNRXQOLRJWBOLPBQB",
"KEPKZKEOZKEOVANKJKRAKEPKMQWPNKQIVANKOAPA",
"JDOJYJDNYJDNUZMJIJQZJDOJLPVOMJPHUZMJNZOZ",
"ICNIXICMXICMTYLIHIPYICNIKOUNLIOGTYLIMYNY",
"HBMHWHBLWHBLSXKHGHOXHBMHJNTMKHNFSXKHLXMX",
"GALGVGAKVGAKRWJGFGNWGALGIMSLJGMERWJGKWLW",
"FZKFUFZJUFZJQVIFEFMVFZKFHLRKIFLDQVIFJVKV",
"EYJETEYITEYIPUHEDELUEYJEGKQJHEKCPUHEIUJU",
"DXIDSDXHSDXHOTGDCDKTDXIDFJPIGDJBOTGDHTIT",
"CWHCRCWGRCWGNSFCBCJSCWHCEIOHFCIANSFCGSHS",
"BVGBQBVFQBVFMREBABIRBVGBDHNGEBHZMREBFRGR",
"AUFAPAUEPAUELQDAZAHQAUFACGMFDAGYLQDAEQFQ",
"ZTEZOZTDOZTDKPCZYZGPZTEZBFLECZFXKPCZDPEP",
"YSDYNYSCNYSCJOBYXYFOYSDYAEKDBYEWJOBYCODO",
"XRCXMXRBMXRBINAXWXENXRCXZDJCAXDVINAXBNCN",
"WQBWLWQALWQAHMZWVWDMWQBWYCIBZWCUHMZWAMBM",
"VPAVKVPZKVPZGLYVUVCLVPAVXBHAYVBTGLYVZLAL",
"UOZUJUOYJUOYFKXUTUBKUOZUWAGZXUASFKXUYKZK",
"TNYTITNXITNXEJWTSTAJTNYTVZFYWTZREJWTXJYJ",
"SMXSHSMWHSMWDIVSRSZISMXSUYEXVSYQDIVSWIXI",
"RLWRGRLVGRLVCHURQRYHRLWRTXDWURXPCHURVHWH"]

Dá para ver que o que a gente quer, é o terceiro elemento da lista. Eu só não estou a conseguir pensar em como vou fazer isto por força bruta. Se todos os digitos tivessem o mesmo numero de caracteres (quando escritos por extenso), Eu sacava esses primeirso digitos de cada uma das listas geradas pelo decryptCesar e ia comparado, mas nem todos os digitos tem o mesmo numero de caracteres escritos por extenso e eu não estou a ver como vou fazer isto...

Ideias?

Posted

Viva pessoal. Ainda sou bastante novo aki pelo forum...

tb sou de lei 1º ano e tambem tou a fazer esse trabalho que ja ta kuase pronto..

Em relação a esse exercicio, o que eu fiz foi sacar para fora da lista as strings e junta-las todas numa so. Depois disso é fácil, basta usar a função extrair que esta no enunciado fazendo com k ela procura na string palavras como: um, dois tres...... e tranforme em 1,2,3....

Mais complicado que isso é conseguir dizer depois de decifrar kual foi a chave usada :S

Aquele abraço, Pires

Posted

pattern matching é concordância de padrões.

por exemplo quando fazes:

f []=1
f (x:xs)=2

estás a usar pattern matching, pois estás a testar quando o argumento está de acordo com o padrão '[]' (list vazia) ou com o padrão 'x:xs' (um elemento concatenado com uma lista).

para saberes qual foi a chave usada não acho muito boa ideia juntar as strings todos, acho que é melhor usar um 'map'.

Posted

Pessoal, peço imenso desculpa... mas eu estava aqui a escrever um texto bastante detalhado sobre a forma como resolvi este exercício e o firefox crashou-me sem ter qualquer tipo de texto gravado e sinceramente não estou com paciência para voltar a escrever tudo o que tinha escrito (já ia num texto grande). Não vou aqui colocar o meu código por razões óbvias, estava a escrever a forma como resolvi o problema, mas isto crashou...

Muito resumidamente foi isto que fiz:

Tenho uma lista de números de 0 a 9 escritos por extenso, pega em cada um desses elementos e verifico se esta na cifra, se estiver passo a próxima posição da cifra e volto a verificar se tenho lá um numero, caso contrário sai fora. Se chegar ao fim e só encontrar-mos números, porreiro, encontramos a nossa mensagem desencriptada. E fazer isto isto para as 26 cifras possíveis da cifra de césar.

Esta foi a técnica que eu usei mais parecida com força bruta, que é isso que se pretende neste exercício. Esta não é bem a minha ideia de força bruta, mas é o mais parecido que arranjei segundo o que diz no enunciado:

Para isso, implemente uma função que faça um ataque à forçaa bruta, experimentando as chaves todas e procurando as palavras “UM”, “DOIS”, etc., no texto resultante da aplicação da funçãao de decifragem com cada chave.

@Rui Carlos

Não será um bocado complicado usar pattern matching e força bruta?

@[d-_-b]

E se nesta altura ainda não sabes o que é pattern matching... Já devias saber lol..

Posted

@Rui Carlos

Não será um bocado complicado usar pattern matching e força bruta?

numeros []=True
numeros ('u':'m':xs)=numeros xs
numeros ('d':'o':'i':'s':xs)=numeros xs
...
numeros _=False

esta função permitia-te saber se uma string era uma sequência de números.

com um 'map' aplicavas-la a todos os elementos da lista.

Posted

hum... realmente... tenho de estudar o raio do map, nunca percebi lá muito bem como funciona...

Posted

É + critico não saber o que é pattern matching do que ter conhecimentos sobre a função map. Resolvi o problema sem o uso dela, deve querer significar alguma coisa... Se o uso dela simplificar alguma coisa, óptimo, mas se eu consegui sem ela... I rest my case!

Posted

ah ja percebi amigo rui carlos! nao conhecia isso por esse nome "pattern matching" pensei k pelo nome fosse outra coisa mais dificil. hehe

knt a ti nazgulled concordo inteiramente com o good_in_bed... o jbb ja explicou a função map ao pormenor n vezes e é mt simples e pratica.. nesta altura ja devia tar bem sabidinha. 👍 lolol Quanto ao trabalho tou como tu... nao percebo bem o k kerem dizer com força bruta. eu arranjei uma maneira k resolver a tarefa mas n sei s é por força bruta.  ?

Aquele abraço, Pires

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.