From 8d6945d0f1acebef3eb38f2ad026e8d06efd867d Mon Sep 17 00:00:00 2001 From: Lucas Date: Mon, 13 Apr 2026 00:17:18 +0200 Subject: [PATCH] crepe_stream.c --- functional_market/Fundamentals/crepe_stream.c | 322 +++++++++++++++++- functional_market/Fundamentals/test | Bin 20720 -> 0 bytes 2 files changed, 312 insertions(+), 10 deletions(-) delete mode 100755 functional_market/Fundamentals/test diff --git a/functional_market/Fundamentals/crepe_stream.c b/functional_market/Fundamentals/crepe_stream.c index f5a8863..52ab91a 100644 --- a/functional_market/Fundamentals/crepe_stream.c +++ b/functional_market/Fundamentals/crepe_stream.c @@ -1,32 +1,334 @@ #include "crepe_stream.h" - +#include #include "toolbox.h" +//############################# +// FCT AUX +// ############################ +typedef int (*comparator)(void *, void *); + +char *topping(enum topping topping){ +// C'est mooooche :/ /FIXME A refaire + + if(topping == NOTHING) return"nothing"; + else if(topping == SUGAR) return"sugar"; + else if (topping == CHOCOLATE) return"chocolate"; + else if (topping == WHIPPED_CREAM) return"whipped cream"; + else if (topping == CHEESE) return"cheese"; + else if (topping == MEAT) return"meat"; + else if(topping == EGG) return"egg"; + else return "WTF Rien ?? un topping de None ?"; + +} + +char *dough(enum dough dough){ +// c'est mooooche, j'iame pas raah //FIXME + + if (dough == WHEAT) return "wheat"; + else if (dough == BUCKWHEAT) return "buckwheat"; + else return "WTF encore rien..."; +} + +void print_arr(struct crepe *crepe){ + + printf("%s: $%i\n", crepe->name, crepe->price); + printf("- Made out of %s\n", dough(crepe->dough)); + printf("- Contains %s with %s on top\n", topping(crepe->inside), topping(crepe->outside)); +} + +int lower(struct crepe *a, struct crepe *b){ + + if (a->price % 2 == 0 && b->price % 2 != 0) return -1; + else if (a->price % 2 != 0 && b->price % 2 == 0) return 1; + else if (a->price % 2 == 0 && b->price % 2 ==0) return a->price - b->price; + else return b->price - a->price; +} + +void name(void *a, void *b){ + + struct crepe *c = b; + char **rslt = a; + *rslt = c->name; +} + +int contain_meat(void *ptr){ + + struct crepe *crepe = ptr; + + if(crepe->inside == MEAT || crepe->outside == MEAT) return 0; + return 1; + +} + +void *clc_price(void *acc, void *elem){ + + int *tot = acc; + struct crepe *c = elem; + *tot += c->price; + return tot; +} + +//######################## +//FCT TP +//######################## struct array *sort_by_prices(struct array *arr) { - (void)arr; - return NULL; + arr = sort(arr, (comparator)lower); + return arr; } struct array *names(struct array *arr) { - (void)arr; - return NULL; + return map(arr, sizeof(char *), (mapper)name); } struct array *vegetarian(struct array *arr) { - (void)arr; - return NULL; + return filter(arr, (predicate)contain_meat); } int total_price(struct array *arr) { - (void)arr; - return 0; + int total = 0; + reduce(arr, &total, (reducer)clc_price); + return total; } void print_menu(struct array *arr) { - (void)arr; + foreach(arr, (acceptor)&print_arr); + } + +#include + +int main(void) +{ + struct array arr = { + .elem_size = sizeof(struct crepe), + .len = 4, + .data = calloc(4, sizeof(struct crepe)), + }; + struct crepe *data = arr.data; + data[0] = (struct crepe){ + .name = "Dairy", + .dough = BUCKWHEAT, + .inside = CHEESE, + .outside = EGG, + .price = 5, + }; + data[1] = (struct crepe){ + .name = "Raclette", + .dough = BUCKWHEAT, + .inside = CHEESE, + .outside = MEAT, + .price = 8, + }; + data[2] = (struct crepe){ + .name = "Choco", + .dough = WHEAT, + .inside = CHOCOLATE, + .outside = WHIPPED_CREAM, + .price = 6, + }; + data[3] = (struct crepe){ + .name = "Sugary", + .dough = WHEAT, + .inside = SUGAR, + .outside = NOTHING, + .price = 7, + }; + + printf("%d\n", total_price(&arr)); + + free(arr.data); +} + + +/* +#include + +int main(void) +{ + struct array arr = { + .elem_size = sizeof(struct crepe), + .len = 4, + .data = calloc(4, sizeof(struct crepe)), + }; + struct crepe *data = arr.data; + data[0] = (struct crepe){ + .name = "Dairy", + .dough = BUCKWHEAT, + .inside = CHEESE, + .outside = EGG, + .price = 5, + }; + data[1] = (struct crepe){ + .name = "Raclette", + .dough = BUCKWHEAT, + .inside = CHEESE, + .outside = MEAT, + .price = 8, + }; + data[2] = (struct crepe){ + .name = "Choco", + .dough = WHEAT, + .inside = CHOCOLATE, + .outside = WHIPPED_CREAM, + .price = 6, + }; + data[3] = (struct crepe){ + .name = "Sugary", + .dough = WHEAT, + .inside = SUGAR, + .outside = NOTHING, + .price = 7, + }; + + print_menu(vegetarian(&arr)); + + free(arr.data); +} +*/ + +/* +#include + +void print_string(char **str) +{ + puts(*str); +} + +int main(void) +{ + struct array arr = { + .elem_size = sizeof(struct crepe), + .len = 4, + .data = calloc(4, sizeof(struct crepe)), + }; + struct crepe *data = arr.data; + data[0] = (struct crepe){ + .name = "Dairy", + .dough = BUCKWHEAT, + .inside = CHEESE, + .outside = EGG, + .price = 5, + }; + data[1] = (struct crepe){ + .name = "Raclette", + .dough = BUCKWHEAT, + .inside = CHEESE, + .outside = MEAT, + .price = 8, + }; + data[2] = (struct crepe){ + .name = "Choco", + .dough = WHEAT, + .inside = CHOCOLATE, + .outside = WHIPPED_CREAM, + .price = 6, + }; + data[3] = (struct crepe){ + .name = "Sugary", + .dough = WHEAT, + .inside = SUGAR, + .outside = NOTHING, + .price = 7, + }; + + foreach(names(&arr), (acceptor)&print_string); + + free(arr.data); +} +*/ + +/* +#include + +int main(void) +{ + struct array arr = { + .elem_size = sizeof(struct crepe), + .len = 4, + .data = calloc(4, sizeof(struct crepe)), + }; + struct crepe *data = arr.data; + data[0] = (struct crepe){ + .name = "Dairy", + .dough = BUCKWHEAT, + .inside = CHEESE, + .outside = EGG, + .price = 5, + }; + data[1] = (struct crepe){ + .name = "Raclette", + .dough = BUCKWHEAT, + .inside = CHEESE, + .outside = MEAT, + .price = 8, + }; + data[2] = (struct crepe){ + .name = "Choco", + .dough = WHEAT, + .inside = CHOCOLATE, + .outside = WHIPPED_CREAM, + .price = 6, + }; + data[3] = (struct crepe){ + .name = "Sugary", + .dough = WHEAT, + .inside = SUGAR, + .outside = NOTHING, + .price = 7, + }; + + print_menu(sort_by_prices(&arr)); + + free(arr.data); +} +*/ +/* +#include + +int main(void) +{ + struct array arr = { + .elem_size = sizeof(struct crepe), + .len = 4, + .data = calloc(4, sizeof(struct crepe)), + }; + struct crepe *data = arr.data; + data[0] = (struct crepe){ + .name = "Dairy", + .dough = BUCKWHEAT, + .inside = CHEESE, + .outside = EGG, + .price = 5, + }; + data[1] = (struct crepe){ + .name = "Raclette", + .dough = BUCKWHEAT, + .inside = CHEESE, + .outside = MEAT, + .price = 8, + }; + data[2] = (struct crepe){ + .name = "Choco", + .dough = WHEAT, + .inside = CHOCOLATE, + .outside = WHIPPED_CREAM, + .price = 6, + }; + data[3] = (struct crepe){ + .name = "Sugary", + .dough = WHEAT, + .inside = SUGAR, + .outside = NOTHING, + .price = 7, + }; + + print_menu(&arr); + + free(arr.data); +} +*/ diff --git a/functional_market/Fundamentals/test b/functional_market/Fundamentals/test deleted file mode 100755 index ab8fa6773d45c5cedccfd39df48b08ecd54f191c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20720 zcmeHP3vg7|c|LbnS6U>Y)r)s*Ef{S4*p&oA7Pe(pfM8__Z4@ z8yP{y8-F^m`szAQ^zBvPE7ouvXglG{pYc| zy4EFW(wWS3bTs$==YOB`pR?zl`}lRFbIT^1rZH9Q>`q2lQ;nc_B_p+2Rsg)Ljm^dR zdbWa<0x#h-!S@OPt|*sm)1gDs?SQ1WkSa64U4qOMR4pV(dR8S>DL4wUYJroUPF0DU z;ks6)GhR)?bBhu?Dv3#N{_-tdc#t0Sn4U*B;%=|iYLW{ zj;EL5Gz0WeOG_ensJkuN9BYlN z4j$-_x_f$K-9h&%PfL?~RdZV-u*TkyyEm4|^}GAqTHUQJo=noSirb~1)gl};-4<{P zWAh~>P>Z7s$3h%5Ml_x0;Hbwzh4km)s32s9Lh+(5seTwmjPa|I3^o1ew^4_K;xvxWS>TF5_T zA-~B&{y#0~doAo7v5E~LsYBoez=TdLYblor6OYTK z!>J^i(whu~+E_f$+nWrsNID#5>99cFE7xMu0F{Qm`kU_iL5(w2s0qwm^nyG>}`M83T;#m^rpL`hi{F=n+`TT5IPu) zgnELJ{kNw2qx*ZCBZnVw_XLCP<`&OtPZL&kEbg&xOj6D8XE)T1bXB*3FN%g0^~XTe z_36teAH%Y0XXBEVTO7l3Z)0yrg_OMhtLybkbn!sxH_@x*Vme@=k4pJRP4o+LfA^@D zo8#9Ssww=miSBX{7yAn@2SxbgRS8+_jJ9B)!#&38a9toSa@&IT`Pghz=tF;+lXah7meGAAx@{Og3%QaLfg z@h=iiOXS2;9REAQX=$7|&GF9=PD|p%FvmYdI4y+}104Tz!f9EXNOAnbgwy44Vjstk z5>89x#CDD!CY+YW2`|Ufgwv8Z(Zulw2&biR!o~4!!f6SdsOI?ngwxVD!8raY4`Y#G z;Ji@0nt$GvzxY94{wKb{moIPM)!97K{DSX9`w?`aFfRk~HzOWr!!a%o`XLzfozSTr zzO|Ftc?k8r5Ta1eDU3NA21xKZ2_fIb<=3nyaO1na{AJ&nU##<;nY8<~bH0o3X6s>K zg*4zOj76Lc8>jTCeFN=tpv!VM@AeJ0|BxOe`0_u^R{Dn8AA{QXjp){R2&Z%UOTe|g z@Llvz`V$Ai+zlN}46iT$(0N}zH{u)WJntJEsrKd1`p*2!?tA1c8z>xcezo@4_p=UP zesugZ?-mMNXvhnp(eZA=^PS_q(auZM!-+kZBoMd+;@E^!ATVuVZfDUP=H_p4eM37h46^m`}R^)}(J}Hx3fnI^xT}hz1uf9v^wQ@3;DT<~ORF+hKSs z85#HGzehbDp3WlolaiI2&Kl>gh1UJV8tfd?q-zAzA|&3T5wF9ywsXvR^y}2|!Oly+ zUAM%jJ2V(%MKmM{kr+3U2VZsJ_kr-`#?Z$}-p5{8 z0>xqs9~90J9tW4Z+AnH*QC3XrN#BWj8tE}#{s**1cTN&Ej$yIxY~_><>g=TR_+E5& zc(^#q_^pcW!qnv%n(cLd;+!vkX7Hu5!87)@i_X71yYzMSlVA4^kK5%THaMb1oUe_% z?!1W>3WU$1`_~AK$=97V%-n{n>2*py-w=!VoQV;vr`=fdF&CbuOV4=jZFEZXspH;` z-5tAjV(m)#PV61%%Kvz<{jD1zl&$^NK9W5ISz3JUzWj5(6C3t*<)8PB+Q0PSuXMob z7H)Ne1Jy6ktjKSu?#lnD>&(yX9izu-#rq`+swJqx*c+%iP<;dCn{-k87M;fX$VL84 z*NKhGvAS5qq6R`;`7O&wgxJ+a@s&x4j&59jo~$czjGTq#uSxL>TzrT(;&?xwx2o2$PT$jS$Q$~) zEv{BqAf3LgZ7sXWvt>gQ%O;b(-N}AWkW{oK_S;i{bQ6B+wL;;u1TPl~-vxXU@FReq z_+_E+GT`tVg+d7~bVF|z3d;c>2iyqw6~GW+-&=*kF~D~KKMQylE^yBSZop>iRlvP~ zmFTj1hO8al!L59K&ivK3~UErSqoU;FH(SAMJ z^)v8~P2(Ra@>{^)hB$AZ#=o2MDL%Wve;E9?X-X;ocYoA=qU0m`V5xn=21$y;gOIxi zn~}vvJG;3V-j7q@cY#kfi+22iPb4ZOIGS+KgQLycb~D=m8zCB0dBK|(j?;r7DtH4k zjZd;Puq03VRA>wM2TXNtWA-!~f!PSmMqoAqvk{n$z-$C&BQP5QV+7RqJL-EK^?i=| z9!Kq8FUpF->6;-c*9gE05~mlLyzsk}sc$zOd~=QOP9$4>hqF}T>fS_t9>mmlMoT1L znq$%oQ{NTQ{+){A(>|I?iZ;(EZ@pVc5_Cxh?a!&4E)`G$=97H2-&Wt>s&7{o3UU6e ztE_S$-LP@_eUG|(I#z4hE>8tw%(>~M8xWnYhkPOCY zfRaz(RPnj#BBjES^PfoIt2l8x-&R7bbUyi+Q*)8{FA|^3|4i|@GgeAJc6)jC6@U_Y z2vJcAEy1gO0Qf?CrDH8fl{W*asvr}rt~Z=uc4y@p)E$*y0=JsitC_u|>}w#}HOHq3 z*vhtZtn{xqrrRNE*GfMRto{S2mjsF6DEkKxN)Dkuj}J)66SgXH^cW~w2P*u;%6^Ti zzF(`Pc>N>s=odVnl??$e`Fo-B9isC%k|JC1AH@5DZSId0oh^I~q|%$Yhua`*m{uz4Qi*6Xr~4tWlOLfOL*mEl$AV6dXAFoV62>?vh^MLt>ZDSLQ3aI zDILzRt#wijCbnKf9&IQ0vGVI6dFNWGcBZISfd$n@ZN2k-yn1qvEyC`+iDriFuNNk@YDQyQKOob2RN~h>f6wl?F zK-6^J4z(We=X*px#oM4Sqc)HyxYbwf1;>8!sU!N`s5tnK2*Gf4%Vp>^8bd{=D|>mh zXt2+blp#SFEk* zsJleWNoS?6*xM5LO-5rZG z=s7C18m$&HcFsJFs6;E5qTK1y(i;|$gm>YCT%m&GNUCx!_h=Um+A1*bjC$OMP&~}# ztI(0@Ep*msE2`=$>KD1Kzn%wb z-t`FDeA*Q(nBG;<(S=1K0y)+HMP{~HIBZ&j&1tyUk)XyW4m|+2T|=i8bka38$EGIr0=@Q4 zz1p_6Ue}N6_4n&@j_TLmudlYPtkpd>cdcHxN53|wug>b8qg1c%)1Ay#qB-u+Ywosr z>l~lf*8#WL`yG$#&BWQG-$H-Dzg zdcE>ly?jt#)TFPZ7C49X>YP5u(W5VLwCOcuv+}dLb~hBhp=p-Q(_E5cE>uAu+ZO65R z`rK#qIkwGp`rIc0+owU@)?QDoFLgXw>R6_0_5-$7&0cNWti9|Qwk^k?$h?e1xIfEc ziBPz|S%6h65DbP>$UI{aWS<3sQ5Fhh11y8Y5+*WT`U1VVFfv5Kp;$1G4KpM~q*x{j z0aq@OiS;DHAs1~mGRU{^XBk%az#$fi^&(dUNhzrm08cORhmtu;qfyBzJY54;bHOkx z8VW`OX@-=W9v43q>Es}p%cgS3N1?n9YGgA%uM#OQQ#vGyWE;w-;XPH!EuzWXP;W?B z5#FUk*}Pyfo(iM`6cOy>TpOBim0LNNJDy0olkr&A-5U->+>vx39(JdauozB*naw4_ z?LFZ{I2{WD4Wxt7c9Di>P#<_CP3vD{4k%@`QWCana1F*H?|vWIWv1 zn+paqo;b#+b0bfi7Fq}B?YiV&nVvj zx(#m-_nGc5mP-1tiQXdV>b@H&FL&XrArI|kufVB&RPM#0VSlOeXgCq4hj5Tzbw97@ zc~msqy{bGNMgKf1Gxhh2ppzZ-JV4!dpOJL+++evhMA!G3?EDaP4ViRLEt7%6;ubh!snBn}%b=&cs?Z5DLe_f+F)#F%%Q zd3HaSpUcd9z+oF>F31m<FW4yZ5(j;Tkg-QWuf@2ScljqcT`C*E6QI}F z78moV6w4~_l-^B~ee=%zyF|BDG4&ir+4;VO-`6bY^sbxio44w9px4;ynR+gSEfFst zm-0>W_d?qqDl0i%)Q#tM3;JH7+pz7ZHcB)0ehc{^=oGgx?{xX3g?yg{{UJ`DTf8?{ zd-1PW$RCyR<{OZ_q?>QFJ_dL8t$hFw^hoRcU|B zWPcL$net|r;F?d;s;-_@~x zODAa1*xz*zQf@=B1Z4$>VA7a!>s7h6lu#>Ea=A-W zrZB>tN&2IKM2M$W8(T#Q%`L_KC=W24;Bs%w^ey^94zE>CHBY#fTTB>8VizpBkG+yi zvNrma$55!|ZG&h;0mViQc zSssiW^I(ag?KWuP?pzPl1Bo82M-q)CB1u&bba$u2eG0?B{0OT$qNl1v#&k%VmeAh| zT>>p!>akZ8#r*$gc1gMdBx@`;0MT(Mef8c(!Kb9K+83#Pfx@o?AD`6GWtkV3WGJ{& z(v`f@mt;oSXn3kp^sn9nDY!=(rZ!UBl|DUrp+XP5aEU4EtM^I@s`p4FOU2y(cF^dZ zjcUJoPov-}u0?xmQIwp5bbmnafE2FY11Z=f^~~*;WOg4aWLxR0_fQI|_fX2ex&J|_ zzg`+t@3j;(>eIVDvwj>jib<)|FYeFeK8@y=v8Z+^S`-zdzDw#UXb!k!7u{sc`f{J? zl2El*`BS)p51RDVK2^bgSAx=j@~`Y2HR-GUwSx2wsHy0C8Z^NM4}2v zvO?J~YDRr^-=$!-C@Cst|BsvWCtX5L!Dq?1p_szKJ`Wx}`%~?IdYKSb&@0g5*{uHz zI7WSSf3Bdbs3|Ju_P+o!jS2mRsi^x8_5Yd7{uHj@CFtPMbWvZuw@%T*f?^(TrKjM_ zkip$wQD42+9{3&gFGH7pJF5Na{#gCLF7T?+no#Q|lqrP@E{74$Kw zulxw=RR0xD?^?*e6jx-X^v(AyBuhm>dXK53){ zmTk7spQH;D%DOP2|g2xpaT M5)u)Uf(d2+1K1-^wg3PC