Ok ho visto il link ti confermo che il codice è confuso con parecchie regole ripetute più volte.
Se ora mi rispieghi ad uno ad uno i problemi di volta in volta li risolviamo