Created
November 9, 2018 06:01
-
-
Save guilledk/e5ff9fb6e05af065254c6ec5ce92973b to your computer and use it in GitHub Desktop.
Tarea 2 - P1 2018 Code Golf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| function PalabraEnPosicion (palabra : TPalabra; cuadro : TCuadro; posicion : TPosicion) : boolean; | |
| var i : integer; | |
| begin | |
| i := 1; | |
| while (i > 0) and (i <= palabra.largo) do | |
| if ((posicion.columna + i - 1) > MaxColumna) or (cuadro[posicion.fila, posicion.columna + i - 1] <> palabra.letras[i]) then i := -1 else inc(i); | |
| PalabraEnPosicion := true and (i > 0) | |
| end; | |
| procedure ResolverSopa (cuadro : TCuadro; palabras : ConjuntoPalabras; var resultado: OcurrenciasPalabras); | |
| var aux, iter : ListaPosiciones; | |
| i : integer; | |
| posicionTemporal : TPosicion; | |
| begin | |
| for i := 1 to MaxConjuntoPalabras do resultado[i] := nil; | |
| for i := 1 to MaxConjuntoPalabras do | |
| for posicionTemporal.fila := 1 to MaxFila do | |
| for posicionTemporal.columna := 1 to (MaxColumna - palabras[i].largo + 1) do | |
| if PalabraEnPosicion(palabras[i], cuadro, posicionTemporal) then | |
| begin | |
| new(aux); | |
| aux^.posicion := posicionTemporal; | |
| aux^.siguiente := nil; | |
| if resultado[i] = nil then resultado[i] := aux else | |
| begin | |
| iter := resultado[i]; | |
| while iter^.siguiente <> nil do iter := iter^.siguiente; | |
| iter^.siguiente := aux; | |
| end; | |
| end; | |
| end; | |
| procedure ObtenerDatosSopa(cuadro : TCuadro; palabras : ConjuntoPalabras; var datos : DatosSopa); | |
| var solve : OcurrenciasPalabras; | |
| i, mas_veces_actual, t_lista: integer; | |
| ultima_pos_actual : TPosicion; | |
| iter : ListaPosiciones; | |
| begin | |
| ResolverSopa(cuadro, palabras, solve); | |
| datos.comun := true; | |
| for i := 1 to MaxConjuntoPalabras do | |
| begin | |
| t_lista := 0; | |
| iter := solve[i]; | |
| while iter <> nil do | |
| begin | |
| inc(t_lista); | |
| iter := iter^.siguiente; | |
| end; | |
| if t_lista > 0 then | |
| begin | |
| datos.HayPalabras := true; | |
| if palabras[i].largo > datos.MasLarga.largo then | |
| datos.MasLarga := palabras[i]; | |
| if mas_veces_actual < t_lista then | |
| begin | |
| mas_veces_actual := t_lista; | |
| datos.MasVeces := palabras[i]; | |
| end; | |
| iter := solve[i]; | |
| while iter <> nil do | |
| begin | |
| if (iter^.posicion.fila > ultima_pos_actual.fila) or ((iter^.posicion.fila = ultima_pos_actual.fila) and (iter^.posicion.columna > ultima_pos_actual.columna)) then | |
| begin | |
| ultima_pos_actual := iter^.posicion; | |
| datos.Ultima := palabras[i]; | |
| end; | |
| iter := iter^.siguiente; | |
| end; | |
| end; | |
| datos.comun := datos.comun and (t_lista > 0) and (mas_veces_actual = 1); | |
| end; | |
| end; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment