ChallengeR #7

Vous deviez donc coder une fonction nbchar qui compte le nombre de caractères (hors espaces, indentations et retours à la ligne) du corps d'une autre fonction R sachant que le gagnant serait celui pour qui nbchar(nbchar) serait le plus petit possible.

Et le gagnant de ce ChallengeR #6 est @_ColinFay qui nous propose :

nbchar <- function(f){
 sum(nchar(gsub("[[:blank:]]+", "", body(f)))[-1])
}

Ce qui donne donc :

> nbchar(nbchar)
[1] 47
>

Colin me fait remarquer, à juste titre, que je n'ai pas précisé que vous n'aviez pas le droit d'utiliser une fonction externe. Auquel cas il propose :

x <- function(f){
 sum(nchar(gsub("[[:blank:]]+", "", body(f)))[-1])
}

nbchar <- function(f){
 x(f)
}

Soit 4 caractères. Nous allons quand même retenir la première version :)

Notez aussi celle de @navarre_julien :

nbchar <- function(f) {
 sum(nchar(gsub("\\s", "", deparse(body(f)))))
}

Elle présente l'inconvénient de compter les accolades au début et à la fin du corps mais utilise une expression régulière bien plus courte (\\s). En mixant les deux, vous pouviez faire :

nbchar <- function(f) {
 sum(nchar(gsub("\\s", "", body(f)[-1])))
}

Et je ne crois pas qu'on puisse espérer faire plus court.

Challenger #7

Votre mission, si vous l’acceptez consiste à trouver une fonction month.end qui, comme son nom le suggère, renvoie le dernier jour du mois de toutes les dates passées en argument. Par exemple :

> x <- seq(as.Date("1999-01-01"), by = 22, len = 10)
> month.end(x)
 [1] "1999-01-31" "1999-01-31" "1999-02-28" "1999-03-31" "1999-03-31"
 [6] "1999-04-30" "1999-05-31" "1999-06-30" "1999-06-30" "1999-07-31"
>

Sera déclaré vainqueur celui ou celle qui produira la fonction la plus minimaliste (au sens de nbchar) sachant que (i) vous n’avez droit qu’aux packages par défaut de R et (ii) vous ne pouvez pas faire appel à des fonctions externes (poke Colin).

Postez vos réponses ci-dessous ; vous avez jusqu’à vendredi prochain. Update : votre fonction doit impérativement retourner un objet Date. Les meilleurs sont en dessous de 50 caractères !

Votre @username sur Twitter :


Coller votre code ici :


Validez pour enregistrer votre réponse.

Aucun commentaire:

Enregistrer un commentaire

Cheval de fer, acte II

La première partie est ici. Quand John Kennedy s’y était installé au tout début des années 1790, Manchester n’était encore qu’un gros bour...