Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Nazgulled

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

Mensagens Recomendadas

Nazgulled    8
Nazgulled

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
[d-_-b]    0
[d-_-b]

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
[d-_-b]    0
[d-_-b]

viva amigo Rui Carlos.

Pois... acredito que sim mas isso ja é mta areia po meu camião :confused: ja agora.. o k significa isso de pattern matching assim resumidamente.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    309
Rui Carlos

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'.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Nazgulled    8
Nazgulled

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..

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    309
Rui Carlos

@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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Nazgulled    8
Nazgulled

É + 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!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
[d-_-b]    0
[d-_-b]

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. :thumbsup: 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.  :hmm:

Aquele abraço, Pires

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
good_in_bed    0
good_in_bed

Pois...Bem me parecia...por isso é que falei...É muito facil fazeres pattern matching sem o saberes...Já o map...tem o seu kê...Bom trabalho!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade