17-08-2018, 08:49 AM
(16-08-2018, 06:49 PM)Pablinho escribió: No puedes ver enlaces como invitado. Regístrate o conectate para verlo.Si quieres puedo pasarte el método que uso en el editor para hacer la transformación que creo recordar que llega hasta el 255 (lo digo de memoria)
He mirado un poco por el foro y he dado con Editor_PCF2001.rar:
No puedes ver enlaces como invitado. Regístrate o conectate para verlo.
que es una aplicación Java almacenada en un archivo JAR. He conseguido extraer el código del susodicho archivo y que tiene las dos siguientes funciones:
Código:
public String convCadenaAsciiPCF(int[] cadena)
public int[] convCadenaPCFAscii(String cadena)
He implementado el algoritmo solo usando bytes, y me dado cuenta de que la dos funciones son bijectivas, y por lo tanto equivalentes. La función sería la siguiente:
Código:
module Data.PCFutbol.Byte.Rotate
( bijective
) where
--------------------------------------------------------------------------------
import Data.Bits
( (.&.)
)
import Data.Word
( Word8
)
--------------------------------------------------------------------------------
bijective :: Word8 -> Word8
--------------------------------------------------------------------------------
bijective b
| 032 > b = if b .&. 01 == 0 then b + 97 else b + 95
| 064 > b = if b .&. 01 == 0 then b + 33 else b + 31
| 096 > b = if b .&. 01 == 0 then b - 31 else b - 33
| 128 > b = if b .&. 01 == 0 then b - 95 else b - 97
| 160 > b = if b .&. 01 == 0 then b + 97 else b + 95
| 192 > b = if b .&. 01 == 0 then b + 33 else b + 31
| 224 > b = if b .&. 01 == 0 then b - 31 else b - 33
| otherwise = if b .&. 01 == 0 then b - 95 else b - 97
que cumple con la propiedad:
Código:
#!/usr/bin/env stack
{- stack
--resolver lts-12.0
--install-ghc
script
--package bytestring
--package hspec
--package QuickCheck
--ghc-options -threaded
--ghc-options -Werror
--ghc-options -Wall
--
-}
--------------------------------------------------------------------------------
module Spec (main) where
--------------------------------------------------------------------------------
import Data.Word
( Word8
)
import Test.Hspec
( describe
, hspec
, it
)
import Test.QuickCheck
( property
)
import Data.PCFutbol.Byte.Rotate
( bijective
)
--------------------------------------------------------------------------------
main
:: IO ()
--------------------------------------------------------------------------------
main = hspec $
do
describe ("PC Fútbol Byte Rotate") $
do
it ("(bijective . bijective) byte == byte") $
property bijection
where
bijection :: Word8 -> Bool
bijection =
\ b -> (bijective . bijective) b == b
Output de ejecutar el test de propiedad:
Código:
PC Fútbol Byte Rotate
(bijective . bijective) byte == byte
+++ OK, passed 100 tests.
Finished in 0.0026 seconds
1 example, 0 failures
Sobre lo de las tildes, me he dado cuenta de que al ser una lista de bytes, pues el texto es almacenado como single byte y no multiple byte (UTF-8).
Ahora supongo que ya podré sacar datos (miraré un poco más en el código de tu proyecto (Editor_PCF2001) a ver como extraes cosas, y en un futuro, posiblemente también mirare lo de actualizar.
Gracias por tu respuesta, sin la cual aún estaría dando tumbos