Guía de uso de Kattis
Índice
El procedimiento para trabajar con Kattis consta de los pasos que se describen a continuación.
1 Registro en Kattis
En primer lugar, tienes que ir a la página de registro en la que pregunta
- "Full Name" (es el nombre con que se mostrarán tus estadísticas, te recomiendo que ponga tu nombre completo).
- "E-email" (es el correo en donde recibirás las notificaciones de Kattis)
- "Password" (es la clave que usarás para acceder a tu cuenta en Kattis).
Cuando lo tengas relleno, debes de pulsar en "Submit".
Al pulsar, aparece la página de configuración del perfil con los siguientes campos:
- "Username": debes de cambiar el que ha cogido a partir de tu nombre por tu UVUS (todo en minúscula).
- "Country": debes de seleccionar Spain
- "Subdivision": debes de seleccionar Andalusia
- "University": debes de seleccionar "University of Seville"
- "Prefered language": debes de seleccionar English
- "Preferred time zone": debes de seleccionar Madrid
- "Default programming language": debes de seleccionar Haskell
Al final de la página, debes de pulsar en "Update"
Kattis te enviará un correo para validar tu cuenta. Abre el correo y la valida.
2 Solución de un problema simple: "Hello World!"
Después de validar la cuenta de Kattis, entra en el problema Hello World!
El objetivo es escribir la cadena "Hello World!"
Abre un fichero en tu ordenador (por ejemplo, hello.hs
) y escribe la solución
main :: IO () main = putStrLn "Hello World!\n"
Después, de escribir la solución en tu ordenador
- vuelve a la página del problema,
- pulsa el botón "Submit" (que está en verde colocado en la esquina superior derecha),
- pulsa en "Drag & drop a file here to upload",
- selecciona el fichero con la solución (en este caso
hello.hs
) y - pulsa el botón "Submit".
Kattis corregirá automáticamente tu solución y actualizará tus estadísticas junto con las de la Universidad de Sevilla y las de España.
3 Solución de un problema con datos de entrada y salida
El problema "Hello World!" no tenía datos de entrada. Vamos a ver la estructura básica de los problemas con datos de entrada y salida comentando la solución del problema A different problem.
Una forma de proceder es la siguiente:
- crear una carpeta para los problemas de Kattis (puedes ponerla en
C:/I1M/Kattis
) - en la carpeta de Kattis crear una carpeta para el problema (por ejemplo,
Different
que quedaría comoc:/I1M/Kattis/Different
) - ir a A different problem y pulsar en Sample data files para descargar los
ficheros de prueba y descargar el fichero
samples.zip
en el directorio del problema (en este caso,C:/I1M/Kattis/Different
) - descomprimir el fichero
samples.zip
y se extrae los ficherossample.in
ysample.ans
(con la extensión.in
se indica los ficheros de entrada y con la extensión.ans
la respuesta esperada en los de salida) - borrar el fichero
samples.zip
- crear el fichero
Different.hs
para escribir la solución.
La solución es
main :: IO () main = interact resolucion -- λ> resolucion <$> readFile "sample.in" >>= putStr -- 2 -- 71293781685339 -- 12345677654320 resolucion :: String -> String resolucion = escribeSalida . solucion . leeEntrada -- λ> leeEntrada <$> readFile "sample.in" -- [10,12,71293781758123,72784,1,12345677654321] leeEntrada :: String -> [Integer] leeEntrada = map read . words -- λ> solucion [10,12,71293781758123,72784,1,12345677654321] -- [2,71293781685339,12345677654320] solucion :: [Integer] -> [Integer] solucion (x:y:zs) = abs (x - y) : solucion zs solucion _ = [] -- λ> escribeSalida [2,71293781685339,12345677654320] -- "2\n71293781685339\n12345677654320\n" escribeSalida :: [Integer] -> String escribeSalida = unlines . map show
En el fichero tiene que tener una función principal (main
) de tipo
IO()
que interactivamente llama a la función resolucion
que
- lee los datos de entrada, con la función
leeEntrada
; - soluciona el problema, con la función
solucion
; - escribe los datos de salida, con la función
escribeSalida
e
Cuando se está resolviendo un problema, es conveniente seguir las enntras y salida de cada una de las funciones con los ejemplos del problema.