No expliqué el invento!! ¿Funcionará?


Bueno dadme el beneficio de la duda y trato de explicaros que creo ocurre en este snippet de código..

Vamos allá!! +

#AoC2021
Veamos :
part1 :: [Int] -> Int
part1 ns = length $ filter (>0) $ zipwith (-) ns' ns
where ns’ = tail ns
ns' = tail ns, es la lista "ns" menos su primer elemto, es decir empieza por el segundo. Esto lo uso para restarle el segundo al primero con: zipWith (-) ns' ns que une en cremallera ns' y ns aplicado la resta a cada par de elementos es decir: 2º - 1º, 3º - 2º.. etc..
tras las restas, filter(>0) debería eliminar los resultados negativos , dejandonos los incrementos que finalement contamos con length...
Veamos ahora:
main :: IO ()
main = do
contents <- readFile "data1.txt"
let readings = (read <$> lines contents):: [Int]
print "Result: " ++ show $ part1 readings
Main corre en la mónada IO permitiendonos leer con readFile el fichero dentro de contents. el bloque do permite usar la "notación monádica" que asemeja un lenguaje imperativo. Para la segunda linea que es código puro usamos un "let" para mantenerlo separado del código monádico.
lines l nos separa en una lista de lienas un string de elementos separados por '\'. Ahora queremos mapear read que parsea datos en la lista:

map read (lines contents) ó
fmap read (lines contents) ó
read `fmap` (lines contents) ó notación aplicativa
read <$> (lines contents)
read es una funcion polimórfica capaz de producir muchos datos distintos , nosotros queremos leer enteros pero eso el compilador no lo sabe, así que se lo informarmos solicitando una cast explícito con :: [Int]
finalmente usamos nuestro calculadora "part1" dentro de una acción de impresion (seguimos en IO) como part1 devuelve un entero usamos la antitésis de read: show para convertir el valor de vuelta a String y poder concatenarlo "++" con el mensaje de print.
Bueno YMMV porque me lo he "inventao" al vuelo en Twitter y no lo he probado...

pero me imagino que cualquiera con conocimientos de #Haskell sabrá arreglarlo en incluso hacer algo bastante mejor..

Disfrutar del #AoC2021
Según me dice en la segunda parte solo una ventana deslizante de 3 elemntos...

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with The Code Maverick

The Code Maverick Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @maverick_code

4 Dec
Bueno pues Hoy he hecho un pequeño esfuerzo por teclear y he resuelto el AoC Sonar Sweep parte 1.
Es muy facil asi que he tratado de ser un poco exótico y ahorrarme teclear mucho que apenas he podido aguantar la parte 1

*SPOILERS* *SPOILERS

#AoC2021 #Python
Bueno agregué a un workspace las rutinas del A0C2020 por si puedo ahorrarme esfuerzo (aún ando jodido) El main funciona independiente de cuantos modulos despliegues en el directorio de challenges + Image
Lo primero que el puzle necesita es un swich para leer el fichero y un comando para lanzar la parte1 y la parte2 por separado. Para eso el módulo registra un subparser que se encarga de esos detalles.. + Image
Read 13 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(