Skip to content

Instantly share code, notes, and snippets.

@LTe
Created April 28, 2010 16:48
Show Gist options
  • Save LTe/382367 to your computer and use it in GitHub Desktop.
Save LTe/382367 to your computer and use it in GitHub Desktop.
class Texter
def initialize(tekst)
@str = tekst
@tablica = findChangeIndexes
end
attr_reader :str, :tablica
def findChangeIndexes
wynik = []
ostatni = 0
# Szukamy podwojnych srednikow
while((temp = @str.index(/(^|\b|\s)--(\b|\s|$)/, ostatni)) != nil)
wynik << [temp+1 ,"--"]
ostatni = temp + 1
end
ostatni = 0
# Szukamy pojedynczych srednikow
while((temp = @str.index(/(^|\b|\s)-(\b|\s|$)/, ostatni)) != nil)
wynik << [temp+1,"-"]
ostatni = temp + 1
end
ostatni = 0
# Wystapienia nowej linii
while((temp = @str.index(/[\n]/, ostatni)) != nil)
wynik << [temp, "n", 1]
ostatni = temp + 1
end
ostatni = 0
# Pojedyczna spacja
while((temp = @str.index(/\S[ ]\S/, ostatni)) != nil)
wynik << [temp+1, " "]
ostatni = temp + 1
end
return wynik.sort!
end
def updateArray(tab, liczba)
wynik = Marshal.load(Marshal.dump(tab))
wynik.each { |krotka|
krotka[0] += liczba
}
return wynik
end
def replaceText(tab, numer, tekst)
if(tab[numer][1] == "--")
tekst.slice!(tab[numer][0])
tab = updateArray(tab, -1)
return tab, tekst
elsif(tab[numer][1] == '-')
tekst.insert(tab[numer][0], '-')
tab = updateArray(tab, 1)
return tab, tekst
elsif(tab[numer][1] == " ")
tekst.insert(tab[numer][0], " ")
tab = updateArray(tab, 1)
return tab, tekst
elsif(tab[numer][1] == "n")
tab[numer][2] = rand(3)
tekst.insert(tab[numer][0], " "*tab[numer][2])
tab = updateArray(tab, tab[numer][2])
return tab, tekst
end
return tab, tekst
end
def executeCombination(liczba)
tekst = Marshal.load(Marshal.dump(@str))
tab = Marshal.load(Marshal.dump(@tablica))
tablicaKombinacji = dopBit(liczba.to_s(2), @tablica.size)
#puts tablicaKombinacji.join
for i in 0...@tablica.size
if(tablicaKombinacji[i] == 49) # Ruby 1.8 porowbuje po liczbie, 1.9.1 po string
tab, tekst = replaceText(tab, i, tekst)
end
end
#puts tekst.inspect
#puts tab.inspect
tab = []
return tekst
end
# Dopelnianie zer z lewej strony
def dopBit(bit_value, x)
ilosc_bitow = bit_value.size
if(ilosc_bitow < x)
wynik = "0" * (x-ilosc_bitow)
return wynik << bit_value
end
bit_value
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment