←2011-02-05 2011-02-06 2011-02-07→ ↑2011 ↑all
00:01:09 <elliott> execlp("sh", "-c", cmd, NULL);
00:01:09 <elliott> hmm
00:01:14 <elliott> this seems to not inherit your PATH or something
00:01:21 <elliott> it's telling me it can't find yes or cat
00:02:00 <elliott> oh
00:02:02 <elliott> I don't want -c
00:02:03 <elliott> I don't think
00:02:10 <elliott> "sh -c /usr/bin/yes" doesn't work
00:02:29 <elliott> -c Read commands from the command_string operand
00:02:29 <elliott> instead of from the standard input. Special
00:02:29 <elliott> parameter 0 will be set from the command_name op‐
00:02:29 <elliott> erand and the positional parameters ($1, $2, etc.)
00:02:29 <elliott> set from the remaining argument operands.
00:02:30 <elliott> argh
00:02:33 <elliott> where's the eval part :P
00:02:53 <elliott> hm that _is_ it
00:05:25 <fizzie> The first arg is argv[0], isn't it?
00:06:02 <elliott> ohh
00:06:03 <elliott> yep
00:07:16 <elliott> OK, so I need two pipes for my two-process case.
00:07:31 <elliott> pipe1[0] is what process #1 writes to
00:07:37 <elliott> pipe1[1] is what process #2 reads from
00:07:44 <elliott> pip2[0] is what process #2 writes to
00:07:45 <elliott> *pipe2
00:07:50 <elliott> pipe2[1] is what process #1 reads from
00:07:50 <elliott> okay
00:07:52 <olsner> no, [0] is the read end, [1] is the write end
00:07:55 <elliott> err
00:07:57 <elliott> right
00:08:36 <olsner> so I think youdup2(pipe1[0], 1) to hook up a read-end to stdin
00:08:46 <olsner> *you'd do dup2
00:08:48 <elliott> dup2(pipe2[0], 0);
00:08:48 <elliott> dup2(pipe1[1], 1);
00:08:53 <elliott> yeah
00:08:56 <elliott> olsner: wait what?
00:09:04 <elliott> stdin is 0
00:09:06 <olsner> whichever is stdin and stdout, can never remember that :)
00:09:25 <elliott> if (n == 0) {
00:09:25 <elliott> dup2(pipe2[0], 0);
00:09:25 <elliott> dup2(pipe1[1], 1);
00:09:25 <elliott> } else {
00:09:25 <elliott> dup2(pipe1[0], 0);
00:09:26 <elliott> dup2(pipe2[1], 1);
00:09:28 <elliott> }
00:09:30 <elliott> simple enough
00:09:51 <elliott> yay, it's working
00:10:15 <olsner> in the 1-process case, do you make a single process talking to itself?
00:10:34 -!- augur has joined.
00:10:37 <elliott> olsner: :D
00:10:40 <elliott> olsner: that would be amazing
00:11:14 <elliott> http://translate.google.com/#de|de|pv%20zk%20bschk%20pv%20zk%20pv%20bschk%20zk%20pv%20zk%20bschk%20pv%20zk%20pv%20bschk%20zk%20bschk%20pv%20bschk%20bschk%20pv%20kkkkkkkkkk%20bschk%0A%0A <-- they changed the button to say Beatbox :D
00:11:50 <olsner> don't know of any program that can usefully talk to itself, but there's no reason not to support it
00:12:52 -!- buttsbutts has joined.
00:12:52 <buttsbutts> butts
00:12:54 <buttsbutts> butts
00:12:56 <elliott> wooo
00:12:57 <buttsbutts> butts
00:12:57 <elliott> it works
00:12:59 <elliott> empirically verified by: butts
00:13:00 <buttsbutts> butts
00:13:03 <buttsbutts> butts
00:13:05 <elliott> teehee
00:13:06 <buttsbutts> butts
00:13:08 <buttsbutts> butts
00:13:10 <elliott> butts
00:13:11 <buttsbutts> butts
00:13:12 -!- buttsbutts has quit (Remote host closed the connection).
00:13:30 <elliott> read: 6: arg count
00:13:32 <elliott> what
00:13:34 <elliott> oh
00:14:04 <elliott> wut
00:14:05 <elliott> it no work
00:14:06 <elliott> i sads
00:14:17 <olsner> u suks
00:14:20 <elliott> hey olsner the reading it is the brokes? this makes me an sads
00:14:24 <elliott> *a brokes
00:14:58 <olsner> read? arg count?
00:15:02 <olsner> I don't get it
00:15:30 <elliott> olsner: no that's not the bug
00:15:34 <elliott> reading just blocks
00:15:46 <Vorpal> funny googling for "-1^1/2" gives 0.5 due to weird parsing of where the () should go
00:15:46 <olsner> well, it would block until something writes to the other end
00:15:51 <Vorpal> funny,*
00:15:55 <elliott> olsner: i'm pretty sure nc writes to the other end
00:16:44 <olsner> hmm, could try strace with the follow forks and log pids options
00:16:49 <olsner> to see what's going on
00:16:58 <elliott> sounds scary... okay
00:17:08 <olsner> if you're just blocking it should be alright
00:17:20 <elliott> [pid 18122] read(0, "E", 1) = 1
00:17:20 <elliott> [pid 18122] read(0, "x", 1) = 1
00:17:21 <elliott> [pid 18122] read(0, "c", 1) = 1
00:17:21 <elliott> [pid 18122] read(0, "e", 1) = 1
00:17:21 <elliott> [pid 18122] read(0, "s", 1) = 1
00:17:21 <elliott> [pid 18122] read(0, "s", 1) = 1
00:17:23 <elliott> [pid 18122] read(0, " ", 1) = 1
00:17:25 <elliott> [pid 18122] read(0, "F", 1) = 1
00:17:27 <elliott> [pid 18122] read(0, "l", 1) = 1
00:17:29 <elliott> [pid 18122] read(0, "o", 1) = 1
00:17:32 <elliott> [pid 18122] read(0, "o", 1) = 1
00:17:33 <elliott> [pid 18122] read(0, "d", 1) = 1
00:17:35 <elliott> [pid 18122] read(0, ")", 1) = 1
00:17:37 <elliott> [pid 18122] read(0, "\r", 1) = 1
00:17:39 <elliott> [pid 18122] read(0, "\n", 1) = 1
00:17:41 <elliott> *someone's* terribly efficient
00:17:43 <olsner> but if something forks and starts polling or something like that, you might be getting too much output for comfort :)
00:17:47 -!- buttsbutts has joined.
00:17:47 <buttsbutts> :card.freenode.net NOTICE * :*** Looking up your hostname...
00:17:47 <buttsbutts> :card.freenode.net NOTICE * :*** Checking Ident
00:17:47 <buttsbutts> :card.freenode.net NOTICE * :*** No Ident response
00:17:47 <buttsbutts> :card.freenode.net NOTICE * :*** Couldn't look up your hostname
00:17:47 <buttsbutts> :card.freenode.net 001 buttsbutts :Welcome to the freenode Internet Relay Chat Network buttsbutts
00:17:48 <buttsbutts> :card.freenode.net 002 buttsbutts :Your host is card.freenode.net[38.229.70.20/6667], running version ircd-seven-1.0.3
00:17:54 <elliott> ...ok so this time it works? :D
00:17:54 <elliott> oh
00:17:57 <elliott> it must be flooding
00:17:58 <elliott> obviously
00:18:03 <elliott> bet it's being throttled as we speak
00:18:04 <buttsbutts> :card.freenode.net 003 buttsbutts :This server was created Sun Sep 26 2010 at 01:24:51 UTC
00:18:04 <buttsbutts> :card.freenode.net 004 buttsbutts card.freenode.net ircd-seven-1.0.3 DOQRSZaghilopswz CFILMPQbcefgijklmnopqrstvz bkloveqjfI
00:18:04 <buttsbutts> :card.freenode.net 005 buttsbutts CHANTYPES=# EXCEPTS INVEX CHANMODES=eIbq,k,flj,CFLMPQcgimnprstz CHANLIMIT=#:120 PREFIX=(ov)@+ MAXLIST=bqeI:100 MODES=4 NETWORK=freenode KNOCK STATUSMSG=@+ CALLERID=g :are supported by this server
00:18:04 <buttsbutts> :card.freenode.net 005 buttsbutts SAFELIST ELIST=U CASEMAPPING=rfc1459 CHARSET=ascii NICKLEN=16 CHANNELLEN=50 TOPICLEN=390 ETRACE CPRIVMSG CNOTICE DEAF=D MONITOR=100 :are supported by this server
00:18:04 <buttsbutts> :card.freenode.net 005 buttsbutts FNC TARGMAX=NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:4,NOTICE:4,ACCEPT:,MONITOR: EXTBAN=$,arx WHOX CLIENTVER=3.0 :are supported by this server
00:18:04 -!- buttsbutts has quit (Excess Flood).
00:18:08 <elliott> yep :D
00:18:43 -!- buttsbutts has joined.
00:18:43 <buttsbutts> :niven.freenode.net NOTICE * :*** Looking up your hostname...
00:18:43 <buttsbutts> :niven.freenode.net NOTICE * :*** Checking Ident
00:18:43 <buttsbutts> :niven.freenode.net NOTICE * :*** No Ident response
00:18:43 <buttsbutts> :niven.freenode.net NOTICE * :*** Couldn't look up your hostname
00:18:45 <buttsbutts> :niven.freenode.net 001 buttsbutts :Welcome to the freenode Internet Relay Chat Network buttsbutts
00:18:47 <buttsbutts> :niven.freenode.net 002 buttsbutts :Your host is niven.freenode.net[140.211.166.4/6667], running version ircd-seven-1.0.3
00:18:49 <copumpkin> this is useful
00:18:49 <buttsbutts> :niven.freenode.net 003 buttsbutts :This server was created Tue Feb 23 2010 at 23:01:59 UTC
00:18:51 <buttsbutts> :niven.freenode.net 004 buttsbutts niven.freenode.net ircd-seven-1.0.3 DOQRSZaghilopswz CFILMPQbcefgijklmnopqrstvz bkloveqjfI
00:18:52 <elliott> copumpkin: it is
00:18:53 <buttsbutts> :niven.freenode.net 005 buttsbutts CHANTYPES=# EXCEPTS INVEX CHANMODES=eIbq,k,flj,CFLMPQcgimnprstz CHANLIMIT=#:120 PREFIX=(ov)@+ MAXLIST=bqeI:100 MODES=4 NETWORK=freenode KNOCK STATUSMSG=@+ CALLERID=g :are supported by this server
00:18:54 <elliott> copumpkin: it is very useful
00:18:55 <buttsbutts> :niven.freenode.net 005 buttsbutts SAFELIST ELIST=U CASEMAPPING=rfc1459 CHARSET=ascii NICKLEN=16 CHANNELLEN=50 TOPICLEN=390 ETRACE CPRIVMSG CNOTICE DEAF=D MONITOR=100 :are supported by this server
00:18:57 <buttsbutts> :niven.freenode.net 005 buttsbutts FNC TARGMAX=NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:4,NOTICE:4,ACCEPT:,MONITOR: EXTBAN=$,arx WHOX CLIENTVER=3.0 :are supported by this server
00:18:58 <elliott> it is buttsbutts
00:18:59 <buttsbutts> :niven.freenode.net 251 buttsbutts :There are 440 users and 59684 invisible on 26 servers
00:19:01 <buttsbutts> :niven.freenode.net 252 buttsbutts 30 :IRC Operators online
00:19:03 <buttsbutts> :niven.freenode.net 253 buttsbutts 1 :unknown connection(s)
00:19:03 <elliott> wait for it
00:19:05 <buttsbutts> :niven.freenode.net 254 buttsbutts 34526 :channels formed
00:19:07 <buttsbutts> :niven.freenode.net 255 buttsbutts :I have 3898 clients and 1 servers
00:19:07 <elliott> we're gonna end up staring at the camera
00:19:09 <buttsbutts> :niven.freenode.net 265 buttsbutts 3898 5233 :Current local users 3898, max 5233
00:19:09 <elliott> pointed at the screen
00:19:11 <elliott> showin the camera
00:19:11 <buttsbutts> :niven.freenode.net 266 buttsbutts 60124 70432 :Current global users 60124, max 70432
00:19:12 <elliott> *showing
00:19:13 <buttsbutts> :niven.freenode.net 250 buttsbutts :Highest connection count: 5234 (5233 clients) (1295329 connections received)
00:19:15 <buttsbutts> :niven.freenode.net 375 buttsbutts :- niven.freenode.net Message of the Day -
00:19:17 <buttsbutts> :niven.freenode.net 372 buttsbutts :- Welcome to niven.freenode.net in Corvallis, Oregon, US. Our
00:19:19 <buttsbutts> :niven.freenode.net 372 buttsbutts :- thanks to Oregon State University for sponsoring this server!
00:19:20 <elliott> just as soon as we get past the motd!
00:19:21 <buttsbutts> :niven.freenode.net 372 buttsbutts :-
00:19:23 <buttsbutts> :niven.freenode.net 372 buttsbutts :- NIVEN, LAWRENCE VAN COTT [1938-]. Architect of Known Space,
00:19:25 <buttsbutts> :niven.freenode.net 372 buttsbutts :- the setting of Protector, World of Ptaavs and the
00:19:27 <buttsbutts> :niven.freenode.net 372 buttsbutts :- Ringworld series. Author of "Flash Crowd", a canonical
00:19:29 <buttsbutts> :niven.freenode.net 372 buttsbutts :- sociological hard science fiction short story dealing with
00:19:31 <buttsbutts> :niven.freenode.net 372 buttsbutts :- effects of near instantaneous transportation on a modern
00:19:33 <copumpkin> so much bullshits
00:19:33 <buttsbutts> :niven.freenode.net 372 buttsbutts :- technological society. In addition, he is well known for his
00:19:33 -!- buttsbutts has quit (Remote host closed the connection).
00:19:36 <copumpkin> lol
00:19:39 <copumpkin> elliott: fail
00:19:41 <olsner> perhaps you could make it ignore the motd :)
00:19:42 <elliott> copumpkin: i ^C'd it
00:19:45 <elliott> because, you know, no :P
00:21:20 <olsner> so what was the configuration there?
00:21:30 <elliott> echo USER butts butts butts butss
00:21:30 <elliott> echo NICK buttsbutts
00:21:31 <elliott> echo JOIN '#esoteric'
00:21:31 <elliott> while read line; do
00:21:31 <elliott> sleep 2
00:21:31 <elliott> echo PRIVMSG '#esoteric' ":$line"
00:21:33 <elliott> done
00:21:35 <elliott> and
00:21:37 <elliott> $ catbus 'nc irc.freenode.net 6667' ./hello
00:21:45 <elliott> catbus adds -DGAPING_SECURITY_HOLE to any copy of nc!
00:22:16 <elliott> so i just need to extend it to N processes
00:22:18 <elliott> sounds "fun"
00:23:02 <olsner> what, you've just implemented exactly two processes and not N?
00:23:09 <elliott> olsner: at this point, yes
00:23:10 <olsner> 2's not a number you know
00:23:13 <elliott> just to check that everything was working
00:23:14 <elliott> :D
00:23:15 <copumpkin> elliott: that could be even cleaner in haskell
00:23:16 <elliott> oh indeed it isn't
00:23:22 <elliott> copumpkin: what could, the shell script?
00:23:25 <copumpkin> yeah
00:23:28 <copumpkin> it's just an interact
00:23:33 <elliott> copumpkin: no it isn't
00:23:35 <elliott> "sleep 2"
00:23:37 <elliott> :t interact
00:23:38 <lambdabot> (String -> String) -> IO ()
00:23:38 <copumpkin> fuck that
00:23:41 <elliott> you'd need -> IO String) -> IO ()
00:23:42 <Deewiant> unsafePerformIO
00:23:46 <elliott> Deewiant: VISIONARY
00:23:53 <copumpkin> why the sleep, anyway?
00:23:57 <elliott> i fear the day when Haskell becomes mainstream and idiots solve their problems with unsafePerformIO
00:23:59 <elliott> copumpkin: because otherwise it floods
00:23:59 <elliott> duh
00:24:06 <copumpkin> pff
00:24:16 <Lymia> elliott.
00:24:22 <copumpkin> someone should make a throttleList :: Int -> [a] -> [a]
00:24:23 <copumpkin> :P
00:24:23 <Lymia> I doubt that will happen.
00:24:26 <copumpkin> that produces shit slowly
00:24:43 <olsner> obviously, you just add another middle step that's cat with delay
00:24:46 <copumpkin> it's referentially transparent
00:24:53 <copumpkin> so it's a perfectly good place to use unsafePerformIO
00:25:00 <olsner> you have a catbus after all
00:25:16 <elliott> dup2(pipes[(i-1)%total][0], 0);
00:25:16 <elliott> dup2(pipes[i][1], 1);
00:25:19 <elliott> can't be that easy, can it?
00:25:25 <olsner> why not?
00:25:29 <elliott> well
00:25:33 <elliott> this kind of stuff sounds hard :D
00:25:34 <elliott> fds and stuff!
00:26:45 <elliott> ha olsner
00:26:46 <elliott> it isn't that easy
00:26:49 <elliott> my thing still hasn't connecte
00:26:50 <elliott> d
00:28:06 <olsner> well, it should be that simple :)
00:28:26 <elliott> had an off-by-one i think
00:29:01 <olsner> for child 0, what's (0-1)%total?
00:29:11 <elliott> well let's say there's 2
00:29:17 <elliott> right now i pass 1 as total
00:29:20 <elliott> so it's -1%1
00:29:29 <elliott> which ends up as ... 0, aha
00:29:32 <elliott> it should be %2
00:29:34 <elliott> but actually
00:29:37 <elliott> I just changed it to pass argc as total
00:29:42 <elliott> so it's (0-1)%2 = 1
00:30:06 <olsner> obviously total is 2 if you have two processes :)
00:30:12 <elliott> right
00:30:16 <elliott> so i have no idea what's wrong
00:30:18 <elliott> :/
00:30:33 <elliott> solution
00:30:42 <elliott> ./catbus 'nc irc.freenode.net 6667 | tee log' ./hello
00:30:46 <elliott> (wish shells let you tee fds)
00:30:47 <elliott> i.e.
00:30:51 <elliott> >+&2
00:30:56 <elliott> sends stdout to both stdout /and/ stderr
00:31:01 <elliott> prolly zsh can do that :P
00:31:32 <olsner> tee /dev/fd/2 perhaps?
00:31:33 <elliott> hmm
00:31:39 <elliott> olsner: ah, indeed
00:31:41 -!- BeholdMyGlory has quit (Remote host closed the connection).
00:31:43 <elliott> dunno if sh does that though
00:31:52 <elliott> seems like hello gets nc's output, but nc doesn't get hello's output
00:32:00 <elliott> so uh
00:32:13 <elliott> hello is process 1 (after process 0)
00:32:14 <elliott> so it's
00:32:22 <elliott> stdout --> pipes[1][1]
00:32:23 <elliott> now in process 0
00:32:24 <elliott> it's
00:32:28 <elliott> -1%2 = 1
00:32:31 <elliott> pipes[1][0] goes to stdin
00:32:33 <elliott> so that should be working
00:32:34 <elliott> wait
00:32:42 <elliott> how does c do negative modulo
00:33:43 <elliott> > printf("%d\n", (-1)%2);
00:33:43 <elliott> -1
00:33:44 <lambdabot> <no location info>: parse error on input `;'
00:33:49 <elliott> olsner: let's talk about how C's modulo semantics are fucktarded.
00:33:52 <olsner> (i?i-1:total-1)
00:35:38 <olsner> it's probably undefined for negative values or something like that
00:35:47 <elliott> yeah
00:35:50 <elliott> C is a real shitfucking language.
00:35:51 <tswett> Gregor: I wrote a stupid little piano piece. It's about 30 seconds long. How would you feel about recording it?
00:35:52 <elliott> technical term
00:35:56 <elliott> elliott@elliott-MacBookAir:~/Code/catbus$ ./catbus 'nc irc.freenode.net 6667' ./hello
00:35:57 <elliott> elliott@elliott-MacBookAir:~/Code/catbus$
00:35:57 <elliott> that worked!
00:36:07 <elliott> (still haven't thought of a hostname :D)
00:36:21 <olsner> haskell has mod and rem, and I have no idea how either of them works for negative values
00:36:23 <elliott> oh, stupid bug
00:36:31 <olsner> but I think both are well-defined in different ways
00:36:34 <elliott> > -1 `mod` 2
00:36:35 <lambdabot> -1
00:36:37 <elliott> > -1 `rem` 2
00:36:38 <lambdabot> -1
00:36:42 <elliott> olsner: lol
00:36:42 <tswett> > mod (-1) 2
00:36:43 <lambdabot> 1
00:36:46 <elliott> oh right
00:36:47 <elliott> sheesh
00:36:51 <Sgeo_> "kgsGtp versions 3.3.12 and later, at least up to 3.3.20, have a bug that makes them babble a debug line, "ACTION IS TO MOVE OR SCORE", over and over while playing. Keep using version 3.3.11. You don't believe that any programmer worth his salt would keep the stupidest possible bug in his program over 10 versions? Check for yourself, if you don't believe me. Apparently programming go software has some pretty bad side effects on the brain."
00:36:53 <elliott> you'd think `` would take precemadance
00:36:57 <tswett> You would.
00:37:06 <elliott> haskell _really_ needs to integrate - into the language syntax :P
00:37:11 <elliott> it's just so stupid as it is
00:37:14 <elliott> (- 3) should be (subtract 3)
00:37:35 <elliott> olsner: my machine just lagged to hell, i surmise that i fucked something up
00:37:49 <olsner> elliott: I concur
00:37:50 <elliott> oh duh
00:38:18 <elliott> come on buttsbutts!
00:38:52 <elliott> i think it's a forkbomb or something
00:39:02 <elliott> even though that - *oh*
00:39:02 <elliott> lol
00:39:06 <elliott> for (i = 0; i < nprocs; i++)
00:39:06 <elliott> spawn(argv[i], i);
00:39:08 <elliott> olsner: spot the awesome error
00:39:37 <augur> elliott: define a function count_ones that takes an integer to the number of 1s in the integer's binary representation
00:39:46 <elliott> augur: see bit twiddling hacks page :P
00:39:53 <augur> what
00:40:07 <elliott> http://www-graphics.stanford.edu/~seander/bithacks.html#CountBitsSetNaive
00:40:09 <elliott> and all the methods below
00:40:17 <Ilari> Heh... Hit a IPv6-only site. Chinese so no idea what it says...
00:40:27 <augur> oh interesting
00:40:48 <augur> elliott: i didnt realize it was a thing
00:40:52 <elliott> it is :P
00:40:55 <elliott> it's a thing thing
00:41:00 <augur> how weird!
00:41:04 <augur> well i did one in ruby
00:41:06 <elliott> i dunno if it's actually useful
00:41:23 <augur> def count_ones n; n.to_s(2).gsub(/0/,'').length; end
00:41:48 <elliott> olsner: maybe i should have an option to specify the shell to use
00:41:49 <augur> a friend has a shorter but slower version that has scan(/1/) in place of the gsub
00:41:52 <elliott> rather than just always using sh
00:42:00 <elliott> augur: oh please, that doesn't even count it properly
00:42:04 <elliott> that just uses a function that does all the work for you to do it
00:42:05 <augur> elliott: what?
00:42:11 <augur> oh well true :)
00:42:14 <elliott> that's not even cheating, that's just... :P
00:42:23 <augur> its just elegant, short, simple, beautiful
00:42:24 <augur> ;)
00:42:29 <elliott> beautiful?
00:42:30 <elliott> hardly
00:42:32 <elliott> there's no reason to involve strings
00:42:33 <augur> true x3
00:42:38 <augur> i know
00:42:40 <elliott> also you have /0/ when it could be '0'
00:42:43 <elliott> YOUR CODE IS BAD AND YOU ARE BAD
00:42:53 <augur> gsub just converts '0' to /0/
00:42:53 <elliott> augur: here's a better version of the same evil
00:43:05 <elliott> def count_ones n; n.to_s(2).count('1'); end
00:43:12 <augur> no really?
00:43:23 <augur> fantastic!
00:43:47 <olsner> elliott: awesome bug
00:43:53 <elliott> olsner: it is, totally
00:43:57 <elliott> accidental forkbombs: the best forkbombs?
00:44:19 <olsner> elliott: can't you just plug in your custom shell by having e.g. 'zsh -c foo' as a command?
00:44:33 <elliott> olsner: well yeah, but then you need an extra level of quoting
00:44:42 <olsner> so? :)
00:45:00 <elliott> also, dammit, it's 48 lines, and will be about 53 when i add more error checking, I can afford _one_ flag!
00:45:38 <elliott> if (!strcmp(argv[1], "-s") && argc > 2) { shell = argv[2]; argc -= 2; }
00:45:41 <augur> elliott: i want to see the haskell version, but apparently there is no standard to-binary function :(
00:45:53 <elliott> augur: but there is Data.Bits
00:45:56 <elliott> so you can do it _properly_
00:45:58 <elliott> the Kernighan way for instance
00:46:02 <elliott> also, there's
00:46:03 <elliott> :t showBase
00:46:03 <augur> ;)
00:46:03 <lambdabot> Not in scope: `showBase'
00:46:04 <elliott> or whatever it was
00:46:08 <olsner> there's a SHELL environment variable (on my system), I wonder if that's portable and meant to indicate the preferred shell
00:47:46 <elliott> olsner: i think it just indicates the shell you're running
00:47:50 <augur> elliott: ideally you'd just use the integer's binary representation directly
00:47:54 <augur> as an inplace bit array
00:47:58 <elliott> olsner: also, having "SHELL=foo ./myprog" fuck it up because myprog uses catbus sounds "nice"
00:48:21 <elliott> augur: seriously, look at Data.Bits
00:48:21 <augur> n.bits.count(1)
00:48:35 <elliott> oh, in ruby
00:48:35 <elliott> whatever
00:48:35 <augur> thatll take too long
00:48:40 <augur> elliott: in anything, i mean
00:48:46 <elliott> http://hackage.haskell.org/packages/archive/base/4.2.0.0/doc/html/Data-Bits.html
00:48:56 <elliott> it has &, so you can do the kernighan method easy
00:49:00 <Sgeo_> http://senseis.xmp.net/?FreeGo ....ok, random .NET debate in the middle of a Go website
00:49:11 <augur> elliott: no certainly.
00:49:43 <Sgeo_> " And for most things, we should be using C anyway. Object orientation takes one away from the machine even if computers are now fast enough to overwhelm that. Computers are not object oriented, they are imperitive, so we should, when it makes sense, write that way."
00:49:51 <elliott> > let count 0 = 0; count n = (n .&. 1) + count (n `shiftR` 1) in count 0b0110
00:49:52 <lambdabot> Not in scope: `b0110'
00:49:54 <elliott> grr
00:50:04 <elliott> > let count 0 = 0; count n = (n .&. 1) + count (n `shiftR` 1) in count 54
00:50:05 <lambdabot> Ambiguous type variable `a' in the constraint:
00:50:05 <lambdabot> `Data.Bits.Bits a'
00:50:05 <lambdabot> a...
00:50:09 <elliott> > let count 0 = 0; count n = (n .&. 1) + count (n `shiftR` 1) in count (54 :: Int)
00:50:10 <lambdabot> 4
00:50:14 <elliott> tada!
00:50:16 <elliott> augur: done.
00:50:22 <augur> D:
00:50:28 <elliott> copumpkin gets to point-free it
00:50:34 <elliott> :t zero
00:50:35 <lambdabot> Not in scope: `zero'
00:50:35 <copumpkin> pff
00:50:36 <copumpkin> fuck that
00:50:42 <augur> :pl let count 0 = 0; count n = (n .&. 1) + count (n `shiftR` 1) in count (54 :: Int)
00:50:45 <augur> er
00:50:46 <elliott> augur: fail
00:50:48 <elliott> @pl \n -> if n==0 then 0 else (n .&. 1) + count (n `shiftR` 1)
00:50:48 <lambdabot> ap (flip if' 0 . (0 ==)) (liftM2 (+) (.&. 1) (count . (`shiftR` 1)))
00:50:48 <augur> @pl let count 0 = 0; count n = (n .&. 1) + count (n `shiftR` 1) in count (54 :: Int)
00:50:48 <lambdabot> 54 :: Int .&. 1 + (54 :: Int) (54 :: Int `shiftR` 1)
00:50:52 <copumpkin> what are you trying to do, anyway?
00:50:59 <augur> copumpkin: count bits!
00:50:59 <elliott> copumpkin: count set bits
00:51:11 * elliott tries it kernighan's way
00:51:29 <elliott> > let count 0 = 0; count n = 1 + count (v .&. (v-1))
00:51:30 <lambdabot> not an expression: `let count 0 = 0; count n = 1 + count (v .&. (v-1))'
00:51:36 <elliott> > let count 0 = 0; count n = 1 + count (v .&. (v-1)) in count (54::Int)
00:51:36 <lambdabot> Couldn't match expected type `SimpleReflect.Expr'
00:51:37 <lambdabot> against inferred ...
00:51:39 <elliott> o_O
00:51:40 <elliott> oh
00:51:41 <copumpkin> elliott: oh I wrote something for that the other day
00:51:45 <elliott> > let count 0 = 0; count n = 1 + count (n .&. (n-1)) in count (54::Int)
00:51:46 <augur> this is so much easy in peano numerals
00:51:46 <lambdabot> 4
00:51:49 <elliott> tada!
00:51:52 <augur> numSuccs = id
00:51:55 <elliott> "Brian Kernighan's method goes through as many iterations as there are set bits. So if we have a 32-bit word with only the high bit set, then it will only go once through the loop."
00:52:03 <elliott> "Published in 1988, the C Programming Language 2nd Ed. (by Brian W. Kernighan and Dennis M. Ritchie) mentions this in exercise 2-9. On April 19, 2006 Don Knuth pointed out to me that this method "was first published by Peter Wegner in CACM 3 (1960), 322. (Also discovered independently by Derrick Lehmer and published in 1964 in a book edited by Beckenbach.)"
00:52:08 <elliott> so yeah i pretty much WIN?
00:52:24 <elliott> @hoogle a -> (a -> a) -> Int -> a
00:52:24 <lambdabot> Data.Sequence adjust :: (a -> a) -> Int -> Seq a -> Seq a
00:52:24 <lambdabot> Data.IntMap adjust :: (a -> a) -> Key -> IntMap a -> IntMap a
00:52:24 <lambdabot> Prelude maybe :: b -> (a -> b) -> Maybe a -> b
00:52:27 <elliott> hey copumpkin
00:52:32 <copumpkin> hey babe
00:52:33 <olsner> hmm, I think you can do the whole catbus thing in a shell with something like, mkfifo foo; (a | b | c) <>foo
00:52:35 <elliott> why does haskell not come with the induction combinator for naturals
00:52:38 <elliott> is it because it's a fag?
00:52:40 <copumpkin> yep
00:52:44 <elliott> olsner: that requires a fifo though
00:52:47 <elliott> and is ugly
00:52:52 <augur> elliott: whatchu mean induction combinator
00:52:55 <augur> i dont know this
00:52:57 <augur> explain?
00:53:02 <elliott> augur: compare:
00:53:13 <elliott> P(0) -> (forall n, P(n) -> P(Sn)) -> forall n, P(n)
00:53:15 <elliott> over the naturals
00:53:16 <elliott> AND
00:53:27 <elliott> a -> (a -> a) -> Int -> a
00:53:30 <elliott> where the impl is
00:53:49 <elliott> rec x _ 0 = x; rec x f n = f (rec x f (n-1))
00:53:57 <augur> uh?
00:54:36 <elliott> copumpkin: you school him
00:54:43 <olsner> hmm, I never got how and why v & (v-1) does useful stuff... I should figure that out some day
00:54:57 <iconmaster> Quick question about Underload: In stack notation, does the * command go like s2 s1 -> s2&s1, or s2 s1 -> s1&s2 ?
00:55:01 <elliott> olsner: v &= v-1 clears the least significant bit
00:55:06 <elliott> iconmaster: (a)(b)* === (ab)
00:55:16 <iconmaster> elliott: thanks!
00:55:22 <elliott> yw :)
00:55:23 <elliott> hmm
00:55:31 <olsner> hmm, shouldn't it be most significant?
00:55:41 <elliott> olsner: I doubt it
00:55:43 <augur> copumpkin always schools me
00:55:48 <elliott> olsner: bit twiddling hacks page is infallible
00:55:48 <augur> its pretty hot.. ;o
00:56:03 <elliott> come on buttsbutts!
00:56:05 <elliott> you can do it!
00:56:16 <olsner> hmm, v and v-1 will always differ in the LSB
00:56:26 <elliott> IT ISN'T WORKING WHY ISN'T IT WORKING
00:56:50 <iconmaster> Darn- my Lua Underload interpreter isn't running the Fibbonchi series program, and I thoght the * might of been a problem
00:57:04 <elliott> iconmaster: show code :)
00:57:10 <iconmaster> k
00:57:17 <augur> so theres t-grep, right
00:57:21 <iconmaster> stack = {}
00:57:21 <iconmaster> tape = {}
00:57:21 <iconmaster> ptr = 1
00:57:21 -!- iconmaster has quit (Excess Flood).
00:57:24 <elliott> FAIL
00:57:27 <augur> which is pretty painful to use but it exists
00:57:31 <augur> is there t-diff?
00:57:31 <elliott> augur: eh?
00:57:34 <elliott> what's t-grep
00:57:40 -!- iconmaster has joined.
00:57:41 <augur> tgrep: grep for trees
00:57:43 <elliott> iconmaster: use a pastebin :P
00:57:45 <iconmaster> whoops lol
00:57:49 <elliott> iconmaster: e.g. pastebin.com
00:57:53 <iconmaster> thx
00:57:54 <elliott> olsner: anyway while you can do catbus with a sufficiently bloated shell, you can also do tee
00:58:01 <elliott> olsner: and catbus is a pipe fitter in the same grand ol' Unixy tradition
00:58:06 <augur> usually trees in s-expression notation
00:58:10 <elliott> olsner: wonderfully, the name actually makes sense :)
00:58:11 <elliott> well
00:58:14 <elliott> "bus" would make sense
00:58:20 <elliott> but technically it's catting between the pipes
00:58:22 <elliott> so it's catbus!
00:58:34 <elliott> augur: t-diff might make use of zippers :D
00:58:43 <augur> maybe!
00:58:43 <olsner> and also there's a catbus in the famous anime movie
00:58:50 <elliott> olsner: no shit
00:58:52 <elliott> how do you think it was named
00:58:56 <elliott> (the tool that is)
00:59:04 <elliott> catbus reference -> OMG IT ACTUALLY FITS -> perfect
00:59:13 <olsner> exactly :)
00:59:45 <elliott> now all i have to do is finish it, give it a 90s-style unformatted web page, and put the catbus right-aligned
00:59:47 <elliott> like the cool kids do
01:00:00 <iconmaster> ok im back and with a pastebin! http://pastebin.com/EHDf7gME
01:00:08 <olsner> anyway it's obviously more fun doing it in C, plus a fifo is actually a bit ugly when you just need the pipe object itself
01:00:16 <elliott> iconmaster: what do you mean back, do you close your irc client every time you tab away? :p
01:00:31 <elliott> iconmaster: what does "io.read("*l")" do?
01:00:33 <elliott> the *l part
01:00:46 <iconmaster> elliott: no, itjust closed me for flooding
01:00:50 <elliott> elseif char == ":" then
01:00:50 <elliott> table.insert(stack,stack[#stack])
01:00:54 <elliott> shouldn't it be stack[0] there?
01:01:02 <elliott> or does table.remove remove from the end?
01:01:09 <iconmaster> lists are 1-based...
01:01:13 <elliott> er right [1]
01:01:19 <elliott> iconmaster: s and A aren't valid underload commands, it's not case-insensitive
01:01:22 <iconmaster> remove removes ti from end
01:01:32 <iconmaster> ok ill fix s amd a
01:01:41 <elliott> hmm, can't see an obvious mistake
01:01:49 <iconmaster> me niether.... lol
01:01:52 <elliott> elseif char == "^" then
01:01:52 <elliott> newprog = table.remove(stack)
01:01:52 <elliott> for i=1,#newprog do
01:01:52 <elliott> table.insert(tape,ptr + i,string.sub(newprog,i,i))
01:01:52 <elliott> end
01:01:54 <elliott> wait what?
01:02:04 <elliott> ^ inserts the top of stack into the program
01:02:05 <elliott> i.e.
01:02:17 <elliott> (abc)(def)*^blah -> (abcdef)^blah -> abcdefblah
01:02:20 <iconmaster> i did that lol
01:02:24 <elliott> oh indeed
01:02:27 <elliott> but what's with the for loop there?
01:02:29 <iconmaster> OH! i know whats wrong
01:02:49 <iconmaster> i needed to insert each character into the program individually
01:03:19 <iconmaster> but if i just did table.insert(tape,ptr,string.sub(newprog,i,i)) it would put it in the program in reverse
01:03:32 <iconmaster> but table.insert(tape,ptr + i,string.sub(newprog,i,i)) wont work either
01:03:37 <elliott> iconmaster: can't you just do
01:03:42 <elliott> program = program .. table.remove(stack)
01:04:04 <iconmaster> that would append the program on the END of the tape
01:04:09 <iconmaster> not at the ^
01:04:15 <elliott> oh. right.
01:04:27 <iconmaster> the program itself is a list of characters, remember
01:04:29 <elliott> iconmaster: i would remove the first char of the program whenever you execute it
01:04:31 <elliott> then you could do
01:04:34 <elliott> program = table.remove(stack) .. program
01:04:47 <iconmaster> sure... that would be more effiecent.
01:04:56 <iconmaster> OK then, on to rewriting!
01:04:58 <elliott> also less error-prone
01:05:00 <elliott> :P
01:05:11 <elliott> olsner: wow, stracing this is a real mess
01:07:07 <olsner> how shocking
01:07:09 <elliott> ok, nc isn't getting the input, but hello is
01:07:19 <elliott> elliott@elliott-MacBookAir:~/Code/catbus$ ./catbus 'tee /dev/fd/2 | nc irc.freenode.net 6667' './hello'
01:07:19 <elliott> ^C
01:07:19 <elliott> elliott@elliott-MacBookAir:~/Code/catbus$ ./catbus 'nc irc.freenode.net 6667' 'tee /dev/fd/2 | ./hello'
01:07:19 <elliott> :holmes.freenode.net NOTICE * :*** Looking up your hostname...
01:07:19 <elliott> :holmes.freenode.net NOTICE * :*** Checking Ident
01:10:53 <elliott> ok so i=1
01:10:59 <elliott> 1 ? 0 : 1
01:11:00 <elliott> --> 0
01:11:04 <elliott> pipes[0][0] -> stdin
01:11:06 <elliott> olsner: 0 is the reading end right?
01:11:08 <elliott> i believe so
01:11:08 <elliott> and then
01:11:15 <elliott> pipes[1][1] -> stdout
01:11:18 <elliott> that seems... totally correct
01:11:19 <elliott> oops
01:11:20 <elliott> bug
01:11:21 <elliott> but not a relevant one
01:13:05 <iconmaster> Just had a realization- Putting new symbols after the ^ is the same as recursion, all I need to do is to share a few variables
01:13:11 <elliott> iconmaster: yep
01:13:15 <elliott> switch (fork()) {
01:13:15 <elliott> case 0:
01:13:15 <elliott> if (dup2(pipes[i ? i-1 : nprocs-1][0], 0) < 0 ||
01:13:15 <elliott> dup2(pipes[i][1], 1) < 0) {
01:13:16 <elliott> perror("dup2");
01:13:18 <elliott> exit(3);
01:13:22 <elliott> }
01:13:25 <elliott> olsner: does that look broken to you?
01:14:28 <olsner> not that I know :) 'i' goes from 0 to nprocs-1 right?
01:15:00 <elliott> olsner: yep
01:15:10 <elliott> for (i = 0; i < nprocs; i++)
01:15:10 <elliott> if (pipe(pipes[i]) < 0) {
01:15:10 <elliott> perror("pipe");
01:15:10 <elliott> exit(3);
01:15:10 <elliott> }
01:15:11 <elliott> for (i = 1; i < argc; i++)
01:15:13 <elliott> spawn(argv[i], i-1);
01:15:16 <elliott> (second loop is for argc to simplify logic after I got confused)
01:15:23 <elliott> *is over
01:15:49 -!- Lymia_ has joined.
01:15:58 -!- Lymia has quit (Disconnected by services).
01:16:24 <elliott> olsner: Do you suspect gremlins? I sure do.
01:16:32 <elliott> nprocs is set to argc, btw.
01:16:33 <elliott> Wait...
01:16:39 <elliott> It should be argc-1.
01:16:39 <elliott> >_<
01:16:46 <olsner> ha
01:17:12 <elliott> yay, it works now
01:17:15 -!- buttsbutts has joined.
01:17:15 <buttsbutts> :holmes.freenode.net NOTICE * :*** Looking up your hostname...
01:17:15 <buttsbutts> :holmes.freenode.net NOTICE * :*** Checking Ident
01:17:17 <buttsbutts> :holmes.freenode.net NOTICE * :*** Couldn't look up your hostname
01:17:19 <buttsbutts> :holmes.freenode.net NOTICE * :*** No Ident response
01:17:19 <elliott> I love you too, buttsbutts.
01:17:20 -!- buttsbutts has quit (Remote host closed the connection).
01:17:39 -!- buttsbutts has joined.
01:17:39 <buttsbutts> :holmes.freenode.net NOTICE * :*** Looking up your hostname...
01:17:39 <buttsbutts> :holmes.freenode.net NOTICE * :*** Checking Ident
01:17:41 <buttsbutts> :holmes.freenode.net NOTICE * :*** Couldn't look up your hostname
01:17:43 <buttsbutts> :holmes.freenode.net NOTICE * :*** No Ident response
01:17:45 <buttsbutts> :holmes.freenode.net 001 buttsbutts :Welcome to the freenode Internet Relay Chat Network buttsbutts
01:17:47 <buttsbutts> :holmes.freenode.net 002 buttsbutts :Your host is holmes.freenode.net[213.232.93.3/6667], running version ircd-seven-1.0.3
01:17:49 <buttsbutts> :holmes.freenode.net 003 buttsbutts :This server was created Tue Feb 23 2010 at 23:01:30 GMT
01:17:51 -!- buttsbutts has quit (Remote host closed the connection).
01:18:07 <elliott> olsner: hmm, I think that "catbus a b c d" is actually the same as "catbus a <(b|c|d)"
01:18:11 <elliott> I don't think that's right
01:18:33 <elliott> olsner: I think that possibly my original interpretation at http://esoteric.voxelperfect.net/wiki/User_talk:Chris_Pressey#catbus is what was intended
01:20:37 <elliott> 13:40:20 <cpressey> polycat: run a set of programs and pipe all their outputs together to all their inputs
01:20:38 <olsner> hmm, that sounds a bit different from the simple ring of processes
01:20:39 <elliott> olsner: HA
01:20:41 <elliott> olsner: I WAS RIGHT
01:20:48 <elliott> i...think
01:20:50 <elliott> that's still ambiguous >_<
01:22:32 <iconmaster> Woot! I got the interpreter to work!
01:22:40 <elliott> yay! i got catbus to work!
01:22:42 <elliott> we're all happy!
01:22:54 <elliott> olsner: in the mood to GOLF?
01:22:57 <elliott> you should totally golf catbus.
01:22:58 <iconmaster> Thanks! I'll pastebin it in a second.
01:23:28 <iconmaster> http://pastebin.com/rKsCwUgK
01:23:43 <olsner> elliott: I decided I don't like golfing after my last attempts failed to be immediately awesome
01:23:51 <elliott> iconmaster: how fast does it run the look and say? :P
01:24:01 <iconmaster> idk lemme try it
01:25:07 <elliott> olsner: not that golfing it would be too difficult, it's already pretty darn short: http://sprunge.us/SfZL
01:25:45 <olsner> well, first step would be to remove all error checking obviously :)
01:26:23 <elliott> err that has one argument swapped
01:26:24 <elliott> but whatever
01:26:46 <elliott> olsner: int n,p[256][2];s(char*c,int i){... :P
01:27:06 * elliott considers dynamically allocating pipes, for all those >256 command pipelines.
01:27:08 <olsner> you don't need n, you can just reuse argc and inline spawn into main
01:27:29 <elliott> olsner: oh indeed
01:27:36 <iconmaster> say, is look-and-say sequence SUPPOSED to print 2113 forever?
01:27:50 <olsner> and you can just allocate a few million pipes and let lazy allocation fix it
01:27:52 <elliott> iconmaster: I ... don't believe so. I think that happens if your * is the wrong way around.
01:27:57 <elliott> olsner: ah yes, Lazy C.
01:28:05 <iconmaster> OLOL. thanks, leme fix it.
01:28:05 <elliott> the language of choice for true masochists.
01:28:30 <olsner> well, zeroed pages that get lazily mapped as you use them
01:29:23 <elliott> int i,p[256][2];main(c,v){for(i=1;i<c;i++)pipe(pipes[i-1]);for(i=1;i<c;i++)SPAWNHERE(i-1,argv[i]);for(;wait(NULL)>0;);}
01:29:45 <iconmaster> it printed two commas, waited for a looooooong time, and then halted.
01:30:03 <iconmaster> Methinks something wrong with my implementation
01:30:32 <elliott> int i,p[256][2];main(c,v){for(i=1;i<c;i++)pipe(pipes[i-1]);for(i=1;i<c;i++){if(!fork()){dup2(pipes[i-1?i-2:c-2][0],0);dup2(pipes[i-1][1],1);execlp("sh","","-c",argv[i],NULL);}};for(;wait(NULL)>0;);}
01:30:41 <elliott> int i,p[256][2];main(c,v){for(i=1;i<c;i++)pipe(pipes[i-1]);for(i=1;i<c;i++)if(!fork()){dup2(pipes[i-1?i-2:c-2][0],0);dup2(pipes[i-1][1],1);execlp("sh","","-c",argv[i],NULL);};for(;wait(NULL)>0;);}
01:30:44 <elliott> olsner: oh yeah
01:30:57 <elliott> oh wait
01:30:58 <elliott> "pipes"
01:30:58 <olsner> in practice you
01:31:07 <elliott> int i,p[256][2];main(c,v){for(i=1;i<c;i++)pipe(p[i-1]);for(i=1;i<c;i++)if(!fork()){dup2(p[i-1?i-2:c-2][0],0);dup2(p[i-1][1],1);execlp("sh","","-c",argv[i],NULL);};for(;wait(NULL)>0;);}
01:31:10 <elliott> olsner: ?
01:31:12 <olsner> you'll be limited by the maximum command line length
01:31:23 <elliott> int i,p[256][2];main(c,v){for(i=1;i<c;i++)pipe(p[i-1]);for(i=1;i<c;i++)if(!fork()){dup2(p[i-1?i-2:c-2][0],0);dup2(p[i-1][1],1);execlp("sh","","-c",v[i],NULL);};for(;wait(NULL)>0;);}
01:31:28 <elliott> skillz.
01:31:35 <olsner> (just switched to a keyboard with enter where ' used to be)
01:31:49 <elliott> int i,p[256][2];main(c,v){for(i=1;i<c;i++)pipe(p[i-1]);for(i=1;i<c;i++)if(!fork()){dup2(p[i-1?i-2:c-2][0],0);dup2(p[i-1][1],1);execlp("sh","","-c",v[i],0);};for(;wait(0)>0;);}
01:31:50 <Lymia_> `run echo fork while fork | perl
01:31:56 -!- Lymia_ has changed nick to Lymia.
01:31:57 -!- Lymia has quit (Changing host).
01:31:57 -!- Lymia has joined.
01:32:00 <elliott> Lymia: that won't work.
01:32:06 <Lymia> Don't expect it to.
01:32:06 <Lymia> =p
01:32:14 <elliott> olsner: that was 175 chars
01:32:17 <elliott> :D
01:32:20 <elliott> NOT BAD
01:32:31 <Lymia> Are you....
01:32:34 <Lymia> Golfing C
01:32:35 <Lymia> ?
01:33:22 <Lymia> elliott, is that what you're doing?
01:33:28 <elliott> Well, I was there.
01:33:40 <elliott> I have a rather less compact version here that's actually useful :P
01:34:56 <elliott> olsner: oh man
01:35:07 <elliott> olsner: $ catbus '(echo y; cat) | tee x'
01:35:10 <elliott> olsner: same as yes >x
01:35:15 <elliott> beautiful, or beautiful???
01:35:29 <elliott> full implementation of yes:
01:35:37 <elliott> $ catbus '(echo y; cat) | tee /dev/fd/2' 2>&1
01:35:46 <olsner> could change i to 0-based since you're using i-1 more often than i, save a couple of bytes
01:35:47 <elliott> olsner: it's like Haskell's fix :)
01:35:54 <elliott> also, maybe :P
01:36:05 <Deewiant> elliott: int i,p[256][2];main(c,v){--c;for(;i<c;i++)pipe(p[i]);for(i=0;i<c;i++)if(!fork()){dup2(*p[i?i-1:c-1],0);dup2(p[i][1],1);execlp("sh","","-c",v[i+1],0);};while(wait(0)>0);} ?
01:36:05 <olsner> and then do the equivalent of c+i%c-1
01:36:32 <elliott> Deewiant: Is it OK if I'm scared of you?
01:36:33 <olsner> plus/minus 0, 1 or 2 to get it right, of course
01:36:41 <Deewiant> elliott: Sure, works for me
01:36:52 <elliott> Deewiant: No, I don't think you understand: I'm *really* scared of you.
01:36:58 <Deewiant> elliott: Sure, works for me
01:37:13 <elliott> Deewiant: int i,p[256][2];main(c,v){for(c--;i<c;i++)pipe(p[i]);for(i=0;i<c;i++)if(!fork()){dup2(*p[i?i-1:c-1],0);dup2(p[i][1],1);execlp("sh","","-c",v[i+1],0);};while(wait(0)>0);}
01:37:14 <elliott> Saved a character.
01:37:16 <elliott> You're very welcome.
01:37:25 <elliott> Man, that program is insanely short.
01:38:24 <elliott> olsner: hmm isn't there some limts.h thing for max argc?
01:38:34 <elliott> not limits.h
01:38:42 <elliott> ARG_MAX
01:39:24 <elliott> [[When looking at ARG_MAX/NCARGS, you have to consider the space comsumption by both argv[] and envp[] (arguments and environment).
01:39:24 <elliott> Thus you have to decrease ARG_MAX at least by the results of "env|wc -c" and "env|wc -l * 4" [3] for a good estimation of the currently available space.]]
01:39:56 <elliott> olsner: fuck that, I'll just pick a sufficiently large value
01:40:57 <olsner> 256 seems sufficiently large already
01:41:27 <elliott> olsner: prolly... but I should add a check for max argc then
01:41:38 <elliott> olsner: and writing those few lines to error out is just as much work as making it dynamically allocated
01:41:41 <elliott> so it feels bad
01:41:52 <elliott> olsner: ofc, this has to be balanced against the additional /complexity/ that malloc gives...
01:42:20 <elliott> I'll compensate by removing useless error-checking :)
01:42:25 <elliott> EFAULT pipefd is not valid.
01:42:25 <elliott> EINVAL (pipe2()) Invalid value in flags.
01:42:25 <elliott> EMFILE Too many file descriptors are in use by the process.
01:42:25 <elliott> ENFILE The system limit on the total number of open files has been
01:42:25 <elliott> reached.
01:42:29 <elliott> OK, so pipe() will never fail, probably
01:42:50 <elliott> $ cat /proc/sys/fs/file-max
01:42:50 <elliott> 367911
01:42:50 <elliott> indeed
01:43:27 <elliott> dup2 can't fail in any reasonable way either... apart from being interrupted by a signal, but fuck that.
01:43:55 <elliott> fork() can't fail other than being out of memory or forking too much. won't happen.
01:44:04 <olsner> "note that catbus does not print error messages. if it fails, use strace to determine the nature of the failure."
01:44:27 <elliott> olsner: The kind of argument list you'd need to cause a failure in dup2 or fork wouldn't fit in any system's argument list :P
01:44:41 -!- cheater- has quit (Ping timeout: 240 seconds).
01:45:02 <elliott> yay, it's shorter now
01:45:09 <elliott> ooh, I can replace my
01:45:12 <elliott> if (!fork()) { entire function }
01:45:13 <elliott> with
01:45:15 <elliott> if (fork()) return;
01:45:16 <olsner> if I get there, I will make my OS have no silly limits like that, it'll just be limited by available memory
01:45:24 <Deewiant> elliott: Saved another: int i,p[512];main(c,v){for(--c;i<c;i++)pipe(p[i]);for(i=0;i<c;i++)if(!fork()){dup2(p[2*(i?i:c)-1],0);dup2(p[i*2+1],1);execlp("sh","","-c",v[i+1],0);};while(wait(0)>0);}
01:45:33 <elliott> olsner: well in this case fork() can fail only when running out of memory or due to a ulimit
01:45:42 -!- cheater- has joined.
01:45:44 <elliott> ulimit, well, shit's gonna fail, obviously, that's why you set it
01:45:54 <olsner> I meant for the argument list
01:45:57 <elliott> olsner: right
01:46:17 <elliott> olsner: if the arglist will fit into memory, and the fds are only limited by available memory too (as they would be for you), then this program will never fail unless you fill up memory with arguments :P
01:46:18 <elliott> Deewiant: Nice.
01:46:39 <elliott> olsner: hmm, I think I can interleave pipe creation with spawning
01:46:40 <elliott> oh, wait, no
01:46:41 <elliott> never mind
01:46:47 <elliott> well, not sanely anyway
01:47:00 <Deewiant> elliott: My bad, that should be )-2, not )-1
01:47:01 <olsner> I did think about reusing argv storage for the pipes
01:47:10 <elliott> olsner: lol
01:47:18 <elliott> Deewiant: do what olsner said :D
01:47:21 <olsner> or making it recursive
01:47:34 <elliott> woo, the only way wait can fail is ECHILD, which is what I want, or EINTR/EINVAL
01:47:36 <elliott> latter obviously doesn't apply
01:47:40 <olsner> stack limits are pretty low, but it does get dynamically allocated
01:47:43 <elliott> and I didn't handle EINTR anyway
01:48:00 <elliott> 39 lines, awesome
01:48:08 <elliott> catbus.c:32: warning: ignoring return value of ‘pipe’, declared with attribute warn_unused_result
01:48:10 <elliott> but why...
01:48:18 <elliott> EFAULT pipefd is not valid.
01:48:19 <elliott> EINVAL (pipe2()) Invalid value in flags.
01:48:19 <elliott> EMFILE Too many file descriptors are in use by the process.
01:48:19 <elliott> ENFILE The system limit on the total number of open files has been reached.
01:48:28 <elliott> come on, that's not even remotely worth checking :P
01:49:48 <elliott> olsner: actually, (catbus prog) is basically the direct analogy of (fix f) in haskell
01:49:58 <elliott> (catbus cat) hangs, just like (fix id) does
01:50:07 <olsner> yep, if piping is function composition then catbus is fix
01:50:18 <elliott> (catbus '(echo y; cat) | tee x') is fix ("y\n" ++)
01:50:19 <elliott> like er
01:50:35 <olsner> not exactly of course, but close enough for analogy
01:50:40 <elliott> fix (\foo -> ("y\n" ++ foo) ... tee stuff doesn't apply here)
01:50:43 <elliott> olsner: yeah
01:50:51 <elliott> olsner: Oleg implemented a shell with monads/composition, I think
01:50:57 <elliott> I bet there, the analogy applies directly
01:51:03 <copumpkin> > fix (interleave [0..])
01:51:04 <lambdabot> [0,0,1,0,2,1,3,0,4,2,5,1,6,3,7,0,8,4,9,2,10,5,11,1,12,6,13,3,14,7,15,0,16,8...
01:51:19 <elliott> copumpkin: heh, what :)
01:51:56 <augur> copumpkin: beautiful...
01:52:07 <copumpkin> @oeis 0,0,1,0,2,1,3,0,4,2,5,1,6,3,7,0,8,4,9,2,10,5,11,1,12,6,13,3,14,7,15,0,16
01:52:10 <lambdabot> a(2n) = n, a(2n+1) = a(n).
01:52:10 <lambdabot> [0,0,1,0,2,1,3,0,4,2,5,1,6,3,7,0,8,4,9,2,10,5,11,1,12,6,13,3,14,7,15,0,16,8,...
01:52:55 <augur> copumpkin: thats so nifty
01:53:00 <augur> so beautiful
01:53:11 <augur> the visual of it..
01:53:14 <elliott> i would hit that
01:53:17 * augur hugs copumpkin
01:53:20 <augur> T_T
01:53:24 <elliott> yeah copumpkin
01:53:27 <elliott> augur needs some of your SCHOOLING
01:53:41 <elliott> !c printf("%d\n", 0 || 23);
01:53:46 <elliott> !c printf("%d\n", 0 || 0);
01:53:58 <elliott> hey olsner
01:54:02 <elliott> while (wait(&st) != -1)
01:54:07 <elliott> if (WEXITSTATUS(st) != 0)
01:54:10 <elliott> ret = 1;
01:54:12 <elliott> COMPARE WITH
01:54:12 <EgoBot> 0
01:54:13 <EgoBot> 1
01:54:21 <elliott> while (wait(&st) != -1)
01:54:23 <augur> copumpkin: who the fuck discovered that
01:54:23 <copumpkin> lol
01:54:27 <elliott> ret ||= WEXITSTATUS(st);
01:54:29 <elliott> !c printf("%d\n", 0 || 23);
01:54:30 <elliott> BEAUTIFUL
01:54:32 <elliott> OR BEAUTIFUL OLSNER
01:54:34 <elliott> actually
01:54:36 <elliott> it might be &&=
01:54:39 <copumpkin> augur: I saw Cale write it in #haskell a while back
01:54:47 <augur> damn cale
01:54:50 <EgoBot> 1
01:54:52 <elliott> nope
01:54:54 <elliott> it's ||=
01:55:00 <olsner> yeah, I think you want to fail if any child fails
01:55:05 <elliott> olsner: i already do
01:55:06 <elliott> but i turned
01:55:09 <elliott> if (x != 0) ret = 1;
01:55:10 <elliott> into
01:55:11 <elliott> ret ||= x;
01:55:19 <elliott> now my program has only ONE LEVEL OF NESTING
01:55:23 <olsner> NICE
01:55:24 <Deewiant> What language has ||=?
01:55:27 <elliott> Deewiant: C
01:55:30 <elliott> wait
01:55:31 <elliott> c doesn't
01:55:31 <Deewiant> No
01:55:31 <elliott> omg
01:55:33 <elliott> that's the worst
01:55:34 <augur> Deewiant: lots of them
01:55:35 <elliott> why is c the worst?
01:55:42 <Deewiant> You can use |=.
01:55:48 <elliott> Deewiant: not if WEXITSTATUS(st) > 1
01:56:03 <elliott> although, the exit status having all the set bits of all the statuses is cool
01:56:04 <Deewiant> Do you need it to be exactly one? :-P
01:56:06 <elliott> i.e. st1 | st2 | st3 ...
01:56:09 <olsner> return !!res then, if you must
01:56:17 <elliott> Deewiant: Well, 2 is used for "usage error" and 3 for "catbus error".
01:56:32 <elliott> olsner: or I could just do
01:56:34 <Deewiant> ret = x?1:ret;
01:56:38 <elliott> ret = ret || WEXITSTATUS(st);
01:56:47 <elliott> Deewiant: hey, that's even not incomprehensible
01:56:48 <elliott> I'll take it
01:57:12 <elliott> http://sprunge.us/FCLO
01:57:16 <elliott> wonderful
01:58:51 <elliott> I wish modulo in C behaved well though
02:01:55 <elliott> olsner: hmm, can you recover stderr after duping it away?
02:02:00 <elliott> dup2(pipes[i ? i-1 : nprocs-1][0], 0);
02:02:00 <elliott> dup2(pipes[i][1], 1);
02:02:00 <elliott> execlp(shell, shell, "-c", cmd, NULL);
02:02:00 <elliott> perror("execl");
02:02:03 <elliott> the perror goes to a black hole as it is
02:02:05 <elliott> wait
02:02:07 <elliott> it shouldn't ...
02:02:10 <elliott> o_O
02:02:24 <elliott> I'm confused now.
02:02:32 <olsner> you aren't duping away stderr :)
02:03:12 -!- iconmaster has quit (Quit: see you all tomorrow! let's see if I can't get that Underload interpreter to work.).
02:03:17 <elliott> olsner: YEAH BUT IT DINT WORK
02:05:59 <elliott> you know what C needs?
02:06:02 <elliott> else fall;
02:06:07 <elliott> falls to the else in the previous branch
02:06:08 <elliott> for instance
02:06:22 <elliott> if (argc > 1 && !strcmp(argv[1], "-s")) {
02:06:25 <elliott> argc--;
02:06:27 <elliott> if (argc > 1) {
02:06:29 <elliott> shell = argv[2];
02:06:31 <elliott> argc--;
02:06:34 <elliott> } else fall;
02:06:39 <elliott> } else if (argc < 2) { ... }
02:06:40 <elliott> or
02:06:41 <elliott> wait no
02:06:43 <elliott> that makes no sense :D
02:07:20 <olsner> good, I hadn't started reading it :P
02:07:43 <augur> copumpkin: is there a neat way to get from fix (interleave [0..]) to a(2n) = n, a(2n+1) = a(n)?
02:08:42 <elliott> if (argc > 1 && !strcmp(argv[1], "-s")) {
02:08:42 <elliott> argc--;
02:08:42 <elliott> if (argc > 1) {
02:08:42 <elliott> shell = argv[2];
02:08:42 <elliott> argc--;
02:08:43 <elliott> }
02:08:45 <elliott> }
02:08:47 <elliott> if (argc < 2) {
02:08:51 <elliott> fprintf(stderr, "usage: %s [-s shell] cmd ...\n", argv[0]);
02:08:53 <elliott> exit(2);
02:08:55 <elliott> }
02:08:57 <elliott> olsner: deugly that :P
02:08:59 <elliott> (notably, "catbus -s" fails with the right error message)
02:09:22 <olsner> elliott: press backspace, hold until not ugly
02:09:35 <elliott> olsner: that would remove feature!!!!!
02:09:44 <olsner> exactly!!!!!
02:09:57 <Gregor> THAT WOULD REMOVE FUTURE
02:10:50 <elliott> olsner: but feature is useful!
02:10:51 <elliott> well
02:10:53 <elliott> maybe it isn't
02:10:58 <elliott> but it feels like if you want to do advanced pipe-fitting
02:11:04 <elliott> you might wanna use a fancy shell or sth
02:11:38 <elliott> olsner: hey i just realised catbus could operate on files
02:11:45 <olsner> orly
02:11:51 <elliott> catbus <(nc irc.freenode.net 6667) <(./hello)
02:12:27 <olsner> hmm, but are those bidirectional files/pipes that you get?
02:12:51 <elliott> olsner: I think so, yes
02:13:08 <elliott> well
02:13:08 <olsner> and the programs would have to read from stdout?
02:13:09 -!- buttsbutts has joined.
02:13:09 <elliott> maybe
02:13:12 <elliott> oh
02:13:17 <elliott> looks like it's only in
02:13:18 -!- buttsbutts has quit (Remote host closed the connection).
02:13:21 <elliott> oh well
02:14:56 <elliott> if (argc < 2)
02:14:56 <elliott> usage();
02:14:56 <elliott> else if (!strcmp(argv[1], "-s")) {
02:14:56 <elliott> if (argc < 3)
02:14:56 <elliott> usage();
02:14:57 <elliott> shell = argv[2];
02:14:59 <elliott> argv += 2;
02:15:01 <elliott> argc -= 2;
02:15:03 <elliott> }
02:15:05 <elliott> De-uglied :P
02:15:20 <olsner> yeah, I did that quite well
02:15:27 <elliott> olsner: eh? :P
02:15:29 <Deewiant> I'd prefer shell = argv[0] afterwards
02:15:30 <elliott> oh
02:15:32 <elliott> you sneaky
02:15:36 <elliott> Deewiant: *argv[1]
02:15:46 <elliott> wait no
02:15:49 <elliott> yes indeed
02:15:51 <elliott> argv[1]
02:15:52 <elliott> isn't it?
02:15:57 <Deewiant> argv += 2
02:16:06 <elliott> Deewiant: yes
02:16:07 <Deewiant> Hence argv[2] becomes argv[0] :-P
02:16:08 <olsner> or *argv
02:16:11 <elliott> oh right
02:16:17 <elliott> Deewiant: should be ++ then
02:16:25 <elliott> shell = argv[2];
02:16:26 <elliott> argv++;
02:16:27 <elliott> argc--;
02:16:30 <elliott> but wait
02:16:36 <elliott> it should skip both -s and the shell thing
02:16:39 <elliott> so surely it should be += 2
02:16:41 <elliott> aargh
02:17:13 <elliott> argv = {"/bin/catbus", "-s", "blah"};
02:17:21 <elliott> oh rightd
02:17:22 <elliott> *right
02:17:35 <elliott> Deewiant: Why would you want it to be argv[0] before, though?
02:17:37 <elliott> *after,
02:17:38 <elliott> That seems uglier.
02:18:05 <Deewiant> I'd rather it reflect the state afterwards, so I don't have to think about where in argv it is now
02:18:16 <Deewiant> Since the value isn't dropped from argv
02:18:18 <elliott> Deewiant: Doesn't matter, nothing looks at it :P
02:18:20 <augur> copumpkin: :|
02:18:33 <elliott> Deewiant: Arguably I should have a cmds variable that I just set to the correct start.
02:19:43 <olsner> extra variables cost lots of characters, bad for golfing unless you get all of them back somewhere else :)
02:20:37 <elliott> http://sprunge.us/hCCO It's uglier now :P
02:20:57 <Gregor> http://codu.org/tmp/cave-2011-02-05-2.ogg <-- I got inspiration from another channel so you guys can all SUCK IT
02:20:58 <elliott> (Than before it had -s or -v.)
02:21:17 <olsner> Gregor: but who inspired you to go there for inspiration? huh?
02:21:27 <elliott> :D
02:21:33 <Gregor> olsner: ... fail.
02:22:02 <elliott> Gregor: What.
02:22:05 -!- TLUL_ has joined.
02:22:16 -!- TLUL has quit (Disconnected by services).
02:22:16 <elliott> Gregor: This is awesome btw.
02:22:20 <elliott> What was the inspiration>?
02:22:23 <elliott> *inspiration?
02:22:24 -!- TLUL_ has changed nick to TLUL.
02:23:11 <Gregor> elliott: Somebody's writing a slow-paced sort of platformery adventury kind of game, this is supposed to be music for a cave level.
02:23:57 <Gregor> "slow-paced" isn't the right phrase, let's go with "mellow"
02:36:19 <Gregor> BTW: Inspiration for putting the bassoon in: A truck drove by at exactly the right time X-P
02:36:27 -!- Mathnerd314 has quit (Ping timeout: 255 seconds).
02:36:37 <augur> elliott: fix (interleave [0..]) !! n can be computed really easily
02:36:38 <augur> :o
02:36:41 <elliott> Gregor: Do something with a TECHNO BEAT
02:36:43 <augur> using binary
02:36:45 * elliott gets killed
02:36:54 <elliott> > fix (interleave [1..])
02:36:55 <lambdabot> [1,1,2,1,3,2,4,1,5,3,6,2,7,4,8,1,9,5,10,3,11,6,12,2,13,7,14,4,15,8,16,1,17,...
02:36:58 <elliott> > fix (interleave [100..])
02:36:59 <lambdabot> [100,100,101,100,102,101,103,100,104,102,105,101,106,103,107,100,108,104,10...
02:37:05 <Gregor> elliott: Nn-ts-nn-ts-nn-ts-nn-ts-nn-ts-nn-ts-nn-ts-nn-ts-nn-ts-nn-ts DONE
02:37:17 <elliott> Gregor: *Cats-n-boots-n-cats-n-boots-n-...
02:37:33 <Gregor> Oh yeah, that's right :P
02:37:37 <elliott> > fix (flip interleave [0.])
02:37:38 <lambdabot> A section must be enclosed in parentheses thus: (0 .)
02:37:41 <elliott> > fix (flip interleave [0..])
02:37:45 <augur> gsub (binary n) /^(.+)01*$/ "\1"
02:37:45 <lambdabot> mueval-core: Time limit exceeded
02:38:16 <elliott> > fix (0 : flip interleave [0..])
02:38:17 <lambdabot> Couldn't match expected type `[a -> t]'
02:38:17 <lambdabot> against inferred type `m a1...
02:38:23 <elliott> > fix ((0 :) . flip interleave [0..])
02:38:24 <lambdabot> [0,0,0,0,1,0,2,0,3,1,4,0,5,2,6,0,7,3,8,1,9,4,10,0,11,5,12,2,13,6,14,0,15,7,...
02:38:33 <elliott> > fix (interleave [0..])
02:38:34 <lambdabot> [0,0,1,0,2,1,3,0,4,2,5,1,6,3,7,0,8,4,9,2,10,5,11,1,12,6,13,3,14,7,15,0,16,8...
02:38:38 <elliott> heh
02:38:40 <elliott> it's different
02:38:44 <elliott> > fix ((0 :) . flip interleave [1..])
02:38:44 <augur> ofcourse its different
02:38:45 <lambdabot> [0,0,1,0,2,1,3,0,4,2,5,1,6,3,7,0,8,4,9,2,10,5,11,1,12,6,13,3,14,7,15,0,16,8...
02:38:48 <elliott> study that!
02:38:52 <elliott> > fix ((0 :) . flip interleave [1..]) !! 999
02:38:54 <lambdabot> 62
02:38:57 <elliott> > fix ((0 :) . flip interleave [1..]) !! 9999
02:38:57 <Lymia> > interleave [1..]
02:38:58 <lambdabot> Overlapping instances for GHC.Show.Show ([t] -> [t])
02:38:58 <lambdabot> arising from a use ...
02:39:00 <Lymia> What does that even do.
02:39:00 <lambdabot> mueval-core: Time limit exceeded
02:39:07 <elliott> > fix ((0 :) . flip interleave [1..]) !! 1000
02:39:09 <lambdabot> 500
02:39:47 <augur> elliott: check out the binary solution i provided above
02:39:52 <augur> its from a friend. :T
02:40:08 <elliott> hmm
02:40:11 <elliott> now do it with bit twiddling
02:40:17 <augur> easy!
02:40:34 <Lymia> > interleave [1..]
02:40:35 <lambdabot> Overlapping instances for GHC.Show.Show ([t] -> [t])
02:40:35 <lambdabot> arising from a use ...
02:40:38 <Lymia> What does interleave do?
02:40:40 <Lymia> :v
02:40:56 <augur> while n & 1; n >>= 1; end; n >>= 1
02:41:24 <augur> Lymia: interleave takes two lists and interleaves them
02:41:30 <Lymia> Ah.
02:41:42 <augur> > interleave [0,1,2] [10,11,12]
02:41:43 <lambdabot> [0,10,1,11,2,12]
02:42:53 <quintopia> so....
02:43:07 <quintopia> > interleave [1..] [2..]
02:43:08 <lambdabot> [1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,1...
02:44:01 <quintopia> is there a function that does intercal's mingle?
02:44:12 -!- Mathnerd314 has joined.
02:45:06 <elliott> quintopia: lol
02:45:11 <elliott> isn't that interleave
02:45:19 <elliott> > interleave [a,b,c] [x,y,z]
02:45:20 <lambdabot> [a,x,b,y,c,z]
02:45:50 <quintopia> no. mingle interleaves bits of numbers!
02:47:50 <elliott> quintopia: yes
02:47:51 <elliott> > bits 123
02:47:52 <lambdabot> Not in scope: `bits'
02:48:02 <elliott> hmm
02:48:03 <elliott> oh right
02:48:22 <elliott> > map testBit [0..]
02:48:23 <lambdabot> Ambiguous type variable `a' in the constraints:
02:48:23 <lambdabot> `Data.Bits.Bits a'
02:48:23 <lambdabot> ...
02:48:26 <elliott> > map testBit [0..] (3::Int)
02:48:27 <lambdabot> Couldn't match expected type `GHC.Types.Int -> t'
02:48:27 <lambdabot> against inferred ...
02:48:34 <elliott> :t map testBit [0..]
02:48:35 <lambdabot> Ambiguous type variable `a' in the constraints:
02:48:35 <lambdabot> `Bits a' arising from a use of `testBit' at <interactive>:1:4-10
02:48:35 <lambdabot> `Enum a'
02:48:42 <elliott> > map (flip testBit) [0..] (42::Int)
02:48:43 <lambdabot> Couldn't match expected type `GHC.Types.Int -> t'
02:48:43 <lambdabot> against inferred ...
02:48:51 <elliott> :t map (flip testBit) [0..]
02:48:51 <lambdabot> forall a. (Bits a) => [a -> Bool]
02:48:59 <elliott> :t mapM (flip testBit) [0..]
02:49:00 <lambdabot> forall a. (Bits a) => a -> [Bool]
02:49:07 <elliott> > mapM (flip testBit) [0..] (42::Int)
02:49:09 <lambdabot> [False,True,False,True,False,True,False,False,False,False,False,False,False...
02:49:25 <elliott> > let bits n = mapM (flip testBit) [0..bitSize n] in bits (1::Int)
02:49:26 <lambdabot> Overlapping instances for GHC.Show.Show (a -> [GHC.Bool.Bool])
02:49:27 <lambdabot> arising f...
02:49:32 <elliott> > let bits n = mapM (flip testBit) [0..bitSize n] n in bits (1::Int)
02:49:34 <lambdabot> [True,False,False,False,False,False,False,False,False,False,False,False,Fal...
02:49:37 <elliott> o_O
02:49:41 <quintopia> lol
02:49:42 <elliott> oh
02:50:24 <elliott> > let bits = mapM (flip testBit) [0..]; mingle m n = interleave (bits m) (bits n) in mingle (2::Int) (3::Int)
02:50:25 <lambdabot> [False,True,True,True,False,False,False,False,False,False,False,False,False...
02:50:29 <elliott> i.e.
02:50:49 <elliott> mingling of 10_2 and 11_2 = 1110_2
02:50:51 <elliott> not sure that's right, but :D
02:52:41 -!- augur has quit (Remote host closed the connection).
02:53:26 <elliott> olsner: ok, as soon as error reporting works, this is catbus 1.0 :P
02:53:33 <elliott> I bet cpressey comes back all OH NO THAT'S NOT HOW IT WAS MEANT TO WORK
02:54:02 <olsner> wow, already
02:58:02 <elliott> olsner: well, I dropped the -s feature.
02:58:05 <elliott> since it's pretty useless really.
02:58:15 <elliott> *sigh*
02:58:18 <elliott> if (fork()) return;
02:58:18 <elliott> dup2(pipes[i ? i-1 : nprocs-1][0], 0);
02:58:19 <elliott> dup2(pipes[i][1], 1);
02:58:19 <elliott> write(2,"hi\n",3);
02:58:19 <elliott> execlp("/bin/sh", "/bin/sh", "-c", cmd, NULL);
02:58:19 <elliott> perror("execl");
02:58:21 <elliott> exit(3);
02:58:23 <elliott> --> hi is never seen.
02:58:28 <elliott> forking + shared fds = happyness??
02:58:41 <olsner> didn't I already say it was an unnecessary feature? :)
03:00:36 <elliott> olsner: aaaand it works before the dup2s
03:00:43 <elliott> conclusion: dup2ing stdin/stdout = no more stderr.
03:01:05 <olsner> hmm, if stderr == stdout, maybe closing stdout will also close stderr somehow
03:01:13 <olsner> but that seems weird too
03:01:28 * elliott writes to fd 3 instead
03:01:39 <elliott> elliott@elliott-MacBookAir:~/Code/catbus$ ./catbus ls 3>x
03:01:39 <elliott> elliott@elliott-MacBookAir:~/Code/catbus$ cat x
03:01:39 <elliott> elliott@elliott-MacBookAir:~/Code/catbus$
03:01:40 <elliott> lol what?
03:01:47 <elliott> conclusion: dup2 BREAKS EVERYTHING
03:02:02 <Lymia> catbus?
03:02:05 <Lymia> What is that supposed be?
03:02:07 <Lymia> A challenge of some sort?
03:02:12 <elliott> A thing!
03:02:27 <elliott> olsner: hmm, i'm gonna remove all the different error codes since i just realised my architecture breaks it :D
03:02:29 <elliott> because spawn does exit(3)
03:02:30 <elliott> but that's the child
03:02:35 <elliott> so it just turns into exit status 1 in the parent
03:02:50 <Lymia> elliott, what is this catbus thing?
03:03:00 <elliott> Lymia: a Unix pipe-fitting utility
03:03:03 <elliott> catbus cmd1 cmd2 cmd3
03:03:03 <elliott> is like
03:03:06 <elliott> cmd1 | cmd2 | cmd3
03:03:09 <elliott> except cmd3 is then tied to cmd1
03:03:12 <elliott> i.e.
03:03:16 <elliott> cmd1's output goes to cmd2
03:03:18 <elliott> cmd2's output goes to cmd3
03:03:21 <elliott> cmd3's output goes to cmd1
03:04:12 <Lymia> Ah.
03:04:18 <Lymia> Where does input to catbus go?
03:04:19 -!- zzo38 has joined.
03:04:36 <elliott> Lymia: The bit bucket :P
03:04:42 <Lymia> =p
03:04:54 <elliott> If I did it in the way I _think_ it might have been intended, it would go to every process. But.
03:05:29 <Lymia> So.
03:05:32 <Lymia> What use would this be again?
03:05:44 <olsner> shell pipe fixpoints
03:06:04 <elliott> what olsner said :
03:06:05 <elliott> :D
03:06:14 <zzo38> I am back now in case you have other question.
03:06:14 <elliott> catbus '(echo y; cat) | tee /dev/fd/2' 2>&1
03:06:17 <elliott> ^ that's the same as "yes"
03:06:18 <olsner> well, pipe fixpoints! the shell isn't necessarily involved
03:06:27 <zzo38> I will fix the thing you said wrong.
03:08:14 <zzo38> OK I fixed it, now it has "#!/usr/bin/env bash" instead of "#!/bin/bash".
03:08:29 <elliott> yay
03:08:35 <elliott> you may want a space after #!
03:08:36 <elliott> some systems require that
03:10:01 <zzo38> elliott: Can you show me where is the document that says that?
03:10:58 <elliott> zzo38: I forget.
03:12:45 <zzo38> I have seen on Wikipedia where it says blanks after ! are OK, but it does not say such things are required.
03:12:56 <elliott> only on some systems
03:13:49 <zzo38> Which systems?
03:14:27 <elliott> don't know exactly
03:14:33 -!- augur has joined.
03:19:02 <zzo38> I did find something that says it is rumored but is not confirmed. "It is rumored that some systems only recognize an executable script when it starts with the four bytes `#! /', probably because the GNU autoconf manual says so, but it seems impossible to find confirmation for this rumor."
03:25:23 -!- Lymia has quit (Read error: Connection reset by peer).
03:25:52 -!- Lymia has joined.
03:26:11 -!- Lymia has quit (Changing host).
03:26:11 -!- Lymia has joined.
03:28:55 -!- elliott has quit (Ping timeout: 240 seconds).
03:38:15 <Gregor> zzo38: That would be one bizarrely-broken system.
03:45:11 -!- Lymia has quit (Read error: Connection reset by peer).
03:45:37 -!- Lymia has joined.
03:45:53 -!- Lymia has quit (Changing host).
03:45:53 -!- Lymia has joined.
03:46:37 -!- azaq23 has quit (Ping timeout: 240 seconds).
03:57:12 <zzo38> Gregor: I do not know of any such system either, I just have it for now without a space after !
04:03:11 -!- Mathnerd314 has quit (Remote host closed the connection).
04:04:19 <Lymia> Gregor.
04:04:36 <Gregor> Lymia: Highlighting: You're doing it wrong.
04:04:41 <Lymia> :<
04:04:46 <Lymia> May I suggest that you modify egojoust to make it run once with + - polarities normal.
04:04:56 <Lymia> Wait.
04:05:15 <Lymia> You run it once with polarities normal, and once with one program's swapped, right?
04:05:45 <Gregor> Yeah, but that's done by report.c, not egojoust.c (IIRC)
04:06:06 <Lymia> egojoust dosn't do that?
04:06:22 <Lymia> Are you sure?
04:06:25 <Gregor> Nope :)
04:06:37 <Gregor> *pokes at the code*
04:07:16 <Lymia> for (polarity = 0; polarity < POLARITIES; polarity++) {
04:07:16 <Lymia> /* set up the polarity */
04:07:22 <Lymia> for (tapelen = MINTAPELEN; tapelen <= MAXTAPELEN; tapelen++) {
04:07:25 <Lymia> Then what's all this in egojoust.c
04:08:12 <Gregor> Lymia: Nope, you're right :P
04:08:19 <Gregor> egojoust does the running in every mode.
04:08:30 <Lymia> Also.
04:08:37 <Lymia> May I ask why those are on the same indentation level.
04:08:43 <Lymia> Confused me for a second when I glanced over the code.
04:08:57 <Lymia> (Wait, what? Why is it looping over the polarities, then entering another loop?)
04:09:06 <Gregor> Anyway, it does run once with polarization normal.
04:09:21 <Gregor> When POLARITY = 3
04:09:28 <Gregor> s/POLARITY/polarity/
04:09:40 <Gregor> Err, vice-versa, when it's 0 :P
04:09:56 <Lymia> Wouldn't it be impossible to tie if you didn't run it with both swapped.
04:10:23 <Gregor> That would give unfair advantage to swap.
04:10:34 <Lymia> Swap?
04:10:43 <Gregor> Both swapped is identical to neither swapped, and one swapped is identical to the other swapped.
04:11:00 <Lymia> Ah.
04:11:44 <quintopia> Gregor: to make it COMPLETELY FAIR, it should run once with all + and - swapped each uniformly at random
04:11:56 <Gregor> lol
04:12:08 <Lymia> Gregor, finally. To get the number of points a program has won, you take abs(return)/(21*4) right?
04:12:14 <Lymia> And if return is zero, it's a tie.
04:12:18 <Lymia> If return is negative, left has won.
04:12:23 <Lymia> And if return is positive, right has won.
04:12:36 <Gregor> Seems that way.
04:16:55 <zzo38> Do you believe how badly the English language functions work in MSE?
04:17:36 <Lymia> MSE?
04:17:47 <zzo38> Lymia: MSE = Magic Set Editor
04:17:53 <Lymia> Ah.
04:17:58 <Lymia> You use that?
04:17:58 <Lymia> :s
04:18:34 <zzo38> Lymia: I used to use that, now I don't because I write a new program called TeXnicard.
04:21:16 <zzo38> In MSE, you get "101th" when converting 101 to English ordinal. In TeXnicard, you get "101st" or "one hundred first" (depending on which command you use).
04:21:52 <zzo38> ("101st" is correct; even Wikipedia says so.)
04:36:15 * Lymia hugs Gregor <3
04:53:53 * Lymia hugs Gregor?
04:54:12 <Gregor> Lymia: Highlighting: You're still doing it wrong.
04:54:22 <Lymia> I'm hugging you!
04:54:35 <Gregor> I'm incorporeal, and as such unhuggable.
04:55:10 <Lymia> :(
05:04:18 -!- azaq23 has joined.
05:05:57 <zzo38> Where do you think chess was invented first, India or China?
05:08:08 <zzo38> Lymia: I do not think you can hug them by computer.
05:08:31 -!- oerjan has joined.
05:08:46 <Gregor> I don't think Chess was "first invented"
05:09:07 <Gregor> Or rather, "invented first" :P
05:09:31 <Gregor> It slowly evolved, it's hard to say which game first in the middle counts as "Chess"
05:10:46 <zzo38> Gregor: Do you know how Xiangqi is played?
05:10:53 <Gregor> Nope
05:11:12 <zzo38> Do you know how Chaturanga is played?
05:11:40 <Gregor> Nope
05:11:45 <Gregor> I barely know how Chess is played :P
05:12:11 <zzo38> Gregor: Why? What things about Chess do you not know?
05:12:44 <Gregor> I know the rules, not how it's played.
05:12:54 <zzo38> Have you never played?
05:13:36 <zzo38> Do you know anything about Xiangqi or Chaturanga at all?
05:16:20 <Gregor> I've played Chess, but that doesn't mean I know how, and I know nothing of the latter two.
05:19:02 <Gregor> Weird question: is there something you can do with sound/music to make it sound better on tinny speakers? Sort of adapt it to the expectation that it'll be played on speakers that suck ...
05:19:13 <zzo38> Chaturanga is not played much any more and is only of historical interest. It is like Chess, but there is no castling, no pawn initial double step, the queen moves one diagonal, the bishop moves exactly two diagonal (leaping), stalemate wins for the stalemated player, and pawns only promote to lost pieces the same as the kind of piece in the that position in the initial setup.
05:21:20 <zzo38> Xiangqi is very popular today and it is also called "Chinese Chess". It is played on 9x10 board, only 5 pawns for each player at the start, horses and elephants cannot jump, there is a river in the middle, kings cannot leave the palace and are not allowed to look at each other, and there is also cannons.
05:21:41 * Sgeo_ has been playing Go
05:22:04 <Sgeo_> What does "look at each other" mean?
05:22:41 <zzo38> Sgeo_: It means they are in the same column and there are no pieces in between. Any move that causes such a position is an illegal move.
05:23:03 <Sgeo_> zzo38, play Go!
05:24:20 <zzo38> Sgeo_: I have played Go, too. I am not very good, but I did play once against someone in my school who was better since he was Japanese. I was better at Shogi, though, than him. He gave me a Shogi game as a gift.
05:25:26 <zzo38> Gregor: About tinny speakers, I don't know, have you tried changing the equalizer?
05:26:00 <Gregor> Yeah, but just poking around at it doesn't really suggest much to me (and I'm no audiophile) ... was hoping somebody would have more specific ideas.
05:26:47 <zzo38> Unfortunately I do not have any more specific ideas. Maybe someone else in this channel might, but I do not think so.
05:29:54 <zzo38> At least it is worth a try.
05:48:14 -!- Lymia_ has joined.
05:48:20 -!- Lymia has quit (Disconnected by services).
05:48:21 -!- Lymia_ has changed nick to Lymia.
05:48:21 -!- Lymia has quit (Changing host).
05:48:21 -!- Lymia has joined.
06:14:12 <quintopia> gregor: there is something you can do. there is, in fact, an algorithm
06:14:28 <quintopia> Look up a device called the zo personal music something or other
06:16:30 <Gregor> That seems more "device" than "algorithm" ...
06:16:40 <Gregor> waitwtf
06:16:52 <Gregor> You just plug it in between speakers and a device?
06:16:57 <quintopia> yep
06:16:58 <Gregor> So it's an expensive algorithm in a shiny box :P
06:17:03 <quintopia> exactly
06:17:42 <Gregor> Has anybody reverse-engineered it though? (Or is it just some well-known algorithm?)
06:18:10 <quintopia> i think it's proprietary. and i've not heard of anyone deblackboxing it.
06:18:20 <Gregor> Hm
06:18:31 <quintopia> this is an existence proof. sorry i couldn't be more constructive.
06:18:36 <Gregor> Heh :)
06:31:07 <Lymia> Gregor, meh.
06:31:16 <Lymia> First version of the BF joust evolver.
06:31:31 <Gregor> "Meh" doesn't sound like "COMPLETE SUCCESS"
06:31:45 <Lymia> Clone->Mutate->Fight->Isolate highest scoring bots->Clone->...
06:31:59 <Lymia> I might add crossovers, etc if I can figure out a sensable way to add them.
06:34:29 <Lymia> Gregor.
06:34:30 <Lymia> Quick question.
06:34:37 <Lymia> (a{b}c{d}e)*2
06:34:44 <Lymia> That is evaluated as aabccdee right?
06:35:09 <Gregor> Why do you expect me to remember things I wrote so long ago X-P
06:35:17 <Lymia> Dunno!
06:35:39 <Gregor> I'm sure ais would have yelled at me if I'd done it wrong.
06:36:10 <Lymia> !bfjoust test {<}
06:36:50 <Gregor> EgoBot: Hello?
06:37:36 <EgoBot> Score for Lymia_test: 0.0
06:37:48 <Gregor> lawl *sleep*
06:43:12 -!- Zuu has quit (Read error: Connection reset by peer).
06:43:15 -!- Zuu_ has joined.
06:46:58 <oerjan> Lymia: my reading of the wiki page spec is that that is not necessarily legal syntax, i don't know what implementations actually do.
06:47:58 <oerjan> in fact i think at least one implementation used a pushdown automaton method which wouldn't support that
06:48:06 <oerjan> (very vaguely recalled)
06:50:24 <oerjan> Lymia: in fact the command about needing square bracket matching doesn't make sense as written with your syntax
06:50:27 <oerjan> *comment
06:50:34 -!- azaq23 has quit (Ping timeout: 255 seconds).
06:51:20 <oerjan> there's probably some way to rewrite it so it does, though
06:52:41 <oerjan> well just requiring bracket matching in c would work
06:54:00 <oerjan> hm or maybe you actually just need to consider matching in ace as a whole
06:54:05 <oerjan> (in addition to b, d
06:54:47 <oerjan> )
06:56:54 <oerjan> hm lessee
06:58:35 <oerjan> ([[{}]{}])%2 then = [[[[ ]] ]] but there's a subtlety: one of the two ]'s arising from the middle does _not_ match a [ arising from the one it syntactically matches originally
06:58:46 <oerjan> which seems unintuitive to say the least
07:00:31 <oerjan> which means that for all _real_ purposes, you probably want to just use (a{b(c)*nd}e)%n instead
07:01:14 <oerjan> well naturally you could rewrite the (a{b}c)%n as (a)*n b (c)*n too
07:01:25 <oerjan> oh wait no
07:01:45 <oerjan> it's precisely when _not_ each of a and c match separately it's useful
07:03:00 <oerjan> oh and my "unintuitive" above can also be taken to mean "cannot be run efficiently without actually expanding it to what it's an abbreviation of"
07:03:15 <oerjan> well not obviously anyway
07:03:48 -!- Lymia has quit (Read error: Connection reset by peer).
07:04:17 -!- Lymia has joined.
07:04:57 <zzo38> Do you have any public domain copy of the deutrocanonical books?
07:05:13 <zzo38> (Also known as apocrypha)
07:06:48 <pikhq> Pretty sure there should be some translations thereof on Project Gutenberg.
07:07:35 <zzo38> pikhq: OK. I have a full copy of the KJV in my gopher service but the other books that are not included in KJV still have to be added.
07:09:26 <quintopia> zzo38: why are you collecting the christian mythos?
07:09:55 <pikhq> zzo38: The KJV should actually have the apocrypha.
07:10:50 <quintopia> pikhq: really? i've never known it to?
07:10:53 <zzo38> quintopia: I have various plain ASCII text files collected.
07:11:01 <pikhq> zzo38: Though not doctrine, they are considered "important" and "divinely inspired" in the Anglican church.
07:11:23 <pikhq> quintopia: Some printings may omit it, but it *is* a part of the same translation.
07:11:42 <quintopia> zzo38: do you use them for anything?
07:12:09 <zzo38> quintopia: Sometimes I look, but mostly it is just for service.
07:12:19 -!- Lymia has quit (Changing host).
07:12:19 -!- Lymia has joined.
07:12:42 <quintopia> zzo38: is it a public collection on the web?
07:12:44 <pikhq> quintopia: http://en.wikisource.org/wiki/Bible_%28King_James%29/1_Esdras Here's the start of the King James Apocrypha.
07:13:12 <zzo38> quintopia: It is publicly available at: gopher://zzo38computer.cjb.net/1textfile and at http://zzo38computer.cjb.net/textfile/
07:15:07 <zzo38> They are not currently accessible by teletype or fax.
07:15:50 <quintopia> ah, so you do have a sense of humor :P
07:16:25 <quintopia> so what did you think of ETAS? you're the one who inspired it, surely you have a comment.
07:16:57 <zzo38> Just let me look one more time.
07:17:40 <zzo38> I think it is not bad.
07:18:58 <zzo38> I think I have once read a letter someone sent to some magazine where they suggested calling 2 bits a "crumb".
07:19:07 <quintopia> zzo38: is this also a mirror of textfiles.com?
07:19:26 <quintopia> oh that's not a bad idea. i might change it to that.
07:19:41 <zzo38> quintopia: Some of the files are such a mirror. Others I added myself.
07:19:59 <zzo38> Also, it is does not have all of the textfiles.com files either.
07:20:03 <quintopia> ah
07:22:13 <Sgeo_> EAT?
07:22:15 <Sgeo_> EATS/
07:22:18 <Sgeo_> ETAS>
07:22:22 <Sgeo_> GAHAhAHAHA
07:22:25 <zzo38> Actually here is a proper URL: gopher://zzo38computer.cjb.net:70/1misctext
07:22:32 <zzo38> (The other URL is wrong)
07:22:47 <quintopia> the http URL worked tho, and ff doesn't support gopher anymore anyway :P
07:23:06 <Sgeo_> My mind has given up the gost
07:23:08 <Sgeo_> ghost
07:23:17 <quintopia> sleep then?
07:23:23 <quintopia> you know it's almost 3 in the morning right?
07:23:24 <Sgeo_> I need to eats
07:23:41 <quintopia> zzo38: do you think ETAS is TC? intuitionally?
07:24:58 <zzo38> quintopia: I find that question difficult.
07:25:19 <quintopia> me too, but i feeeeeel like it might be.
07:25:21 -!- asiekierka has joined.
07:25:41 <zzo38> Yes, it might be.
07:26:04 <zzo38> If ff doesn't support gopher anymore, use a different client such as Bash Gopher.
07:26:27 <quintopia> nah
07:26:52 <zzo38> That is OK; you do not have to. These files are available on HTTP as well.
07:28:41 <quintopia> are you in quebec?
07:29:47 <zzo38> No. You should be able to see my service provider is not in Quebec?
07:31:50 <quintopia> i didn't bother to whois you :P
07:32:43 <zzo38> I will tell you, I am in British Columbia. But even IRC protocol sends the address with each message, too.
07:33:36 <quintopia> ...do you use raw irc?
07:35:12 <zzo38> I use a IRC client I wrote by myself. I think it is the only one following the RFC, someone on this channel tested that, I think.
07:36:34 <pikhq> quintopia: zzo38 *is* in fact a native English speaker. His usage of English is just decidedly odd.
07:37:12 <quintopia> i had concluded as much
07:37:45 <quintopia> i had to ask though because his usage is very similar to a non-native speaker I know in Quebec
07:38:29 <pikhq> And yet, he's not Quebecois. Go figure.
07:39:38 <quintopia> zzo38: what did you write it in?
07:40:35 <zzo38> quintopia: PHP, but if I ever rewrite it, it will not be in PHP. And it uses PuTTY as a terminal window.
07:40:44 <zzo38> Can't you check that using VERSION command?
07:41:31 <quintopia> sure can! :P
07:41:51 <quintopia> but your description of it was better
07:42:17 <quintopia> in which way is it the only one following the RFC?
07:44:07 <zzo38> I think it is the only one where CTRL+A and commands can be placed in the middle of another text. I think someone on this channel has tested that feature.
07:45:10 <zzo38> I mean, it is the only one that will accept commands in that way.
07:45:24 <zzo38> (Other clients just ignore such commands)
07:45:49 <quintopia> oh you mean it won't put the ^A character in the middle of a message?
07:45:53 <quintopia> for instance
07:46:00 <Sgeo_> zzo38, have you ever used a different IRC client?
07:46:37 <zzo38> Sgeo_: Yes once, and it isn't very good that is why I wrote my own.
07:46:37 -!- myndzi has quit (Read error: Connection reset by peer).
07:47:09 -!- myndzi has joined.
07:47:21 <zzo38> quintopia: My client will allow putting any characters anywhere in a message. What I mean is when ^A character is in the middle of a message, other clients will ignore it, while my client will accept and understand the command.
07:47:56 <quintopia> i sort of get it, i guess?
07:48:33 <zzo38> You might be able to find that in the IRC logs for this channel.
07:48:41 <quintopia> right
07:52:12 <zzo38> echo misctext/dream | nc -q -1 zzo38computer.cjb.net 70 | less
07:53:39 <quintopia> why?
07:54:52 <zzo38> Apparently someone (not me) had a dream once that ended in credits.
07:54:58 <quintopia> i saw that
07:55:04 <quintopia> is the * really you
07:55:49 -!- Lymia_ has joined.
07:55:55 <zzo38> I am not sure actually. Since it is a dream, I do not know if I can remember accurately or not.
07:56:11 -!- Lymia has quit (Disconnected by services).
07:56:12 -!- Lymia_ has changed nick to Lymia.
07:56:13 -!- Lymia has quit (Changing host).
07:56:13 -!- Lymia has joined.
07:56:57 <quintopia> i remember several of my dreams. not accurately probably, but i do know it was me that had the dream
07:57:34 <quintopia> sometimes i've had dreams that i was convinced would be great movie or tv show inspirations
07:58:18 <quintopia> zzo38: what is your primary language of choice? like if you just wanted to throw together a tool real quick?
07:58:36 <zzo38> quintopia: It depends a lot on what tools I wanted to throw together.
07:59:04 <quintopia> okay? example?
07:59:59 <zzo38> I have used shell scripts for some things, Forth for some things, C for some things, Javascript for some things, QBASIC for some things, PHP for some things.....
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:00:29 <quintopia> wow
08:01:03 <zzo38> And also AWK.
08:01:19 <quintopia> never quite got the hang of awk...
08:03:04 <zzo38> One of the utility programs that comes with TeXnicard for making a book from the "plain.cards" file is written in awk. I also wrote a program in awk to calculate totals and summaries from logs of drive wiping.
08:03:48 <quintopia> when do you use Forth?
08:04:53 <zzo38> I have once written a quick program in Forth to decode the level files from StroQ.
08:05:57 <quintopia> the most i ever did with forth is the first few PE problems. then i got pissed off at its data types and how hard it is to do floating point stuff and gave up
08:06:09 -!- hagb4rd has joined.
08:11:23 <zzo38> The reason for that conversion program was because I was porting that game to the GameBoy.
08:15:13 <quintopia> i'm not familiar with the game actually
08:19:26 <zzo38> I have the ROM file, which I have wrote it myself.
08:20:04 <quintopia> i don't have a gameboy
08:20:22 <quintopia> one time i wanted to port conquest to my calculator, but i never did it
08:20:37 <zzo38> quintopia: You can also use a emulator.
08:20:50 <quintopia> oh, yeah.
08:20:59 <quintopia> what is the original written in?
08:22:21 <zzo38> quintopia: I don't know. I rewrote the game engine and just copied some of the levels. But I added some of my own levels and other stuff too, to make 256 levels in total.
08:22:48 <quintopia> mmm
08:25:39 <zzo38> Do you know? Some business had a form you have to fill for booking annual leave (holiday/vacation), but you had to select a reason from the list. The list included, as well as "Holiday", also things like "Acne", "Authorised Sabatical Leave", "Compassionate", "Ear Infection", "Hearing Loss", "Ill", "Sickness", "Drug Abuse / Dependance", "Surgery - Thumb", "Pelvic(F Only) C Mskele other", and others.
08:26:16 <quintopia> where did you find this?
08:26:41 <zzo38> I think it was on Daily WTF.
08:27:05 -!- nddrylliog_ has joined.
08:27:23 <quintopia> oh
08:28:07 <zzo38> One possibly reason for this strange things is that they took the program from another company where the employees filled in everything themself and then made a list of it.
08:28:28 <quintopia> that's what i figured
08:29:06 <zzo38> Also, this form is not meant for anything other than vacation, so the reason list is irrelevant.
08:29:25 -!- nddrylliog_ has changed nick to nddrylliog.
08:29:57 <quintopia> right
08:49:00 -!- nddrylliog has quit (Ping timeout: 240 seconds).
08:55:38 <zzo38> I have experimented once with having cards in Magic: the Gathering that has "lose priority" as part of its cost.
08:59:03 <quintopia> i played MTG once
08:59:13 <quintopia> you wouldn't happen to want a deck would you?
08:59:44 <quintopia> I'll sell you one including a "Mercenary Knight" and a "Faerie Conclave" for $8.25 plus shipping
08:59:51 <quintopia> (not sure what that is in CAD)
09:01:42 <zzo38> I want not any deck. I prefer to play only Limited.
09:02:27 <zzo38> What can you figure out from this? ~ has "Lose priority: This ability does nothing. Any player may play this ability." Whenever that ability would resolve (if this ability is still in play), instead the ability's controller selects one of his/her opponents, and that player wins the game. If that player would win the game in this way, instead the ability's controller wins the game.
09:05:48 -!- TLUL has quit (Quit: *disappears in a puff of orange smoke*).
09:06:23 <quintopia> sounds complicated
09:06:38 <quintopia> i don't know enough MTG to figure out why it would be useful though
09:08:51 <zzo38> Actually it is my attempt at a "fixed" version of the following (also non-existent) card: {0}: You win. Any player can play this ability.
09:09:44 <zzo38> It is vastly overpowered, which is why I have attempted to correct it.
09:10:09 <quintopia> lol
09:17:10 <zzo38> I have once in a tournament (a booster draft) finished in second place, but only because my score was not computed correctly. I should have got first place. My opponent quit in the middle of the second game of a match, because he did not like the rules. I was arguing with him about what the rules are, so he called a judge and the judge agreed I was correct, so he quit.
09:19:10 <zzo38> However, that was the only tournament in which I did not finish in last place.
09:20:05 <quintopia> HA
09:23:07 -!- Lymia_ has joined.
09:23:15 -!- Lymia has quit (Disconnected by services).
09:23:15 -!- Lymia_ has changed nick to Lymia.
09:23:16 -!- Lymia has quit (Changing host).
09:23:16 -!- Lymia has joined.
09:24:33 -!- asiekierka has quit (Ping timeout: 250 seconds).
09:31:13 -!- kar8nga has joined.
09:39:11 <Ilari> Apnic extended statistics file has 3.121612548828125 blocks free... But apparently APNIC will also get 1.54 blocks from VARIOUS (not yet shown in the stats). If there won't be panic, that is enough to push APNIC depletion to end of June (at 1 block per month rate)...
09:39:21 -!- MigoMipo has joined.
09:39:47 <quintopia> is it purely coincidence that panic is an anagram of apnic?
09:41:09 <Ilari> I think APNIC is the one most vulernable to panic, but the others in big three are by no means invulernable. Looks like the other two won't get very much, at least until big three deplete.
09:42:52 <Ilari> Counting blocks from VARIOUS, APNIC has something like 4.67 blocsk left (not counting the reserved block).
09:50:00 <Ilari> Seems like counting VARIOUS but not counting reserved blocks, APNIC has the largest pool.
09:50:22 <quintopia> and the overwhelmingly fastest depletion rate
09:51:11 <Ilari> APNIC allocates about half of all the addresses allocated (and the ratio is increasing).
09:53:17 <Ilari> Hmm... Maybe "% allocated" vs. "% time" curves for last 13 whole months for all RIRs would tell something...
09:53:38 -!- hagb4rd has quit (Ping timeout: 240 seconds).
09:53:39 <Ilari> (in practicular, how linear those curves are).
09:55:42 <Lymia> :>
09:55:48 <Lymia> Framework for my BF Joust evolver is done.
09:55:54 <Lymia> All I need to do now is to implement the mutation routine.
09:56:38 <Lymia> !bfjoust silly -+---<-+->+->---+><<-+>+-<>-+>
09:57:52 <EgoBot> Score for Lymia_silly: 0.0
09:58:36 <Ilari> Well, actually I'll pick 2010-01-01, 2011-02-04 as that interval has 400 days...
09:58:51 <quintopia> is that something your prog generated Lymia?
09:59:14 <Lymia> Yes.
09:59:17 <Lymia> It's completely random.
09:59:17 <Lymia> =p
09:59:32 <Lymia> Again.
09:59:33 <quintopia> mm
09:59:36 <Lymia> I need to implement mutation.
09:59:59 <Lymia> This one got through by virtue of dying the slowest.
10:00:00 <Lymia> =p
10:00:45 <oerjan> Lymia: i blathered on a bit above about why (a{b}c{d}e)%n doesn't make much sense, see logs
10:01:20 <Lymia> Ah.
10:02:04 <oerjan> (basically if c matches internally, just use (a{b(c)*nd}e)%n. otherwise, brackets in a c and e might not match after expansion the other brackets that they visually match before.)
10:04:36 <Lymia> Bluh.
10:04:40 <Lymia> Two last things I need to implement.
10:04:53 <Lymia> Reading BF Joust programs to internal representation, and mutation.
10:04:53 <Lymia> :s
10:04:56 <Lymia> It's 4:22AM
10:06:28 <quintopia> oh. you're central time. a midwesterner?
10:06:40 <Lymia> Yes.
10:07:10 <quintopia> when did you wake up yesterday? :P
10:07:23 <Lymia> Noon
10:07:24 <Lymia> =p
10:07:27 <Lymia> Urg.
10:07:29 <quintopia> me too
10:07:33 <quintopia> and i drank so much coffee
10:07:40 <Lymia> 147 line Scala program just generated 42 freaking classes.
10:07:46 <quintopia> wat
10:07:57 <Lymia> quintopia, Scala compiles to JVM bytecode.
10:08:08 <Lymia> Appearently each lambda expression is compiled to it's own class.
10:08:08 <Lymia> :s
10:08:14 <quintopia> yes
10:08:20 <quintopia> wat=that's ridiculous
10:08:41 <Lymia> Each "object XXX" is compiled into a "XXX.class" and a "XXX$.class"
10:09:06 <quintopia> well, each one is small in terms of total bytecodes i hope
10:13:54 <quintopia> Lymia: and why can't I PM you?
10:19:55 <oerjan> hm you are both registered, so it's not that
10:23:42 <Ilari> Picking last two months, now the rate seems to be something like 1.1x/8 a month. December was already quite active and seems January was even more so...
10:26:54 <Ilari> At rate of 1.3x/8 a month, the pool would last only about 3.6 months (end of May).
10:29:10 <Ilari> Judging from forward projection lengths, real problems with IPv4 depletion start around end of the year...
10:30:39 -!- zzo38 has quit (Quit: EOT).
10:30:41 <Ilari> As that's when ISPs start to run out of addresses, unable to get more.
10:40:57 -!- Phantom_Hoover has joined.
10:40:58 -!- FireFly has joined.
10:41:54 <quintopia> as long as they don't start before world ipv6 day
10:41:57 <quintopia> that's the important thing
10:43:05 -!- Phantom__Hoover has joined.
10:46:58 -!- Phantom_Hoover has quit (Ping timeout: 265 seconds).
10:51:18 -!- BeholdMyGlory has joined.
10:53:49 <Ilari> And that really means major problems of class "better have IPv6 widely deployed before then".
10:56:08 <Lymia> Heh.
10:56:26 <Lymia> Looks like there arn't any crash bugs in my BF Joust evolver...
10:56:33 <Lymia> I'm going to let it run for a night and see what comes out.
11:07:31 <Lymia> !bfjoust completely_random .>[[()*7].][(()*5)*3-[[]<[]()*7-<]]>[>.>>.][>()*8<]+(+->+[+[]()*12(()*5-[(.[[[[[][]](.)*1>][-][]]]<+)*3[]((()*1[]>)*1)*9+()*3[]][[]+[>][]>]()*2>+-)*3]>)*6-.+.++(()*9[>][()*4.<[]-])*4
11:09:37 <EgoBot> Score for Lymia_completely_random: 0.0
11:10:26 -!- Zuu_ has changed nick to Zuu.
11:14:50 <quintopia> lul
11:17:14 <Lymia> (If you have to ask, I did that to make sure that there were no bugs in the muation engine)
11:18:00 <Lymia> (Well... no obvious bugs...)
11:18:20 <Lymia> (I'll be pissed if I find the evolver crashed when I wake up)
11:18:28 <Lymia> Night!
11:25:18 -!- asiekierka has joined.
11:27:00 -!- fxkr has quit (Quit: kernel update).
11:29:22 <Phantom__Hoover> http://i.imgur.com/1N8AH.png
11:29:34 <Phantom__Hoover> CONCLUSION: Patrick Stewart does not age.
11:30:03 -!- fxkr has joined.
11:47:04 <oerjan> ^ul (f)(c)a(~)*~a(~^)*a(~^)*SS
11:47:04 <fungot> ((f)~^)~^(c)~
11:48:39 <oerjan> ^ul (f)(c)a(~)*~a(~^)*a(~^)**SS
11:48:39 <fungot> (c)~((f)~^)~^ ...out of stack!
11:49:48 -!- Cheery has joined.
11:57:38 * Phantom__Hoover welcomes Cheery on general principles
11:58:08 -!- MigoMipo has quit (Read error: Connection reset by peer).
11:58:54 <oerjan> ^ul (SS)(e2)(a(~)*~a(~^)*a(~^)**)~*a(~a)~(*~^)**~^
11:58:54 <fungot> ~a(a(~)*~a(~^)*a(~^)**e2)*~^ ...out of stack!
11:59:05 <Phantom__Hoover> THINGS THAT ANNOY ME PART 76:
11:59:16 <Phantom__Hoover> Why doesn't dc have a pop instruction?
12:00:24 <Phantom__Hoover> It is literally impossible to remove the top of the stack without either designating a bit bucket somewhere or using some witchcraft with the conditionals.
12:00:56 <oerjan> well i assume designating a bit bucket isn't _that_ awkward...
12:01:13 <oerjan> given 256 registers iirc
12:01:21 <Phantom__Hoover> d!=r should actually work, come to think of it.
12:01:50 <Phantom__Hoover> Since the conditional instructions are the only ones which remove an item from the stack without any side effects, assuming they're false.
12:03:48 -!- sebbu has joined.
12:06:41 <oerjan> ^ul (e1)(e2)a(~)~(~^)**a(a)~(*)**a~*SS
12:06:41 <fungot> (a(~(e2)~^)*)e1 ...out of stack!
12:07:14 -!- sebbu2 has quit (Ping timeout: 272 seconds).
12:08:00 <oerjan> ^ul (e1)(e2)a(~)~(~^)**a(a)~(*)**~*SS
12:08:00 <fungot> a(~(e2)~^)*e1 ...out of stack!
12:21:51 -!- sebbu has quit (Read error: Connection reset by peer).
12:22:17 -!- sebbu has joined.
12:47:56 -!- Phantom__Hoover has quit (Ping timeout: 240 seconds).
12:50:24 <oerjan> ^ul (z)(c)a(~)*~a(~^)*a:(y)*a(~^)*a(*)*~*^aSaS
12:50:24 <fungot> ((z)~^)((c)~(((z)~^)y)~^)
12:51:08 <oerjan> ^ul (z)(c)a(~)*~a(~^)*a:(y)*a(~^)*a(*)*~*^aSaSaS
12:51:08 <fungot> ((z)~^)((c)~(((z)~^)y)~^) ...out of stack!
13:08:51 <oerjan> ^ul (y)(c)~a(a(~)*~a(~^)*a:)~(*a(~^)*a(*)*~*^x)**a(~a)~(*~^)**~aSaSaS
13:08:51 <fungot> (c)(~a(a(~)*~a(~^)*a:(y)*a(~^)*a(*)*~*^x)*~^) ...out of stack!
13:12:26 -!- nddrylliog has joined.
13:12:50 <oerjan> ^ul (y)((aSaS)~((z)~^)~^)~a(a(~)*~a(~^)*a:)~(*a(~^)*a(*)*~*^x)**a(~a)~(*~^)**~^
13:12:50 <fungot> ...bad insn!
13:13:08 <nddrylliog> Underload <3
13:13:29 <oerjan> now why did it do that
13:14:59 <oerjan> ^ul (y)(aSaS)~a(a(~)*~a(~^)*a:)~(*a(~^)*a(*)*~*^x)**a(~a)~(*~^)**~^
13:14:59 <fungot> (~a(a(~)*~a(~^)*a:(y)*a(~^)*a(*)*~*^x)*~^) ...out of stack!
13:16:14 <oerjan> hm that looks correct
13:18:14 <oerjan> ^ul (y)((aSaS)~((z)~^)~^)~a(a(~)*~a(~^)*a:)~(*a(~^)*a(*)*~*^x)**a(~a)~(*~^)**~^
13:18:14 <fungot> ...bad insn!
13:18:48 <oerjan> ^ul (y)((aSaS)~(aSaS(z)~^)~^)~a(a(~)*~a(~^)*a:)~(*a(~^)*a(*)*~*^x)**a(~a)~(*~^)**~^
13:18:48 <fungot> ((aSaS)a(~)*~a(~^)*a:(y)*a(~^)*a(*)*~*^x) ...out of stack!
13:19:20 <nddrylliog> it would be nice if fungot pointed out exactly where the error lied
13:19:21 <fungot> nddrylliog: i couldn't find anything for puffs. ( i use that :) what is a lambda function, but i'm also interested in distributed systems in the presence of call/ cc,
13:19:44 <nddrylliog> fungot: interesting random semi-believable text generation algorithm you have there
13:19:45 <oerjan> well i could easily add some printing
13:19:45 <fungot> nddrylliog: printf is even more powerfull than this .el? (: i'm used to clos in scheme,
13:20:12 <oerjan> fungot is eerily clairvoyant
13:20:12 <fungot> oerjan: no one answered
13:22:20 <oerjan> ^ul (z)(aSaS)a(~)*~a(~^)*a:(y)*a(~^)*a(*)*~*^x
13:22:20 <fungot> ...bad insn!
13:22:35 <oerjan> that's what it should pass through
13:23:01 <oerjan> oh wait duh
13:23:45 <oerjan> it's entirely correct, it should try to run the x. my fault for putting a dummy variable there :D
13:24:02 <oerjan> ^ul (z)(aSaS)a(~)*~a(~^)*a:(y)*a(~^)*a(*)*~*^aSaSx
13:24:02 <fungot> ((z)~^)((aSaS)~(((z)~^)y)~^) ...bad insn!
13:24:24 <oerjan> ...that's not expected
13:24:32 <oerjan> oh wait
13:24:54 <oerjan> i just didn't exhaust the stack
13:35:10 -!- kar8nga has quit (Remote host closed the connection).
13:36:41 -!- Sgeo__ has joined.
13:38:14 <oerjan> ^ul (aSaSaSx)(((c)~((z)~^)~^)~((y)~^)~^)~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^
13:38:14 <fungot> ((z)~^)((c)~(((z)~^)y)~^) ...out of stack!
13:39:21 -!- Sgeo_ has quit (Ping timeout: 240 seconds).
13:45:21 -!- HackEgo has quit (Ping timeout: 255 seconds).
13:47:09 -!- EgoBot has quit (Ping timeout: 255 seconds).
13:47:09 -!- lambdabot has quit (Ping timeout: 255 seconds).
13:47:38 -!- EgoBot has joined.
13:50:44 <oerjan> ^ul (!)(a(~((~a(^)*~^)~^)~^)*(~a(~a~*((H)S)~*^)*~^)~^
13:50:44 <fungot> ...unterminated (!
13:50:52 <oerjan> huh
13:51:30 -!- hagb4rd has joined.
13:51:41 <oerjan> ^ul (!)a(~((~a(^)*~^)~^)~^)*(~a(~a~*((H)S)~*^)*~^)~^
13:51:41 <fungot> H
13:51:43 <oerjan> yay
13:55:34 -!- HackEgo has joined.
13:58:45 -!- Asphyxia^T_T has joined.
13:59:13 <oerjan> ^ul (x)((aSaS)~((y)~^)~^)~a(~!)~(~^)**a(~a)~(*~^)**~^
13:59:13 <fungot> (x) ...out of stack!
14:02:46 -!- hagb4rd has quit (Ping timeout: 240 seconds).
14:09:51 <oerjan> ^ul ((~a(^)~*^)~^):((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^)~(a(~)~(~^)**a(a)~(*)**~*):(~)~:(:)~****^(Boo!)~^
14:09:52 <fungot> ...out of stack!
14:09:57 <oerjan> eek
14:10:14 <oerjan> ^ul (:^):^
14:10:15 <fungot> ...out of time!
14:10:39 <oerjan> ^ul ((~a(^)~*^)~^):((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^)~(a(~)~(~^)**a(a)~(*)**~*):(~)~:(:)~****^aSaS
14:10:39 <fungot> (a(~(a(~((~a(^)~*^)~^)~^)*a(~((~a(^)~*^)~^)~^)*(~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^)~^)*a(~((~a(^)~*^)~^)~^)*a(~((~a(^)~*^)~^)~^)*(~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^) ...out of stack!
14:11:52 <oerjan> ^ul ((~a(~a~*((*)S)~*^)~*^)~^):((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^)~(a(~)~(~^)**a(a)~(*)**~*):(~)~:(:)~****^(Boo!)~^
14:11:53 <fungot> ...out of stack!
14:12:03 <oerjan> ...oh wait
14:14:25 <oerjan> ^ul ((~a(~a~*((*)S)~*^)~*^)~^):((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^)~(a(~)~(~^)**a(a)~(*)**~*):(~)~:(:)~****aSaS
14:14:25 <fungot> (a(~)~(~^)**a(a)~(*)**~*~a(~)~(~^)**a(a)~(*)**~*:a(~)~(~^)**a(a)~(*)**~*)((~a(~a~*((*)S)~*^)~*^)~^)
14:15:55 <oerjan> ^ul ((~a(^)~*^)~^):((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^)~(a(~)~(~^)**a(a)~(*)**~*):(~)~:(:)~****
14:16:02 <oerjan> ^ul ((~a(^)~*^)~^):((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^)~(a(~)~(~^)**a(a)~(*)**~*):(~)~:(:)~****^
14:16:20 <oerjan> ^ul ((~a(^)~*^)~^):((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^)~(a(~)~(~^)**a(a)~(*)**~*):(~)~:(:)~****^aS
14:16:20 <fungot> (a(~(a(~((~a(^)~*^)~^)~^)*a(~((~a(^)~*^)~^)~^)*(~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^)~^)*a(~((~a(^)~*^)~^)~^)*a(~((~a(^)~*^)~^)~^)*(~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^)
14:16:32 <oerjan> ^ul ((~a(^)~*^)~^):((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^)~(a(~)~(~^)**a(a)~(*)**~*):(~)~:(:)~****^aSaS
14:16:32 <fungot> (a(~(a(~((~a(^)~*^)~^)~^)*a(~((~a(^)~*^)~^)~^)*(~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^)~^)*a(~((~a(^)~*^)~^)~^)*a(~((~a(^)~*^)~^)~^)*(~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^) ...out of stack!
14:17:15 <oerjan> ^ul ((~a(^)~*^)~^):((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^)~(a(~)~(~^)**a(a)~(*)**~*):(~)~:(:)~****^(!)~^
14:17:15 <fungot> ...out of stack!
14:18:22 -!- Asphyxia^T_T has left (?).
14:18:50 -!- nddrylliog has left (?).
14:19:16 -!- Lymia has quit (Read error: Connection reset by peer).
14:19:23 <oerjan> ^ul (~a(~a~*((H)S)~*^)*~^):a(~)~(~^)**a(a)~(*)**~*(!)~^
14:19:23 <fungot> ...out of stack!
14:19:30 <oerjan> ^ul (~a(~a~*((H)S)~*^)*~^):a(~)~(~^)**a(a)~(*)**~*
14:19:36 <oerjan> ^ul (~a(~a~*((H)S)~*^)*~^):a(~)~(~^)**a(a)~(*)**~*aSaS
14:19:37 <fungot> (a(~(~a(~a~*((H)S)~*^)*~^)~^)*~a(~a~*((H)S)~*^)*~^) ...out of stack!
14:19:44 -!- Lymia has joined.
14:21:16 <oerjan> ^ul (e1)(e2)a(~)~(~^)**a(a)~(*)**~*aSaS
14:21:16 <fungot> (a(~(e2)~^)*e1) ...out of stack!
14:22:17 <oerjan> ^ul ((~a~*((H)S)~*^)~^):a(~)~(~^)**a(a)~(*)**~*aSaS
14:22:17 <fungot> (a(~((~a~*((H)S)~*^)~^)~^)*(~a~*((H)S)~*^)~^) ...out of stack!
14:25:20 <oerjan> ^ul ((~a(~a~*((H)S)~*^)~*^)~^):a(~)~(~^)**a(a)~(*)**~*aSaS
14:25:20 <fungot> (a(~((~a(~a~*((H)S)~*^)~*^)~^)~^)*(~a(~a~*((H)S)~*^)~*^)~^) ...out of stack!
14:25:51 <oerjan> ^ul ((~a(~a~*((H)S)~*^)~*^)~^):a(~)~(~^)**a(a)~(*)**~*(!)~^
14:25:51 <fungot> ...out of stack!
14:27:36 <oerjan> oh
14:27:42 <oerjan> ^ul ((~a(~a~*((H)S)~*^)*~^)~^):a(~)~(~^)**a(a)~(*)**~*(!)~^
14:27:42 <fungot> H
14:29:23 -!- Lymia_ has joined.
14:31:29 -!- Lymia has quit (Ping timeout: 240 seconds).
14:33:49 <oerjan> ^ul (x):(y)~(z):(~)~:(:)~****aSaS
14:33:49 <fungot> (z~z:z)(x)
14:34:06 <oerjan> ^ul (x):(y)~(z):(~)~:(:)~****aSaSaSaSaS
14:34:06 <fungot> (z~z:z)(x)(y)(x) ...out of stack!
14:34:57 <oerjan> ^ul (s):(i)~(*a):(~)~:(:)~****^
14:35:04 <oerjan> ^ul (s):(i)~(*a):(~)~:(:)~****^aSaS
14:35:04 <fungot> ((((is)s)((is)s))) ...out of stack!
14:35:21 <oerjan> ^ul (i):(s)~(*a):(~)~:(:)~****^aSaS
14:35:21 <fungot> ((((si)i)((si)i))) ...out of stack!
14:35:49 -!- zeotrope has joined.
14:37:05 -!- Lymia_ has quit (Ping timeout: 240 seconds).
14:39:49 <oerjan> ^ul ((~a(~a~*((y)S)~*^)*~^)~^)((~a(~a~*((e)S)~*^)*~^)~^)((~a(~a~*((H)S)~*^)*~^)~^)(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)(~a(~)~(~^)**a(a)~(*)**~*)::**^(!)~^
14:39:49 <fungot> ...out of stack!
14:42:23 <oerjan> ^ul ((~a(~a~*((i)S)~*^)*~^)~^)((~a(~a~*((a)S)~*^)*~^)~^)((~a(~a~*((H)S)~*^)*~^)~^)(~a(~!)~(~^)**a(~a)~(*~^)**~^)(~a(~)~(~^)**a(a)~(*)**~*)::**^(!)~^
14:42:23 <fungot> ...out of stack!
14:42:27 <oerjan> ff
14:42:54 <oerjan> oh wait
14:44:53 <oerjan> ^ul ((~a(~a~*((i)S)~*^)*~^)~^)((~a(~a~*((a)S)~*^)*~^)~^)((~a(~a~*((H)S)~*^)*~^)~^)((~a(~a(~!)~(~^)**a(~a)~(*~^)**~^)*~^)~^)(~a(~)~(~^)**a(a)~(*)**~*)::**^(!)~^
14:44:53 <fungot> H
14:45:57 <oerjan> ^ul ((~a(~a~*((y)S)~*^)*~^)~^)((~a(~a~*((e)S)~*^)*~^)~^)((~a(~a~*((H)S)~*^)*~^)~^)((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)*~^))(~a(~)~(~^)**a(a)~(*)**~*)::**^(!)~^
14:46:04 <oerjan> argh
14:47:08 -!- Lymia has joined.
14:47:22 <oerjan> ^ul ((~a(~a~*((y)S)~*^)*~^)~^)((~a(~a~*((e)S)~*^)*~^)~^)((~a(~a~*((H)S)~*^)*~^)~^)((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)*~^)~^)(~a(~)~(~^)**a(a)~(*)**~*)::**^(!)~^
14:47:22 <fungot> Hey
14:47:41 <oerjan> ^ul ((~a(~a~*((y)S)~*^)*~^)~^)((~a(~a~*((e)S)~*^)*~^)~^)((~a(~a~*((H)S)~*^)*~^)~^)((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)*~^)~^)(~a(~)~(~^)**a(a)~(*)**~*)::**^(aSaS)~^
14:47:41 <fungot> Hey(~a(~a~*((y)S)~*^)*~^) ...out of stack!
14:49:19 -!- fxkr has quit (Quit: leaving).
14:52:50 -!- MigoMipo has joined.
14:56:20 <oerjan> ^ul ((~a(^)~*^)~^):((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^)(a(~)~(~^)**a(a)~(*)**~*):(~)~*:*~(:)~**^(Boo!)~^
14:56:20 <fungot> ...out of stack!
14:56:23 <oerjan> ff
14:57:53 -!- asiekierka has quit (Ping timeout: 276 seconds).
14:58:43 -!- jix has quit (Ping timeout: 264 seconds).
15:02:35 <oerjan> ^ul ((~a(~a~*((y)S)~*^)~*^)~^):((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)~*^)~^)(a(~)~(~^)**a(a)~(*)**~*):(~)~*:*~(:)~**^(Boo!)~^
15:02:35 <fungot> ...out of stack!
15:04:54 <oerjan> ^ul ((~a(~a~*((*)S)~*^)~*^)~^):((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)*~^)~^)(a(~)~(~^)**a(a)~(*)**~*):(~)~*:*~(:)~**^(Boo!)~^
15:04:55 <fungot> ...out of stack!
15:06:39 <oerjan> ^ul ((~a(~a~*((*)S)~*^)*~^)~^):((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)*~^)~^)(a(~)~(~^)**a(a)~(*)**~*):(~)~*:*~(:)~**^(Boo!)~^
15:06:40 <fungot> ************************************************************************************************************************************************************************************************************************************************************************************************************************************ ...too much output!
15:06:45 <oerjan> finally
15:12:47 <Vorpal> oerjan, what are you doing?
15:14:10 <kfr> Vorpal: The usual, abusing #esoteric as his personal REPL
15:14:21 <oerjan> embedding unlambda in underload
15:14:42 <Vorpal> oerjan, hah
15:15:59 <oerjan> ^ul (aSaS)(c):a~(!)~*a(~a)~(*~^)**a*~*^
15:16:00 <fungot> (~a(!c)*~^)(c)
15:16:08 <oerjan> ^ul (aSaSaS)(c):a~(!)~*a(~a)~(*~^)**a*~*^
15:16:08 <fungot> (~a(!c)*~^)(c) ...out of stack!
15:19:37 -!- Phantom__Hoover has joined.
15:31:14 -!- iconmaster has joined.
15:37:07 <Phantom__Hoover> http://programmers.stackexchange.com/questions/3233/why-do-programmers-write-applications-and-then-make-them-free
15:37:10 <Phantom__Hoover> Words fail me.
15:47:04 -!- Lymia_ has joined.
15:47:57 <Phantom__Hoover> http://www.reddit.com/r/math/comments/fg092/number_of_factorizations_of_n/
15:48:11 <Phantom__Hoover> Surely this is just the partition number of the prime factors?
15:49:14 <Phantom__Hoover> i.e. if n has k prime factors, it can be factorised in B_n ways.
15:49:41 -!- Behold has joined.
15:49:51 -!- Lymia has quit (Ping timeout: 240 seconds).
15:50:32 -!- jix has joined.
15:53:09 -!- BeholdMyGlory has quit (Ping timeout: 260 seconds).
15:57:47 <oerjan> Phantom__Hoover: no, some of those might give identical factorizations
15:57:59 <Phantom__Hoover> oerjan, oh, yes.
16:00:13 -!- impomatic has joined.
16:00:16 <impomatic> Hi :-)
16:00:26 <oerjan> hello
16:00:54 -!- Slereah has quit (Ping timeout: 276 seconds).
16:01:14 <impomatic> Has anyone heard of HDNA? It an esoteric language from 1982. I can't find much info about it :-(
16:02:09 <Phantom__Hoover> Oh god, they're making an Atlas Shrugged film.
16:02:41 <Phantom__Hoover> I suppose it'll be good for crowd control.
16:03:03 <iconmaster> impomatic: What was the lang like? Sounds fun.
16:04:07 <iconmaster> impomatic: I see why it's hard to find- I Googled it and the page is swamped with a Sony product.
16:04:40 -!- elliott has joined.
16:04:41 -!- Slereah has joined.
16:04:50 <iconmaster> Elliott! Hello.
16:05:22 <Phantom__Hoover> WHO IS THIS MASTER OF ICONS
16:05:41 <elliott> an expert in Tetris hermeneutics
16:05:46 <elliott> obviously
16:05:47 <elliott> hi
16:06:12 <iconmaster> lol, hi.
16:06:22 <elliott> oerjan: ping
16:06:26 <oerjan> pong
16:06:39 <elliott> olsner: btw i realised that (catbus a b c d) = (catbus 'a | b | c | d')
16:06:42 <iconmaster> Phantom__Hoover: I am the ruler of your little icons on your desktop.
16:06:49 <elliott> and i think accidentally found the best programming paradigm in the process
16:07:00 <impomatic> iconmaster: Basically instructions in the language are pairs of characters which can modify / copy other pairs of characters. I tried to program something in it a long time ago but failed. :-(
16:07:08 <Phantom__Hoover> iconmaster, that's not a very large domain.
16:07:21 <olsner> elliott: indeed
16:07:27 <Phantom__Hoover> elliott, what is the best programming paradigm?
16:07:31 -!- asiekierka has joined.
16:07:40 <iconmaster> Phantom__Hoover: I rule my OWN icons too, and my desktop is kinda cluttered...
16:07:42 <impomatic> The interpreter I had for HDNA was written in BASIC.
16:07:50 <elliott> Phantom__Hoover: the one where one would naturally invent the operator "fix (f.)", not "fix f"
16:08:07 <elliott> :t fix (("y"++).)
16:08:24 <elliott> oerjan: I have made an excellent Underload discovery!
16:08:30 <elliott> lambdabot?
16:08:32 <elliott> oh dear
16:08:38 <oerjan> elliott: hm?
16:08:38 <Phantom__Hoover> Noooooooo
16:08:40 <iconmaster> elliott: pray, tell!
16:09:06 <olsner> what have we done to deserve this? lambdabot!?
16:09:13 <iconmaster> od, dear! where is Lambabot?
16:09:20 * oerjan wrote up on the wiki how to do abstraction elimination in underload
16:09:21 <Phantom__Hoover> He's not in #haskell either!
16:09:30 <iconmaster> I ate him. SOrry guys, i was hungry.
16:09:32 <elliott> oerjan: ((a)(b)(c)(d))(*)*^(::**)(~a*)~^()~^
16:09:35 <olsner> Phantom__Hoover: *she*
16:09:38 <elliott> oerjan: this results in ((a)(b)(cd))
16:09:43 <oerjan> O KAY
16:09:48 <elliott> oerjan: hey
16:09:49 <elliott> oerjan: no wait
16:09:51 <Phantom__Hoover> olsner, SHE IS STILL NOT IN #HASKELL
16:09:53 <elliott> oerjan: this is something like 1/4th of an Underload self-interpreter
16:10:00 <elliott> oerjan: you see that church numeral?
16:10:06 <oerjan> yes
16:10:08 <elliott> oerjan: how you'd actually do it is like this
16:10:09 <olsner> Phantom__Hoover: maybe this is why she left :/
16:10:18 <elliott> oerjan: the stack is: (stack)(size of stack as church numeral)
16:10:20 <elliott> oerjan: to do *, you do
16:10:44 <elliott> oerjan: ((*)*^) dip subtract1 (~a*)~^()~^
16:10:55 <elliott> oerjan: for any instruction, replace * with the appropriate one, and subtract1 with the appropriate stack effect
16:11:11 <elliott> oerjan: this is huge, it means you can do an Underload self-interpreter *metacircularly*
16:11:20 <elliott> oerjan: also, it invalidates ais' claim that you _cannot_ break ((a)(b)(c)(d)) apart
16:11:24 <elliott> you can if you know the length
16:11:34 <oerjan> um sure
16:11:52 <elliott> oerjan: i was really chuffed about figuring this out, why aren't you excited
16:12:00 <elliott> underload self-interp!!!!
16:12:26 <iconmaster> You can break ((a)(b)(c)(d))- can't you just call ^ twice? or am i not getting it?
16:12:34 <oerjan> well it should obviously be possible in a sense
16:12:36 <elliott> iconmaster: erm, break as in break into multiple pieces
16:12:43 <elliott> oerjan: yes but I think I've just shown that it's even _quite easy_
16:12:55 <iconmaster> elliott: oh, lol. Ill just stop talking now.
16:13:06 <elliott> iconmaster: it's ok :)
16:13:35 <elliott> oerjan: btw if the stack is "(stack) (stack size) (operation to do) (function from stack size to new stack size)", then you can do:
16:14:22 <elliott> (~) dip (*^) 2dip ^(~a*)~^()~^
16:14:45 <elliott> (~)~a*^(*^)~a*~a*^^(~a*)~^()~^
16:14:47 <elliott> oerjan: (~)~a*^(*^)~a*~a*^^(~a*)~^()~^
16:14:53 <elliott> that's
16:15:07 <elliott> stack, size, operation, stack size to new stack size --> new stack, new size
16:15:11 <elliott> where stack is ((a)(b)(c)(d)...)
16:15:16 <elliott> with last elements being top
16:15:42 <oerjan> um to me it's pretty obvious that you can emulate things on a list with length
16:15:58 <elliott> oerjan: well sorry for having a revelation unworthy of the underload god :)
16:16:13 <elliott> oerjan: I was thinking about how to do a self-interpreter and this handles everything apart from () and ^ in one go
16:16:46 <elliott> sheesh :P
16:17:02 <oerjan> i'm not actually following your details, anyway
16:17:13 <elliott> oerjan: what part don't you get? or do you mean you're ignoring :P
16:20:00 <elliott> oerjan: sheehs :|
16:20:19 <oerjan> elliott: um i think you want (~a~*), not (~a*), otherwise you reverse the list
16:20:25 <elliott> er right
16:20:43 <elliott> er are you _sure_
16:20:47 <elliott> (a)(b)(c)(d)()
16:20:49 <elliott> (a)(b)(c)()(d)
16:20:54 <elliott> (a)(b)(c)()((d))
16:20:56 <elliott> oh right yes
16:20:59 <elliott> (~)~a*^(*^)~a*~a*^^(~a~*)~^()~^
16:21:16 <iconmaster> I think my Lua Underload interpreter works, and the Look-and-say sequence program is wrong somehow. The fibbonchi sequence AND the thue-morse sequence works.
16:21:21 <elliott> oerjan: what's subtract for underload numerals?
16:21:30 <elliott> iconmaster: show code again? :p
16:21:33 <elliott> look and say is not broken
16:21:41 <iconmaster> ok ill pastebin iut
16:21:49 <elliott> ^ul ((a)(b)(c))(::**)(*)(SUBTRACT)(~)~a*^(*^)~a*~a*^^(~a~*)~^()~^SS
16:21:49 <fungot> ~a~* ...bad insn!
16:21:54 <elliott> ^ul ((a)(b)(c))(::**)(*)(SUBTRACT)(~)~a*^(*^)~a*~a*^^(~a~*)~^()~^aSaS
16:21:54 <fungot> ~a~* ...bad insn!
16:22:09 <elliott> oerjan: i muuuust knoooow
16:22:29 <iconmaster> http://pastebin.com/qHVsusrg
16:22:56 <oerjan> subtract is a little tricky
16:22:59 <elliott> ^ul (s2)(s1)*S
16:22:59 <fungot> s2s1
16:23:05 <elliott> iconmaster: table.insert(stack,s2..s1)
16:23:06 <elliott> in the * rule
16:23:11 -!- Phantom__Hoover has quit (Quit: Leaving).
16:23:55 <elliott> the rest looks ok, though i can't see whether your ( is right or not based on a quick glance
16:24:09 <elliott> iconmaster: also note that you don't error out when an invalid instruction is executed
16:24:21 <oerjan> hm...
16:24:50 <elliott> oerjan: I only need decrement
16:24:50 <elliott> not subtract
16:25:00 <oerjan> ok that's a bit easier
16:26:36 <elliott> ^ul (aS(:^)S):^
16:26:36 <fungot> (aS(:^)S):^
16:26:48 <elliott> i think (:aSS):aSS is the shortest possible quine
16:29:58 <oerjan> ^ul (!())(!(~(:)~(*)**~)))(:^)(::::****)^^aS
16:29:58 <fungot> ...bad insn!
16:30:01 <oerjan> argh
16:30:21 <oerjan> ^ul (!())(!(~(:)~(*)**~))(:^)(::::****)^^aS
16:30:21 <fungot> (~(:)~(*)**~)
16:30:26 <oerjan> er
16:30:30 <oerjan> ^ul (!())(!(~(:)~(*)**~))(:^)(::::****)^^!aS
16:30:30 <fungot> (::::!()****)
16:30:48 <oerjan> hm maybe not the _optimal_ representation
16:30:55 <oerjan> not to mention it didn't work
16:31:03 * iconmaster back
16:31:09 <oerjan> or wait did it
16:31:48 <oerjan> ^ul (!())(!(!(~(:)~(*)**~)))(:^)(::::****)^^!aS
16:31:48 <fungot> (:::!()***)
16:32:09 <oerjan> off by one error :)
16:32:10 -!- jix has quit (Read error: Operation timed out).
16:32:19 <elliott> ul ((a)(b)(c))(::**)(*)(SUBTRACT)(~)~a*^(*^)~a*~a*^^(~a~*)~^()~^aSa
16:32:24 <iconmaster> elliott: But if I reverse the * then all the OTHER program break... it's probably in the ().
16:32:26 <elliott> ((a)(b)(c))(::**)(*)(DECREMENT)(~)~a*^(*^)~a*~a*^^(~a~*)~^()~^aSa
16:32:27 <elliott> rather
16:32:30 <elliott> will simulate a *
16:32:35 <elliott> iconmaster: possibly.
16:33:45 -!- jix has joined.
16:33:49 <oerjan> ^ul (!())(!(~(:)~(*)**~))(a(!)~*)(::**)^^(:^)(::::****)^^!aS
16:33:49 <fungot> (:!()*)
16:33:54 <elliott> http://esolangs.org/wiki/Slashes has a hueg horizontal scroll
16:35:53 <oerjan> ^ul (!())(!(!(~(:)~(*)**~)))(a(!)~*)(::**)^^(:^)(::::****)^^!aS
16:35:53 <fungot> (!())
16:35:58 <oerjan> oops
16:36:07 <oerjan> ^ul (!())(~(:)~(*)**~)(a(!)~*)(::**)^^(:^)(::::****)^^!aS
16:36:07 <fungot> (::!()**)
16:36:12 <elliott> oerjan: is this meant to be *subtract*?
16:36:14 <elliott> *decrement
16:36:24 <elliott> i thought underload was _elegant_ :)
16:36:37 <iconmaster> Say, what is the look-and-say sequence program SUPPOSED to print out?
16:36:39 <oerjan> yes, i realized while fixing my off by one error that _iterating_ the fix would subtract
16:36:53 <elliott> iconmaster: 1, 11, 21, 1211
16:36:56 <elliott> 111221
16:37:02 <elliott> 312211
16:37:07 <elliott> 13112221
16:37:12 <elliott> 1113213211
16:37:15 <elliott> (done manually)
16:37:16 <iconmaster> elliott: It DEFINATLY isnt doing that.
16:37:32 <elliott> ^ul ((:))(:::***)^S
16:37:32 <fungot> (:)(:)(:)(:)
16:38:18 <elliott> ^ul (:::***):((:))~^~((*))~^SS
16:38:18 <fungot> (*)(*)(*)(*)(:)(:)(:)(:)
16:38:25 <elliott> ^ul (:::***):((:))~^~((*))~^~SS
16:38:25 <fungot> (:)(:)(:)(:)(*)(*)(*)(*)
16:38:32 <elliott> ^ul (:::***):((:))~^S
16:38:32 <fungot> (:)(:)(:)(:)
16:38:38 <elliott> ^ul (:::***):((:))~^(!)*S
16:38:38 <fungot> (:)(:)(:)(:)!
16:38:47 <elliott> ^ul (:::***):((:))~^(!!)*S
16:38:47 <fungot> (:)(:)(:)(:)!!
16:38:51 <elliott> hm
16:38:56 -!- jix has quit (Remote host closed the connection).
16:38:57 <elliott> oerjan: unfortunately i can't use my stack trick to do decrement
16:39:00 -!- jix has joined.
16:39:01 <elliott> because it requires decrement :)
16:39:06 <elliott> to figure out how many :s to pop
16:40:05 <elliott> ^ul (:::***)(:)~^S
16:40:05 <fungot> ::::
16:40:07 -!- jix has quit (Read error: Connection reset by peer).
16:40:14 <elliott> ^ul (:::***)(:)~^(!())*S
16:40:15 <fungot> ::::!()
16:40:21 <elliott> ^ul (:::***):(:)~^(!())*S
16:40:21 <fungot> ::::!()
16:40:22 <elliott> ^ul (:::***):(:)~^(!())*SS
16:40:22 <fungot> ::::!():::***
16:40:38 <elliott> ^ul (:::***):(:)~^(!())*S~(*)~
16:40:38 <fungot> ::::!() ...out of stack!
16:40:43 <iconmaster> elliott: look-and-say only works if * is reversed... but no OTHER program works if * is reversed.
16:40:51 <elliott> iconmaster: o_O
16:40:55 <iconmaster> wierd.
16:40:57 <elliott> ^ul (:::***):(:)~^(!())*~(*)~^
16:40:59 <elliott> ^ul (:::***):(:)~^(!())*~(*)~^SS
16:40:59 <fungot> ****::::!()
16:41:15 <elliott> ^ul (:::***):(*)~^~(:)~^(!())*SS
16:41:15 <fungot> ::::!()****
16:41:19 <elliott> ^ul (:::***):(*)~^~(:)~^(!())**S
16:41:19 <fungot> ****::::!()
16:41:25 <elliott> ^ul (:::***):(*)~^~(:)~^(!())*S
16:41:26 <fungot> ::::!()
16:41:28 <elliott> o_O
16:41:36 <oerjan> iconmaster: have you tested all your individual functions?
16:41:40 <elliott> ^ul (:::***):(:)~^(!())*~(*)~^~SS
16:41:40 <fungot> ::::!()****
16:41:43 <elliott> ^ul (:::***):(:)~^(!())*~(*)~^~*S
16:41:44 <fungot> ****::::!()
16:41:52 <iconmaster> elliott: Wait, the others work too!
16:41:59 <elliott> iconmaster: lol
16:42:15 <elliott> ^ul (:::***):(*)~^~(:)~^SS
16:42:15 <fungot> ::::****
16:42:17 <elliott> ^ul (:::***):(*)~^~(:)~^*S
16:42:17 <fungot> ****::::
16:42:19 <elliott> GAH
16:42:23 <elliott> ^ul (:::***):(:)~^~(*)~^*S
16:42:24 <fungot> ::::****
16:42:29 <elliott> ^ul (:::***):(:)~^(!())*~(*)~^*S
16:42:29 <fungot> ::::!()****
16:42:31 -!- jix has joined.
16:42:32 <elliott> there
16:42:32 <elliott> oerjan: ^
16:42:35 <elliott> decrement
16:42:38 <elliott> ^ul (:::***):(:)~^(!())*~(*)~^*SS
16:42:38 <fungot> ::::!()**** ...out of stack!
16:42:44 <elliott> :(:)~^(!())*~(*)~^*
16:42:52 <elliott> wait no
16:42:58 <elliott> ^ul (:::***):(:)~^(!()!())*~(*)~^*SS
16:42:58 <fungot> ::::!()!()**** ...out of stack!
16:43:01 <elliott> decrement.
16:43:19 <elliott> ^ul ((a)(b)(c))(::**)(*)(:(:)~^(!()!())*~(*)~^*)(~)~a*^(*^)~a*~a*^^(~a~*)~^()~^aSa
16:43:19 <fungot> ...bad insn!
16:43:23 <elliott> >_<
16:43:51 <elliott> oerjan: isn't that decrement?
16:44:35 <oerjan> possibly
16:44:54 <oerjan> um wait !()!() = !()
16:45:00 <elliott> !!()() then
16:45:04 <elliott> you ungrateful scum :|
16:46:28 <elliott> @hoogle (b -> c) -> (t -> a -> b) -> t -> a -> c
16:47:04 <elliott> argh
16:47:15 <Deewiant> (.).(.)
16:47:25 <oerjan> :t (.).(.)
16:47:28 <iconmaster> elliot: I wonder why it broke the FIRST time I reversed * and not the second... 0_o
16:47:30 <oerjan> arghmore
16:47:40 <Deewiant> (.).(.) :: (b -> c) -> (a -> a1 -> b) -> a -> a1 -> c
16:47:57 <elliott> Deewiant: I was hoping someone had given the "titties operator" a more pleasing name.
16:48:03 <elliott> iconmaster: gremlins
16:48:13 <iconmaster> lol! Definatly gremlins.
16:48:15 <Deewiant> (.:), but it's not exported from anywhere I know of.
16:49:51 <impomatic> iconmaster: It turns out that HDNA is another name for Typogenetics http://www.csse.monash.edu.au/hons/projects/1999/Andrew.Snare/thesis.pdf
16:49:59 -!- Lymia_ has changed nick to Lymia.
16:50:00 -!- Lymia has quit (Changing host).
16:50:00 -!- Lymia has joined.
16:50:30 <iconmaster> impomatic: Good find! leme take a look.
16:52:29 <impomatic> iconmaster: There's a section on it in Goedel, Escher, Bach if you have a copy
16:54:50 <elliott> note: your copy may have collapsed into a singularity under its own mass
16:57:16 <Vorpal> elliott, have you read GEB?
16:57:22 <elliott> yes
16:57:29 <Vorpal> elliott, how many pages is it?
16:57:30 <elliott> it's...yeah
16:57:35 <elliott> over 700, below 800
16:57:38 <Vorpal> ah
16:57:49 -!- zeotrope has quit (Ping timeout: 240 seconds).
16:57:51 <elliott> i mostly skipped over the long rewriting proofs of logical statements
16:57:56 <elliott> they were quite dull
16:57:59 <Vorpal> heh
16:58:21 -!- hagb4rd has joined.
16:58:29 <Vorpal> elliott, what is the book actually about. I haven't really understood that from hearing about it
16:59:09 <elliott> It's, er, about.
16:59:09 <elliott> Umm.
16:59:11 <elliott> It's a book.
16:59:13 <elliott> A book with pages.
16:59:15 <elliott> Any questions?
16:59:21 <Vorpal> elliott, yes!
16:59:38 <elliott> Vorpal: Then I refer you to Chris Pressey's review.
16:59:49 <elliott> Vorpal: http://esolangs.org/wiki/User:Chris_Pressey#G.C3.B6del.2C_Escher.2C_Bach:_An_Eternal_Golden_Braid
17:00:11 <Vorpal> elliott, is it a bit about everything? The way that for example science of discworld books can cover everything from evolution and steam engines to Cantor's various proofs
17:00:25 <elliott> Vorpal: More like: it's about nothing.
17:00:29 <Vorpal> elliott, aha
17:00:31 <elliott> WHICH IS EVERYTHING
17:00:33 <elliott> Or something.
17:00:38 <Vorpal> right. I see what you mean
17:00:51 <oerjan> ^ul (a(~)~(~^)**a(a)~(*)**~*)::((~a(:a~(!)~*a(~a)~(*~^)**a*~*^)*~^)~^)~(((a(~)*~a(~^)*a(~^)**)~*a(~a)~(*~^)**~^)~^)~^a~*:((~a(~a~*(( )S)~*^)*~^)~^)~^a~((~a(~a~*((*)S)~*^)*~^)~^)~^a*~*^
17:00:53 <hagb4rd> o night of pan!
17:01:00 <elliott> what
17:01:06 <elliott> erm, my mouse isn't moving any more
17:01:09 <elliott> that's quite worrying
17:01:11 <oerjan> dammit
17:01:20 <oerjan> oh wait duh
17:01:26 <oerjan> ^ul (a(~)~(~^)**a(a)~(*)**~*)::((~a(:a~(!)~*a(~a)~(*~^)**a*~*^)*~^)~^)~(((a(~)*~a(~^)*a(~^)**)~*a(~a)~(*~^)**~^)~^)~^a~*:((~a(~a~*(( )S)~*^)*~^)~^)~^a~((~a(~a~*((*)S)~*^)*~^)~^)~^a*~*^(!)~^
17:01:27 <fungot> * ...out of stack!
17:01:47 <oerjan> >_<
17:01:57 <elliott> what are you _doing_
17:02:15 <oerjan> translating unlambda into underload
17:02:35 -!- elliott has quit (Read error: Connection reset by peer).
17:02:42 -!- elliott has joined.
17:02:51 <Vorpal> elliott, he seem to uh... like or dislike A New Kind of Science in that list XD
17:02:53 <Vorpal> hard to tell
17:02:59 <elliott> Vorpal: EVER-LOVIN' MIND
17:03:10 <elliott> oerjan: couldn't you just regexp it with http://esolangs.org/wiki/Underload#Unlambda_to_Underload
17:03:13 <elliott> well
17:03:17 <Vorpal> elliott, I thought everything with Wolfram was basically silly?
17:03:21 <elliott> Vorpal: EVER
17:03:22 <elliott> LOVIN'
17:03:22 <elliott> MIND
17:03:34 <elliott> oerjan: is there an unlambda self-interp that doesn't use d or c? :D
17:03:42 -!- cheater- has quit (Ping timeout: 255 seconds).
17:03:44 <Vorpal> bbl food
17:04:07 <oerjan> i don't know, i know there's another self-interp but haven't really looked at it
17:04:17 <oerjan> actually a couple others, i think
17:04:19 -!- cheater- has joined.
17:06:11 <oerjan> ^ul (*a)::(c)~(d)~^a~*:(. )~^a~(.*)~^a*~*^aSaS
17:06:11 <fungot> (((. (cd))(.*(cd)))) ...out of stack!
17:06:19 <elliott> :D
17:06:32 <elliott> aSSaSSination
17:06:40 <oerjan> dammit i did not mess up that part
17:08:41 <impomatic> This blog seems to cover Typogenetics http://typogenimages.wordpress.com
17:10:56 <elliott> that guy seems a bit obsessed :-)
17:11:08 <elliott> interesting posts though
17:12:29 <Vorpal> <oerjan> dammit i did not mess up that part <-- uh did you want to mess it up?
17:12:40 <elliott> yes
17:13:08 <oerjan> it would have been simpler to fix :D
17:13:29 <oerjan> hm let me check...
17:14:46 <oerjan> ^ul (a(~)~(~^)**a(a)~(*)**~*)::((~a(:a~(!)~*a(~a)~(*~^)**a*~*^)*~^)~^)~((~a(^)*~^)~^)~^a~*:((~a(~a~*(( )S)~*^)*~^)~^)~^a~((~a(~a~*((*)S)~*^)*~^)~^)~^a*~*^
17:14:52 <oerjan> ^ul (a(~)~(~^)**a(a)~(*)**~*)::((~a(:a~(!)~*a(~a)~(*~^)**a*~*^)*~^)~^)~((~a(^)*~^)~^)~^a~*:((~a(~a~*(( )S)~*^)*~^)~^)~^a~((~a(~a~*((*)S)~*^)*~^)~^)~^a*~*^(!)~^
17:14:53 <fungot> ...out of stack!
17:15:04 <oerjan> ^ul (a(~)~(~^)**a(a)~(*)**~*)::((~a(:a~(!)~*a(~a)~(*~^)**a*~*^)*~^)~^)~((~a(^)*~^)~^)~^a~*:((~a(~a~*(( )S)~*^)*~^)~^)~^a~((~a(~a~*((*)S)~*^)*~^)~^)~^a*~*^aSaS
17:15:04 <fungot> (a(~(a(~(a(~((~a(^)*~^)~^)~^)*(~a(:a~(!)~*a(~a)~(*~^)**a*~*^)*~^)~^)~^)*(~a(~a~*((*)S)~*^)*~^)~^)~^)*a(~(a(~((~a(^)*~^)~^)~^)*(~a(:a~(!)~*a(~a)~(*~^)**a*~*^)*~^)~^)~^)*(~a(~a~*(( )S)~*^)*~^)~^) ...out of stack!
17:15:53 <elliott> @unpl (.).(.)
17:15:57 <elliott> argh
17:16:36 <oerjan> ^ul (a(~)~(~^)**a(a)~(*)**~*)::((~a(^)*~^)~^)~((~a(^)*~^)~^)~^a~*:((~a(~a~*(( )S)~*^)*~^)~^)~^a~((~a(~a~*((*)S)~*^)*~^)~^)~^a*~*^
17:16:42 <oerjan> ^ul (a(~)~(~^)**a(a)~(*)**~*)::((~a(^)*~^)~^)~((~a(^)*~^)~^)~^a~*:((~a(~a~*(( )S)~*^)*~^)~^)~^a~((~a(~a~*((*)S)~*^)*~^)~^)~^a*~*^(!)~^
17:16:43 <fungot> *
17:17:25 <elliott> Haskell challenge: write
17:17:32 <elliott> minimise :: (Ord b) => (a -> b) -> [a] -> a
17:17:36 <elliott> and
17:17:37 <elliott> maximise :: (Ord b) => (a -> b) -> [a] -> a
17:17:40 <elliott> point-free.
17:17:49 <elliott> (You can use .:)
17:17:53 <elliott> I had
17:17:55 <elliott> maximum .: map
17:17:56 <elliott> and
17:17:58 <elliott> minimise .: map
17:18:01 <elliott> but they return the function result.
17:18:01 <oerjan> ^ul (a(~)~(~^)**a(a)~(*)**~*)::((~a(^)*~^)~^)~(((a(~)*~a(~^)*a(~^)**)~*a(~a)~(*~^)**~^)~^)~^a~*:((~a(~a~*(( )S)~*^)*~^)~^)~^a~((~a(~a~*((*)S)~*^)*~^)~^)~^a*~*^(!)~^
17:18:01 <fungot>
17:18:43 <oerjan> ok d is working
17:18:45 <elliott> THAT'S NOT AN ATTEMPT
17:20:15 -!- Phantom_Hoover has joined.
17:20:36 -!- cheater- has quit (Ping timeout: 240 seconds).
17:20:53 <oerjan> aren't there *By versions of those functions
17:20:54 <oerjan> ?
17:21:04 <elliott> oerjan: yes, but you want *On... but pretend the By versions don't exist
17:21:48 -!- cheater- has joined.
17:21:57 <elliott> i can't get it elegant even with By anyway
17:22:31 -!- impomatic has quit (Quit: ChatZilla 0.9.86 [Firefox 3.5.16/20101130074636]).
17:23:22 <elliott> so anyway, is it any coincidence that the way catbus operates made me realise that Underload is the perfect programming language???
17:23:31 <elliott> I think: NOT
17:26:16 <elliott> olsner: btw I simplified the yes implementation
17:26:24 <elliott> $ catbus 'echo y; tee /dev/fd/2' 2>&1
17:26:26 <elliott> no need for cat
17:27:07 <olsner> but instead you have tee, which does more than cat? :)
17:27:23 <quintopia> not instead
17:27:24 <elliott> olsner: I already had te
17:27:24 <elliott> *tee
17:27:28 <elliott> it was
17:27:35 <elliott> $ catbus '(echo y; cat) | tee /dev/fd/2' 2>&1
17:27:41 <elliott> but then i realised that that was redundant
17:28:03 <elliott> olsner: also, I realised that from a functional perspective,
17:28:12 <elliott> catbus p = p | p | p | p | ...
17:28:13 <elliott> not
17:28:20 <elliott> catbus p = ... | p | p | p | p | ...
17:28:30 <elliott> olsner: because the former is actually equivalent, thanks to the fact that it's the same p
17:28:35 <elliott> even though the "first" p never gets any input
17:28:58 <oerjan> ^ul (a(~)~(~^)**a(a)~(*)**~*)::(:a~(!)~*a(~a)~(*~^)**a(~^)*a*~*^)~(((a(~)*~a(~^)*a(~^)**)~*a(~a)~(*~^)**~^)~^)~^a~*:((~a(~a~*(( )S)~*^)*~^)~^)~^a~((~a(~a~*((*)S)~*^)*~^)~^)~^a*~*^(!)~^
17:28:58 <fungot> ...out of stack!
17:29:05 <oerjan> *facepalm*
17:29:15 <elliott> oerjan: you may want to use an implementation with a debugger :)
17:29:52 <oerjan> oh wait of course
17:31:30 <oerjan> ^ul (a(~)~(~^)**a(a)~(*)**~*)::((~a(:a~(!)~*a(~a)~(*~^)**a(~^)*a*~*^)*~^)~^)~(((a(~)*~a(~^)*a(~^)**)~*a(~a)~(*~^)**~^)~^)~^a~*:((~a(~a~*(( )S)~*^)*~^)~^)~^a~((~a(~a~*((*)S)~*^)*~^)~^)~^a*~*^(!)~^
17:31:39 <fungot> * ** *** **** ***** ****** ******* ******** ********* ********** *********** ************ ************* ************** *************** **************** ***************** ****************** ******************* ******************** ********************* ********************** *********************** ************************ ...too much output!
17:31:43 <oerjan> YES!
17:31:52 <elliott> oerjan: :D
17:31:56 * oerjan does a happy dance
17:31:58 <elliott> oerjan: so was that all manual
17:32:02 <elliott> and therefore wasted effort
17:32:08 <elliott> or do you have a program to do it
17:32:20 <elliott> :P
17:32:25 <elliott> (wasted but cool effort, mind)
17:32:26 <oerjan> um it's manual because i'm constructing the translation...
17:32:36 <elliott> oerjan: right. i would construct it by writing a program :P
17:32:37 <oerjan> i thought i'd put it on the wiki
17:32:53 <elliott> oerjan: you have to write a program! because then you can translate a self-interp!
17:32:53 <elliott> wait
17:32:55 <elliott> does it even do c?
17:33:11 <Vorpal>
17:33:14 <Vorpal> err
17:33:24 <oerjan> elliott: that thing above was ``. `cd`.*`cd
17:33:32 <Vorpal> <elliott> oerjan: you may want to use an implementation with a debugger :) <-- You. Suggesting a debugger. What happened to you?
17:33:40 <elliott> oerjan: subtle cough
17:33:46 <elliott> Vorpal: by debugger, i mean it prints a stack trace every instruction
17:33:51 <elliott> debugger, not interactive debugger
17:33:53 <Vorpal> elliott, hm okay
17:34:26 <Vorpal> elliott, so you prefer cfunge over ccbi then? cfunge has a non-interactive debugger. CCBI has an interactive one
17:34:42 <elliott> well it depends on the language. for befunge, the best debugger is a graphical one
17:34:50 <elliott> that shows the ips moving about the field (at reduced/stepping pace)
17:34:57 <elliott> and has all the various info about the code to the right hand side
17:35:01 <elliott> and allows you to modify fungespace to test things
17:35:04 <Vorpal> elliott, with befunge-98 that can be problematic
17:35:06 <Vorpal> due to the size
17:35:15 <elliott> Vorpal: that's why i said stepping
17:35:19 <elliott> you'd also have some key to bounce about the iPs
17:35:19 <quintopia> that is how my spiral ide looked...
17:35:20 <elliott> *IPs
17:35:22 <Vorpal> hm
17:35:25 <elliott> so you could quickly jump there
17:35:31 <elliott> I could easily imagine debugging fungot like that
17:35:32 <fungot> elliott: i've heard that nowadays, fnord from scientistians are more common :) though i like what i've seen online ( while i was finishing up the vector shuffling, some bastards started solving it
17:35:39 <elliott> Vorpal: oh and it'd have to allow going backwards in time
17:35:40 <elliott> obviously
17:36:02 <oerjan> elliott: once each function is constructed the translation is just search-and-replace, plus moving ` postfix, just like with the simpler ski version already on the underload page
17:36:09 <Vorpal> elliott, well okay. So you want an interactive debugger then
17:36:21 <elliott> Vorpal: hardly anything like gdb
17:36:24 <elliott> more like a live evaluation environment
17:36:34 <elliott> also if the debugger's input language is an esolang then i'm all for it
17:36:39 <elliott> oerjan: cool
17:36:40 <Vorpal> elliott, genera-style?
17:36:48 <elliott> Vorpal: no, befunge-debugger-style :P
17:36:54 <Vorpal> well duh
17:36:59 <elliott> hm i vaguely feel like writing a -98 interp now
17:37:28 <quintopia> there should be an easier way to debug multithreaded c programs...
17:37:30 * elliott reads the Fungicide rankings
17:37:33 <quintopia> recommendations?
17:37:33 <elliott> ha ha ccbi is faster than cfunge
17:37:37 <elliott> quintopia: yes: don't use threads
17:37:47 <quintopia> elliott: not an option
17:37:53 <elliott> not using threads is always an option
17:37:58 <elliott> it's the option of sanity
17:38:13 <quintopia> when the project is to implement a scheduler in a prebuilt thread system
17:38:18 <quintopia> not an option
17:38:24 <quintopia> best way to debug?
17:38:26 <elliott> that doesn't sound something very debuggable at all.
17:38:31 <elliott> use printf.
17:38:32 <elliott> and trial and error.
17:38:33 <quintopia> yeah
17:38:34 <elliott> and think.
17:38:38 <quintopia> sucks
17:38:48 <elliott> easier than stepping through a complex, vaguely nondeterministic execution trail
17:39:19 <quintopia> bleh
17:41:06 <elliott> Vorpal: will you eat your hat if I can get an elegant, functional funge-98 interpreter faster than cfunge?
17:41:09 <elliott> god i hope fusion is good
17:41:27 <Vorpal> elliott, I don't believe that is impossible
17:41:34 <Vorpal> elliott, further I don't have a hat
17:41:34 <elliott> Vorpal: but worthy of hat-eating?
17:41:36 <elliott> buy one
17:41:39 <elliott> and eat it
17:41:41 <elliott> if i can
17:41:47 <Vorpal> elliott, no
17:42:02 <elliott> you suck
17:43:17 <Vorpal> elliott, but I promise to eat Gregor's tricorne if he sends it to me and you manage to do this and implement TRDS and every other fingerprint in existence currently
17:43:28 <Vorpal> elliott, and manage to complete it this year
17:43:31 <Vorpal> that is important
17:43:40 <Vorpal> you can't put it off forever you see
17:43:47 <elliott> Vorpal: ah, clearly I will implement no MKRY fingerprints, as an err... memorial!
17:43:54 <Vorpal> elliott, wrong!
17:43:57 <elliott> the fact that this keeps my sanity fully intact is ENTIRELY coincidental
17:44:00 <Vorpal> elliott, you will do them all
17:44:05 <Vorpal> or it isn't fair
17:44:12 <elliott> no! that would be ... insulting!
17:44:23 <Vorpal> elliott, then there is no hat eating that will happen
17:44:30 <elliott> YOU'RE LAME
17:44:34 <Vorpal> elliott, so are you
17:44:38 <elliott> you're lamer
17:44:41 <Vorpal> elliott, TRDS is fun
17:44:43 <elliott> lamerest
17:44:47 <elliott> most enlaming
17:44:54 <elliott> so hey, those bounds things
17:45:01 <elliott> how do the bounds go boundy
17:45:02 <elliott> i mean like
17:45:07 <Vorpal> elliott, why are you introducing yourself to me?
17:45:07 <elliott> i remember some special shrinking thing
17:45:35 <elliott> HOW THE BOUNDS SHRINK
17:45:40 <Vorpal> elliott, what bounds
17:45:44 <elliott> with y
17:45:47 <elliott> you have to report minimum bounds or something
17:45:52 <elliott> by keeping track
17:45:53 <elliott> or something
17:45:58 <Vorpal> elliott, uh with the y instruction?
17:46:02 <elliott> i dunno man
17:46:03 <Vorpal> oh THAT!
17:46:03 <Vorpal> :D
17:46:07 <elliott> hurrrf
17:46:20 <elliott> yeah so like i remember being told that like
17:46:24 <elliott> YOU MUST PLAN FOR THIS
17:46:24 <Vorpal> elliott, you need to track the outer bounding rectangle
17:46:26 <elliott> FROM THE VERY START
17:46:29 <elliott> and i'm like
17:46:29 <elliott> okay how
17:46:31 <Vorpal> elliott, and shrink it as required
17:46:45 <elliott> okay, but that seems like it'd require conditioning on every write
17:46:45 <elliott> well
17:46:49 <Vorpal> elliott, how, well you could recalculate the bounding box around non-space every time
17:46:52 <elliott> only if x or y are in the maximum
17:46:53 <elliott> thing
17:46:54 <elliott> i.e.
17:46:54 <Vorpal> or you could do it smarter
17:46:57 <elliott> only if you remove from a boundary
17:46:57 <elliott> i guess
17:47:06 <elliott> and then i could just scan that one column
17:47:07 <elliott> or row
17:47:12 <elliott> and see if there's any shit left
17:47:13 <elliott> and if so shrink it
17:47:19 <Vorpal> elliott, cfunge tracks a count for each row and column for set cells
17:47:27 <Vorpal> to make this fast
17:48:18 <elliott> right
17:48:30 <Vorpal> elliott, I'm sure there are other ways to do it
17:48:40 <elliott> has mycelium been taken yet?
17:48:41 <elliott> as a name
17:48:45 <Vorpal> think so
17:48:50 <elliott> shiro it is
17:48:51 <Vorpal> wasn't it some other test suite?
17:48:58 <elliott> i think so
17:49:06 <Vorpal> elliott, anyway you also have to beat the speed of jitfunge for proper hat eating!
17:49:11 <elliott> fuck you :P
17:49:25 <elliott> ok, so i'll implement Vector
17:49:27 <Vorpal> elliott, actually hat eating if you get within 2% of it or such :P
17:49:28 <elliott> used for coords, velocity
17:49:41 <elliott> ooh
17:49:45 <elliott> evil, terrible, amazing idea
17:49:49 <Vorpal> what
17:49:55 <elliott> use type-level peano numerals to specify number of dimensions
17:50:03 <Vorpal> haha
17:50:04 -!- Lymia_ has joined.
17:50:05 <elliott> Vector (S (S Z)) is (a,b,c)
17:50:10 <elliott> erm
17:50:11 <elliott> (a,b)
17:50:13 <elliott> Vector (S (S (S Z))) is (a,b,c)
17:50:15 <elliott> :D
17:50:15 <elliott> naw
17:50:20 <Vorpal> elliott, you realise that you only need befunge and trefunge as such
17:50:21 <elliott> I'll just make it 2D for now
17:50:24 <elliott> easy enough to extend it later
17:50:28 <quintopia> "html5 is a nice step towards sanity, if you close your eyes to most of the spec"
17:50:34 -!- Lymia has quit (Disconnected by services).
17:50:35 <Vorpal> hah
17:50:36 <iconmaster> elliott: Want it to be A) fast, and B) impossibly impossible to mkae? do it in ASSEMBLY! (lol,jk)
17:50:41 <iconmaster> *make
17:50:41 <elliott> iconmaster: nothx
17:50:43 <elliott> :P
17:50:46 <elliott> <3 haskell
17:50:54 <elliott> Vorpal: yeah, but i want to be the first interp to support N-dimensional programs _efficiently_
17:51:02 <elliott> Vorpal: as opposed to, say, Language::Befunge, which does it VERY SLOWLY
17:51:06 <elliott> or whatever it's called now
17:51:16 <Vorpal> elliott, Language::Befunge did *everything* very slowly
17:51:22 <elliott> indeed
17:51:48 <Vorpal> elliott, so it was *relatively* efficient at n-dimensional!
17:52:46 <oerjan> ^ul ((~a(~a~*((z)S)~*^)*~^)~^)((~a(~a~*((y)S)~*^)*~^)~^)((~a((a(:^)*a(~a)~(*~^)**(~!)~(~^)**^):^)*~^)~^)((~a(~a~*((x)S)~*^)*~^)~^)(~a(~)~(~^)**a(a)~(*)**~*)(::**)^^(!)~^
17:52:46 <fungot> x ...out of stack!
17:53:27 <oerjan> i simply cannot get this right on the first try, can i
17:53:39 * elliott defines cells first
17:53:42 <elliott> as Int32s
17:54:06 <Phantom_Hoover> Wait, efficient and in Haskell?
17:54:20 <elliott> Phantom_Hoover: YES
17:54:24 <elliott> Haskell code can be pretty fast.
17:54:28 <Phantom_Hoover> I KNOW
17:54:35 <elliott> Vorpal: Fingerprint proposal: LAZY
17:54:44 <Vorpal> elliott, how would it work
17:54:54 <elliott> Vorpal: Makes the entire evaluation lazy.
17:55:04 <Vorpal> elliott, yes okay but /how/
17:55:07 <elliott> Vorpal: <thing that loops forever>30 30p would evaluate instantly.
17:55:10 <elliott> 30 30g would then do the same.
17:55:14 <elliott> Only when you tried to output the result, would it hang.
17:55:19 <elliott> This applies to every single operation.
17:55:22 <elliott> Including those in other fingerprints.
17:55:22 <Vorpal> elliott, how could you tell that something loops forever
17:55:25 <elliott> Vorpal: ...
17:55:28 <elliott> Phantom_Hoover: Shoot Vorpal.
17:55:38 * Phantom_Hoover shoots Vorpal.
17:55:41 <Vorpal> oh wait misread you
17:55:52 <elliott> ah, shooting makes Vorpal understand things
17:55:56 <elliott> noted
17:56:02 <Vorpal> no it happened just before
17:56:09 <Vorpal> elliott, anyway, how could you ensure that thread interaction would work here
17:56:13 <elliott> ah. it clearly goes back in time and makes you understand.
17:56:15 <Phantom_Hoover> My bullets are made of understandium.
17:56:18 <elliott> Vorpal: difficulty. or do i mean badly?
17:56:24 <elliott> *difficultly.
17:56:25 <Phantom_Hoover> *retrounderstandium
17:56:50 <elliott> hmm
17:56:52 -!- impomatic has joined.
17:56:52 <Vorpal> Phantom_Hoover, you mean understoodium
17:56:53 <oerjan> ^ul ((~a(~a~*((y)S)~*^)*~^)~^)((~a((a(:^)*a(~a)~(*~^)**(~!)~(~^)**^):^)*~^)~^)(~a(~)~(~^)**a(a)~(*)**~*)^(!)~^
17:56:54 <fungot> ...out of stack!
17:57:00 <elliott> is there a better name for the Cell^D where D=dimensions pairs than "Vector"?
17:57:06 -!- asiekierka has quit (Read error: Operation timed out).
17:57:07 <elliott> what do ccbi/cfunge call it
17:57:19 <Vorpal> elliott, cell as in a value?
17:57:25 <Vorpal> or cell as in x,y,z,value?
17:57:35 <elliott> Vorpal: as in (x,y)
17:57:37 <elliott> or (x,y,z)
17:57:38 <quintopia> tuple
17:57:41 <elliott> Vorpal: coords and velocity basically
17:57:43 <elliott> quintopia: fail
17:57:43 <Vorpal> elliott, funge_vector
17:57:48 <elliott> so, Vec then :P
17:57:54 <Vorpal> elliott, no idea about ccbi here
17:57:54 <elliott> or Vector
17:57:55 <elliott> I GUESS
17:58:04 <quintopia> elliott: it is an n-tuple. why fail?
17:58:09 <elliott> quintopia: because!
17:58:21 <elliott> now i get to define the fungespace
17:58:22 <elliott> oh joy
17:58:39 <Vorpal> elliott, wait a second. Didn't you start on this about a year ago
17:58:41 <Vorpal> last time
17:58:45 <Vorpal> then gave it up
17:58:47 <elliott> Vorpal: yes
17:58:49 <impomatic> Any idea how to create a programming game based on Underload?
17:58:53 <Vorpal> elliott, why not reuse your code!
17:58:55 <elliott> let's see if I can get further by doing things wildly inefficiently
17:59:02 <elliott> Vorpal: that's lost to the mists of time. also, i never implemented anything.
17:59:04 <iconmaster> I haz an esolang idea. A language where each single character is a command, and it uses up the ENTIRE Unicode set!
17:59:08 <Vorpal> elliott, ah
17:59:26 <Vorpal> iconmaster, s/haz/has/
17:59:38 <oerjan> ^ul (f)(aSaSc)(a(:^)*a(~a)~(*~^)**(~!)~(~^)**^):^
17:59:38 <fungot> ...out of stack!
17:59:48 <iconmaster> It would make insanly tiny code, BUT the interpreter would be insanely large!
17:59:49 <oerjan> ho hum
17:59:52 <Vorpal> iconmaster, also your idea sounds like unefunge with a huge instruction set
18:00:01 <iconmaster> yep
18:00:14 <Vorpal> iconmaster, also tiny in what measurement
18:00:15 <quintopia> iconmaster: J would be a good place to start, or golfscript
18:00:29 <iconmaster> ok, ill do some research.
18:00:32 <Vorpal> iconmaster, in bytes I presume?
18:00:32 * elliott decides to call Int32s "values" instead
18:00:41 <elliott> J wouldn't be a good place to start.
18:00:46 <Vorpal> iconmaster, if so take a look at some compact RISC assemblers
18:00:49 <Vorpal> elliott, why 32
18:00:51 <quintopia> in fact, "golfierscript" might a good name if your operations are useful enough
18:00:59 * iconmaster is wondering if control codes would make good commands
18:00:59 <elliott> Vorpal: because that's the "standard". also, It'll Be Parameterisable Later!
18:01:02 <Vorpal> elliott, if you can't support 64 then you can't even compete with cfunge
18:01:08 <elliott> oh shut up.
18:01:15 <elliott> i'm not going to feature-creep it before i've written a single function, dude
18:01:21 <Vorpal> elliott, XD
18:01:36 <elliott> data FungeSpace = FungeSpace (Map Vector Value) Vector Vector
18:01:38 <elliott> do I need anything more?
18:01:42 <elliott> the two Vectors are minimum and maximum bounds
18:01:46 <Vorpal> elliott, vector vector?
18:01:47 <Vorpal> ah
18:02:05 <elliott> hmm, maybe I should use "IntMap Value (IntMap Value)"
18:02:12 <elliott> since that uses BIG-ENDIAN PATRICIA TREES
18:02:21 <Vorpal> elliott, are they good?
18:02:27 <elliott> oh, but it uses Int only, not Int32.
18:02:30 <elliott> so it could magically be 64-bit.
18:02:38 <elliott> Vorpal: well supposedly it's a lot better for int keys:
18:02:38 <elliott> The implementation is based on big-endian patricia trees. This data structure performs especially well on binary operations like union and intersection. However, my benchmarks show that it is also (much) faster on insertions and deletions when compared to a generic size-balanced map implementation (see Data.Map).
18:02:47 <elliott> and Okasaki is behind it.
18:02:51 <Vorpal> elliott, but cfunge can do 32 bit with a compile time switch!
18:02:51 <elliott> so it's probably good.
18:03:32 <elliott> Vorpal: but anyway, any more elements of fungespace I need to plan for do you think
18:03:35 <oerjan> ^ul (f)(c)(a(:^)*a(~a)~(*~^)**(~!)~(~^)**aSaS^):^
18:03:35 <fungot> (~!~a((a(:^)*a(~a)~(*~^)**(~!)~(~^)**aSaS^):^)*~^~^)(c) ...bad insn!
18:03:45 <oerjan> ^ul (f)(c)(a(:^)*a(~a)~(*~^)**(~!)~(~^)**aSaSaS^):^
18:03:45 <fungot> (~!~a((a(:^)*a(~a)~(*~^)**(~!)~(~^)**aSaSaS^):^)*~^~^)(c)(f) ...out of stack!
18:04:21 <Vorpal> elliott, well hm. arbitrary tuples! (I have some plans for efunge with "rich values" in funge space for stuff like SOCK)
18:04:25 <Vorpal> (it would be interesting)
18:04:27 <elliott> Vorpal: i don't mean expansion plans.
18:04:30 <elliott> I mean
18:04:32 <elliott> things I need in the structure.
18:04:35 <Deewiant> elliott: This is like the third time you've written 'data FungeSpace = something' and asked if it's sufficient, and likely also the third time you'll end up writing at most a few functions to support it before giving up
18:04:42 <Vorpal> elliott, no, not really.
18:04:54 <elliott> Deewiant: DON'T TELL THEM MY SECRET
18:04:59 <Vorpal> Deewiant, third? I thought it was second?
18:05:03 <elliott> yeah i don't think it's the third
18:05:07 <elliott> therefore Deewiant is a stinky filthy liar
18:05:10 <elliott> and we should kill him
18:05:13 <Vorpal> elliott, btw I always done stack before funge space
18:05:25 <elliott> i like to get types down before (not) doing stuff
18:05:38 <Deewiant> The stack is about three lines in Haskell if you don't care about efficiency
18:05:46 <Vorpal> Deewiant, hah yeah
18:06:21 <elliott> type Stack = [Value]
18:06:22 <elliott> type StackStack = [Stack]
18:06:22 <elliott> Done
18:07:24 <oerjan> ^ul ((~a(~a~*((z)S)~*^)*~^)~^)((~a(~a~*((y)S)~*^)*~^)~^)((~a((a(:^)*a(~a)~(*~^)**a(~!)~(~^)**^):^)*~^)~^)((~a(~a~*((x)S)~*^)*~^)~^)(~a(~)~(~^)**a(a)~(*)**~*)(::**)^^(!)~^
18:07:24 <fungot> x
18:07:37 <oerjan> excellent
18:07:39 <elliott> Meh:
18:07:44 <elliott> data FungeSpace = FungeSpace (Map Vector Value)
18:07:46 <elliott> I can expand it later. :P
18:08:47 * elliott briefly considers a FUNGE MONAD
18:08:59 <elliott> I'm now, like, 5 minutes away from giving up.
18:09:04 <elliott> That's, like, three more than Deewiant's expecting.
18:12:20 <oerjan> ^ul ((~a(~a~*((x)S)~*^)*~^)~^)((~a(!!)*~^)~^)((~a(~a~*((y)S)~*^)*~^)~^)((~a(~a~*((z)S)~*^)*~^)~^)(a(~)~(~^)**a(a)~(*)**~*)(::**)^^(!)~^
18:12:20 <fungot> y
18:13:11 <Vorpal> elliott, you are like haskell you know
18:13:17 <elliott> wat
18:13:19 <elliott> lazy?
18:13:21 <Vorpal> elliott, LAZY!
18:13:22 <Vorpal> yes
18:13:40 <elliott> you should be a comedian. a really bad comedian.
18:14:20 * Vorpal has an urge to addquote [To Vorpal] <elliott> you should be a comedian. [...]
18:14:43 <elliott> *[to
18:14:50 <elliott> quotes get formatted how I say, dammit.
18:14:54 -!- zzo38 has joined.
18:15:00 <Vorpal> elliott, why lower case there
18:15:13 <elliott> because.
18:15:19 <Vorpal> nah
18:15:20 <elliott> that's how []s are written in my world.
18:15:37 <elliott> hmm, most of these operations only make sense inside THE FUNGE MONAD
18:15:50 <elliott> which I guess is just a state monad
18:15:52 <Vorpal> elliott, I prefer them all upper case becasue that is how df does it!
18:15:59 <elliott> O KAY
18:16:02 <elliott> (see wut i did thar)
18:16:26 <Vorpal> elliott, http://df.magmawiki.com/index.php/File:Carp_escape.jpg
18:17:21 <elliott> data FungeState =
18:17:22 <elliott> FungeState { stackStack :: StackStack
18:17:22 <elliott> , fungeSpace :: FungeSpace
18:17:22 <elliott> , somethingGoesHere :: someType }
18:17:23 <elliott> valid Haskell!
18:17:26 <Vorpal> elliott, http://df.magmawiki.com/index.php/File:Carp_escape.jpg
18:17:32 <elliott> http://df.magmawiki.com/index.php/File:Carp_escape.jpg
18:17:39 <Vorpal> elliott, you finally saw it
18:17:41 <elliott> http://df.magmawiki.com/index.php/File:Carp_escape.jpg
18:17:42 <elliott> http://df.magmawiki.com/index.php/File:Carp_escape.jpg
18:17:44 <elliott> i saw it all the time
18:17:46 <elliott> i was busy pasting
18:17:49 <Vorpal> elliott, you never replied yeah
18:18:36 <elliott> Not in scope: type variable `someType'
18:18:36 <elliott> oops
18:18:38 <elliott> needs to be
18:18:41 <elliott> forall someType. someType
18:18:41 <elliott> :D
18:20:10 <elliott> *Shiro.Types> emptyFungeSpace !@ (42,42)
18:20:10 <elliott> 32
18:20:11 <elliott> woo
18:22:22 <elliott> oerjan: what module is `on` in again?
18:22:24 <elliott> no hoogle :x
18:22:30 <elliott> ok i'll google.
18:22:33 <elliott> for hoogle.
18:22:38 <elliott> Data.Function.
18:22:49 <Vorpal> elliott, did you know that the df author is a mathematician?
18:22:56 <elliott> yes
18:23:22 <Vorpal> elliott, where is lambdabot?
18:24:06 <Sgeo__> My dad's threatening to take away the mifi he gave me if I don't type stuff up for my step-mom
18:24:21 <elliott> *Shiro.Types> bounds (FungeSpace (Map.fromList [((42,42),3),((-2,40),9)]))
18:24:21 <elliott> ((-2,40),(42,42))
18:24:22 <elliott> yay!
18:24:22 <elliott> Vorpal: down
18:24:27 <Vorpal> Sgeo__, MOVE OUT FROM YOUR PARENTS. YOU ARE OLD ENOUGH!
18:24:38 <elliott> Vorpal: we've tried.
18:24:40 <elliott> he won't listen.
18:25:11 <elliott> no point saying it over and over for the next twenty years
18:25:46 <elliott> In this document, short stacks are generally notated left to right to mean bottom to top. The leftmost values listed in the documentation are the bottommost and the first to be pushed onto the stack. Long stacks are notated top to bottom, to mean precisely that, top to bottom..
18:25:48 <elliott> i was afraid that was going to go:
18:25:52 <elliott> "Long stacks are notated right to left, "
18:25:56 <elliott> :D
18:26:01 <elliott> *,"
18:26:07 <Sgeo__> I'd need to get a job, and possibly not attend school, or not attend as much
18:26:10 <elliott> YOU JUST HAVE TO DECIDE WHETHER IT'S LONG ENOUGH TO FIGURE OUT WHICH WAY TO READ IT
18:26:25 * Lymia_ claps
18:26:27 <Lymia_> Yay!
18:26:30 -!- Lymia_ has changed nick to Lymia.
18:26:30 -!- Lymia has quit (Changing host).
18:26:30 -!- Lymia has joined.
18:26:35 <Lymia> By BF Joust evolver works.
18:26:35 <Lymia> :s
18:26:39 <Lymia> Now to see how well it works.
18:26:41 <elliott> :D
18:26:41 <quintopia> Sgeo__: type stuff up for your step-mom and keep the rage to yourself
18:26:43 <elliott> awesome!
18:26:48 <Lymia> I inputted the top 10 warriors on the hill.
18:26:51 <Lymia> Let's see what comes out.
18:26:59 <elliott> quintopia: and continue to take the abuse and idiocy he gets from his father?
18:27:17 <quintopia> elliott: yes. life's a bitch.
18:27:29 <elliott> quintopia: why is this preferable to sgeo moving out like he should have anyway
18:27:47 <Lymia> !bfjoust first_test >>-(>++++++->---+)*1>+>->.->+>[-[<-()*24[--]]+>[+()*22[++]]->]+
18:27:59 <Phantom_Hoover> <Vorpal> Sgeo__, MOVE OUT FROM YOUR PARENTS. YOU ARE OLD ENOUGH!
18:28:05 <Phantom_Hoover> VORPAL LOOKS DOWN ON YOU, SGEO
18:28:12 <elliott> me too!
18:28:19 <elliott> for once Vorpal said the right thing :P
18:28:22 <quintopia> elliott: he does not have the resources to live on his own at the moment. he just said as much.
18:28:29 <EgoBot> Score for Lymia_first_test: 0.0
18:28:45 <Lymia> :/
18:28:45 <elliott> quintopia: I don't think you realise just how bad the situation with sgeo's parents are
18:28:51 <elliott> *is
18:29:05 <Lymia> Is ()*blah illegal?
18:29:17 <elliott> Lymia: might be, if it is that's a bug
18:29:18 <elliott> Gregor!
18:29:31 <Gregor> I don't remember >:P
18:30:02 <elliott> Lymia: Just filter it out, it's pointless anyway :P
18:30:07 <elliott> Also transform (x)*1 into x
18:30:22 <elliott> at every step, probably
18:31:05 <quintopia> that's cheating. the algorithm should find that optimization itself
18:31:16 <elliott> quintopia: no, it's working around a bug in Gregor's code
18:31:21 <elliott> ok the latter thing is cheating, but so what
18:31:30 <elliott> bounds :: FungeSpace -> (Vector,Vector)
18:31:30 <elliott> bounds (FungeSpace m) =
18:31:30 <elliott> let keys = Map.keys m
18:31:30 <elliott> xs = map fst keys
18:31:30 <elliott> ys = map snd keys
18:31:30 <elliott> in ((minimum xs, minimum ys),
18:31:30 * copumpkin is writing an awesome solver of things
18:31:32 <elliott> (maximum xs, maximum ys))
18:31:35 <elliott> Vorpal: YOURS MAY BE EFFICIENT, BUT MINE IS ELEGANT
18:31:37 <elliott> (pointfree patches welcome)
18:31:38 <Phantom_Hoover> copumpkin, what kind of things?
18:31:48 <Phantom_Hoover> elliott, are you talking about cfunge?
18:31:54 <elliott> Yes.
18:31:57 <elliott> And... SHIRO
18:32:08 <Phantom_Hoover> Why Shiro?
18:32:25 <impomatic> Anyone experienced with ARM assembly language?
18:32:31 <elliott> Phantom_Hoover: Because it's a fungus-related name and it's short and nice enough.
18:32:57 <Vorpal> impomatic, I was about to say "yes" but then realised I had misread it as "AVR". So no
18:32:58 <Lymia> !bfjoust test_0 ()*1>[[-]>]
18:32:58 <Phantom_Hoover> That's not fungus-related at all.
18:33:03 <EgoBot> Score for Lymia_test_0: 5.1
18:33:04 <Lymia> !bfjoust test_1 >[[-]>]
18:33:20 <EgoBot> Score for Lymia_test_1: 5.1
18:33:42 <Phantom_Hoover> Oh, wait, it is.
18:33:52 <impomatic> Vorpal: I have an Arduino here I haven't experimented much with. I never managed to find a decent assembly tutorial.
18:34:28 <Lymia> !bfjoust evo_0 (+>>)*2>(>([-[+]]+>)*3[-]-)*33
18:34:32 <Vorpal> impomatic, well that is ARM and I can't help you there
18:34:32 <EgoBot> Score for Lymia_evo_0: 4.2
18:34:37 <elliott> Maybe I'll call it 城. You know, for short.
18:34:41 <elliott> Or more sanely, 白 :P
18:34:46 <Vorpal> impomatic, or?
18:34:58 <Lymia> !bfjoust evo_1 (+>>)*2>(>[(-)*20[+]]+>[[-]]-)*32
18:35:03 <EgoBot> Score for Lymia_evo_1: 14.7
18:35:07 <Lymia> ...
18:35:14 <Lymia> I don't have the selection step backwards, do I.
18:35:21 <Vorpal> impomatic, oh it is AVR
18:35:25 <Vorpal> I thought it was ARM
18:35:26 <Vorpal> huh
18:35:26 <impomatic> Vorpal: Arduino = AVR :-) I'm just about to buy an ARM board though
18:35:36 <Vorpal> impomatic, AVR is quite nice
18:35:42 <Vorpal> impomatic, very sane instruction set
18:35:51 <Vorpal> impomatic, and of course GCC supports it if you want to do C
18:36:10 <Vorpal> impomatic, which AVR is it?
18:36:33 <impomatic> Vorpal: can you recommend a tutorial on the assembly. One that doesn't treat me like I've never programmed before.
18:36:57 <Vorpal> impomatic, not really. I used the reference guide for the ATmega32A that I used
18:37:08 <Vorpal> impomatic, I don't know which model you have
18:37:11 <impomatic> Vorpal: ATmega168
18:37:20 <Vorpal> impomatic, no clue about that model even
18:37:52 <Vorpal> impomatic, we have a lot of evaluation boards with ATmega32 at the university I study at. I found it quite easy to learn how to use them
18:38:21 <elliott> copumpkin: putFS k v = modify $ \fs@FungeSpace{fungeSpace} -> fs{fungeSpace=insertFS k v fungeSpace})
18:38:22 <elliott> copumpkin: :(
18:39:15 <elliott> putFS k v = modify $ \fs -> fs{fungeSpace=insertFS k v (fungeSpace fs)}
18:39:16 <elliott> slightly better
18:39:28 <Lymia> !bfjoust evo_0 (+>>)*2>(>([-[+]]+>)*3[-]-)*33
18:39:32 <EgoBot> Score for Lymia_evo_0: 5.5
18:39:37 <Vorpal> impomatic, looks like ATmega32A is beefier when checking specs
18:39:49 <Lymia> !bfjoust evo_1 (+>>)*2>(>[(-)*20[+]]+>[[-]]-)*32
18:39:50 <Vorpal> http://www.atmel.com/dyn/products/product_card.asp?part_id=4404&category_id=163&family_id=607&subfamily_id=760
18:39:51 <Vorpal> http://www.atmel.com/dyn/products/Product_card.asp?part_id=3303
18:39:52 <EgoBot> Score for Lymia_evo_1: 12.7
18:39:54 <Lymia> OK.
18:39:58 <Lymia> My evolver just sucks.
18:39:59 <Lymia> =p
18:40:14 <Vorpal> impomatic, used the AVR Dragon board with JTAG stuff to program the ATmega32A
18:41:13 <Vorpal> well your has higher clock speed
18:42:01 * Sgeo__ googles how to move out
18:42:03 <elliott> Lymia: Aww.
18:42:09 <elliott> Lymia: I suggest removing the ()* and ()% code.
18:42:10 * iconmaster came up with a name for my lang idea: Onecode
18:42:12 <elliott> Lymia: I bet it will do better.
18:42:20 <Lymia> ?
18:42:25 <Lymia> elliott, maybe.
18:42:25 <impomatic> The Arduino has a bootloader so it can be programmed over USB. I've programmed it a bit in C, but that's about it. (Flashing Hello World in Morse Code, etc!)
18:42:26 <elliott> Lymia: Because it'll have a simpler view of the program.
18:42:36 <elliott> Lymia: Make sure to expand all the programs on the hill first (or do it in your loading stage).
18:42:41 <Lymia> =p
18:42:50 <Vorpal> impomatic, ah
18:42:54 <Deewiant> elliott:
18:42:56 <Deewiant> bounds (FungeSpace m) = (both minimum &&& both maximum) . unzip . Map.keys $ m
18:42:56 <Deewiant> where both = join (***)
18:43:14 <elliott> Deewiant: That's actually quite elegant.
18:43:16 <elliott> Saved for later.
18:43:28 <elliott> How far did funktio's HsFunge get, btw?
18:43:40 <Vorpal> impomatic, well the RISC code of AVR was trivial to learn I found. But I coded both PIC12F629 and H8/300 before
18:43:41 <Deewiant> All the way through.
18:43:52 <Lymia> !bfjoust evo_1 >+>->+>->+>->+>---<++<--<++<>-(<++<++(-+)*16>([]>)*17>)*5>(-)*16>>([]-)*15>([].)*17>([]+.-)*16(>(.><[]-)*21[.-])*21
18:43:58 <EgoBot> Score for Lymia_evo_1: 0.2
18:44:00 * elliott considers renaming getFS and putFS to peek and poke...
18:44:06 <elliott> But then they don't mirror the Funge instructions' names. :(
18:44:09 <Lymia> !bfjoust evo_2 >+>->+><>+>->+>---<++<--<++<>-(<++<++(-.+)*17>([])*16>)*5>(-)*16>(+)*15>(-)*15>(.)*15>([]+.-)*17(>.[-+])*21
18:44:16 <Vorpal> impomatic, if you are mainly used to x86 it might help to remember that it is a load/store arch
18:44:18 <EgoBot> Score for Lymia_evo_2: 0.0
18:44:21 <Lymia> :v
18:44:25 <Lymia> Yeah.
18:44:31 <Lymia> I guess I'll check if expanding loops helps.
18:44:38 <elliott> Hmm, an empty Funge stack is an infinite list of zeroes, right?
18:44:56 <elliott> Lymia: Yeah, I think it isn't "clever" enough to understand ()* properly. To use really bad terminology.
18:45:03 <Deewiant> Quite. But you need to be able to give the length of the nonempty bit.
18:45:16 <Vorpal> elliott, yeah what Deewiant said faster than I could write it
18:45:18 <Deewiant> (So you can't just store it as an infinite [Int])
18:45:24 <Lymia> elliott, I'm running the mutation function used on the whole thing on each loop, or repeat segment.
18:45:27 <elliott> Deewiant: Right.
18:45:32 <elliott> Deewiant: Just checking that there's always a TOS and SOS.
18:45:34 <Deewiant> (But ([Int],Int) might be sufficient.)
18:45:39 <elliott> Lymia: You remember to remove the previous warriors of this generation before trying a new one, right?
18:45:44 <elliott> Otherwise they'll just end up fighting each other.
18:45:47 <Lymia> ?
18:45:51 <elliott> Lymia: ?
18:45:58 <Vorpal> Deewiant, why not just [Int] and handle empty stack separately?
18:46:09 <Deewiant> If he doesn't want to. :-P
18:46:12 <Lymia> elliott, the way I have it coded, the previous generation becomes garbage collection fodder.
18:46:13 <Vorpal> ah
18:46:27 <elliott> Lymia: I mean -
18:46:39 <elliott> Lymia: If the current generation is {a,b,c,d}
18:46:46 <elliott> Then do you remember to remove a from the hill before trying b?
18:46:54 <elliott> Otherwise, your program could decide that d is really good because it beat a, b and c.
18:47:15 <Lymia> I'm doing a matchup of each bot agienst each bot at every step.
18:47:18 <elliott> Deewiant: ([Int], Int) is I think no more convenient than a finite list, because you have to keep track of the Int all the time.
18:47:22 <elliott> Lymia: OK.
18:47:24 <Sgeo__> I'm fantasizing about finding a job, leaving this house... but in all liklihood nothing will change :(
18:47:31 <elliott> Lymia: Just don't battle multiple individuals from the same generation.
18:47:45 <Lymia> ?
18:47:54 <elliott> >_<
18:48:01 <elliott> What am I saying that you don't understand?
18:48:17 <Lymia> <elliott> Lymia: Just don't battle multiple individuals from the same generation.
18:48:23 <Lymia> What do you suggest instead?
18:48:24 <Lymia> >.<
18:48:32 <Lymia> Battle agienst the previous generation instead?
18:48:39 <elliott> Lymia: Yes, obviously.
18:48:44 <Lymia> Eh...
18:48:47 <Lymia> That might actually be a good idea.
18:48:47 <Lymia> >.<
18:48:48 <elliott> Lymia: Otherwise you can have ten really shit contestants, and one of them wins because it beats the others.
18:48:58 <elliott> Despite the fact that it will lose against anything good.
18:49:45 <Vorpal> elliott, I would suggest battle against current and previous
18:50:07 <Lymia> Urg.
18:50:10 <fizzie> If this is generic genetic-algo talk, often you can just propagate few best people of a previous generation unchanged into the new, and then do the ranking there.
18:50:24 <Lymia> That'd be harder to implement
18:50:25 <Deewiant> If you battle the current as well then you get a dependency against what order you generated them in, which seems a bit messy.
18:50:27 <Lymia> ;-;
18:50:42 <Deewiant> Well, unless you pre-generate them all, of course.
18:50:45 <Sgeo__> "Do not leave your home on a bad note if at all possible,"
18:50:47 <Sgeo__> HAHAHAHAHA
18:51:14 <impomatic> !bfjoust spookygoth >(-)*9>(+)*9(>--->+++)*3(>([+)*6[(-)*7([-)*5[(-)*122[-(])*14 >([+)*6[(-)*7([-)*5[(-)*122[-(])*14)*10>([-)*6[(+)*7([+)*5[(+)*122[+(])*14[-]
18:51:25 <Lymia> Actually.
18:51:28 <Lymia> elliott.
18:51:36 <Lymia> I could just concat the list of the old programs with the new ones.
18:51:38 <Lymia> And select from that.
18:51:40 <EgoBot> Score for impomatic_spookygoth: 32.8
18:51:53 <elliott> Lymia: Sure.
18:52:02 <elliott> That would be reasonable enough.
18:52:20 <impomatic> !bfjoust spookygoth >(-)*9>(+)*9(>------>)*3(>([+)*6[(-)*7([-)*5[(-)*122[-(])*14>([+)*6[(-)*7([-)*5[(-)*122[-(])*14)*10>([-)*6[(+)*7([+)*5[(+)*122[+(])*14[-]
18:52:47 <EgoBot> Score for impomatic_spookygoth: 32.1
18:53:43 <quintopia> is the ()* notation just to make the programs short enough to fit in a privmsg? was it dreamed up for no other reason?
18:53:46 <Deewiant> impomatic: Stop beating monorail.
18:54:23 <elliott> quintopia: Efficiency.
18:54:26 <elliott> (Of interpretation.)
18:54:55 <quintopia> oh is it interpreted directly?
18:55:08 * Lymia runs and prays
18:55:10 <elliott> http://sprunge.us/WhWe <-- in which Haskell records drive me to drink, suicide, despair.
18:55:23 <Vorpal> elliott, I now know that the df wiki uses postgre (it started erroring!)
18:55:30 <Sgeo__> Vorpal, hypothetically, would I e able to ask you for advice?
18:55:30 <elliott> Vorpal: SHUT UP, I AM DESPAIRING
18:55:40 <Sgeo__> s/ e //
18:55:47 <Sgeo__> erm, *be
18:55:47 <Vorpal> Sgeo__, it all depends on what it is about
18:56:00 -!- Mathnerd314 has joined.
18:56:07 <Vorpal> Sgeo__, not if it is about vitamins in oranges.
18:56:08 <impomatic> !bfjoust spookygoth (>(+)*7)*2(>+++>+++)*3(>([+)*6[(-)*7([-)*5[(-)*122[-(])*14>([+)*6[(-)*7([-)*5[(-)*122[-(])*14)*10>([-)*6[(+)*7([+)*5[(+)*122[+(])*14[-]
18:56:14 <EgoBot> Score for impomatic_spookygoth: 32.4
18:56:15 <elliott> Sgeo__: SHUT UP ABOUT KT-AT
18:56:23 <elliott> (Going by what Vorpal said.)
18:56:25 <Sgeo__> LOLOL
18:56:37 <Vorpal> elliott, I don't know yet if it is about that
18:56:45 <Sgeo__> Vorpal, it was about moving out.
18:56:59 <Vorpal> Sgeo__, well okay. what do you wonder about it?
18:57:28 <elliott> Hey Deewiant, rewrite my code. (Your rewrite of bounds was your ticket to a lifetime of rewriting code involving Haskell vectors. It's punishment.)
18:57:38 <Sgeo__> Nothing yet, I think. Maybe some encouragement. Perhaps things like whether I should look for and apply for a job first, or see that places to live exist first
18:57:58 * iconmaster notes that the average Unicode chart would fill a 500-page book and then some.
18:58:06 <Vorpal> Sgeo__, well I don't know much about US. You might have more luck with pikhq and Gregor there
18:58:33 <elliott> Sgeo__: Do things I say count as encouragement, or am I too hilariously abrasive?
18:58:41 <elliott> (Non-hilariously abrasive is not a valid answer.)
18:58:50 <Vorpal> Sgeo__, personally I haven't yet moved out because I haven't had any need. I will likely during next summer (since I plan to continue studies at a different university then)
18:59:24 <quintopia> i'm too much of a pessimist. you definitely need a job first, cuz...there aren't many jobs
18:59:38 <Vorpal> well that might be US
18:59:47 <elliott> Sgeo says he likes drudgery maintenance programming, and he likes C#.
18:59:51 <Sgeo__> quintopia, I wasn't saying I'd move out first then look for job. Just saying whether I should research jobs in isolation of housing requirements
18:59:54 <elliott> can't be too hard to get a job like that :P
19:00:08 <Vorpal> looking in Sweden I'm qualified for most programming jobs and there is a *huge* lack of workers here for that
19:00:22 <Vorpal> meaning I could pretty much pick what I wanted
19:00:24 <Lymia> !bfjoust evo_0 >[(+)*17>(>++++++>---+--)*1>+>]->->+(>[-(+)*22[-]]+>[+(-)*21[+]]->+)*21
19:00:28 <EgoBot> Score for Lymia_evo_0: 9.4
19:00:38 <Lymia> !bfjoust evo_1 >[(+)*17>(-)*19(>++++++>------)*1>+>]->->+(>[[-(+)*22[-]]+>[+(-)*21[+]]->]+)*21
19:00:39 <elliott> Lymia: you forgot to remove the () code :P
19:00:42 <EgoBot> Score for Lymia_evo_1: 23.0
19:00:44 <elliott> ooh
19:00:49 <Lymia> elliott, I'll do that later.
19:00:50 <Lymia> =p
19:00:53 <quintopia> sgeo: you need to research them together. you can't have a job you can't live near and you can't afford housing without a high enough salary
19:00:59 <elliott> Lymia: what's 0 vs 1 here? one generation later?
19:01:06 <Lymia> elliott, no.
19:01:11 <Lymia> Last place, vs top place.
19:01:16 <elliott> ah
19:01:19 <elliott> Lymia: how many generations?
19:01:28 <Lymia> 13
19:01:42 <Vorpal> quintopia, in Sweden the situation for computer scientists and computer engineers is pretty much that you can name your pay. There is such a lack of people with the right education here.
19:01:46 <elliott> Lymia: try 100
19:01:56 <elliott> Vorpal: can i come live there?!
19:01:57 <Lymia> =3
19:02:02 <elliott> any haskell job openings?
19:02:07 <Vorpal> elliott, mostly C#
19:02:09 <elliott> :(
19:02:15 <elliott> uhh... any python? :P
19:02:25 <Vorpal> elliott, possibly at universities
19:02:34 <elliott> maybe i'll pass
19:02:37 <Vorpal> elliott, anyway I could survive coding C# if I had to (though not C++)
19:02:48 <Vorpal> elliott, compared to C++... C# is quite sane
19:02:58 <elliott> yeaaaah but no thanks
19:03:07 <elliott> unless i'm paid like a million pounds
19:03:16 <Vorpal> elliott, I doubt you can go *that* far
19:03:17 <elliott> i wonder how to make my accessing code less awful
19:03:23 <elliott> blehhh why do haskell records suck so much
19:03:24 <Sgeo__> elliott, C# is not terrible. It's not great, but not terrible
19:03:27 <elliott> worst part of the language
19:03:35 <Sgeo__> I mean, relative to other mainstream languages
19:04:13 <Lymia> I still wonder.
19:04:23 <Lymia> Why arn't we using managed languages for browsers.
19:04:35 <Vorpal> because they are slow
19:04:44 <Vorpal> or at least people think so
19:04:45 <Lymia> It would eliminate the problem of arbitary code execution
19:04:48 <Vorpal> (and many of them are)
19:04:59 <Lymia> I don't see how it being slow is a bigger concern that security.
19:05:00 <Lymia> >.>
19:05:13 <Vorpal> Lymia, it isn't. But to many people it is
19:05:14 <elliott> we are, it's called java
19:05:16 <elliott> *script
19:05:18 <elliott> nasty typo
19:05:25 <Vorpal> elliott, XD
19:05:26 <elliott> also js in browser is already incredibly slow.
19:05:34 <Sgeo__> Wasn't there a browser written in Java once?
19:05:35 <elliott> Lymia: firefox's UI is all javascript at least
19:05:38 <elliott> well. javascript and xml.
19:05:40 <elliott> and css.
19:05:46 <fizzie> XUUUUL.
19:05:51 <fizzie> (It's good for shouting.)
19:05:51 <Vorpal> Sgeo__, yes
19:05:51 <elliott> Lymia: but the real question is: why aren't we using managed languages for everything.
19:05:56 <Vorpal> Sgeo__, for sunos iirc
19:05:57 <elliott> and the answer is that people suck.
19:06:01 <elliott> well, managed doesn't matter. safe does.
19:06:05 <elliott> you can compile a safe language to raw machine-code.
19:06:26 <elliott> 05:36:54 <Gregor> Weird question: is there something you can do with sound/music to make it sound better on tinny speakers? Sort of adapt it to the expectation that it'll be played on speakers that suck ...
19:06:28 <Vorpal> elliott, I want to compile it to a lower level!
19:06:29 <Lymia> I guess "managed" is a bit too general.
19:06:36 <elliott> Gregor: Well, you can compress music to shit to make it sound good in cars.
19:06:39 <Lymia> Unless you do something really weird, anything memory safe should work, no?
19:06:52 <elliott> Lymia: Indeed.
19:07:12 <Sgeo__> Nimrod ::trollface::
19:07:16 <elliott> time until Lymia joins my Cult of Why Does Every Operating System And Program And Thing Suck Ever: a few weeks.
19:07:24 <Lymia> :V
19:07:32 <elliott> Phantom_Hoover: (partially Vorpal): I'm counting on you to be nice to the initiate-to-be.
19:08:02 <Vorpal> elliott, uh. I don't agree they all suck. Genera didn't really suck!
19:08:11 <elliott> *all the ones anyone uses
19:08:18 <elliott> also, I said "partially Vorpal"
19:08:22 <elliott> it was directed to about half of you.
19:08:24 <Vorpal> elliott, :P
19:08:37 <Vorpal> elliott, wait is this some transporter accident thing?
19:08:41 <elliott> yes.
19:08:49 <Vorpal> awesome
19:08:57 <elliott> 06:52:23 <Lymia> Gregor.
19:08:57 <elliott> 06:52:24 <Lymia> Quick question.
19:08:57 <elliott> 06:52:31 <Lymia> (a{b}c{d}e)*2
19:08:58 <elliott> that is invalid
19:09:00 <elliott> although i think i've told you that
19:09:02 <quintopia> elliott: is it a cult of personality?
19:09:04 <elliott> (in more ways than one)
19:09:05 <fizzie> "Speaker equalization" is a term associated with the "take into account the suckiness of my speakers" sort of things, but there's of course only that much you can do.
19:09:08 <elliott> quintopia: if hate is a personality.
19:09:10 -!- Sgeo__ has changed nick to Sgeo.
19:09:20 <quintopia> no, you are the personality
19:09:25 <elliott> no.
19:09:25 <elliott> hate is.
19:10:16 <elliott> 07:31:07 <zzo38> quintopia: It is publicly available at: gopher://zzo38computer.cjb.net/1textfile and at http://zzo38computer.cjb.net/textfile/
19:10:16 <elliott> 07:33:02 <zzo38> They are not currently accessible by teletype or fax.
19:10:17 <elliott> 07:33:45 <quintopia> ah, so you do have a sense of humor :P
19:10:22 <elliott> quintopia: i don't think he was joking.
19:10:32 <Vorpal> elliott, I wonder how this would look like for minecraft! A lot simpler I bet. http://df.magmawiki.com/images/6/67/DFflowchart.png
19:10:39 <Vorpal> oh and that flow chart is INCOMPLETE!
19:10:44 <elliott> Vorpal: what the heck :D
19:10:49 <quintopia> elliott: do not shatter my entire worldview please
19:10:50 <Vorpal> elliott, what?
19:10:54 <elliott> that chart
19:11:09 <Vorpal> elliott, "Production flowchart for all workshops. Not all items are represented!"
19:11:14 <elliott> xD
19:11:31 <elliott> ugh
19:11:33 <Vorpal> elliott, I think it makes perfect sense
19:11:38 <elliott> i've forgotten how to code with haskell records :(
19:11:40 <fizzie> I'd like to see the same in GraphViz.
19:11:53 <quintopia> is it the fsm for individual dwarves?
19:11:55 <fizzie> It does pretty horrible things to large graphs.)
19:12:05 <quintopia> oh
19:12:12 <quintopia> well i can't read it
19:12:20 <Vorpal> quintopia, no a flow chart for requirements and dependencies between different workshops
19:12:22 <elliott> quintopia: his irc client just syntax highlights the raw messages btw
19:12:24 <elliott> and handles input
19:12:24 <Vorpal> like how you produce glass
19:12:25 <olsner> #haskell used to have a troll that popped in regularly to complain about records and pretty much said nothing else
19:12:31 <Vorpal> you can figure it out from that diagram
19:12:37 <elliott> olsner: that's not a troll, that's a hero
19:12:47 <fizzie> olsner: Whereas here we have elliott who complains about a lot more things too. Multi-tasking!
19:12:56 <quintopia> vorpal: i can't read the diagram
19:13:05 <Vorpal> quintopia, oh? why not
19:13:26 <elliott> fizzie: I COMPLAIN ABOUT YOU
19:13:48 <quintopia> Vorpal: i guess it doesn't render in high enough resolution?
19:13:56 <Vorpal> quintopia, zoom in?
19:14:02 <Vorpal> quintopia, in firefox click on it
19:14:10 <olsner> elliott: well, it appeared this person didn't use haskell at all except for the purpose of complaining about records in haskell
19:14:29 <quintopia> yeah. that doesn't help in the default android browser...it just stays blurry
19:14:30 <Vorpal> fizzie, and yeah it would do weird things in graphvis
19:14:32 <Vorpal> viz*
19:15:05 <Vorpal> quintopia, can't help you with that
19:17:03 <elliott> hmm
19:17:05 <elliott> findMin :: Map k a -> (k, a)Source
19:17:05 <elliott> O(log n). The minimal key of the map.
19:17:05 <elliott> findMax :: Map k a -> (k, a)Source
19:17:05 <elliott> O(log n). The maximal key of the map.
19:17:12 <elliott> I wonder if you can specify a comparatorator
19:17:28 <elliott> no, seems to be hardcoded :(
19:17:36 <elliott> because of the Ord instance I guess
19:17:43 <olsner> if you newtype the key type you can have your own Ord instance
19:18:14 <Deewiant> It uses Ord because it uses the structure of the tree, you'd have to specify the comparator manually for every single function if you wanted to do that; and that's what the Ord instance basically is :-P
19:18:16 <fizzie> It can't really work with a comparatomator that hasn't been...
19:18:20 <fizzie> Like, what Deewiant says.
19:18:20 <quintopia> http://imgur.com/AAZln
19:18:22 <elliott> Deewiant: indeed
19:18:30 <elliott> olsner: yeah but i need two different ords :P
19:18:32 <elliott> in one map
19:18:37 <Deewiant> No, you need two maps ;-)
19:18:45 <elliott> Deewiant: two fungespaces? :D
19:20:03 <olsner> elliott: you can use minimumBy on keys
19:20:17 <elliott> olsner: that's what i did
19:20:17 <elliott> well
19:20:20 <elliott> basically
19:20:44 <elliott> olsner do you know why Haskell is the worst language ever?
19:20:56 <elliott> because push and pop at the bottom of http://sprunge.us/WhWe are impossible to implement if not hideously ugly, and this will never change
19:21:02 <elliott> and that's why all haskell programmers are bad people
19:21:03 <elliott> PROVE ME WRONG
19:21:13 <elliott> bash.org tells me this is the most effective way of getting help
19:21:25 <Deewiant> You just lack all the relevant helper functions
19:21:35 <olsner> it probably is
19:21:40 <elliott> Deewiant: oh yeah, like what
19:21:45 <Deewiant> Like, say, pop that works on a StackStack instead of a StateT FungeState IO
19:22:15 <Deewiant> pop :: State StackStack Value
19:22:17 <Deewiant> For instance :-P
19:22:31 <elliott> Deewiant: I don't think there's any mechanisms to use a "sub-state" in State
19:22:36 <elliott> so I'm not sure how you'd do that
19:22:42 <olsner> just add a mechanism then
19:22:43 <elliott> or do you mean turn the record into stacked StateTs?
19:22:45 <elliott> that seems ugly
19:22:48 <Deewiant> elliott: Of course there is, runState
19:22:58 <Deewiant> That's just pop :: StackStack -> (StackStack, Value)
19:23:03 <elliott> Deewiant: That would just give me a tuple of (StackStack, Value).
19:23:06 <Deewiant> I just used State to avoid writing StackStack twice :-D
19:23:08 <elliott> Deewiant: So I'd have to do get and put. :P
19:23:10 <elliott> lol
19:23:14 <elliott> well it'd be
19:23:34 <Vorpal> elliott, from df wiki article: "(Note that the labor associated with the skill "small animal dissection" (namely "Extract from a dead animal") is used solely at a butcher's shop. But that skill is one of the three that can build a kennel, and is listed as such. Just accept it.)"
19:23:37 <elliott> pop = do (x,ss') <- popSS . stackStack <$> get; modify $ \fs -> fs{stackStack = ss'}
19:23:40 <elliott> Deewiant: Oh yeah, so elegant.
19:23:42 <elliott> :P
19:23:48 <elliott> voorwat
19:23:53 <elliott> *Vorpal: wat
19:23:56 <Lymia> We play Dwarf Fortress here too?
19:23:59 <Vorpal> elliott, indeed!
19:24:03 <elliott> Lymia: Vorpal does
19:24:07 <elliott> the rest of us just play minecraft
19:24:10 <elliott> aka
19:24:13 <Vorpal> I play minecraft as well
19:24:14 <elliott> Dwarf Fortress: The Wimpmode
19:24:22 <Deewiant> elliott: modifySS :: StackStack -> StateT FungeState IO, etc.
19:24:24 <Lymia> Notch's wad of horrible code?
19:24:28 <Lymia> >.>
19:24:36 <Vorpal> Lymia, yes but the game itself is good
19:24:37 <elliott> Deewiant: That should be called putSS.
19:24:38 <elliott> Lymia: Indeed.
19:24:38 <Deewiant> Or something like newSS rather, whatever.
19:24:42 <Vorpal> Lymia, as in, it is fun to play
19:24:42 <Phantom_Hoover> Lymia, it's horrible code but it's a fun game.
19:24:50 <elliott> Lymia: We are more familiar with how bad his code is than anyone else, being Scientists.
19:24:54 <elliott> Applied Scientists of Code.
19:24:58 <Phantom_Hoover> Also, we have a special channel for this, at #esoteric-minecraft
19:25:01 <Lymia> You mean reverse engineers?
19:25:05 <Lymia> =p
19:25:06 <elliott> Lymia: No, we just have a proxy. :p
19:25:20 <olsner> write modifyStackStack :: (StackStack -> StackStack) -> (FungeState -> FungeState), then push x = modify (modifyStackStack (x:)), pretty much...
19:25:24 <Phantom_Hoover> elliott, THIS IS SECRET WE SHOULD BE TALKING IN -MINECRAFT
19:25:25 <Lymia> Reverse engineering stuff is fun!
19:25:26 -!- ais523 has joined.
19:25:30 <elliott> ais523: FINALLY
19:25:35 <Vorpal> ais523, hello
19:25:42 <elliott> ais523: oerjan has managed to translate unlambda fully into underload
19:25:44 <elliott> including d, v, and c
19:26:16 <olsner> you need more to modify the head stack of the stackstack though, which I assume is what you're supposed to do there?
19:26:31 <elliott> olsner: that's the TOSS
19:26:49 <Vorpal> olsner, elliott, you will need to modify SOSS too in some cases
19:26:58 <elliott> Vorpal: yeah, but i can do that manually
19:27:01 <Vorpal> (though not SOSSAR)
19:27:04 <elliott> all i want is push and pop and shit :P
19:27:07 <elliott> SOSSAR?
19:27:07 <Vorpal> (note: olsner will get it)
19:27:23 <Vorpal> elliott, Swedish political joke
19:27:32 <olsner> bad one too :/
19:27:35 <Vorpal> olsner, yes
19:27:36 <Vorpal> true
19:27:36 <elliott> well that was obvious
19:27:39 <elliott> (it being bad)
19:27:53 <ais523> <elliott> ais523: oerjan has managed to translate unlambda fully into underload <--- hey, I did that too
19:27:58 <ais523> it was the inspiration for Underlambda
19:28:04 <ais523> although, I accidentally deleted it
19:28:22 -!- cheater00 has joined.
19:28:24 <ais523> that's what inspired me to save backups in different directories, so I wouldn't be caught out again by rm *
19:28:32 <Vorpal> ais523, haha
19:28:32 -!- cheater- has quit (Ping timeout: 240 seconds).
19:28:38 <Lymia> ais523.
19:28:44 <Lymia> Translate Brainfuck into Unlambda.
19:28:48 <elliott> ais523: and *I* made 1/4th of an Underload self-interpreter
19:28:49 <elliott> ais523: ((a)(b)(c)(d))(*)*^(::**)(~a~*)~^()~^
19:28:50 -!- BeholdMyGlory has joined.
19:28:53 <elliott> ais523: this results in ((a)(b)(cd))
19:28:54 <ais523> Lymia: I translated P'' into Unlambda a while ago
19:29:07 <Lymia> Translate Haskell into Unlambda.
19:29:08 <ais523> elliott: without cheating, presumably
19:29:11 <elliott> ais523: yep
19:29:20 <elliott> ais523: ((a)(b)(c))(::**)(*)(SUBTRACT)(~)~a*^(*^)~a*~a*^^(~a~*)~^()~^ is, modulo errors, the skeleton of most of a self-interpreter
19:29:25 <elliott> ais523: the first two stack elements are the stack, and its size
19:29:26 <ais523> Lymia: that would be ouch, although also interesting
19:29:32 <elliott> ais523: a decrement-by-one goes in place of SUBTRACT
19:29:38 <ais523> elliott: do you need to know the size?
19:29:40 <elliott> ais523: yes
19:29:46 <elliott> ais523: anyway, basically, given
19:29:58 <ais523> I'm trying to figure out where it comes up
19:29:59 <elliott> stack, size of stack, operation to execute, function from size of stack to size of stack after operation
19:30:00 <elliott> it gives you
19:30:06 <elliott> new stack, size of new stack
19:30:09 <elliott> ais523: because how it works is
19:30:13 <ais523> oh, in order to get rid of the rest of the stack
19:30:13 <elliott> ((a)(b)(c)(d))
19:30:14 <elliott> ->
19:30:15 <ais523> after pushing
19:30:16 <elliott> ((a)(b)(c)(d)*)
19:30:17 <elliott> ->
19:30:19 <elliott> (a)(b)(cd)
19:30:22 <elliott> and then it goes
19:30:23 <elliott> (a)(b)(cd)()
19:30:25 <ais523> because you don't have infra and ultra, like in underlambda
19:30:25 <elliott> (a)(b)()(cd)
19:30:28 <elliott> (a)(b)()((cd))
19:30:31 <elliott> (a)(b)((cd))()
19:30:32 <elliott> (a)(b)((cd))
19:30:36 <elliott> (a)((cd))(b)
19:30:38 <elliott> (a)((cd))((b))
19:30:41 <elliott> (a)((b))((cd))
19:30:44 <elliott> (a)((b)(cd))
19:30:45 <elliott> etc.
19:30:48 <elliott> to reclaim the stack
19:31:44 <ais523> yep, I have some upp code somewhere that rewires an Underload program to do that automatically
19:32:15 <elliott> ais523: jesus christ i hate you :D
19:32:19 <elliott> "so hey oerjan did this thing"
19:32:21 <elliott> "YEAH, I DID THAT ONCE"
19:32:23 <elliott> "and I did this thing"
19:32:25 <elliott> "BEEEN THEEERE"
19:32:33 -!- Behold has quit (Ping timeout: 276 seconds).
19:32:37 <ais523> elliott: your approach is different to mine, though
19:32:46 <ais523> so it's fine for them both to exist
19:32:48 <elliott> :P
19:33:02 <Lymia> !bfjoust evo_2 >>->(>.+++++<-----)*2>-(+-)*5--++([-[[--](+)*20[<]]+-[<+[(+[])*8]+].>]>+)*19
19:33:13 <ais523> Lymia: is that the result of your BF Joust evolver?
19:33:17 <Lymia> !bfjoust evo_3 (>>->(>.++++<---+--)*1>>)*3.(-)*6-->+([-[--(+)*20[-]]+-[<+(+)*10[][]].>]+)*23
19:33:18 <Lymia> Yeah.
19:33:24 <elliott> Lymia: how many generations?
19:33:27 <ais523> it certainly doesn't look like the sort of thing someone would write by hand
19:33:28 <EgoBot> Score for Lymia_evo_2: 0.0
19:33:29 <elliott> [][] is obviously dead code
19:33:30 <Lymia> 75
19:33:31 <EgoBot> Score for Lymia_evo_3: 8.4
19:33:35 <ais523> elliott: no it isn't
19:33:39 <elliott> oh, indeed
19:33:40 <oerjan> elliott: SHALL I BAN HIM
19:33:45 <elliott> oerjan: who
19:33:48 <ais523> it's actually impossible to write dead code in BF Joust
19:33:57 <oerjan> elliott: THAT AIS523 RASCAL
19:34:00 <Lymia> It's possible.
19:34:00 <elliott> yes!
19:34:03 <Lymia> <[]
19:34:03 <ais523> except right at the start of the program
19:34:04 <elliott> ais523: anyway, all you need is a way to go from church numeral of ascii value of *valid* underload instruction --> quotation of its operation plus function representing its stack effect
19:34:06 <Lymia> The [] is dead code.
19:34:08 <ais523> when you know the opponent isn't interfering
19:34:08 <elliott> ais523: and also a gigantic table of output values
19:34:13 <elliott> ais523: I think you can even output ( and )
19:34:14 <ais523> Lymia: oh, right
19:34:14 <elliott> by using "a"
19:34:19 <elliott> ais523: after mapping all the subelements
19:34:23 <ais523> elliott: you can, just only in pairs
19:34:26 <elliott> ais523: right
19:34:44 <elliott> ais523: so yes, I think you could make a complete underload self-interpreter in maybe 15 to 20 lines, ignoring the ascii table
19:34:49 <Lymia> elliott.
19:34:56 <ais523> that seems plausible
19:35:00 <elliott> Stop pinging me like that. It's really irritating.
19:35:05 * Lymia hugs elliott <3
19:35:06 <Lymia> Sorry~
19:36:52 <ais523> I've been working on 1cnis all weekend
19:37:00 <elliott> 11:14:28 <Lymia> Looks like there arn't any crash bugs in my BF Joust evolver...
19:37:00 <elliott> 11:14:35 <Lymia> I'm going to let it run for a night and see what comes out.
19:37:01 <elliott> what happened?
19:37:05 <Lymia> It crashed.
19:37:06 <ais523> adding a few features like a simple preprocessor (RLE and substitution of constants)
19:37:06 <elliott> ais523: really?
19:37:10 * oerjan decides to just spam it
19:37:13 <ais523> elliott: really
19:37:16 <elliott> oerjan: spam what
19:37:29 <oerjan> s: ((~a(~(*a(~^)*a(*)*~*^)~*a(~a(a(~)*~a(~^)*a:)~)~(**a(~a)~(*~^)**~^)**a(~a)~(*~^)**~^)*~^)~^)
19:37:30 <ais523> I've decided that I really badly want to generate a 2,3 machine initial condition using 1cnis
19:37:33 <oerjan> k: ((~a(~a(~!)~(~^)**a(~a)~(*~^)**~^)*~^)~^)
19:37:35 <oerjan> i: ((~a(^)*~^)~^)
19:37:38 -!- pumpkin has joined.
19:37:38 <oerjan> v: ((~a((a(:^)*a(~a)~(*~^)**a(~!)~(~^)**^):^)*~^)~^)
19:37:40 <oerjan> ` (postfix): a(~)~(~^)**a(a)~(*)**~*
19:37:42 <ais523> oerjan: ouch, that's complex
19:37:43 <oerjan> .x: ((~a(~a~*((x)S)~*^)*~^)~^)
19:37:45 <oerjan> d: (((a(~)*~a(~^)*a(~^)**)~*a(~a)~(*~^)**~^)~^)))~^)
19:37:45 <ais523> presumably to allow for c
19:37:48 <oerjan> c: ((~a(:a~(!)~*a(~a)~(*~^)**a(~^)*a*~*^)*~^)~^)
19:37:50 <oerjan> e: ((~a(!!)*~^)~^)
19:37:51 <oerjan> also d
19:37:53 <oerjan> End of file: (!)~^
19:38:06 <elliott> oerjan: does that end of file do anything useful?
19:38:09 <ais523> the method I used to allow for d was rather simpler than that, IIRC
19:38:10 <elliott> oh, yes
19:38:15 <oerjan> elliott: run the program...
19:38:27 <elliott> ais523: btw, when implementing catbus, I realised that Underload was the epitomic programming paradigm
19:38:32 <ais523> epitomic?
19:38:33 <HackEgo> No output.
19:38:36 <elliott> yes
19:38:38 -!- TLUL has joined.
19:38:44 <ais523> I mean, what does the word mean?
19:38:47 <elliott> the epitome!
19:38:52 <elliott> ais523: because it's the same as the paradigm that catbus (now called "tie") gives Unix pipes
19:38:54 <elliott> which I will now clal
19:38:54 <elliott> *call
19:39:04 <elliott> purely functional recursively-composed piping
19:39:09 <elliott> *purely functional recursively-composed concatenative piping
19:39:19 <ais523> haha, that is a good description
19:39:20 <elliott> ais523: for instance:
19:39:28 <elliott> $ tie 'nc irc.freenode.net 6667 | ./mybot'
19:39:34 <elliott> ais523: tie ties the two ends of this pipe together
19:39:42 <elliott> so that mybot's output goes back to nc
19:39:50 -!- copumpkin has quit (Ping timeout: 272 seconds).
19:39:56 <elliott> ais523: but the thing is, from a functional perspective, we can see tie as fixing function concatenation
19:40:13 <elliott> ais523: (tie (nc irc.freenode.net 6667 | ./mybot)) = nc irc.freenode.net 6667 | ./mybot | nc irc.freenode.net 6667 | ./mybot | nc irc.freenode.net 6667 | ./mybot | nc irc.freenode.net 6667 | ./mybot | ...
19:40:16 <ais523> I know I created a bunch of stuff doing that sort of thing a while back
19:40:25 <elliott> ais523: the thing to realise here is that the "nc"s and "mybots" there are the same
19:40:29 <elliott> ais523: because of referential transparency
19:40:34 <ais523> to be precise, I created a wrapper executable that did what named pipes did, because I was unaware of the existence of named pipes
19:40:37 <elliott> the interesting thing is that the first nc never gets any input
19:40:39 <ais523> elliott: yep
19:40:41 <elliott> so although tie's semantics are to tie the end to the start
19:40:45 <elliott> it actually just creates an infinite chain
19:40:47 <elliott> semantically
19:40:57 <ais523> but the executables share state
19:41:07 <elliott> ais523: it's more like, you'd do it like
19:41:10 <elliott> foo <- nc irc.freenode.net 6667
19:41:12 <elliott> bot <- mybot
19:41:13 <elliott> then it's
19:41:17 <elliott> foo | bot | foo | bot | ...
19:41:45 <elliott> ais523: anyway, yes, basically, as far as I can tell, the perfect paradigm is _lazy_, purely functional, concatenative piping
19:41:55 <elliott> ais523: lazy being important because it lets you construct that infinite pipeline without indirection
19:42:02 <elliott> of course, evaluating such a lazy language sounds non-trivial
19:42:07 <ais523> we should make a lazy underload
19:42:14 <elliott> agree
19:42:22 <ais523> without S and infinite loops, you could lazify it without making any difference
19:42:38 <elliott> ais523: in other news, I have been working on a specification for Underload
19:42:39 <ais523> I/O is always an issue in lazy langs...
19:42:50 <ais523> you mean there isn't one?
19:42:55 <elliott> ais523: the special thing about this specification is that it's formal
19:43:11 <elliott> ais523: it consists of a mix of English prose and Haskell, where the Haskell takes precedence over the English in cases of contradiction
19:43:19 <elliott> ais523: the Haskell specifies the executable formal semantics of the language
19:43:26 <elliott> that it doubles up as a reference interpreter is just a bonus
19:43:30 <ais523> haha
19:43:38 <elliott> ais523: I was inspired by http://catseye.tc/projects/burro/doc/burro.html
19:43:57 <Vorpal> elliott, is haskell itself formally specified?
19:43:58 <ais523> hmm, at least that one loads
19:44:19 <elliott> ais523: the plan is to finish it off, get your approval, and call that the Official Underload Specification(TM) ... there's at least reason to claim the language needs a second specification
19:44:27 <elliott> in that this one lacks the " stuff that nobody implements :P
19:44:36 <elliott> it's quite hard coding Haskell to convey semantics well
19:44:47 <ais523> easier than coding C to convey semantics well
19:44:49 <ais523> or VHDL
19:44:55 <elliott> I've been avoiding helper functions in case their "implementation details" affect the semantics
19:44:58 <ais523> Haskell and Prolog are good langs for that sort of thing
19:45:00 <elliott> e.g., I didn't use Parsec for the parser
19:45:05 <Vorpal> ais523 why VHDL as an example
19:45:11 <elliott> (mostly because a language's definition depending on Parsec's is just insane)
19:45:13 <Vorpal> ais523, I would say INTERCAL or befunge even more so
19:45:27 <ais523> Vorpal: becaues VHDL is so incredibly low-level
19:45:45 <Vorpal> ais523, but it would be easier with VHDL than with INTERCAL!
19:45:48 <elliott> Deewiant: What helper functions did you say I needed again? :-)
19:45:50 <ais523> levels of programming aren't numbered, but if they were, VHDL would be at least 2 or 3 below machine code
19:46:13 <Vorpal> ais523, very true
19:46:36 <Vorpal> writing VHDL is quite painful I have to say from personal experience
19:46:41 <Deewiant> elliott: I think olsner had it mostly right 2011-02-06 21:43:37 ( olsner) write modifyStackStack :: (StackStack -> StackStack) -> (FungeState -> FungeState), then push x = modify (modifyStackStack (x:)), pretty much...
19:46:54 <Deewiant> elliott: Just add modifyStack in the middle :-P
19:46:58 <elliott> Deewiant: hmm, interesting, you should be able to say "modifyOn stackStack"
19:47:04 <ais523> whereas INTERCAL is slightly above
19:47:06 <elliott> Deewiant: also, that doesn't make popping any easier
19:47:16 <elliott> Deewiant: Maybe I'll use data-accessor, so that I /can/ say "modifyOn stackStack"
19:47:31 <ais523> I think INTERCAL's about as easy to use as asm for that purpose
19:47:36 <Lymia> !bfjoust evo_4 >>>>(>>>..+<-----)*3>>[(.-(-)*6)*1--]+(.[[-][([[<+-+-][-]]+-)*3[<[][<<<([]>[])*9]+]]>]>+)*18
19:47:37 <ais523> although harder to read afterwards
19:48:03 <elliott> 13:37:26 <nddrylliog> it would be nice if fungot pointed out exactly where the error lied
19:48:03 <fungot> elliott: they work now, gave it a link to
19:48:05 <elliott> lol
19:48:10 <elliott> Lymia: wat
19:48:11 <ais523> Lymia: how do the evolved jousters do against [>[-]+]?
19:48:19 <ais523> it's close to the smallest BF Joust program that does decently at all
19:48:23 <EgoBot> Score for Lymia_evo_4: 0.5
19:48:25 <Lymia> [>[-]+]?
19:48:36 <elliott> !bfjoust lout [>[-]+]
19:48:37 <Lymia> !bfjoust evo_5 >>>>(>>+..+>----)*3>>[(.-)*2--<]+(.[[-][(+[+-+-][[.]-]-)*4[[><[<]][<<(>[])*8]+]]>]>.+)*18
19:48:38 <ais523> !bfjoust attack1 [>[-]+]
19:48:42 <Lymia> :v
19:48:43 <elliott> ais523: IT'S CALLED LOUT NOW
19:48:44 <Lymia> Oh.
19:48:49 <ais523> elliott: I called it attack1 first!
19:48:51 <Lymia> Decoys and brute force?
19:48:53 <elliott> I CALLED IT LOUT SECOND
19:48:56 <EgoBot> Score for ais523_attack1: 1.2
19:48:56 <EgoBot> Score for Lymia_evo_5: 0.4
19:48:56 <EgoBot> Score for elliott_lout: 1.2
19:49:01 <Lymia> Buh.
19:49:07 <Lymia> I'm going to revise the program.
19:49:07 <ais523> Lymia: it's basically just brute force, the decoys happen mostly by chance
19:49:15 <Lymia> ais523, by chance?
19:49:20 <ais523> well, as a side-effect
19:49:23 <Lymia> Ah.
19:49:27 <ais523> of needing a nonzero value to repeat the loop
19:49:29 <Lymia> It's used to keep the loop going, right?
19:49:30 <ais523> yep
19:49:43 <zzo38> How am I supposed to figure out which DSPs are best for my requirements?
19:49:50 <elliott> zzo38: with your brain?
19:50:06 <ais523> !bfjoust attackminus1 (>)*9([-]>)*20
19:50:11 <EgoBot> Score for ais523_attackminus1: 5.6
19:50:11 <zzo38> elliott: That isn't what I meant by the question.
19:50:16 <ais523> that's how it looks if you don't use decoys to keep the loop going
19:50:25 <ais523> it scores slightly better because at least it beats tripwire :)
19:51:12 <elliott> "You can easily manipulate record fields in a Control.Monad.State.State monad"
19:51:17 <elliott> yeah, I think I'll use data-accessor
19:51:20 <Vorpal> !bfjoust test [>[+]-]
19:51:24 <EgoBot> Score for Vorpal_test: 1.2
19:51:27 <Vorpal> !bfjoust test [>[+]+]
19:51:34 <EgoBot> Score for Vorpal_test: 1.2
19:51:37 <Vorpal> !bfjoust test [>[-]-]
19:51:42 <quintopia> !bfjoust lout2 [>[-]>[-]+]
19:51:44 <EgoBot> Score for Vorpal_test: 1.2
19:51:46 <Vorpal> hm
19:51:48 <EgoBot> Score for quintopia_lout2: 1.1
19:51:52 <quintopia> huh
19:52:04 <Lymia> !bfjoust byebyetripwire .
19:52:10 <EgoBot> Score for Lymia_byebyetripwire: 5.6
19:52:32 <zzo38> For one thing, I ought to have a program that accurately emulates the DSP, is Free software, and is written in some literate programming system. Now we can avoid vendor lock.
19:52:32 <Vorpal> !bfjoust test >+>+>+>+>[>[+]-]
19:52:37 <EgoBot> Score for Vorpal_test: 0.0
19:52:40 <Vorpal> huh
19:52:43 <ais523> hmm, does FYB have that situation where programs can do well against "good" programs, but lose against no-ops?
19:52:44 <Vorpal> !bfjoust test >+>+>[>[+]-]
19:52:50 <EgoBot> Score for Vorpal_test: 0.0
19:52:53 <Vorpal> why
19:53:04 <Vorpal> !bfjoust test >+[>[+]-]
19:53:05 <ais523> zzo38: there pretty much are no good DSPs, on that basis
19:53:09 <EgoBot> Score for Vorpal_test: 1.2
19:53:11 <ais523> they're all massively vendor-specific
19:53:12 <Vorpal> hrrm
19:53:15 <zzo38> Also, I should have it using program on external RAM/ROM, no special software required.
19:53:15 <quintopia> what does tripwire do again? alternate?
19:53:22 <elliott> lol @ literate programming requirement
19:53:31 <ais523> quintopia: no, it skips the first couple of nonzero locations it notices
19:53:36 <ais523> on the basis that they're probably decoys
19:53:39 <ais523> it's a pure fast-rush attacker
19:53:54 <quintopia> oh
19:53:59 <ais523> and that gives it the edge to beat other fast-rush attackers
19:54:00 <Lymia> !bfjoust byebyetripwire >>+>([-]>)*100
19:54:05 <EgoBot> Score for Lymia_byebyetripwire: 1.4
19:54:07 <Lymia> :(
19:54:14 <Lymia> Does it only skip the first decoy?
19:54:23 <ais523> I think it skips the first decoy, and the space after
19:54:30 <Lymia> !bfjoust byebyetripwire >+>([-]>)*100
19:54:32 <ais523> try adding that decoy on the second tape element, rather than the third
19:54:33 <EgoBot> Score for Lymia_byebyetripwire: 1.2
19:54:41 <Lymia> !bfjoust byebyetripwire (>)*10([-]>)*100
19:54:44 <EgoBot> Score for Lymia_byebyetripwire: 5.4
19:54:53 <zzo38> elliott: The reason for the literate programming requirement is for similar reasons to the other requirements. That means full and accurate documentation for the device is available, because the book is the same as the program.
19:54:54 <ais523> hmm, perhaps the tripwire up there really does skip just one
19:55:10 <ais523> which tripwire does best depends on how decoy-heavy the other programs are
19:55:28 <quintopia> !bfjoust lout2 [>[-]>[-](+)*10]
19:55:28 <zzo38> And it needs that I can have that a user program on the DSP cannot damage the hardware.
19:55:33 <EgoBot> Score for quintopia_lout2: 4.1
19:55:39 <quintopia> interesante
19:55:45 -!- kar8nga has joined.
19:56:26 <elliott> Deewiant: Surely it should be modifyTOSS, not modifyStack. :-)
19:56:30 <ais523> elliott: was that day of the day of the day thing on the mainpage you? I can't remember your exact IP any more, but it's in the right range
19:56:30 <elliott> Actually, wait, the stack is the name of the TOSS.
19:56:34 <elliott> ais523: yep
19:56:38 <ais523> ah, yes
19:56:49 <quintopia> does bfjoust use wrapping?
19:57:30 <elliott> modifyStack :: (Stack -> Stack) -> FungeState -> FungeState
19:57:31 <elliott> modifyStack f st{stackStack=(s:ss)} = st{stackStack = f s : ss}
19:57:31 <elliott> modifyStack f st{stackStack=[]} = st{stackStack = [f []]}
19:57:32 <elliott> ugliest code EVAR
19:57:33 <elliott> quintopia: yes
19:57:35 <zzo38> And that it is possible to write a user program on it that can make two channels of audio output and one channel of video output including emulation of other systems such as GameBoy Advance, and Commodore 64, audio/video, and other things that you are able to program in.
19:57:39 <ais523> quintopia: 8-bit wrapping, it makes a really big difference
19:57:45 <zzo38> Is such DSP existing?
19:57:50 <ais523> in that it's possible to take a flag down from 128 to 0 either upwards or downwards
19:58:01 <quintopia> aha
19:58:04 <quintopia> so then
19:58:10 <ais523> zzo38: DSPs typically can't run processor emulators at any reasonable speed, they have the wrong sort of architecture
19:58:21 <ais523> you'd have better luck for doing that with an FPGA, but those are realy problematic for other reasons
19:58:21 <quintopia> !bfjoust lout3 [>[-]>[-]-]
19:58:23 <zzo38> O, and also RAM accessible by both the DSP and external processors at the same time.
19:58:26 <EgoBot> Score for quintopia_lout3: 0.7
19:58:33 <quintopia> hmm
19:58:47 <zzo38> ais523: I do not need to emulate any processor. Just emulation of the audio/video units of other systems.
19:58:49 <Lymia> !bfjoust beatstripwire (>)*100
19:58:51 <Deewiant> elliott: Why would the stack stack ever be empty?
19:58:54 <EgoBot> Score for Lymia_beatstripwire: 0.0
19:59:00 <ais523> zzo38: hmm
19:59:02 <elliott> Deewiant: Because it has an infinite number of empty stacks on it.
19:59:04 <Lymia> !bfjoust beatstripwire .(>)*100
19:59:07 <EgoBot> Score for Lymia_beatstripwire: 0.0
19:59:08 <zzo38> CPU emulation can be done using a normal processor which is connected to the DSP.
19:59:09 <Lymia> :(
19:59:11 <ais523> Lymia: that loses to tripwire because it falls off the other end before tripwire can reach it
19:59:13 <Deewiant> elliott: So... it's never empty
19:59:14 <ais523> it needs to be slower than that
19:59:16 <Lymia> Ah.
19:59:18 <elliott> Deewiant: It can be physically empty.
19:59:23 <ais523> tripwire has to contain conditionals, they slow down the movement
19:59:25 <elliott> Deewiant: Just like the stack [] is actually [0,0,0,0,...].
19:59:29 -!- Behold has joined.
19:59:45 <elliott> Deewiant: Still, pop is quite ugly: {{ pop = do x <- tos; modifyStack tail; return x }} -- and that doesn't even handle an "empty" stack.
19:59:47 <Lymia> So.
19:59:53 <elliott> ((modifyStack tail) will fail.)
19:59:54 <Lymia> How embaressing is it to lose to a noop again?
20:00:04 <Deewiant> elliott: modifyStack (drop 1)
20:00:06 <zzo38> ais523: Do you know anything about these kind of things to be able to give answer?
20:00:12 <elliott> Deewiant: Fair enough.
20:00:13 <quintopia> Lymia: not very
20:00:16 -!- BeholdMyGlory has quit (Read error: Operation timed out).
20:00:25 <elliott> Deewiant: Are you sure that won't be inefficient, though? :-)
20:00:33 <Lymia> !fyb shouldnt-win %
20:00:36 <ais523> zzo38: not really, except that what you say seems incredibly optimistic, based on the typical behaviour of FPGA and DSP vendors
20:00:41 <Deewiant> elliott: Representing stacks as [Int32] already is ;-)
20:00:59 <elliott> Deewiant: Well, not _that_ inefficient.
20:01:06 <elliott> Deewiant: Most stack operations are perfectly linked-list-friendly.
20:02:01 <Deewiant> Yes, but having the stack be essentially a pointer to a struct stack { stack* next; int* value; } is a bit wasteful :-P
20:02:14 <elliott> modifyFungeSpace f st{fungeSpace=fs} = st{fungeSpace = f fs}
20:02:17 <elliott> "Parse error in pattern"
20:02:17 <elliott> WHYY
20:02:21 <elliott> Oh.
20:02:22 <elliott> Needs to be
20:02:25 <elliott> st@FungeState
20:02:31 <zzo38> ais523: It doesn't matter if the vendor will provide the Free literate program that accurately emulates the DSP, as long as such a program can be exist.
20:02:31 <elliott> Because, you know, it's just not ugly enough as it is.
20:02:35 <elliott> Deewiant: Wasteful memory-wise, sure.
20:02:42 <elliott> Deewiant: I'll pack it together later. :p
20:02:45 <Deewiant> Also cpu-wise.
20:02:58 <olsner> elliott: you don't *have* to pattern-match the record you know
20:03:06 <EgoBot> Score for Lymia_shouldnt-win: 5.1
20:03:08 <elliott> olsner: MEH
20:03:09 <zzo38> And that the vendor cannot deny that the emulator works properly.
20:03:15 <elliott> Deewiant: Not really...
20:03:23 <elliott> Deewiant: As I said, most operations are linked-list friendly.
20:03:24 <Deewiant> Swapping the top two elements of the stack is what, three memory reads and four writes? :-P
20:03:37 <olsner> modifyFungeSpace f st = st { fungeSpace = f (fungeSpace st) }
20:03:40 <elliott> Deewiant: OH NOES
20:03:45 <elliott> olsner: MINE'S MORE EFFICIENT
20:04:00 <Deewiant> elliott: Hey, Funge-98 is all about the SPEED
20:04:04 <elliott> IT IS
20:04:06 <elliott> ALL ABOUT THE SPEED
20:04:17 <Lymia> elliott, I want to start with basic programs, start evolving, and see what happens.
20:04:20 <Lymia> So.
20:04:21 <elliott> Deewiant: Do you have to keep track of how many real stacks there are on the stackstack?
20:04:25 <Lymia> [>[-]+]
20:04:28 <elliott> Lymia: Probably the best idea. Ask ais523 for attackN and defendN.
20:04:29 <elliott> For some N.
20:04:42 <Lymia> And [(++++++++)*100]
20:05:04 * Lymia pokes ais523
20:05:10 <Deewiant> elliott: Maybe, I can't remember.
20:05:26 <elliott> HEY VORPAL
20:05:28 <ais523> umm, hmm
20:05:34 <Deewiant> Probably not for the standard, but maybe a fingerprint.
20:06:11 <elliott> Deewiant: Now I just have to figure out how to rename modifyStack so that I don't have to do modify $ modifyStack which looks ugly :P
20:06:15 <elliott> Maybe mStack.
20:06:29 <elliott> I could put them in the monad, but, that's UGLY!
20:06:34 <elliott> OK, no it's not.
20:06:36 <elliott> It's going in the monad.
20:07:50 <Lymia> ais523, <elliott> Lymia: Probably the best idea. Ask ais523 for attackN and defendN.
20:08:03 <ais523> Lymia: yep, I'm trying to package them atm
20:08:49 <elliott> ais523: you might want to omit the really bad ones
20:08:58 <elliott> istr there were two or so really bad defend ones
20:09:04 <ais523> indeed, the first few were all awful
20:09:09 <ais523> because defend's harder to write than attack
20:09:15 <elliott> No instance for (Applicative (StateT FungeState IO))
20:09:16 <elliott> wtf?
20:09:27 <ais523> I think 5 was the only one that accomplished anything at all, and 7 was the first really good one
20:09:49 <quintopia> !bfjoust stall >>>(+)*30<[+](>)*25+[>[-]+]
20:09:50 <elliott> ais523: just give the attacks and defend5/7, then
20:09:53 <EgoBot> Score for quintopia_stall: 0.0
20:09:53 <elliott> no point starting on a terrible hill
20:10:10 <ais523> now I'm wondering what happened to 6 and 8
20:10:25 <ais523> I'm also curious as to why 7 beats 9 on the hill, too; I think 9 might just be too complex for its own good
20:10:57 <quintopia> what does defend do? just sit at home and keep it from zeroing?
20:11:00 <Lymia> !bfjoust horrible_idea (>)*10([-]>>)*20
20:11:05 <EgoBot> Score for Lymia_horrible_idea: 2.3
20:11:12 <ais523> quintopia: I think so, although that's kind-of hard to do
20:11:16 <ais523> defend1, that is
20:11:18 <quintopia> ah
20:11:35 <ais523> defend7 alternates between preventing its own flag from zeroing, and zeroing its opponent's
20:11:48 <quintopia> how?
20:11:52 <ais523> Lymia: http://pastebin.com/raw.php?i=kEDLr57T
20:12:03 <Lymia> Thakns
20:12:05 <quintopia> does it figure out the width of the game?
20:12:06 <Lymia> Thanks*
20:12:07 <ais523> quintopia: by relying on the fact that (+)*128 increases the flag faster than any loop can decrease it
20:12:34 <ais523> and it simply cycles each of the tape elements through their 256 possible values in turn, relying on the fact that the opponent is locked in place and can't interfere
20:12:43 <quintopia> oh
20:12:59 <quintopia> wow
20:13:27 <Lymia> ais523, I got a checksum fail on defend2
20:13:32 <quintopia> how does it find its way home again?
20:13:58 <Lymia> +>+[]<[[[+..+]+]+]
20:14:04 <Lymia> Is this defend2?
20:14:28 <ais523> yep
20:14:34 <ais523> I think it might be a newline issue
20:14:38 <elliott> oerjan: how do you implement Applicative for a monad?
20:15:06 <oerjan> pure = return, (<*>) = ap
20:15:09 <elliott> thanks
20:15:21 <elliott> -- sigh
20:15:21 <elliott> instance (Monad m) => Applicative (StateT s m) where
20:15:21 <elliott> pure = return
20:15:21 <elliott> (<*>) = ap
20:15:51 <elliott> Deewiant: ha, you were wrong, I have stacks, fungespace and MULTIPLE functions!
20:15:53 <elliott> and a monad!
20:15:55 <elliott> nothing can stop me now!
20:16:00 <iconmaster> I was wondering: I would like to put my Lua Underload interpreter on the Esoteric File Archive. I'm kinda new to this; how would I do this?
20:16:14 <Deewiant> elliott: Ha, you fell into my trap: I just tried to guilt you into actually doing something!
20:16:23 <ais523> `addquote <elliott> Deewiant: ha, you were wrong, I have stacks, fungespace and MULTIPLE functions! <elliott> and a monad! <elliott> nothing can stop me now!
20:16:25 <HackEgo> 294) <elliott> Deewiant: ha, you were wrong, I have stacks, fungespace and MULTIPLE functions! <elliott> and a monad! <elliott> nothing can stop me now!
20:16:26 <elliott> Deewiant: ...I'm so glad I didn't realise you were doing that :-D
20:16:31 <ais523> iconmaster: you need to email it to someone with admin access there
20:16:38 <ais523> most such people are relatively inactive, though
20:16:38 <elliott> ais523: YOU FORGOT TWO SPACES BETWEEN EACH MESSAGE :D
20:16:43 <ais523> I think there's a list somewhere
20:16:44 <quintopia> !bfjoust stall >>+++++>(+)*30[]<[+](>)*25+[>[-]+]
20:16:47 <Deewiant> elliott: ... and now you're done with it for this attempt. :-D
20:16:52 <iconmaster> ok thanks! ill look for the list.
20:17:00 <elliott> Deewiant: no just say another thing that upsets me
20:17:03 <elliott> like
20:17:09 <elliott> i bet you can't even make that typecheck
20:17:15 <EgoBot> Score for quintopia_stall: 0.0
20:17:22 <quintopia> ha
20:17:28 <quintopia> brilliant
20:17:31 <elliott> :D
20:17:32 <Deewiant> elliott: It won't work anymore now that you know what to expect
20:17:38 <elliott> quintopia: (>)*25 will always die
20:17:42 <elliott> well
20:17:43 <elliott> almost always
20:17:45 <elliott> the tape is 10-30 long
20:17:50 <quintopia> oh
20:17:57 <elliott> Deewiant: Why did you admit what you were doing :/
20:17:58 <quintopia> i thought the min was 30
20:18:24 <elliott> Deewiant: WHYY
20:18:28 <quintopia> the point here was to make egobot take as long as possible to reply tho, not win
20:18:34 <Deewiant> elliott: Because you said I was wrong, and I knew it'd make you stop anyways
20:18:38 <Gregor> Am I the only person who is both sufficiently obsessed with reproducibility and needing of randomness to explicitly srand(0)?
20:18:53 <elliott> Deewiant: lawl
20:18:59 <ais523> Gregor: you do know that srand(1) happens by default, right? (at least in C)
20:19:01 <elliott> Deewiant: no i'll keep going
20:19:02 <Deewiant> elliott: And I was right again!
20:19:03 <elliott> I MUST KEEP GOING
20:19:06 <ais523> so 1 is clearly the standard seed for reproducible randomness!
20:19:14 <Gregor> ais523: Not talking about C, and a lot of languages autoseed.
20:19:24 <elliott> Deewiant: I'M GOING TO WRITE A FUNGESPACE PARSER NOW
20:19:28 <elliott> AND YOU'RE NOT GOING TO BE ABLE TO STOP ME
20:19:30 <elliott> HOW DO YOU FEEL ABOUT THAT
20:19:38 <Deewiant> Good luck with that, that's actually a bit of a pain :-D
20:19:42 <elliott> Deewiant: Really?
20:19:48 <elliott> Deewiant: It's just the same as Befunge-93 loading, isn't it?
20:19:58 <Deewiant> Well, maybe not if you're happy with inefficiency and only Befunge and that data structure
20:20:06 <Deewiant> And no, not quite
20:20:08 <elliott> <Deewiant> No, if you see a k followed by three 2s then you have to erase a spiral pattern going out from the centre.
20:20:16 <elliott> <Deewiant> This arises because of a comma instead of a . in the original spec.
20:20:17 <Deewiant> You need to drop form feeds, for instance
20:20:20 <Vorpal> <ais523> so 1 is clearly the standard seed for reproducible randomness! <-- no it is 4 iirc
20:20:33 <elliott> Vorpal: no, that's the reproducible random number
20:20:36 <ais523> the 4 in the xkcd comic isn't a seed
20:20:37 <elliott> not the reproducible seed
20:20:41 <elliott> DON'T YOU KNOW ANYTHING
20:20:44 <Vorpal> elliott, oh right
20:20:55 <elliott> Deewiant: DING DING DING NEW DEPENDENCY
20:20:57 <elliott> BYTESTRING
20:21:01 <quintopia> !bfjoust stall >+++>--->(+)*30[]<[+](>)*6+[>[-]+]
20:21:09 <elliott> Deewiant: (whenever your Haskell program gets a new dependency you have to do that)
20:21:11 <elliott> it's the law
20:21:14 <EgoBot> Score for quintopia_stall: 0.4
20:21:18 <Lymia> Let's write a Befunge to Hasell compiler.
20:21:23 <elliott> Lymia: No :P
20:21:29 <quintopia> lul what did it beat?
20:21:41 <Lymia> !bfjoust it_kills_tripwire [-]
20:21:42 <Vorpal> <HackEgo> 294) <elliott> Deewiant: ha, you were wrong, I have stacks, fungespace and MULTIPLE functions! <elliott> and a monad! <elliott> nothing can stop me now!
20:21:45 <Vorpal> elliott, okay and then
20:21:49 <Vorpal> what do we get next
20:21:56 <elliott> Vorpal: Fungespace loading, as I said.
20:22:00 <elliott> Well, befungespace.
20:22:13 <elliott> Right now I have no idea how I'm going to do Lahey-wrapping. Probably the easy way.
20:22:16 <Vorpal> elliott, right. Remember you need to handle all line endings
20:22:21 <Vorpal> elliott, \r \n and \r\n
20:22:36 <elliott> Vorpal: \r *space* \n?
20:22:37 <elliott> :D
20:22:38 <elliott> BEST LINE ENDING
20:22:39 <EgoBot> Score for Lymia_it_kills_tripwire: 5.4
20:22:44 <Vorpal> elliott, hah, alas no
20:23:01 <elliott> Shiro.Types is rapidly turning into Shiro.Everything,
20:23:02 <elliott> *Everything.
20:23:11 <Vorpal> elliott, bad design
20:23:14 <elliott> \r is 13, right?
20:23:17 <elliott> Vorpal: I'll split it up later.
20:23:18 <Deewiant> Unsurprisingly most of your code has something to do with types
20:23:20 <ais523> back when I wrote DOS programs, I used to end lines with \n\r
20:23:21 <Vorpal> elliott, I think s
20:23:23 <Vorpal> so*
20:23:25 <elliott> Deewiant: :D
20:23:28 <ais523> on the basis that it worked and I didn't know better
20:23:43 <elliott> SimonRC: >_<
20:23:43 <Vorpal> ais523, hahaha
20:23:44 <elliott> *ais523:
20:23:45 <ais523> (pure \n doesn't work on DOS, it moves one line down without returning to the start of the line, unless it's sent to a function like printf that translates newlines)
20:23:46 <elliott> terrible typo
20:23:47 <Lymia> ais523.
20:23:51 <Lymia> Name the three worst of those.
20:24:00 <elliott> Actually I think I'll split it up now.
20:24:10 <ais523> I don't think seeing full stops on IRC is particularly /bad/, it's just weird
20:24:32 <ais523> whereas commas in that position are an insane default in some clients
20:24:41 <Vorpal> hey!
20:24:54 <elliott> hmm, but what do I call the module with both Value and Vector
20:24:59 <elliott> TypesBeginningWithV?
20:25:02 <Deewiant> BasicTypes
20:25:04 <ais523> elliott: that's what I was going to say!
20:25:08 <Vorpal> ais523, I shall switch mine to ; then
20:25:12 <elliott> *ais523;
20:25:23 <quintopia> !bfjoust stall +>->+>(+)*30[]<[-](>)*6+[>[-]+]
20:25:23 <Vorpal> elliott, hah, beat you to it
20:25:30 <EgoBot> Score for quintopia_stall: 0.4
20:25:38 <elliott> Vorpal: no you didn't
20:25:44 <elliott> <Vorpal> ais523, I shall switch mine to ; then
20:25:45 <Vorpal> elliott, uh?
20:25:45 <elliott> <elliott> *ais523;
20:25:48 <elliott> I was correcting your line.
20:25:51 <Vorpal> elliott, oh right
20:26:04 <Vorpal> elliott, I didn't say I *had* switched it
20:26:06 <elliott> I think I'll just put Vector in Shiiro.Value.
20:26:07 <Vorpal> just that I shall
20:26:08 <elliott> No reason not to, really.
20:26:11 <Vorpal> which is different
20:26:17 <Vorpal> elliott, so your correction was incorrect
20:27:32 <elliott> cardinal :: Vector -> Bool
20:27:32 <elliott> cardinal (a,b) = ok a && ok b
20:27:32 <elliott> where ok x = x == -1 || x == 0 || x == 1
20:27:34 <elliott> SO ELEGAN
20:27:34 <elliott> T
20:27:36 <elliott> *ELEGANT
20:28:00 <quintopia> !bfjoust stall +>->+>>+<(+)*30[]<[-]<[-](>)*7+[>[-]+]
20:28:22 <EgoBot> Score for quintopia_stall: 2.9
20:28:28 <quintopia> whoa
20:28:28 <elliott> Hmm.
20:28:39 <elliott> Vorpal: See, splitting this up was the wrong decision, I have a circular dependency now.
20:28:54 <Vorpal> elliott, hm?
20:29:06 <Deewiant> elliott: abs x <= 1
20:29:12 <elliott> Deewiant: LESS EFFICIENT
20:29:18 <Deewiant> elliott: No branches
20:29:22 <Deewiant> elliott: MORE EFFICIENT
20:29:23 <elliott> Vorpal: Shiro.Stack has functions to push and pop from stacks in the Funge monad FM.
20:29:36 -!- pumpkin has quit (Ping timeout: 255 seconds).
20:29:37 <Vorpal> elliott, another issue with that cardinal one: 1,1 is cardinal in your example
20:29:38 <elliott> Vorpal: Shiro.Monad defines FM and FungeState, its state.
20:29:44 <elliott> FungeState contains a StackStack.
20:29:50 <elliott> So Shiro.Stack depends on Shiro.Monad and vice versa.
20:30:02 -!- copumpkin has joined.
20:30:24 <Vorpal> elliott, I believe your cardinal function is highly bugged!
20:30:43 <elliott> oh indeed
20:30:48 <elliott> but that's irrelevant
20:30:50 <elliott> circular dependency!
20:30:51 <elliott> i'm fucked!
20:30:52 <Vorpal> elliott, how so
20:30:56 <elliott> because circular
20:31:00 <Vorpal> elliott, why is that bad
20:31:13 <Vorpal> elliott, I mean it can be initialised in a specific order no?
20:31:28 <Lymia> !bfjoust headdesk (>)*10([-])*1(<)*10[](+)*256(>)*11([-])*1(<)*11[](+)*256(>)*12([-])*1(<)*12[](+)*256
20:31:33 <Lymia> I wonder.
20:31:34 <EgoBot> Score for Lymia_headdesk: 5.4
20:31:38 <elliott> Vorpal: um I think the module system has troubles
20:31:40 <elliott> with it
20:31:40 <Lymia> If I continued this pattern, how well would it do.
20:31:42 <elliott> even so, it's ugly
20:31:45 <elliott> this is why people have Types modules
20:31:49 <Vorpal> elliott, even if in the same module?
20:31:57 <elliott> I'm just going to put all my types in one module
20:31:58 <Lymia> WOULD IT BEAT TRIPWIRE?
20:32:02 <elliott> and have values and functions others
20:32:08 <Vorpal> hah
20:32:46 <elliott> but then that's ugly
20:32:47 <elliott> ugh
20:34:31 <Lymia> !bfjoust silly [[](+)*128]
20:34:39 <EgoBot> Score for Lymia_silly: 5.6
20:34:51 <Lymia> elliott, does this mean that I beat tripwire?
20:34:59 <elliott> dunno
20:35:02 <elliott> probably
20:35:05 <elliott> i think so, ask ais523 :P
20:35:28 <ais523> Lymia: report.txt has all the details
20:35:40 <ais523> but yes, that beats tripwire, it doesn't suicide fast enough to die first, and doesn't set decoys
20:35:54 <Lymia> nescience_shade?
20:35:57 <Lymia> tripwire is gone.
20:36:17 <elliott> gasp
20:36:23 <Lymia> We killed it.
20:36:23 <Lymia> D=
20:36:36 <Vorpal> !help bfjoust
20:36:37 <EgoBot> Sorry, I have no help for bfjoust!
20:36:39 <Vorpal> !help
20:36:40 <EgoBot> help: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help <command>.
20:36:48 <Vorpal> what was the page
20:36:55 <Lymia> Generation 11 is full of variations on
20:36:55 <Lymia> [>[+]-.-.-.-.---]
20:36:56 <Lymia> :v
20:37:09 <elliott> Lymia: suggestion: pit programs against *all* previous generations
20:37:14 <elliott> or at least the past, say, 5 to 10
20:37:22 <Lymia> elliott, what would that be?
20:37:25 <elliott> Lymia: that way you avoid regressing
20:37:26 <elliott> what would that be?
20:37:29 <Lymia> O(n!) or something?
20:37:35 <elliott> um no
20:37:38 <elliott> assuming every generation is the same size
20:37:40 <elliott> then it's O(1)
20:37:44 <Lymia> I mean.
20:38:04 <Lymia> It's already O(n^2) to the number of bots in each generation...
20:38:12 <quintopia> keeping the top two from each generation into the next is also a good idea
20:38:28 <Deewiant> O(n^(h+1)) where n is the generation size and h the amount of historical generations you compete against
20:38:37 <elliott> <quintopia> keeping the top two from each generation into the next is also a good idea
20:38:38 <elliott> this
20:38:39 <elliott> just do that
20:38:43 <elliott> then it's two more warriors per generation
20:38:44 <elliott> or whatever
20:38:57 <Lymia> Good idea, I guess.
20:39:20 <elliott> Deewiant: All sequences of bytes represent a valid fungespace, right?
20:39:40 <Deewiant> Unless you want to treat the input as encoded somehow (e.g. UTF-any), yes.
20:40:33 <elliott> Vorpal: I see no indication that form feeds must be ignored in Befunge.
20:40:36 <elliott> "In Trefunge-98, the Form Feed (12) character increments the z coordinate and resets the x and y coordinates to zero."
20:40:44 <elliott> But nowhere does it say that it is non-literal in Befunge-98.
20:40:57 <Deewiant> elliott: IT HAS BEEN INFERRED now shut up.
20:41:10 <elliott> Deewiant: Sorry, am I reminding you of Vorpal-circa-2008? :-)
20:41:17 <elliott> Or was it 2009.
20:41:50 -!- azaq23 has joined.
20:42:00 <elliott> Deewiant's silence only serves as confirmation.
20:42:13 <elliott> Deewiant: So is \r<FORM FEED>\n a valid line terminator?
20:42:14 <elliott> </troll>
20:42:27 <Deewiant> Hah, that's an interesting question actually :-D
20:42:42 <Deewiant> "Subsequent lines in Unefunge are simply appended to the first"
20:42:50 <Lymia> elliott, is \r\n\n\r a valid double line terminator?
20:42:53 <elliott> Deewiant: Ah, is that from what you inferred it?
20:43:01 <elliott> *fix that line to make sense
20:43:06 <Deewiant> Pretty much, yes
20:43:13 <Lymia> Unefunge?
20:43:16 <elliott> Deewiant: STILL ... I really don't see even an implication that form feeds get ignored in Befunge :D
20:43:21 <Lymia> Is that supposed to be a mix of Unlambda ane Befunge?
20:43:22 <elliott> Lymia: like befunge-98, but one-dimensional
20:43:24 <Deewiant> elliott: Form feeds in befunge should work analogously to newlines in befunge
20:43:26 <Lymia> and*
20:43:27 <Deewiant> Er
20:43:30 <Deewiant> s/befunge$/unefunge/
20:43:30 <elliott> Deewiant: Based on what? :-D
20:43:39 <Deewiant> Because it only makes sense
20:43:43 <elliott> Deewiant: I'm trying to DS9k here, you should be supportive.
20:43:45 <elliott> Okay, fine.
20:43:52 <elliott> Deewiant: Add \r<FORM FEED>\n to the next Mycology. :-)
20:43:53 <ais523> what do newlines do in unefunge nayway?
20:43:57 <ais523> *anyway
20:44:08 <elliott> ais523: <Deewiant> "Subsequent lines in Unefunge are simply appended to the first"
20:44:14 <ais523> aha
20:44:32 <elliott> ascii invented textspeak
20:44:33 <Deewiant> And "End-of-line markers are never copied into Funge-Space. ", of course.
20:44:33 <elliott> "who are you?" (WRU), "are you?" (RU)
20:44:35 <elliott> :D
20:45:32 <quintopia> !bfjoust bfbf (>+)*9<((+)*127<)*8(>)*8+[[+]>+]
20:45:37 <EgoBot> Score for quintopia_bfbf: 0.0
20:45:48 <elliott> fromByteString = go . filter (/=ff)
20:46:04 <elliott> Deewiant: Shiro: The only Befunge-98 implementation supporting \r<FF><FF><FF>\n<FF> as a line terminator.
20:46:18 <Deewiant> heh
20:46:37 <Deewiant> I'd argue that that's incorrect but I don't really care enough :-D
20:47:04 <quintopia> !bfjoust bfbf (>+)*9<((+)*127<)*7(>)*7+[[+]>+]
20:47:05 <elliott> Deewiant: Yeah, it probably is.
20:47:10 <EgoBot> Score for quintopia_bfbf: 0.0
20:47:12 <elliott> Deewiant: Technically, that should actually be two lines.
20:47:22 <elliott> Deewiant: I think it's \r\n, except with a forceful break after the \r.
20:47:29 <elliott> Because the form-feed operates on lines here.
20:48:04 <elliott> -- bug: this accepts \r<FF>\n as one newline, whereas it should be
20:48:05 <elliott> -- the same as \n\n, technically, but who gives a fuck, considering
20:48:05 <elliott> -- that the ignoring <FF> thing isn't actually in the spec at all
20:49:13 -!- kar8nga has quit (Read error: Connection reset by peer).
20:49:19 <zzo38> !bfjoust 1 [>]
20:49:26 <EgoBot> Score for zzo38_1: 5.6
20:49:48 <elliott> Deewiant: What do initial newlines do?
20:49:50 <elliott> Add padding?
20:49:58 <Deewiant> Increment the y-coordinate?
20:50:05 <zzo38> !bfjoust 1 +[[-]+]
20:50:10 <Deewiant> Cause the program to infinite loop, guaranteed?
20:50:11 <zzo38> !bfjoust 2 [>]
20:50:15 <elliott> Deewiant: Right.
20:50:39 <EgoBot> Score for zzo38_2: 8.2
20:50:39 <EgoBot> Score for zzo38_1: 4.9
20:51:29 <zzo38> !bfjoust 3 +[>+]
20:51:33 <EgoBot> Score for zzo38_3: 0.0
20:51:37 <quintopia> !bfjoust bfbf ((>+)*4(+<)*4)*64(>)*9+[>[-]+]
20:51:40 <EgoBot> Score for quintopia_bfbf: 1.0
20:51:52 <Lymia> !bfjoust dumb [+>]
20:51:57 <EgoBot> Score for Lymia_dumb: 5.6
20:52:04 <quintopia> whoa
20:52:20 <elliott> Couldn't match expected type `GHC.Word.Word8'
20:52:20 <elliott> against inferred type `Value'
20:52:21 <elliott> oh christ :)
20:52:21 <Lymia> !bfjoust dumb [[+>]+]
20:52:24 <EgoBot> Score for Lymia_dumb: 0.0
20:52:34 <elliott> hooray, (/= fromIntegral ff)
20:52:38 <zzo38> !bfjoust 4 +[>+<]
20:53:04 <EgoBot> Score for zzo38_4: 0.0
20:54:00 <zzo38> !bfjoust 5 ([>][<])*42
20:54:05 <EgoBot> Score for zzo38_5: 5.6
20:54:34 <zzo38> !bfjoust 6 ([>][+][<])*42
20:54:41 <EgoBot> Score for zzo38_6: 5.6
20:55:08 -!- kfr has left (?).
20:55:13 <zzo38> !bfjoust 7 [[-]>]
20:55:38 <zzo38> !bfjoust 8 >>+[[-]>]
20:55:41 <EgoBot> Score for zzo38_7: 5.4
20:55:44 <EgoBot> Score for zzo38_8: 5.2
20:57:03 <Vorpal> <elliott> Vorpal: I see no indication that form feeds must be ignored in Befunge. <-- oh?
20:57:07 <Vorpal> elliott, ask Deewiant then
20:57:10 <Vorpal> for where that came from
20:57:46 <elliott> Vorpal: His ass, AFAICT.
20:57:49 <elliott> :P
20:57:54 -!- copumpkin has changed nick to c0w.
20:58:14 <Vorpal> <Lymia> elliott, is \r\n\n\r a valid double line terminator? <-- triple I think. \r\n, \n, \r
20:58:22 <elliott> no clearly it's four
20:58:23 <elliott> \r
20:58:24 <elliott> \n
20:58:25 <elliott> \n
20:58:26 <elliott> \r
20:58:26 <elliott> :D
20:58:49 <Vorpal> elliott, no
21:02:15 <elliott> fromByteString = FungeSpace . foldl' go Map.empty . zip [0..] . B8.lines . B.filter (/= fromIntegral ff)
21:02:16 <elliott> where go m (y,s) = B.foldl' (\m' w -> Map.insert (y,undefined) (fromIntegral w) m') m s
21:02:17 <elliott> almost done!
21:03:31 <elliott> fromByteString = FungeSpace . snd . foldl' go (0, Map.empty) . B8.lines . B.filter (/= fromIntegral ff)
21:03:31 <elliott> where go (y,m) s = (y+1, snd $ B.foldl' (\(x,m') w -> (x+1, Map.insert (y,x) (fromIntegral w) m')) (0,m) s)
21:03:34 <elliott> Deewiant: and how long is YOUR reader
21:03:42 <Deewiant> Very, because my data structure is much more intricate
21:03:51 <Deewiant> And it handles trefunge and unefunge correctly :-P
21:03:52 <elliott> *Shiro.FungeSpace> fromByteString "abc\ndef"
21:03:52 <elliott> FungeSpace (fromList [((0,0),97),((0,1),98),((0,2),99),((1,0),100),((1,1),101),((1,2),102)])
21:03:54 <elliott> Look at that, it's perfect.
21:04:04 <zzo38> !bfjoust 9 ++[.+.-+.-.+.>+>+<<]
21:04:06 <elliott> I bet it's even efficient, thanks to phyooosion!
21:04:14 <EgoBot> Score for zzo38_9: 0.0
21:04:32 <elliott> FungeSpace (fromList [((0,0),13)])
21:04:45 <elliott> turns out lines doesn't support \r or \r\n
21:04:52 <zzo38> !bfjoust 10 >++[.+.-+.-.+.>+<]
21:05:39 <EgoBot> Score for zzo38_10: 0.0
21:06:15 <elliott> I fail to remove 32s, yay
21:06:47 <elliott> (That breaks my bounds function)
21:06:52 <Lymia> zzo38, what re you rying to do.
21:06:55 <Lymia> With the -+ and all.
21:07:06 <zzo38> !bfjoust 11 (>)*9([-]>)*20
21:07:14 <EgoBot> Score for zzo38_11: 5.6
21:07:18 <zzo38> Lymia: Just experiment, is all. I am not trying to win, really.
21:07:25 <Lymia> !bfjoust a_derp >-[>[-]+]
21:07:37 <EgoBot> Score for Lymia_a_derp: 1.2
21:08:37 -!- oerjan has quit (Quit: Lost terminal).
21:08:57 <zzo38> !bfjoust 12 (>+)*9[+]
21:09:13 <EgoBot> Score for zzo38_12: 0.3
21:09:35 <zzo38> !bfjoust 12 (>-)*11[-]
21:09:54 <EgoBot> Score for zzo38_12: 0.0
21:10:22 <zzo38> !bfjoust 13 (>+)*5[+.]
21:10:41 <EgoBot> Score for zzo38_13: 0.0
21:11:30 <zzo38> !bfjoust 14 ()))((((((((((((((((**************
21:11:30 <elliott> <monochrom> paying for homework is fine, as long as you pay well, IMO
21:11:32 <elliott> <monochrom> for example "I'll pay you us$5 this is good money for you considering how poor you are!" is not pay well. it's insulting. make it us$500.
21:11:33 <EgoBot> Score for zzo38_14: 0.0
21:11:36 <elliott> monochrom: the PoppaVic of #haskell?
21:13:08 <elliott> fromByteString :: ByteString -> FungeSpace
21:13:08 <elliott> fromByteString = snd . foldl' line (0, emptyFungeSpace) . B8.lines . B.filter (/= fromIntegral ff)
21:13:08 <elliott> where line (y,fs) s = (y+1, snd $ B.foldl' (byte y) (0,fs) s)
21:13:08 <elliott> byte y (x,fs') w = (x+1, insertFS (x,y) (fromIntegral w) fs')
21:13:16 <elliott> Vorpal: how readable is THAT!!
21:13:35 <elliott> it actually is pretty readable, if you read it backwards :P
21:14:01 <zzo38> !bfjoust 15 (>++++++++++>++++<++++>+++++++>++<++++>++++[>+++<+++>++<++++]>>+++<+++>+>++++++<++++>+++>+<++++<+<++++<<++++>+<+[<+>+])*12[-<>+]+[+]<[-]<>><><<>>><<><>>+++++++
21:14:34 <EgoBot> Score for zzo38_15: 0.0
21:15:15 <Deewiant> elliott: You're going to need a union function or give that a FungeSpace as input if you want to implement 'i' without mostly rewriting that
21:15:36 <elliott> Deewiant: Easy enough to take a FungeSpace as input... probably more efficient than union too.
21:15:41 <elliott> Deewiant: Does "i" really load at position (0,0)?
21:16:03 <Deewiant> No, "i" takes the position as input
21:16:13 <elliott> Ah, that's easy enough to do as well.
21:16:14 <Deewiant> And if you take a FungeSpace as input, you need to not overwriting existing stuff with spaces
21:16:19 <Deewiant> overwrite*
21:17:05 <zzo38> !bfjoust 16 This is a test of the emergency broadcast system
21:17:20 <EgoBot> Score for zzo38_16: 5.6
21:17:43 <elliott> Deewiant: Oh joy
21:18:07 <Vorpal> elliott, not sure
21:18:14 <zzo38> That's strange. It is not a valid program but I still earned 5.63
21:18:18 <elliott> mergeByteString :: FungeSpace -> Vector -> ByteString -> FungeSpace
21:18:18 <elliott> mergeByteString fs (ox,oy) = snd . foldl' line (oy,fs) . B8.lines . B.filter (/= fromIntegral ff)
21:18:18 <elliott> where line (y,fs) s = (y+1, snd $ B.foldl' (byte y) (ox,fs) s)
21:18:18 <elliott> byte y (x,fs) w = (x+1, if fs !@ (x,y) == space then insertFS (x,y) (fromIntegral w) fs else fs)
21:18:23 <elliott> Deewiant: Tada
21:18:35 <Vorpal> zzo38, it did nothing
21:18:40 <Deewiant> elliott: Wrong
21:18:43 <Vorpal> zzo38, I presume unknown chars are ignored
21:18:44 <elliott> Deewiant: Whyso
21:18:48 <Vorpal> zzo38, so it beat some other program
21:18:49 <Deewiant> elliott: fromIntegral w == space, not fs !@ (x,y)
21:18:57 <elliott> Deewiant: Oh, right
21:19:21 <elliott> mergeByteString :: FungeSpace -> Vector -> ByteString -> FungeSpace
21:19:21 <elliott> mergeByteString fs (ox,oy) = snd . foldl' line (oy,fs) . B8.lines . B.filter (/= fromIntegral ff)
21:19:21 <elliott> where line (y,fs) s = (y+1, snd $ B.foldl' (byte y) (ox,fs) s)
21:19:21 <elliott> byte y (x,fs) w = (x+1, let wv = fromIntegral w in if wv == space then insertFS (x,y) wv fs else fs)
21:19:23 <Deewiant> Or w == fromIntegral space, maybe :-P
21:19:33 <Deewiant> (For MORE SPEED)
21:19:54 <elliott> I have to do fromIntegral w anyway in the non-space case :P
21:19:57 <zzo38> But it does not save my program in the directory
21:20:05 <Deewiant> elliott: But not in the space!!
21:20:32 <zzo38> (It did save my others ones and then it deleted them)
21:20:34 <elliott> Deewiant: Oh no!!!
21:20:38 <elliott> It would be less ugly that way actually.
21:20:44 <elliott> Deewiant: BETTER:
21:20:47 <elliott> Deewiant: if w == 32
21:20:51 <elliott> Deewiant: THAT AVOIDS THE EXPENSIVE CONVERSION
21:20:53 <Deewiant> MAGIC NUMBER
21:21:05 <elliott> Deewiant: Arguably, space, cr, lf, and ff should be Integral a => a's.
21:21:09 <elliott> I have to do "fromIntegral ff" here too.
21:21:11 <elliott> Yeah, I'll fix that.
21:21:47 <elliott> mergeByteString :: FungeSpace -> Vector -> ByteString -> FungeSpace
21:21:47 <elliott> mergeByteString fs (ox,oy) = snd . foldl' line (oy,fs) . B8.lines . B.filter (/= ff)
21:21:47 <elliott> where line (y,fs) s = (y+1, snd $ B.foldl' (byte y) (ox,fs) s)
21:21:47 <elliott> byte y (x,fs) w = (x+1, if w == space then fs else insertFS (x,y) (fromIntegral w) fs)
21:21:55 <elliott> Deewiant: Now all I need is a "lines" that works on \r\n and \r :P
21:22:41 <Deewiant> elliott: Look at Data.List.Split (package is called split)
21:23:14 <elliott> Deewiant: Data.LIST???
21:23:20 <elliott> Deewiant: ByteStrings, man! They're EFFICIENT
21:23:28 <Deewiant> Oh, right, bytestring has lines too
21:23:31 <elliott> I know of split, but, yeah.
21:23:35 <elliott> Deewiant: Right. And it only works with \n.
21:23:36 <Deewiant> Well, do it manually then
21:23:53 <elliott> Deewiant: I would, except ByteString's API doesn't exactly have the most useful set of functions.
21:24:22 <zzo38> You don't use \r only as newlines anymore, I think? Linefeed moves to next line and has implied carriage return when a text file is output to the terminal on UNIX, but really, on a printer, you should use both (it doesn't matter the order), except blank lines can have just \n. So use "unix2dos" program to pipe a file to the printer?
21:24:29 * iconmaster just noticed that Unicode has a reserved character called Snowman. SNOWMAN!
21:24:56 <zzo38> iconmaster: Why?
21:25:06 <elliott> iconmaster: http://unicodesnowmanforyou.com/
21:25:07 <elliott> iconmaster: Not reserved.
21:25:18 <iconmaster> zzo38: lol.
21:25:36 <Gregor> iconmaster: It also has Goat, Love Hotel, ...
21:25:42 <elliott> But no TROLL FACE>
21:25:44 <elliott> *FACE.
21:25:46 <iconmaster> zzo38: Im makin a lang called Onecode which is going to use all the Unicode characters.
21:25:52 <elliott> iconmaster: Gooood luck with that :P
21:25:57 <elliott> iconmaster: Especially all the Han characters.
21:26:01 <zzo38> iconmaster: Good, this has been ideas from a while.
21:26:09 <elliott> IDEAS FROM A WHILE
21:26:22 <iconmaster> I mean, my GOAl is to use all of em, but idk if I can...
21:26:32 <zzo38> The next idea is to make programming language using all Computer Modern symbols (including mathematics).
21:26:33 <iconmaster> I'm just filling as many as I cn for now.
21:27:47 -!- elliott has left (?).
21:27:57 <iconmaster> awwww bye Elliott
21:28:14 -!- elliott has joined.
21:28:30 <elliott> Deewiant: Maybe I'll use this, doesn't look overengineered at _all_: "attosplit library: Split a lazy bytestring at boundaries defined by an attoparsec parser"
21:28:39 <elliott> stringsearch library: Fast searching, splitting and replacing of ByteStrings
21:28:39 <elliott> hm
21:28:56 * iconmaster says 〠 looks funny
21:30:16 <zzo38> iconmaster: I do not have that font.
21:30:36 <iconmaster> zzo38: Then it must look VERY funny to you.
21:30:56 <elliott> Deewiant: http://hackage.haskell.org/package/stringsearch
21:31:07 <elliott> Deewiant: Think I need Boyer-Moore to search for newlines, or maybe Karp-Rabin?
21:32:01 <Deewiant> Well, if they don't have Aho-Corasick, go with Karp-Rabin
21:32:42 <zzo38> iconmaster: It just doesn't display.
21:33:26 <iconmaster> zzo38: It's a CJK Postal Face, whatever that is.
21:34:39 <elliott> Deewiant: :D
21:34:50 <coppro> d/win 3
21:34:55 <iconmaster> Onecode is going to have lots and lots of data types. Ideas for really esoteric data types?
21:35:20 <elliott> iconmaster: ordered graphs
21:35:39 <iconmaster> sounds cool...
21:36:14 <elliott> iconmaster: i just made them up :)
21:36:17 <elliott> good luck finding out what they are
21:36:49 <iconmaster> that's an actual data type... Wiki it.
21:37:05 <elliott> iconmaster: ah, that's not what i meant
21:37:12 <elliott> iconmaster: an ordered set is just a list without duplicates
21:37:15 <elliott> so an ordered graph is ???
21:37:25 <iconmaster> o lol. A graph w/o dupilacites?
21:37:33 <elliott> errrr no
21:38:08 <iconmaster> i'm not getting it, i guess. I really need to learn more mathematics and stuff.
21:38:14 -!- nddrylliog has joined.
21:39:16 <iconmaster> So... Graphs are a definite consideration for a Onecode data type.
21:39:59 <coppro> iconmaster: graphs are just tuples
21:40:10 <coppro> so are most important mathematical structures
21:40:13 <elliott> nddrylliog:
21:40:17 <elliott> mergeByteString :: FungeSpace -> Vector -> ByteString -> FungeSpace
21:40:17 <elliott> mergeByteString fs (ox,oy) = snd . foldl' line (oy,fs) . B8.lines . B.filter (/= ff)
21:40:17 <elliott> where line (y,fs) s = (y+1, snd $ B.foldl' (byte y) (ox,fs) s)
21:40:17 <elliott> byte y (x,fs) w = (x+1, if w == space then fs else insertFS (x,y) (fromIntegral w) fs)
21:40:19 <elliott> what's that in ooc
21:40:20 <coppro> turing machines? actually tuples
21:40:21 <elliott> sorry
21:40:23 <elliott> sorry
21:40:25 <elliott> sorry
21:40:27 <elliott> i mean
21:40:29 <elliott> uh
21:40:31 <elliott> what's your lang called again
21:40:32 <coppro> kripke structures? actually tuples
21:40:33 <elliott> your new one
21:40:35 <elliott> that
21:40:39 <elliott> crowbar.
21:40:47 <elliott> nddrylliog: more seriously: http://esolangs.org/wiki/Talk:Crowbar
21:41:08 <nddrylliog> so far nobody can take upon elliott in the "Let's make nddrylliog run away as quick as we can" challenge
21:41:10 <nddrylliog> elliott: oh hai there.
21:41:16 <elliott> HI
21:41:17 <elliott> :D
21:42:25 <coppro> nddrylliog: your body is so sexy
21:43:00 <elliott> Deewiant: Does Mycology test \r\n or \r terminators?
21:43:03 <nddrylliog> coppro: why hello there.
21:43:20 <elliott> ignore coppro, he eats shit *rimshot*
21:43:21 <Deewiant> elliott: \r\n only IIRC
21:43:34 <nddrylliog> coppro: is it my tight S-size OpenSUSE t-shirt that makes me look so sexy?
21:43:37 <elliott> Deewiant: how early? :P
21:43:54 <Deewiant> Well, it's all written with DOS newlines...
21:44:11 <elliott> Deewiant: argh :)
21:44:49 <elliott> the Instruction Pointer section is damned lies, right?
21:44:53 <elliott> pretty sure t gives you multiple IPs
21:45:16 * iconmaster is amazed at the staggaring array of Unicode arrows.
21:45:57 * iconmaster is not takling about what anyone else is saying, and should be ignored.
21:45:57 <elliott> RITE???
21:46:06 <Deewiant> Yeah, probably
21:46:46 <elliott> Deewiant: What happens if two IPs write to the same location in fungespace simultaneously? :D
21:46:57 <Deewiant> Nothing happens simultaneously
21:47:01 <Deewiant> Except with Vorpal's ATHR
21:47:04 <elliott> Deewiant: How are the IPs loaded?
21:47:05 <iconmaster> elliott: THe universe explodes.
21:47:08 <elliott> erm
21:47:10 <elliott> Deewiant: How are the IPs ordered?
21:47:16 <Deewiant> Read the section on t :-P
21:47:38 <Deewiant> It does leave at least one ambiguity but you'll get the idea
21:47:39 <elliott> THAT'S WHAT THEY'RE EXPECTING ME TO DO
21:47:49 * nddrylliog is in presentation-making mode
21:47:59 <elliott> Deewiant: Is it just me or is the Funge-98 spec totally illogically ordered?
21:48:12 <Deewiant> ... maybe?
21:48:18 <elliott> "To remember which is which, visualize yourself on the seat of a bicycle, looking down at the handlebars:"
21:48:20 <elliott> xD
21:48:27 <elliott> worst justification for syntax ever
21:48:29 <Deewiant> That's actually a good memory rule
21:48:31 <Deewiant> Worked for me, anyway
21:48:48 <elliott> Oh god, you can ... pop the delta?
21:48:51 <elliott> Oh, right.
21:49:14 <elliott> I think wrapping is going to be very hard to implement with my Map structure.
21:49:36 <Deewiant> Yes.
21:49:52 <elliott> Deewiant: What kind of structure do I want? :-P
21:49:55 <nddrylliog> I *hate* wikimedia markup
21:50:08 <elliott> nddrylliog: *mediawiki
21:50:19 <nddrylliog> right
21:50:52 -!- cheater00 has quit (Ping timeout: 240 seconds).
21:50:56 <Deewiant> Well, you actually want a bucket PR-CIF k-d tree of axis-aligned bounding boxes but for you, storing an additional (Vector,Vector) will suffice
21:51:30 <elliott> Deewiant: Is that what you actually use? :P
21:51:34 <nddrylliog> elliott: that ByteString example looks fun though - if you care to explain it a bit more when I get back I might have a shot at it
21:51:47 <Deewiant> No, I just have an array of bounding boxes because I've been too lazy to code up k-d trees :-P
21:51:50 -!- cheater00 has joined.
21:51:52 <elliott> Also, storing just one additional (Vector,Vector) in the fungespace? Really?
21:51:55 <nddrylliog> cause right now I have a train to take. seeya!
21:51:59 <elliott> nddrylliog: bai
21:52:06 <Deewiant> elliott: It's good enough, yes.
21:52:17 <elliott> Deewiant: Oh, two vectors.
21:52:18 <Deewiant> For most non-pathological cases anyway.
21:52:20 <elliott> Deewiant: Just lower/upper bound?
21:52:22 <Deewiant> Yeah.
21:52:35 <elliott> Deewiant: Then just iterate going forwards until I hit that. Right.
21:52:45 <elliott> Deewiant: Or, I could just use my bounds function for now and optimise it later :P
21:52:55 <elliott> Deewiant: slowdown.b98 is designed to trip up such things, right?
21:53:01 <Deewiant> Yeah. :-P
21:53:14 <Deewiant> Or wait, actually no.
21:53:19 <zzo38> What do you dislike about Mediawiki markup?
21:53:27 -!- Cheery has quit (Quit: Lost terminal).
21:53:29 <Deewiant> It does invoke that by accident, but it's not "designed" to do it. :-D
21:53:34 -!- impomatic has quit (Quit: http://shiar.nl/calc/z80/optimize).
21:53:50 -!- iconmaster has quit (Quit: ).
21:53:53 <Deewiant> The "design" was just to jump out of cfunge's statically allocated space. :-P
21:54:04 -!- Phantom_Hoover has quit (Remote host closed the connection).
21:54:46 <elliott> Deewiant: Did cfunge ever get fast at slowdown?
21:55:05 <elliott> Or did he microoptimise so much that changing the algos was impossible :D
21:55:20 <Deewiant> Well, he hasn't looked into changing the algos, he's sticking with the static area + hash map
21:56:23 <elliott> Deewiant: Basically, he's optimised for one program (fungot) and has therefore captured the entire Befunge-98 implementation market, which consists of fizzie.
21:56:23 <fungot> elliott: the line starting with ' alternatively' was for jix
21:56:28 <elliott> Deewiant: :P
21:56:41 -!- nddrylliog has quit (Ping timeout: 240 seconds).
21:56:47 <Deewiant> ccbi is mostly faster than cfunge on fungot these days (last I checked on something, anyway)
21:56:48 <fungot> Deewiant: i demand an accounting. i will look into it. i never managed to move from one place to another, rather than " from"
21:58:21 <elliott> Deewiant: Yeah, but fizzie will never use CCBI because it's impossible to get a D compiler.
21:58:26 <ais523> I love the way that fungot needs leading space to move
21:58:26 <fungot> ais523: scheme grammar or english grammar?) guitar riffs this band is doing it as an educational tool
21:58:31 <ais523> some sort of run-up, presumably
21:58:37 <elliott> ais523: eh?
21:58:55 <Deewiant> elliott: Presumably not, yes
21:58:55 <ais523> elliott: it can't move "from", just " from"
21:59:02 <elliott> oh
21:59:14 <quintopia> ais523: what's the directory of bfj programs again?
21:59:17 <elliott> guitar riffs as an educational tool sound interesting
21:59:32 <elliott> also, (pick i (grammar scheme))
22:00:02 <elliott> Why is "y" so crazy.
22:01:14 <elliott> SHRO is 0x5348524F, I think
22:01:16 <elliott> *think.
22:04:06 <elliott> "Except for any limitations noted above or hitherto undiscovered, FBBI v0.98 is 100% compliant with the Funge-98 Final Specification, located at"
22:04:07 <elliott> lol
22:04:28 <ais523> http://codu.org/eso/bfjoust/in_egobot/
22:04:34 <ais523> quintopia: ^
22:04:54 <quintopia> thx
22:05:11 <quintopia> which one is tripwire? :P
22:05:48 * elliott writes advance
22:06:58 <elliott> Man, Deewiant never told me I'd have to use my brain to prove him wrong.
22:09:01 <elliott> let x' = if vx > 0 && x >= mxx then mnx + vx else x + vx
22:09:01 <elliott> y' = if vy > 0 && y >= mny then mny + vy else y + vy
22:09:04 <elliott> Wait.
22:09:20 <elliott> It's actually just:
22:09:36 <elliott> minimumx + ((x - minimumx + velocityx) % maximumx)
22:09:37 <elliott> Right?
22:10:02 <olsner> I wonder if I'll ever be required to allocate several contiguous page frames or if I can take all the shortcuts I want
22:10:07 <elliott> No wait...
22:10:17 <elliott> minimumx + ((x - minimumx + velocityx) % (maximumx - minimumx))
22:10:49 * elliott waits for Deewiant to correct him
22:11:07 <Deewiant> I can't remember how that works like that, my algo is different
22:11:24 <olsner> it's just f x vx mnx, for some f
22:11:33 <elliott> Deewiant: I'd ask you what your algo is, but then I'd be Vorpal :D
22:11:47 <Deewiant> Read the source :-P
22:12:05 <Vorpal> <Deewiant> Worked for me, anyway <-- same for me
22:12:08 <elliott> *Shiro.FungeSpace> advance origin east emptyFungeSpace
22:12:08 <elliott> (*** Exception: divide by zero
22:12:09 -!- Lymia_ has joined.
22:12:10 <elliott> Hell yeah
22:12:17 <elliott> *Hells
22:12:28 <elliott> Awesome, you can't do %0.
22:12:38 <Vorpal> Deewiant, PR-CIF?
22:12:58 <elliott> *Shiro.FungeSpace> advance origin east emptyFungeSpace
22:12:59 <elliott> (0,0)
22:13:01 <elliott> Clearly it is perfect
22:13:22 <Vorpal> elliott, your algo for?
22:13:23 <Deewiant> It's a variant of the MX-CIF and PR k-d trees :-P
22:13:26 <elliott> Vorpal: Moving.
22:13:33 <Vorpal> elliott, moving as in j?
22:13:39 <elliott> No, just as in moving.
22:13:41 <elliott> As in going forward.
22:13:46 <elliott> advance :: Vector -> Vector -> FungeSpace -> Vector
22:13:46 <elliott> advance (x,y) (vx,vy) fs =
22:13:46 <elliott> let ((mnx,mny),(mxx,mxy)) = bounds fs
22:13:46 <elliott> x' = mnx + ((x - mnx + vx) `mod` (mxx - mnx + 1))
22:13:46 <elliott> y' = mny + ((y - mny + vy) `mod` (mxy - mny + 1))
22:13:49 <elliott> in (x',y')
22:13:51 <Vorpal> elliott, oh. Adding delta to current
22:13:55 <elliott> Vorpal: And wrapping.
22:13:56 <Vorpal> and then checking for wrapping
22:14:01 <elliott> Vorpal: No checks here :P
22:14:08 <Vorpal> elliott, oh?
22:14:12 <elliott> See the use of mod.
22:14:18 <Vorpal> elliott, it doesn't work for non-cardinal
22:14:22 <elliott> You sure?
22:14:29 <Vorpal> elliott, 99.99%
22:14:32 <elliott> Why?
22:14:38 <Vorpal> elliott, ask Deewiant
22:14:43 <elliott> *Shiro.FungeSpace> advance (3,0) (2,0) hello
22:14:44 <elliott> (0,0)
22:14:47 <elliott> (hello is just the fungespace "hello")
22:14:48 <Vorpal> <Deewiant> It's a variant of the MX-CIF and PR k-d trees :-P <-- I don't know of either
22:14:52 <zzo38> What is the correct bibliography citation to cite one program I wrote within another?
22:15:04 <Vorpal> elliott, it won't work for 2,7 or such I suspect
22:15:15 -!- Lymia has quit (Ping timeout: 240 seconds).
22:15:20 <elliott> Vorpal: I don't see why not
22:15:29 <elliott> *Shiro.FungeSpace> advance (0,0) (2,7) hello
22:15:29 <elliott> (2,0)
22:15:31 <Vorpal> elliott, because it wraps the wrong way as far as I can tell
22:15:32 <elliott> Hmm
22:15:39 <elliott> Is that right?
22:15:41 <Vorpal> elliott, pretty sure that is the wrong place
22:15:43 <elliott> (0,0) is current pos
22:15:45 <Vorpal> not 100% sure
22:15:45 <elliott> (2,7) is delta
22:15:50 <elliott> I think (2,7) should loop forever, right?
22:15:51 <elliott> delta
22:15:54 <Vorpal> elliott, and bounding box?
22:16:04 <elliott> Vorpal: It's just the fungespace "hello".
22:16:04 <Vorpal> elliott, all deltas will loop forever if they don't hit anything
22:16:18 <Vorpal> elliott, I know seven different hello world in befunge
22:16:27 <elliott> Vorpal: It's just the fungespace "hello".
22:16:31 <Vorpal> ah
22:16:37 <Vorpal> you mean literally
22:16:43 <Vorpal> well then I think it must be wrong
22:16:45 <Vorpal> ask Deewiant
22:16:48 <elliott> Deewiant: Remember when you and Vorpal talked about Funge-98 and whenever he didn't understand you just repeated the same thing?
22:16:51 <elliott> It totally works, doesn't it?
22:17:19 <Vorpal> elliott, I tried to interpret non-literally :P
22:17:47 <fizzie> elliott: It's like saying ";" to a Prolog query.
22:17:57 <Vorpal> fizzie, what does that do
22:18:09 <fizzie> Vorpal: Tries to find another answer for you.
22:18:10 -!- MigoMipo has quit (Read error: Connection reset by peer).
22:18:18 <elliott> :D
22:18:19 -!- Lymia_ has changed nick to Lymia.
22:18:21 -!- Lymia has quit (Changing host).
22:18:21 -!- Lymia has joined.
22:18:29 <Vorpal> aha
22:18:30 <elliott> fizzie: Reminds me of DMM's Pavlov operating system.
22:18:34 <elliott> "no, I didn't want that" "Did you want this instead?"
22:18:35 <Vorpal> elliott, then I guess that makes sense!
22:19:00 <Lymia> Well.
22:19:07 <Lymia> That was a rather egregious failure.
22:19:14 <zzo38> Did you know that many commands that have the same name in DVI and GF formats also have the name code number? This is probably done on purpose that one program can read both files using the same set of @d macros?
22:19:16 <Vorpal> what was
22:19:16 <fizzie> ?- member(X, [1,2,3]).
22:19:16 <fizzie> X = 1 ;
22:19:16 <fizzie> X = 2 ;
22:19:16 <fizzie> X = 3 ;
22:19:16 <fizzie> false.
22:19:23 <Lymia> I tried to start the BF Joust evolver with random programs.
22:19:24 <fizzie> (Those semicolons are what I typed.)
22:19:36 <Lymia> It is now generation 156
22:19:37 <ais523> "Onecode's major goal is to use every Unicode character in its commands. It currently is including an accumulator, and as many data types as possible."
22:19:40 <Lymia> The bots all start with []
22:19:44 <ais523> that's so going to be the longest fix ever
22:19:51 <elliott> Lymia: [[In the days when the Sussman was a novice, Minsky once came to him as he sat hacking at the PDP-6.
22:19:52 <elliott> "What are you doing?", asked Minsky.
22:19:52 <elliott> "I am training a randomly wired neural net to play Tic-tac-toe", Sussman replied.
22:19:52 <elliott> "Why is the net wired randomly?", asked Minsky.
22:19:52 <elliott> "I do not want it to have any preconceptions of how to play", Sussman said.
22:19:53 <elliott> Minsky then shut his eyes.
22:19:53 <Vorpal> Lymia, whops
22:19:54 <ais523> *longest spec
22:19:55 <elliott> "Why do you close your eyes?" Sussman asked his teacher.
22:19:57 <elliott> "So that the room will be empty."
22:19:59 <elliott> At that moment, Sussman was enlightened.]]
22:20:11 <Lymia> Heh.
22:20:18 <ais523> elliott: evolving from random programs can still be interesting
22:20:29 <Lymia> elliott, starting from simple bots resulted in a brute force attacker.
22:20:33 <Lymia> With no variation.
22:20:35 <Vorpal> elliott, I thought of the same quote there
22:20:35 <elliott> Lymia: Heh.
22:20:57 <Lymia> Starting with complex bots causes the complex bots to gather mutations and become worse.
22:21:12 <Lymia> I'm going to figure out a way to make it work better when I get back from dinner.
22:21:19 <Vorpal> Lymia, genetic algorithms are hard.
22:21:22 <Lymia> Maybe something ELSE will spring up...
22:21:24 <elliott> Vorpal: it's not genetic
22:21:26 <elliott> it's hill-climbing
22:21:27 <Vorpal> elliott, oh
22:21:29 <Vorpal> elliott, I see
22:21:29 <elliott> unless Lymia added breeding
22:21:35 <Lymia> elliott, I might.
22:21:42 <Lymia> Cross over the best few bots.
22:21:45 <Lymia> Add them to the hill.
22:21:50 <elliott> Crossing BF is very hard.
22:21:54 <Vorpal> elliott, some said generation so I thought genetic
22:22:01 <Lymia> If the bots are related, they might get better overall.
22:22:02 <Vorpal> and yeah what elliott said
22:22:08 <Lymia> If the bots are completely different, then the end result will fail.
22:22:11 <elliott> I blame Vorpal for this advance algorithm not working.
22:22:12 <Lymia> It's the opposite of real life!
22:22:19 <Vorpal> elliott, what algorithm?
22:22:22 <Lymia> In real life, inbreeding makes things worse.
22:22:26 <elliott> The same as the one I pasted.
22:22:28 <Lymia> In BF, inbreeding has the chance to make things better!
22:22:30 * Lymia runs
22:22:31 <elliott> let ((mnx,mny),(mxx,mxy)) = bounds fs
22:22:32 <elliott> x' = mnx + ((x - mnx + vx) `mod` (mxx - mnx + 1))
22:22:32 <elliott> y' = mny + ((y - mny + vy) `mod` (mxy - mny + 1))
22:22:32 <elliott> in (x',y')
22:22:34 <Vorpal> elliott, I told you it wouldn't work
22:22:36 <Vorpal> so....
22:22:44 <elliott> Lymia: Insert derivative "wincest" comment here.
22:22:44 <Vorpal> elliott, anyway it doesn't handle negative coords does it?
22:22:48 <Lymia> =p
22:22:53 <elliott> Vorpal: It does, I think.
22:22:56 <elliott> Vorpal: But I still blame you for it not working.
22:22:57 <Vorpal> like wrapping from 0,10 to 0,-230
22:23:09 <Vorpal> elliott, I'm not involved in it, so that makes no sense
22:23:09 <elliott> That's why it uses mnx/mny.
22:23:12 <elliott> Vorpal: Yes it does.
22:23:23 <Lymia> .[>.[]-]-.+[]>->
22:23:24 <Lymia> Oh?
22:23:26 <Lymia> This is VERY intresting.
22:23:49 <elliott> !bfjoust toto .[>.[]-]-.+[]>->
22:23:57 <elliott> !bfjoust toto .[>.[]-]-.+[]>->
22:24:07 <Vorpal> also curses on all these plastic cards. I have three different for university (doors, library, student card for discounts). Couldn't they combine those into one?
22:24:08 <Lymia> Isn't this one step removed from a brute force attack?
22:24:22 <Lymia> i.e. [>[-]-]
22:24:34 <elliott> Vorpal: be thankful: you don't have a Door
22:24:35 <elliott> cue ais523
22:24:38 <Vorpal> elliott, hah yes
22:24:57 <zzo38> Vorpal: Maybe for privacy purposes they give you three instead of just one? I don't know.
22:24:58 <ais523> they are all the same card for me
22:25:04 <Vorpal> ais523, heh
22:25:14 <Vorpal> ais523, but are you still a student?
22:25:17 <Lymia> elliott, I expect a simple attackX like bot by generation 300
22:25:18 <ais523> yes
22:25:23 <elliott> he studies Ph.D.s
22:25:25 <Vorpal> ais523, oh I thought you were teaching
22:25:25 <ais523> in fact, technically I'm only a second year
22:25:26 <elliott> Lymia: lawl
22:25:28 <Lymia> ...
22:25:29 <elliott> Vorpal: TA
22:25:30 <Lymia> And then they take over.
22:25:30 <Vorpal> ais523, what
22:25:33 <Lymia> And nothing else gets made.
22:25:34 <Lymia> The End.
22:25:35 <elliott> ais523: heh
22:25:35 <Vorpal> elliott, what?
22:25:38 <elliott> ais523: you're doing worse than oklopol!
22:25:40 <zzo38> elliott: What kind of Ph.D.s?
22:25:41 <elliott> no wait
22:25:43 <elliott> ais523: you're doing better than oklopol!
22:25:51 <elliott> Vorpal: teaching assistant
22:25:53 <Vorpal> aha
22:25:54 <elliott> zzo38: phdy phds
22:26:07 <elliott> ais523: did your first year take exceptionally long or is my perception of time skewed?
22:26:19 <ais523> elliott: the counter reset when I finished my Master's degree
22:26:20 <Vorpal> it is strange it isn't called Comp.D or such
22:26:21 <Lymia> elliott, right now, the status quo is "These bots are trying to not die from wandering off the tape. Therefore we will stick ourselves."
22:26:26 <fizzie> All our graduate students are also teaching; the new rules say that even "purely research" people have to do 56 hours of teaching per year. Granted, that's not very much.
22:26:29 <Vorpal> I mean why it is it all Ph.D
22:26:31 <elliott> ais523: heh
22:26:37 <Vorpal> ph stands for philosophy after all
22:26:40 <elliott> Vorpal: no
22:26:44 <EgoBot> Score for elliott_toto: 0.0
22:26:44 <ais523> fizzie: those rules aren't new in our department, they've been like that for a while
22:26:45 <EgoBot> Score for elliott_toto: 0.0
22:26:49 <Vorpal> elliott, ?
22:26:52 <ais523> Vorpal: "philosophy" used to just mean "science"
22:26:54 <elliott> The term "philosophy" does not refer solely to the modern field of philosophy, but is used in a more broad sense in accordance with its original Greek meaning, which is "love of wisdom". In most of Europe, all fields other than theology, law and medicine were traditionally known as philosophy.
22:26:56 <Vorpal> ais523, aha
22:27:28 <Vorpal> today they should all be Sci.D then
22:27:32 <Vorpal> including medicine and so on
22:27:33 -!- c0w has changed nick to copumpkin.
22:27:38 <Vorpal> well probably not law
22:27:41 <Vorpal> or theology
22:27:48 <elliott> we should start handing out Ls.D.s!
22:27:54 <elliott> Law Science Doctorates, or something
22:27:56 <Vorpal> elliott, XD
22:28:05 <elliott> and in countries with evil communist education? well, they offer FREE LSD
22:28:09 <Vorpal> elliott, I think it is likely Jur.D
22:28:39 <zzo38> The command for no operations is different in GF and DVI, but they have a different name so that you can tell the difference.
22:28:51 <Lymia> elliott.
22:28:52 <Lymia> Hmm...
22:29:03 <Lymia> How much do you think it would help if I added a pesudoopcode "loop forever"
22:29:03 <Vorpal> zzo38, and? how is this relevant to the current discussion
22:29:07 <Lymia> Which would basicly be (x)*100000
22:29:07 <elliott> Lymia: Not at all.
22:29:11 <elliott> Well.
22:29:12 <elliott> Maybe.
22:29:18 <elliott> Lymia: try *1024
22:29:21 <elliott> more is unlikely to help
22:29:27 <Lymia> 100000 is the opcode limit.
22:29:28 <Lymia> :v
22:29:30 <elliott> hey Vorpal, what's a good wrapping algorithm
22:29:40 <zzo38> Vorpal: No I just wrote a message from a few minutes ago and I typed the next line more slowly, sorry
22:29:54 <fizzie> ais523: Well, they started this study-year at our place, and they've had some moderate trouble in inventing teaching tasks for everyone. I'm doing the assistantizing thing for "Machine Learning: Advanced Probabilistic Methods" now because of that.
22:29:55 <Vorpal> elliott, a trivial one for cardinal then the slow one for non-cardinal. Since the non-cardinal is so much rarer
22:30:14 <elliott> Vorpal: What's the non-cardinal one, I only care about perfect algorithms
22:30:26 <Vorpal> fizzie, XD
22:30:32 <elliott> Microoptimisation starts as soon as I get full pass on Mycology
22:30:37 <elliott> And no sooner
22:30:49 <Vorpal> elliott, the one in the spec
22:31:04 <elliott> Vorpal: The spec doesn't have an algorithm
22:31:08 <Vorpal> elliott, yes it does
22:31:12 <Vorpal> elliott, in a very confusing place
22:31:18 <elliott> Yy
22:31:18 <elliott> *Yay
22:31:38 <elliott> /wrap/ doesn't find it
22:31:41 <quintopia> is there a language wherein it is provably undecidable whether or not it is Turing-complete?
22:31:43 <elliott> Well
22:31:43 <elliott> When the IP attempts to travel into the whitespace between the code and the end of known, addressable space, it backtracks. This means that its delta is reversed and it ignores (skips over without executing) all instructions. Travelling thus, it finds the other 'edge' of code when there is again nothing but whitespace in front of it. It is reflected 180 degrees once more (to restore its original delta) and stops ignoring instructions. Execution t
22:31:43 <elliott> hen resumes normally - the wrap is complete.
22:31:45 <elliott> Do you mean that?
22:31:53 <Vorpal> elliott, you fail: http://catseye.tc/projects/funge98/doc/funge98.html#Wrapping
22:31:53 <Lymia> >.>
22:31:54 <elliott> quintopia: Oolzybub and Murphy is TC iff Goldbach
22:31:59 <elliott> Vorpal: Do you mean that quote?
22:32:05 <Lymia> Maybe I should try an unsubtle push.
22:32:08 <Vorpal> elliott, yes
22:32:10 <Lymia> Something like a new opcode "ClearCell"
22:32:15 <Lymia> Which would translate to "[-]"
22:32:15 <elliott> *Oozlybub
22:32:17 <elliott> quintopia: http://catseye.tc/projects/oozlybub-and-murphy/
22:32:26 <quintopia> elliott: goldbach is not provably undecidable afaik
22:32:31 <Vorpal> elliott, that paragraph is the slow algorithm
22:32:50 <elliott> quintopia: well sure
22:33:04 <elliott> "When the IP attempts to travel into the whitespace between the code and the end of known, addressable space,"
22:33:09 <elliott> does this mean whenever it hits whitespace of any sort?
22:33:19 <elliott> or just when it hits the maximum or something?
22:33:33 <elliott> I just don't quite understand it :P
22:33:34 <Vorpal> elliott, when it hits/goes past the edge works
22:33:58 <Vorpal> elliott, also don't feel bad for not understanding it. Not everyone can have an intellect like me, cpressey and Deewiant!
22:34:00 <Vorpal> ;)
22:34:07 -!- BeholdMyGlory has joined.
22:34:08 <elliott> cpressey clearly doesn't have the intellect, he couldn't implement it properly.
22:34:09 <Vorpal> (aka, a mad one)
22:34:20 <zzo38> If Goldbach conjecture is not provably undecidable, can you make one that involves something which is provably undecidable, but can still be turing-complete based on that?
22:34:23 <elliott> he just barfed out some text and now we're stuck with it, 13 years later :)
22:34:30 <Vorpal> elliott, yeah
22:34:42 -!- Behold has quit (Read error: Operation timed out).
22:36:00 <elliott> I still don't quite get it :P
22:36:07 <elliott> OK, let's see.
22:36:22 <Vorpal> elliott, cfunge implements it as the slow variant
22:36:25 <Vorpal> you can read it's code
22:36:38 <elliott> If the IP's x or y is greater than the maximum x or y, then we go into a loop, with vx and vy both negated.
22:36:55 <elliott> Then we keep advancing with the delta until we go past the other end of the space.
22:37:03 <Vorpal> elliott, I believe ccbi instead solves diophantine equations!
22:37:11 <elliott> If we're at one end, we start executing there normally.
22:37:14 <Lymia> !bfjoust finally +>.[]([-]-->++)*12[<.>.+]-+.
22:37:15 <elliott> Otherwise, we're in an infinite loop or something.
22:37:20 <elliott> Vorpal: Can't read cfunge code, it's GPL';d.
22:37:22 <elliott> *GPL'd.
22:37:23 <EgoBot> Score for Lymia_finally: 0.0
22:37:53 <Vorpal> elliott, okay: detect you went past end. Reverse delta. Go back until you hit other end. Reverse again. Continue execution
22:37:58 <Vorpal> elliott, did that make more sense?
22:38:06 <elliott> Vorpal: Except with non-cardinal direction you *might not hit the other end*.
22:38:08 <elliott> You might just go past it.
22:38:09 <elliott> And then what?
22:38:23 <Vorpal> elliott, reverse and start from the first position inside of course
22:38:48 <elliott> Rihgt.
22:38:49 <elliott> *Right.
22:38:54 <elliott> Now to translate that to functional code.
22:38:55 <Vorpal> elliott, and that will always exist unless another thread messes up
22:39:04 <Vorpal> elliott, someho
22:39:05 <Vorpal> how*
22:40:02 <elliott> Vorpal: What happens then :P
22:40:12 <Vorpal> elliott, buggered if I know
22:40:16 <Vorpal> elliott, probably infinite loop
22:40:21 <Vorpal> in the wrapping code
22:40:33 <Vorpal> elliott, not that there is any sensible suggestion as for what you should do
22:40:43 <Vorpal> elliott, you don't exactly have ATHR
22:41:26 <ais523> elliott: doing all of mycology, even TRDS?
22:41:33 <elliott> ais523: that's a separate test
22:41:33 <Vorpal> I hope so
22:41:36 -!- zzo38 has left (?).
22:42:00 <Vorpal> elliott, maybe get it running in mycology and do wrapping when you hit that
22:42:03 <Vorpal> that seems saner
22:42:10 <elliott> loop (x,y) (vx,vy) fs =
22:42:10 <elliott> let ((mnx,mny),(mxx,mxy)) = bounds fs
22:42:10 <elliott> in if x < mnx || y < mny
22:42:10 <elliott> then (mnx+vx, mny+vy)
22:42:10 <elliott> else if x > mnx || y > mny
22:42:10 <elliott> then loop (x-vx, y-vy)
22:42:12 <elliott> else (x,y)
22:42:16 <elliott> That look about right?
22:42:25 <elliott> (vx,vy) there are ORIGINAL (vx,vy)
22:42:27 <elliott> not flipped
22:42:50 <copumpkin> why tuple things up like that?
22:43:01 <elliott> copumpkin: because they're Vectors
22:43:06 <elliott> funge vectors
22:43:11 <copumpkin> pff who cares :P
22:45:43 <elliott> argh, i need to flip < and >
22:45:52 <elliott> depending on which way we're travelling
22:45:52 <elliott> :(
22:46:16 <elliott> *Shiro.FungeSpace> :load "Shiro/FungeSpace.hs"
22:46:16 <elliott> [1 of 2] Compiling Shiro.Value ( Shiro/Value.hs, interpreted )
22:46:16 <elliott> [2 of 2] Compiling Shiro.FungeSpace ( Shiro/FungeSpace.hs, interpreted )
22:46:16 <elliott> Shiro/FungeSpace.hs:64:12:
22:46:16 <elliott> Couldn't match expected type `(t, t1)'
22:46:18 <elliott> against inferred type `(t, t1) -> (t, t1) -> (t2, t3) -> (t, t1)'
22:46:20 <elliott> Probable cause: `loop' is applied to too few arguments
22:46:21 <quintopia> if it's possible to do regex->DFA->minimal equivalent DFA->regex, why can i not find where someone has already built a regex minimizer?
22:46:22 <elliott> In the expression: loop (x - vx, y - vy)
22:46:24 <elliott> In the expression:
22:46:26 <elliott> if x > mnx || y > mny then loop (x - vx, y - vy) else (x, y)
22:46:28 -!- elliott has left (?).
22:46:32 -!- elliott has joined.
22:46:34 <elliott> *Shiro.Value> :load "Shiro/FungeSpace.hs"
22:46:36 <elliott> [1 of 2] Compiling Shiro.Value ( Shiro/Value.hs, interpreted )
22:46:38 <elliott> [2 of 2] Compiling Shiro.FungeSpace ( Shiro/FungeSpace.hs, interpreted )
22:46:40 <elliott> Ok, modules loaded: Shiro.Value, Shiro.FungeSpace.
22:46:42 <elliott> *Shiro.FungeSpace> advance (0,0) (2,7) hello
22:46:44 <elliott> <interactive>:1:20: Not in scope: `hello'
22:46:48 <elliott> *Shiro.FungeSpace> let hello = mergeByteString (0,0) emptyFungeSpace "hello"
22:46:50 <elliott> *Shiro.FungeSpace> advance (0,0) (2,7) hello
22:46:52 <elliott> (0,0)
22:46:54 <elliott> wtf
22:46:56 <elliott> did not mean to copy that much
22:46:58 <elliott> :/
22:47:00 <elliott> quintopia: sam hughes did
22:47:44 <quintopia> oho...
22:49:35 <quintopia> there is no software section on qntm :/
22:50:14 <elliott> it's in the blog
22:50:24 <quintopia> oh
22:50:42 <elliott> well
22:50:44 <elliott> "It's also been proven that the process of simplifying a regular expression to any significant extent is seriously computationally challenging."
22:50:52 <elliott> hmm
22:50:53 <elliott> where is it
22:51:25 <quintopia> oh
22:51:26 <quintopia> i found it
22:51:34 <quintopia> it's not the full minimizer
22:51:44 <quintopia> just a decent DFA->regex alg
22:52:23 <elliott> quintopia: and a regexp parser
22:52:36 <quintopia> yes well
22:52:54 <quintopia> i don't actually know how to minimize a DFA :P
22:53:26 <Vorpal> elliott, this scares me: http://qntm.org/chomsky (the mention of PHP)
22:53:36 <elliott> PHP? Seriously?!
22:53:37 <elliott> My current ongoing pet project is input validation for web forms. Cross-site scripting attacks are incredibly prevalent. There are many ways to avoid them. One of them is to escape literally everything input by a user and thereby permit no formatting whatsoever. Another is to permit users to use some hideous non-standard non-HTML markup, such as Wikipedia's syntax or Markdown. There are a million of these formats - seemingly one per wiki - and th
22:53:37 <elliott> ey are all very slightly different which makes learning them a massive irritation, particularly if, like me, you already know the one true markup language, namely HTML itself.
22:53:40 <elliott> [more justification]
22:53:56 <elliott> [[So anyway, during this process I decided that it would be easier to handle an arbitrary context-free grammar if I first rendered it into Chomsky Normal Form. It turned out that I was mistaken, and I am now using an entirely different approach, which means toCnf() is useless to me. Still, it might be useful to you!
22:53:56 <elliott> ]]
22:53:56 <Vorpal> yes I saw that...
22:55:27 <quintopia> also the comments on his DFA->regex say that his solution is not exactly amazing in terms of giving small output, and there may be better solutions already in existence...
22:56:25 <elliott> *Shiro.FungeSpace> let hello = mergeByteString (0,0) emptyFungeSpace "hello"
22:56:26 <elliott> *Shiro.FungeSpace> advance (0,0) (2,7) hello
22:56:26 <elliott> (0,0)
22:56:28 <elliott> gah!!
22:56:48 <elliott> *Shiro.FungeSpace> advance (4,0) east hello
22:56:49 <elliott> (4,0)
22:56:49 <elliott> *Shiro.FungeSpace> advance (5,0) east hello
22:56:49 <elliott> (5,0)
22:56:49 <elliott> lol
22:56:57 <quintopia> so you haven't given up yet :D
22:57:49 <elliott> well it wraps properly now but still doesn't fucking handle non-cardinal
22:58:03 <elliott> Vorpal: what should (2,7) on "hello" do? loop forever, right?
22:58:04 <elliott> starting at (0,0)
22:58:20 <elliott> but my algorithm can't return that, because it only returns a position in the bounding box
22:58:23 <elliott> and none of those "loop forever"
22:58:48 <ais523> elliott: no, it returns to (0,0)
22:58:58 <ais523> as that's the only point in-bounds on that lahey-line
22:59:01 <Vorpal> elliott, it returns to 0,0 forever
22:59:03 <Vorpal> yeah
22:59:13 <elliott> Vorpal: ...so my algo did work all along
22:59:18 <elliott> >_<
22:59:21 <Vorpal> elliott, no you said it went to (0,2)
22:59:23 <Vorpal> ...
22:59:25 <elliott> oh
22:59:28 <elliott> ok well it works now :P
22:59:43 <Vorpal> elliott, but you need to handle bottom here, in case the algorithm for looping never returns
22:59:46 <Vorpal> that can happen
22:59:46 <elliott> *Shiro.FungeSpace> advance (4,0) (2,0) hello
22:59:46 <elliott> (0,0)
22:59:48 <elliott> that's not right, is it?
22:59:50 <elliott> should be (2,0)
23:00:05 <Vorpal> ask ais523 or Deewiant. I'm going to sleep
23:00:06 <Vorpal> night!
23:00:38 <elliott> hmm
23:00:40 <elliott> well it should
23:00:43 <elliott> *should be
23:00:43 <Deewiant> If your bounding box goes to (5,0) it should be (1,0)?
23:00:50 <elliott> Deewiant: fungespace is "hello"
23:01:00 <elliott> so no
23:01:05 <Deewiant> Then (0,0) is right
23:01:12 <elliott> *Shiro.FungeSpace> hello
23:01:12 <elliott> FungeSpace (fromList [((0,0),104),((1,0),101),((2,0),108),((3,0),108),((4,0),111)])
23:01:12 <elliott> *Shiro.FungeSpace> bounds hello
23:01:12 <elliott> ((0,0),(4,0))
23:01:18 <Deewiant> You know that you can test these easily enough using CCBI's debugger? :-P
23:01:29 <elliott> That would require getting a D compiler.
23:01:34 <elliott> Deewiant: Well, I dunno about that (0,0)
23:01:38 <elliott> The space is, conceptually,
23:01:40 <elliott> hellohellohellohello
23:01:42 <elliott> We're on the "o"
23:01:44 <elliott> We want to go forwards two
23:01:46 <elliott> So we end up at "e"
23:01:48 <elliott> Which is (2,0)
23:01:50 <Deewiant> It only requires a compiler if you're as paranoid about binaries as fizzie is.
23:01:58 <elliott> So surely (4,0) + (2,0) = (2,0).
23:02:05 <elliott> Deewiant: Heh, fizzie's paranoid about binaries?
23:02:07 <Deewiant> "e" is (1,0).
23:02:12 <elliott> Er, right.
23:02:15 <elliott> So it should be (1,0).
23:02:20 <elliott> But it gives (0,0).
23:02:23 <elliott> No?
23:03:24 <Deewiant> You try to go forwards two, but you can't, so you reverse and travel backwards four, hitting the "h", at which point there's again only emptiness in front of you, so you reverse again and are at (0,0).
23:03:46 <elliott> Deewiant: So Fungespace doesn't actually wrap intuitively.
23:03:47 <elliott> Wonderful :P
23:03:48 <elliott> *Funge-space
23:03:57 <elliott> Was what Vorpal said about the algorithm possibly not terminating actually true or just crap?
23:04:26 <elliott> >_>
23:04:35 <Deewiant> If you start on an empty line, the "travel to next nonspace cell" algo doesn't terminate since there's no nonspace.
23:05:00 <elliott> *Shiro.FungeSpace> advance (0,0) east emptyFungeSpace
23:05:00 <elliott> (0,0)
23:05:02 <elliott> Deewiant: Does too.
23:05:08 <elliott> loop (x,y) (vx,vy) (mnx,mny) (mxx,mxy)
23:05:08 <elliott> | x < mnx && y < mny = (mnx+vx, mny+vy)
23:05:09 <elliott> | x > mnx || y > mny = loop (x-vx, y-vy) (vx,vy) (mnx,mny) (mxx,mxy)
23:05:09 <elliott> | otherwise = (x,y)
23:05:19 <elliott> Of course that algorithm might be totally broken. I think it fails for negative cardinalities, for instance.
23:05:21 <Deewiant> That's not "travel to next nonspace cell"
23:05:24 -!- nddrylliog has joined.
23:05:26 <Deewiant> Since (0,0) isn't a nonspace cell. :-P
23:05:43 <elliott> Deewiant: No, but it's "where to go next". :p
23:05:47 <Deewiant> elliott: But I don't see what's nonintuitive about (0,0).
23:05:54 <elliott> Deewiant: Hmm, although ... worryingly, that will cause infinite ticks.
23:05:57 <elliott> :/
23:05:58 <elliott> Oh, wait.
23:06:03 <elliott> If advance coords == coords, then loop forever.
23:06:10 <elliott> *Shiro.FungeSpace> advance (4,0) (-2,0) hello
23:06:10 <elliott> (2,0)
23:06:11 <elliott> *Shiro.FungeSpace> advance (2,0) (-2,0) hello
23:06:11 <elliott> (0,0)
23:06:16 <elliott> Wait, that's right X-D
23:06:26 <elliott> *Shiro.FungeSpace> advance (0,0) (-2,0) hello
23:06:26 <elliott> (0,0)
23:06:27 <elliott> *That's* not.
23:06:52 <Deewiant> No, that should be (4,0). :-P
23:07:42 <elliott> *Shiro.FungeSpace> advance (0,0) (-2,0) hello
23:07:42 <elliott> (0,0)
23:07:50 <elliott> Even after adding ltx which is (>) if vx < 0 and (<) otherwise.
23:07:52 <elliott> Same for gt and y.
23:07:55 <elliott> :-/
23:08:10 <elliott> Oh wait.
23:08:13 <Vorpal> back
23:08:17 <elliott> I need to flip mn* and mx* in that case.
23:08:18 <elliott> Aargh.
23:08:41 <elliott> WTF.
23:08:52 <elliott> No, surely that's not necessary.
23:08:58 <Vorpal> <elliott> Was what Vorpal said about the algorithm possibly not terminating actually true or just crap? <-- false in practise unless you have t. Then you can have another thread remove that thing from you making it shrink the bounds so you never even get inside the bounds
23:09:11 <Vorpal> hm wait
23:09:16 <Vorpal> I think k and p could do it
23:09:20 <Vorpal> yes indeed
23:09:22 <elliott> Mycothread test that by any chance? :P
23:09:37 <Vorpal> elliott, the t test is in the main mycology iirc?
23:09:47 <Vorpal> and I doubt it does
23:10:06 <Deewiant> Of course it doesn't test stuff that would cause the interp to infloop :-P
23:10:17 <elliott> Should do
23:10:18 <elliott> :P
23:10:35 <Vorpal> Deewiant, but I'm pretty sure k and t could od it
23:10:37 <Vorpal> do*
23:11:00 <elliott> Bleeeeh... this is the worst.
23:11:15 <elliott> I have no idea how I need to tweak this for negative deltas.
23:12:57 <elliott> loop (x,y) (vx,vy) (mnx,mny) (mxx,mxy)
23:12:57 <elliott> | x < mnx && y < mny = (mnx+vx, mny+vy)
23:12:57 <elliott> | x > mnx || y > mny = loop (x-vx, y-vy) (vx,vy) (mnx,mny) (mxx,mxy)
23:12:57 <elliott> | otherwise = (x,y)
23:13:00 <elliott> This code is absolutely perfect.
23:13:03 <elliott> If Deewiant disagrees, he's wrong.
23:13:08 <elliott> And only ABSOLUTE PROOF can change my mind.
23:13:48 <Deewiant> Does it work? If not, it's imperfect. :-P
23:14:36 <elliott> Deewiant: Oh yes. Give me some inputs, and if you don't like the output, you'd better point me to the place in the code that causes them to be incorrect.
23:14:41 <elliott> Otherwise I, you know, don't believe you.
23:14:46 -!- azaq231 has joined.
23:14:59 -!- azaq231 has quit (Changing host).
23:14:59 -!- azaq231 has joined.
23:15:08 <augur> elliott: sorry, where does mx come in?
23:15:15 <Deewiant> Run Mycology and if it works, that probably works.
23:15:15 <elliott> mx is max
23:15:17 <augur> its not used in that at all
23:15:19 <nddrylliog> elliott: proof? that sounds like a job for Crowbar.
23:15:20 <elliott> Deewiant: It can't run shit :P
23:15:22 <elliott> augur: ???
23:15:25 <augur> look at the definition
23:15:33 <augur> its the last arg, but that arg is never used otherwise
23:15:50 <elliott> Hmm, right
23:17:25 <elliott> Ambiguous type variable `a' in the constraint:
23:17:25 <elliott> `Ord a' arising from a use of `>' at Shiro/FungeSpace.hs:69:40-42
23:17:26 <elliott> Maaaan
23:17:34 <elliott> Why you gotta be so that
23:17:37 -!- azaq23 has quit (Ping timeout: 240 seconds).
23:17:39 <augur> yeah i bet you're ambiguous
23:17:59 <elliott> *Shiro.FungeSpace> let hello = mergeByteString (0,0) emptyFungeSpace "hello"
23:18:00 <elliott> *Shiro.FungeSpace> advance (0,0) (-2,0) hello
23:18:00 <elliott> (4,0)
23:18:03 <elliott> Ha ha Deewiant
23:18:05 <elliott> Nwo it am perfect
23:18:06 <elliott> *Now
23:18:16 <elliott> (But ugley)
23:18:29 <olsner> it am perfect but ugley!
23:18:52 -!- lambdabot has joined.
23:19:42 <elliott> olsner: you could say its butt-ugley
23:19:43 <elliott> haha
23:20:12 <olsner> @botsnack
23:20:13 <lambdabot> :)
23:20:56 <quintopia> oh, botsnack does work. wrong face though
23:21:02 <quintopia> `botsnack
23:22:31 <HackEgo> No output.
23:22:32 <elliott> quintopia: what face should it be
23:23:30 <quintopia> :D
23:23:48 <elliott> ^def botsnack ul (:D)S
23:23:48 <fungot> Defined.
23:23:49 <elliott> ^botsnack
23:23:49 <fungot> :D
23:23:59 <quintopia> five Hackbot one too!
23:24:02 <quintopia> *give
23:24:27 <elliott> http://cpansearch.perl.org/src/SIMONW/Bot-BasicBot-Pluggable-Module-Fun-0.9/lib/Bot/BasicBot/Pluggable/Module/Botsnack.pm
23:24:30 <elliott> googling suggests :) is correct
23:24:41 <quintopia> :) is lame and oldschool
23:25:28 <Gregor> `run echo -e '#!/bin/sh\necho '\''OH BARF >XO'\''' > bin/botsnack; chmod 0755 bin/botsnack
23:25:30 <HackEgo> No output.
23:25:33 <Gregor> `botsnack
23:25:35 <HackEgo> OH BARF >XO
23:25:38 <elliott> Vorpal: anyway if advance pos == pos and pos has a space at it, what do you do? destroy the ip?
23:25:46 <elliott> Vorpal: theoretically it should take 0 ticks forever
23:25:49 -!- Behold has joined.
23:25:54 <elliott> but that would stop other ips from running
23:25:57 <Deewiant> Infinite loop.
23:26:00 <elliott> ah.
23:26:05 <Vorpal> elliott, lock up forever in calculating wrapping :P
23:26:19 <elliott> Vorpal: not in calculating wrapping, it'll actually have to be a special case :)
23:26:21 <Deewiant> Or do what CCBI does and detect the situation and abort with a nice error :-P
23:26:26 <Vorpal> elliott, no it doesn't
23:26:30 <elliott> Deewiant: but it's perfectly valid!
23:26:32 <elliott> Vorpal: does for me
23:26:34 <Vorpal> elliott, why
23:26:41 <elliott> Vorpal: because my algorithm doesn't even look at fungespace
23:26:43 <Deewiant> elliott: CCBI has a compatibility option in case you actually want to infloop
23:26:43 <elliott> just uses the bounds
23:26:44 <quintopia> thx gregor
23:26:52 <elliott> Deewiant: I'll do it the Befunge-93 way.
23:26:56 <Vorpal> elliott, you have to?
23:26:57 <quintopia> also, what's the best kool-aid flavor?
23:27:03 <elliott> The program is on a line with no non-space cells.
23:27:17 <elliott> Do you want to loop forever, or terminate the program? (loop/terminate)
23:27:18 <elliott> >
23:27:27 <elliott> Vorpal: why?
23:27:39 <Vorpal> elliott, well okay you don't I guessd
23:27:41 <Vorpal> guess*
23:27:48 <Vorpal> elliott, since space takes no time
23:27:53 <Ilari> Bit more powerful version of program searching for powers of two lacking 1248: ~950 million powers of two per minute.
23:28:29 <Vorpal> Ilari, is it even possible to have a power of two lacking all of those?
23:28:45 <elliott> Deewiant: Wait, for "hello", is the maximum bound (5,0) or (4,0)?
23:28:46 <Vorpal> Ilari, even 2^0 = 1
23:28:53 <Deewiant> elliott: Define "maximum bound"
23:28:59 <elliott> Deewiant: The thing y returns.
23:29:03 <Deewiant> (4,0).
23:29:05 <Ilari> 1, 2, 4, 8 that is.
23:29:18 <Vorpal> Ilari, actually the last digit must be even. So that leaves 6 as the only remaining alternative
23:29:18 <Ilari> 2^16 = 65536.
23:29:22 <elliott> Deewiant: Yay, I'm doin it rite.
23:29:28 <Vorpal> ah yes
23:29:41 -!- BeholdMyGlory has quit (Ping timeout: 276 seconds).
23:29:48 <elliott> Deewiant: Rapidly growing anxiety at the prospect of actually having to write the interpreter loop at this junction.
23:30:10 <Ilari> And that's the only one below 5 bilionth power...
23:31:05 <elliott> For all these reasons, when encountering any unimplemented instruction (this includes instructions like | in Unefunge,) the Funge interpreter should at least provide an option for informing the user that it was told to execute an instruction that isn't implemented, and possibly warning the user that this file might be an incorrect language or version.
23:31:13 <elliott> Does anything actually do that? :-P
23:31:29 <Deewiant> ccbi --warnings
23:31:46 <Deewiant> cfunge -W
23:32:13 <Deewiant> rcfunge2 -w
23:32:28 <elliott> Hahaha
23:32:29 <Deewiant> stinkhorn --warnings
23:32:37 <Ilari> For anything else than 2^16: >2^7368000000
23:32:51 <elliott> Deewiant: $ shiro foo.b98
23:32:59 <elliott> The program is trying to execute the illegal instruction (something goes here).
23:33:02 <elliott> Do you want to:
23:33:08 <elliott> (1) Reflect and continue execution;
23:33:12 <elliott> (2) Substitute another instruction; or
23:33:13 <elliott> (3) Terminate?
23:33:14 <elliott> >
23:33:21 <elliott> THIS IS THE SOLUTION TO ALL AMBIGUITIES
23:33:59 <Deewiant> Of course that's somewhat problematic if the program you're running wants to read stdin.
23:34:32 <Deewiant> And also, (1) is quite clearly mandated. :-P
23:34:53 <elliott> Deewiant: I don't see why, the interpreter would give control back to the program afterwards.
23:34:58 <elliott> Maybe it'll pop up a graphical dialogue box instead.
23:35:19 <Deewiant> elliott: shiro foo.b98 < file
23:35:24 <Ilari> >2^10000000000
23:35:29 <elliott> Deewiant: /dev/tty
23:35:49 <Deewiant> If you make it actually use that, fine :-D
23:36:49 <ais523> elliott: it should only do that for division by zero
23:36:52 <elliott> Deewiant: When a program tries to read a non-existent file:
23:36:56 <elliott> Abort/Retry/Fail?
23:37:02 <elliott> ais523: Befunge-98 specifies the result of /0 (0)
23:37:11 <ais523> elliott: I know, I was joking
23:37:14 <elliott> :P
23:37:52 <elliott> Hmm...
23:38:31 <elliott> I love ?'s name.
23:38:37 <Gregor> wtfbbq
23:38:42 <Gregor> I'm looking over the TV listings.
23:38:47 <Gregor> MSNBC is apparently having Sex Slave Day
23:38:51 <elliott> What
23:39:20 <Gregor> "Sex Slaves: The Teen Trade", "Sex Slaves in the Suburbs", "MSNBC Undercover: Sex Slaves: Texas"
23:39:29 <elliott> Amazing.
23:39:50 <Gregor> Then "MSNBC Undercover: Sex Slaves: Minh's Story"
23:39:53 <Gregor> That's four hours of sex slaves.
23:40:18 <elliott> I wouldn't mind four hours of sex slaves IF YOU KNOW WHAT I MEAN
23:41:37 <elliott> Deewiant: 1kxy executes x twice before executing y, right?
23:41:39 <elliott> When travelling east.
23:41:43 <elliott> And 2kxy executes it thrice.
23:42:05 <elliott> But 0kxy jumps straight to y.
23:42:06 <Deewiant> x being a bad example because it changes the delta, but yes
23:42:06 <elliott> Correct?
23:42:12 <elliott> Deewiant: x was a variable.
23:42:17 <Deewiant> I figured
23:42:24 <elliott> Deewiant: What about (-1)kxy?
23:42:34 <Deewiant> UNDEF
23:42:44 <Deewiant> The consensus is to reflect, I think
23:43:02 <elliott> Deewiant: Obviously nkxy for n <= 0 actually jumps n instructions after the y.
23:43:03 <elliott> So:
23:43:06 <elliott> 0kxy --> y
23:43:09 <elliott> -1kxyz --> z
23:43:16 <elliott> -2kabcd --> d
23:43:22 <elliott> BEST BEHAVIOUR Y/B
23:43:23 <elliott> *Y/N
23:43:26 <Deewiant> That's an option Mycology doesn't take into account :-D
23:43:36 <elliott> Deewiant: If I implement it will you fix Mycology? :D
23:43:39 <Deewiant> I thought of using the absolute value, but not that
23:44:02 <elliott> It's, like, totally logical.
23:44:57 <elliott> [[Rc/Funge–98, by Mike Riley, is another POSIX-only interpreter written in C (though not C99, like cfunge). This one is set apart from all the others in that it:
23:44:57 <elliott> First implemented Befunge–98.
23:44:57 <elliott> ]]
23:45:00 <elliott> Pretty sure that FBBI was first.
23:45:26 <Deewiant> Wrong.
23:45:31 <elliott> (You might want to note that he, er, is no longer the developer, although I understand that this page is pretty old.)
23:45:31 <Deewiant> :-P
23:45:36 <elliott> Deewiant: How strange.
23:45:44 <elliott> Deewiant: Or are you saying that FBBI doesn't even come close to being an implementation? :-)
23:45:59 <elliott> I note the latest version doesn't test it.
23:46:18 <Deewiant> No, Rc/Funge-98 was just the first impl.
23:46:30 <elliott> Ah.
23:46:35 <elliott> FBBI came out in 1998, I think, so it must have been pretty close.
23:47:02 <Deewiant> With the latest versions I haven't bothered to test stuff that doesn't work too well :-P
23:47:07 <Deewiant> And that won't ever get updated
23:47:43 <elliott> Deewiant: Going east, starting at the beginning of the line, considering x as a nop, with 1 on the stack, xk goes:
23:47:50 <elliott> (where _x_ denotes ip is here)
23:47:55 <elliott> _x_k --> execute x
23:48:02 <elliott> x_k_ --> execute x from start of line
23:48:05 <elliott> _x_k --> execute k
23:48:07 <elliott> *x
23:48:08 <elliott> right?
23:48:12 <elliott> as in, k wraps around
23:48:13 <Deewiant> "From start of line"?
23:48:16 <elliott> Deewiant: Yes.
23:48:18 <Deewiant> Everything wraps around
23:48:28 <elliott> Deewiant: So k wraps around to find x, runs it, and then the IP wraps around to x.
23:48:29 <Deewiant> But note that you are executing the x at the k
23:48:29 <elliott> Right.
23:48:35 <elliott> Deewiant: Er.
23:48:42 <Deewiant> This matters for instructions that take the IP's position into account
23:48:44 <elliott> Deewiant: Does that means that "kj" moves down from k? :-D
23:48:47 <elliott> Awesome.
23:49:01 <elliott> Deewiant: What does 11kkj do?
23:49:02 <Deewiant> Mycology is pretty nitpicky about k, don't worry
23:49:07 <Deewiant> Don't ask me about nested k.
23:49:08 <elliott> JUST OUT OF CURIOSITY
23:49:09 <Deewiant> Just don't.
23:49:12 <elliott> Deewiant: I'M ASKING
23:49:17 <elliott> IIIIII'M ASKING
23:49:19 <Deewiant> Vorpal disagrees with me on it anyway.
23:49:25 <elliott> Well let me try and work it out myself.
23:49:34 <elliott> Let's say 11kkx, where x does nothing.
23:49:42 <elliott> So.
23:49:52 <elliott> left-k goes to execute right-k.
23:50:06 <Deewiant> In my defence, cfunge special-cases nested k and I don't.
23:50:06 <elliott> k is defined as being based on the "path of the IP".
23:50:12 <elliott> So k finds the right k again.
23:50:14 <elliott> And executes it.
23:50:17 <elliott> Right k finds the right k again.
23:50:19 <elliott> And executes it.
23:50:28 <elliott> Aaaand it's an infinite loop taking 0 ticks.
23:50:29 <Deewiant> Right k doesn't find itself.
23:50:32 <elliott> ORLY?
23:50:36 <elliott> "Then it finds the next instruction in Funge-space in the path of the IP (note that this cannot be a marker such as space or ;),"
23:50:43 <elliott> The IP is still on the first k.
23:50:46 <elliott> The next instruction after the IP is the second k.
23:50:49 <elliott> So the second k finds the second k.
23:50:54 <elliott> And executes it.
23:51:00 <elliott> Which actually pops *0* off the stack!
23:51:04 <elliott> Because now we have no stack left.
23:51:07 <elliott> And so it skips the x.
23:51:12 <elliott> So 11kxy goes to y after 0 ticks.
23:51:15 <Vorpal> elliott, nested k is an issue
23:51:16 <Deewiant> I'm too tired to think about this now, do whatever you like. :-P
23:51:17 <elliott> Well, after 1 tick.
23:51:19 <Vorpal> read the code if you care
23:51:26 <elliott> Deewiant: Nonono, I just came up with a new opinion.
23:51:30 <Vorpal> I don't really care about it. No one uses it anyway!
23:51:38 <elliott> Deewiant: 11kxy.
23:51:42 <elliott> erm
23:51:44 <elliott> 11kkxy
23:51:46 <Vorpal> elliott, there is a test case in tests/ in cfunge for it iirc
23:51:47 <elliott> Stack = 1 1.
23:51:49 <Vorpal> check there if you care
23:51:50 <elliott> k pops first stack.
23:51:52 <elliott> Stack = 1.
23:51:57 <elliott> It goes to execute the second k.
23:51:59 <elliott> k pops first stack.
23:52:02 <elliott> Stack = 0 0 0 0 0 0 ...
23:52:05 <elliott> The IP is still on the first k.
23:52:13 <elliott> The next instruction in Funge-space in the IP's path is the second k, therefore.
23:52:15 <Vorpal> elliott, what about 3 nested k?
23:52:19 <elliott> It goes to execute the second k.
23:52:24 <elliott> The second k pops off 0.
23:52:28 <elliott> Since it's 0, it skips the second k.
23:52:31 <elliott> It goes on to x.
23:52:32 <Vorpal> night! →
23:52:40 <elliott> Deewiant: 11kkxy goes on to x in one tick.
23:52:45 <elliott> Deewiant: How does cfunge behave?
23:53:11 <Deewiant> Download it and find out. I don't want to think about this now, and I honestly don't remember how cfunge works.
23:53:17 <elliott> Okay fine.
23:53:28 <elliott> Deewiant: Is there an instruction in CCBI that just prints something out to the screen? :P
23:53:30 <elliott> Optimistic, I know.
23:53:40 <Deewiant> Like , or .? What do you mean?
23:53:40 <elliott> Just something that doesn't fuck with things and lets me see what gets executed.
23:53:47 <elliott> Deewiant: Something that doesn't change the stack.
23:53:48 <Deewiant> Use the tracer
23:53:55 <elliott> Deewiant: Okay.
23:53:56 <Deewiant> And step through things
23:54:00 <elliott> Is there an explicit nop isntruction?
23:54:02 <Deewiant> But it does k in one step, so it won't help you with that
23:54:02 <Deewiant> z
23:54:03 <elliott> in funge98 i mean
23:54:14 <elliott> Deewiant: If it does k in one step, then this doesn't help at all :P
23:54:17 <elliott> *that doesn't help at all
23:54:42 <Deewiant> Read the source. :-P
23:55:36 <elliott> Deewiant: Your interpretation agrees with me.
23:55:37 <elliott> \o/
23:55:37 <myndzi> |
23:55:37 <myndzi> /<
23:55:55 <elliott> Deewiant: I think mine and therefore yours is pretty much objectively correct :P
23:56:01 * Lymia returns
23:56:35 <Deewiant> elliott: "The next instruction in Funge-space in the path of the IP" refers to the instruction after the k, so it's the one after the inner k
23:56:50 <elliott> Deewiant: I disagree.
23:56:55 <elliott> Deewiant: It refers to the instruction after the k.
23:56:57 -!- FireFly has quit (Quit: swatted to death).
23:57:10 <elliott> Deewiant: The next instruction in Funge-space in the path of the IP is the next instruction that the IP would hit.
23:57:14 -!- nddrylliog has quit (Quit: Ex-Chat).
23:57:22 <elliott> I don't think it refers to the next instruction [relative to the k].
23:58:25 <Lymia> !bfjoust evoa +>-->---->++<.-<->>>>++>++++>->++>.+>>>.<(>---[+])*58<>-..<<->><><>-
23:58:45 <EgoBot> Score for Lymia_evoa: 11.3
23:59:30 <Lymia> Hey!
23:59:33 <Lymia> It didn't completely fail1
23:59:36 <Lymia> !*
←2011-02-05 2011-02-06 2011-02-07→ ↑2011 ↑all