Page 1 of 3

[Mini-Challenge #13] : DelVoid

Unread postPosted: 29 Sep 2014, 00:32
by Adriweb
Je viens de penser à ceci sans raison apparente (quoique, Bisam a parlé de ça quelque part récemment, donc...), mais ça me parait suffisamment challengesque... :P

Rappel : voici la fonction delVoid(...) : "Returns a list that has the contents of List1 with all empty (void) elements removed"
Avec un screenshot vous comprendrez vite : (void et _, c'est pareil)
Image

Normal mode :
Ré-implementer delVoid(...).

Hard mode :
Ré-implementer delVoid(...)... sans utiliser la fonction isVoid(...).
A vrai dire, je n'ai pas essayé - je ne sais meme pas si c'est possible, on verra bien :)

C'est un "code golf", donc le code le plus court gagne.

GL HF :D

Re: [Mini-Challenge #13] : DelVoid

Unread postPosted: 29 Sep 2014, 06:08
by esum
Voici ma proposition pour le Hard mode: 84 caractères entre le Func et le EndFunc (compris) sans compter les espaces en début de ligne et les retours à la ligne:

Code: Select all
Define delvoid2(l)=
Func
Local i,r
r:={}
For i,1,dim(l)
  If string(l[i])≠"_"
    r:=augment(r,{l[i]})
EndFor
EndFunc


EDIT: Corrigé le ≠, merci Adriweb.

Re: [Mini-Challenge #13] : DelVoid

Unread postPosted: 29 Sep 2014, 06:39
by critor
Bien :)

Voici il me semble un tout petit peu plus court:
Image

Re: [Mini-Challenge #13] : DelVoid

Unread postPosted: 29 Sep 2014, 06:44
by Adriweb
Ah bah oui, zut, j'aurais surement du interdire la comparaison avec le string, je cherchais plus troll que ca :P Mais bien trouvé :)
Bref, tant pis pour moi, on verra pour une version plus complexe plus tard.

Sinon, @esum : tu veux dire "≠" au lieu de "=" non ?
@critor : Hum, du coup, code identique a esum ? (Faut que j'aille dormir, j'arrive plus a lire :P)

Edit : avec la meme idee que vous, j'arrive a faire quelques caracteres de moins.

Re: [Mini-Challenge #13] : DelVoid

Unread postPosted: 29 Sep 2014, 09:16
by critor
Adriweb wrote:@critor : Hum, du coup, code identique a esum ? (Faut que j'aille dormir, j'arrive plus a lire :P)


esum a dû éditer entre temps, car il n'utilisait pas le string() ce matin mais un charCode().

Re: [Mini-Challenge #13] : DelVoid

Unread postPosted: 29 Sep 2014, 11:31
by Excale
Sans string (ou assimilé), certitude (ou assimilé) ni tentative de réduire la taille (ou assimilé):

Code: Select all
Define delvoid2(l)=
Func
Local i,r
r:={}
For i,1,dim(l)
  r:=ifFn(l[i]=0 or true,augment(r,{l[i]}),0,r)
EndFor
EndFunc

Re: [Mini-Challenge #13] : DelVoid

Unread postPosted: 29 Sep 2014, 16:43
by esum
Oui j'ai édité mon code rapidement quand j'ai remarqué que je pouvais économiser 4 caractères en comparant le string directement.

@Excale bien vu pour le IfFn.

Re: [Mini-Challenge #13] : DelVoid

Unread postPosted: 29 Sep 2014, 17:47
by Bisam
Le "ifFn" n'est qu'anecdotique... Ce qui est bien vu, c'est le l[i]=0 or true qui est toujours vrai, sauf lorsque l[i] est "void", auquel cas, il est considéré comme "undef" dans le "ifFn".
Celui-là, il fallait le trouver !

Re: [Mini-Challenge #13] : DelVoid

Unread postPosted: 29 Sep 2014, 18:00
by Adriweb
Voila ! c'est ce genre de trollerie que j'attendais - ou une "Excalerie", devrais-je l'appeler :P

GG :)

Re: [Mini-Challenge #13] : DelVoid

Unread postPosted: 01 Oct 2014, 20:05
by Adriweb
Excale est a 85 caracteres, Critor a 84 :P
Qui dit mieux ? ^^