Zliczanie spacji
No i co, przyszedł czas na interpreter. Dodałem taki oto tekst:
Siała baba mak
nie wiedziała jak
dziadek wiedział nie powiedział
i to było tak
Jest to taki znany polski wierszyk. I program mi naliczył 10 spacji. No to weźmy coś dłuższego. Na tapetę biorę piosenkę "Tyż mene pidmanuła". Program naliczył mi 90 spacji. A oto wklejam tekst.
Ty kazała w ponediłok
Pidem razom po barwinok.
Ja pryjszow, tebe nema,
Pidmanuła-pidweła.
Refren.
Ty ż mene pidmanuła,
Ty ż mene pidweła,
Ty ż mene mołodoho
Z uma-rozumum zweła. 4x
Ja sztebe, ja sztebe pidmanuła,
Ja sztebe, ja sztebe pidweła,
Ja sztebe, ja sztebe mołodoho
Z uma-rozumum zweła.
Ty kazała u wiwtorok
Pociłujesz raziw sorok,
Ja pryjszow, tebe nema,
Pidmanuła-pidweła.
Refren.
Ty ż mene pidmanuła,
Ty ż mene pidweła,
Ty ż mene mołodoho
Z uma-rozumum zweła. 2x
Ja sztebe, ja sztebe pidmanuła,
Ja sztebe, ja sztebe pidweła,
Ja sztebe, ja sztebe mołodoho
Z uma-rozumum zweła.
Ty kazała u seredu
Pidem razom po czeredu,
Ja pryjszow, Tebe nema,
Pidmanuła-pidweła.
Refren.
Ty ż mene pidmanuła,
Ty ż mene pidweła,
Ty ż mene mołodoho
Z uma-rozumum zweła. 4x
I co będzie z 90 spacji? Uwaga, liczę. No jakoś tak wyszło. Więc dobrze by było gdybym cokolwiek powiedział o tym programie, który napisałem. To zliczanie i te wszystkie zadania wykonuję przy pomocy interpretera. Na tą chwilę jest tak, że stworzyłem sobie własną tablicę. Cały interpreter stworzyłem w języku Scala, jest to zdecydowanie najszybszy język z jakim pracowałem. Fajnie mi się w nim pisze. I teraz tak, interpreter u mnie korzysta tylko i wyłącznie z tablic, a nie z list czy tego typu rzeczy. No to jak mam dodać na przykład element do tablicy jak ona ma wielkość 0? No właśnie, standardowo tablice nie mają możliwości dodawania elementów jak w listach. Można z góry stworzyć tablicę z milionem elementów, no tak, ale u mnie tam gdzie nie dodałem żadnego elementu dodał się sam element o nazwie null. Może to nawet być string "null". To co ja mam słowa "null" w pliku? No nie. To co one tam robią? No właśnie. To mogę zainicjować tablicę pustymi wartościami. Mogę, jasne że tak. Milion pustych wartości. A co jak dodam milion pierwszy element? To wyjdę poza tablicę. A co jak będę chciał spowrotem zapisać tablicę w pliku? To będę musiał omijać te puste elementy? Z czasem zobaczyłem, że to po prostu nie ma sensu.
Więc zrobiłem tak. Utworzyłem klasę, w niej zaagregowałem tablicę. No i dodaję element tak? Dodaję jako tzw. stos, czyli kładę jakby jedno obok drugiego. Czyli dodaję element do tablicy, a ona na samym początku ma wielkość 0. Więc zrobiłem taki myk. Utworzyłem tablicę w metodzie o 1 większą od obecnej głównej tablicy, przepisałem tą główną tablicę do tej tymczasowej, następnie dodałem element i przypisałem tą tymczasową tablicę do głównej. W ten sposób mogę bez problemu dodawać elementy na stos. I to przy pomocy tablicy. Z list czy takich rzeczy tu zrezygnowałem. Więc jak liczę powiedzmy spacje? Wczytuję tekst z pliku tak żeby do tablicy trafił każdy znak. I potem w pętli jak napotkam spację to zwiększam licznik. Licznik sobie zwracam i wyświetlam jego wartość.