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