Petits défis de programmation
Plusieurs défis ou sites proposant des quiz de programmation.
- La rubrique Guru of the Week, par Herb
Sutter, pour des défis de programmation à saveur pédagogique
en C++ :
http://herbsutter.com/gotw/
- Défi connexe à celui des Quine, celui d'écrire des
programmes multilinguaux, donc légaux dans plusieurs langages de programmation
distincts : http://ptspts.blogspot.com/2010/10/multilingual-programs-in-haskell-prolog.html
- Écrire un programme qui produit des « mots »
à l'aide de symboles hexadécimaux : http://nedbatchelder.com/text/hexwords.html
- Des kata de code, proposés par Dave
Thomas en 2007 : http://codekata.pragprog.com/2007/01/code_kata_backg.html
- Un petit défi de programmation proposé comme question d'entrevue
pour engager des programmeuses et des programmeurs, expliqué par Daniel
Tunkelang en 2011 : http://thenoisychannel.com/2011/08/08/retiring-a-great-interview-problem/
- L'énigme d'Einstein : http://en.wikipedia.org/wiki/Zebra_Puzzle
- Pour les gens plus visuels, réaliser le k-means Clustering,
qui prend une image, réorganise les points de couleurs qui y apparaissent
et génère une palette telle que celle qu'utiliseraient des artistes.
Description proposée en 2011 : http://0xfe.blogspot.com/2011/12/k-means-clustering-and-art.html
- Quelques quiz de programmation en langage C,
colligés par Steven Kobes : http://stevenkobes.com/ctest.html
- Le rôle des défis dans un processus d'engagement, et comment
concevoir ces défis, par Michael G. Schwem en
2012 : http://blogs.perl.org/users/michael_g_schwern/2012/02/a-real-developer-challenge.html
- Construire un processeur avec une seule instruction, un texte d'Alexander
Demin en 2012 : http://pragprog.com/magazines/2012-03/the-nor-machine
- S'échapper de /dev/null? http://www.spotify.com/se/devnull/
- Pourquoi est-il parfois sage de réinventer la roue? L'opinion d'Anthony
Ferrara en 2012 : http://blog.ircmaxell.com/2012/08/reinvent-wheel.html
- Le AI Sandbox, un concours de développement en intelligence
artificielle (merci à Alex Boulanger pour ce lien) : http://aisandbox.com/
- Quelques défis pour stimuler le cerveau :
http://codecondo.com/coding-challenges/
- Série de problèmes et exercices de programmation, colligés par Adrian Neumann :
http://adriann.github.io/programming_problems.html
- Petits quiz de programmation sur des sujets divers, proposés par Gurmeet Manku :
http://gurmeet.net/puzzles/
- Le g()('al'), un petit concours pour générer
le texte goal avec un nombre de 'o' correspondant
au nombre de parenthèses utilisées dans l'appel (p. ex. :
g()()()()('al') doit retourner "goooal") :
https://github.com/eatnumber1/goal
- Un petit défi de détection de code
C++
suspect, assemblé par l'équipe derrière PVS Studio, un logiciel d'analyse
statique : http://q.viva64.com/
- Cinq puzzles que toute programmeuse ou tout programmeur devrait pouvoir
résoudre en moins d'une heure, selon Santiago L. Valdarrama en 2015 :
https://blog.svpino.com/2015/05/07/five-programming-problems-every-software-engineer-should-be-able-to-solve-in-less-than-1-hour
- En 2017,
Jonathan Boccara propose un défi en
C++ pour le
jour de π :
http://www.fluentcpp.com/2017/03/02/the-pi-day-challenge-for-expressive-code-in-c/
- Une série de défis de programmation à saveur numérique (merci à Maxime
Barakatt pour le lien) :
https://projecteuler.net/archives
- Série de défis mise à jour sur une base annuelle, juste pour le temps des
Fêtes : https://adventofcode.com/
- Un petit jeu de type « Échappe-toi » où programmer est un outil
de survie :
https://codingmystery.com/hub
Quelques problèmes plus connus
Certains problèmes sont plus connus que d'autres, pour diverses raisons.
L'anniversaire de Cheryl
Le problème « l'anniversaire de Cheryl » :
L'Expression Problem
Un énoncé bien connu de ce problème (qui remonte au moins
aux années '70), par
Mads Torgensen :
« Can your application be structured in such
a way that both the data model and the set of virtual operations over it can be extended without the need to
modify existing code, without the need for code repetition and without runtime type errors? »
Ce qu'on nomme l'Expression Problem porte sur la difficulté
d'assurer dans un système comme celui de la représentation des expressions
mathématiques à la fois des types et des opérations. Dans un
langage OO
« classique », l'ajout de types est habituellement simple mais l'ajout
d'opérations est complexe, alors que dans un
langage fonctionnel, l'ajout
d'opérations tend à être simple mais l'ajout de types peut être laborieux.
Plusieurs solutions proposées à ce problème au fil des ans reposent sur une
variante ou l'autre du schéma de conception
Visiteur.
FizzBuzz
Le FizzBuzz, où il faut écrire un programme qui affichera les
entiers de à inclusivement, mais où les multiples de trois qui ne sont
pas aussi multiples de cinq seront remplacés par Fizz, les multiples de
cinq qui ne sont pas des multiples de trois seront remplacés par Buzz,
et les multiples de trois qui sont aussi des multiples de cinq seront
remplacés par FizzBuzz.
- Réflexions de Jeff Atwood
sur ce petit défi, un texte de 2007 :
https://blog.codinghorror.com/why-cant-programmers-program/
- En 2007, Adam Tornhill s'amuse à écrire un
métaprogramme
C++
générant la sortie de FizzBuzz à l'aide de messages d'erreur à la
compilation :
https://www.adamtornhill.com/articles/fizzbuzz.htm
- Une implémentation en CSS :
http://codepen.io/anon/pen/XbdrxO
- En 2016, Joel Grus relate une histoire
d'écriture de FizzBuzz... en Tensorflow, un outil d'apprentissage
automatique avec
Python :
https://joelgrus.com/2016/05/23/fizz-buzz-in-tensorflow/
- Implémenter FizzBuzz en langage
J, par
Wayne Chang en 2017 :
https://wycd.net/posts/2017-01-19-fizz-buzz-and-triangles-in-j.html
- Dans ce texte de 2018, Dale L. Jefferson parle
d'une implémentation un peu ampoulée de FizzBuzz en
JavaScript :
https://www.dalejefferson.com/articles/2018-03-15-convoluted-fizzbuzz/
- Diverses implémentations de FizzBuzz à l'aide de dix langages de
programmation, par Olivia Ifrim en 2018 :
http://iolivia.me/posts/fizzbuzz-in-10-languages/
- Profiter de
std::optional<T> pour
implémenter un FizzBuzz élégant, par Dirk Reum en
2019 :
https://www.fluentcpp.com/2019/08/20/a-concise-implementation-of-fizzbuzz-with-stdoptional/
- En 2019, Arne Mertz s'amuse avec un
FizzBuzz
constexpr :
https://arne-mertz.de/2019/12/constexpr-fizzbuzz/
- Texte de 2021 par Gerald Benischke qui propose un
FizzBuzz sans alternatives
(sans if) :
https://beny23.github.io/posts/fizzbuzz_without_ifs/
- Résoudre FizzBuzz à l'aide d'instructions
SIMD (étrange
idée, mais intéressante analyse), par Gunnar Morling en
2021 :
https://www.morling.dev/blog/fizzbuzz-simd-style/
- En 2022, FizzBuzz a
15 ans (un FizzBuzz!), et Tom Wright discute de l'histoire de
ce petit défi :
https://blog.tdwright.co.uk/2022/07/14/fizzbuzz-is-fizzbuzz-years-old-and-still-a-powerful-tool/
- Histoire d'un FizzBuzz dans une entrevue d'embauche :
https://kranga.notion.site/The-fizzbuzz-that-did-not-get-me-the-job-180e7c22ef3b80c3a386f7f8de720ac7
Un Quine
(du philosophe et mathématicien W.
Quine) est un programme qui produit ses propres sources en sortie.
Rédiger un Quine est un défi amusant et stimulant.