changeset 1337:b6a87dde66ff

<GreyKnight> fetch http://sprunge.us/hiJM
author HackBot
date Thu, 10 Jan 2013 12:58:53 +0000
parents 3faad865a833
children 38bc85347cbc
files hiJM
diffstat 1 files changed, 42 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hiJM	Thu Jan 10 12:58:53 2013 +0000
@@ -0,0 +1,42 @@
+import Data.List
+import Data.Char
+
+standardURL = "http://esolangs.org/wiki/Main_Page"
+standardMessage = "Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: @. (For the other kind of esoterica, try #esoteric on irc.dal.net.)"
+
+replace :: (Eq a) => [a] -> [a] -> [a] -> [a]
+replace _ _ [] = []
+replace old new (y:ys) =
+  case stripPrefix old (y:ys) of
+    Nothing -> y : replace old new ys
+    Just ys' -> new ++ replace old new ys' 
+
+applyGenTemplate :: String -> String -> String -> String  -- nick url template -> result
+applyGenTemplate nick url template = nick ++ ": " ++ replace "^" nick (replace "@" url template)
+
+applyTemplate :: String -> String -> String -- nick template -> result
+applyTemplate nick template = applyGenTemplate nick standardURL template
+
+
+
+reversibles = "<([{}])>"
+
+-- there is probably a better way to do this with guards or somesuch
+reverseChar :: Char -> Maybe Int -> Char
+reverseChar c Nothing = c
+reverseChar c (Just a) = reversibles !! (length reversibles - 1 - a)
+
+tidyReverse :: String -> String
+tidyReverse [] = []
+tidyReverse (c:cs) = (tidyReverse cs) ++ [reverseChar c (elemIndex c reversibles)]
+
+
+makeWelcome :: (String -> String) -> String -> String  -- filter nick -> result
+makeWelcome f nick = applyTemplate nick (f standardMessage)
+
+
+welcome = makeWelcome id
+emoclew = makeWelcome tidyReverse
+wELCOME = makeWelcome (map toUpper)
+eMOCLEW = makeWelcome ((map toUpper) . tidyReverse)
+