Jump to content

cmiN

Active Members
  • Posts

    1609
  • Joined

  • Last visited

  • Days Won

    27

Everything posted by cmiN

  1. Iau si eu metoda pe datorie, strang intr-o saptamana >100$ (fara sa stau prea mult la pc) si apoi iti dau banii pe care i-am castigat in saptamana aia, apoi ce castig mai departe pastrez eu, dar daca nu e asa atunci nu primesti nimic ok ?
  2. Stalker (1979) Pi (1998) Primer (2004) The Fountain (2006) Nu numai la final vei sta pe ganduri dar si pe tot parcursul filmului vei simti un caracter dublu. Daca nu gasesti vreunul sa-ti placa (si in concordanta cu tema threadului) din cele de mai sus ma jur ca sterg postul.
  3. Rezolvat multe buguri, probleme cu unele intrebari (in special cele cu raspunsuri multiple sau cele cu raspuns pe mai multe linii) inca mai poate face faze (5% din cazuri dar daca mai dati o data enter sigur va arata raspunsul bun) si versiune cu executabil. Spor la copiat, vechiul copy-paste e demodat, avantajul se observa atunci cand raspunsul din primul rezultat nu e relevant pentru voi, de acolo ar fi inceput "overheadul" daca cautati manual pe google.
  4. Nu am idee, dar merge pentru orice intrebare ce se gaseste pe net, apoi sub ea se gasesc raspunsurile, iar raspunsul corect are in dreptul lui o steluta intre paranteze dar si acele intrebari care au un singur raspuns (cel corect) iar acesta este prins intre taguri si nu prea departe de intrebare. Mai am de lucrat la el sa-i pun un Next ca poate vrei sa vezi si alte variante de raspuns nu sa se opreasca la primul gasit si mai sunt cateva exceptii de intrebari in care nu-mi parseaza cum trebuie, am gasit si eu un motiv sa nu dau copy paste la quizuri degeaba ).
  5. Pentru cei ce dau quizuri SQL la scoala pentru acea diploma oracle-shit. linux/windows/mac ©miN 2012 V-ati saturat sa tot selectati tabul cu google, sa dati copy paste la intrebare, apoi sa alegeti un site relevant, apoi sa gasiti intrebarea, apoi sa-i cautati raspunsul, sa-l alegeti dupa sau dupa cum vine pus in pagina si apoi sa va intoarceti la tabul cu quizul deschis si apoi sa bifati si acolo raspunsul corect ? Cu acest soft e nevoie doar de un simplu Ctrl-C Ctrl-V si dupa ce dati enter in mai putin de o secunda primiti raspunsul corect. Scriptul poate fi foarte usor adaptat si la altfel de perechi intrebare-raspuns(uri), singurul lucru ce trebuie modificat (adaugat) este functia de parsare a paginii cu intrebarea identica gasita acolo, astfel incat sa poata extrage raspunsul de sub intrebare cu un anumit model codat de voi desigur. Chiar daca nu va intereseaza niciuna din cele de mai sus, softul este robust, bine pus la punct, cod clar si comentat, logica in ordinea actiunilor si este un foarte bun exemplu pentru amatorii de programare concurenta si legatura minima de 0-dependenta intre interfata-motor desi exista sincronizari primitive live. [Python] oaf - Pastebin.com #! /usr/bin/env python # Oracle Answer Finder # 02.05.2012 cmiN from Tkinter import * from urllib2 import build_opener, HTTPError, URLError from urlparse import urlparse from threading import Thread, Event from socket import setdefaulttimeout, timeout # constants SMAX = 8 # maximum number of results DIFF = 512 # how many chars to skip until the answer TOUT = 2 # timeout in seconds class GUI(Frame): def __init__(self, master=None, margin=10): Frame.__init__(self, master) self.app = Engine() # main app self.thread = None # Thread object used for parallel processing self.master.title("OAF - cmiN") self.grid(padx=margin, pady=margin) self.widgets() self.mainloop() def callback(self, event): """What happens after you press Enter in Question's entry.""" # get and edit question qon = self.app.edit_qon(self.qEntry.get()) if self.thread: # if it was initialized before # check question if qon == self.app.qon[0]: # same question (no reset) if self.thread.is_alive(): # let it finish return else: self.app.data = "" # empty buffer self.app.dataLen = 0 else: # another if self.thread.is_alive(): self.app.stop() self.thread.join() self.app.reset() # reset everything # set question self.app.set_qon(qon) # process data self.thread = Thread(target=self.app.process) self.thread.start() # no return def widgets(self): # variables self.statusVar = StringVar(value="Ready.") # passed to Thread class for live updating #self.ansVar = StringVar() # same thing, but for answer self.app.statusVar = self.statusVar #self.app.ansVar = self.ansVar # label-entry pairs self.qLabel = Label(self, text="Question:") self.qEntry = Entry(self, width=100) self.aLabel = Label(self, text="Answer:") #self.aEntry = Entry(self, width=100, textvariable=self.ansVar) self.qLabel.grid(row=0, column=0, sticky="w") self.qEntry.grid(row=1, column=0) self.aLabel.grid(row=2, column=0, sticky="w") #self.aEntry.grid(row=3, column=0) # status widget self.sLabel1 = Label(self, text="Status:") self.sLabel2 = Label(self, width=86, textvariable=self.statusVar, relief="sunken", bd=2, anchor="c") self.sLabel1.grid(row=4, column=0, sticky="w") self.sLabel2.grid(row=5, column=0, sticky="w") # text instead entry for answer self.ansText = Text(self, width=75, height=10) self.ansText.grid(row=3, column=0) self.app.ansText = self.ansText # make it available to the engine # behavior self.qEntry.bind("<Return>", self.callback) self.qEntry.bind("<KP_Enter>", self.callback) class Engine: def __init__(self): setdefaulttimeout(TOUT) self.opener = build_opener() self.opener.addheaders = [("User-agent", "Mozilla/5.0")] self.qon = ["", ""] # question self.data = "" # data contain the question [and answer] self.dataLen = 0 # data length self.start = 0 # google first result self.first = "url?q=" # from self.second = "&amp" # to self.seen = set() # evidence of visited links self.statusVar = None # through this set status self.ansVar = None # through this set answer if available self.ansText = None # almost same shit self.__stop = Event() # stop the process self.upEvent = Event() # solve the deadlock self.upEvent.set() # means it's safe (.wait will wait until .set is called or .is_set() is True) def update(self, status, answer): """Here is a fucking deadlock, when the same function is called simultaneously.""" self.upEvent.wait() # wait to be setted self.upEvent.clear() # make it busy # do your ugly things if hasattr(self.statusVar, "set") and hasattr(self.statusVar, "get"): self.statusVar.set(status) self.statusVar.get() # just to make sure the update finished if hasattr(self.ansVar, "set") and hasattr(self.ansVar, "get"): self.ansVar.set(answer) self.ansVar.get() if hasattr(self.ansText, "insert") and hasattr(self.ansText, "delete"): self.ansText.delete(0.0, END) self.ansText.insert(0.0, answer) self.upEvent.set() # make it available def stop(self): self.update("Stopping...", "") self.__stop.set() def stopped(self): return self.__stop.is_set() def reset(self): self.__stop.clear() self.start = 0 self.seen = set() #self.update("Ready.", "") def edit_qon(self, qon): return qon.strip().split("\n")[0] # idiot proof def set_qon(self, qon): """Set question.""" self.qon[0] = qon self.qon[1] = '"' + self.qon[0].replace(" ", "+") + '"' def find(self): """Find links corresponding to query using google. Returns: 0 -> match, link extracted, data updated 1 -> no match for exact string 2 -> url already visited or invalid url 3 -> banned 4 -> maximum number of results exceeded """ if self.start >= SMAX: return 4 link = "http://www.google.com/search?q={}&start={}".format(self.qon[1], self.start) try: fobj = self.opener.open(link) except HTTPError: self.update("Google banned you.", "") return 3 except timeout: self.update("Timed out or Google banned you.", "") return 3 else: data = fobj.read() # google's source fobj.close() # find a relevant closest position to the link index1 = data.find(self.first) if index1 == -1: # no results in page or modified pattern return 1 # invalid source self.start += 1 # now do the increment index1 += len(self.first) index2 = data.find(self.second, index1) url = data[index1:index2] # edit url newurl = "" i = 0 length = len(url) while i < length: if url[i] == "%": char = chr(int(url[i + 1] + url[i + 2], 16)) i += 2 else: char = url[i] newurl += char i += 1 url = newurl # process it if url in self.seen: # link already visited return 2 self.seen.add(url) upo = urlparse(url) self.update("Looking in %s..." % upo.netloc, "") try: fobj = self.opener.open(url) except URLError: self.update("Invalid link.", "") return 2 except timeout: self.update("Timed out.", "") return 3 else: self.data = fobj.read() self.dataLen = len(self.data) fobj.close() return 0 # all fine def check(self, old, index): if index < 0 or index >= self.dataLen: return False # invalid index if abs(old - index) > DIFF: return False # too far return True # ok def get_star(self, index): """Find the line with . Returns: str -> good answer False -> invalid answer or couldn't find """ ansNr = 1 # default answers (for multiple ones) chunk = "(Choose " firstTag = self.data.find("<", index) chunkIndex = self.data.find(chunk, index, firstTag) if chunkIndex != -1: chunkIndex += len(chunk) number = "" while self.data[chunkIndex] != ")": number += self.data[chunkIndex] chunkIndex += 1 number = number.strip().lower() if number == "two": ansNr = 2 elif number == "three": ansNr = 3 elif number == "four": ansNr = 4 # i don't think this actually exists star = "(*)" last = index ans = "" while ansNr: index = self.data.find(star, last) - 1 last = index + 1 + len(star) if index < 0: return False # invalid answer type # ok now we're good old = index while True: tag = True while self.data[index] != ">": if tag and self.data[index].isspace(): index -= 1 continue if tag: ans = "\n" + ans tag = False # found alphanumeric ans = self.data[index] + ans index -= 1 if not self.check(old, index): return False ans = ans.strip() if tag and len(ans) > 0: break while self.data[index] != "<": index -= 1 index -= 1 ansNr -= 1 ans = "\n" + ans return ans.strip() def get_single(self, index): """Line with single answer. Returns: str -> good answer False -> invalid answer or couldn't find """ new = True # first answer (if multiple) ans = "" smooth = 1 # tag number difference while True: old = index # go to the first tag while self.data[index] != "<": index += 1 if not self.check(old, index): return False # no skip all of them nrTag = 0 while self.data[index] == "<": while self.data[index] != ">": index += 1 index += 1 nrTag += 1 # add tag if not self.check(old, index): return False if new: new = False # not new anymore model = nrTag if abs(nrTag - model) > smooth: break # no incoming answers to this question while self.data[index] != "<": ans += self.data[index] index += 1 if not self.check(old, index): return False # add separator (don't worry, we will strip it at the end) ans = ans.strip() + "\n\n" ans = ans.strip() if ans == "": return False # empty one return ans def process(self): """Try to find answers to quiz questions by searching them on google. Format string, search it on google, locate first %d results, then search among them for patterns (question<>...<>answer<> or question<>answer...<>). Returns: str -> answer found (or false positive) 1 -> invalid/inexistent question (or google invalid source pattern) 2 -> answer not found (or different search pattern) 3 -> stopped 4 -> banned """ % SMAX ret = 0 # virtual return while True: if self.stopped(): return 3 # stopped if ret == 1: self.update("Invalid question.", "") return 1 # invalid question elif ret == 2: # already seen or invalid ret = self.find() continue elif ret == 3: return 4 # timed out or banned (too many queries) elif ret == 4: self.update("Nothing found.", "") return 2 # not found index = self.data.find(self.qon[0]) if index >= 0: #index += len(self.qon[0]) # conflict with star (need some data from question) ans = self.get_star(index) if not ans: ans = self.get_single(index) if ans: self.update("Answer found!", ans) return ans # string ok ret = self.find() if __name__ == "__main__": GUI(Tk()) Dupa ce consider ca nu da gres deloc si nu face vreo faza prea ciudata (in limita bunului simt al utilizatorului) inghet versiune cu executabil pentru windows, deocamdata raportati-mi buguri, critici si pareri, totusi daca nu aveti rabdare sa va puneti Python si pe alte masini puteti sa va rezolvati foarte repede cu cx_Freeze. Nou! Daca nu va place raspunsul primit mai puteti apasa o data enter la aceeasi intrebare si el va cauta prin urmatoarele rezultate dupa un nou raspuns. In timp ce cauta daca schimbati intrebarea si dati iar enter atunci ii da un semnal sa inceteze cautarea curenta si apoi trece la cea noua (experimental, mai ingheata uneori (deadlocks)). V-am promis si versiunea portabila pentru windows: box gf
  6. Si la Cluj e meserie (Siemens, firme care cer python), dar acolo te asigur eu ca se intra mai greu si toti au ditamai mediile. La Iasi dau un test la iei la info 50% (materie de bac, deci prea lejer) apoi 25% cat iau la info bac (din nou lejer) si restul de 25% media bacului, DAR fiindca am participat (scrie si pe site: nu premiu, participare) la nationala info (poate fi si mate, fizica, etc.) intr-a a 11-a sau a 12-a (am luat un bronz sub mentiuni) imi pot inlocui unul din cele 3 procentaje cu 10 curat la ei. Deci la ambele info o sa iau 10 (jumatate de ora teza, restul timpului debug sa nu fi gresit ca idiotu) si bacul il trec cu 6 apoi mi-l fac 10 in total 10.00 -> cap de lista, poate face UBB asta pentru mine ?
  7. Nici una nici alta! Aduna tot raul citit mai sus si ii vei gasi opusul la FII (UAIC). Scapi de mate, timp liber cat la fara frecventa, program si asociatii special concepute pentru a distra studentul, oras mult mai frumos, faci java si c/c++, multa oop, ceva algo, structuri, ai, scripting, sisteme de operare ... cateva ramuri obligatorii, restul seminarii + optionale. Daca esti baiat destept si ti-ai dat seama ca in Ro facultatea nu te face om, atunci chiar trebuie s-o faci pentru diploma (carte de munca), pentru distractie si pentru timpul liber alocat proiectelor (cv), freelancingului $, femei, etc. Cea mai buna solutie ramane cum am zis mai sus si cum am scris si in postul asta, nu-mi place sa ma repet.
  8. @Gecko De ce toata lumea asculta cacatul ala comercial de 178MegaViews fara pic de sentiment fara sa fi auzit de ?De cand a murit MJ toata lumea ii asculta si cumpara albumele, de cand o dau pe Adele la KissFM toti cocalarii au devenit sensibili fara sa fi auzit pana acum de vechiul Hometown glory care pe departe a depasit-o pe Someone like you.
  9. Fiecare site sau aplicatie standard oficiala vine cu un disclaimer. Daca l-ai citit pe tot + anexe si consideri ca e ceva care iti afecteaza intimitatea si vii cu dovezi si argumente, poti da in judecata firma pentru ca nu ti-a specificat si nu te-a informat corect sau complet, avand obligatia sa stearga orice abatere legata de tine cu o eventuala continuare a serviciului respectand noii termeni sau intreruperea acestuia. Gandeste-te ca cineva odata si odata tot inventa "afacerea" asta, omul dintotdeauna a vrut sa conduca sa manipuleze si sa-si faca sclavi indirect asa ca daca nu erai tu victima si erai destul de inteligent + sange rece ai fi facut si tu acest lucru altor persoane pentru niste bani foarte frumosi, ba din contra aveai o conceptie destul de radicala, gandind ca pur si simplu ajuti persoane prelucrand informatii prin AI in sensul ca o aplicatie poate "invata" din "greseli". De ce nu-ti acuzi creierul ca de la o anumita varsta iti completeaza aproape orice imagine, culoare sau forma pe care o vezi si ca nu poti vedea cu adevarat acel lucru exact asa cum e el de fapt ? Si in momentul ala daca vrei te duci mai aproape, analizezi mai bine, incerci sa privesti din alta perspectiva si daca esti la un nivel cognitiv mai superior vei vedea cu adevarat ceea ce cauti. Asa si cu marketingul/economia/politica ori o iei peste picior si ambele parti sunt impacate ori traiesti intr-un fel de simbioza falsa: ei sunt fericiti ca te-au pacalit, tu esti fericit ca ai primit totul pe tava . Eu am un singur cont de mess din 2005 pe care il folosesc si pentru mail si IM, am si gmail (prefer google) dar nu pot obliga persoane de rand sa foloseasca servicii neconventionale (pentru ei) doar pentru a-mi satisface placerea si libertatea. Poate ca am un cont de G+, unul de facebook (pentru hacker cup), de lastfm sau alte minuni care se implica in lucruri personale, dar nu le joc niciodata jocul lor sadic de a pune poze, de a partaja informatii, intr-un cuvant de a-mi pune viata pe net. Nu! Folosesc doar pentru anumite servicii cu 0% implicare personala, scurt si la obiect, ba chiar ma asigur ca la sectiunea privacy setez totul atat cat stie si statul (nume, adresa, varsta). Nu folosesc telefonul mobil (destul de rar in cazuri de urgenta) de aceea am acel cont de messenger, nu-i pot lasa pe ceilalti sa-mi afecteze deciziile si implicit viitorul prin raspandirea unei stiri unei solicitari, etc. De cand am internet, indiferent ce decizii am luat tot ceea ce caut sau ceea ce fac prin intermediul acestuia nu s-a schimbat deloc, nu i-am lasat sa ma afecteze sau macar traiesc cu impresia. In ziua de azi putini pot sta neutri ... ori isi pun cutiuta la treaba si imbunatatesc sistemul <darkside> (totodata orbiti de castiguri) ori cad de sclavi cu incapacitatea de a constientiza sau daca realizeaza acest lucru considera ca deja e prea tarziu. Tu ce crezi pyth0n3 ... oare chiar mai merita efortul luptei astea continue ? E la fel cum te-ai apuca sa convingi toti cocalarii ca asculta un gen de muzica fara sens, chiar daca la o petrecere dupa cateva beri tot o manea te unge la suflet .
  10. Prea multe socketuri create, ai depasit limita de conexiuni, fire sau tevi.
  11. Un cont nu se sparge, se fura/afla parola/cookieul, este de ajuns ingineria sociala, dar pentru mase functioneaza si phishingul, wormii, vulnerabilitati in siteuri/servere. Mai sunt si cateva cazuri izolate gen vrajelile de pe ebay sau cand se cloneaza carduri, se folosesc tot felul de cititoare sau jammere in bancomate si cu putina prostie din partea victimelor sau tertilor se ajunge la astfel de rezultate. Nu am ceva cu acest caz, am vorbit in numele tuturor threadurilor si stirilor (in special de pe protv) de genul.
  12. Arestati ar trebui aia care intra in toate cacaturile de mailuri cu scam pageuri (din cele 1337 cam cate au in medie in inbox/spam nu stiu cum nimeresc sa dea click fix pe alea) sau toti idiotii care cum au vazut un link pe facebook cu picture.jpg.exe dau click. Daca esti atat de prost sa-ti scrii datele personale in fiecare caseta pe care o gasesti si mai tii si aceeasi parola la toate conturile pe care le-ai avut le ai si le vei avea atunci nu meriti banii aia din cont.
  13. * Carti nu prea am citit dar una singura m-a pus pe ganduri: Roadside picnic * Dupa ea a urmat si filmul: Stalker 1979 in regia lui Tarkovsky (omul asta e mai mult decat un geniu, vedeti si restul filmelor, nu mindfuckurile alea comerciale). * Dupa film au urmat jocurile: S.T.A.L.K.E.R. (Shadow Of Chernobyl, Clear Sky, Call Of Pripyat) ... cea mai buna combinatie de rusi, fps-rpg, fizica, Zona, dezastrul de la centrala atomica (26 aprilie, ca si data mea de nastere :]). Similare: Metro, Cryostasis. Daca tot vorbesc de jocuri vreau sa amintesc si de povestea (pe care nici acum nu am uitat-o) din Star Wars KOTOR (I si II, III e mmorpg), in cautarea celor similare am dat de Mass Effect (mult mai bine pus la punct la partea de AI si interactiune umana) si dintotdeauna jazzul a stat bine pe langa Fallout (cei ce nu au rabdare sa sara direct la 3 apoi New Vegas). Apreciez si respect munca depusa in miile de dialoguri inregistrate de actori pentru astfel de jocuri (desi par mai mult filme) efortul de a face tot felul de schite si designuri cat mai reusite pentru "lume", OSTul unic care chiar inspira ceva in functie de loc, decizii si personaje, etc, intelegeti voi ideea . Nu sunt genul NFS, COD, Crysis, Max Payne, AC, Prototype (desi am trecut si prin astea ... imi placea sa le iau si sa le termin pe banda rulanta ) dar am descoperit senzatii tari in puzzle games ce iti mai pun si mintea la contributie fara a plictisi ca Penumbra (facusem un challenge inspirat din asa ceva), Dreamfall, Syberia, Amnesia, pentru o lista mult mai lunga aici. Deja incep s-o lungesc si ajung de la lucrurile care chiar m-au marcat la ceva ce pur si simplu "imi place". * Desene: Nu am vazut nicaieri (nici in filme/emisiuni) atata umor inteligent, joc de cuvinte, satira subtila, originalitate si buna dispozitie cat am gasit in seria Futurama (3 filme + 6 sezoane) atatea caractere si tipologii din viata de zi cu zi, atat de bine sudate. * Constienta mortii: Vazusem candva Melancholia, The Bucket List apoi The Fountain si mi s-au trezit niste ganduri (acompaniate de transpiratii reci) ca nimeni nu scapa de moarte, la o anumita varsta, la un moment dat va trebui sa te confrunti cu "trecerea" catre ceea ce urmeaza, dar (stiu ca suna cam ateist) daca nu exista un "urmator pas", o urmatoare constienta, pur si simplu incetezi in a exista ?
  14. cmiN

    Problema

    1) Identarea e fututa, pune cate 4 spatii cum trebuie, probabil ca le ai puse deja, dar la copy paste s-au pierdut, oricum daca ea nu e buna uneori in loc de erori primesti comportament ciudat (de fapt ciudat pentru tine ca pcul face exact ceea ce ii zici). 2) Ifurile sunt gandite prost, intotdeauna se va executa convertMiles fiindca primul if va fi intotdeauna True, deoarece prioritate are operatorul de comparatie apoi cei logici si chiar daca nu ar fi fost asa tot este aiurea pentru ca programul mai intai verifica daca ai introdus "miles" (sa zicem ca tu ai introdus "km") -> False apoi se duce la primul or si verifica expresia de dupa el "Miles" care este True (orice difera de 0, None, False, "", [], () este True). Ideea este ca dupa fiecare or sa te repeti cu distype == (adica if distype == "miles" or distype == "Miles" or distype == "Mil" or distype == "mil":). Dar dupa cum vezi e mult cod redundant asa ca ce ar fi sa restrangem iful la if distype in ("miles", "Miles", "Mil", "mil") ce poate fi redus la if distype.lower() in ("miles", "mil") ce poate fi redus la if distype[:3].lower() == "mil" sau de ce nu if distype[0].lower() == "m" analog si pentru km. Intotdeauna cand faci un program de genul ce interogheaza utilizatorul cauta sa stabilesti niste reguli stricte, spre exemplu sa verifici daca distanta este exact "mil" sau "km" daca nu sa fie semnalat cu un avertisment ca a introdus ceva gresit si cu posibilele intrari urmat de un exit sau reluare a buclei (daca faci o bucla a carei scapare este doar introducerea tuturor datelor corect). Oricum cred ca te-am plictisit deja, daca ai ajuns cu cititul pana aici e bine, totusi ar mai fi un: 3) Poti formata sirurile C-like: "Ana are %d mere si 4 %s." % (23, "pere") sau "Ana are {} mere si 4 {}.".format(23, pere). La .format cand nu ai nimic intre acolade atunci se ia ordinea argumentelor din paranteza rotunda a metodei, dar poti avea numere la acolade {0}...{1} si atunci se iau argumentele in functie de locul ocupat prin numar, dar se pot folosi si argumente de tip keyword adica: "Ana are {nrMere} mere si 4 {fruct}.".format(fruct="pere", nrMere=23) Daca mai ma uit mult pe codul tau mai dau si de altele dar nu are rost eu cand eram incepator nici de atat nu eram in stare , ma mir ca mai exista interes pentru asa ceva in noile generatii. Pune-te la punct cu logica, cu cele mai scurte si clare drumuri, gandeste algoritmul a fi cat mai robust si prompt si apoi apuca-te de practica mereu cu ideea in minte ca nu programul trebuie sa depinda de user ci invers (cel putin ca incepator) fiindca risti sa incepi cu stangul din prima.
  15. O combinatie unica de lo-fi, easy trip-hop, lounge, toate la un loc formand un chill out mai picant, oricum sunt melodii bune, necomerciale (poate am mai scapat cate una doua). Printre ele am strecurat si 3 care nu apartin genurilor de mai sus, dar suna bine. Ca feedback dati reply cu intrusii plus melodia preferata . RS: chill15 chill16 GF: chill15 chill16 Daca v-au placut vedeti si packul anterior.
  16. Nici unghiurile nu mai sunt o problema, vezi data mining si computer vision din ai, oricum voi va concentrati prea mult pe hardware, ce mi-a placut detasat din video a fost: "Open source ? Wow!" mentalitatea conteaza.
  17. In domeniul asta sunt foarte multe lucruri pe care daca nu le poti invata singur nu meriti sa le stii, iar daca incerci ceva contra cost nu inseamna ca ai invatat ceva, ci pur si simplu ai cumparat ceva informatie temporara care trece pe langa tine si-si manifesta efectul, dar nu si posesia pe care ar trebui sa o ai asupra ei (asocierea nevasta-curva). Apoi dupa ce ai invatat baza si vine si vremea cand nu mai rezisti si ceri ajutor, trebuie sa stii cum sa-ti formulezi intrebarile si daca nu-ti sare cineva instant in ajutor (cum se asteapta majoritatea) tot e bine, poate gasesti singur raspunsul la intrebare ceea ce face sa se prinda mult mai bine informatia de tine, mai profund ... de multe ori realizezi ca nu ai intrebat ce trebuie. Asa si cu intrebarea de mai sus, ai primit raspunsuri pe masura ei. Demonstreaza utilitatea acelei sectiuni, adu argumente pro si contra, incearca sa ne convingi chiar daca stii ca raspunsul in final tot nu va fi.
  18. De ce nu ai pastrat toate sirurile alea intr-un set (abc) sau vector pe care sa-l sortezi (sau sortat de la inceput) si apoi cautai logaritmic un match. Orice if returneaza acelasi lucru deci 98% cod redundant.
  19. ^ are exact tot ce ai scris mai sus cu exceptia verificarii in timp real, banuiesc ca te refereai ca in eclipse sa-ti arate daca e ceva in neregula sau daca ai scris ceva eronat (sa-ti arate in stanga un semn ceva). Debuggerul in cb este mai mult decat excelent, dar un programator cu mintea lucida se descurca din printuri . In plus este cross-platform si este prima alegere in linux pentru c++ ide (daca nu ne gandim la cei 1337 in vim). Mi se pare mult mai usor de costumizat la partea de formatare si stilul codului. O fi si celalalt bun dar pur si simplu nu suport ideea micro$hit.
  20. cmiN

    [C/C++]Palindrome

    Voi chiar aveti fetishuri cu probleme cu palindroame ? Ca si la sectiunea cu challengeuri se tot postau diverse chestii similare, nu am vazut niciodata atata interes si surse pentru ceva atat de banal -,-. Eu am luat Accepted cu 0.68s. Ideone.com | Online C++ Compiler & Debugging Tool /* * Rezolvarea naiva in N^3. * * Se putea si mai rapid in N^2 folosind doua cozi. In prima bagam primul caracter si in a doua urmatorul. * Apoi pentru a creste lungimea bagam in prima coada primul caracter din a doua coada, iar aceasta * primea inca 2 caractere (daca mai existau). La fiecare scoatere-bagare se actualizau doua numere * pe post de hashuri. Aceste doua hashuri se comparau in O(1) folosind `==` astfel scutind inca o dimensiune. * * Calcularea numerelor se facea astfel: se scadea din caracterul curent caracterul 'A' ('A' < 'a') si se aduna la suma. * Inainte de adunare suma era inmultita cu 100 (pentru evitarea coliziunilor evidente) pentru prima suma (specifica primei cozi). * Din a doua suma se scadea valoarea primului caracter si se adunau pe rand primul caracter la puterea `p` si al doilea la puterea `p` + 1. * Unde `p` reprezinta numarul de caractere din prima coada - 1 (adica jumatate de palindrom). * * Deoarece sumele sunt foarte mari se facea modulo cu o constanta destul de mare si pentru evitarea coliziunilor mai putin evidente * se foloseau vreo `k` constante (3-6) diferite pentru a compara sumele intre ele, astfel crescand acuratetea. * Complexitatea finala devenea O(KN^2). */ #include <iostream> #include <string> using namespace std; int maxPal; // dimensiunea maxima string str, pal; // sirul sursa, palindromul maxim void solve() { /** * Pentru fiecare pozitie si lungime se genereaza o subsecventa * ce se compara cu ea insasi pornind din extremitati. * Probabil daca se genereaza si inversul acesteia dureaza ceva mai mult * chiar daca complexitatea teoretica ramane aceeasi. */ for (int pos = 0; pos < str.size(); ++pos) { for (int len = 1; len <= str.size() - pos; ++len) { string sub = str.substr(pos, len); bool isPal = true; for (int i = 0; i < len / 2 && isPal; i++) { if (sub[i] != sub[len - i - 1]) isPal = false; } if (isPal && len > maxPal) { maxPal = len; pal = sub; } } } } int main() { cin >> str; solve(); // rezolvam cout << pal; return 0; } P.S.: Macar citeste si comentariile inainte sa dai copy paste .
  21. Omg )) daca gasesti caracterul ca fiind \n sau \r gata te-ai oprit ca indiferent ce face enter si pe ce sistem de operare esti tot primesti unul sau o combinatie din ele. Cata paguba.
  22. c == 13 || c == 10 Nu pe toate sistemele de operare enter returneaza \r (sau \r\n ca sa existe si \r).
×
×
  • Create New...