Esse final de semana teve um evento da OWASP aqui em Brasília, onde foi realizado um CTF.
Uma das tarefas era detectar palíndromes maiores que 17 caracteres em uma lista com 1.6milhoes de linhas.
Resolvi o CTF e depois fiquei brincando com um amigo sobre como seria a menor linha possível para bater o desafio. Eu fiz em bash, ele em python (bem mais performático).
A menor linha que consegui em bash até agora foi:
while read i;do ((${#i}>17))&&[ $i == `rev<<<$i` ]&&echo $((++d));done<a
onde a é o nome do arquivo.
Além de estar perdendo pra linha dele de python em tamanho [ f=open("a");len(filter(lambda l:len(l)>18and l[:-1]==l[:-1][::-1],f)) ], tô perdendo mto em performance.
Testei um outro approach que foi:
awk 'length>17' a|tee b c;fgrep -cxf b <(rev c)
mas ele dá a quantidade errada pq compara o arquivo todo e não linha por linha, e isso trás repetidos.
Ideias?
--
[]'s
Alfredo Tristão Casanova .͘.
Linux User #228230
tel: +55 61 9655 9619