GitS OST + Ruby = projekt z lingwistyki komputerowej

Dzisiaj się obudziłem, ze na środę należy zrobić jakiś mini-projekt z Lingwistyki Komputerowej. Były na to chyba 4 tygodnie, ale co się będę spieszył, czas nie zając.. Szybciutko wybrałem zadanie - Napisz program, który wczytuje tekst i konstruuje sieć skończoną „przechowującą” wyrazy zawarte w tekście. - i zasiadłem do pracy.

Stwierdziłem, że to dobra okazja do zaznajomienia się z Rubym i tak rzeczywiście było. Pisanie sieci skończonej w C zajęłoby mi spokojnie kilka godzin (wliczając debugging i wyszukiwanie gdzie wychodze poza zakres tablicy, a gdzie nie dochodze do końca), natomiast mój nowy ulubieniec dając mi do dyspozycji zagnieżdżane rekurencyjnie tablice haszowe pozwolił mi na wykonanie zadania w godzinkę. Wliczając w to zapoznanie się z językiem, jego składnią, itd... Coś czuję, że szykuje się dłuższa współpraca ;)

A linijek kodu ile zaoszczędziłem.. Wersja robocza:


#przerobka danych wejsciowych
main = {}
string = gets.chomp
tab_string = string.split

tab_string.each do |str|
  tab_str = str.split(//) # dziele string na tablice znakow
  tab_str[tab_str.length] = '0'

  #dodawanie do main:
  i = 0;
  hasz_tmp = main

  while (tab_str[i])
    if hasz_tmp[tab_str[i]]		# takie przejscie istnieje, wiec nie nadpisujemy
      hasz_tmp = hasz_tmp[tab_str[i]]
    else 				# przejscie jeszcze nie istnieje - dodajemy
      hasz_tmp[tab_str[i]] = {}
      hasz_tmp = hasz_tmp[tab_str[i]]
    end
    i+=1
  end
end

puts main

Czy wasz język to potrafi? ;)


O wpisie