Here's a simple problem which I found quite fun to implement.
Suggested hoodlums problem (beginner level):
Context:
In the game of dungeons and dragons, an example damage expression might be:
-- don't do it like this, especially the json! | |
import Network.WebSockets (shakeHands, getFrame, putFrame) | |
import Network (listenOn, PortID(PortNumber), accept, withSocketsDo) | |
import System.IO (Handle, hClose) | |
import qualified Data.ByteString as B (append, null) | |
import Data.ByteString.UTF8 (fromString) -- this is from utf8-string | |
import Control.Monad (forever) | |
import Control.Concurrent (forkIO, threadDelay) | |
import Data.List (intercalate) |
<html> | |
<!-- for use with equally crap server at https://gist.github.com/821606 --> | |
<!-- you'll need jquery and flot --> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
<title>Flot Log presenter with External json file</title> | |
<link href="./clientsupport/layout.css" rel="stylesheet" type="text/css"> | |
<script language="javascript" type="text/javascript" src="./clientsupport/jquery.js"></script> | |
<script language="javascript" type="text/javascript" src="./clientsupport/jquery.flot.js"></script> |
envNodes = mydoc.xpath '//xmlns:environment', mydoc.root.namespaces |
import Data.Function (on) | |
import Data.List (groupBy) | |
import Data.Maybe (mapMaybe) | |
import qualified Data.List.Utils as U | |
type Domain = String | |
type NameServer = String | |
main :: IO () | |
main = interact (processLines . lines) |
import Data.Function (on) | |
import Data.List (groupBy) | |
import Data.Maybe (mapMaybe) | |
import qualified Data.List.Utils as U | |
type Domain = String | |
type NameServer = String | |
main :: IO () | |
main = interact process |
import qualified Data.List.Utils as U | |
import Data.List (sort, groupBy, intercalate) | |
import Data.Function (on) | |
-- ------------------------------------------------- | |
-- example data | |
-- ------------------------------------------------- | |
examples :: [(Domain, [NameServer])] | |
examples = [("pachube.com",["7.f.c", | |
"5.f.c", |
{-- snippet all --} | |
module PodParser where | |
import PodTypes | |
import Text.XML.HaXml | |
import Text.XML.HaXml.Parse | |
import Text.XML.HaXml.Posn | |
import Text.XML.HaXml.Html.Generate(showattr) | |
import Data.Char | |
import Data.List |
module Main where | |
import Text.XML.HaXml | |
import Text.XML.HaXml.Posn | |
main :: IO () | |
main = processXmlWith (hexagrams `o` tag "IChing") | |
hexagrams :: Content Posn -> [Content Posn] | |
hexagrams = html [ hbody [htable [rows `o` children `with` ( tag "hexagram")] ] ] |
echo -n | |
#quote-escaping removed from the following json | |
" | |
{"version": "1.1.0","host": "maps.google.com","request_address": true,"address_language": "en_GB", "wifi_towers": | |
[ | |
`iwlist scan 2> /dev/null | | |
tr -d '\n' | | |
sed -e 's/Cell [0-9]* - Address: \([0-9A-Z:]*\)[^C]*Channel:\([0-9]*\)[^S]*Signal level=\([0-9-]*\) dBm[^E]*E[^E]*ESSID:"\([^"]*\)"/\{"mac_address": "\1","signal_strength": \3,"age": 0,"channel": \2,"ssid": "\4"}/g' | |
-e 's/[^{]*{/{/' | |
-e 's/}[^{]*{/},{/g' |