Sábado, 18 de Outubro de 2008

Codebits Quizz Show VI

Pos.NomeTacadasCódigo
1.José Castro30"MATCH(.*(^|\n.*[Vã]|q|lo|[hr]n).* .+) FLAGS(g)"
2.Carlos Pires31"MATCH(.*([ãqfIV]|P.r|[rh]n|é.*u|Ro).*) FLAGS(gm) REPLACE()"
3.Bruno Martins31"MATCH(rn|o [AHR]|A.*u|P.r .*[qãIV].*) FLAGS(gm g) REPLACE(V) "
4.João Sil31.*([qIãVf]|Ro|[hr]n|P.r|A.*u).*
5.Carlos Santos34"MATCH(L .*([ãqVI]|uh|uz|Per|rn|lo|od).*) FLAGS( gm) REPLACE(ã)"
6.Diogo Ferreira35"MATCH(.*([ãfIqV]|[FAC].*[PSHCL]|Per|Ro).*) FLAGS(gm) REPLACE()"
7.André Cruz35"MATCH(.*(I|rn|lo|ã|hn|uz|V|od|q|Per).* .+) FLAGS(gm ) REPLACE()"
8.Rodrigo Fernandes37"MATCH(.*(uz|é L|rn|qu|ã|od|V|ere|uh|lo|I).*) FLAGS(g) REPLACE()"
9.Paulo Afonso42
10.Nuno Pereira42
11.José Celestino44
12.Gilberto Gonçalves44
13.Tiago Pinto49
14.Mário Gil Abrantes50
15.Pedro Gomes52
16.Mário Valente53
17.Paula Valença53
18.Fernando Silva53
19.pedro mg54
20.João Pedro Pereira58
21.João Oliveirinha60
22.Francisco Huhn63
23.Pedro Correia75
24.Bruno Oliveira79

 

* Update: Este quiz terminou! O Vencedor é o José Castro com 30 caracteres e as expressões  s/.*(^|\n.*[Vã]|q|lo|[hr]n).*//g e s/.+// .
 
Para o fim-de-semana propomos um desafio de Expressões Regulares em JavaScript.

Tendo um bloco de texto contendo os nomes de todos os participantes até à data na qualificação para o Codebits Quizz Show, é necessário obter a lista da direita. (São os nomes dos concorrentes que não responderam ao desafio IV, podem consultar nesta página em Resultado Esperado). A soma dos caracteres das expressões de Match e de Replace não pode superar os 150 caracteres. Vence a expressão regular mais curta. O factor de desempate será a ordem de chegada.

Envia o código JavaScript - ou as expressões regulares geradas nesta página - para o E-mail do Codebits, codebits@sapo.pt
 
Este desafio termina na próxima quarta-feira, dia 22 de Outubro às 19h00.

publicado por celso às 00:34

editado por joaovelhote em 24/10/2008 às 18:28
link do post | comentar
|
17 comentários:
De João Pedro Pereira a 18 de Outubro de 2008 às 19:55
37 tacadas é abusado... Eu ainda vou nas 58 e estou-me a ver às aranhas para conseguir reduzir.


De Paulo Afonso a 18 de Outubro de 2008 às 21:06
eu desisti pelas 52... :(


De Paulo Afonso a 20 de Outubro de 2008 às 14:10
Não resiti.. 47 :D


De Paula Valenca a 18 de Outubro de 2008 às 23:37
53 e a pensar se tento de uma forma mais inteligente ou continuo a fazer a olho. A de 37 usa só regexs standards entre linguagens ou usa truques do JS?


De Jose Celestino a 18 de Outubro de 2008 às 21:49
“What one fool can understand, another can.” -- Feynman


De João Pedro Pereira a 19 de Outubro de 2008 às 12:00
Acho que vou deixar assim.. Não vou tentar diminuir mais.


De Carlos Santos a 20 de Outubro de 2008 às 16:16
50 Pancadas e por aqui me fico :)


De Carlos Santos a 20 de Outubro de 2008 às 18:04
Também não resisti, depois de alguns refinamentos cheguei às 45 :p


De Paulo Afonso a 21 de Outubro de 2008 às 10:07
hehe.. 42


De Carlos Santos a 21 de Outubro de 2008 às 15:38
37, ufa!!


De João Pedro Pereira a 22 de Outubro de 2008 às 20:15
José Castro, excelente trabalho. Gostei muito da tua/sua expressão.


De acmpires a 23 de Outubro de 2008 às 00:19
dammm, por um :)
Cá vai a que eu usei para as 31 tacadas

MATCH(.*([ãqfIV]|P.r|[rh]n|é.*u|Ro).*)
FLAGS(gm)
REPLACE()


De Jose Celestino a 23 de Outubro de 2008 às 00:27
Excelente.

O pormenor do \n.*[Vã] foi grande.


De José Castro a 23 de Outubro de 2008 às 10:45
Perguntavam-me algumas pessoas sobre o \n*[Vã]

A ideia é: para algumas expressões, também é necessário apagar a linha anterior.

Vai daí, ao apagarmos a expressão 'V' podemos a apagar o que está antes, o que nos permite remover o Mário Rodrigues que está antes do Mário Valente e o Nuno Pereira que está antes da Paula Valença. No caso do 'ã', também conseguimos remover a Isa Costa (desculpa, Isa).

Um ou outro truque que também encontrei mas acabei por não utilizar:

- substituir apenas o primeiro \n, sem ser numa expressão global; isto permite-nos juntar os dois primeiros Andrés num só;

- substituir o primeiro \n por um V; depois, ao remover os V, apagamos automaticamente as duas primeiras linhas.

E vocês, por que outros truques inteligentes passaram? Que optimizações conseguiram fazer?

Da minha parte, posso dizer que a minha expressão dos 37 caracteres foi esta:

.*([ãqIV.f]|rl|Cr|[rh]n|Ro|é L|Per).*

Quando soube que alguém tinha feito 36, olhei novamente para ela e fiz isto, também com 36:

.*([ãqIVf]|rl|Cr|[rh]n|Ro|é L|Per).*

Podem-se rir à vontade :-)


De Pedro Emanuel a 23 de Outubro de 2008 às 21:38
Não consigo obter o resultado correcto com a expressão vencedora... Já tentei de várias formas mas não consigo...

Qual é o match, flags e replace?

já tou a dar em doido com isto :P

CUmpz,


De José Castro a 24 de Outubro de 2008 às 15:55
MATCH(.*(^|\n.*[Vã]|q|lo|[hr]n).*
.+)
FLAGS(g)
REPLACE()


De Pedro Emanuel a 24 de Outubro de 2008 às 18:11
Obrigado


Comentar post