Bonjour à tous !
Suite à une discussion sur l'irc python, quelqu'un a lancé le défi de faire un code en C++0x qui soit plus court en ligne et en nombre de caractère que le code python correspondant :
Selon lui il existe une version en C++0x qui soit plus courtes que ce code. Cependant, moi-même je n'arrive pas à faire mieux que ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 numlist = [(1000,'M'), (900,'CM'), (500,'D'), (400,'CD'), (100,'C'), (90,'XC'), (50,'L'),(40,'XL'), (10,'X'), (9,'IX'), (5,'V'), (4,'IV'), (1,'I')] def arabe(n): res = "" for k, v in numlist: while n >= k: n -= k res += v return res
Quelqu'un arriverait à faire un code plus concis en C++0x? J'ai pas trouvé mieux mais il semblerait qu'il existe plus court.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include <iostream> #include <vector> #include <utility> using namespace std; const vector< pair<int, string> > numlist = {pair<int, string>(1000,"M"), pair<int, string>(900,"CM"), pair<int, string>(500,"D"), pair<int, string>(400,"CD"), pair<int, string>(100,"C"), pair<int, string>(90,"XC"), pair<int, string>(50,"L"), pair<int, string>(40,"XL"), pair<int, string>(10,"X"), pair<int, string>(9,"IX"), pair<int, string>(5,"V"), pair<int, string>(4,"IV"), pair<int, string>(1,"I")}; string arabToRoman(int n) { string result; for(size_t i(0); i < numlist.size(); ++i) { while(n >= numlist[i].first) { n -= numlist[i].first; result += numlist[i].second; } } return result; } int main() { for(int i(1); i < 4000; ++i) cout << arabToRoman(i) << '\n'; return 0; }
Merci de votre aide !
Partager