Code Monkey home page Code Monkey logo

exact-cover-solver's People

Stargazers

 avatar  avatar

Watchers

 avatar

exact-cover-solver's Issues

Vertaisarvio

-Todella mielenkiintoinen ongelma ja algoritmi, tuli vietettyä hetki jos toinenkin Wikipediassa ja Youtubessa tutustumassa tämän sovelluksiin.

-Testikattavuus & koodin laadun seuranta näkyvissä suoraan Githubissa, erittäin kätevää

-koodin selkeys ja kommentointi esimerkillistä

-nimeäminen hyvin selkeää, erityisesti testien nimeämisestä pitää itsekin ottaa mallia

-En saanut ikävä kyllä ohjelmaa ajettua käyttöohjeiden perusteella ilman kokemusta Pythonista :(

-En saanut ohjelmaa ajettua Windowsilla: asensin Pythonin ja Pypyn, mutta ohjeissa jumahdin kohtaan 'source' is not recognized as an internal or external command,operable program or batch file.

-En saanut ohjelmaa ajettua Debianilla, sopivan Python-version asentaminen ei onnistunut tässä ajassa

-Ubuntulla onnistui siihen asti, että kosahti XWindow:n puuttumiseen. Tämä onnistui freesissä virtuaalikoneessa seuraavasti:

sudo apt upgrade && sudo apt update
sudo apt install python3
sudo apt install pypy3
sudo apt install python3-pip
git clone https://github.com/otahontas/exact-cover-solver
cd exact-cover-solver/
pypy3 -m venv venv
source venv/bin/activate
pypy3 -m pip install --upgrade pip
pypy3 -m pip install .
pypy3 exact_cover_solver/main.py
sudo apt-get install python3-tk
sudo apt install pypy3-tk
pypy3 exact_cover_solver/main.py

Käyttöohjeet voisivat tältä osin kaivata vähän täydennystä, että kokemattomammaltakin onnistuisi.

Harmi etten päässyt ohjelmaa kokeilemaan, mutta repon perusteella epäilen kyllä lukeneeni jotain "näin saat arvosanan 6" -malliprojektia enkä vertaisarvioitavaa repoa :)

Code review

Vertaisarvio 1

Arvioitu commit: b9008a2

Ladattu: 25.11.2020

Poetryn käyttö

En saanut poetryllä jostain syystä mitään antamiasi komentoja toimimaan, vaan sain aina vastaukseksi:

OSError

[Errno 2] No such file or directory

Sain koodin sekä testit kuitenkin ajettua käyttämällä python3/pypy3/pytestiä.

Testaus

Testikattavuus näyttää olevan hyvällä mallilla. Joitain osia sieltä täältä ei oltu testattu, mutta tärkeimmät, eli algoritmit sekä tietorakenteet, olivat lähes sadassa prosentissa. Testit näyttävät myös olevan järkevästi kirjoitettu ja ne testaavat oikeita asioita.

Koodi

Koodista huomaa, ettet ole ihan ensimmäistä kertaa ohjelmoimassa. Eri toiminnallisuudet on jaettu järkeviin kokonaisuuksiin omiin moduuleihinsa, mikä tekee koodin löytämisestä helppoa vaikkei projekti olisi ennalta tuttu. Myös Pythonin eri ominaisuuksia, joita aloittelija ei välttämättä keksisi käyttää, on käytetty kattavasti. Näistä esimerkkejä ovat mm. tyyppivinkit, testien fixturet sekä muut decoratorit. Myös projektin readme on toteutettu hyvin.

Ehdotuksia

Ensimmäinen "ongelma", mikä pisti silmään lähes jokaisessa tiedostossa, on koodin pötköisyys. Mielestäni koodia on vaikea lukea, kun kaikki rivit ovat kiinni toisissaan. Jos verrataan esimerkiksi seuraavaa koodipätkää tiedostosta dlxmatrix.py

for set_number, set_elements in enumerate(self._set_collection):
    previous = None
    first = None
    for element in set_elements:
        column = find_column(element)
        cell = DataObject(column, row=set_number)
        prev_up = column.up
        prev_up.down = cell
        cell.up = prev_up
        cell.down = column
        column.up = cell
        if previous:
            previous.right = cell
            cell.left = previous
        else:
            first = cell
        previous = cell
        column.size += 1
    previous.right = first
    first.left = previous

ja samaa koodipätkää hieman jäsenneltynä

for set_number, set_elements in enumerate(self._set_collection):
    previous = None
    first = None

    for element in set_elements:
        column = find_column(element)
        cell = DataObject(column, row=set_number)

        prev_up = column.up
        prev_up.down = cell

        cell.up = prev_up
        cell.down = column
        column.up = cell

        if previous:
            previous.right = cell
            cell.left = previous
        else:
            first = cell

        previous = cell
        column.size += 1

    previous.right = first
    first.left = previous

niin huomataan, että jälkimmäinen on (ainakin minun mielestäni) helpompi lukea.

Vaikka käyttöliittymä ei olekaan tämän kurssin keskiössä, mainitsen käyttöliittymäkoodistasi yhden ongelman joka tuli vastaan.
Olet käyttänyt tiedostossa exact_cover_solver/ui/__init__.py metodin _update_view parametreissä nimeä next, mikä yliajaa Pythonin sisäänrakennetun funktion next. Vaikka tämä ei olekaan ongelma tässä tilanteessa, ei kielen sisäänrakennettujen avainsanojen yliajaminen (yleensä) ole järkevää, ja se saattaa johtaa bugeihin.

Mitään tämän suurempia ongelmia en koodista löytänyt, eikä minulla valitettavasti ole ollut tällä viikolla aikaa hirveästi tähän paneutua. Projekti näyttää olevan sinun osaltasi kuitenkin jo hyvällä mallilla.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.