From 7feb579ed1cc537cc95ef7faac93f4e26d107fd5 Mon Sep 17 00:00:00 2001 From: Pedro Lopes Date: Tue, 24 Oct 2023 08:43:44 -0300 Subject: [PATCH] add: TP02Q04 solved --- .../753045_binaria.txt | 1 + .../TP02Q04 - Pesquisa Binária em C/Player | Bin 0 -> 22704 bytes .../TP02Q04 - Pesquisa Binária em C/Player.c | 439 ++++++++++++++++++ .../TP02Q04 - Pesquisa Binária em C/pedro.out | 100 ++++ .../TP02Q04 - Pesquisa Binária em C/pub.in | 151 ++++++ .../TP02Q04 - Pesquisa Binária em C/pub.out | 100 ++++ 6 files changed, 791 insertions(+) create mode 100644 tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/753045_binaria.txt create mode 100644 tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/Player create mode 100644 tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/Player.c create mode 100644 tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/pedro.out create mode 100644 tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/pub.in create mode 100644 tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/pub.out diff --git a/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/753045_binaria.txt b/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/753045_binaria.txt new file mode 100644 index 0000000..5ef1740 --- /dev/null +++ b/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/753045_binaria.txt @@ -0,0 +1 @@ +753045 0ms 2228 \ No newline at end of file diff --git a/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/Player b/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/Player new file mode 100644 index 0000000000000000000000000000000000000000..31797b7067d5130bf8941679a48f2b32db6d1680 GIT binary patch literal 22704 zcmeHP4|G)3nZGl`pMa1=3K*5jh~P#oaiEG=jV2)vUo^oKh~gg@Cdq`1CX?)BM!}XY zHsJa?hGtvba@yKr*Sd7K+oj#srQ525x&(SWZrr+>uC+~Fv@??0lwzB<=r(iv}nFNKEZ^BuZCGu}C*K>5y)>h*BhwbiD{ByD@DyrtO#x z>p(E&cv4L0^PKkUrnQh!VoJJ{8sCVwQa+{I<)(9Vc}&^vqp;IWmww*wOE*uf*X0$8 zOPQ`eQ(e5cyd%=Q>Wa%dT9D-cNLvG=SN45pI&(Ug@>r#R0r}$I+RGCyMbsKJ|tJ|x*s`(5q&ZILMPEe>5CBP zA>>fGqyT;dxZk0v7%G1vKPw90s|w&Z7QojOz&97b!v*k96~M18fcF-_TMOW?0r%tM zPBaZo6rZ^T@DCKgHx=)DgKaEVVkjf#OnY3HHQ8v3RgE6oJQB zI4lUH%Wajop}wwWO>kw!Rk_^CiYrC1Zev5RH5?0Xi}b|9v5gIDI=Z6ajiKfaDrj40 zS5&(UD%A-U>3XCqk-o?O<#C^s67Rw1QCRT&a!w?Iq2LpLt+B*;5!?~H;yd6e@jT4) zW~1)BQ9aKxUaIlKjmnO3=7(-pIL#F_k8m2c;b$=jnzrF3Hhk2EpJT(vY&gwJoXT{4 zW&)tOf|K8d^PEPqavRQbH{k&rF7Jy3BCWRJ_W8ZahEv&`OdHNIB3Yvi*SBP8vdM6iSsh^M7TW|!puig;RbWV$8)72;{Bk=ZKw&l68ej7+2CKSMk%EizS- z{}l1G6w3r8|4HI$iIMS3{yySqX^|)E%e3Mbb=HepOzU;C_rz%9#`?bLZ^4(@H@8=k%0EL* zvkTV3=5)#8T9QE(z(x*cCfr{53WvzhIfWSg2Vq zu?>lthiUwroPHSJqIVcxrH9@Tzw}}yMy;liq%mT)44TP?QE6p5WEhfRNI(vv{|}kT&4*13 z(cOfQHl)BFGcB_ed>MF@uz3hP#?Gd4bkVSBH3pRF<}o!is8#LMDl73AhQ@xY;Xtir z?5njJ`jf_EmT@R)9I%X3(%5Gi&n1n1%Q$AMul0v~8{vPy?m91En^ud`lI=B<3Dj;N z{nOt&RH~GUY&aa1X-D79X~`g*r?g}cpoM11k@8t+{kH`K@t{jB{q$-I`w+RdFeY(T zsL^Sa%6ub{F-wwkvXL$uaPw`g?v$o9;KvYl8u4i}DJi^Fq0405U-_LQ4yzqTer-gQ zjJUyHaT@s?M(Ai+5>YZL*Clo4jASfd0Bg$Yk*Y_df~rT9i~`zdHE99L%_HbMHJR0u zXQ{khSFc+d*Cx#}!fSOrntgld zM)zI1C~44*QlJz@ER}}{z@h33+9-CLN_Wuxjx>Fk+^HJK-uv1l7QN2Go*Hu&wto^+ z(`nl4GEGckI(Nc)4oqV4Dn&gXl!dOs{F9g-kf!dS%$UR?I-$jT=pb~X?B)OLq^7NT zUZcy{+Bq^{oS_~(d2`Y@L$^%ag^mpS%u5vMTad=4G42608m@uf)y7D|UqJOqrFwFH zuW`ncoc@hReNaF1@yF#z)Ypf;Hj+Z$wlz=JyAw%PmAZlXPJk{#Cz7lxa{^HDk3-7y zh?O`^mtL~zv{l-#;ocE-1!EyWGO8J7(ouc6*S(X?@|pp4w>fCcd2r$L*|Q5TV|;vx zm@jfAzH&NW;&@HWFgeY?nN$;VPfoKpuc>Zt0|w0_0@K5wq4Ie2M%fn}&e*>mbs-EIEDe zmwf_jC~LtUWX2CYns=t(bp;tW^y4BV%)H~M-n zZUJ|C5fYV1II9zd#OZq0E2$g#V9de(jzOZx$XHu(|JJzv;&2CivdzX(-P zv-A(iCyNHs8I-;|RkG)6c8h`ZBha#p=aa_sC{ZtjQmA1{#GA3MrC2t}Wv}ZR-aKl0 z5dQu{RC3ZtnOJNlu^h5yo7U~f()|akA?rp2^LE72^n=Gu@kWI5c0`iybv1!p{iy2n z%%ZAZhDynYr~Y)qDH*iG14f$KI$)e2l6e(FB#D)D%7cJro&?uxq&;R|-vQJIi?#7x z?>R;>{jprjJeyNIQAqLcq~cG==2BE)PpV|^236*Gi#`>M<&Ef_TpaoWvQHjaEd#{i z=&MqwsZbr1zD9*^k|>2{&sJp7z=DOT$jg?ZVaL?`s>p=Z`44r=gaPbJpvy;1-AdKG zq-q{7g;nd4kI2^L7R0J`$wy@Ca?9d}sfDx#>NSQvDDWC%q~xKiFsgfv6W~us{#@`F zBi&M!#z-w5Qq>qaJ!%sTq-Ud(Xn0?PPQr{MXPyD$B^oRk#=U8blfldnB{z7P@sjn- zk+&9m245Vro=F-nc?K=x+ZaIJ+_?Dm_`s_H^aZ+=T9`(1m9kz*7ojeDQi-MSXKoCg z48EVvKw7T;+(mr#msG@#vy!MN4f>Z(&Z4Yr7g}(QF<7$qLYh%}cMgffEKGA3Vs<(? z6PZQG&^SKzwk={5%->>@K?ULB(A z1nn%5y>pid;8dE5z*GdLA}|$!sR&F(U@8Jr5txd=R0O6XFcpFS(FoA{la%gQ*6P3L zBLA`;`K|KyZ-wjc&9g;JTpsW2zP!65v?Cnrsc7lBM{M^S^uns2US5qvxB1&5c=dC; zzag~UuhsmqaHyp{+$#Lb?$|PWbB|b8eY4n5*C6f{S6%txz!g^poAEMgEE1}SZ;xwe z*0PE~TW8O#Wv#h5?Al#XEt#rMS9#9&T|@7t`vGkIX*RnF`2)k*>@Ltlpyi+s|16u` z5BdryJpeC!J)0c@z2o1q*)h-+C$iZ^2t&;q*=!Z)mN&E6t)S0??gE{a$z~q|{RAle zyJRou3D5(e)9_})H$j(zJ_A|{`Vwd>=o_HBL4OPS80f6GU=QjCJppTZ%U)4uNjcFL7cMS0>MW>xE}~ zsptGTGmH8?GfN3ygwHO-2#@i(G_k%AOQAvf;wOj+VkC-7*A|!ESaR0AMZ3iH=UsE@ zhnFrPG1=GRQwG2EQU)ioy%V2zfY%UMU0nKrcg@@xJ5eF9B>y-*=b(@9VnbejUta!2 zz^foPsC>5fRe4Cm59s^&+<`uQ88jz1dVSvKl@CAQVSMJIzt6V&fR1mbbR+9A4YJ=u zXOUgUcaBt`dM*Y28;q4G^0{)n5m|^IP%Y%O7(#<@Ic{$`4Pg1@Kd0-Mby#e)+0&+j<{2=7DkT;>9a^r)>=}l^!()IXt z=p=rQ7e{dI=X7YC{bZVIC}6r4UxMCh%n_TB7d6GDpZ3-jm+kc##s0o&MsfK=(`$o~f$HM&nqq%VaT)Y$ii_m?^ovkVBm7X6rqWadrXnyEfvE^g zMPMod|NkPuzjNc?wedauQQZ`JAzCK60L7YFv+*S=bFSw3_jBiKp4a^JyGcs?J33mk zQeyc#?`69rkF^OU{kS3?)R`Fy76C2i--gZ56~$}OGRgHFa`xX?kwBYa!6Mc4Q>_rR zE~doKIsDr-{;l014KO~cE5h|oNozd2Y0Bl}{RG(_z)}_eyp?=P+h;Y;amK%>rF^fJ zJpvvuMDhQ5m>Pz zz*ZAepYY_)A+T%EuT1HA-<^CIZS*|hPCon+y=a0C^--*u={t5B9Vyi3uWaksbxpN|%eo6$-8%`X~C+G{G zI6HU#fKz{-7+hgTRNf~(koz64UFySC&hw8GUmzwL=RUDe@b7q?`j{OW?TE_za6-VL z3Gs79YC@c6#k?$GG`tba- zM&je+bC>qR_XqZKkJKL@=ZAq$RR2QlqE`hy_=Wt3@FJ-@P2}h6Qt1QZ`teEN9?bgg zemtu6`M$(u{77cTkE;>sXMF$m;kxzWR1^1g;YGvd(Ky%lL5}Az}W0L~_px3RN2axW1vv{SDx>4?yJ}*Ee3dZv=c>0skKZ?uXo+KBxWsu^x&% zj7Bkk`6n39w9jP!9W?vh+gm31e$L|S2&aoNpb#D>4bp$HxK7s- z8ZzCk@e6byF@?{nQXwN&(kh?vT7H{TGX2-7cP=MN2H+6Hm0YRkVowsVBjBXAsA) zM8iEe^Q5&axUHkBIn)tsjd#U*f}zBA(bCn~-4Tw5TPp$+YtV5lkzgnm3+)Joqw&}d zoW2t33B;+ zB2Rn)gyWHdhN(T6wd+OjhWeXps_TO{uU)&r*cjYcT~lw6S9wlMOHV@9S*ZW?7c>9KUC?3v(p;$|M&5pWOKJCWgYO<4NbTK&L z=GJgzTYFp{YSX>LVNWOLH~|^9AdF;PZVQKE`Ks8kV7N6D52-_U91hfxI}S)!1no0( z6~XB|PMug+OG~&1BO@M2*B$|QZAF8%GAu^F3BTDhXDLswqpRhK$ zY{!~NoJNf6G#`g=b#jmc%16-FF&NBfxjMi{*0HnOVWdwMa$xR5e}b(&UBUKHw3QA7 zs=FD^S|ib5q6hyD&XuFq+Rix~ zCl!u$i;8GhJY2CYny6?_L~uk~q*X)JHFeA5p>0CS+Cx3nx*VlCvq!QK^@&-)!rxqRN=<9#%C zyAB!J%VT@q7h$?d3uv2+;>7m+{BR2}ELn2)ynn)!_Y0vS6Zx>GEnsMGj?3qL7N#q; zGS{E=nBEOJ?e#Iw`!P)Qauqu}&iZS&;yz@kPuQOKZJ4ICBA4%O|88wxqxE=yhbixO zl07Yz-1d8cQB3qUBrO(I(v+V=G%D-Ld7>6Rc6-0JV_M}3xXZoR=d$0bA4r*UeW@%; z%rkuin7w>nM>F;C1Fp2rH&3(TFI@J#PsNn?d0C(O%AV-=dsII6A3vWkP1%)^=Xx{z zO=Rr$seqC&rRP+8a+m)!gm!!0A7i@JW#BIVIP7UpiLN0^yl=wiak}-HXZkO&DZz*B zdB1J6lDv&?FWWKw8FXmuu|4nS@Oh`hy8S#p*^bB2e%O)<+w=b2kbbZ(hs>VXp6Oc< z+U-T7)~-_YkY<^%9n)V!V7KSz;zL!+g6rwFXa0A{kT0%3KcA$klt#IJK2@9$e$Ht6 z9w?O`aN%tKM=qRnDcNam>?)D`PFE?Wakip#A6kwNx0~l*x<0t>N>hEWzDd!yT;q?+ UWnH>FC$e9n`(dWbz{QGx2jUXvKL7v# literal 0 HcmV?d00001 diff --git a/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/Player.c b/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/Player.c new file mode 100644 index 0000000..d193174 --- /dev/null +++ b/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/Player.c @@ -0,0 +1,439 @@ +/** + * @path TP02Q04 - Pesquisa Binária em C/Player.c + * @description C file that implements the Player class with binary search + * @author Pedro Lopes - github.com/httpspedroh + * @version 1.0 + * @update 2023-09-27 + */ + +// ---------------------------------------------------------------------------------------------------- // + +// Includes +#include +#include +#include +#include +#include + +// ---------------------------------------------------------------------------------------------------- // + +// Constants +#define MAX_PLAYERS 4000 +#define FILE_PATH "/tmp/players.csv" + +#define MAX_NAME_SIZE 40 +#define MAX_COLLEGE_SIZE 60 +#define MAX_BIRTH_CITY_SIZE 40 +#define MAX_BIRTH_STATE_SIZE 40 + +#define MAX_LINE_SIZE 300 +#define MAX_ATTRIBUTE_SIZE 100 + +// ---------------------------------------------------------------------------------------------------- // + +// Structs +typedef struct Player { + int id; + char *name; + int height; + int weight; + int birthYear; + char *birthCity; + char *birthState; + char *college; +} Player; + +// ---------------------------------------------------------------------------------------------------- // + +// Global variables +Player allPlayers[MAX_PLAYERS]; +int n = 0; + +// ---------------------------------------------------------------------------------------------------- // + +// Functions +bool isEnd(char* line) { return line[0] == 'F' && line[1] == 'I' && line[2] == 'M'; } + +void substring(char *string, char *stringStart, int length) { + + strncpy(string, stringStart, length); + string[length] = '\0'; +} + +void proccess_attribute(char *attribute, char **substringStart, char **substringEnd, bool isFirstAttribute) { + + // Skip first comma + if(!isFirstAttribute) { + + if(*substringEnd != NULL) *substringStart = *substringEnd + 1; + else *substringStart = *substringEnd; + } + + // Get next comma + *substringEnd = strchr(*substringStart, ','); + + // Get substring + if(*substringEnd) substring(attribute, *substringStart, *substringEnd - *substringStart); + else strcpy(attribute, *substringStart); + + // Set default value if attribute is empty + if(strcmp(attribute, "") == 0 || attribute[0] == '\n' || attribute[0] == '\r' || attribute[0] == '\0') strcpy(attribute, "nao informado"); + + // Clean \n from the end of the string + if(attribute[strlen(attribute) - 1] == '\n') attribute[strlen(attribute) - 1] = '\0'; +} + +// ---------------------------------------------------------------------------------------------------- // + +// Methods signatures + +// Class +Player player_newBlank(); +Player player_new(int id, char *name, int height, int weight, int birthYear, char *birthCity, char *birthState, char *college); +Player *player_clone(Player *player); +void player_print(Player *player); +Player player_read(char *line); +Player *player_searchById(int id); + +// Gets +int player_getId(Player *player); +char *player_getName(Player *player); +int player_getHeight(Player *player); +int player_getWeight(Player *player); +char *player_getCollege(Player *player); +int player_getBirthYear(Player *player); +char *player_getBirthCity(Player *player); +char *player_getBirthState(Player *player); + +// Sets +void player_setId(Player *player, int id); +void player_setName(Player *player, char *name); +void player_setHeight(Player *player, int height); +void player_setWeight(Player *player, int weight); +void player_setCollege(Player *player, char *college); +void player_setBirthYear(Player *player, int birthYear); +void player_setBirthCity(Player *player, char *birthCity); +void player_setBirthState(Player *player, char *birthState); + +// General +void startPlayers(); + +// ---------------------------------------------------------------------------------------------------- // + +// Methods implementations + +// Class +Player player_newBlank() { + + Player player; + + player.id = -1; + player.height = -1; + player.weight = -1; + player.birthYear = -1; + + player.name = (char *) calloc(MAX_NAME_SIZE, sizeof(char)); + strcpy(player.name, ""); + + player.birthCity = (char *) calloc(MAX_BIRTH_CITY_SIZE, sizeof(char)); + strcpy(player.birthCity, ""); + + player.birthState = (char *) calloc(MAX_BIRTH_STATE_SIZE, sizeof(char)); + strcpy(player.birthState, ""); + + player.college = (char *) calloc(MAX_COLLEGE_SIZE, sizeof(char)); + strcpy(player.college, ""); + + return player; +} + +Player player_new(int id, char *name, int height, int weight, int birthYear, char *birthCity, char *birthState, char *college) { + + Player player; + + player.id = id; + player.height = height; + player.weight = weight; + player.birthYear = birthYear; + + player.name = (char *) calloc(MAX_NAME_SIZE, sizeof(char)); + strcpy(player.name, name); + + player.birthCity = (char *) calloc(MAX_BIRTH_CITY_SIZE, sizeof(char)); + strcpy(player.birthCity, birthCity); + + player.birthState = (char *) calloc(MAX_BIRTH_STATE_SIZE, sizeof(char)); + strcpy(player.birthState, birthState); + + player.college = (char *) calloc(MAX_COLLEGE_SIZE, sizeof(char)); + strcpy(player.college, college); + + return player; +} + +Player *player_clone(Player *player) { + + Player *clone = (Player *) malloc(sizeof(Player)); + + clone -> id = player -> id; + clone -> height = player -> height; + clone -> weight = player -> weight; + + clone -> name = (char *) calloc(MAX_NAME_SIZE, sizeof(char)); + strcpy(clone -> name, player -> name); + + clone -> birthCity = (char *) calloc(MAX_BIRTH_CITY_SIZE, sizeof(char)); + strcpy(clone -> birthCity, player -> birthCity); + + clone -> birthState = (char *) calloc(MAX_BIRTH_STATE_SIZE, sizeof(char)); + strcpy(clone -> birthState, player -> birthState); + + clone -> college = (char *) calloc(MAX_COLLEGE_SIZE, sizeof(char)); + strcpy(clone -> college, player -> college); + + return clone; +} + +void player_print(Player *player) { + + printf("[%d ## %s ## %d ## %d ## %d ## %s ## %s ## %s]\n", + player -> id, + player -> name, + player -> height, + player -> weight, + player -> birthYear, + player -> college, + player -> birthCity, + player -> birthState + ); +} + +Player player_read(char *line) { + + Player player = player_newBlank(); + + char *substringStart = line; + char *substringEnd = NULL; + char attribute[MAX_ATTRIBUTE_SIZE]; + + // Get id + proccess_attribute(attribute, &substringStart, &substringEnd, true); + player_setId(&player, atoi(attribute)); + + // Get name + proccess_attribute(attribute, &substringStart, &substringEnd, false); + player_setName(&player, attribute); + + // Get height + proccess_attribute(attribute, &substringStart, &substringEnd, false); + player_setHeight(&player, atoi(attribute)); + + // Get weight + proccess_attribute(attribute, &substringStart, &substringEnd, false); + player_setWeight(&player, atoi(attribute)); + + // Get college + proccess_attribute(attribute, &substringStart, &substringEnd, false); + + // if(player_getId(&player) == 2159) printf("attribute: %s\n", attribute); + + player_setCollege(&player, attribute); + + // Get birth year + proccess_attribute(attribute, &substringStart, &substringEnd, false); + player_setBirthYear(&player, atoi(attribute)); + + // Get birth city + proccess_attribute(attribute, &substringStart, &substringEnd, false); + player_setBirthCity(&player, attribute); + + // Get birth state + proccess_attribute(attribute, &substringStart, &substringEnd, false); + player_setBirthState(&player, attribute); + + return player; +} + +Player *player_searchById(int id) { + + for(int i = 0; i < n; i++) { + + if(player_getId(&allPlayers[i]) == id) return &allPlayers[i]; + } + return NULL; +} + +// Gets +int player_getId(Player *player) { return player -> id; } +char *player_getName(Player *player) { return player -> name; } +int player_getHeight(Player *player) { return player -> height; } +int player_getWeight(Player *player) { return player -> weight; } +char *player_getCollege(Player *player) { return player -> college; } +int player_getBirthYear(Player *player) { return player -> birthYear; } +char *player_getBirthCity(Player *player) { return player -> birthCity; } +char *player_getBirthState(Player *player) { return player -> birthState; } + +// Sets +void player_setId(Player *player, int id) { player -> id = id; } +void player_setName(Player *player, char *name) { strcpy(player -> name, name); } +void player_setHeight(Player *player, int height) { player -> height = height; } +void player_setWeight(Player *player, int weight) { player -> weight = weight; } +void player_setBirthYear(Player *player, int birthYear) { player -> birthYear = birthYear; } +void player_setBirthCity(Player *player, char *birthCity) { strcpy(player -> birthCity, birthCity); } +void player_setBirthState(Player *player, char *birthState) { strcpy(player -> birthState, birthState); } +void player_setCollege(Player *player, char *college) { strcpy(player -> college, college); } + +// General +void startPlayers() { + + // Open file + FILE *fp; + char *line = NULL; + size_t len = 0; + ssize_t read; + + fp = fopen(FILE_PATH, "r"); + + if(fp == NULL) { + + perror("x Error opening file"); + exit(EXIT_FAILURE); + } + + // Skip first line + getline(&line, &len, fp); + + // Read all lines + while((read = getline(&line, &len, fp)) != -1) { + + // Read player from line + Player player = player_read(line); + + allPlayers[n++] = player; + + if(n >= MAX_PLAYERS) { + + perror("x Max players reached"); + exit(EXIT_FAILURE); + } + } + + // Close file and free memory + fclose(fp); + + if(line) free(line); +} + +// ---------------------------------------------------------------------------------------------------- // + +// Main +int main() { + + // ----------------------------------------------------------------- // + + // #1 - Start - Read all players in CSV file + startPlayers(); + + // ----------------------------------------------------------------- // + + // #2 - Read input and print players from pub.in id entries and add to mainPlayers array + + // Initialize mainPlayers array + Player mainPlayers[MAX_PLAYERS]; + int m = 0; + + char in[5]; + scanf(" %[^\n]s", in); + + while(true) { + + if(isEnd(in)) break; + else { + + int id = atoi(in); + + Player *player = player_searchById(id); + + if(player) mainPlayers[m++] = *player; + + // ------------------------- // + + scanf(" %[^\n]s", in); + } + } + + // ----------------------------------------------------------------- // + + // #3 - Read input and search for players from pub.in name entries in mainPlayers array + + // Start benchmark + clock_t startTime = clock(); + int comparisons = 0; + + // Order mainPlayers array by name asc + for(int i = 0; i < m; i++) { + + for(int j = i + 1; j < m; j++) { + + comparisons++; + + if(strcmp(player_getName(&mainPlayers[i]), player_getName(&mainPlayers[j])) > 0) { + + Player aux = mainPlayers[i]; + mainPlayers[i] = mainPlayers[j]; + mainPlayers[j] = aux; + } + } + } + + // Read input + char name[MAX_NAME_SIZE]; + scanf(" %[^\n]s", name); + + while(true) { + + if(isEnd(name)) break; + else { + + // Search for player + Player *foundPlayer = NULL; + + // Binary search + int left = 0; + int right = m - 1; + + while(left <= right) { + + int mid = left + (right - left) / 2; + + comparisons += 2; + + if(strcmp(player_getName(&mainPlayers[mid]), name) == 0) { + + foundPlayer = &mainPlayers[mid]; + break; + } + else if(strcmp(player_getName(&mainPlayers[mid]), name) < 0) left = mid + 1; + else right = mid - 1; + } + + // Print result + printf("%s\n", foundPlayer == NULL ? "NAO" : "SIM"); + + // ------------------------- // + + scanf(" %[^\n]s", name); + } + } + + // ----------------- // + + // Save benchmark in file + FILE *fp = fopen("753045_binaria.txt", "w"); + fprintf(fp, "753045\t%.0fms\t%d", (double)(clock() - startTime) / CLOCKS_PER_SEC * 1000.0, comparisons); + fclose(fp); + + // ----------------- // + + return 0; +} \ No newline at end of file diff --git a/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/pedro.out b/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/pedro.out new file mode 100644 index 0000000..477c895 --- /dev/null +++ b/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/pedro.out @@ -0,0 +1,100 @@ +NAO +NAO +SIM +NAO +SIM +SIM +SIM +SIM +SIM +NAO +SIM +SIM +SIM +SIM +NAO +SIM +NAO +SIM +SIM +SIM +SIM +SIM +NAO +NAO +NAO +SIM +NAO +NAO +NAO +NAO +NAO +NAO +NAO +NAO +SIM +NAO +SIM +NAO +NAO +SIM +SIM +SIM +NAO +SIM +NAO +NAO +NAO +NAO +NAO +SIM +SIM +NAO +SIM +SIM +SIM +NAO +SIM +SIM +SIM +SIM +SIM +SIM +SIM +SIM +NAO +NAO +SIM +NAO +NAO +NAO +NAO +NAO +NAO +NAO +SIM +NAO +SIM +NAO +SIM +NAO +NAO +NAO +NAO +SIM +NAO +NAO +SIM +NAO +NAO +NAO +NAO +SIM +SIM +SIM +SIM +SIM +NAO +SIM +SIM +NAO diff --git a/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/pub.in b/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/pub.in new file mode 100644 index 0000000..8bbb092 --- /dev/null +++ b/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/pub.in @@ -0,0 +1,151 @@ +1 +104 +1047 +1087 +1124 +119 +1425 +1456 +1487 +149 +1494 +1525 +1565 +1572 +1583 +1702 +1731 +1742 +1748 +1786 +1796 +1809 +1868 +1880 +193 +1998 +2011 +2035 +2083 +217 +2177 +2183 +2203 +228 +401 +412 +448 +479 +53 +533 +557 +627 +687 +721 +797 +812 +848 +950 +98 +FIM +A.J. Bramlett +Aaron Williams +Adrian Smith +Al Ferrari +Alec Kessler +Andy Johnson +Ariel Maughan +Art Burris +Ben McDonald +Ben Poquette +Bill Ebben +Bill Laimbeer +Bob Kinney +Bob Schafer +Bones McKinney +Carl Shaeffer +Cheick Diallo +Chris Harris +Chris Welp +Cliff Barker +Craig Dykema +Curtis Kitchen +Damian Jones +Damjan Rudez +Darnell Mee +Darren Tillis +Darryl Johnson +Dejounte Murray +Devin Booker +Devyn Marble +Dick Schnittker +Dijon Thompson +Donatas Motiejunas +Ed Dahler +Eddie Phillips +Eric Riley +Frank Johnson +Frank Selvy +Gaylon Nickerson +George Reynolds +Glenn McDonald +Harold Pressley +Hassan Whiteside +Herb Williams +Hiram Fuller +Ira Newble +Jack George +Jack Molinas +James Blackwell +Jaren Jackson +Jeff Sanders +Jeremy Evans +Jerry Fleishman +Joe Buckhalter +Joe Caldwell +Joe Young +John Johnson +John Stroud +Johnny Jones +Johnny Orr +Ken Johnson +Ken Norman +Kevin Grevey +Kevin Willis +Larry Drew +Larry Sykes +Leo Kubiak +Lionel Chalmers +Lorenzen Wright +Luigi Datome +Luis Flores +Mamadou N'Diaye +Marcus Fizer +Mark Strickland +Marvin Barnes +Mason Plumlee +Michael Phelps +Michael Stewart +Mike Davis +Montrezl Harrell +Nick Fazekas +Nikola Vucevic +Nolan Smith +Ollie Johnson +Omri Casspi +Othello Hunter +Paul Walther +Peyton Siva +Predrag Drobnjak +Quincy Acy +Ralph Drollinger +Robert Horry +Ron Harper +Russ Schoene +Sarunas Marciulionis* +Stephen Thompson +Thaddeus Young +Toby Kimball +Tony Bennett +Walter Dukes +FIM diff --git a/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/pub.out b/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/pub.out new file mode 100644 index 0000000..477c895 --- /dev/null +++ b/tps/gabaritos/tp02/TP02Q04 - Pesquisa Binária em C/pub.out @@ -0,0 +1,100 @@ +NAO +NAO +SIM +NAO +SIM +SIM +SIM +SIM +SIM +NAO +SIM +SIM +SIM +SIM +NAO +SIM +NAO +SIM +SIM +SIM +SIM +SIM +NAO +NAO +NAO +SIM +NAO +NAO +NAO +NAO +NAO +NAO +NAO +NAO +SIM +NAO +SIM +NAO +NAO +SIM +SIM +SIM +NAO +SIM +NAO +NAO +NAO +NAO +NAO +SIM +SIM +NAO +SIM +SIM +SIM +NAO +SIM +SIM +SIM +SIM +SIM +SIM +SIM +SIM +NAO +NAO +SIM +NAO +NAO +NAO +NAO +NAO +NAO +NAO +SIM +NAO +SIM +NAO +SIM +NAO +NAO +NAO +NAO +SIM +NAO +NAO +SIM +NAO +NAO +NAO +NAO +SIM +SIM +SIM +SIM +SIM +NAO +SIM +SIM +NAO