Matei Posted March 28, 2012 Report Posted March 28, 2012 (edited) S? se determine dac? o propozitie este palindrom?. O propozitie este palindrom? daca citit? de la prima liter? pan? la ultima are aceeasi succesiune ca citit? de la ultima liter? pân? la prima. Nu conteaza daca sunt litere mari sau mici Atentie : Spatiul sau alte semne de punctuatie, nu trebuie luate in considerare. Exemplu : Ele ,,,, ... fac cafELe - Aici, programul nostru ar trebui sa afiseze Palindrom Raspunsurile pe privat ! Dupa, postez si eu solutia mea Spor ! Solvers : - cmiN (python)- Patrunjel ©- bcman (python)- noValue © Edited March 29, 2012 by Matei Quote
cmiN Posted March 28, 2012 Report Posted March 28, 2012 Trebuia neaparat in C ?Vezi ca ti-am trimis in Py . Quote
Matei Posted March 28, 2012 Author Report Posted March 28, 2012 Vazut ... ma uit pe ea cand ajung acasa ! Quote
SilviuSDS Posted March 28, 2012 Report Posted March 28, 2012 L-am facut si eu in pascal, sper sa intelegi, daca nu stii pascal atunci doar ruleaza-l si ai sa vezi ca functioneaza.Nu stiu c si am vazut ca, cmiN la facut in python deci nu ar trebui sa fie probleme. Quote
bcman Posted March 28, 2012 Report Posted March 28, 2012 (edited) ?i-am trimis ?i eu în Python.//Cu ocazia aceasta îmi dau seama ce simplu e Python fa?? de C. Edited March 28, 2012 by bcman Quote
phreak Posted March 28, 2012 Report Posted March 28, 2012 nu am codeblocks in pc si nu pot instala pe moment, insa scriu aici schita.codepadIdeone.com | Online IDE & Debugging Tool >> C/C++, Java, PHP, Python, Perl and 40+ compilers and intepreterspentru ceva atat de simplu nu-ti trebuie ide Quote
Matei Posted March 28, 2012 Author Report Posted March 28, 2012 @Silviu gresesti pe la vreo conditie pe acolo ceva tu. in orice caz nu faci bine ceva ... nu mai stiu asa mult pascal , ca n-am mai scris de 4 ani ceva cod . dar cum ti-am raspuns si pe privat ... : incearca sa bagi ca input "abc" sa vezi ca-ti zice ca e palindrom Quote
xTremeSurfer Posted March 28, 2012 Report Posted March 28, 2012 imi poate trimite si mie cineva codul pentru C++ al unui cuvant palindrom ? thx Quote
cmiN Posted March 28, 2012 Report Posted March 28, 2012 @demisec te cam complici ... gandeste-te ca faci toata treaba asta intr-un timp 3*N (prelucrare, inversare, comparare) pe cand poate fi facut in N/2 plus ca ai tinut cont doar de cateva semne de punctuatie nu de toate Ce ar fi daca ai lua doua variabile x si y. Cu x pleci din stanga de tot cu y pleci din dreapta de tot (in sir) si cu fiecare din cele 2 te apropii de mijloc si la prima neregularitate returnezi false, in felul asta parcurgi jumatate de vector. Acum te intrebi cum prelucrezi semnele, spatiile, etc. ... simplu, sari peste ele. Avansezi si cu x (spre dreapta) si cu y (spre stanga) pana dai de un caracter pentru care functia isalpha sau isalnum, daca vrei si cifre, returneaza true, in momentul ala ai ajuns si cu x si cu y la primele 2 litere nevizitate ale extremitatilor. Apoi compari x pe y trecandu-le pe amandoua prin tolower sau cu o functie in care daca chr >= 'a' atunci chr = chr - 'a' + 'A'.Algoritmul e simplu si compact in py si mergea la fel de simplu si in C, dupa ce incep sa se puna sursele pun si eu codul. Quote
noVaLue Posted March 28, 2012 Report Posted March 28, 2012 Intr-un polindrom nu ai nevoie decat sa parcurgi [lungimea sir de caractere (filtrat, daca necesar) / 2]. Cum impartirea int/int = datorita castului implicit e un int(fara ceea ce ar trebui sa fie dupa virgula) vei parcurge round((float)nrEle/2)-nrEle%2. Ceea ce face ca intr-o bucla for, ai nevoie doar de lungimea string si acel contor (i). iar comparatia e foarte usor de facut c != c[len-i-1].Eu cand am scris codul am uitat sa pun un break exact dupa booleanul meu din urma rezultatului c != c[len-i-1]. Dar oricum stiu ca merge. Quote
Matei Posted March 29, 2012 Author Report Posted March 29, 2012 (edited) Va rog frumos : Tot ce trimiteti sa fie standard c library ... Edited March 29, 2012 by Matei Quote
cifratorul Posted March 29, 2012 Report Posted March 29, 2012 Va rog frumos : Tot ce trimiteti sa fie standard c library ...Stiu ca vrei sa iei 10 la tema da' dupa ce ca ti-ai gasit fraierii care sa ti-o faca mai esti si nesimtit. Quote
noVaLue Posted March 29, 2012 Report Posted March 29, 2012 Off: hah, ai trecut c++ in loc de c...On: compiler ele astea sunt mare bataie de cap, si aici ma refer la cele pentru C, unele detecteaza C si compileaza prin ASM de c++, altele ruleaza scriptul in C corect dar executabilul scos nu merge nici macar sa vezi consola. Sa nu mai vorbim de altele in care atata timp cat e scris codu corect(sintacxa) Iti va compila, chiar daca e in limbat c+- Quote
Matei Posted March 29, 2012 Author Report Posted March 29, 2012 Stiu ca vrei sa iei 10 la tema da' dupa ce ca ti-ai gasit fraierii care sa ti-o faca mai esti si nesimtit.ma faci sa rad ! crezi ca temele mele asa arata ? eram sigur ca o sa apara unul ca tine... am zis sa fie standard c library pentru ca le compilez pe linux Quote
phreak Posted March 29, 2012 Report Posted March 29, 2012 #include <string.h>...char s[50];....if(s==strrev(s))cout<<"Palindrom ";elsecout<<"Nope."Presupun ca stii si tu sa citesti un sir de caractere / cuvant de la tastatura.C code - 14 lines - codepadNu stiu de unde ai scos strrev-u ala ( cre ca din php )Si chiar daca mergea.. nu poti sa compari asa 2 stringuri in C Quote
black_death_c4t Posted March 29, 2012 Report Posted March 29, 2012 (edited) #include<iostream>#include <string.h>using namespace std;char s2[20];int main(){ char s[] = "aba"; strrev(s); strcpy(s2,s); strrev(s); if(strcmp(s,s2)==0) cout<<"palindrom "; else cout<<"nu-i "; return 0;}c++@ pr00f : merge si asta ;\ corectai. Edited March 29, 2012 by black_death_c4t Quote
pr00f Posted March 29, 2012 Report Posted March 29, 2012 (edited) c++http://i.imgur.com/MXZl0.pngAsta-i varianta bun?. Pentru propozi?ii, doar renun??m la ce nu apar?ine alfabetului . Too much hints ?@ pr00f : merge si asta ;\ corectai.M? refer c? a?a se rezolv? challenge-ul, nu c-ar fi gre?it ceva la codul t?u ^^. Edited March 29, 2012 by pr00f Quote
phreak Posted March 29, 2012 Report Posted March 29, 2012 Am zis C pentru ca tu nu folosesti C++ decat pentru I/O si threadu asta e despre stringuri, strrev e C , strcmp e C, char [] e C. Quote
bcman Posted April 5, 2012 Report Posted April 5, 2012 (edited) A trecut destul timp de la începerea challenge-ului, deci voi publica rezolvarea mea ?i îi a?tept ?i pe ceilal?i s? î?i publice rezolv?rile (în special pe cmiN). Rezolvarea mea e destul de proast?, neoptimizat? etc. dar totu?i m? bucur c? a func?ionat. Poate o s? mai reu?esc s? o optimizez inspirându-m? de la voi. Python:a = raw_input("Introduceti propozitia: ")initial = []for char in a: if ord(char) >= 65 and ord(char) <= 90: char = chr(ord(char)+32) initial.append(char) elif ord(char) >= 97 and ord(char) <= 122: initial.append(char)inv = initial[::-1]if initial == inv: print 'Propozitia este palindroma\n'else: print 'Propozitia nu este palindroma\n'raw_input() Edited April 5, 2012 by bcman Quote
Rfd Posted April 5, 2012 Report Posted April 5, 2012 (edited) #include "stdafx.h"#include <iostream>#include <string>#include <cctype>using namespace std;int main (){ string s1,s2; string::iterator it; getline(cin,s1); for (it=s1.begin();it<s1.end();it++) { if (*it>='A' && *it<='Z') *it+=32; if (isalpha(*it)) s2+=*it; } s1.clear(); string::reverse_iterator rit; for (rit=s2.rbegin();rit<s2.rend();rit++) s1+=*rit; if (s1.compare(s2)==0) cout<<"Palindrom"; else cout<<"Nu este palindrom"; system("pause"); return 0;}Cod C++. Acest cod poate fi simplificat prin utilizarea functiilor implicite (de exemplu: reverse() din <algorithm>). ______________________________________________#include "stdafx.h"#include <iostream>#include <string>#include <cctype>using namespace std;int main (){ string s1,s2; string::iterator it; getline(cin,s1); for (it=s1.begin();it<s1.end();it++) { if (*it>='A' && *it<='Z') *it+=32; if (isalpha(*it)) s2+=*it; } s1.clear(); string::reverse_iterator rit; for (it=s2.begin(),rit=s2.rbegin();it<s2.end(),rit<s2.rend();it++,rit++) if (*it!=*rit) { cout<<"Nu este palindrom"; system("pause"); return 0; } cout<<"Palindrom"; system("pause"); return 0;}C++Problema rezolvata fara inversarea string-ului.______________________________________________#include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>char x[1001],y[1001];int main (){ int i,j,n; gets(x); n=strlen(x); j=0; for (i=0;i<n;i++) { if (isalpha(x[i]) && x[i]<='Z' && x[i]>='A') x[i]+=32; if (isalpha(x[i])) { y[j]=x[i]; j++; } x[i]='\0'; } n=strlen(y); for (i=0,j=n-1;i<n,j>=0;i++,j--) if (y[i]!=y[j]) { printf("Nu este palindrom"); system("pause"); return 0; } printf("Palindrom"); system("pause"); return 0;}Rezolvare C. Edited April 5, 2012 by Rfd Quote
Matei Posted April 5, 2012 Author Report Posted April 5, 2012 Codul meu : #include <stdio.h>#include <string.h>int main () { char cuv[100], *p,str2[]=""; int lungime=0; int ok=1; int i; gets (cuv); p = strtok (cuv," ,.-"); while (p!=NULL) { strcat (str2, p ); p=strtok (NULL, " ,.-"); } lungime=strlen(str2); for (i=0;i<lungime/2;i++) if (str2!=str2[lungime-i-1]&&str2!=(str2[lungime-i-1]-32)&&str2!=(str2[lungime-i-1]+32)) ok=0; if (ok) printf ("Palindrom \n"); else printf ("Nu este palindrom \n"); return 0;} Quote
Addic73d Posted April 5, 2012 Report Posted April 5, 2012 (edited) Problema era legata de siruri de caractere cu aceasta proprietate, nu numere palindrom. Greseala mea, chiar nu citisem primul post pana sa vad replay-ul tau ... Edited April 5, 2012 by Addic73d Quote
Rfd Posted April 5, 2012 Report Posted April 5, 2012 Problema era legata de siruri de caractere cu aceasta proprietate, nu numere palindrom. Quote