Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zadaci za wannabe pythoniste

[es] :: Python :: Zadaci za wannabe pythoniste

Strane: << < .. 26 27 28 29 30 31 32

[ Pregleda: 51793 | Odgovora: 629 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mjanjic
Šikagou

Član broj: 187539
Poruke: 2700



+699 Profil

icon Re: Zadaci za wannabe pythoniste21.05.2020. u 21:41 - pre 47 meseci
Ako već postavljaš na Github, koristi samo engleski, dakle u ovom tvom kodu umesto "novi" stavi neki smislen naziv na engleskom.
Blessed are those who can laugh at themselves, for they shall never cease to be amused.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
65.18.117.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste22.05.2020. u 02:40 - pre 47 meseci
Kad sam ja mogao da naučim engleski, neka i Englezi uče malo srpski.
Šta fali? Možda im zatreba

Ma odsad ću da krenem ćirilične varijable da pišem
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste22.05.2020. u 02:50 - pre 47 meseci
"Ma odsad ću da krenem ćirilične varijable da pišem "

Mislim da to moze u nekim jezicima :P

recimo c++ moze:
Code:

~/.../bmaxa_data/examples >>> cat cyr.cpp                                                           
#include <iostream>

int main() {
    int ćir = 5;
    std::cout << ćir << std::endl;
}
~/.../bmaxa_data/examples >>> g++ -O3 -march=native cyr.cpp                                         
~/.../bmaxa_data/examples >>> ./a.out                                                               
5


Naravno forum je preslovio ali u originalu u source kodu je cirlicna varijabla :P
 
Odgovor na temu

mjanjic
Šikagou

Član broj: 187539
Poruke: 2700



+699 Profil

icon Re: Zadaci za wannabe pythoniste22.05.2020. u 03:07 - pre 47 meseci
Ma ne C++, ima ħ++, tu je čak i zvanična stranica: https://%D1%9B%D0%BF%D0%BF.%D1%81%D1%80%D0%B1
Blessed are those who can laugh at themselves, for they shall never cease to be amused.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste22.05.2020. u 03:27 - pre 47 meseci
Ja evo probao sa obicnim C++, mozes komplet program u cirilici ;)
Opalis #define za rezervisane reci i pici ;)
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
65.18.117.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste22.05.2020. u 03:49 - pre 47 meseci
Citat:
mjanjic:
Ma ne C++, ima ħ++, tu je čak i zvanična stranica: https://%D1%9B%D0%BF%D0%BF.%D1%81%D1%80%D0%B1

haha ovo je super!

Ćiriliks - operativni sistem
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
65.18.117.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste22.05.2020. u 08:17 - pre 47 meseci
Zadatak broj 44: Suglasnici i samoglasnici naizmenično

# Our robots are always working to improve their linguistic skills. For this mission, they
# research the latin alphabet and its applications.

# The alphabet contains both vowel and consonant letters (yes, we divide the letters).
# Vowels -- A E I O U Y
# Consonants -- B C D F G H J K L M N P Q R S T V W X Z

# You are given a block of text with different words. These words are separated by white-spaces
# and punctuation marks. Numbers are not considered words in this mission (a mix of letters and
# digits is not a word either). You should count the number of words (striped words) where the
# vowels with consonants are alternating, that is; words that you count cannot have two
# consecutive vowels or consonants. The words consisting of a single letter are not striped --
# do not count those. Casing is not significant for this mission.

# Input: A text as a string (unicode)
# Output: A quantity of striped words as an integer.
# Precondition:The text contains only ASCII symbols.
# 0 < len(text) < 105

Code:
def checkio(text):
    
    "tvoj kod ovde"
    
    return rezultat

#These "asserts" using only for self-checking and not necessary for auto-testing
if __name__ == '__main__':
    assert checkio("My name is ...") == 3, "All words are striped"
    assert checkio("Hello world") == 0, "No one"
    assert checkio("A quantity of striped words.") == 1, "Only of"
    assert checkio("Dog,cat,mouse,bird.Human.") == 3, "Dog, cat and human"
    assert checkio("To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it?") == 8
    print('If it is done - it is Done. Go Check it NOW!')


Moje rešenje ovde.
 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 803



+634 Profil

icon Re: Zadaci za wannabe pythoniste22.05.2020. u 14:44 - pre 47 meseci
Previse si se upetljao s ovim indeksima i par-nepar sistemom. Pokusaj da problem resis na nacin kako bi ga resavao pesice, da nemas kompjuter. Zadas neku rec, tipa "maramica". Treba da ispitas da li u toj reci ima dva susedna samoglasnika ili suglasnika. Algoritam bi bio:

* Uvedes varijablu kojom pratis prethodno slovo u reci (npr. 'prev_ch'). U pocetku je to prazan string ('').
* Za svako slovo u reci gledas da li je samoglasnik ili suglasnik. Ako je samoglasnik i prethodno slovo je samoglasnik - prekidas petlju.
* Slicno ako je suglasnik i prethodno slovo je suglasnik.
* U suprotnom prev_ch postavljas na vrednost tekuceg karaktera i ides dalje.

Takodje, nema potrebe da imas VOWELS in CONSONANTS u posebnim promenljivim - ako slovo nije samoglasnik ono je suglasnik, nema treceg.
I nema potrebe da pravis silne liste, zapravo novi_txt3 ti uopste nije potrebna. Cemu to?

Na kraju, mnogo puta prolazis kroz istu petlju, dok sve mozes da obavis u samo jednom prolazu.

Znaci:
Code (python):

def checkio(text):
    count = 0
    words = re.split(r'[?,.!\s]', text.upper())
    for word in words:
        if (len(word) <=1 or re.search(r'[0-9]', word)):
            continue
        valid_word = True
        prev_ch = word[0]
        for ch in word[1:]:
            if ((ch in VOWELS and prev_ch in VOWELS) or (ch not in VOWELS and prev_ch not in VOWELS)):
                valid_word = False
                break
            prev_ch = ch
        if (valid_word):
            count += 1
    return count
 


Moze to i krace. Posto si u kodu vec pokazao da umes da koristis regularne izraze, njihovim koriscenjem izbegavas iteraciju po slovima:

Code (python):

def checkio(text):
    count = 0
    for word in re.split(r'[?,.!\s]', text.upper()):
        if (len(word) <=1 or re.search(r'[0-9]', word)):
            continue
        if (not re.search('[AEIOYU]{2}', word) and not re.search('[BCDFGHJKLMNPQRSTVWXZ]{2}', word)):   #  [x]{2} = najmanje dva pojavljivanja znakova iz skupa [x]
            count += 1
    return count
 


A moze i sve u jednom if-u:

Code (python):

def checkio(text):
    count = 0
    for word in re.split(r'[?,.!\s]', text.upper()):
        if (len(word) > 1  and not re.search(r'[0-9]', word) and not re.search('[AEIOYU]{2}', word) and not re.search('[BCDFGHJKLMNPQRSTVWXZ]{2}', word)):
            count += 1
    return count
 
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
65.18.117.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste22.05.2020. u 17:18 - pre 47 meseci
Berislave, ja sam to uradio ekstenzivnom metodom da pokažem svoj raskošan talenat :)))

Ma ja sam bio prezadovoljan da sam uošte uspeo da rešim. Kako god.
Da, ta provera prethodnog slova mi je trebala, ali nisam znao kako.
Sad imam mustru.

Hvala na analizi i primerima.
Sačuvaću i proučiću, da nešto novo naučim.

To što kažeš na početku jeste vrlo važno.
Ja kad vidim zadatak, odmah krenem da kucam kod i da testiram u terminalu.
A trebalo bi prvo da napravim to što zovu pseudo kod, tj. recept, pa tek onda
da krenem da kuvam.

I tu dolazim do zadatka 45: Ukloni nepar zagrade
koji mi izgleda komplikovan, jer ne vidim jasan recept, ni kratak ni dugačak.

Prvo što mi pada na pamet je da prebrojim zagrade i stavim u rečnik.
Onda vidim kojih ima nepar, pa te uklonim. Ali nisam siguran da će to baš da radi.
Moram probati. Zavisi valjda od primera.


# Your task is to restore the balance of open and closed brackets by removing unnecessary ones,
# while trying to use the minimum number of deletions.

# Only 3 types of brackets (), [] and {} can be used in the given string.

# Only a parenthesis can close a parenthesis. That is. in this expression "(}" - the brackets
# aren’t balanced. In an empty string, i.e., in a string that doesn’t contain any brackets
# - the brackets are balanced, but removing all of the brackets isn’t considered to be an
# optimal solution.

# If there are more than one correct answer, then you should choose the one where the character
# that can be removed is closer to the beginning. For example, in this case "[(])", the correct
# answer will be "()", since the removable brackets are closer to the beginning of the line.

# Input: A string of characters () {} []
# Output: A string of characters () {} []


Code:
def remove_brackets(a):
    # your code here
    return None


if __name__ == '__main__':
    print("Example:")
    print(remove_brackets('(()()'))

    # These "asserts" are used for self-checking and not for an auto-testing
    assert remove_brackets('(()()') == '()()'
    assert remove_brackets('[][[[') == '[]'
    assert remove_brackets('[[(}]]') == '[[]]'
    assert remove_brackets('[[{}()]]') == '[[{}()]]'
    assert remove_brackets('[[[[[[') == ''
    assert remove_brackets('[[[[}') == ''
    assert remove_brackets('') == ''
    print("Coding complete? Click 'Check' to earn cool rewards!")
 
Odgovor na temu

mjanjic
Šikagou

Član broj: 187539
Poruke: 2700



+699 Profil

icon Re: Zadaci za wannabe pythoniste22.05.2020. u 21:36 - pre 47 meseci
hm, sad sledeći "nivo", da se tekst napisan korejskim hangulom transkribuje u latinicu :)
https://stackoverflow.com/ques...t-hangul-lettersymbol-to-latin
Blessed are those who can laugh at themselves, for they shall never cease to be amused.
 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 803



+634 Profil

icon Re: Zadaci za wannabe pythoniste22.05.2020. u 23:55 - pre 47 meseci
Zadatak 45 je za neki visi kurs programiranja. Probaj da resis laksi slucaj - kada imas samo jednu vrstu zagrada - npr. ((())())()()) ...

Za resavanje tog problema potrazi na netu pojam "stack" i prouci kako rade stekovi.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste23.05.2020. u 00:53 - pre 47 meseci
"Za resavanje tog problema potrazi na netu pojam "stack" i prouci kako rade stekovi."

Lepo si to uocio rekurzivne parsere sam pravio kad sam ucio pre 30 godina :P
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
65.18.117.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste23.05.2020. u 08:26 - pre 47 meseci
Citat:
B3R1:
Zadatak 45 je za neki visi kurs programiranja. Probaj da resis laksi slucaj - kada imas samo jednu vrstu zagrada - npr. ((())())()()) ...

Za resavanje tog problema potrazi na netu pojam "stack" i prouci kako rade stekovi.


Proučio stackove. To je isto kao lista, sa append and pop.
I primenio u ovom rešenju za sve tri vrste zagrada:

Code:
o_lista = ["[","{","("] 
z_lista = ["]","}",")"]

def zagrade(string): 
    stack = []
    out = ''
    stack = [i for i in string if i in o_lista]
    for i in string:
        if i in z_lista: 
            pos = z_lista.index(i)  # pos == 2
            if o_lista[pos] in stack:
                out += o_lista[pos] + z_lista[pos]
                stack.remove(o_lista[pos])
                if len(stack) == 0:
                    return out    
    return out

print(zagrade('({[()}}]]()'))


Ispis:
(){}[]()
 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 803



+634 Profil

icon Re: Zadaci za wannabe pythoniste23.05.2020. u 10:51 - pre 47 meseci
Pa i nije bas ono sto se trazi. Tvoj program za '(())' vraca '()()', a trebalo bi '(())'.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
65.18.117.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste23.05.2020. u 11:27 - pre 47 meseci
Kako?
Ja sam išao logikom onoga što je dato kao primer u zadatku 45.

assert remove_brackets('(()()') == '()()'
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste23.05.2020. u 12:26 - pre 47 meseci
Tvoje rešenje UOPŠTE ne valja.

Pre svega, ne prolazi primer 3 i 4 iz originalnog zadatka.
I stalno ponavljaš iznova iste greške.
Recimo, već sam ti nekoliko puta pisao da ne stavljaš da su varijable koje koristiš SAMO u funkciji van tela funkcije (o_lista i z_lista u zadatku 45, VOWELS, CONSONANTS u zadatku 44), dupli kod (u zadatku 44), nepotrebne varijable (44) itd.

I dalje ne znaš STRUKTURE PODATAKA. Ne znaš šta je stek. Ne znaš više da koristiš ništa osim liste, kao što sam već napisao (jedno vreme sve si stavljao u fajlove, onda si naučio directory, pa si ga za sve koristio, onda liste, pa ne korisitš ništa drugo).

Opet ti kažem, tvoje učenje pythona NE NAPREDUJE. Zadaci koje si izabrao su "cake", ti nemaš OSNOVE...
Vrati se na udžbenik i ponovo pročitaj svako poglavlje i reši sve zadatke posle tog poglavlja. Udžbenik je napisan sistematski i polako te uvodi u problematiku (ako je dobar).
Ovako, rešavaš zadatke na preskok - zidaš kuću od krova, umesto da kreneš od temelja.

Zadatak 45, je van tvojih mugućnosti rešavanja. On ne samo da je težak za tebe, ni mnogi programeri ne bi ga rešili.
Ne samo da se bavi parsiranjem izraza, koji je sam po sebi nešto što se uči znatno kasnije nego osnove nekog programskog jezika, nego je još teži od toga. Samo parsiranje bi bilo umereno teško - recimo problem da proveriš da li su zagrade pravilno uparene. Ovo je jedan nivo iznad: parsiranje + oporavak od grešaka.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste23.05.2020. u 12:57 - pre 47 meseci
Stek ima DVE operacije PUSH / stavi na vrh steka, POP / skini sa vrha steka. Eventualno, PEEK / vrati vrednost sa vrha steka bez uklanjanja elementa (PEEK može da se uradi i kao POP-PUSH, ako već nećeš da implementiraš PEEK). UVEK RADIŠ SAMO SA SA VRHOM STEKA.

Ti si stek koristio kao listu, vadiš element iz sredine liste - to nije stek...
 
Odgovor na temu

mjanjic
Šikagou

Član broj: 187539
Poruke: 2700



+699 Profil

icon Re: Zadaci za wannabe pythoniste23.05.2020. u 19:44 - pre 47 meseci
Problem uparivanja zagrada je vrlo nezgodan, čak i ako se radi o nekom tekstu (string), da ne pričamo o programskom kodu u kome treba pronaći da li ima zagrada viška ili manjka, jer to zavisi od sintakse programskog jezika i još nekih faktora (da li je funkcija, klasa, if/else blok, itd.).
Generalno, ako postoji neki editor koji ima podršku za to, a otvorenog je koda (npr. VSC), može se pogledati kako izlazi na kraj sa tim problemom. Ali je sigurno da ceo taj kod nije baš tako jednostavan, jer može da postoji paran broj levih i desnih zagrada, kao i da ugneždavanje bude ispravno, ali da opet neki kod ne može da se kompajlira jer su zagrade na pogrešnim mestima.


A što se tiče osnova programiranja, ne znam da li je Python uopšte pogodan za učenje programiranja u smislu algoritama, struktura podataka itd.
Ne uči se tek tako Pascal (ne znam da li ima i danas smisla) ili C na mnogim fakultetima na 1. godini.
C se možda i ne koristi toliko za razvoj aplikacija danas, možda više za neko embeded programiranje, kontrolere i sl., ali su mnogi jezici kasnije preuzeli sličnu sintaksu i koriste slične ili čak iste algoritme za pojedine probleme.



Ja sam imao (ne)sreću da sam studirao nešto levo, računarima se bavio na neki drugi način, tj. nisam se toliko zanimao za programiranje iako sam C i C++ naučio relativno dobro za neko osnovno programiranje što se tiče sintakse još pre 20-ak godina (relativno kasno, za današnje pojmove, ali tamo krajem 90-ih je reko ko imao računar kod kuće, tako da...), radio nešto totalno drugo sa drugim alatima, ali sam recimo pročitao "Programming Pearls" i još dosta sličnih knjiga u jednom dahu (više su me zanimali algoritmi i rešavanje problema sa matematičke tačke gledišta nego sama sintaksa jezika), knjiga je čak dostupna ovde: https://tfetimes.com/wp-conten...15/04/ProgrammingPearls2nd.pdf



djoka je potpuno u pravu, ako neko ne želi da na ispravan način recimo koristi ulančane/povezane liste ili dvostruko povezane liste, stek, binarno stablo, svoju implementaciju pretrage ili sortiranja, ili bilo šta drugo, nego nabudži neki kod bez pravilnog znanja o koracima pri rešavanju takvim problema, to je potpuno pogrešan put čak i za učenje sintakse nekog jezika, jer se na pogrešan način uči "programiranje", i tu naviku kasnije bude vrlo teško promeniti.

Ako je do vežbanja same sintakse, može da se koristi i nešto ovako: https://www.101computing.net/from-flowcharts-to-python-code/

A mogu i da se uzmu primeri iz zbirki zadataka za C/C++, Javu i slično, pa da se za ta rešenja prvo uradi slično/isto Python rešenje, a da se potom kod "optimizuje" korišćenjem onoga što Pythong pruža, a čega nema u tim drugim jezicima.
Blessed are those who can laugh at themselves, for they shall never cease to be amused.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste23.05.2020. u 22:38 - pre 47 meseci
Evo rešenje, moj kohai, i slušaj šta ti kaže senpai.

Ovaj zadatak bi bio piece of cake da je trebalo da se samo proveri da li su zagrade pravilno uparene.
Bio bi tek malo teži da je izraz trebalo DOPUNITI nedostajućim zagradama.
Moje rešenje radi ono što je bio zadatak i ne samo što daje rešenje koje se dobije tako što se izbace znaci koji su najbliži početku, nego i daje najduže takvo rešenje.

Code:
# Class Stack implements stack as a list of items
class Stack:
     def __init__(self):
         self.items = []

     def isEmpty(self):
         return self.items == []

     def push(self, item):
         self.items.append(item)

     # Warning: pop from the empty stack raises exception IndexError
     def pop(self):
         return self.items.pop()

     def peek(self):
         return self.items[len(self.items)-1]

     def size(self):
         return len(self.items)



# Utility finctions

# myTranslate removes non-allowed characters from a string
# Parameters:
#     inString (string) input string
#     allowed (string) characters that are allowed
# Output (string):
#     string that contains only allowed characters from the inString
def myTranslate( inString, allowed ):
    # find ALL unique characters in input string (by convarting it into set)
    s=set(inString)
    for i in s:
        if i not in allowed:
            # remove not-allowed characters
            inString = inString.replace(i,'')
    return inString

# myTrim removes from string leading 'left' characters and trailing 'right' characters
# Parameters:
#    inString (string) input string
#    Left (string) leading characters to be removed
#    Right (string) trailing charactes to be removed
# Output (string):
#    left and right trimmed string
def myTrim( inString, Left, Right ):
    start = 0

    # find the position of the FIRST character not in "Left" and remove leading "Left" characters
    for i in range(len(inString)):
        if inString[i] not in Left:
            break 
        else:
            start+=1

    inString = inString[start:]
    
    # Find trailing "Right" characters and remove them from string
    end = 0
    for i in range(len(inString)):
        if inString[-1-i] not in Right:
            break
        else:
            end-=1

    if end == 0:
        return inString

    return inString[:end]
    
# removeChar deletes a single character from string at given position
# Parameters:
#   inString (string): input string
#   pos (int): character position 0..len(inString)-1
def removeChar( inString, pos):

    return (inString[:pos] + inString[pos+1:])


def remove_brackets(a):
    # First, lets define some constants
    OPENING  = '([{'               # List of opening brackets
    CLOSING  = ')]}'               # List of closing brackets
    BRACKETS = OPENING + CLOSING   # List of all brackets
    PAIRS    =  ['{}', '[]', '()'] # List of bracket pairs

    # Local function isValid
    # Parameters:
    #     expression (string): string that contains only brackets
    # Output (Boolean):
    #     True if all opening brackets are matched with corresponding closing brackets in order of apperance
    #     False otherwise
    # Require: Function uses class Stack

    def isValid(expression):
        s=Stack()
        for i in (expression):
            if i in OPENING:
                # opening bracket shuld be pushed to the stack
                s.push(i)
            else:
                # Closing bracket MUST be mached with the opening bracket from the non-empty stack top
                if s.isEmpty() or (s.pop() + i not in PAIRS):
                    # If pair of brackets are not mached, then expression is invalid
                    return False
        
        # if ALL brackets are matched, stack MUST be empty
        if s.isEmpty():
            return True
        # otherwise, brackets are unbalanced
        return False

    a=myTranslate( a, BRACKETS )    # Remove all non-breacket symbols from input string
    a=myTrim( a, CLOSING, OPENING)  # Remove closing brackets from the left side and opening brackets from the right side
                                    # of the input string, since they can not be matched with correcponding bracket

    # Now we have 'clean' string
    checkList = []  # list of potentionally valid bracket expressions

    # expression with balanced brackets MUST have even length, otherwise its useless to check if its valid
    if len(a)%2 == 1:
        for i in range(len(a)):
            # for odd expression length, add to checkList each substring derived from originall string by removing single character from expression
            checkList.append( removeChar( a, i ) )
    else:
        checkList.append(a)

    # Main loop - checking elements from the checkList
    # The first valid string is the result of the function.
    # In case that we checked ALL elemnts from checkList, return empty string

    while checkList != []:
        i = checkList[0]
        if isValid(i):
            # Qapla' (success in Klingon)!!! We made it!!!
            return i
        else:
            # remove the first (checked) element
            checkList.pop(0)
            # generate all substrings of checked element by removing TWO characters from the expression
            # and adding resulting string to the end of list
            for j in range(len(i)-1):
                for k in range(j+1, len(i)):
                    newstring = removeChar( i, k )
                    newstring = removeChar( newstring, j )
                    if newstring not in checkList:
                        checkList.append( newstring )
    
    # we chacked all posible substrings without success
    return ''
   
if __name__ == '__main__':
    print("Example:")
    print(remove_brackets('(()()'))

    # These "asserts" are used for self-checking and not for an auto-testing
    assert remove_brackets('(()()') == '()()'
    assert remove_brackets('[][[[') == '[]'
    assert remove_brackets('[[(}]]') == '[[]]'
    assert remove_brackets('[[{}()]]') == '[[{}()]]'
    assert remove_brackets('[[[[[[') == ''
    assert remove_brackets('[[[[}') == ''
    assert remove_brackets('') == ''
    print("Coding complete? Click 'Check' to earn cool rewards!")


Rezultat:
Code:
py .\rb.py
Example:
()()
Coding complete? Click 'Check' to earn cool rewards!



[Ovu poruku je menjao djoka_l dana 23.05.2020. u 23:51 GMT+1]
 
Odgovor na temu

dejanet
Beograd

Član broj: 19240
Poruke: 1181



+836 Profil

icon Re: Zadaci za wannabe pythoniste24.05.2020. u 17:00 - pre 47 meseci
Sa moje strane u C#(trudio sam se da bude citljivo svima).

Koristio sam Queue umest Stack, tj FIFO.

Code:

using System;
using System.Collections.Generic;

namespace INERPRETER_Brackets
{
    class Program
    {
        static bool IsBracket(char c, char lParen, char rParen)
        {
            return (c == lParen) || (c == rParen);
        }

        static bool IsValidString(string str, char lParen, char rParen)
        {
            int cnt = 0;
            for (int i = 0; i < str.Length; i++)
            {
                if (str[i] == lParen)
                    cnt++;
                else if (str[i] == rParen)
                    cnt--;
                if (cnt < 0)
                    return false;
            }
            return (cnt == 0);
        }

        static void RemoveInvalidBracketsByParen(ref string str, char lParen, char rParen)
        {
            if (str == null || str == "")
                return ;

            // zapamti visited string 
            HashSet<string> visit = new HashSet<string>();

            // queue 
            Queue<string> q = new Queue<string>();
            string temp;

            // pushing string kao start node u queue 
            q.Enqueue(str);
            visit.Add(str);
            while (q.Count != 0)
            {
                str = q.Peek(); q.Dequeue();
                if (IsValidString(str, lParen, rParen))
                {
                    return;
                }

                for (int i = 0; i < str.Length; i++)
                {
                    if (!IsBracket(str[i], lParen, rParen))
                        continue;

                    // remove zagradu iz str i gurni u queue ako nije obradjen ranije
                    temp = str.Substring(0, i) +
                           str.Substring(i + 1);
                    if (!visit.Contains(temp))
                    {
                        q.Enqueue(temp);
                        visit.Add(temp);
                    }
                }
            }
        }

        static string RemoveInvalidBrackets(string str)
        {
            RemoveInvalidBracketsByParen(ref str, '(', ')');
            RemoveInvalidBracketsByParen(ref str, '[', ']');
            RemoveInvalidBracketsByParen(ref str, '{', '}');
            return str;
        }

        public static void Main(string[] args)
        {
            Console.WriteLine($"'{RemoveInvalidBrackets("(()()")}'");
            Console.WriteLine($"'{RemoveInvalidBrackets("[][[[")}'");
            Console.WriteLine($"'{RemoveInvalidBrackets("[(}]]")}'");
            Console.WriteLine($"'{RemoveInvalidBrackets("[[{}()]]'")}");
            Console.WriteLine($"'{RemoveInvalidBrackets("[[[[[[")}'");
            Console.WriteLine($"'{RemoveInvalidBrackets("[[[[}")}'");
            Console.WriteLine($"'{RemoveInvalidBrackets("")}'");

        }
    }
}



Output
Code:

'()()'
'[]'
'[]'
'[[{}()]]'
''
''
''
 
Odgovor na temu

[es] :: Python :: Zadaci za wannabe pythoniste

Strane: << < .. 26 27 28 29 30 31 32

[ Pregleda: 51793 | Odgovora: 629 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.