From 003d8663d0b14741dd36eae8161177d2c4a984cd Mon Sep 17 00:00:00 2001 From: adjoly Date: Sun, 1 Jun 2025 21:25:47 +0200 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=F0=9F=8F=97=EF=B8=8F=E3=80=8D=20wip:?= =?UTF-8?q?=20started=20ex00?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + ex00/BitcoinExchange.cpp | 179 +++++ ex00/BitcoinExchange.hpp | 101 +++ ex00/Makefile | 60 ++ ex00/btc | Bin 0 -> 55256 bytes ex00/data.csv | 1613 ++++++++++++++++++++++++++++++++++++++ ex00/input.txt | 10 + ex00/main.cpp | 29 + flake.nix | 10 +- 9 files changed, 2000 insertions(+), 4 deletions(-) create mode 100644 ex00/BitcoinExchange.cpp create mode 100644 ex00/BitcoinExchange.hpp create mode 100755 ex00/btc create mode 100644 ex00/data.csv create mode 100644 ex00/input.txt create mode 100644 ex00/main.cpp diff --git a/.gitignore b/.gitignore index 96e6889..43327ef 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ obj/ compile_commands.json .cache *.d + +btc diff --git a/ex00/BitcoinExchange.cpp b/ex00/BitcoinExchange.cpp new file mode 100644 index 0000000..5c07c3a --- /dev/null +++ b/ex00/BitcoinExchange.cpp @@ -0,0 +1,179 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* BitcoinExchange.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/05/21 10:39:45 by adjoly #+# #+# */ +/* Updated: 2025/05/30 13:29:18 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const uint32_t Date::_d_in_m[12] = {31, 29, 31, 30, 31, 30, + 31, 31, 30, 31, 30, 31}; + +void _log(std::string emoji, std::string what, std::string who, + std::string str) { +#ifdef VERBOSE + if (who.empty()) + std::cout << "「" << emoji << "」" << what << ": " << str << std::endl; + else + std::cout << "「" << emoji << "」" << what << "(" << who << "): " << str + << std::endl; +#else + (void)emoji, (void)what, (void)who, (void)str; +#endif +} + +bool Date::_isMonthValid(uint16_t month) const { + if (month >= 1 && month <= 12) + return true; + return false; +} + +bool Date::_isDayValid(uint16_t day, uint16_t month) const { + if (day >= 1 && day <= _d_in_m[month - 1]) + return true; + return false; +} + +Date::Date(void) : _year(0), _month(1), _day(1) { + _log("➕", "Date", "", "default constructor called"); +} + +Date::Date(std::string date) { + _log("➕", "Date", "", "string constructor called"); + std::istringstream iss(date); + char del1, del2; + uint32_t year; + uint16_t month, day; + + if (iss >> year >> del1 >> month >> del2 >> day) { + if (del1 == '-' && del2 == '-' && iss.eof()) { + if (_isMonthValid(month) && _isDayValid(day, month)) { + _year = year; + _month = month; + _day = day; + return; + } + } + } + throw std::runtime_error("Error: bad input => " + date); +} + +Date::Date(const Date &cpy) + : _year(cpy._year), _month(cpy._month), _day(cpy._day) { + _log("➕", "Date", "", "copy constructor called"); +} + +Date::~Date(void) { _log("➖", "Date", "", "destructor called"); } + +Date &Date::operator=(const Date &cpy) { + _log("➕", "Date", "", "copy assignement constructor called"); + if (&cpy != this) { + _year = cpy._year; + _month = cpy._month; + _day = cpy._day; + } + return *this; +} + +uint32_t Date::getYear(void) const { return _year; } +uint16_t Date::getMonth(void) const { return _month; } +uint16_t Date::getDay(void) const { return _day; } + +bool Date::operator==(const Date &other) const { + return other._year == _year && other._month == _month && other._day == _day; +} + +bool Date::operator!=(const Date &other) const { + return other._year != _year || other._month != _month || other._day != _day; +} + +bool Date::operator<(const Date &other) const { + if (_year != other._year) + return _year < other._year; + if (_month != other._month) + return _month < other._month; + return _day < other._day; +} + +bool Date::operator>(const Date &other) const { + if (_year != other._year) + return _year > other._year; + if (_month != other._month) + return _month > other._month; + return _day > other._day; +} + +bool Date::operator<=(const Date &other) const { + return (*this) < other || (*this) == other; +} + +bool Date::operator>=(const Date &other) const { + return (*this) > other || (*this) == other; +} + +std::ostream &operator<<(std::ostream &os, const Date &date) { + os << date.getYear() << "-" << date.getMonth() << "-" << date.getDay(); + return os; +} + +CsvParser::CsvParser(void) : _is("data.csv") { + _log("➕", "CsvParser", "", "default constructor called"); + + if (_is.is_open() != true) + throw std::runtime_error("could not open database file"); + std::string buf; + + std::getline(_is, buf); + if (buf != "date,exchange_rate") + throw std::runtime_error("first line not good"); + + std::getline(_is, buf); + while (buf != "") { + size_t i = buf.find(","); + if (i == std::string::npos) + throw std::runtime_error("did not found ,"); + Date date(buf.substr(0, i)); + float nb; + if (buf.substr(i + 1, buf.length()) == "0") + nb = 0; + else { + nb = std::atof(buf.substr(i + 1, buf.length()).c_str()); + if (nb == 0) + throw std::runtime_error("number not well formatted - " + + buf.substr(i + 1, buf.length())); + } + _csv.insert(std::make_pair(date, nb)); + std::getline(_is, buf); + } +} + +CsvParser::CsvParser(const CsvParser &cpy) { + _log("➕", "CsvParser", "", "copy constructor called"); + if (&cpy != this) { + } +} + +CsvParser::~CsvParser(void) { _log("➖", "CsvParser", "", "destructor called"); } + +CsvParser &CsvParser::operator=(const CsvParser &cpy) { + _log("➕", "CsvParser", "", "copy assignement constructor called"); + if (&cpy != this) { + } + return *this; +} + +std::map CsvParser::getCsv(void) const { return _csv; } diff --git a/ex00/BitcoinExchange.hpp b/ex00/BitcoinExchange.hpp new file mode 100644 index 0000000..124fc4f --- /dev/null +++ b/ex00/BitcoinExchange.hpp @@ -0,0 +1,101 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* BitcoinExchange.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/05/21 10:38:49 by adjoly #+# #+# */ +/* Updated: 2025/05/30 20:31:26 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include +#include +#include +#include + +#define range(x) \ + x.begin(); \ + it != x.end(); \ + it++ + +#define auto __auto_type + +typedef unsigned int uint32_t; +typedef unsigned short uint16_t; + +struct token {}; + +void _log(std::string emoji, std::string what, std::string who, + std::string str); + +class Date { + public: + Date(void); + Date(std::string); + Date(const Date &); + ~Date(void); + + Date &operator=(const Date &); + + uint32_t getYear(void) const; + uint16_t getMonth(void) const; + uint16_t getDay(void) const; + + bool operator==(const Date &) const; + bool operator!=(const Date &) const; + + bool operator<(const Date &) const; + bool operator>(const Date &) const; + + bool operator<=(const Date &) const; + bool operator>=(const Date &) const; + + protected: + private: + static const uint32_t _d_in_m[12]; + + bool _isMonthValid(uint16_t) const; + bool _isDayValid(uint16_t, uint16_t) const; + + uint32_t _year; + uint16_t _month; + uint16_t _day; +}; + +std::ostream &operator<<(std::ostream &, const Date &); + +class CsvParser { + public: + CsvParser(void); + CsvParser(const CsvParser &); + ~CsvParser(void); + + CsvParser &operator=(const CsvParser &); + + std::map getCsv(void) const; + + protected: + private: + std::ifstream _is; + std::string _filename; + + std::map _csv; +}; + +class BitcoinExchange { + public: + BitcoinExchange(void); + BitcoinExchange(const BitcoinExchange &); + ~BitcoinExchange(void); + + BitcoinExchange &operator=(const BitcoinExchange &); + + protected: + private: + void _nextToken(void); + std::string _peekToken(void) const; +}; diff --git a/ex00/Makefile b/ex00/Makefile index e69de29..349a4b7 100644 --- a/ex00/Makefile +++ b/ex00/Makefile @@ -0,0 +1,60 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: adjoly +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2024/10/25 16:09:27 by adjoly #+# #+# # +# Updated: 2025/05/30 13:24:23 by adjoly ### ########.fr # +# # +# **************************************************************************** # + +SHELL = bash + +NAME = btc + +CC = clang++ + +OBJSDIR = obj/ + +SRCS = $(shell find . -name '*.cpp') + +OBJS = $(addprefix $(OBJSDIR), $(SRCS:.cpp=.o)) + +FLAGS = -Wall -Werror -Wextra -std=c++98 -MMD -MP + +RED = \033[0;31m +GREEN = \033[0;32m +YELLOW = \033[1;33m +PURPLE = \e[0;35m +NC = \033[0m +DELETE = \x1B[2K\r + +ifeq ($(VERBOSE),true) + FLAGS += -D VERBOSE +endif + +all: $(NAME) + +$(NAME): $(OBJS) + @$(CC) $(FLAGS) -I . $(OBJS) -o $(NAME) + @printf "$(YELLOW)「✨」($(NAME)) Program compiled\n" + +$(OBJSDIR)%.o: %.cpp + @mkdir -p $(@D) + @$(CC) $(FLAGS) -I . -c $< -o $@ + @printf "$(DELETE)$(GREEN)「🔨」($<) Object compiled\n" + +clean: + @rm -f $(OBJS) + @printf "$(DELETE)$(RED)「🗑️」($(OBJS)) Object deleted\n" + +fclean: clean + @rm -f $(NAME) + @rm -Rf $(OBJSDIR) + @printf "$(RED)「🗑️」($(NAME)) Program deleted\n" + +re: fclean all + +.PHONY: clean fclean all re diff --git a/ex00/btc b/ex00/btc new file mode 100755 index 0000000000000000000000000000000000000000..7566286cb03af1adb1e5a3a1e385c0885c0e94d6 GIT binary patch literal 55256 zcmeHweSDO~wg0nu;mu$YMMdi^tD>Sp%o_oe>hiLo~N93tqCS5w|3(4tXpy0V4kyTKy$L)ngxe=1}Blwh?10()J3S>vfgf4PeG^Dr-DkK#Ew3pd-284l>nWbi+4Y{Uc0Qf`+xlGpa(f?#Qp1wlY|=!auDr zuQ-2NNy(MSTp6sI7ObgjS~qRo%#vv(#d(eOd4)pWivh02=X89E@R^8@k`4C4|BF95s2KY(fEwxE5kTL!elTWh+KTm#-~IU&Xn-;fT!Uz1D~<@ z$f;~xh-*q@8l&-% zZqwiI*!1gK7(}Xe->|`V*|hs-8~kdU{*wPr)$WHj<8pVmT^spdwrRJ;M$WI;&~LD5_n3{G z+idLQWt(>Iv9XgkY}(yoV<%_Z@F&0K#3wnqZQ6Ybgcraox661#tx0D?&$;l#eUG@9 zRSq$x1U%7qNP1ewD7lnAFK}^QeYIfRFN7!VyFuU&$b#RANo!c*({vyxx_y^>yCHu&*KP^%~wUEm~L^p5gWS*R3lkC@5UvYpn63w4tVMWvRb1 zTu|U&0S(6k>FPYh5=t~=@Rdf ze6PE*#Jjk%h}y0U&k6?`YHR9z;Q;YkR9Vx|=w5tV{4$KoC8eMXtn&v#;hOq7E(;eF zOU~7jbt(zw6|jVhD(i!dZo!nUi07hD-)YIMGF%*}s|uc|%k{}!mU0(0G}VP`Y6IRt zLqmN7crIRe3bMFQtqU_60*!%&H34@m)jySiZ){qDj=5`zL1nmbmUre6cA}tYWdM=}gY|wNB3EG}P{u52QuV3rxhPOyE$!)3PZ*3dIeo)OpcY|0UCf*OoAS&SFEg$7^4dYD;FnEJJH-8ye5(9l?4=L^<^*L&CGLv+$>V$bGF4{!>m zUR>o1`z+h|v>tLgJ5jEVe#}f5n}!D8dT(7|tyg$a;rQYvrOXiX3{KeIy@@f99>hD$ zbr*VJY;JeTN%QHQUx_aSL#!ezK2_gQTwS9v`1B%hPe0uRlEYsa4mOh2C#_}r3RSQ4 zyaemhbT7IId#YQDzVZ}m2&kE6Z`LVRATdOi6vh7fCR%(d!=aSxhak6aftOF7Hx&yZ zB;3i&Q(eJ}8*AeW(if8v?a~y0Fc% zA?sJua-%tlrFCmzSl-2f#-`eUfpNsNGT_*&K~E-U*NBsH_uy?mv3BGRyuc{w=l1$*t#stn=Y=GEdxn$UQuB} zws4j)Z`rarb4$Gic}0mO1$x%Fa#ek8;7VWBZS}$RSFWvZxV+xKY2TLNEt?0=2vrh zy75(+4_|g4c0Osw*N~^w`;dzvgy3@>&fu$0!_yg=N^0MNM)+Ju;nn_x@N`zDlG;}g zUY#dVS>Gcr0({=4&c+zg;bMSo33L@tV>CPzV5J-lk1d*&CTe&!HdN@;@FbH;Q#3s3 zLZy5SPco@AQ^P}{R&r^0sbVhkXn1vYM+Frcp3dY{TBhOkbG79fp3eAGTBYIDc^{R9 zG(4S!se29Y&Z$zbhF9mKRMw~A={#5^Q^V7FuSx?N zp3YrW8r1M~zHBAA4<}o5T1d=z4S#`#&(ZJ~YWRs7{vr+U)bNuv{1gp;iH6VD@Rw@% znHqkIhIeWB%QU=4!_yhMN);NO&dOCMk}JT3iWJZ+h;f7LKNt=-|Yp&n1m zOJiQ-+C$S{0ea}-L-@{~&^4*+&it_1{@8taV zC{LkJtb_B9P@Y1bSUcw*pge^-v1ZQSM|oOyVj<3NraXllEjq((_#GIU8L3s*UVmX}u66Gl*i5Z+<(BE+1We~a=I z8pLuq|7*&Bp7I9g-=O>?$`AaV`u_^$os{q6{0o$)r9alg`R6E4OMa}I^G{L!BFcAi z{(F?CB|g@{`9~;!G3DDi{{ZD_sgE^t{yxgn5+4h3elz81X^$=E{N0qNB|TQb`8z02 zOLok~`3B0tFUn-tx5kVW47(yP&(^WzT^Foz<8=XZi0mj3d=~*^@S+ zieV7_i}7sx?hY*Io-fdM_{`lzK~r+egdXGV5!1Mfj*Lt2G zO!qkUdtUz}oNI9yEjc9Dr}mq_@HTA7XgYJLC-Sy=2RgYw^XI@gZhdiBdqn@I&2bs1 z%B@-lC|?aZA{z#(BkuRIpLM_2GU&+OLIy1|S=nEw*}C67|* zFN*p-)sepl7Ul1OO~1v4?1nPg&zASM#2g;~%U5Sab3!g7``+U)jf>k({5^N|yWp@q zk*;;F2+2l5e{HZf#VJk?f_xu-r#EHI0(G?kVbe=5O#yG8-xe< zmI{tNM7SnS$g+5%yQn1yLVP^YC{cML(QYFCB3-w2@%0xzwq%Zq7Rq})Z5w*cFf1A! zV=*RbL_*&3J`nYpHwYr`)Q5kIa}vETH$h~YmkT0R(W`NyR-sGx0Eh<6Od`7LB^riX zU-U$tkMuxV54sR(osaL>K2qy&G^ScA^cNWYx+k*V6WPUFqQnJykbN9Pql0EUX0b>1 zu~^o%HHk<E^!0A+`H22r+kk$C3) z(6A?Rz+41B7B^0s&(c1Zr&C9Fkq1gNQ>bYSAx~hNOO?*GsG8JbXPbktVY7=A(bmP+4-dvIN{*Wtjb3WnXH$#QqvRNGoG%^x4?JP^P8gk6xYqIbh*Qk-OABj zgzI&Y^=3aS`urMHX_Z&S%d6X3sXy7z4rD*OjkWW(PI(nmwi2hdC=EblOm$n7=&B>0 z3|vxWT#h=>Iulo*Hey?-&Txk^!hS|Lw<(A=l)WDMFF91wCn!H7JklqKQ$Wc^`$#h7 zL}9rHJ#8Bfnr{lqWn{VQk|>q=c7n3g{2nM{SETOlC!`8|#MizYT$$s*&C|9`xEk2- ztMEHJFmU@@&mrZ(s5_C{`%hwuPXx~V&P9>~<^dJL{uqA)=7F-yI19um|Kc*9qbEGf z4Mgz>nnkbKYJx{l{jQhD-=$m#E+g7V3fJDnE!LuXyhBHY$kN~_#)p6;h#63Hs@)?W z>J>r8e)$v91^n_eh+nI-C(SpMKdxYXig+QiD?}qB!UkxLa&2csa^+=p+v1Gs$c-8C z>?mYM!4XpvsiFy58O=xI5^l>8gzfOJ3DE>ugn5TXX!0^YJenZSXx^w1(&CS%yTP%W zqls^d;Uqt6PKgtCkt{Tv47Ra{RjX)pHxZvkzOJo{uiyVbjdzqo4R99D_!6vZ&@_wj zibf>lmCo29h`3YV)`&#!Wi)XZkv}-Gikjm@twNVFns}Co?s|y^DQ-kAbRp6@8{Y}h zgof6m2@RbPO)x%6Ts&4E#oV1MB;!85^Opo`ibiEe#ric-P;y82BvZ=X?)FeL@gDX) zs<-zgQK~L?fU?7Ui74B;NIcU6TPCYDoR+=n@okDw;rn9rmr?D@<61p_80*jo*)Z(F z*j^<$Y@Q4(!SJ5cLWL*egvSjPICQ;_dMU%$H3M%?`vEqRP#}j2H)=#eUTJun z1d)?^KUE`QqmM|#^9v$Y(daml^0mU#UqeLy+hOd>*aWFQ*1n%)c(S9y@E#JB+|hZ- zl(M(N@R|fA_x9W*O4VgycngVAy35y~7c#ti{{bPxq-OZr6Z^{uyO9%l!);0i5a!V2 zi!4p;4TBn?m~=MY(CR-p4)cc3Yu@m@ILG69!%p&seM}pK|~F4BIO!{QGS<*+FHp&duFwU zK%2dBGOb?{*A^vQ+t|n$tYLIn-ByYf%Yzk5WwBy;M#bL8c&eC*{owzgH$8Fzcb|2% zy+6sQrJ{sUzal7EQFY0bIp_{nAz{=Vg0ccQbAA$~QdtL--(ju+WsIUBr6X%GkuLUa zD4Q((UvRLdZ`g#rM>b$da1XX&_2K=S%x6FA%Fxe7to>cQe3Wf@qzR+BbP$H$2i^m1 zV+y*j9=FN;es(L}#s&)La>U1_8QITPWE6DIdYudDU=Rgd2knmn!KhgWv$uAmbhG;_BtKMX|L09{Pwn;pgkNAHDR}f^*iG3Ya@xxs~y=J=@^r`W?}B@p6uA< z9*W&43rM9zO#Mc;Hcm>7e^6GVV^HEpnvm5<8?rcl>NHFrCoA7SpPGCR9bZ0KY%5<& zzZ0ipunn>if*Ua2O#|jbnDU#R?{pk}9!i6y2#c15k05f_i~vXcPMq)Y_}lS&|9Jcs zACF&tTs}ACbN52d0rNH5E8w&#vfq3x#uLi3_ieadO6CV9VaTjOxl2%D;0Dag{+LX9 zK#y*QFh@IUWtD9S-k&?m93<6!SLY%Q&YO#nEkjpH44Ubl1 zm8d~J5j7Y@qRXfadA=B;8fV9Abg}b|?&1|Kx{VlmqEVuP-a1Gpe`Te2@%4YaV|6Dg znu;#xrn(52r{lhZC)&kQJ*AO~eneLZQUd1hamxav+~s>UQlTVXs4zq!BHb-WS)aFP zq+$g4bQh%Sh%`#1V$*7V<6UuJVV$~eZlz0hk#uIgu?Qn8_Q>zNP2I)j_!W%kCJ^m! zy%rjv&2c+&2q|2w5bdP+Z(_(iz?%mwq1w6x{Vv8&f&|K%;#~Fpayd~{k0S#VXQVmk zMWi(g-?58RqX);Pq}ES5G$#5UNJA&=ffyg9HZk&IRLi$x?rk@(frC}!`PLs~XQVkt z#h~ISkyh9Vf|7@GcQU0IQyhr5ZP;P{5sLtL@@Rf7iLzA;sk;-Don|*EV;|yBE`@Rq zr$%1}Ph%Y?=>6*A0r`A#dtzAKBA%!~dq>5?Vp|jZUfWn^L3g_04TQp;RGlrd3GJ%SEr* z2XA^*^es`}B%XO6)%`7Q6ep>7^Y5ernWu7utmEI}HZAG69`&V;>C)2iT5#K223-|& zM_y3FcpiGqb3eLVRYR0W*PcjgA8ER!i@;EJ>kzCeBam1#RR)#wa`@vx57bGao z6KxeDVl_pKVOHV}-ciws#K9mr%uK4gIFkk=O3EmB1M1sEU6e*YUoi)Mhrm;@nPs^^ zL2rJmPmT?gOq@I|-OyUAi?t>u)()lIs0UbKIyjIfineW%aJkm@LB(?KBB5g{G}90r zkuh9r@rZVD!MTcjb1Riu*0CO=n|*WlhuOKU8^Iv<7%%+tXfnZ%28Bdy?>aU!^+6M`Q_}q=d)Ye;H9!Rw_3jH2NrJw{PwpF z;hTnY3}9lHatI^4bO6nYE=>eh4KQ7!OOnvgy7aCRXK#fVU?&&ynYQ^ioC8Z1UED10 zl~T7KvGmZ^6&FsQOFcvpvmIqtUjKinQJ&0%!$$cgUU7z@FSA{USh#H#ThP&pVvxvR zO~4)%+Dx2{)Dv?p(QU;bDAje6>h5}8gsRa&y6G0}>Lp}!7tKcVEEU(P0Y!PAC?_)W z+v628oMQ+)6`Nfa9yjrr?Jg=drvr}>bZz>jYtydxsQ~xJ09c^SQO30GA`I>}97K&x z(H>^Y+|9==wn7YZmxf@0Cj3bqUH2nuH`R{s(HZ3^MmL+$q5;>^i#>O6H-3r@H>c1(O zb~j<0f2~x(aY(BR#II6&+h~`A)vy_x^k%Gv)`J!R-sEb?T$_JK_Y5vW%aAWz&!E{m+=S-zeF3ZNNW|oVsV@1Ry`vfJc$)8Lqb#)Lt51QKqCF^Qd zGUZI6Rk5kKohaM7*h0OS5;1(}jGt!2tuG3DmAAhJ{yjlBc?^7BGM0L3K869JS#}FT zv-oL~HQ)66i}J>zczOqxR>9(Fb3?y-6I7i6;Y2~$4ohx_m26kX22K)So<_*Fn__MZ zk`=oR|F+%YEm+#RF{|; zHxgx{x~_pW$LQHqwXS-gaQO%qKVoWAhWkYtD>`5^AAK{SKT^#<`*{+U8Zd9hXwYQJ zMqnJDOec50{^agIouxE^X(b$qcK=CVa{86nAQUd#=Kj-*8lhZrx-n6^F;Nfh)$cz& z5GOqG{ihA23F&xzN>_1*+6(8`Yi<{Z66{cCYeYg`Ib#~-$pz{69F0iyUe1_Bf{4t* z{NN317OR^n185HCwM3M3|LF(@{D1X+(qnWUAr}#kl2lC<*>T}??huqTDa_9&Q_9{W zIKbWc3PH)eKk|BlVMdh-IzZWBUP5lBZ%G%tW zWeBCrLh=o07Q^5MxqMV3i;gDRAi-TPHKWXWT%-J8#Ql<_90bon^DRD2z}j7dLBYc~ z8$mAbFSqpPpnXC18)De_ebd7$eE~IEDm=Cx%PZdOMgD|ll11LqVs)_ zW5E0pOH79}FBEipg(g_ zr@)r!bOoyUBgPZ$VO)F71H_Y#@5}pyMM9w%s9y6L6i5tm-J)rX2^GpEt$YB_pPS#N zBC>|V7}|J)GJZ?Af5!K_`aCTg2JkTDY*lZoxPTSyHxI(qFtdj&Bt`2`_!EqvY40A0 z{fNkt##oJ4-2U6h6{OVHfV4?5Pg*RxxcJ$V67FB)3DJou?NQ#ZMmeULUfrei4SP$t zA1S&sN%T)-o}x@rcP#xar*VQu5>qC+;UMxm%-2Ny9+M8gr2~?~#hz#fYCu-HU43Slr2iherWI)~d+YI_0y z+m^YX*!aQa)fVB$@Fc!4ASY#+aoRhK-5)@dBhpy`{a8 z@;9w1Q9-*ua+B}ALeWGsaZ%5UB#l=N+GP0-V3|UILhrMQUg+*Z^;g=L=YR{LA_yZc z)OSrp-bs1zw%(7@o=?C8pxKV+VOloy8QHD$eD4AGF{%-x_vs)irkxzq3^>_{`&gU% z7{qW=aF7r`I9Xm=PlP>VB9i`^2F%kCenT0^l$%)d90^OF335%=!> z?q?mK9PmV&c4PT|)*O!=PwYa$qX#8B%qxJ|@BR*=EGF9lvhS$)P(}$b!9@RaSARQ8 zCWAlMu_kojQVz}14)d!hMN_mm3?cxgLC|g8ivMVS zaIE7VI6*n)94!oE$iSPaEjeGvK7p6>1&?Kuo8+dUkxm*=)7a$Rm)-i0sDlycL>Z0a z4)bG1(93BrfR4i5ec2o3BWInUAWNqmz(Mmy(w5jS^qCplHJE){QwI(Gn_z>go89}^ z0MG=QZ|XItG96a$h`W2U`!(RYNxhzy=f}{47lY=HU*!1*fjm=y#myo>qKd*fQoII9 zX&Ho357QUVWm?anleV!?3$Dz~W1D~H*yLdq$@v@CZ)*K1|J2frT5(@wwU=T&govg& z=~wdc5#@6%f02XnKwIbn>lZJo!D`HGaL#o&AzoE!o7{8|t`as5R~Et4h$0FY z{4W)6MB%`M^E_x4aznI9*)Dw&ZK`Q=O@~C%Rf`ua`oON&ya0_er63o)U;r?zOTa5u zPn{DdljWTe_s$rfx@ic+ztp_2%MT$G>UNqBbn`_A+Bj(b{fHFRyyyj76){V3%e$#F zQohp+5*k<|hK(iZ0`rpD{162c>fDaUspAGK##hWA7>@K$JYQ)YEg$s!=zAiidGMg- zJ?zMLFBK`%Gs|se--B}j!+Z=9c8@F#T^Ua@-&`FyM-QH+Cb$h_r!hj}mh)DKu zqWx_}Qhf|6*pW*Go9)zdQu`z_2TTf#k{m*85cs9K<$^@ePqfIoB^fzKH%8griN|0S zkKKyLZphb(Sr+3Pg%rlgK{O-oKbYe_zz9g?SFrL;v*h`t_;NYqM>TS`1QET8qerw$ z>o{2#?V>1nqLYp$bdG#zQ@8n3NUo&Z!SUl*GA>|gw3pM43id$p;||196bqvpy=bP_ z%z^RXVz>DnjE=rOu`eXMJDL3?$$~g5in%z1uo(Vu|J ztaZ@$7?Rq|j~Dis^Ek5<%9r~{ygx=NFP$P*JS@jadp+HrX*@|U1027K9We46U@E-# z>@z7|5hFpnN7|@*AO#kPmUR;mhu%(7lg)mN`ALIBFHg%5)cj{&*~yMO<4jx^VRoH$@WAOhc19s7YE!#2LxAgeY;*J=PT1 zp{4+A3-g0)mg8+t4yhj3-AUaNfePA~oX{<*+GmPmcj{J$>Q;y3F;PG%;Akme>`PEY zjBaFDo4uY$`5|*HbqiP{hFc;As$!P&R3KG6heC3E4YMYaXE-t*%ulcvv1jS!!T7OI6h;U86`Egc%Jjkk`qf943rjrUqP3QK zO4sy`fw&fD84R(N9cG-_lACx0aUJp-tmv@_gR44Zk0p{a2V{CxZrS?VKhhw~Z z)%+|W&AH&&=05x*7^i`ysr5PT7N&L0k63Fx`}!Wi?{Ue%J+wtG!KV zo|5?}OLf4*92xUFV8nh{EE9cZHn@|i9>7C*Afey(;NJqWe*K5)eU?7cz-JoxOaq^3 z;4=+;rh)%!8lc~O))U>bqjLg+wE5Pdeyz&h`qyp7eEgLYqbgACYYK*){`xxnRC$vh ze}Ka2$KO8)RMAhD;|Kp!mAL6|gr)ZG^{@A%m1O2j z?Q3kTSy{)wv7V~tG=u);L7u;HjWMrrO@*%kf6@cZGzF`ib@gE<{V573QP5vxa8}m@ z(HnGWDt?Q7m9K7Pz}r9_tj3>k2|MWzM{uQ;_4QRoRgK_KUEfq!<(!JY&Q{k{yCTrQ z6l(*)ptHKZq1G1;2dbRYoQCYKf=Lok!+B7-;rLwo)gGKcufp|~Cx(W$;Cj!$4GmQR z_5-d1-1*ed(9?tmd=u~(;1R%EemFEV;dJD84Gql(+=38q3*hX%paNXDz^#A}0zM6R2=Gn7V}M5hr}m@% zX`lxz2HXO;1aJ>v81OLQR={I`PXlJ*Mff)XX9FGqyc2K&?!?jW8q7z34rA|MjC>ik zl}iA(00x0C8vq|F2Mhy$jPii9{{p^%w*bBg7z8{5cs@?G_JIBnj$bC=Hc>xdF<=(X zl$HQa1q=h00d57{1NbyxKj52y=i@l@52#N!1}Qo2SZp}f~q%paXYxO{wqz`^7=O~&_pdtXP>rqOtW$Ac~@UvH2Fdz zq(g!rJ_D!=b2E%Nr{~<0HgEi>IcN}BD&K-nAIe>TR{2-rm46EcE+$fp`p*| z4?-i~rR`TI{$o(20oUj3;kZ-(EdGX<;t`gr?gC@1+Y(#yXbFAt)8 z0ObL_JZ(7>u>GUlh4sKr{++Vij{hN)SD?O~efOWBJPYd<)wk>4RFvo79ggb~31s1slJ_l%VfD-`$5Uyu6zs1a}WpEj{gbD523sn_3ilgqdbK2 z3v~V564wtsdrI{$(aVK<6Z0SC?I`!?Tf}LGvc57;HND6NRK**fcWo3xq-OGPXC8wIXz!s)n5{Czh9QqI$)Kjy=%3fh4`fh z{HN;WE93R2qP!2~cKpj^xt)ALS#HOF3(5z;|5CmE74i0WqTE3IHd!zC#>)?(JO|}= z_4`roMEMnZ{pxuAEG)$ND7TYuD#~3bx3kYOS#CGKgRyo2l1tjQ6h}34Lhs?{`&x-jVaUc*mc17<9_C(e&`&g_`q zgD4-|IW*Ks?JjGH)206)q1~52*NpgeJ<)B~>DDCB^@FY#``F(TU9V2}N}4X;1PA)N z8~Q{%pD}Tx)^1mpPB$BL9_&wPf1D9&)#%Pk*XigNX4~;x;2fgs*6F$v}3#{6<)T z${0%jf}`k~+^y-x%G~d#8|{wV7t)O%Ij;Xzy76FI7OtO9%L4wLv@DP`XDr{G>FCQS z#9X4vNJHtX9o1Lm9v)@*bMg1Nw>WY)k2ZEWu77y6u{|vd*Ij8@z`vE21(NsDt~HDw zq<=H*r(=wRqnF=(nq$Y9kYQ{eoBQ{%#uHA8xvGWb%JL9rY_QP@0Fo*cEe;m%l zRFf=o@h!Per5mk|+?UghCmgwb>Bhf1uKy_AcrGmq*S}560)At97HIx8WBHCu$0wT5 z)aSyBb3aZq7UkZTZmiAyZo1LoxV}5xXi3Y$^^UYGpnsN@1&Vjmm;WWhaX_mrb#_&5 zPdfViZaVe(lXU9ywhZbsuF+@U(PxnC$yolIOvi(n*Tp+9l>TO#;}x`S7>hCwW*W7b zzs)qh>Bv2rY5c^I8y#hQwi4TxGy~m*InsZz?= zf16``H#-a0hq7mH$~B@nXFil`d_N}(*B|7Rf&ACGg#XqV**}?Jym|)Ve|-iXDgD8j zv)`Lwym#ir*0YSZ3DX}u%jli39^|i|1&wS!`%KX7KKsnCPc(YYKJ)R3hI#h6T@#Hb z&dI{{zH_n&f6ipk{Pi4ayJzAeRNZkd_3njp>AL;AxMd8bmpkSg3k_po=AYAz+cGz1 z8237Izm;KhI&z=NFn$GN$uRCtyS^{OcpCHKbV zEGWwTNxE@M?qN1I{H(|mj_WsP7~gGL6U6Gk>3Hd_Vmj z80)`feBk)eD9583N6U6P$abD(+j*63=k0W|9bCh9fQRjXWJ|{K?`JytGj!V-a*Q|D z8^-#~haJX0m5Mny~UZfm9q)-W1Q#AHD*xV^vfKRCXM~N!!fI*!{Mm+8pf-R?6(}o`;N?Ln&XJ$ z0;?LeGu}Y3H?`~=4rAS1OAgmLD~y|&*EGjuqslO<#@yp@1ZNn=qmJy4(v06bmLtD0 zJ@fH&MhS(Cm1r!?PkoH6Jye&E1?`74e|xQsav2ehVTzMeLE za~dCGI5xyj*y(Q+WUH>jnJ{UP>x|R#JXaQl9?CFD1IiOX&fb&k|X~aJu*kTP{vn zt6U8EObA!aSi>ms9vl!y4xH%GWJ;T4Iqiojsd8H5D238p4FBtsp?bO)%n*564=EiS z=VCaDzp?+z6nVA&Jt{A7>xmOTi-;?FWKU1DW>PXAaxuhKgHxvzMBNt}E%E0_IOQA{ zUn%_dvqfI@qg~QTwHc~?yyd|CG0zh8Lo%=A!0j$B56W`M=6?>1rpvQ zVYP&7B)mt$`z3r_!e=DhFX1mGd`H5g5{|k+=;dq)FOjfB!UYoEBw@9LYb3l!!uutB zT*7B0+%MrTC45K1qY{p~P_{4OB@&iMxIn_2B&?QjjfD3|c)x^?OZbe0`z8FPgzrdr zRKiggxeQ8YOL&QdB@!->kcqS}{DJnXoKp}9Ugi{kqTH$eM7iM);^746nm|KiO?{oS zpfE2Vf7;zHIZ%*c{ADP)ob1|xzp&kYuZxSE{B0O#0H&fRzmaBS8SP2(PLlZUBs{`w zrZ!h_A2UL+x7rQWo3`=)hfG<(DMdcpMk0I@+KgiX!@rN%Ve+e=G^VM&g$w;WtVAvX(^t4@ms>Bs|@lrFQ8U zNl*JEo{o+5^oGRKF_E6$miXS5MEpk*Psc@i8kd%O9M1%vrK|E6hz7^v%@*&u7UfqkF4o(7c;2@YRxjgTxypiTJNcJ{4Ypr!zoGV=~0t7PeupHUCiWC$!ZD~a`GL?sRMYTcP?>pk)jzlO7yE@vcQXPoDE2PNcLCJ z&jdclIM3*KSWz-N<65Q{*ZTJzHu(D`f0yLX&s3n|_khnePB(HwE@qQ2ne73d))$^CwT^LaWPuOdC%C;|J(+D0RkfK z*OvvKOJpMt0-s9GCvEWbE0n~iqFV4#_D}bAQt_FMc#!ob>FF$)(j3O);sO_Ct+Ywu zEsVI>2|Tsy^tl)z)(OM-MB?+mDDck;a$`9H(A>21jO|I|TMK+DIX41N{CidiK75Y} zym}>m`C@@r_CP;{NB!!#QsC*H3Z-K<{M`uPQ?+}a4gM*@r;RsMd@s1;zK0F{FPJ{d zXuinBq?pc}{%k|<#0G-k?3Hcw_kt)* zmiU|nF3!`vA4;=;CqDVhT%5=7ajKE@6-oZ&pCr9Y`lVt?|DMG6-QZ%(0g3-Yw&34> zlfeH`;txoCbJ93|41B6_90P|#_~dzd7Vs>;)WcNCzliB&Mgt2Z{lHQeV<9%D)e_(N zk1o!udHovm!Tc%|c)ABi2}kGLZr^ej=V$RZ;#C+V$yp)CUCrx{nU5sWz_oaLi{y7o zd9IUXPXMpRR3kUK84n|pypoa9LL$R()*GR{WU>7O#t&${Hqub`6d4?vQncB z{gXEMLy}KVnP`{p4O04@#3$R~QQ%1reE}EK`T5&0?m1KFvt9b>m*mFB%tz(ouw;VpOUdiwT;Q31h2W$3uK}LM*Cpi{C0YGg;@dA3^mH$o z(#Mj|zzP>-X=UPcWrrT%bFq);e%Qrza-{$NvZOcs0{^h&7*l*?yUIUYc24Sc*8orLR!Dj!+s`Dv zd5PeEzvNFZM-qLGjJs4k@c)2UbtNf--%0vTDJR`CrF0i2Eb(c-(Z%@!{>GmtkoXFz zPc@EH&P&ao{z3=waY?%hNIu`Sq5mt z{&U9Qqb|uofV+WDrH7wNK8Dn%qA59F@NZ5UuO$+nBk{@(p9Nmk)f?`S^sZ$>o(p8* zpKR!_!bX?+)gkFUl72bxIhwtxHiE#@JZhJEE0zTtCEhvB#Ta^qg3?yTi);P+kPUv& z27euH1*YonCg4f_Zs~_7$wq!G@geEweG;Du0;ZS#3e$v>7x+~C_t@b7UGg!K#w)`q z`1eV9)Of7|p7?iP=)!kAZE_0wo_};PvR@WmiGfQckDKv`Pf7(nJ>x;?X5gt`A=$25 zpp75e@X5bW(6`^}V#>*q-Y@Y35`TrnZv#G+JUbabJZ{-*Lw_0^Aj#RBr2i`5Q}O=_ z<6&=?3OSX3{;}lKBmG96l=B@)pEEGbP@2>-#(v0u8uo3!rNetUSHEXymeI@3I^~#R9=2+3U75yU5(e*(BNC|4b+7j z)*ICgzS@Ads;RbiJ*sFqFDSzaq;qS+{`#6aw|sFc&mRgII6?K|O|C#F46#=P1BLm+ zP({NrDToS&Qxy(JO&^9T9!@o!XnOImdedhNLzN7}45yhnjArKW{>>cDY36WNvxc#n zRb-KmB(ldXt;hq1*MRUqa=NaDX z%5IoDr_6i9f(4cCCEg`-=9alp<4cPw!!x~$S9rq>fk0_7y8cG*d=6kE% zmEnSXZ)G4D@P`W;!=;r)UZ9GDfyTyCl)Ec^jB*o^x7N3=rnafpU4cp#Q*T{;RlrMc z{Ec91MM`9E4a~f>a)!5TMZViTuh6|lw34d*BpJE)3%SdI)$YX$D>X!2z(S0Wer9;f zz1Az6tP@sKyd$J0)+Hn<5+j2bA>E5_b6rV1>9ZLP;$5jFo{fy(enl^TkwK zC<$(}A>gYmh3%8w&hRdV>Dy?sve;WW-Mgf~>vrqi6Z#sV88ZVt3~gj2a|+9F&o6MV(L2W)orR^P zwx$kVAh}F7NGktgz}Fz=8Bd-W-YP5*-deY4+?x3R9d8mJ@r3z3-QtDvc-M!c&{^R58q7hcs+zZUMX%8Pfn>;1#j&MLMz+FERi z5f*d5pa>%-c>53>B#yad(2zu~0p1#z08y4&>i~;T&ED0<6JX`>uk(31O!4}CVgD)@ z9M+t$czN+dxYm;K?&B|8nKu))zz$S;#o-R zs<*1K-ix0bsKT!g&`|Lr8&2|sBj)4Fy$$vCVHK5#z)H?1<;*y%GM|2)q%wq4n{maB zHFpG3OgOfLYQ%>&RzMpG=rvfgf~Kqw;R6|>H7AM?wNwQWPGG8$DS;%6pe0m8`bY3F zGrn-O#b2>_q5ZnfYd*yQ;UbmVu6~81%jiCkrcn6 z5b{?w)Q656>hfqJez#o&PI@TeK4#K*Vo@#hQb0_>Hq5Qmo`Y?pZtRaLU_~X~g8VhU zU{k;wULOj$2{DVNh{z&jsGQ>^YXe=ebd>doy@?i*py8rgUr0nj)oKLPo+)9E<#wy- zFMI(aGh)D*c`}1FPwcwH82W=W>ezJgR-r0bkuXt&A_{PZP*v4{ty+Ec@YTFx38MGn z5u5`F%PDzu8C0>rzDmtX<^GZjs%g`Pt`v&V3u0S2Y!{Pi)$%Vv5I-H`-RMoZ z7r&HqBKxgdo3N##aTC*OrHcE=5)vH0=rCsL!fIhB1w{=_b>SKuz69uZdXhal^ZfJ+ zLrG)P3QPodZGwOzi!f|_FvbH{O2-0=V2BCE>9!5?D&5}2*dDUR**sCNrV%?Vx%1+! z*T}>?Ga;z8YR~~2H4585nY|l1g~Va-E-9a%kC^w<-1p>sOwNv!uN;|0nrb zXW)1$j70xWdIeKH15H`B``_4d78YYXXseVEG@p(lh>^qXw;>rb>IjnIVP1&}5LnJM?BGTeYOMGRWfA)~%LC!MmDAjT+4 z+E|i%8VQ}KrEn9$^mcN7=qvBpjmF(a9VP^b|Ulup&#RGBTDv6Gz1jH7i#g_pCUTGxb{=i;)qe zkb+|J35)2SjFdu~NyP<5bQCOT@uIN*_MlH_eb+U@|)_ z-lbK0%2ZJ;i*~O3|j3Q)&$%sLVOBWP9~O|QPb$9ALbk;J25y>utKXHw#XrD zGkD9I$_P(_jeDjQ@YGf;l$=Inp3^Y|Po3KOM(Y?ZX}<-hbi6~O6f2%Mf=$@$NEe1v zaQKjvXW*%IleibQ=IaPWBgdPtE7z^_hVW8TeI4#9h1Yx6_l?OzK{b^nS*qSkkNz{}51$PJx3{E_#ad0eR}c}f%}E%TVfRY?axLX{^Uhl=5v zAxHP5JiiFWj%#5o=n0p;qCkChs^vr2n2lw6ON9n-V{wHvwqnfd6=)JQ63#AR+(~Y- zf(|c7GTs)?hFJIJj`RFV^6p2)BM2}c`VwsMXNjkv=w?~cqZ^{fK{e*ym9_PCA{L>i zcPQ>m?5F0s5}(3JqH~MmU_J{Tp*f>9JrYxpHfz?MFglsQN#`)_uqmoQG4<)l@PH#x zWAh5>u_V|O%_{kztb}kgQA6Z z36EI_UozKg7&0E?gsj(g1ia^!$uw-g64$->u}BY6!RMD`JtA)z$*DT;;JgtRXH&A`x72HH1hB> z^8pqqgnLhTl4-p};aP-f^e`niA|7QFji_sCh@?WB+yh^2jUNrvLl%7Hv4BDt>>rFg zY%6N<)TDZ7^VA_d|LVXeO|qDn?&7P7=>kzH@d^;Fp77Wy|HhH3uYUI-Bj}CzYq?jq!Kp>Q#O9I}wADV15$4sxQ&TG+fZT3#z{Q9SK*apx7iK0g_$SSI^T< z2aZHl_0{iE9F#ANsNbOg38&=#e*swf4G2|V{q92$@4Zl3BY@R^MW^8PD5u|)P~EKZO5du!>c3yspDXFq?_x~BdoPqa zWkmw#;*(sz7C6$$D110MT@nhQp05_UxE-kcDqQIGowB~uDJb~2*cCBgj=WZ|5qZ77 zdVj5g3=8Q;^95Ajs-DWP$Aw;By(gJPf+39;!1`8tREV$Qg6b>%tM_+}kf6XXk|m_% z_U}chUSGY3zIC;zRz`!arR4Uvp-ive7j`jqpY#ncC3QfJpJMq?QvJv7b^&AH_YoKv zhmsmh${PO$veEdc{)g^$am5gI49Usg@vr3eUqX>yU;REsyG{M%_TNB#dZ$3CN&P-V zb5yjM+@8uS_@5xdtD9DR^}9BkPO|gGX7GH`e|QQOS~1@=)~@OZx3s!m0kN_xn0z{h7+JWCfS1DB-!X{rn`ns-KKk-O*uE z6U?bcw!dtGV2szP47|c&>0kLzysmD^E-1zKl*a{(PSLSK*E%K_8P#_kzw1?zyHE)# J3zM?O{|8}cALal6 literal 0 HcmV?d00001 diff --git a/ex00/data.csv b/ex00/data.csv new file mode 100644 index 0000000..a6e4b99 --- /dev/null +++ b/ex00/data.csv @@ -0,0 +1,1613 @@ +date,exchange_rate +2009-01-02,0 +2009-01-05,0 +2009-01-08,0 +2009-01-11,0 +2009-01-14,0 +2009-01-17,0 +2009-01-20,0 +2009-01-23,0 +2009-01-26,0 +2009-01-29,0 +2009-02-01,0 +2009-02-04,0 +2009-02-07,0 +2009-02-10,0 +2009-02-13,0 +2009-02-16,0 +2009-02-19,0 +2009-02-22,0 +2009-02-25,0 +2009-02-28,0 +2009-03-03,0 +2009-03-06,0 +2009-03-09,0 +2009-03-12,0 +2009-03-15,0 +2009-03-18,0 +2009-03-21,0 +2009-03-24,0 +2009-03-27,0 +2009-03-31,0 +2009-04-03,0 +2009-04-06,0 +2009-04-09,0 +2009-04-12,0 +2009-04-15,0 +2009-04-18,0 +2009-04-21,0 +2009-04-24,0 +2009-04-27,0 +2009-04-30,0 +2009-05-03,0 +2009-05-06,0 +2009-05-09,0 +2009-05-12,0 +2009-05-15,0 +2009-05-18,0 +2009-05-21,0 +2009-05-24,0 +2009-05-27,0 +2009-05-30,0 +2009-06-02,0 +2009-06-05,0 +2009-06-08,0 +2009-06-11,0 +2009-06-14,0 +2009-06-17,0 +2009-06-20,0 +2009-06-23,0 +2009-06-26,0 +2009-06-29,0 +2009-07-02,0 +2009-07-05,0 +2009-07-08,0 +2009-07-11,0 +2009-07-14,0 +2009-07-17,0 +2009-07-20,0 +2009-07-23,0 +2009-07-26,0 +2009-07-29,0 +2009-08-01,0 +2009-08-04,0 +2009-08-07,0 +2009-08-10,0 +2009-08-13,0 +2009-08-16,0 +2009-08-19,0 +2009-08-22,0 +2009-08-25,0 +2009-08-28,0 +2009-08-31,0 +2009-09-03,0 +2009-09-06,0 +2009-09-09,0 +2009-09-12,0 +2009-09-15,0 +2009-09-18,0 +2009-09-21,0 +2009-09-24,0 +2009-09-27,0 +2009-09-30,0 +2009-10-03,0 +2009-10-06,0 +2009-10-09,0 +2009-10-12,0 +2009-10-15,0 +2009-10-18,0 +2009-10-21,0 +2009-10-24,0 +2009-10-26,0 +2009-10-29,0 +2009-11-01,0 +2009-11-04,0 +2009-11-07,0 +2009-11-10,0 +2009-11-13,0 +2009-11-16,0 +2009-11-19,0 +2009-11-22,0 +2009-11-25,0 +2009-11-28,0 +2009-12-01,0 +2009-12-04,0 +2009-12-07,0 +2009-12-10,0 +2009-12-13,0 +2009-12-16,0 +2009-12-19,0 +2009-12-22,0 +2009-12-25,0 +2009-12-28,0 +2009-12-31,0 +2010-01-03,0 +2010-01-06,0 +2010-01-09,0 +2010-01-12,0 +2010-01-15,0 +2010-01-18,0 +2010-01-21,0 +2010-01-24,0 +2010-01-27,0 +2010-01-30,0 +2010-02-02,0 +2010-02-05,0 +2010-02-08,0 +2010-02-11,0 +2010-02-14,0 +2010-02-17,0 +2010-02-20,0 +2010-02-23,0 +2010-02-26,0 +2010-03-01,0 +2010-03-04,0 +2010-03-07,0 +2010-03-10,0 +2010-03-13,0 +2010-03-16,0 +2010-03-19,0 +2010-03-22,0 +2010-03-25,0 +2010-03-29,0 +2010-04-01,0 +2010-04-04,0 +2010-04-07,0 +2010-04-10,0 +2010-04-13,0 +2010-04-16,0 +2010-04-19,0 +2010-04-22,0 +2010-04-25,0 +2010-04-28,0 +2010-05-01,0 +2010-05-04,0 +2010-05-07,0 +2010-05-10,0 +2010-05-13,0 +2010-05-16,0 +2010-05-19,0 +2010-05-22,0 +2010-05-25,0 +2010-05-28,0 +2010-05-31,0 +2010-06-03,0 +2010-06-06,0 +2010-06-09,0 +2010-06-12,0 +2010-06-15,0 +2010-06-18,0 +2010-06-21,0 +2010-06-24,0 +2010-06-27,0 +2010-06-30,0 +2010-07-03,0 +2010-07-06,0 +2010-07-09,0 +2010-07-12,0 +2010-07-15,0 +2010-07-18,0 +2010-07-21,0 +2010-07-24,0 +2010-07-27,0 +2010-07-30,0 +2010-08-02,0 +2010-08-05,0 +2010-08-08,0 +2010-08-11,0 +2010-08-14,0 +2010-08-17,0 +2010-08-20,0.07 +2010-08-23,0.07 +2010-08-26,0.07 +2010-08-29,0.06 +2010-09-01,0.06 +2010-09-04,0.06 +2010-09-07,0.06 +2010-09-10,0.06 +2010-09-13,0.06 +2010-09-16,0.15 +2010-09-19,0.06 +2010-09-22,0.06 +2010-09-25,0.06 +2010-09-28,0.06 +2010-10-01,0.06 +2010-10-04,0.06 +2010-10-07,0.06 +2010-10-10,0.12 +2010-10-13,0.1 +2010-10-16,0.12 +2010-10-19,0.1 +2010-10-22,0.11 +2010-10-25,0.18 +2010-10-28,0.19 +2010-10-31,0.19 +2010-11-02,0.21 +2010-11-05,0.25 +2010-11-08,0.36 +2010-11-11,0.24 +2010-11-14,0.3 +2010-11-17,0.28 +2010-11-20,0.29 +2010-11-23,0.29 +2010-11-26,0.29 +2010-11-29,0.28 +2010-12-02,0.25 +2010-12-05,0.23 +2010-12-08,0.25 +2010-12-11,0.23 +2010-12-14,0.23 +2010-12-17,0.25 +2010-12-20,0.27 +2010-12-23,0.25 +2010-12-26,0.27 +2010-12-29,0.3 +2011-01-01,0.3 +2011-01-04,0.3 +2011-01-07,0.32 +2011-01-10,0.33 +2011-01-13,0.42 +2011-01-16,0.4 +2011-01-19,0.35 +2011-01-22,0.43 +2011-01-25,0.43 +2011-01-28,0.45 +2011-01-31,0.61 +2011-02-03,0.78 +2011-02-06,0.92 +2011-02-09,0.97 +2011-02-12,1.09 +2011-02-15,1.08 +2011-02-18,1.04 +2011-02-21,0.88 +2011-02-24,0.96 +2011-02-27,0.96 +2011-03-02,0.95 +2011-03-05,0.92 +2011-03-08,0.9 +2011-03-11,0.93 +2011-03-14,0.9 +2011-03-17,0.87 +2011-03-20,0.79 +2011-03-23,0.86 +2011-03-26,0.9 +2011-03-30,0.8 +2011-04-02,0.8 +2011-04-05,0.77 +2011-04-08,0.78 +2011-04-11,0.76 +2011-04-14,0.99 +2011-04-17,1.09 +2011-04-20,1.19 +2011-04-23,1.38 +2011-04-26,1.71 +2011-04-29,2.66 +2011-05-02,3.95 +2011-05-05,3.56 +2011-05-08,3.75 +2011-05-11,5.41 +2011-05-14,8.56 +2011-05-17,8.47 +2011-05-20,7.28 +2011-05-23,6.81 +2011-05-26,7.95 +2011-05-29,8.68 +2011-06-01,9.47 +2011-06-04,15.05 +2011-06-07,19.19 +2011-06-10,32.34 +2011-06-13,24.87 +2011-06-16,19.99 +2011-06-19,17.6 +2011-06-22,15.39 +2011-06-25,16.95 +2011-06-28,17.89 +2011-07-01,17.38 +2011-07-04,15.74 +2011-07-07,16.44 +2011-07-10,15.16 +2011-07-13,14.52 +2011-07-16,14.25 +2011-07-19,13.93 +2011-07-22,13.94 +2011-07-25,14.16 +2011-07-28,14.1 +2011-07-31,14.06 +2011-08-03,13.37 +2011-08-06,11.42 +2011-08-09,9.66 +2011-08-12,10.35 +2011-08-15,11.4 +2011-08-18,11.39 +2011-08-21,11.75 +2011-08-24,11.47 +2011-08-27,10.01 +2011-08-30,9.4 +2011-09-02,8.46 +2011-09-05,8.56 +2011-09-08,7.53 +2011-09-11,6.49 +2011-09-14,6.19 +2011-09-17,5.18 +2011-09-20,5.89 +2011-09-23,5.8 +2011-09-26,5.49 +2011-09-29,4.95 +2011-10-02,5.27 +2011-10-05,5.03 +2011-10-08,4.79 +2011-10-11,4.23 +2011-10-14,4.37 +2011-10-17,3.87 +2011-10-20,2.59 +2011-10-23,3.31 +2011-10-26,3 +2011-10-29,3.39 +2011-10-31,3.38 +2011-11-03,3.28 +2011-11-06,3.04 +2011-11-09,3.09 +2011-11-12,3.11 +2011-11-15,2.67 +2011-11-18,2.37 +2011-11-21,2.3 +2011-11-24,2.48 +2011-11-27,2.51 +2011-11-30,3 +2011-12-03,3.1 +2011-12-06,3.06 +2011-12-09,3.04 +2011-12-12,3.33 +2011-12-15,3.2 +2011-12-18,3.36 +2011-12-21,4.08 +2011-12-24,4.06 +2011-12-27,4.09 +2011-12-30,4.47 +2012-01-02,5.45 +2012-01-05,6.6 +2012-01-08,7.2 +2012-01-11,7.1 +2012-01-14,6.81 +2012-01-17,6.97 +2012-01-20,6.57 +2012-01-23,6.47 +2012-01-26,6.08 +2012-01-29,5.72 +2012-02-01,5.77 +2012-02-04,5.99 +2012-02-07,5.74 +2012-02-10,5.94 +2012-02-13,5.69 +2012-02-16,4.74 +2012-02-19,4.38 +2012-02-22,4.63 +2012-02-25,5.05 +2012-02-28,4.98 +2012-03-02,4.94 +2012-03-05,5.04 +2012-03-08,4.99 +2012-03-11,4.98 +2012-03-14,5.45 +2012-03-17,5.4 +2012-03-20,4.95 +2012-03-23,4.81 +2012-03-27,4.74 +2012-03-30,4.85 +2012-04-02,4.97 +2012-04-05,4.96 +2012-04-08,4.94 +2012-04-11,4.9 +2012-04-14,4.97 +2012-04-17,4.99 +2012-04-20,5.19 +2012-04-23,5.3 +2012-04-26,5.16 +2012-04-29,5.09 +2012-05-02,5.04 +2012-05-05,5.15 +2012-05-08,5.1 +2012-05-11,5.1 +2012-05-14,5.01 +2012-05-17,5.1 +2012-05-20,5.14 +2012-05-23,5.13 +2012-05-26,5.15 +2012-05-29,5.16 +2012-06-01,5.21 +2012-06-04,5.27 +2012-06-07,5.48 +2012-06-10,5.68 +2012-06-13,5.76 +2012-06-16,6.27 +2012-06-19,6.48 +2012-06-22,6.8 +2012-06-25,6.56 +2012-06-28,6.58 +2012-07-01,6.69 +2012-07-04,6.71 +2012-07-07,6.74 +2012-07-10,6.98 +2012-07-13,7.46 +2012-07-16,7.8 +2012-07-19,9.37 +2012-07-22,9.53 +2012-07-25,8.91 +2012-07-28,8.95 +2012-07-31,9.22 +2012-08-03,10.12 +2012-08-06,11.21 +2012-08-09,11.35 +2012-08-12,11.64 +2012-08-15,12.3 +2012-08-18,15.37 +2012-08-21,10.45 +2012-08-24,10.25 +2012-08-27,10.99 +2012-08-30,11.14 +2012-09-02,10.36 +2012-09-05,10.59 +2012-09-08,11.27 +2012-09-11,11.14 +2012-09-14,11.48 +2012-09-17,11.98 +2012-09-20,12.63 +2012-09-23,12.4 +2012-09-26,12.24 +2012-09-29,12.46 +2012-10-02,12.58 +2012-10-05,13.07 +2012-10-08,12.58 +2012-10-11,12.16 +2012-10-14,12.1 +2012-10-17,11.99 +2012-10-20,11.94 +2012-10-23,11.86 +2012-10-26,11.56 +2012-10-28,10.69 +2012-10-31,11.17 +2012-11-03,10.62 +2012-11-06,10.97 +2012-11-09,11.04 +2012-11-12,11.17 +2012-11-15,11.28 +2012-11-18,11.82 +2012-11-21,11.9 +2012-11-24,12.46 +2012-11-27,12.5 +2012-11-30,12.66 +2012-12-03,12.75 +2012-12-06,13.69 +2012-12-09,13.53 +2012-12-12,13.8 +2012-12-15,13.75 +2012-12-18,13.4 +2012-12-21,13.63 +2012-12-24,13.45 +2012-12-27,13.51 +2012-12-30,13.57 +2013-01-02,13.42 +2013-01-05,13.54 +2013-01-08,13.84 +2013-01-11,14.31 +2013-01-14,14.34 +2013-01-17,15.53 +2013-01-20,16.15 +2013-01-23,17.97 +2013-01-26,17.71 +2013-01-29,19.78 +2013-02-01,21.25 +2013-02-04,20.99 +2013-02-07,22.15 +2013-02-10,23.97 +2013-02-13,24.3 +2013-02-16,27.39 +2013-02-19,29.48 +2013-02-22,30.52 +2013-02-25,30.4 +2013-02-28,33.36 +2013-03-03,34.25 +2013-03-06,42 +2013-03-09,46.93 +2013-03-12,44.32 +2013-03-15,46.9 +2013-03-18,52.12 +2013-03-21,70.25 +2013-03-24,71.93 +2013-03-27,88.8 +2013-03-30,92.5 +2013-04-03,117.34 +2013-04-06,142.1 +2013-04-09,186.96 +2013-04-12,124.9 +2013-04-15,100 +2013-04-18,93.9 +2013-04-21,127.5 +2013-04-24,142.5 +2013-04-27,137 +2013-04-30,144.54 +2013-05-03,103.3 +2013-05-06,115.98 +2013-05-09,113.35 +2013-05-12,115.68 +2013-05-15,112 +2013-05-18,123.32 +2013-05-21,122.02 +2013-05-24,126.7 +2013-05-27,133.5 +2013-05-30,132.3 +2013-06-02,129.3 +2013-06-05,121.42 +2013-06-08,111.5 +2013-06-11,106.1 +2013-06-14,103.9 +2013-06-17,99.9 +2013-06-20,107.68 +2013-06-23,108.35 +2013-06-26,103.89 +2013-06-29,94.65 +2013-07-02,87 +2013-07-05,80.04 +2013-07-08,75 +2013-07-11,87.9 +2013-07-14,98 +2013-07-17,97.05 +2013-07-20,92 +2013-07-23,91.99 +2013-07-26,97 +2013-07-29,98.7 +2013-08-01,106.2 +2013-08-04,104.95 +2013-08-07,106.56 +2013-08-10,102.8 +2013-08-13,106.64 +2013-08-16,98.08 +2013-08-19,99.3 +2013-08-22,110.43 +2013-08-25,109.04 +2013-08-28,117.72 +2013-08-31,124.84 +2013-09-03,130.09 +2013-09-06,122.63 +2013-09-09,118.18 +2013-09-12,126.54 +2013-09-15,124.05 +2013-09-18,139.15 +2013-09-21,123.04 +2013-09-24,122.65 +2013-09-27,124.65 +2013-09-30,127.01 +2013-10-03,103.85 +2013-10-06,121.2 +2013-10-09,124.12 +2013-10-12,127.41 +2013-10-15,135.17 +2013-10-18,143.94 +2013-10-21,186.12 +2013-10-24,203.7 +2013-10-27,179.56 +2013-10-29,216 +2013-11-01,203 +2013-11-04,229.95 +2013-11-07,291.02 +2013-11-10,328 +2013-11-13,393 +2013-11-16,437.24 +2013-11-19,547 +2013-11-22,795 +2013-11-25,814.56 +2013-11-28,1014.1 +2013-12-01,955.01 +2013-12-04,1136.9 +2013-12-07,705.91 +2013-12-10,978.76 +2013-12-13,885 +2013-12-16,690 +2013-12-19,685.3 +2013-12-22,614.11 +2013-12-25,679.02 +2013-12-28,715 +2013-12-31,732 +2014-01-03,807.39 +2014-01-06,915.69 +2014-01-09,826.28 +2014-01-12,844.04 +2014-01-15,841.83 +2014-01-18,811.2 +2014-01-21,824.78 +2014-01-24,780.02 +2014-01-27,747.57 +2014-01-30,800 +2014-02-02,814.34 +2014-02-05,781 +2014-02-08,680.8 +2014-02-11,675.1 +2014-02-14,670.29 +2014-02-17,629.96 +2014-02-20,563 +2014-02-23,611.05 +2014-02-26,585.21 +2014-03-01,567.48 +2014-03-04,673.28 +2014-03-07,631.99 +2014-03-10,629.33 +2014-03-13,641.01 +2014-03-16,634.99 +2014-03-19,611.2 +2014-03-22,563.01 +2014-03-25,585.79 +2014-03-28,499.6 +2014-04-01,457.49 +2014-04-04,448.72 +2014-04-07,458 +2014-04-10,441.93 +2014-04-13,423.37 +2014-04-16,523 +2014-04-19,482.11 +2014-04-22,498.38 +2014-04-25,502.15 +2014-04-28,438.8 +2014-05-01,452.03 +2014-05-04,440 +2014-05-07,428.01 +2014-05-10,449 +2014-05-13,442.45 +2014-05-16,446.53 +2014-05-19,446.89 +2014-05-22,493.97 +2014-05-25,527.91 +2014-05-28,572.7 +2014-05-31,621.3 +2014-06-03,662 +2014-06-06,661.48 +2014-06-09,657.11 +2014-06-12,624.97 +2014-06-15,572.28 +2014-06-18,608 +2014-06-21,593.48 +2014-06-24,588.25 +2014-06-27,577.34 +2014-06-30,599.99 +2014-07-03,650.49 +2014-07-06,631 +2014-07-09,624.97 +2014-07-12,634 +2014-07-15,621.21 +2014-07-18,625.8 +2014-07-21,627 +2014-07-24,620.43 +2014-07-27,595.9 +2014-07-30,585.5 +2014-08-02,595.76 +2014-08-05,588.5 +2014-08-08,585.02 +2014-08-11,590.74 +2014-08-14,549.98 +2014-08-17,523.88 +2014-08-20,490 +2014-08-23,515.69 +2014-08-26,501.55 +2014-08-29,506.61 +2014-09-01,478.87 +2014-09-04,474.5 +2014-09-07,479.59 +2014-09-10,473.35 +2014-09-13,474.62 +2014-09-16,470.83 +2014-09-19,425.56 +2014-09-22,401.15 +2014-09-25,423.68 +2014-09-28,400.39 +2014-10-01,390.18 +2014-10-04,358.9 +2014-10-07,327.61 +2014-10-10,363.61 +2014-10-13,380.8 +2014-10-16,394.84 +2014-10-19,391 +2014-10-22,385.89 +2014-10-25,358.49 +2014-10-27,350.9 +2014-10-30,345.3 +2014-11-02,324.36 +2014-11-05,338.63 +2014-11-08,346.94 +2014-11-11,369.41 +2014-11-14,399.11 +2014-11-17,388.87 +2014-11-20,356.47 +2014-11-23,367.12 +2014-11-26,366.86 +2014-11-29,375.59 +2014-12-02,379.62 +2014-12-05,376 +2014-12-08,362.99 +2014-12-11,348.97 +2014-12-14,357.8 +2014-12-17,321.34 +2014-12-20,331.52 +2014-12-23,336.95 +2014-12-26,329.94 +2014-12-29,313.4 +2015-01-01,314.81 +2015-01-04,263.17 +2015-01-07,297.99 +2015-01-10,275.97 +2015-01-13,222 +2015-01-16,208.13 +2015-01-19,216.01 +2015-01-22,233.51 +2015-01-25,254.32 +2015-01-28,236.2 +2015-01-31,219.25 +2015-02-03,227.53 +2015-02-06,222.36 +2015-02-09,219.93 +2015-02-12,222.33 +2015-02-15,234.18 +2015-02-18,237.44 +2015-02-21,245.41 +2015-02-24,239.94 +2015-02-27,252.11 +2015-03-02,275.87 +2015-03-05,273.11 +2015-03-08,275 +2015-03-11,296.56 +2015-03-14,282.2 +2015-03-17,284.48 +2015-03-20,262.1 +2015-03-23,265.99 +2015-03-26,249.23 +2015-03-30,242.34 +2015-04-02,246.49 +2015-04-05,253.67 +2015-04-08,253.9 +2015-04-11,236 +2015-04-14,223.01 +2015-04-17,227.5 +2015-04-20,222.61 +2015-04-23,233.59 +2015-04-26,226.29 +2015-04-29,225.2 +2015-05-02,230.97 +2015-05-05,238.25 +2015-05-08,237.16 +2015-05-11,239.11 +2015-05-14,235.97 +2015-05-17,236.63 +2015-05-20,231.4 +2015-05-23,238.8 +2015-05-26,235.59 +2015-05-29,236.44 +2015-06-01,228.34 +2015-06-04,225.4 +2015-06-07,224.99 +2015-06-10,228.88 +2015-06-13,229.6 +2015-06-16,236 +2015-06-19,248.26 +2015-06-22,243.55 +2015-06-25,240.2 +2015-06-28,251.21 +2015-07-01,262.43 +2015-07-04,256.12 +2015-07-07,268.53 +2015-07-10,269 +2015-07-13,310.55 +2015-07-16,285.66 +2015-07-19,276.74 +2015-07-22,276.76 +2015-07-25,289 +2015-07-28,293.93 +2015-07-31,288.45 +2015-08-03,282.26 +2015-08-06,281 +2015-08-09,262.22 +2015-08-12,270.98 +2015-08-15,265.93 +2015-08-18,256.66 +2015-08-21,235.31 +2015-08-24,228.14 +2015-08-27,225.04 +2015-08-30,229.63 +2015-09-02,227.97 +2015-09-05,230.73 +2015-09-08,240.47 +2015-09-11,238.81 +2015-09-14,230 +2015-09-17,228.33 +2015-09-20,230.25 +2015-09-23,230.42 +2015-09-26,235.22 +2015-09-29,239.14 +2015-10-02,238.03 +2015-10-05,238.4 +2015-10-08,243.01 +2015-10-11,245.72 +2015-10-14,249.98 +2015-10-17,262.26 +2015-10-20,263.59 +2015-10-23,274.35 +2015-10-25,282.8 +2015-10-28,304.79 +2015-10-31,310.18 +2015-11-03,404.5 +2015-11-06,373.69 +2015-11-09,380.62 +2015-11-12,340.81 +2015-11-15,318.97 +2015-11-18,333.66 +2015-11-21,326.31 +2015-11-24,319.64 +2015-11-27,358 +2015-11-30,377.27 +2015-12-03,361.47 +2015-12-06,387.3 +2015-12-09,416.49 +2015-12-12,436.2 +2015-12-15,463.98 +2015-12-18,463 +2015-12-21,438.35 +2015-12-24,456 +2015-12-27,422.42 +2015-12-30,428.23 +2016-01-02,432.76 +2016-01-05,432.43 +2016-01-08,452.64 +2016-01-11,447.98 +2016-01-14,429.55 +2016-01-17,380.16 +2016-01-20,420.35 +2016-01-23,385.09 +2016-01-26,391.66 +2016-01-29,378.18 +2016-02-01,371.99 +2016-02-04,388 +2016-02-07,375 +2016-02-10,379.14 +2016-02-13,389.88 +2016-02-16,407 +2016-02-19,419.98 +2016-02-22,436.76 +2016-02-25,423.46 +2016-02-28,431.89 +2016-03-02,422.5 +2016-03-05,399.17 +2016-03-08,412.15 +2016-03-11,420.11 +2016-03-14,414.99 +2016-03-17,418.49 +2016-03-20,411.81 +2016-03-23,417.96 +2016-03-26,416.96 +2016-03-30,415.83 +2016-04-02,416.31 +2016-04-05,419.71 +2016-04-08,419.95 +2016-04-11,420.75 +2016-04-14,423.87 +2016-04-17,430.58 +2016-04-20,435.95 +2016-04-23,447.7 +2016-04-26,462.5 +2016-04-29,449.98 +2016-05-02,453 +2016-05-05,446.84 +2016-05-08,459.02 +2016-05-11,450.78 +2016-05-14,455.82 +2016-05-17,454 +2016-05-20,436.05 +2016-05-23,438.47 +2016-05-26,448.7 +2016-05-29,526.64 +2016-06-01,531.97 +2016-06-04,567.88 +2016-06-07,583.72 +2016-06-10,574.32 +2016-06-13,665.85 +2016-06-16,693.88 +2016-06-19,751.96 +2016-06-22,664.46 +2016-06-25,665 +2016-06-28,651.85 +2016-07-01,667.95 +2016-07-04,656.97 +2016-07-07,673.76 +2016-07-10,647.41 +2016-07-13,664.5 +2016-07-16,663.19 +2016-07-19,673.46 +2016-07-22,664 +2016-07-25,661.48 +2016-07-28,655.37 +2016-07-31,654.68 +2016-08-03,530.74 +2016-08-06,572.72 +2016-08-09,591.69 +2016-08-12,586.01 +2016-08-15,567.34 +2016-08-18,570.92 +2016-08-21,577.52 +2016-08-24,581.98 +2016-08-27,577.77 +2016-08-30,571.5 +2016-09-02,571 +2016-09-05,603.95 +2016-09-08,615.33 +2016-09-11,621.65 +2016-09-14,608.82 +2016-09-17,607.04 +2016-09-20,608.66 +2016-09-23,594.08 +2016-09-26,598.98 +2016-09-29,603.85 +2016-10-02,612.98 +2016-10-05,607.18 +2016-10-08,614.74 +2016-10-11,614.77 +2016-10-14,634.02 +2016-10-17,638.97 +2016-10-20,627.72 +2016-10-23,653.25 +2016-10-26,651.45 +2016-10-29,685.91 +2016-10-31,697.01 +2016-11-03,683.69 +2016-11-06,709.96 +2016-11-09,721.5 +2016-11-12,702.28 +2016-11-15,711.73 +2016-11-18,748.98 +2016-11-21,736.97 +2016-11-24,735.64 +2016-11-27,727.31 +2016-11-30,742.05 +2016-12-03,762.97 +2016-12-06,758.99 +2016-12-09,769.08 +2016-12-12,777.99 +2016-12-15,775.88 +2016-12-18,788.67 +2016-12-21,834.97 +2016-12-24,892.6 +2016-12-27,930.34 +2016-12-30,958.12 +2017-01-02,1013.42 +2017-01-05,999.65 +2017-01-08,910.49 +2017-01-11,780.92 +2017-01-14,819.55 +2017-01-17,906.6 +2017-01-20,895.64 +2017-01-23,919.97 +2017-01-26,915.05 +2017-01-29,912.19 +2017-02-01,983.42 +2017-02-04,1034.07 +2017-02-07,1052.84 +2017-02-10,997.59 +2017-02-13,1001.2 +2017-02-16,1035.2 +2017-02-19,1050.87 +2017-02-22,1130.01 +2017-02-25,1150.37 +2017-02-28,1190.89 +2017-03-03,1287 +2017-03-06,1279.5 +2017-03-09,1192.09 +2017-03-12,1227.68 +2017-03-15,1257 +2017-03-18,967.69 +2017-03-21,1113 +2017-03-24,927.93 +2017-03-28,1041.04 +2017-03-31,1034.74 +2017-04-03,1079.99 +2017-04-06,1133.53 +2017-04-09,1184.03 +2017-04-12,1219.09 +2017-04-15,1170.36 +2017-04-18,1176.97 +2017-04-21,1236.63 +2017-04-24,1240.84 +2017-04-27,1288.02 +2017-04-30,1333 +2017-05-03,1447.55 +2017-05-06,1518.75 +2017-05-09,1651.1 +2017-05-12,1829 +2017-05-15,1780 +2017-05-18,1783.98 +2017-05-21,2008.84 +2017-05-24,2256.32 +2017-05-27,2279.82 +2017-05-30,2290.02 +2017-06-02,2409.93 +2017-06-05,2529.53 +2017-06-08,2683.03 +2017-06-11,2898.63 +2017-06-14,2706 +2017-06-17,2477.94 +2017-06-20,2600 +2017-06-23,2713.48 +2017-06-26,2502.03 +2017-06-29,2558.3 +2017-07-02,2421.26 +2017-07-05,2598.89 +2017-07-08,2502.86 +2017-07-11,2327.09 +2017-07-14,2338.49 +2017-07-17,1910.96 +2017-07-20,2265.21 +2017-07-23,2825.51 +2017-07-26,2564.3 +2017-07-29,2784.8 +2017-08-01,2862.9 +2017-08-04,2790 +2017-08-07,3210.2 +2017-08-10,3340.28 +2017-08-13,3868.52 +2017-08-16,4179.97 +2017-08-19,4104.71 +2017-08-22,3986.28 +2017-08-25,4331.77 +2017-08-28,4339.05 +2017-08-31,4582.52 +2017-09-03,4585.57 +2017-09-06,4385.02 +2017-09-09,4312.26 +2017-09-12,4198.59 +2017-09-15,3216.43 +2017-09-18,3678.53 +2017-09-21,3894.48 +2017-09-24,3777.62 +2017-09-27,3881 +2017-09-30,4164.27 +2017-10-03,4394.07 +2017-10-06,4318.58 +2017-10-09,4605.66 +2017-10-12,4822.17 +2017-10-15,5825.99 +2017-10-18,5594.66 +2017-10-21,5986.44 +2017-10-24,5900.59 +2017-10-27,5889.82 +2017-10-29,6136.49 +2017-11-01,6751.98 +2017-11-04,7365.99 +2017-11-07,7128.64 +2017-11-10,6569.22 +2017-11-13,6493.63 +2017-11-16,7868.77 +2017-11-19,8049.72 +2017-11-22,8236.72 +2017-11-25,8768.8 +2017-11-28,9919 +2017-12-01,10879.88 +2017-12-04,11591.22 +2017-12-07,16860.88 +2017-12-10,15068.95 +2017-12-13,16252.31 +2017-12-16,19279.9 +2017-12-19,17382.94 +2017-12-22,13776.61 +2017-12-25,13740.94 +2017-12-28,14214.01 +2017-12-31,13796 +2018-01-03,15039.24 +2018-01-06,17155.95 +2018-01-09,14437.42 +2018-01-12,13791.19 +2018-01-15,13554.14 +2018-01-18,11174.82 +2018-01-21,11513.42 +2018-01-24,11392.03 +2018-01-27,11431.37 +2018-01-30,10082.52 +2018-02-02,8852.73 +2018-02-05,6925.46 +2018-02-08,8245.08 +2018-02-11,8068.02 +2018-02-14,9471.64 +2018-02-17,11085.83 +2018-02-20,11245.98 +2018-02-23,10171.3 +2018-02-26,10319.46 +2018-03-01,10931.12 +2018-03-04,11516.83 +2018-03-07,9920.46 +2018-03-10,8777.37 +2018-03-13,9153.54 +2018-03-16,8297.89 +2018-03-19,8605.64 +2018-03-22,8725.37 +2018-03-26,8457.96 +2018-03-29,7950.61 +2018-04-01,6937.56 +2018-04-04,7426.48 +2018-04-07,6634.68 +2018-04-10,6784.41 +2018-04-13,7941.46 +2018-04-16,8368.1 +2018-04-19,8175.96 +2018-04-22,8930.6 +2018-04-25,9658.11 +2018-04-28,8928.55 +2018-05-01,9239.55 +2018-05-04,9753.35 +2018-05-07,9631.44 +2018-05-10,9310.37 +2018-05-13,8463.52 +2018-05-16,8471.06 +2018-05-19,8239.08 +2018-05-22,8396.63 +2018-05-25,7576.78 +2018-05-28,7344.56 +2018-05-31,7386.72 +2018-06-03,7637.14 +2018-06-06,7619.43 +2018-06-09,7615.54 +2018-06-12,6879.31 +2018-06-15,6637.41 +2018-06-18,6445.79 +2018-06-21,6760.83 +2018-06-24,6170.46 +2018-06-27,6097.46 +2018-06-30,6223.28 +2018-07-03,6626.44 +2018-07-06,6555.51 +2018-07-09,6724.04 +2018-07-12,6403.18 +2018-07-15,6248.84 +2018-07-18,7321.62 +2018-07-21,7334.99 +2018-07-24,7715.1 +2018-07-27,7939.81 +2018-07-30,8220.91 +2018-08-02,7607.7 +2018-08-05,7011.28 +2018-08-08,6718.23 +2018-08-11,6138.96 +2018-08-14,6252.13 +2018-08-17,6312.75 +2018-08-20,6486.58 +2018-08-23,6354.57 +2018-08-26,6738.27 +2018-08-29,7078.19 +2018-09-01,7018.78 +2018-09-04,7265.08 +2018-09-07,6501.19 +2018-09-10,6240.98 +2018-09-13,6326.04 +2018-09-16,6522.39 +2018-09-19,6342.39 +2018-09-22,6756.12 +2018-09-25,6583.45 +2018-09-28,6686.08 +2018-10-01,6611.02 +2018-10-04,6483.73 +2018-10-07,6573.62 +2018-10-10,6626.85 +2018-10-13,6247 +2018-10-16,6599.17 +2018-10-19,6509.61 +2018-10-22,6504.78 +2018-10-25,6489.77 +2018-10-28,6457.21 +2018-10-30,6301.61 +2018-11-02,6390.42 +2018-11-05,6437.76 +2018-11-08,6444.97 +2018-11-11,6408.53 +2018-11-14,5756.77 +2018-11-17,5572.44 +2018-11-20,4491.98 +2018-11-23,4352.98 +2018-11-26,3793.35 +2018-11-29,4278.77 +2018-12-02,4140.6 +2018-12-05,3744.98 +2018-12-08,3453.66 +2018-12-11,3407.28 +2018-12-14,3242.42 +2018-12-17,3556.54 +2018-12-20,4135.19 +2018-12-23,3995.17 +2018-12-26,3848.21 +2018-12-29,3770.36 +2019-01-01,3855.88 +2019-01-04,3856.62 +2019-01-07,4032.25 +2019-01-10,3646.25 +2019-01-13,3531.96 +2019-01-16,3621.43 +2019-01-19,3703.98 +2019-01-22,3587.35 +2019-01-25,3577.79 +2019-01-28,3448.58 +2019-01-31,3444.81 +2019-02-03,3456.02 +2019-02-06,3405.7 +2019-02-09,3664.38 +2019-02-12,3632.42 +2019-02-15,3608.2 +2019-02-18,3910.8 +2019-02-21,3944.88 +2019-02-24,3766.89 +2019-02-27,3833.23 +2019-03-02,3831.44 +2019-03-05,3872.25 +2019-03-08,3875.96 +2019-03-11,3881.09 +2019-03-14,3885.21 +2019-03-17,3994.92 +2019-03-20,4056.4 +2019-03-23,4011.92 +2019-03-26,3947.74 +2019-03-29,4115.55 +2019-04-02,4152.53 +2019-04-05,4911.24 +2019-04-08,5189.39 +2019-04-11,5310.18 +2019-04-14,5064.62 +2019-04-17,5196.65 +2019-04-20,5277.04 +2019-04-23,5377.19 +2019-04-26,5195.61 +2019-04-29,5301.29 +2019-05-02,5326.67 +2019-05-05,5771.08 +2019-05-08,5755.72 +2019-05-11,6348.02 +2019-05-14,7823.11 +2019-05-17,7885.96 +2019-05-20,8193.7 +2019-05-23,7625.93 +2019-05-26,8071.45 +2019-05-29,8719.88 +2019-06-01,8553.81 +2019-06-04,8134.92 +2019-06-07,7803.23 +2019-06-10,7640.61 +2019-06-13,8173.06 +2019-06-16,8859.47 +2019-06-19,9076.18 +2019-06-22,10209.38 +2019-06-25,11017.5 +2019-06-28,11132.85 +2019-07-01,10737.73 +2019-07-04,11984.76 +2019-07-07,11232.04 +2019-07-10,12586.78 +2019-07-13,11803.97 +2019-07-16,10873.5 +2019-07-19,10638.56 +2019-07-22,10587.41 +2019-07-25,9772.17 +2019-07-28,9473.99 +2019-07-31,9589.13 +2019-08-03,10529.55 +2019-08-06,11787.99 +2019-08-09,11996.41 +2019-08-12,11566.84 +2019-08-15,10016.96 +2019-08-18,10214.52 +2019-08-21,10760.56 +2019-08-24,10405.81 +2019-08-27,10360.28 +2019-08-30,9484.55 +2019-09-02,9769.79 +2019-09-05,10584.16 +2019-09-08,10487.21 +2019-09-11,10101.03 +2019-09-14,10363.9 +2019-09-17,10265.63 +2019-09-20,10275.88 +2019-09-23,10033.05 +2019-09-26,8432.23 +2019-09-29,8225 +2019-10-02,8322.92 +2019-10-05,8155.48 +2019-10-08,8212.02 +2019-10-11,8586.9 +2019-10-14,8283.76 +2019-10-17,8002.51 +2019-10-20,7960.04 +2019-10-23,8026.76 +2019-10-26,8666.79 +2019-10-28,9218.76 +2019-10-31,9147.98 +2019-11-03,9206.16 +2019-11-06,9343.34 +2019-11-09,8809.41 +2019-11-12,8801.52 +2019-11-15,8457.69 +2019-11-18,8175.99 +2019-11-21,7617.07 +2019-11-24,6907.4 +2019-11-27,7523.83 +2019-11-30,7557.72 +2019-12-03,7296.77 +2019-12-06,7547.19 +2019-12-09,7337.42 +2019-12-12,7189.16 +2019-12-15,7111.14 +2019-12-18,7284.29 +2019-12-21,7143.2 +2019-12-24,7250.69 +2019-12-27,7243.93 +2019-12-30,7219.6 +2020-01-02,6944.33 +2020-01-05,7351.57 +2020-01-08,8042.65 +2020-01-11,8021.49 +2020-01-14,8842.42 +2020-01-17,8900.34 +2020-01-20,8626.47 +2020-01-23,8388.11 +2020-01-26,8588.42 +2020-01-29,9279.81 +2020-02-01,9378.09 +2020-02-04,9162.14 +2020-02-07,9807.54 +2020-02-10,9854.79 +2020-02-13,10242.43 +2020-02-16,9937.67 +2020-02-19,9604.72 +2020-02-22,9669.63 +2020-02-25,9309.15 +2020-02-28,8712.35 +2020-03-02,8912.82 +2020-03-05,9067.39 +2020-03-08,8039.38 +2020-03-11,7936.65 +2020-03-14,5166.26 +2020-03-17,5357.61 +2020-03-20,6226.44 +2020-03-23,6502.16 +2020-03-26,6763.75 +2020-03-30,5885.41 +2020-04-02,6652.87 +2020-04-05,6871.69 +2020-04-08,7205.55 +2020-04-11,6873.24 +2020-04-14,6857.66 +2020-04-17,7112.27 +2020-04-20,7130.04 +2020-04-23,7130.99 +2020-04-26,7549.52 +2020-04-29,7765.33 +2020-05-02,8824.66 +2020-05-05,8885.93 +2020-05-08,10002.48 +2020-05-11,8754.46 +2020-05-14,9305.93 +2020-05-17,9385.7 +2020-05-20,9785.74 +2020-05-23,9167.26 +2020-05-26,8899.66 +2020-05-29,9569.21 +2020-06-01,9450.84 +2020-06-04,9658.04 +2020-06-07,9670.43 +2020-06-10,9775.15 +2020-06-13,9459.97 +2020-06-16,9426.7 +2020-06-19,9380.03 +2020-06-22,9284.78 +2020-06-25,9276.58 +2020-06-28,9004.23 +2020-07-01,9133.97 +2020-07-04,9072.42 +2020-07-07,9348.91 +2020-07-10,9238.04 +2020-07-13,9295.9 +2020-07-16,9193.51 +2020-07-19,9174.71 +2020-07-22,9392.66 +2020-07-25,9551.28 +2020-07-28,11042.4 +2020-07-31,11114.93 +2020-08-03,11077.77 +2020-08-06,11750.28 +2020-08-09,11767.6 +2020-08-12,11392.43 +2020-08-15,11774.38 +2020-08-18,12293.72 +2020-08-21,11865.82 +2020-08-24,11653.02 +2020-08-27,11467.37 +2020-08-30,11481.64 +2020-09-02,11923.25 +2020-09-05,10467.89 +2020-09-08,10367.74 +2020-09-11,10352.66 +2020-09-14,10330.77 +2020-09-17,10948.43 +2020-09-20,11081.43 +2020-09-23,10532.22 +2020-09-26,10692.84 +2020-09-29,10692.33 +2020-10-02,10619.24 +2020-10-05,10673.46 +2020-10-08,10670.8 +2020-10-11,11302.67 +2020-10-14,11428.24 +2020-10-17,11327.57 +2020-10-20,11758.16 +2020-10-23,12990.25 +2020-10-25,13036.77 +2020-10-28,13289 +2020-10-31,13810.32 +2020-11-03,14023.31 +2020-11-06,15595.77 +2020-11-09,15328.53 +2020-11-12,16295.57 +2020-11-15,15968.16 +2020-11-18,17798.45 +2020-11-21,18699.75 +2020-11-24,19172.52 +2020-11-27,17138.87 +2020-11-30,19709.73 +2020-12-03,19454.54 +2020-12-06,19377.66 +2020-12-09,18554.15 +2020-12-12,18803.44 +2020-12-15,19439.75 +2020-12-18,23150.79 +2020-12-21,22745.48 +2020-12-24,23715.53 +2020-12-27,26246.58 +2020-12-30,28856.59 +2021-01-02,32195.46 +2021-01-05,34046.67 +2021-01-08,40670.25 +2021-01-11,35544.94 +2021-01-14,39158.47 +2021-01-17,35793.01 +2021-01-20,35538.98 +2021-01-23,32099.74 +2021-01-26,32541.8 +2021-01-29,34314.26 +2021-02-01,33522.9 +2021-02-04,37002.09 +2021-02-07,38928.1 +2021-02-10,44878.17 +2021-02-13,47185.19 +2021-02-16,49160.1 +2021-02-19,55916.5 +2021-02-22,54123.4 +2021-02-25,46800.42 +2021-02-28,45113.92 +2021-03-03,50477.7 +2021-03-06,48881.59 +2021-03-09,54881.52 +2021-03-12,57253.28 +2021-03-15,55754.72 +2021-03-18,57665.9 +2021-03-21,57411.17 +2021-03-24,52508.23 +2021-03-27,55863.93 +2021-03-31,58730.13 +2021-04-03,59031.32 +2021-04-06,59054.1 +2021-04-09,58048.59 +2021-04-12,59964.87 +2021-04-15,62969.12 +2021-04-18,60087.09 +2021-04-21,56507.91 +2021-04-24,51153.13 +2021-04-27,54056.64 +2021-04-30,53584.15 +2021-05-03,56610.46 +2021-05-06,57473.23 +2021-05-09,58928.81 +2021-05-12,56750 +2021-05-15,49922.52 +2021-05-18,43596.24 +2021-05-21,40784.32 +2021-05-24,34754.54 +2021-05-27,39266.04 +2021-05-30,34647.67 +2021-06-02,36662.64 +2021-06-05,36885.51 +2021-06-08,33514.87 +2021-06-11,36704.57 +2021-06-14,39066.82 +2021-06-17,38324.87 +2021-06-20,35524.17 +2021-06-23,32447.59 +2021-06-26,31640.58 +2021-06-29,34456.67 +2021-07-02,33536.88 +2021-07-05,35309.3 +2021-07-08,33839.04 +2021-07-11,33515.57 +2021-07-14,32686.56 +2021-07-17,31421.25 +2021-07-20,30815.94 +2021-07-23,32297.89 +2021-07-26,35365.2 +2021-07-29,40002.53 +2021-08-01,41659.06 +2021-08-04,38138 +2021-08-07,42825.95 +2021-08-10,46333.46 +2021-08-13,44417.78 +2021-08-16,47056.41 +2021-08-19,44777.86 +2021-08-22,48932.02 +2021-08-25,47744.58 +2021-08-28,49056.86 +2021-08-31,47074.77 +2021-09-03,49329.01 +2021-09-06,51769.06 +2021-09-09,46078.38 +2021-09-12,45144.79 +2021-09-15,47072.12 +2021-09-18,47263.6 +2021-09-21,42901.56 +2021-09-24,44888.96 +2021-09-27,43182.63 +2021-09-30,41522.38 +2021-10-03,47727.1 +2021-10-06,51505.83 +2021-10-09,53867.3 +2021-10-12,57452.01 +2021-10-15,57397.74 +2021-10-18,61546.21 +2021-10-21,66063.56 +2021-10-24,61277.28 +2021-10-27,60345.17 +2021-10-30,62249.18 +2021-11-01,61029.5 +2021-11-04,61441.83 +2021-11-07,63293.22 +2021-11-10,64976.73 +2021-11-13,64420.94 +2021-11-16,60172.26 +2021-11-19,58133.02 +2021-11-22,56301.52 +2021-11-25,58935.45 +2021-11-28,57292.28 +2021-12-01,57229.76 +2021-12-04,49253.86 +2021-12-07,50645.41 +2021-12-10,47137.46 +2021-12-13,46757.09 +2021-12-16,47658.38 +2021-12-19,46689.28 +2021-12-22,48628.35 +2021-12-25,50470.89 +2021-12-28,47601.26 +2021-12-31,46249.56 +2022-01-03,46441.99 +2022-01-06,43120.63 +2022-01-09,41864.44 +2022-01-12,43926 +2022-01-15,43146.53 +2022-01-18,42381.48 +2022-01-21,36480.85 +2022-01-24,36678.82 +2022-01-27,37146.85 +2022-01-30,37918.62 +2022-02-02,36912.68 +2022-02-05,41435.43 +2022-02-08,44133.28 +2022-02-11,42401.27 +2022-02-14,42580.94 +2022-02-17,40565.69 +2022-02-20,38382.32 +2022-02-23,37291.48 +2022-02-26,39103.91 +2022-03-01,44418.83 +2022-03-04,39141.25 +2022-03-07,38032.5 +2022-03-10,39437.89 +2022-03-13,37820.39 +2022-03-16,41133.08 +2022-03-19,42222.32 +2022-03-22,42372.67 +2022-03-25,44334.33 +2022-03-29,47115.93 diff --git a/ex00/input.txt b/ex00/input.txt new file mode 100644 index 0000000..3c0b3ec --- /dev/null +++ b/ex00/input.txt @@ -0,0 +1,10 @@ +date | value +2011-01-03 | 3 +2011-01-03 | 2 +2011-01-03 | 1 +2011-01-03 | 1.2 +2011-01-09 | 1 +2012-01-11 | -1 +2001-42-42 +2012-01-11 | 1 +2012-01-11 | 2147483648 diff --git a/ex00/main.cpp b/ex00/main.cpp new file mode 100644 index 0000000..595307e --- /dev/null +++ b/ex00/main.cpp @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/05/21 10:34:50 by adjoly #+# #+# */ +/* Updated: 2025/05/30 20:30:28 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include + +int main(int ac, char **av) { + (void)av; + if (ac > 1) { + CsvParser *parser; + try { + parser = new CsvParser(); + } catch (std::exception &e) { + std::cerr << "Error: " << e.what() << std::endl; + } + } else { + std::cout << "Error: could not open file." << std::endl; + } +} diff --git a/flake.nix b/flake.nix index 1d23a50..e71688b 100644 --- a/flake.nix +++ b/flake.nix @@ -15,15 +15,17 @@ }); in { devShells = forEachSupportedSystem ({ pkgs }: { - default = pkgs.mkShell.override - {} + default = pkgs.mkShell { + nativeBuildInputs = with pkgs; [ + llvmPackages_12.clang-tools + gcc11 + clang_12 + ]; hardeningDisable = [ "all" ]; packages = with pkgs; [ git gdb - gcc11 - clang_12 valgrind compiledb norminette