{"id":13129,"date":"2021-10-05T13:22:46","date_gmt":"2021-10-05T11:22:46","guid":{"rendered":"https:\/\/blog.vincentcharles.ovh\/?p=13129"},"modified":"2021-10-05T13:22:46","modified_gmt":"2021-10-05T11:22:46","slug":"coding-challenges","status":"publish","type":"post","link":"https:\/\/blog.vincentcharles.ovh\/index.php\/2021\/10\/05\/coding-challenges\/","title":{"rendered":"Coding challenges"},"content":{"rendered":"<p>Nous connaissons de nombreux jeux de programmation (disponible sur Steam ou autres plateformes) comme Shenzhen I\/O, TIS-100, Comet64, Exapunks, MHRD, Human Ressource Machine qui utilisent des langages souvent factices ou simplifi\u00e9s mais il existe \u00e9galement des plateformes qui offrent des jeux, aventures et tournois bas\u00e9s sur de vrais langages dans lesquels vous affrontez de vrais programmeurs (du niveau d\u00e9butant \u00e0 (tr\u00e8s) exp\u00e9riment\u00e9s).<\/p>\n<p><!--more--><\/p>\n<p>Avant toute chose, nous ne d\u00e9nigrons pas les jeux comme TIS-100 ou Comet 64. Les langages qu&rsquo;ils utilisent, bien qu&rsquo;all\u00e9g\u00e9s, sont parfaits pour comprendre la dynamique de la programmation et les d\u00e9fis demand\u00e9s sont parfois tr\u00e8s complexes. On pourrait m\u00eame dire que plus un langage est \u00ab\u00a0basic\u00a0\u00bb (comprendre limit\u00e9 en terme d&rsquo;instructions disponibles), plus il est difficile \u00e0 maitriser. Cependant les attentes ne sont pas les m\u00eames&#8230;<\/p>\n<p>Voici ma petite s\u00e9lection de site que j&rsquo;ai trouv\u00e9 et sur lesquels vous allez pouvoir passer de nombreuses heures \u00e0 apprendre\/comprendre\/programmer\/d\u00e9velopper. L&rsquo;ordre n&rsquo;a pas d&rsquo;importance. Personnellement, j&rsquo;ai ador\u00e9 le premier et je continue \u00e0 avancer sur le second mais il ne s&rsquo;agit pas d&rsquo;un classement par difficult\u00e9 ou int\u00e9r\u00eat.<\/p>\n<h2>1# Robocode<\/h2>\n<p style=\"text-align: center;\"><a href=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/1Robocode.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-13135\" src=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/1Robocode-700x149.jpg\" alt=\"\" width=\"700\" height=\"149\" srcset=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/1Robocode-700x149.jpg 700w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/1Robocode-300x64.jpg 300w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/1Robocode-768x163.jpg 768w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/1Robocode.jpg 1334w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a>Site : <a href=\"https:\/\/robocode.sourceforge.io\/\">https:\/\/robocode.sourceforge.io\/<\/a><\/p>\n<p>Surement l&rsquo;un des plus connus dans le genre. Personnellement j&rsquo;adore. Il s&rsquo;agit de programmer un petit robot afin qu&rsquo;il affronte de fa\u00e7on autonome d&rsquo;autres robots similaires dans une ar\u00e8ne ferm\u00e9e. L&rsquo;objectif est d&rsquo;\u00eatre le dernier survivant. Ce programme est utilis\u00e9 par de nombreuses universit\u00e9s pour encourager le d\u00e9veloppement et l&rsquo;optimisation de code et propose un aspect ludique \u00e0 la programmation. Que le meilleur code gagne.<\/p>\n<p>Dans sa version officielle et originale, la programmation du Robot se fait en Java ou en .NET. Le projet existe depuis 2001 et propose chaque ann\u00e9e de nouvelles mises \u00e0 jour notamment de la correction de bugs et la mise \u00e0 jour des versions de Java.<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-markup\">Langages : JAVA et .NET<\/code><\/pre><\/figure>\n<p>Le projet connait de nombreux fork qui permettent de coder \u00e9galement dans les langages suivants : C++\/C#\/Rust<\/p>\n<h2>2# Terminal (C1Games)<\/h2>\n<p style=\"text-align: center;\"><a href=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/2Terminal.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-13136\" src=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/2Terminal-700x163.jpg\" alt=\"\" width=\"700\" height=\"163\" srcset=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/2Terminal-700x163.jpg 700w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/2Terminal-300x70.jpg 300w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/2Terminal-768x179.jpg 768w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/2Terminal.jpg 1340w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a>Site : <a href=\"https:\/\/terminal.c1games.com\/home\">https:\/\/terminal.c1games.com\/home<\/a><\/p>\n<p>Mon petit coup de c\u0153ur. A l&rsquo;heure actuelle, je ne joue plus qu&rsquo;\u00e0 celui l\u00e0 ! L&rsquo;objectif ressemble \u00e0 Robocode. Il s&rsquo;agit d&rsquo;un jeu de type Tower-Defense. Dans une ar\u00e8ne, l&rsquo;objectif est d&rsquo;attaquer et se d\u00e9fendre contre le code d&rsquo;un autre joueur. Contrairement \u00e0 Robocode dans lequel on joue contre l&rsquo;IA, ici ce sont les codes d&rsquo;autres joueurs. Il existe un syst\u00e8me complet de tournois avec des cashprizes importants chaque saison.<\/p>\n<p>Vous pouvez dans un premier temps appr\u00e9hender le fonctionnement en jouant \u00e0 la souris puis concevoir votre propre code. Ensuite le confronter \u00e0 des programmes al\u00e9atoires ou aux codes des programmeurs les plus r\u00e9compens\u00e9s de la plateforme. Viennent ensuite les tournois o\u00f9 vous devrez survivre le plus longtemps possible avec \u00ab\u00a0votre\u00a0\u00bb programme.<\/p>\n<p>Les d\u00e9veloppeurs proposent trois langages : Java, Python et Rust. Sans surprise, le Python occupe la premi\u00e8re place devant le Java et le Rust.<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-markup\">Langages : Python, Java, Rust<\/code><\/pre><\/figure>\n<h2>3# Halite<\/h2>\n<p style=\"text-align: center;\"><a href=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/3Halite.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-13137\" src=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/3Halite-700x146.jpg\" alt=\"\" width=\"700\" height=\"146\" srcset=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/3Halite-700x146.jpg 700w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/3Halite-300x63.jpg 300w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/3Halite-768x160.jpg 768w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/3Halite.jpg 1219w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a>Site :\u00a0<a href=\"https:\/\/halite.io\/\">https:\/\/halite.io\/<\/a><\/p>\n<p>Halite, c&rsquo;est globalement la m\u00eame chose que Terminal mais avec plus de joueurs. Il y a 4 versions : Halite I, II, III et IV. Chaque version apporte de nouveaux langages et un mod\u00e8le de \u00ab\u00a0robots\u00a0\u00bb de plus en plus complexe. Il est possible de jouer \u00e0 toutes les versions pour se familiariser avec l&rsquo;objectif de Halite.<\/p>\n<p>Je n&rsquo;ai encore jamais essay\u00e9, j&rsquo;y r\u00e9fl\u00e9chi ; pourquoi par en C++.<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-markup\">Langages : Python, Java, C++<\/code><\/pre><\/figure>\n<h2>4# Codin Game<\/h2>\n<p style=\"text-align: center;\"><a href=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/4CodinGames.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-13138\" src=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/4CodinGames-700x162.jpg\" alt=\"\" width=\"700\" height=\"162\" srcset=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/4CodinGames-700x162.jpg 700w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/4CodinGames-300x69.jpg 300w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/4CodinGames-768x178.jpg 768w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/4CodinGames.jpg 1374w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a>Site : <a href=\"https:\/\/www.codingame.com\">https:\/\/www.codingame.com<\/a><\/p>\n<p>Tout un tas de jeux et aventures \u00e0 coder. Sur ce site, les premiers niveaux seront gratuits puis cela devient rapidement payant si l&rsquo;on veut s&rsquo;amuser un peu. Il y a une grande vari\u00e9t\u00e9 d&rsquo;objectif, chaque type de \u00ab\u00a0jeu\u00a0\u00bb codable dans plusieurs dans langages situ\u00e9s ci-dessous. C&rsquo;est une mine d&rsquo;or si vous adorez coder pour le plaisir. De challenges \u00e0 r\u00e9aliser en quelques minutes contre la montre, d&rsquo;autres vous emportent pour des nuits blanches enti\u00e8res et n\u00e9cessite de travailler en coop\u00e9ration avec un ou plusieurs \u00e9quipiers. Le potentiel est fou. A essayer de toute urgence&#8230;<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-markup\">Langages : Bash, C, C++, C#; D, F#, Go, Haskell, Java, JavaScript, Kotlin, Lua, Objectif-C, Pascal, Perl, PHP, Python, Ruby, Rust, Scala, Swift, VB.NET<\/code><\/pre><\/figure>\n<h2>5# Code Wars<\/h2>\n<p style=\"text-align: center;\"><a href=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/5Codewars.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-13139\" src=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/5Codewars-700x232.jpg\" alt=\"\" width=\"700\" height=\"232\" srcset=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/5Codewars-700x232.jpg 700w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/5Codewars-300x99.jpg 300w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/5Codewars-768x254.jpg 768w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/5Codewars.jpg 1514w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a>Site : <a href=\"https:\/\/www.codewars.com\/\">https:\/\/www.codewars.com\/<\/a><\/p>\n<p>Code Wars est un peu plus classique. Globalement, le site vous propose des morceaux de code (dans l&rsquo;un de 25 langages de la plateforme) et vous propose de le debugger ou le compl\u00e9ter pour avancer dans les niveaux. C&rsquo;est \u00e0 capture the flag classique dans lequel la difficult\u00e9 augmente \u00e0 chaque nouveau niveau. Au d\u00e9part, il peut ne manquer qu&rsquo;une virgule entre deux arguments ; apr\u00e8s plusieurs heures sur le m\u00eame code, vous avez \u00e0 retrouver une 50\u00e8ne de ligne manquante au code source. Encore une fa\u00e7on de s&rsquo;amuser avec du code, du vrai code. Ci-dessous la liste des langages du site :<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-markup\">Langages : C, C++, C#; F#, Go, Haskell, Java, JavaScript, Kotlin, Lua, NASM (oui assembleur), PHP, Python, Ruby, Rust, Scala, Shell, SQL, Swift<\/code><\/pre><\/figure>\n<h2>Bonus : MicroCorruption<\/h2>\n<p style=\"text-align: center;\"><a href=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/BonusMicroCorruption.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-13140\" src=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/BonusMicroCorruption-700x210.jpg\" alt=\"\" width=\"700\" height=\"210\" srcset=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/BonusMicroCorruption-700x210.jpg 700w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/BonusMicroCorruption-300x90.jpg 300w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/BonusMicroCorruption-768x231.jpg 768w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/10\/BonusMicroCorruption.jpg 1292w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a>Site : <a href=\"https:\/\/microcorruption.com\/\">https:\/\/microcorruption.com\/<\/a><\/p>\n<p>Volontairement en derni\u00e8re position, ce CTF (Capture The Flag) est ultra technique et r\u00e9serv\u00e9 aux plus t\u00e9m\u00e9raires. Ici vous allez travailler sur un microcontr\u00f4leur de la marque Texas Instruments, mod\u00e8le MSP430. Il est bas\u00e9 sur un CPU 16 bits utilisant une architecture RISC. La programmation se fait en Assembleur. Vous devez hacker le code \u00e0 l&rsquo;aide d&rsquo;un d\u00e9bugueur, une visualisation de l&rsquo;\u00e9tat de la RAM et des registres. Le but est d&rsquo;ouvrir un cadenas niveau apr\u00e8s niveau. Objectivement, c&rsquo;est \u00e0 essayer si : 1\/ vous travaillez r\u00e9guli\u00e8rement en assembleur ou 2\/ vous avez vraiment beaucoup de temps \u00e0 perdre. L&rsquo;assembleur 16 bits n&rsquo;a plus un grand int\u00e9r\u00eat dans l&rsquo;industrie sauf peut-\u00eatre certains domaines tr\u00e8s sp\u00e9cifiques ou travailler chez un fondeur de semi-conducteurs.<\/p>\n<figure class=\"pc-legacy\"><pre><code class=\"language-markup\">Langage : Assembleur (16bits RISC)<\/code><\/pre><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Nous connaissons de nombreux jeux de programmation (disponible sur Steam ou autres plateformes) comme Shenzhen I\/O, TIS-100, Comet64, Exapunks, MHRD, Human Ressource Machine qui utilisent des langages souvent factices ou simplifi\u00e9s mais il existe \u00e9galement des plateformes qui offrent des jeux, aventures et tournois bas\u00e9s sur de vrais langages dans lesquels vous affrontez de vrais&#8230;<\/p>\n","protected":false},"author":1,"featured_media":13130,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35],"tags":[18],"class_list":["post-13129","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programmation","tag-niveau_difficile"],"_links":{"self":[{"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/posts\/13129","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/comments?post=13129"}],"version-history":[{"count":12,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/posts\/13129\/revisions"}],"predecessor-version":[{"id":13149,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/posts\/13129\/revisions\/13149"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/media\/13130"}],"wp:attachment":[{"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/media?parent=13129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/categories?post=13129"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/tags?post=13129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}