Bon, vous êtes non seulement forts mais vous êtes en plus de grands malades. Votre dernière mission consistait à trouver une fonction R qui renvoie la suite de Syracuse de n'importe quel entier x
jusqu'à ce qu'elle atteigne 1. Il y a deux façons de faire ça :
En passant par une fonction récursive :
syracuse = function(x) { a <- tail(x, 1) if(a == 1) { return(x) } else { syracuse(c(x, ifelse(a%%2, a*3+1, a/2))) } }
Ou en passant par une fonction récursive anonyme :
syracuse = function(x) { a <- tail(x, 1) if(a == 1) { return(x) } else { Recall(c(x, ifelse(a%%2, a*3+1, a/2))) } }
Je dis que vous êtes des grands malades parce que, sur Twitter, vous avez assez rapidement décidé de trouver la fonction la plus condensée possible (sans parler de celui qui voulait faire ça sans if
ni else
). Du coup, je vous donne la version la plus courte, trouvée par @AlekVladNevski :
syracuse = function(x) { c(x, if(x>1) Recall(if(x%%2) x*3+1 else x/2 )) }
Bravo à @_antoineb, @_pvictorr, @After_Eight, @AlekVladNevski, @bZ1O91, @ClementinC, @dickoah, @francois_ls, @mac_picsou, @NicolasBenezet, @PierreRinder, @privefl, @StephaneOrlins et @thedudeparis.
Nous allons donc pouvoir passer à l'étape 4.
Considérez le vecteur x
suivant :
x <- 10:20 x[5:6] <- NA
Votre mission, si vous l’acceptez, consiste à coder trouver la fonction locf
(pour Last Observation Copied Forward) qui, comme son nom le suggère, remplace les NA
par la dernière observation connue :
> locf(x) [1] 10 11 12 13 13 13 16 17 18 19 20 >
Le gagnant sera celui qui proposera la fonction qui utilise le moins de caractères possibles (étant entendu que les espaces, les indentations et autres retours à la ligne ne son *pas* considérés comme des caractères).
Comment on fait quand la première valeur est un NA? Doit-on prendre en compte ce cas ?
RépondreSupprimerPardon, j'arrive un peu tard. Effectivement, c'est une faille de mon énoncé :/
SupprimerBonjour je me prénomme nadia mère de 3 enfants. Je vivais à briouze avec mon mari, quand en 2018 il décida d'aller en voyage d'affaire à Bresil , où il tomba sur le charme d'une jeune vénézuélienne et ne semblait même plus rentrer. Ces appels devenaient rares et il décrochait quelquefois seulement et après du tout plus quand je l'appelais. En février 2019, il décrocha une fois et m'interdit même de le déranger. Toutes les tentatives pour l'amener à la raison sont soldée par l'insuccès. Nos deux parents les proches amis ont essayés en vain. Par un calme après midi du 17 février 2019, alors que je parcourais les annonce d'un site d'ésotérisme, je tombais sur l'annonce d'un grand marabout du nom ZOKLI que j'essayai toute désespérée et avec peu de foi car j'avais eu a contacter 3 marabouts ici en France sans résultât. Le grand maître ZOKLI promettait un retour au ménage en au plus 7 jours . Au premier il me demande d’espérer un appel avant 72 heures de mon homme, ce qui se réalisait 48 heures après. Je l'informais du résultat et il poursuivait ses rituels.Grande fut ma surprise quand mon mari m’appela de nouveau 4 jours après pour m'annoncer son retour dans 03 jours. Je ne croyais vraiment pas, mais étonnée j'étais de le voire à l'aéroport à l'heure et au jour dits. Depuis son arrivée tout était revenu dans l'ordre. c'est après l'arrivé de mon homme que je décidai de le récompenser pour le service rendu car a vrai dire j'ai pas du tout confiance en ces retour mais cet homme m'a montré le contraire.il intervient dans les domaines suivants Retour de l'être aimé Retour d'affection en 7jours réussir vos affaires , agrandir votre entreprises et trouver de bon marché et partenaires Devenir star Gagner aux jeux de hasard Avoir la promotion au travail Envoûtements Affaire,guerrier tous sorte de cancer ; crise conjugale Dés-envoûtement Protection contre les esprits maléfices Protection contre les mauvais sorts Chance au boulot évolution de poste au boulot Chance en amour La puissance sexuelle. agrandir son pénis Abandon de la cigarette et de l'alcool voici son adresse mail : maitrezokli@hotmail.com vous pouvez l'appeler directement ou l 'Ecrire sur whatsapp au 00229 61 79 46 97
RépondreSupprimer