El algoritmo methapone


Un algoritmo fonético como soundex sólo optimizado para el idioma inglés
Una descripción de la metaphone algoritmo está disponible en esta página también hay el doble metaphone algoritmo que también está implementado en C y con una descripción de ASpell sitio
ya Hay un metaphone aplicación en delphi puede encontrar en SourceForge que versión es mucho mejor que este


El código que se encuentra debajo, Lo obtuve por la traducción de la Metaphone.cc la unidad de la htDig motor de búsqueda, obras en la C bien, pero la traducción que hice no es la mejor, ¿por Qué? porque he traducido sobre todo el uso de la C enfoque y no el de Delphi.
también me gustaría fomentar la investigación sobre la mejor (más rápido con menos código hinchado) traduce este algoritmo, estoy trabajando en uno. Si le sucede que tiene una mejor traducción de correos.
NOTAS: Este algoritmo, así como soundex están sólo en inglés así que no hay soporte para unicode, o el apoyo a las ñ, á, é, í, y varios caracteres
función MetaPhone3(const Palabra:Cadena KeyLength: Integer = 10): Cadena
& nbsp & nbsp función (x: Char): Boolean
& nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp
Resultado := x en ['F','J','L','M','N','R']
& nbsp & nbsp fin
& nbsp & nbsp función Vocal(x: Char): Boolean
& nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp
Resultado := x en [ ' ','E','I','O','U']
& nbsp & nbsp fin
& nbsp & nbsp función Varson(x: Char): Boolean
& nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp
Resultado := x en ['C','G','P',S,'T']
& nbsp & nbsp fin
& nbsp & nbsp función Noghf(x: Char): Boolean
& nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp
Resultado := x en ['B', 'D', 'H']
& nbsp & nbsp fin
& nbsp & nbsp función FrontV(x: Char): Boolean
& nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp
Resultado := x en ['E', 'I', ' Y ' ]
& nbsp & nbsp fin
var
& nbsp & nbsp
i: Integer
& nbsp & nbsp Tmp:Cadena
begin
& nbsp & nbsp
Tmp := Trim(en Mayúsculas(Palabra))
& nbsp & nbsp i := 1
& nbsp & nbsp mientras i > 0)
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp si
(Tmp[i] ['G', 'K', 'P']) y (Tmp[i 1] = 'N')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o ((Tmp[i] = ' ') y (Tmp[i 1] = 'E'))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o ((Tmp[i] = 'W') y (Tmp[i 1] = 'R')) entonces Eliminar(Tmp, i, 1)
& nbsp & nbsp & nbsp & nbsp si (Tmp[i] = 'W') y (Tmp[i 1] = 'H')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Eliminar(Tmp, 2, 1)
& nbsp & nbsp & nbsp & nbsp si (Tmp[i] = 'X') entonces Tmp[i] := S
& nbsp & nbsp & nbsp & nbsp i := pos(' ', Tmp)
& nbsp & nbsp & nbsp & nbsp si i > 0) Tmp[i] := #0
& nbsp & nbsp fin
& nbsp & nbsp i := 0
& nbsp & nbsp Tmp := Tmp #0
& nbsp & nbsp mientras (Length(Resultado) < KeyLength)
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp
inc(i)
& nbsp & nbsp & nbsp & nbsp si (Tmp[i] =#0) entonces Break
& nbsp & nbsp & nbsp & nbsp si (Tmp[i] = Tmp[i-1]) y (Tmp[i] <> 'C')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp

& nbsp & nbsp & nbsp & nbsp si Mismo(Tmp[i]) o (Vocal(Tmp[i]) y (Tmp[i-1] = #0))
& nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado Tmp[i]
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Continuar
& nbsp & nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp & nbsp caso Tmp[i] de
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
'B': si ((i>=2) y (Tmp[i-1] <> 'M')) o (i = 1) entonces Resultado := Resultado Tmp[i]
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'C':
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si
FrontV(Tmp[i 1]) y (Tmp[i-1] <> S)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado S
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp inc(i)

& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp end else if (Copia(Tmp, i, 2) = 'CH') o (Copia (Tmp, i ,3) = 'CIA')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'X'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si (Copia(Tmp, i, 2) = 'CH') inc(i)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si (Copia(Tmp, i, 3) = 'CIA')entonces inc(i, 2)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp persona Resultado := Resultado 'K'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'D': si (Copia(Tmp, i, 2) = 'DG') y FrontV(Tmp[i 3])
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
inc(i,3)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Resultado := Resultado 'J'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp persona
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'T'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'G': si ((Tmp[i 1] <> 'G') o Vocal(Tmp[i 1])) y
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
((Tmp[i 1]<>'N') o ((Tmp[i 1] = #0) y (Tmp[i 2]<>'E')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o (Tmp[i 3] <>'D')) y ((Tmp[i 1] <> 'D') o FrontV(Tmp[i 1])))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si
(FrontV(Tmp[i 1])) y (Tmp[i 2] <> 'G')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'J'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
persona
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'K'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp end else if (Tmp[i 1] = 'H') y no noghf(Tmp[i -3]) y (Tmp[i -4] <> 'H')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'F'

& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'H': si no Varson(Tmp[i-1]) y (no Vocal(Tmp[i-1]) o Vocal(Tmp[i 1]))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'H'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'K': si (Tmp[i-1] <> 'C') entonces Resultado := Resultado 'K'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'P': si (Tmp[i 1] = 'H')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'F'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
persona Resultado := Resultado Tmp[i]
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'P': Resultado := Resultado 'K'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp S: si (Tmp[i 1] = 'H') o ((Copia(Tmp, i, 2) = 'SI')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp y (Tmp[i 3] en ['O', ' ']))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'X'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
persona
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado S
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'T': si (Tmp[i 1] = 'I') y (Tmp[i 2] en ['O', ' '])
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'X'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
else if (Tmp[i 1] = 'H') entonces Resultado := Resultado '0' persona
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si
(Tmp[i 1] <> 'C') o (Tmp[i 2] <> 'H') entonces Resultado := Resultado 'T'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'V': Resultado := Resultado 'F'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'W', ' Y ' : si Vocal(Tmp[i 1]) Resultado := Resultado Tmp[i]
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'X': Resultado := Resultado 'KS'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'Z': Resultado := Resultado S
& nbsp & nbsp & nbsp & nbsp fin
& nbsp & nbsp fin
fin









El algoritmo methapone


El algoritmo methapone : Multi-millones de consejos para hacer su vida mas facil.


Un algoritmo fonetico como soundex solo optimizado para el idioma ingles
Una descripcion de la metaphone algoritmo esta disponible en esta pagina tambien hay el doble metaphone algoritmo que tambien esta implementado en C y con una descripcion de ASpell sitio
ya Hay un metaphone aplicacion en delphi puede encontrar en SourceForge que version es mucho mejor que este


El codigo que se encuentra debajo, Lo obtuve por la traduccion de la Metaphone.cc la unidad de la htDig motor de busqueda, obras en la C bien, pero la traduccion que hice no es la mejor, ¿por Que? porque he traducido sobre todo el uso de la C enfoque y no el de Delphi.
tambien me gustaria fomentar la investigacion sobre la mejor (mas rapido con menos codigo hinchado) traduce este algoritmo, estoy trabajando en uno. Si le sucede que tiene una mejor traduccion de correos.
NOTAS: Este algoritmo, asi como soundex estan solo en ingles asi que no hay soporte para unicode, o el apoyo a las ñ, a, e, i, y varios caracteres
funcion MetaPhone3(const Palabra:Cadena KeyLength: Integer = 10): Cadena
& nbsp & nbsp funcion (x: Char): Boolean
& nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp
Resultado := x en ['F','J','L','M','N','R']
& nbsp & nbsp fin
& nbsp & nbsp funcion Vocal(x: Char): Boolean
& nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp
Resultado := x en [ ' ','E','I','O','U']
& nbsp & nbsp fin
& nbsp & nbsp funcion Varson(x: Char): Boolean
& nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp
Resultado := x en ['C','G','P',S,'T']
& nbsp & nbsp fin
& nbsp & nbsp funcion Noghf(x: Char): Boolean
& nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp
Resultado := x en ['B', 'D', 'H']
& nbsp & nbsp fin
& nbsp & nbsp funcion FrontV(x: Char): Boolean
& nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp
Resultado := x en ['E', 'I', ' Y ' ]
& nbsp & nbsp fin
var
& nbsp & nbsp
i: Integer
& nbsp & nbsp Tmp:Cadena
begin
& nbsp & nbsp
Tmp := Trim(en Mayusculas(Palabra))
& nbsp & nbsp i := 1
& nbsp & nbsp mientras i > 0)
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp si
(Tmp[i] ['G', 'K', 'P']) y (Tmp[i 1] = 'N')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o ((Tmp[i] = ' ') y (Tmp[i 1] = 'E'))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o ((Tmp[i] = 'W') y (Tmp[i 1] = 'R')) entonces Eliminar(Tmp, i, 1)
& nbsp & nbsp & nbsp & nbsp si (Tmp[i] = 'W') y (Tmp[i 1] = 'H')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Eliminar(Tmp, 2, 1)
& nbsp & nbsp & nbsp & nbsp si (Tmp[i] = 'X') entonces Tmp[i] := S
& nbsp & nbsp & nbsp & nbsp i := pos(' ', Tmp)
& nbsp & nbsp & nbsp & nbsp si i > 0) Tmp[i] := #0
& nbsp & nbsp fin
& nbsp & nbsp i := 0
& nbsp & nbsp Tmp := Tmp #0
& nbsp & nbsp mientras (Length(Resultado) < KeyLength)
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp
inc(i)
& nbsp & nbsp & nbsp & nbsp si (Tmp[i] =#0) entonces Break
& nbsp & nbsp & nbsp & nbsp si (Tmp[i] = Tmp[i-1]) y (Tmp[i] <> 'C')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp

& nbsp & nbsp & nbsp & nbsp si Mismo(Tmp[i]) o (Vocal(Tmp[i]) y (Tmp[i-1] = #0))
& nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado Tmp[i]
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Continuar
& nbsp & nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp & nbsp caso Tmp[i] de
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
'B': si ((i>=2) y (Tmp[i-1] <> 'M')) o (i = 1) entonces Resultado := Resultado Tmp[i]
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'C':
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si
FrontV(Tmp[i 1]) y (Tmp[i-1] <> S)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado S
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp inc(i)

& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp end else if (Copia(Tmp, i, 2) = 'CH') o (Copia (Tmp, i ,3) = 'CIA')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'X'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si (Copia(Tmp, i, 2) = 'CH') inc(i)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si (Copia(Tmp, i, 3) = 'CIA')entonces inc(i, 2)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp persona Resultado := Resultado 'K'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'D': si (Copia(Tmp, i, 2) = 'DG') y FrontV(Tmp[i 3])
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
inc(i,3)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Resultado := Resultado 'J'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp persona
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'T'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'G': si ((Tmp[i 1] <> 'G') o Vocal(Tmp[i 1])) y
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
((Tmp[i 1]<>'N') o ((Tmp[i 1] = #0) y (Tmp[i 2]<>'E')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o (Tmp[i 3] <>'D')) y ((Tmp[i 1] <> 'D') o FrontV(Tmp[i 1])))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si
(FrontV(Tmp[i 1])) y (Tmp[i 2] <> 'G')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'J'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
persona
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'K'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp end else if (Tmp[i 1] = 'H') y no noghf(Tmp[i -3]) y (Tmp[i -4] <> 'H')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'F'

& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'H': si no Varson(Tmp[i-1]) y (no Vocal(Tmp[i-1]) o Vocal(Tmp[i 1]))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'H'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'K': si (Tmp[i-1] <> 'C') entonces Resultado := Resultado 'K'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'P': si (Tmp[i 1] = 'H')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'F'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
persona Resultado := Resultado Tmp[i]
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'P': Resultado := Resultado 'K'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp S: si (Tmp[i 1] = 'H') o ((Copia(Tmp, i, 2) = 'SI')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp y (Tmp[i 3] en ['O', ' ']))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'X'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
persona
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado S
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'T': si (Tmp[i 1] = 'I') y (Tmp[i 2] en ['O', ' '])
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
Resultado := Resultado 'X'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp
else if (Tmp[i 1] = 'H') entonces Resultado := Resultado '0' persona
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si
(Tmp[i 1] <> 'C') o (Tmp[i 2] <> 'H') entonces Resultado := Resultado 'T'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'V': Resultado := Resultado 'F'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'W', ' Y ' : si Vocal(Tmp[i 1]) Resultado := Resultado Tmp[i]
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'X': Resultado := Resultado 'KS'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'Z': Resultado := Resultado S
& nbsp & nbsp & nbsp & nbsp fin
& nbsp & nbsp fin
fin


El algoritmo methapone

El algoritmo methapone : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación