em Posted May 4, 2012 Report Posted May 4, 2012 (edited) #include <stdio.h>int main(){ if(/*AICI*/) printf("Mata-i"); else printf(" grasa!"); return 0;}Maxim 15 caractere acolo (inlocuiti /* AICI */). Vreau sa afiseze "Mata-i grasa!".Rezolvari PM. Comentarii aici. Se inchide dupa primii 5.Hint: Cei care se joaca cu linux pot rezolva foarte usor asta .. ce ne facem cu cei de pe Windows?Solvers:- sulea- Elf (>10 chars)- cifratorul - varianta fara furculite, nice.- keller- Vic- R3al Edited May 11, 2012 by em Quote
Elf Posted May 4, 2012 Report Posted May 4, 2012 (edited) Am rezolvat pe Windows 7 cu Dev C++, ai PMGirlShare - Download Challenge.exe Edited May 4, 2012 by Elf Quote
noVaLue Posted May 4, 2012 Report Posted May 4, 2012 Esti sigur ca ai inlocuit doar 10 caractere Elf? ce ne facem cu cei de pe Windows? google ar fi un prim pass, e un trick bun ... pentru unix/linux Quote
Elf Posted May 4, 2012 Report Posted May 4, 2012 Acuma am vazut,ca trebuie maxim 10 caractere.#include <stdio.h>int main(){if(printf("Mata-i")==0)printf("Mata-i");elseprintf(" grasa!");return 0;} Quote
Starker Posted May 4, 2012 Report Posted May 4, 2012 Am stat 4-5 ore la ea... tot nu am reusit sa imi dau seama cum poti sa "corupi" if-ul... Quote
em Posted May 4, 2012 Author Report Posted May 4, 2012 Am stat 4-5 ore la ea... tot nu am reusit sa imi dau seama cum poti sa "corupi" if-ul...Nu asta era ideea. Nu e algoritmica aici...Probabil dupa ce o sa vezi diverse solutii o sa ti se para o prostie ... de fapt asta si e .. just a trick. Nu te simti prost daca nu stii acum. Quote
noVaLue Posted May 5, 2012 Report Posted May 5, 2012 De aceea nu am postat ... mi s-a parut inutil mai ales ca nu e egalitate intre win cat si linux ... fork sau printf... aceste solutii, sunt cel mai la indemana... desi pe win nu merge fork Quote
cifratorul Posted May 5, 2012 Report Posted May 5, 2012 eu am incercat si alte variante nu numai fork sau printf ce gasesti pe google. initial am incercat sa bag niste asm in conditia de if da nu mi-a inghitit compilatorul asa ceva. asa ca ce mi-a mers cat de cat a tinut cont de faptul ca toate aceste stringuri constante ce apar ca parametri sunt stocate de compilator in aceeasi zona de memorie. Quote
sulea Posted May 5, 2012 Report Posted May 5, 2012 eu am incercat si alte variante nu numai fork sau printf ce gasesti pe google. initial am incercat sa bag niste asm in conditia de if da nu mi-a inghitit compilatorul asa ceva. asa ca ce mi-a mers cat de cat a tinut cont de faptul ca toate aceste stringuri constante ce apar ca parametri sunt stocate de compilator in aceeasi zona de memorie.magaresti cumva nullul primului string? Quote
cifratorul Posted May 5, 2012 Report Posted May 5, 2012 magaresti cumva nullul primului string?ai PM Quote
em Posted May 11, 2012 Author Report Posted May 11, 2012 Rezolvari:Prima e doar pe linux, a treia depinde de arhitectura, se poate gasi o rezolvare echivalenta pe orice arhitectura#include <stdio.h>int main(){ if(fork()) printf("Mata-i"); else printf(" grasa!"); return 0;}#include <stdio.h>int main(){if(printf("Mata-i")==0)printf("Mata-i");elseprintf(" grasa!");return 0;}#include <stdio.h>int main(){if(!puts(""+1))printf("Mata-i");elseprintf(" grasa!");return 0;}#include <stdio.h>int main(){if(1#define else)printf("Mata-i");elseprintf(" grasa!");return 0;} 1 Quote
ionut.hulub Posted May 12, 2012 Report Posted May 12, 2012 foarte interesant.data viitoare ai grija sa formulezi bine enuntul probelmei.una din conditii era sa pui maxim 10 caractere in conditie si ai mai putin de 10 doar in varianta pentu linux. Quote
u0m3 Posted May 12, 2012 Report Posted May 12, 2012 Nice! La redefinirea else ma gandisem si eu, dar are mai mult de 10 char... Puteti elabora putin asupra metodei 3? Ce face mai exact acel puts?puts(""+1)Eu am presupus ca se transforma in ceva asemanator; ...str0 db "$"str1 db "Mata-i$"str2 db " grasa!$"; ...;; puts(""+1);; get address of ""+1mov dx, offset prompt ; dx = &str0add dx, 1 ; dx = &str1;putsmov ah, 9hint 21h; ...dar asta ar depinde foarte mult si de compilator, cum stocheaza el datele in imagine, etc. Quote
cifratorul Posted May 13, 2012 Report Posted May 13, 2012 @u0m3: da depinde de compilator dar cele 2 stringuri constante ce apar ca parametrii fiind date de acelasi fel vor fi stocate mereu in aceeasi zona de memorie. Quote
u0m3 Posted May 13, 2012 Report Posted May 13, 2012 @cifratorul: Aham... Am testat in Visual Studio 2010 si aparent nu merge... Presupun ca trebuie ajustati parametrii... Quote
cifratorul Posted May 13, 2012 Report Posted May 13, 2012 da. te uiti in fereastra de dissasembly, pui breakpoint undeva, vezi la ce adresa sunt stringurile, deschizi si o fereastra de memory ca sa te uiti la adresa aia, si de acolo vezi ce diferenta trebuie adunata ca sa ajunga la stringul urmator. din cateva incercari o sa reusesti. Quote