Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Haskell

Name: Anonymous 2006-11-04 7:02

ghc -fglasgow-exts -lcrypt trip.hs
% ./a.out faggot
Ep8pui8Vw2


fap fap fap

module Main where
    import Data.Char
    import Foreign.C.String
    import System.Environment
    import System.IO.Unsafe

    foreign import ccall "crypt.h crypt" c_crypt :: CString -> CString -> IO CString

    crypt :: String -> String -> String
    crypt key salt =
        taketail 10 $
            unsafePerformIO $ peekCString $
            unsafePerformIO $
                withCString key $ \k ->
                withCString salt $ \s ->
                    c_crypt k s
        where
        taketail :: Int -> [a] -> [a]
        taketail i x = (reverse (take i (reverse x)))

    makesalt :: String -> String
    makesalt x =
        map
            fixsalt
            (take 2
                (if (length x) < 2 then ("H.") else (tail x)))
        where
        fixsalt :: Char -> Char
        fixsalt c
            | (inrange '0' '9' c)  = c
            | (inrange ':' '@' c)  = (chr ((ord c) + 7))
            | (inrange 'A' 'Z' c)  = c
            | (inrange '[' '`' c)  = (chr ((ord c) + 6))
            | (inrange 'a' 'z' c)  = c
            | c == '/' || c == '.' = c
            | otherwise            = '.'
            where
            inrange :: Ord a => a -> a -> a -> Bool
            inrange low upp x = x >= low && x <= upp

    tripcode :: String -> String
    tripcode s = crypt s (makesalt s)

    main :: IO ()
    main = do
        args <- getArgs
        putStrLn (tripcode (head args))

Name: Anonymous 2006-11-26 17:10 (sage)

>>40
also proof that the code tags don't work right on here. newlines right after [/code] get removed.

Name: Anonymous 2006-11-28 17:49

...NET?

Name: Anonymous 2006-12-09 14:14

Okay guys, I just learned list comprehension, and using that, I managed to turn my five line permutation function into a one-line golden masterpiece (I can't even understand the code anymore!).  How's this for concise (LOL)!!

permutate :: Eq a => [a] -> [[a]]
permutate [] = [[]]
permutate xs = [y : ys | y <- xs, ys <- (permutate (filter (/= y) xs))]


Any ideas on how I can remove the Eq dependency (/=) elegantly?  I realize you usually want to be able to distinguish elements in a permutation, but it'd still be nice.  Hmm... thinking about the code, I just figured it out!  It does ys <- for every y <-.  Nice, that explains why it works :)

Now, I want to see you C fanboys do this in 2000 lines of code!!

Name: Anonymous 2006-12-09 14:26

>>43
I just realized this doesn't work if two elements are the same... removing the Eq dependency would fix that, however.

Name: Anonymous 2006-12-09 14:54

>>43
how is this shit any better than obfuscated perl
it takes just as much effort to understand

Name: Anonymous 2006-12-09 15:09

>>45
Haskell: ePenis++
Perl: ePenis--

Also, the Haskell solution is using simple language features, what's hard to understand about the solution is the actual algorithm used... I think, at least.

Name: Anonymous 2006-12-09 15:10

Name: Anonymous 2006-12-09 15:25

>>47
Ah, how elegant, thanks!  May I think of this solution as I masturbate tonight?

Name: Anonymous 2006-12-11 14:46

>>46
CommonLisp: (1+ ePenis)

Name: Anonymous 2006-12-14 18:38

>>43
You could get rid of the Eq dependency by zipping the items on the input list with elements [1..], and then instead of having an Eq constraint on the 'a' type variable you could go with Int's Eq instance. If the caller needs the outputs to appear at most once in the output lists, s/he can just nub the input and be done with it.

Name: Anonymous 2006-12-15 20:30

Your code is incorrect. These will fail (compare to 2channel):

#><
#kami

Name: sister preggo test in python 2006-12-18 9:45

>>> def do_her():
...     question = raw_input('do you really want to do her?')
...     if question in ('y','yes','oh yes') : return True
...     if question in ('n','no','im gay') : return False
...     print 'is she pregnant?:'
...     print do_her

Name: Anonymous 2006-12-18 10:11

>>51
>>8
it's a much simplified version of the tripcode algorithm,

anyway, this language is much better than all the other crap in this thread:
function do_tripcode: dup. "2" "1" substr. "H." swap. concat. "A-Ga-f." ":-@[-` --{-" tr. crypt. "10" "3" substr.
function main: do_tripcode, print.

Name: Anonymous 2006-12-18 10:35

lol stack-based shit. welcome to 1968

Name: Anonymous 2006-12-18 11:36

>>54
uh

Name: Anonymous 2006-12-18 12:33 (sage)

>>54
Hmm... I have no idea what you are talking about, so I'll just sage to keep it off the first page.

Name: Anonymous 2007-01-02 13:59

>>53
What language is that? I googled the keywords and didn't see a good match.

Name: Anonymous 2007-01-02 17:19

>>57
Could be Factor or Joy or some other Forth-with-first-class-functions

Name: flibberdyjibbett !sJh8mwqDUo 2007-01-02 18:03

>>58
Not Joy, but wikipedia gives this Qsort written in Joy
 DEFINE qsort ==
   [small]
   []
   [uncons [>] split]
   [[swap] dip cons concat]
   binrec .

Name: Anonymous 2007-01-02 18:13

Name: Anonymous 2007-01-02 20:43

HASKELL IS A WRITE-ONLY LANGUAGE

Name: Anonymous 2007-01-03 9:57

>>61
Incorrect, code written by novices is highly readable and thus easy to refactor into god-level unreadable Haskell.

Name: Anonymous 2007-01-03 10:26

>>61
It's not unreadable until you go entirely point-free and mix in some arrows for good measure.

Name: Anonymous 2007-01-03 10:34

Haskell is shit. I shouldn't have to achieve satori just to make a short program that takes 10 minutes in C.

Name: Anonymous 2007-01-03 11:03

>>53
If you can't tell me what language that is, maybe you can tell me how to google for "dup." instead of "dup".

Name: Anonymous 2007-01-03 12:15

>>65
I searched for "function dup substr concat swap crypt" in
msn.com and the first match was this thread.

Name: Anonymous 2007-01-03 12:19

dup. execute 'dup' (duplicates the value on top of the stack) instead of pushing it onto the stack" pop.
"2" "1" substr. push '2' and then '1' onto the stack and then execute 'substr'" pop.
you should be able to figure out the rest...
as for what language it is, it doesn't have a name yet, but it does have a working compiler (currently unreleased) and about half of the standard library is written.

Name: Anonymous 2007-01-03 12:22 (sage)

oops, just ignore the '" pop.' on the end of each of those lines...
thats how you do comments in this language, i replaced the " at the beginning with [/code] and forgot to take the stuff off the end of each comment.

Name: Anonymous 2007-01-03 12:24

>>67
Did you start from scratch, or adopt another compiler?

Name: Anonymous 2007-01-03 12:30 (sage)

>>69
started from scratch... the compiler is written in perl and compiles the code to c.

Name: Anonymous 2007-01-03 12:34

>>70
OK, but but probably used some Forth interpreter for guidance. Did you find one you especially like?

Name: Anonymous 2007-01-03 13:09 (sage)

>>67
So what's with the comma and the periods?

Name: Anonymous 2007-01-03 13:46 (sage)

>>71
actually, no. i didn't even think of the similarities with forth, as i've never used forth...
>>67
oops... the comma is a typo for a period.
the period means to pop the first value off the stack and execute it if it's a function or just discard it if it's not. so the function gets pushed onto the stack and then popped off and executed. except that the compiler doesn't actually do the push and pop.
and actually i guess you could use just a period instead of " pop." for comments...

Name: Anonymous 2007-01-03 18:12

>>64
Fail.

Name: Anonymous 2011-01-31 20:07

<-- check em dubz

Name: Sgt.Kabu࠿මkiman芛颛 2012-05-28 21:00

Bringing /prog/ back to its people

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List