Git Product home page Git Product logo

labyrinttisolveri's People

Contributors

minkamanki avatar

Watchers

 avatar

labyrinttisolveri's Issues

Koodikatselmointi

su 17.4.2016 18:30

  • Luokassa Labyrintti metodissa poistaSeinia(int x, int y) on while-loop jolla arpoo iteraatiossa random luku 1-4 kunnes arvotun luvun vastaava ruutu voi olla seuraava rekursion kohde. Mutta jos kohde ei kelppaa niin se jatkaa seuraavaan iteraatioon. Sitä voi ehkä parantaa jollakin toisella algoritmilla (for-loop listan avulla?) että ei ole mahdollista että arpoo aina samaa epäkelpollinen luku.
  • Luokassa Ruutu attribuutti visited on vain labyrintin luomisen aikana vaikuttava arvo. Säästää tilaa jos toteuttaa sen luomisen aikaisen lokaalisena listana.
  • Luokassa Ruutu attribuutit lahto ja malli eivät voi olla samaan aikaan true. Voiko näitä yhdistää yhteen?
  • Luokassa Labyrintti attribuutti koko on turha. Sillä alue.length on sama asia.

Koodikatselmointi 2

Palautetta Labyrinttisolverista

Hei! Tutustuin koodiisi, mikä oli melki vaivatonta, sillä koodi oli hyvin kirjoitettua ja käyttis on tosi kiva. Seuraavassa erittelen joitain ajatuksiani.

Luokkajaosta

  • Luokkajako oli looginen ja hyvin nimetty. Ehkä Ratkaisijaluokan metodit luoPuu() ja tietenkin samassa pakitissa myös luoSolmu() voisivat olla esimerkiksi Labyrinttiluokassa. Tämä tuntuisi itselleni ainakin luontevalta. Yksi vaihtoehto olisi voinut olla erillinen tietorakenne luokka Puuta varten. Ratkaisijalle jäisi tällöin vain nimensämukainen rooli. Luokka on tietysti muuten jo pieni, mutta käsitteellisellä tasolla asia olisi silti sen verran olennainen, että ratkaisu olisi ihan perusteltu ja mukava.
  • Ruutu on mielestäni luokkana tosi hyvin organisoitu ja helppotajuinen. Solmu ja Taulukkolista samaten.

Tietorakenteista

-Taulukkolistan poista() -metodissa on mun nähdäkseni muutama fiba. En oo ihan varma, mutta eikös se riittäisi, että koko arrayn kopioimisen sijaan asettaisi vaan "null":iksi. Ei tosta nyt tietty mitään merkittävää tilavaativuusongelmaa synny, mutta jotenkin höhlältä tuntuu luoda aina uusi array, kun lopputulos on kuitenkin se, että siinä kohdassa on null.

  • Toinen metodin kohta on se, että eikö objektin poistamisen yhteydessä muuttujan "ekaTyhja" pitäisi silloin tällöin muuttua? Kaiketi algoritmin kannalta tässä ei tule ongelmaa, mutta ainakin "ekaTyhja" voisi sitten olla nimeltään vaikka "head", tai vastaava suomenkielinen kuvaava nimi (mistä päästäänkin siihen ikuiseen kysymykseen kielten sekoittumisesta nimeämisessä, mutta mun mielestä toi on suomalaiselle tosi helppo ymmärtää, ja jopa helpompi kuin, että jos kaikki olisi englanniksi On aika standardia sanoa "getReitti" ja "setNaapurit"). Nyt lisäilet alkiot vaan aina edellisten perään, vaikka tyhjiäkin olisi välissä, ja taulukkosi pitää oikeastaan vaan kirjaa siitä, mahtuuko vielä perään yksi. Jos siis lisäät ja poistat alkion miljoona kertaa, kasvaa taulukon koko noin miljoonaan, mutta listan pituus onkin vaan yksi tai nolla.
  • Taulukkolistan docissa myös sanotaan, että se korvaa ArrayListin, minkä se toki myös tekeekin, mutta sen toiminnallisuus on sen verran erilainen, että asian voisi mainita. ArrayList muuttaa indeksejä sitä mukaa, kun välistä poistelee alkioita, minkä takia se on myös hitusen raskaampi tietorakenne, kuin sun omasi. Tosin poiston aikavaativuus on kummassakin O(n).

Itse algoritmista

  • Algoritmin syvyyssuuntainen läpikäynti on tosiaan kompaktisti, ymmärrettävästi ja hyvin toteutettu. Se on sen verran hyvällä mallilla, että sulla ois aikaa varmaan laajentaakin sitä.

Hyvät vaput!

T: Ilmari Pohjola

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.