00:00:06 elliott: THE FAIL IS SO STRONG. 00:00:43 oerjan: ANY LUCK 00:00:48 elliott: i think i'd like to see the code for y, too 00:01:04 oerjan: erm are you sure, it _may_ scare you; shall i just show the relevant lines? 00:01:09 i don't see how the bug can be in what you showed me 00:01:12 sure 00:01:17 let (minX,minY) = minCoords (fungeSpace st) 00:01:19 let (maxX,maxY) = maxCoords (fungeSpace st) 00:01:19 pushVec (maxX-minX,maxY-minY) 00:01:19 pushVec (minX,minY) 00:01:20 oerjan: but 00:01:24 oerjan: when i recalculated bounds the really slow way 00:01:36 oerjan: i.e. whenever we're at an extremity in either x or y, recalculate them from every key in the map from scratch 00:01:41 that y code worked just fine 00:01:45 all i've changed is fungespace.hs 00:01:47 ic 00:02:26 pikhq: [[Sometimes when someone has a shameful or socially unacceptable death, such as suicide or the above mentioned alchohol poisioning and such, the media will blame fan death even when it is clearly evident that they were killed by some other means. It is possible for the death someone with a gun shot wound to be blamed on fans.] [[I was recently discussing this via email with a friend, his (humorous) comments follow: 00:02:26 "The explanation of fan death is accepted by many Korean medical professionals. In summer, mainstream Korean news sources regularly report on cases of fan death, even if more likely causes (e.g. heart attack, ****gunshot****, alcohol poisoning) are evident."]] 00:02:31 Phantom_Hoover: ^ 00:02:47 * Phantom_Hoover → how the hell is it twenty past twelve oh god 00:02:50 wtf. i just noticed that how_stupid_is_it beats wireless XD 00:02:55 elliott: THE FAN PUT A BULLET IN MY HEART 00:03:27 pikhq, A BULLET MADE OF SLICED UP OXYGEN ATOMS 00:03:33 -!- Phantom_Hoover has quit (Remote host closed the connection). 00:03:45 pikhq: [[I'm a South Korean, and my family also has used the function in summer nights. However, it's not because of the only "fan death" belief. My family uses the function because of not only "fan death" belief but also other various reasons: 00:03:45 to prevent to be sick with air-conditioningitis (냉방병; 冷房病) 00:03:45 to save electric charges: When we already fell asleep in usual summer night, although fans are turned off, we can sleep comfortable continually if the windows are opened (except abnormally hot night). 00:03:45 I want to ask you not to think a "timer snob" of Korean fans as "just" a equipment to prevent "fan death". ― 韓斌/Yes0song (談笑 筆跡 다지모) 07:16, 19 February 2008 (UTC)]] 00:03:51 pikhq: PREVENT TO BE SICK WITH AIR-CONDITIONINGITIS 00:04:40 Koreans are just particularly suseptible to hypothermia 00:04:46 pikhq: wow, i didn't realise jhc was such a cool compiler 00:04:49 and by adding a single + to the beginning of wireless, it now gets almost two more points than the next best program. crazy. 00:04:55 pikhq: http://repetae.net/computer/jhc/jhc.shtml (out of date apparently but mostly correct) 00:05:17 Sgeo: s/hypo/hyper/ 00:05:22 pikhq: "No pre-written runtime. other than 20 lines of boilerplate all code is generated from the Grin intermediate code and subject to all code simplifying and dead code elimination transformations." "Second Intermediate language is based on Boquist's graph reduction language. This allows all unknown jumps to be compiled out leaving standard case statements and function calls as the only form of flow control. Combined with jhc's use of region in 00:05:22 ference, this means jhc can compile to most any standard imperative architecture/language/virtual machine directly without special support for a stack or tail-calls." ""All indirect jumps are transformed away, jhc's final code is very similar to hand-written imperative code, using only branches and static function calls. A simple basic-blocks analysis is enough to transform tail-calls into loops." 00:05:24 pikhq: "E is a pure type system based on Henk and the lambda-cube. An important property of E is that there is no distinction between types and values, this is important for jhc's implementation of type classes." 00:05:36 Sgeo: They get temperatures and humidity high enough to cause hyperthermia during the summer. 00:05:52 pikhq, I was making a joke explanation for air-conditionitis 00:06:01 BAH 00:07:05 I asked my dad what if I talked to someone who looked at my college courses. He said they wouldn't know me, and about my tending to not get stuff done on time, and said that anywhere else, I'd have failed a lot of courses 00:07:47 Sgeo: Your dad is a moron, ignore him, you should move out, blah blah why do I even bother typing this shit 00:08:46 Sgeo: Your course of study qualifies you to ask "would you like fries with that?". His argument is invalid. 00:09:54 what is the max length of a bf joust program? 00:10:04 and/or max nested depth 00:10:32 nescience: mu 00:11:04 elliott: are you sure that insertFS is the only function updating your fungespace? 00:11:27 also, have you tested it directly 00:12:13 oerjan: haven't tested it directly, I will now; nothing else modifies it directly 00:12:16 only through insertfS 00:12:18 *insertFS 00:12:55 Sgeo: you mean fan death? 00:13:17 oerjan: *Shiro.FungeSpace Data.Map> insertFS (10,10) 42 $ insertFS (-10,10) 42 emptyFungeSpace 00:13:18 FungeSpace {spaceMap = fromList [((-10,10),42),((10,10),42)], minCoords = (-10,0), maxCoords = (10,10), rowPopulation = fromList [(10,2)], colPopulation = fromList [(-10,1),(10,1)]} 00:13:21 oerjan: now to try removing 00:13:34 *Shiro.FungeSpace Data.Map> insertFS (10,10) 32 $ insertFS (10,10) 42 $ insertFS (-10,10) 42 emptyFungeSpace 00:13:35 FungeSpace {spaceMap = fromList [((-10,10),42)], minCoords = (-10,10), maxCoords = (-10,10), rowPopulation = fromList [(10,1)], colPopulation = fromList [(-10,1)]} 00:13:36 oerjan: argh 00:13:39 oerjan: (32 is space obviously) 00:13:53 rowPopulation got updated correctly 00:13:58 so did colPopulation 00:14:04 but minCOords/maxCoords didn't 00:14:05 and in fact 00:14:08 aha 00:14:10 maxCoords went *negative*?? 00:14:11 wait 00:14:12 that's right 00:14:13 arguable 00:14:16 argh 00:14:17 *arguably 00:14:20 oerjan: figured it out? :P 00:14:46 no, you got the correct result then... 00:15:04 quintopia, someone quoted something that someone said about people worrying about air conditioner death too 00:15:20 huh 00:15:22 oerjan: I did? 00:15:55 *Shiro.FungeSpace Data.Map> insertFS (10,10) 42 $ insertFS (-10,10) 42 emptyFungeSpace 00:15:56 um yes, those are the correct minCoords/maxCoords 00:15:57 FungeSpace {spaceMap = fromList [((-10,10),42),((10,10),42)], minCoords = (-10,0), maxCoords = (10,10), rowPopulation = fromList [(10,2)], colPopulation = fromList [(-10,1),(10,1)]} 00:15:57 *Shiro.FungeSpace Data.Map> insertFS (999,999) 32 $ insertFS (999,999) 42 $ insertFS (10,10) 42 $ insertFS (-10,10) 42 emptyFungeSpace 00:15:57 FungeSpace {spaceMap = fromList [((-10,10),42),((10,10),42)], minCoords = (-10,10), maxCoords = (10,10), rowPopulation = fromList [(10,2)], colPopulation = fromList [(-10,1),(10,1)]} 00:16:03 oerjan: those two results should be identical 00:16:03 they're not 00:16:03 discuss 00:16:06 s/not $/not/ 00:16:25 intermediate result: 00:16:26 *Shiro.FungeSpace Data.Map> insertFS (999,999) 42 $ insertFS (10,10) 42 $ insertFS (-10,10) 42 emptyFungeSpace 00:16:27 FungeSpace {spaceMap = fromList [((-10,10),42),((10,10),42),((999,999),42)], minCoords = (-10,0), maxCoords = (999,999), rowPopulation = fromList [(10,2),(999,1)], colPopulation = fromList [(-10,1),(10,1),(999,1)]} 00:16:34 (easier to understand with wide irc window) 00:17:24 oh (-10,0) and (-10,10)... 00:18:06 oerjan: want me to try less confusing coordinates? 00:18:07 :-) 00:18:35 no i want you to shut up so i can look at what's already there 00:21:41 ah hm... lessee the code again 00:23:26 oerjan: you want me to put it on sprunge again? :-P 00:24:01 um isn't it what it was previously? 00:24:28 oerjan: yes, i was joking 00:25:25 the rowPopulation and colPopulation are correct at all times, it seems 00:25:49 right. so it's the calculation of bounds that is wrong 00:26:32 > Map.alter 00:26:33 Not in scope: `Map.alter' 00:26:36 > M.alter 00:26:37 Overlapping instances for GHC.Show.Show 00:26:37 ((Data... 00:26:43 ok 00:28:12 elliott: i note that minCoords and maxCoords are correct in the case above where the space was added 00:28:30 and it was added last 00:28:42 indeed 00:28:57 which makes me suspect the _other_ branch 00:29:58 but (min x minX, min y minY) (max x maxX, max y maxY) 00:30:03 ought to be correct... 00:32:28 -!- Mathnerd314 has quit (Ping timeout: 245 seconds). 00:32:43 WOOOT! 00:33:01 oerjan: yeah that branch is correct 00:33:03 -!- cheater- has joined. 00:33:04 it was in the old correct version too 00:33:15 wireless = #1 program on the hill, with almost 5 more points than the second best 00:33:20 oerjan: well obviously the modm part wasn't 00:35:33 elliott: there's just the tiny problem that the examples above that give the wrong result are cases where _only_ that branch should be used 00:35:34 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 00:36:15 oerjan: good point. well. 00:36:15 -!- cheater00 has quit (Ping timeout: 240 seconds). 00:36:16 oooh i _know_ 00:36:19 (modm (+1) y popRow) (modm (+1) x popCol) 00:36:22 oerjan: oh thank god 00:36:24 what is it 00:36:33 the error is in emptyFungeSpace 00:36:51 it is empty, it shouldn't _have_ minima or maxima 00:37:10 emptyFungeSpace = FungeSpace Map.empty (0,0) (0,0) Map.empty Map.empty 00:37:13 oerjan: yes, but so? 00:37:15 oerjan: in all my examples, 00:37:20 this causes min 10 0 = 0, the wrong result once you add one element 00:37:21 oerjan: i add before removing 00:37:25 oerjan: and findMin/... aha 00:37:45 oerjan: hm what's the solution though :D 00:37:54 apart from an ugly Maybe around everything 00:38:32 well you just need to know when it's empty in the second branch 00:39:07 (if m == Map.empty then (x,y) else (min x minX, min y minY)) 00:39:10 hacks away! 00:39:30 oerjan: so my minimum bound has been broken this whole time heh 00:39:54 oh and btw you might get a crash from the first branch if you empty fungespace again, not that i know whether this is possible 00:40:04 i think it is but i'll deal with that later 00:40:06 oerjan: just fixed that AND... drumroll ... ... wait for it 00:40:14 that's right!! nothing changed 00:40:22 huh 00:40:37 | otherwise = 00:40:37 FungeSpace (Map.insert k v m) 00:40:37 (if m == Map.empty then (x,y) else (min x minX, min y minY)) 00:40:37 (max x maxX, max y maxY) 00:40:37 (modm (+1) y popRow) (modm (+1) x popCol) 00:41:07 -!- Mathnerd314 has joined. 00:41:07 um you need that on max too 00:41:58 although indeed that should have changed that error part... 00:42:18 oh right 00:42:47 same error still though 00:42:56 BAD: after spacing top-left corner, y should report least point as ( -2 -1 ), not ( -10 -10 ) 00:42:58 BAD: after spacing top-left corner, y should report greatest point as ( 182 910 ), not ( 190 919 ) 00:42:58 BAD: after spacing right edge, least point reported by y should remain ( -2 -1 ) 00:42:58 BAD: after spacing right edge, y should report greatest point as ( 181 910 ), not ( 190 919 ) 00:42:58 BAD: after spacing bottom edge, y should report greatest point as ( 181 909 ), not ( 190 918 ) 00:43:16 huh 00:44:34 well that particular error just corrected cannot give anything but a misplaced 0 somewhere, i think 00:44:46 so that cannot be the cause 00:46:05 oerjan: this is the most wtf bug ever... 00:46:12 heh 00:46:15 oerjan: the algorithm does make sense right? 00:46:23 you'd think 00:46:25 taking the minimum and max keys of a population count map where there are no 0 values 00:46:34 oerjan: AHA 00:46:44 oerjan: what if there's a value at (0,500) and a value at (700,0) 00:46:52 no, wait, that works 00:46:58 maxX = 700, maxY = 500 00:48:34 oerjan: so err... any clues 00:49:58 elliott: is it possible for you to get a print of the fungespace at that point when the bad thing happens? 00:50:16 oerjan: i could print it out on every y, but IIRC Mycology tests y a shitload. but it could be worth a try. 00:50:27 oerjan: except that that would be /hopelessly/ impractical, unless i omitted the space map 00:50:35 oerjan: because mycology is a 100K text file even to start with 00:50:42 would just the min/max coords and population lists do? 00:50:45 elliott: try putting in a test for the faulty values 190 919 it mentions above 00:50:45 (population lists will be very long) 00:50:54 just print out the value at that point? 00:50:59 or? 00:51:21 -!- poiuy_qwert has joined. 00:51:30 yeah try that first 00:52:19 -!- augur has joined. 00:52:22 oerjan: btw just so you know: 00:52:24 before that test: 00:52:28 ("YYYYYY","190 919 --> ",32) 00:52:28 y claims all of the following: 00:52:28 [...] 00:52:30 That the least point containing a non-space cell is ( -3 -2 ) 00:52:36 That the greatest point, relative to that point, is ( 183 911 ) 00:52:36 note: relative to that point 00:52:42 oerjan: tl;dr whenever y is called, 190,919 is 32 00:52:50 my hunch is that it's always 32. 00:53:01 oerjan: remember that even if (x,y) is the tightest max bound it can be space 00:53:09 oerjan: because consider (32,0) and (0,32) 00:53:11 max bound is (32,32) 00:53:13 which will just have a space at it 00:53:56 hm 00:55:00 well but _is_ the separate maxx and maxy which should be reported, not some actually filled cell, i presume 00:55:05 *it _is_ 00:55:10 yep 00:55:22 oerjan: (well technically the spec contradicts that but then it contradicts itself a line later, so we just ignore it) 00:55:37 oerjan: it's the topleftmost point of the smallest bounding rectangle and its size, basically 00:56:00 yeah 00:56:16 by basically, i mean exactly 00:56:27 SO ER ANY IDEAS :D ... maybe it's a GHC bug! 00:56:41 and you said this worked before you optimized insertFS's minmax calculations 00:56:42 as far as I can tell, the logic is flawless. so i'm dumbfoundergasted. 00:56:58 oerjan: yes; for posterity here is the original version of insertFS 00:57:28 elliott: try calculating the min and max at that point directly from the main Map 00:57:43 oerjan: er, if you let me paste, that's exactly what insertFS /used/ to do 00:57:45 stupid sprunge is being slow 00:57:51 oerjan: http://sprunge.us/GhCM 00:58:12 this worked perfectly apart from the minor "empty fungespace min/max" bug which did _not_ trigger in mycology 00:58:26 ofc there were no population count maps 00:59:44 hmph 00:59:49 oerjan: so we know that the population counts are being updated perfectly. 01:00:12 oerjan: and we know that the non-shrink case updates the ... wait 01:00:19 no, nm 01:00:23 oerjan: and we know that the non-shrink case updates the bounds perfectly 01:00:34 oerjan: so the error _must_ be in the calculation of bounds from population counts in the shrink case 01:00:41 newMinX = fst . Map.findMin $ colPopulation fs' 01:00:43 newMaxX = fst . Map.findMax $ colPopulation fs' 01:00:43 newMinY = fst . Map.findMin $ rowPopulation fs' 01:00:43 newMaxY = fst . Map.findMax $ rowPopulation fs' 01:00:44 the error must be there 01:00:47 >_< 01:02:04 so you _have_ checked that colPopulation and rowPopulation are correct at the BAD point? 01:02:37 (or, whatever mycology wants it to be) 01:03:09 oerjan: well no. but thanks to my exhaustive two-line test, i assume that code is perfect 01:03:30 WELL CHECK IT ANYHOW 01:03:43 *Shiro.FungeSpace Data.Map> insertFS (10,12) 22 $ insertFS (10,11) 22 $ insertFS (10,10) 22 emptyFungeSpace 01:03:44 FungeSpace {spaceMap = fromList [((10,10),22),((10,11),22),((10,12),22)], minCoords = (0,0), maxCoords = (10,12), rowPopulation = fromList [(10,1),(11,1),(12,1)], colPopulation = fromList [(10,3)]} 01:03:44 *Shiro.FungeSpace Data.Map> insertFS (10,11) 32 $ insertFS (10,12) 22 $ insertFS (10,11) 22 $ insertFS (10,10) 22 emptyFungeSpace 01:03:44 FungeSpace {spaceMap = fromList [((10,10),22),((10,12),22)], minCoords = (10,10), maxCoords = (10,12), rowPopulation = fromList [(10,1),(12,1)], colPopulation = fromList [(10,2)]} 01:03:48 oerjan: looks good to me 01:03:54 oerjan: there is no way i can test col/rowPopulation on mycology 01:03:58 oerjan: as i said, it's 100K + some 01:04:00 elliott: not _that_ test 01:04:03 oerjan: what test? 01:04:14 elliott: that many columns and rows? 01:04:34 oerjan: what do you mean? obviously there can be an empty row 01:04:38 and it won't be in the list 01:04:38 in the middle 01:04:55 i mean 100K doesn't mean 100K rows or 100K columns 01:05:14 although i guess rows are often larger 01:05:25 ok so just check the columns 01:05:35 oerjan: same with columns, it was an example 01:05:36 they were reported in error too, after all 01:05:43 oerjan: mycology explicitly puts something a way out of space 01:05:49 with both blank columns and rows separating it from anything else 01:06:03 elliott: well that doesn't matter unless it puts things in _every_ column 01:06:08 (well, most) 01:06:25 oerjan: well i'm not sure what you want me to print them 01:06:28 *then 01:06:36 io $ print ("YYYYYY","190 919 --> ", fungeSpace st !@ (190,919)) 01:06:40 is what I have now 01:06:41 *)) 01:07:30 just print minimum . keys ... and maximum . keys ... for colPopulation directly 01:08:10 we want to see if colPopulation itself contains an error before assuming that the error is in calculating data _from_ it 01:08:23 so calculate the data in a different way 01:08:40 oerjan: ok, where do yo uwant the output from? 01:08:42 which point 01:08:43 *you want 01:08:56 ("minkeys are monkeys",-10,"but maxkeys are for life",180) 01:08:57 ("minkeys are monkeys",-10,"but maxkeys are for life",180) 01:08:57 BAD: after spacing top-left corner, y should report least point as ( -2 -1 ), not ( ("minkeys are monkeys",-10,"but maxkeys are for life",180) 01:08:57 [same coords for the rest of the errors] 01:08:59 some point where you know mycology is complaining about the result of y 01:09:11 thta's the first point 01:09:17 relevant: 01:09:24 ("minkeys are monkeys",-3,"but maxkeys are for life",180) 01:09:28 That the least point containing a non-space cell is ( -3 -2 ) 01:09:28 That the greatest point, relative to that point, is ( 183 911 ) 01:09:32 (note that it's offset so 183-3 = 180 is the real greatest point) 01:09:38 (in the y output that is) 01:09:40 (the debug output is absolute) 01:09:51 oerjan: and it turns to -10,180 here: 01:09:56 GOOD: read written data to (-10, -10) 01:09:57 GOOD: (-8, -9) is @ 01:09:57 GOOD: read data in binary mode to (-10, -10) 01:09:57 GOOD: (0, -10) is 13 01:09:57 ("minkeys are monkeys",-10,"but maxkeys are for life",180) 01:10:00 for obvious reasons 01:10:17 ok so that means colPopulation _is_ in error 01:10:29 or so i would assume now 01:10:44 (that -10 should have been -2) 01:11:17 seemingly 01:11:30 ooh i think i know again! 01:11:36 yay! 01:11:58 i asked you about why you didn't check if Map.lookup k m == Nothing 01:11:59 -!- pikhq_ has joined. 01:12:09 because mistake :D 01:12:09 -!- pikhq has quit (Ping timeout: 265 seconds). 01:12:15 oh of _COURSE_ 01:12:18 the problem is that if it's nothing, 01:12:27 it still subtracts from popcount! 01:12:29 yep 01:12:41 fixing 01:12:47 if fs !@ k == space then fs else 01:12:48 one line fix 01:13:20 BAD: after spacing top-left corner, y should report least point as ( -2 -1 ), not ( ("minkeys are monkeys",-10,"but maxkeys are for life",180) 01:13:22 ("minkeys are monkeys",-10,"but maxkeys are for life",180) 01:13:22 -10 -10 ) 01:13:28 ARGH 01:13:31 oerjan: wtf, we (you) keep discovering and fixing all these fatal bugs, but they don't change shit 01:13:38 this is the worst :D 01:14:30 oerjan: sooooooooooooo :D 01:14:47 oh wait ... the other branch has the _opposite_ error :D 01:14:59 you add 1 even if it _wasn't_ space :D 01:15:02 oerjan: aaargh :D 01:15:12 oerjan: have i ever told you i'm retarded? 01:15:21 MAYBE 01:15:29 ON OCCASION 01:15:38 (if fs !@ k == space then modm (+1) y popRow else popRow) 01:15:40 (if fs !@ k == space then modm (+1) x popCol else popCol) 01:15:51 oerjan: i love how perfect the code looked at first 01:15:54 and now ALL THESE BUGS 01:16:07 YES 01:16:14 GOOD: y reports shrunk bounds correctly after spacing top-left corner 01:16:18 GOOD: y reports shrunk bounds correctly after spacing right edge 01:16:22 GOOD: y reports shrunk bounds correctly after spacing bottom edge 01:16:23 oerjan: you, sir, are a scholar and a gentleman 01:16:28 * oerjan does a happy dance 01:16:44 oerjan: you've finally put your phd to good use! 01:16:48 (oh snap) 01:16:59 no but seriously :DDDDDD ENDLESS HAPPIES THANK YOU 01:17:00 XD 01:17:28 -!- copumpkin has joined. 01:17:28 -!- copumpkin has quit (Changing host). 01:17:28 -!- copumpkin has joined. 01:18:50 woooo 01:19:05 oerjan: now i have to backport my optimised mergeByteString to this new structure :-D 01:19:08 time to break shit!!! 01:19:21 oh _dear_ god 01:19:39 SOMETHING LIKE THAT 01:19:56 sleep -> 01:20:02 -!- oerjan has quit (Quit: Good night). 01:23:07 TODO: actually port the optimise mergeByteString :D 01:23:57 -!- myndzi\ has changed nick to myndzi. 01:24:04 btw the bot tries to msg back the wrong nick 01:24:11 i think it tried to msg myndzi_ 01:24:18 or maybe not? 01:24:27 it just didn't send for some reason 01:30:54 it uses dcc 01:34:45 -!- zzo38 has joined. 01:34:47 -!- elliott has quit (Quit: Leaving). 01:39:08 huh? 01:39:23 someone doesn't know the difference between dcc and msg? 01:41:02 -!- pikhq_ has changed nick to pikhq. 01:44:29 -!- poiuy_qwert has changed nick to p_q. 01:44:44 -!- p_q has changed nick to poiuy_qwert. 01:52:19 -!- poiuy_qwert has quit (Changing host). 01:52:19 -!- poiuy_qwert has joined. 01:55:19 -!- hagb4rd has quit (Ping timeout: 276 seconds). 02:23:42 ohai myndzi 02:24:54 careful beats wireless every time on one polarity, and vice versa on the other XD 02:25:05 lolwut 02:25:07 how is that possible 02:25:16 oh 02:25:19 nevermind 02:25:25 how? 02:25:27 i thought you meant you submitted wireless with a reversed polarity 02:25:35 oh 02:25:36 yeah 02:25:44 srsly tho, how does it happen? 02:25:50 easy 02:25:51 fuckin polarities, how do they work 02:25:53 it's polarized 02:26:12 it's designed to work better on one polarity? 02:26:12 here, i'll even it out 02:26:14 :P 02:26:57 geez man, wanna shorten that thing a bit? 02:27:21 ha, that actually didn't do what i thought it would 02:27:58 btw what are you doing, tweak2win? :P 02:28:33 well just now, i was just trying to figure out a way to beat shudder consistently, cuz the old version just basically beat it on length 30 02:28:42 still haven't quite got it 02:28:53 who cares about shudder :P 02:29:13 well i already beat most everything else 02:29:24 wiggle3 is my bane, but i don't know what to do about that 02:29:27 shudder seems doable 02:29:47 wiggle3 -> set bigger decoys than it offsets 02:29:57 already do that. 02:29:59 in the right order 02:30:05 which order? 02:30:05 guess maybe you just attack too slow then 02:30:10 in the order it clears them 02:30:15 the first ones it clears are small 02:30:24 actually, i am misremembering 02:30:26 ignore that 02:30:32 you just want to force it into the deepest loop 02:30:48 as for the thing with careful 02:30:51 it only attacks in one direction 02:31:06 so obviously if you have defensive mechanisms, decoys, etc. in the other direction it won't work well in that combination 02:31:23 i thought i could balance it out if i added an attack in the opposite direction but that didn't happen 02:32:07 my decoys are l2r, -127,129,-129,-19,18,-1,1 02:32:52 well wiggle was optimized agaisnt slowrush lol 02:32:54 which used 19 02:33:02 so you go to 20 and it'll help 02:33:13 i actually cheated a little, bumped the decoys just a bit to get him back for that 02:33:14 :P 02:33:22 nah, it looked like it was optimized against 20 when i read it 02:33:36 well yeah, he went one over 02:33:37 but yeah, those decoys worked better than 20 when i tested them 02:33:43 at the time every time i changed it he edited it to match 02:33:48 same with other people on the hill 02:33:48 lol 02:34:24 it's a built-in game of the the traveller's dilemma :P 02:34:32 *iterated traveller's dilemma 02:35:25 well you can see ais avoiding doing that sort of thing 02:35:44 i try to too, slowrush was a special case for me because it was back and forth between 1 and 2 with wiggle back then and now i get to have the last word ;) 02:35:53 apparently alternating attacks isn't enough 02:36:32 well, any idea how to stop drawing against shudder? 02:36:42 on all but one tape length? 02:36:52 lol 02:36:56 maybe you aren't reaching the last cell 02:37:03 oh, drawing on all BUT one 02:37:21 i think i can detect it, but no idea what sequence of shifts would kill it 02:37:36 you have to counter its attack 02:37:42 ++ when it -- or something 02:37:49 and at the right time, too 02:37:55 basically it's a waste of time 02:38:20 yeah, but it'll get me a lot of points without costing me in other matches, so.... 02:38:25 i'm curious why our programs behave that way too 02:38:37 it will cost you in other matches 02:38:42 because you have to spend a lot of time on your attack to beat it 02:38:48 nah 02:38:49 just tie with it and call it good 02:38:49 :P 02:38:59 if you tie with it every round except the last one, that's enough to beat it actually 02:39:13 i do beat it 02:39:14 tying means don't fall out of the attack loop 02:39:18 but i could beat it more 02:39:21 lol 02:39:26 you don't get more points for beating it more 02:39:28 (?) 02:39:35 don't i? 02:39:39 not that i know of 02:39:45 afaik the only point gain is from win or loss 02:39:47 not how much you won or lost by 02:39:49 but i could be wrong 02:39:54 let's see then 02:40:42 scores say you do 02:41:02 Each program gains one point per win and loses one point per loss, with ties 02:41:02 neither gaining nor losing points. The duel points have the range -84 to 84, 02:41:02 inclusive. 02:41:02 The sum of these duel points total is then divided by 84, the total number of 02:41:02 configurations, such that the point range is -M to M inclusive, where M is one 02:41:04 less than the total number of programs. 02:41:27 that's points, but you're ranked by score 02:41:32 yes but... 02:41:36 score is based on the points of the programs you beat, yes? 02:41:40 Scores are derived from the basic points, but giving more emphasis to defeating 02:41:43 good programs. Every program is given a worth of (points+N)/(M*2), where N is 02:41:46 the number of programs and M is N-1. 02:41:52 points are included in the score 02:41:56 i see 02:42:01 well t hen 02:42:02 then* 02:42:09 maybe i should be optimizing a little more ;) 02:42:30 so yeah 02:42:49 i can detect when i'm facing shudder already, and only do the long attack loop in that case 02:43:00 but i don't know what sequence will kill it fastest 02:43:18 butter doesn't work :P 02:43:22 well if you want both polarities you have to spend like 256 cycles on both 02:43:25 wut 02:43:58 it beats them both 02:44:03 dunno by how much though 02:44:15 anyway look at it like this 02:44:20 shudder makes the flag cell sequence go: 02:44:30 0 1 0 1 2 1 2 3 2 3 4 3 4 5.... 02:45:02 so what you need to do is hit it with a - or + at the right time, and then you beat it 02:45:12 you can see that the 'right time' is basically every other cell 02:45:37 but you have to be lined up with it 02:45:51 let's see what happens if you do something like -..-..-..-..-.. 02:46:36 i started to work it out like this on paper but then i was like BAH THIS WILL TAKE FOREVER 02:46:59 but that sequence is basically what i'm doing already, and it doesn't work 02:47:15 i am thinking out loud here ;p 02:47:19 obviously -. won't work properly 02:47:22 (i'm actually doing [+.] which is equivalent) 02:47:27 so you need a sequence that is relatively prime to its progress 02:47:38 time for excel 02:47:40 so maybe +.. 02:47:50 +.. will not work better than -.. 02:47:55 yes 02:48:01 but [+..] is rel prime to it 02:48:05 4 cycles to 3 02:48:11 nah, that's a 4 cycle loop 02:48:15 oh, but i see what you mean 02:48:19 anyway, one sec 02:50:59 -!- cal153 has quit (Ping timeout: 240 seconds). 02:52:23 well, two cycles is relatively prime to 3 02:52:36 if it's a net positive, then a two cycle negative loop will beat it very slowly 02:52:48 now to try the reverse 02:53:07 how many cycles does it take there? 02:53:25 a long time 02:53:31 because it progresses at a rate of like 1 every 6 02:53:40 so it could be as much as 255*6 02:53:49 that's still less than 10000 02:53:49 the problem is that if the polarity switches you're SOL 02:54:20 hmmmm 02:54:23 anyway unless you manage to get exactly in synch with it 02:54:29 what happens if you put a tripwire there 02:54:31 there isn't a real good solution 02:54:36 i was thinking about that just now 02:54:43 if you are guaranteed not to run this code unless you are facing shudder 02:54:47 yeah 02:54:50 then you should be able to synch up fairly easily 02:54:56 by waiting until it hits 0 on its own 02:55:04 then what you want to do is assume it's going one way 02:55:10 and attack in a way that would kill it 02:55:12 then repeat if you were wrong 02:55:14 then wait again and do it the other direction 02:55:15 yeah 02:55:23 that's probably the fastest way to do it 02:55:36 so, []+[]- 02:55:40 not quite 02:55:49 [] checks at the beginning of the cycle 02:55:53 death checks at the end 02:56:01 so when your tripwire falls through 02:56:06 the cell will have moved on to the next instruction 02:56:15 and it hits 0 three times 02:56:18 on each instruction 02:56:27 huh 02:56:31 to synch up you'd have to do some craziness actually 02:56:35 oh right 02:56:41 like, say that it is running +-- 02:56:44 and the + makes it 0 02:56:49 then when your code runs it will be -1 02:56:56 so to get it back to 0 for two cycles 02:57:15 you would have to run +.+ 02:57:26 because the + would counteract the second - 02:57:30 . lets it bring itself to 0 02:57:33 and + counteract the first - 02:57:39 then you can have another loop to check if that failed 02:57:45 if so, you try another sequence 02:57:53 so you could have like 02:57:53 so the possibilities are 02:57:55 ++- 02:57:57 and --+ 02:58:06 well there's timing remember 02:58:09 right 02:58:11 say it hits it on the second instruction 02:58:22 which could happen depending on when you arrive, i guess 02:58:30 i'd go with the most probable one first, which is to be on the 'leading edge' 02:58:35 but is there a sequence of additions that can cover multiple polarities and timings? 02:58:38 we'll assume you get there and you are waiting for it to find 0 on its own 02:58:53 oh right 02:58:54 maybe, but it's probably convoluted and takes a long time 02:59:04 but you've said we can "detect" it and therefore run specific code 02:59:07 so here's how i'd do it 02:59:08 so ++- is most likely to hit the second + 02:59:15 and --+ the second minus 02:59:27 if it's a net positive, it will first hit 0 on the second + 02:59:39 your trip falls through and it will be running the backwards step 02:59:47 which takes it to -1 02:59:52 then when your code runs it is 0 again 02:59:54 so...[]+.+[]-.- 02:59:58 so [].- 03:00:05 oh 03:00:13 if you ran [] when it wasn't in the middle of "being near zero" 03:00:17 and if it's a net negative 03:00:24 then it first hits zero on the second minus 03:00:37 so [].+ 03:01:08 -!- mtve has quit (Ping timeout: 255 seconds). 03:01:21 then it runs +--+-- and you run .- which makes it become -1 and it's on the second minus 03:01:30 so you counteract that with a +, making it -1 again 03:01:36 and it runs + making it 0 03:01:40 then you counteract the - with a + 03:01:48 so [].-+.+ 03:01:51 will kill it 03:02:01 guaranteed, i believe 03:02:11 unless you happen to enter [] in an unlucky spot 03:02:16 but that can be fixed by looping on the above code 03:02:48 !bfjoust shutter (>[[].-+.+])*29 03:03:15 damn, stop stealing my breakdown 03:03:21 i goofed on one polarity somehow 03:03:24 let me rethink this 03:03:43 Score for myndzi_shutter: 7.7 03:04:34 I would like to able to have something like: phrase("destroy",6,"target","creature") which "creature" might converted to and(is(entity.object.permanent),has_type(type.creature)) and then "target" to something like target(...) and then deal with multiple targets, with actions, and then move target(...) outside and make it referenced within the action, and so on... 03:04:36 welp...no luck...looks like i'm not detecting it right :P 03:04:55 well i can't help you there ;) 03:05:09 !bfjoust shutter (>[[].-+.+])*29 03:05:19 why would you copy paste my code and reenter it? 03:05:30 it's going to have the exact same result except you look like a dick! :p 03:05:34 besides i'm about to fix it 03:06:02 i didn't see the result the first time 03:06:04 Score for quintopia_shutter: 7.7 03:06:12 i pounded the breakdown 03:06:24 !bfjoust shutter (>[[].-++])*29 03:06:28 off by one, always the problem 03:06:47 Vorpal_shudder.bfjoust vs myndzi_shutter.bfjoust: 03:06:47 >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> 03:06:47 myndzi_shutter.bfjoust wins 03:06:52 nice 03:07:06 Score for myndzi_shutter: 9.9 03:07:08 waiting on the inverse one 03:07:15 myndzi_shutter.bfjoust vs quintopia_one_o_them_shudder_thangs.bfjoust: 03:07:15 <<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<< 03:07:16 myndzi_shutter.bfjoust wins 03:07:17 there 03:07:24 gj 03:08:54 -!- Slereah has quit (*.net *.split). 03:08:54 -!- shachaf has quit (*.net *.split). 03:08:57 !bfjoust shutter ----->+++++>(-)*25>(+)*25>>>>>(>[-][[].-++])*29 03:09:15 Score for myndzi_shutter: 19.3 03:09:18 that didn't work out, forgot i could get stuck 03:09:23 !bfjoust shutter ----->+++++>(-)*25>(+)*25>>>>>(>[---][[].-++])*29 03:09:40 doesn't help 03:09:47 i don't want to use a loop based attack 03:10:05 Score for myndzi_shutter: 27.4 03:10:13 !bfjoust shutter ----->+++++>(-)*25>(+)*25>>>>>(>(-)*128.[[].-++])*21 03:10:57 i guess i don't need the noop there 03:11:16 Score for myndzi_shutter: 13.2 03:11:35 meh, the original wireless that ignores shudder gets more points :P 03:11:42 what'd i tell you 03:11:45 notworth the time ;p 03:12:08 it says to me 03:12:18 that there is some program that looks like shudder 03:13:05 wat 03:13:08 why does that last one get ties 03:13:18 all it does is add a fixed attack? 03:13:29 oh 03:13:30 silly me 03:13:33 i need to move after that 03:13:33 hahaha 03:13:41 OH NOOOOOOO 03:13:44 crapping_turtle <40 :( 03:13:56 And wireless #1 D-8 03:14:09 First time ais hasn't been in the top two since the recent revival! 03:14:23 lol 03:14:36 there, i tromp shudder perfectly again 03:15:13 but i get shit points against anything else 03:15:13 haha 03:15:47 maybe a looping attack is ok, but i want to beat shudder 100% so i need to do something that will eventually fall out of alignment in any eventuality 03:15:56 I'M SO FONCUSED 03:16:23 your tripwire loop doesn't work for me. i need a graphical referee to see what is happening 03:16:32 look at it this way 03:16:41 assume you are looping when shudder is far away from zero 03:16:46 actually wait 03:16:51 you mean it doesn't work when you put it in your code 03:16:54 yes 03:16:54 it's obviously looping in the wrong place 03:17:00 be sure you don't run it after, say, making a cell nonzero 03:17:01 like i did above 03:17:02 :) 03:17:07 nope 03:17:22 the relevant code was: 03:17:35 [-[++[(+)*9[.-][[+.]][[].-++]]]] 03:17:49 actually 03:17:53 that's not the one i meant 03:17:55 :P 03:18:07 [-[++[(+)*9[.-][[].-++]]]] 03:18:12 that one 03:18:34 i'll run it again and check 03:18:36 if [] is landing on shudder's cell, then it will work; that means if it doesn't work, it's not landing on shudder's cell 03:19:40 -!- x43112609 has joined. 03:19:57 !bfjoust i_regret_everythiiiiiiiiiing < 03:20:09 Score for Gregor_i_regret_everythiiiiiiiiiing: 0.0 03:20:13 the sad thing is [---] gets the most points but doesn't 100% shudder 03:20:21 [--] gets fewer points but 100%s it 03:20:22 yeah, apparently it's not landing on shudder's flag because it isn't working 03:20:42 let's try with an offset clear 03:20:44 just for lulz 03:20:58 -!- cal153 has joined. 03:21:19 even worse 03:21:19 is there a bfjoust sim that lets me see what happened at each step of the match? 03:21:19 haha 03:21:28 not that i know of 03:21:32 bfjoust debugger lol 03:21:37 i thought about how handy it would be earlier today 03:22:02 !bfjoust i_regret_everythiiiiiiiiiing < 03:22:19 why do you keep doing that? 03:22:44 Score for Gregor_i_regret_everythiiiiiiiiiing: 0.0 03:22:51 doing what 03:22:59 hi dudes :) 03:23:20 quintopia: Because I have magic powers. 03:23:25 x43112609: You'd better be armed with BFJoust programs X-P 03:23:39 I BEAT YOUR SUICIDER HAHAHAHA 03:23:51 flawless victory! 03:24:57 urgh!! 03:25:35 quintopia: I'm still #16 :) 03:25:56 my score has gone down by 2 points since myndzi showed up :P 03:26:04 lol. 03:26:49 a bf joust debugger would be p neat though 03:27:03 don't know rules 03:27:16 x43112609: http://esolangs.org/wiki/BF_Joust 03:27:25 x43112609: And TECHNICALLY you don't have to do BFJoust here, but everybody else is right now :P 03:27:51 i would make one myself if i weren't so worried i screw the rules up when i wrote the interp :P 03:28:10 quintopia: EgoJoust is open. 03:28:12 you could always test for same results as the hill 03:28:13 or that 03:28:44 wath is BF... 03:28:50 lol wath 03:29:16 anyway, quintopia 03:29:22 you can modify the attack to not require a tripwire 03:29:50 you just have to understand that you can fall out of the loop at another point in the cycle 03:30:01 so you will have a longer attack 03:30:09 it'll go from 5 cycles to probably 20 03:30:29 !bfjoust rapping_turtle -(>+>-)*4>([(+)*120[+].+>]+>[(+)*120[+].->]->)*11 03:30:36 i may as well solve this while i'm at it 03:30:43 Score for Gregor_rapping_turtle: 16.9 03:30:46 Gregor: yeah, but i'm no good at graphics in C 03:30:48 SO SENSITIVE X_X 03:30:53 YO MY NAME IS MC TURTLE AND I'M HERE TO SAY / BRAINFUCK HURTS MY HEAD IN THE VERY BEST WAY 03:31:30 I SCOOT ALONG THE TAPE / MY SIGHTS ARE SET ON RAPE / BUT I'M SLOW SO WHEN I GO IT MAY JUST TAKE ALL DAY 03:31:42 !bfjoust rapping_turtle -(>+>-)*4>([(+)*126[+].+>]+>[(+)*126[+].->]->)*11 03:31:47 that was actually more of a limerick and only if you pronounce it weirdly 03:31:47 lol 03:31:55 RIGHT so i'm going to solve shudder 03:31:57 Score for Gregor_rapping_turtle: 17.5 03:33:10 !bfjoust rapping_turtle -(>+>-)*4>([(+)*112(+.)*32.+>]+>[(+)*112(+.)*32.->]->)*11 03:33:23 Score for Gregor_rapping_turtle: 39.3 03:33:28 Better :) 03:34:05 !bfjoust rapping_turtle -(>+>-)*4>([(+)*120(+.)*16.+>]+>[(+)*120(+.)*16.->]->)*11 03:34:16 Score for Gregor_rapping_turtle: 40.0 03:34:24 Gregor: i love how dirk hangs on so diliGENTLY 03:34:25 Betterer :) 03:34:30 even though it hits the bottom regularly 03:34:49 !bfjoust rapping_turtle (-)*64(>+>-)*4>([(+)*120(+.)*16.+>]+>[(+)*120(+.)*16.->]->)*11 03:35:00 Score for Gregor_rapping_turtle: 31.7 03:35:04 Yikes 03:35:09 Gregor: do the points add up to zero? 03:35:13 !bfjoust rapping_turtle -(>+>-)*4>([(+)*120(+.)*16.+>]+>[(+)*120(+.)*16.->]->)*11 03:35:27 quintopia: In principle, modulo rounding error on output. 03:35:33 Score for Gregor_rapping_turtle: 40.0 03:35:46 so this is a zero sum game. neat :P 03:36:01 quintopia: Points are not the final score. 03:36:10 quintopia: And score does not add to anything meaningful. 03:36:15 SO WAT 03:36:21 !bfjoust snapping_turtle < 03:36:31 Score for Gregor_snapping_turtle: 0.0 03:36:55 quintopia: http://codu.org/eso/bfjoust/SCORES 03:37:05 poor keke2 03:37:33 Gregor: yeah, i was just about to suggest you rewrite that so it didn't take a million years of reading to figure out what it means 03:37:58 -!- x43112609 has left (?). 03:38:06 Didn't think he'd last :P 03:38:26 quintopia: It's really not that complicated X-P 03:38:37 then why is the description so complicated 03:38:48 i understood it once 03:38:54 but it's slippery 03:39:37 -!- Slereah has joined. 03:39:37 -!- shachaf has joined. 03:40:10 Facebook: 03:40:10 #1: I do believe I am blind as a fucking bat. 03:40:10 Me: ‎"Most species of bats have a second set of opaque eyelids which close only during sexual intercourse, protecting the eyes from damage due to mid-coital scratching or biting." -- Wikipedia 03:40:10 Hmm. Did not know. Explains the post though. 03:40:10 #3: My favorite part is you looking that up. 03:40:20 My favorite part is being able to make pseudowikipedia that people apparently think is real :P 03:41:04 lol 03:41:18 that is pretty believable 03:41:43 i think you should add it to wikipedia 03:41:50 lol 03:41:52 and preemptively tag it with citation needed 03:42:01 Bahahah 03:42:05 I was thinking citing something irrelevant. 03:42:17 lol 03:42:19 better idea 03:42:24 screencap the facebook thread 03:42:26 imgur it 03:42:27 cite that 03:42:40 X-D 03:43:08 see how long it lasts 03:45:04 "poor keke2" wut? 03:47:47 it is drowning 03:48:09 did you solve shudder? 03:48:13 -!- pingveno has quit (Ping timeout: 255 seconds). 03:50:54 ohohoh 03:50:57 i think i know 03:51:00 what's wrong 03:51:06 with wireless XD 03:54:13 ok 03:54:16 universal shudder killer: 03:54:18 still can't beat shudder thou 03:54:27 .--++++++ 03:54:31 after any loop exits 03:54:33 ezpz 03:54:39 * quintopia bows 03:54:55 you have to let me be the first to submit though 03:54:57 ;) 03:55:16 -!- pingveno has joined. 03:55:16 go quick cuz i'm about to stick it in wireless to see what happens 03:55:27 it's going right now 03:55:30 for a test run 03:55:54 success 03:56:02 not even gonna bother trying to alter the timings 03:56:03 wait a second 03:56:06 i am content it should work 03:56:22 you have to add ---- to the end if it's in a loop right? 03:56:25 turned out to be simpler than i thought 03:56:34 you don't need to loop this 03:56:40 no 03:57:01 but i need to be in a loop to detect i need it in the first place XD 03:57:01 hm it should be 03:57:04 .--++++++. 03:57:10 or at least the last cell should not be + or - 03:57:13 so maybe 03:57:15 .--++++++? 03:57:19 for clarity's sake 03:57:31 it doesn't have to be this long, the original would work fine most times 03:57:36 but this handles all fringe cases 03:57:43 it works on net positive and net negative 03:57:52 if the loop falls through after any time it hits 0 03:58:04 there are three times it can hit zero 03:58:22 so if you want a loop to fall through 03:58:24 you need . so shudder dies 03:58:30 then put it back to zero 03:58:34 then the loop will fall through properly 03:58:41 if it's not shudder, then no probz 03:58:47 i wonder if some of my programs can benefit from this 03:58:57 i don't know if they consistently win against those two or what 03:59:34 careful and careless don't use loops so it wouldn't apply to them, they probably lose some and there's not much help 03:59:37 slowrush might benefit though 04:01:43 there's ONE program on the hill making it this slow lol 04:01:56 defend7 apparently 04:02:04 !bfjoust good_vibrations (++--+++)^100000 04:02:10 and the others i guess 04:02:12 wat 04:02:14 oh give me a break 04:02:16 !bfjoust good_vibrations (++--+++)*100000 04:02:22 we don't need that shit ;p 04:02:30 it'll probably suck 04:02:34 i'm just curious 04:02:36 heh 04:03:18 defend13 does surprisingly well for being so easy to beat 04:03:37 i had another idea for it too... 04:04:39 hahah you still fail against shudder 04:05:00 not surprising 04:05:08 i still can't figure out what i'm doing wrong against it 04:05:24 Score for quintopia_good_vibrations: 23.5 04:05:25 Score for quintopia_good_vibrations: 23.5 04:06:44 i didn't implement it right in slowrush either when i tried that 04:06:48 put it back! 04:08:42 -!- zzo38 has quit (Remote host closed the connection). 04:09:17 !bfjoust superfast_jellyfish (>([{+[--[(-[{(+)*22[.+].--++++++.----}])%22]]}])%4)*29 04:09:39 Score for quintopia_superfast_jellyfish: 17.4 04:10:23 ha! 04:10:24 perfect! 04:10:37 it sucks, but it beats defend13! 04:10:57 still ties with shudder though 04:11:00 gonna stop messing with stuff 04:11:00 you explain that one 04:11:10 [.+] <- getting stuck 04:11:12 perhaps 04:11:18 remember, the loop has to exit 04:11:30 could be 04:12:01 easy to find out i guess 04:12:12 probably not getting stuck 04:12:16 should still hit 0 04:12:18 it's so slow 04:12:38 but are you sure that syntax even works? 04:12:41 meh 04:13:54 it may be broked. i was wrong about beating defend13 04:13:58 soooo.... 04:14:47 !bfjoust when_will_it_explode (>[.+].--++++++)*29 04:15:38 Score for quintopia_when_will_it_explode: 23.0 04:16:43 it ties with shudder for all of two polarities and half of the other two 04:16:58 hardly sweeps it 04:19:59 -!- myndzi\ has joined. 04:21:00 is it exiting the loop, is the question 04:21:10 i used [--] and sweep it 04:21:20 ----->+++++>(-)*25>(+)*25>>>>>(>[--].--++++++)*21 04:21:38 hmm, i think i may have forgotten something important 04:21:49 let me see how this plays out if the last instruction before ] is a math instruction 04:22:17 result (you + enemy) = 0, ] falls through 04:22:22 -!- myndzi has quit (Ping timeout: 240 seconds). 04:22:26 this is different from it reaching 0 naturally 04:22:43 but it can't happen if you oppose the enemy, only if you are moving in the same direction 04:22:46 which means it is premature 04:29:41 -!- augur has quit (Remote host closed the connection). 04:30:56 well 04:31:02 try this: 04:31:22 (>[.+]--.--+++++++++)*29 04:31:31 that assumes the + "helped" it along 04:31:49 though to be honest my head is severely hurting from this spreadsheet being hard to read 04:31:52 -!- myndzi\ has changed nick to myndzi. 04:31:54 haha 04:32:23 i synched it up so that the + in the loop makes it hit 0 in each of the three places 04:32:30 for each of the six cases 04:32:39 !bfjoust superfast_jellyfish (>([{+[--[(-[{(+)*22[.+]--.--+++++++++.-----}])%22]]}])%4)*29 04:32:50 it's interesting that a straight row of +s or -s at the right location takes care of it 04:33:02 Score for quintopia_superfast_jellyfish: 17.3 04:33:04 we only really shortcut this for one direction 04:33:14 which is why (+)*10000 probably works 04:33:41 actually i guess it's obvious that a straight row of +/- takes care of it 04:33:45 Vorpal_shudder.bfjoust vs quintopia_superfast_jellyfish.bfjoust: 04:33:45 XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX 04:33:48 Tie 04:33:52 twat 04:33:57 you're obviously doing it wrong 04:33:58 ;p 04:34:01 obv 04:34:03 you do it 04:34:09 i already did, with my original thing! 04:34:18 why don't you just go like 04:34:34 (.)*20(-)*100(+)*100 04:34:35 and give up 04:34:35 :P 04:34:49 also that wasn't an insult, it was t + wat 04:34:50 whoops 04:35:01 that's how i read it 04:35:13 you know 04:35:26 i have no idea why it would tie 04:35:30 but try the simpler one 04:35:36 aight 04:35:46 i want to at least see that that works 04:35:47 haha 04:36:06 the instruction immediately before ] can skew it, that's why i had to revise 04:36:11 !bfjoust simpler_one (>[.+]--.--+++++++++.-----)*29 04:36:38 Score for quintopia_simpler_one: 9.8 04:36:41 i made a shorter sequences 04:36:42 -s 04:36:49 Vorpal_shudder.bfjoust vs quintopia_simpler_one.bfjoust: 04:36:50 XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX 04:36:51 i started in the wrong direction that's why it was so long 04:36:53 Tie 04:36:59 wtf man >:( 04:37:07 i think your spreadsheet is lying to you 04:37:14 it worked for ME 04:37:35 !bfjoust wat (>[.+]++.-------)*29 04:37:57 Score for myndzi_wat: 25.3 04:37:58 oh, right 04:38:07 !bfjoust wat (.>[.+]++.-------)*29 04:38:14 Vorpal_shudder.bfjoust vs myndzi_wat.bfjoust: 04:38:14 XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX 04:38:16 whoops, did that wrong 04:38:17 Tie 04:38:19 oho 04:38:22 yes i can read 04:38:23 !bfjoust wat .(>[.+]++.-------)*29 04:38:26 Score for myndzi_wat: 26.7 04:38:29 i'm trying to use your attack loop 04:38:33 now 04:38:40 instead of the one i used, which worked :P 04:39:02 !bfjoust wat ..(>[.+]++.-------)*29 04:39:13 the one you used would fail against timing based progs like defend7 04:39:14 Score for myndzi_wat: 24.8 04:39:15 Score for myndzi_wat: 24.8 04:39:15 anyway, as you can see it is a timing issue 04:39:31 i skew the cycles by one and get different results 04:39:45 i think it must be missing the 0 on those ties 04:39:47 getting stuck infinitely 04:39:58 huh 04:39:59 the + boosts it past 04:40:06 and you only win sometimes when it lines up with the - 04:40:33 instead of -1 0 1 0 1 2 1 2 3 it goes like 04:40:34 sounds reasonable 04:40:38 -1 1 2 1 2 3 04:40:42 never leaves the loop 04:40:52 make the cycles something that will wind up at 0 at some point 04:41:38 so if you use [--] it sweeps it? 04:41:43 yes 04:42:02 with my original pattern even 04:42:03 pity that's even 04:42:13 shutter: ----->+++++>(-)*25>(+)*25>>>>>(>[--].--++++++)*21 04:42:19 well, change the pattern 04:42:29 just don't change it to something that can synch up in certain tape lengths 04:42:37 maybe use two loops 04:42:45 though that'll be trickier to calculate 04:42:48 it'd have to be something like 04:42:49 ].] 04:42:50 !bfjoust shutter2 ----->+++++>(-)*25>(+)*25>>>>>(>[---].--++++++)*21 04:42:54 and then crazier stuff 04:43:06 Score for quintopia_shutter2: 27.4 04:43:19 also: make your own damn spreadsheet ;p 04:43:20 lol 04:43:25 this shit goes A through U 04:43:26 D: 04:43:28 sweeps it 04:43:34 only reason i can read it at all is conditional formatting 04:43:36 0 cells = red 04:43:40 lol 04:43:59 could probably make a program to calculate what must trail a loop of any kind 04:44:01 i should do that 04:44:27 needs to wait till i get home though 04:44:31 still at work, it's 9pm jesus 04:44:34 gonna go drive 04:46:22 have fun 04:47:52 -!- poiuy_qwert has quit (Quit: This computer has gone to sleep). 04:48:50 -!- poiuy_qwert has joined. 04:57:45 i came up with one that gets a slightly lower score than before but beats all the shudders...i think i'm gonna leave it like that :P 04:59:14 -!- augur has joined. 04:59:41 oh wait, no i'm not. because it loses to decoytuner and decoybooster2 now :P 05:00:50 -!- Sgeo has quit (Read error: Connection reset by peer). 05:01:16 -!- Sgeo has joined. 05:11:55 -!- poiuy_qwert has quit (Ping timeout: 272 seconds). 05:12:32 -!- poiuy_qwert has joined. 05:19:35 -!- asiekierka has joined. 05:23:57 -!- Sgeo_ has joined. 05:24:12 -!- Mathnerd314 has quit (Remote host closed the connection). 05:24:22 lol. 05:24:32 right, so i was making things too complicated i think 05:24:39 it's easier to go through this in my head than messing with a spreadsheet 05:24:48 if the instruction before ] is a -, here are the cases 05:25:36 polarity --+, first instruction: double-decrement; it can hit 0 if it was 2, then it goes to -1, then it goes to 0 on its own 05:26:17 polarity --+, second instruction: double-decrement; it can hit 0 if it was 2, then it goes to 1, then it goes to 0 on its own 05:26:21 -!- Sgeo_ has quit (Read error: Connection reset by peer). 05:26:43 -!- Sgeo has quit (Ping timeout: 240 seconds). 05:26:44 polarity --+, third instruction: net change: 0; it cannot hit 0, the loop will never fall through 05:26:46 -!- Sgeo_ has joined. 05:26:59 in the f irst two cases, the next instruction is - and so you should increment to kill it 05:27:48 which gives us ?-].+ 05:27:56 leaving only the other polarity cases to deal with 05:28:19 polarity ++-, first instruction: no change; it cannot hit 0, the loop will not fall through 05:28:23 polarity ++-, second instruction: no change; it cannot hit 0, the loop will not fall through 05:29:03 polarity ++-, third instruction: double decrement; it can hit zero if it was at 2; then it goes to 1, 2, 2 during the ] . + 05:30:05 the next two instructions are + so we have to ward it off: -- 05:30:16 the one after is -, so - gives us a double decrement, bringing us to zero 05:30:31 and finally the one after that is a +, so one more - seals the deal 05:31:17 therefore: a loop concluding in -].+---- should kill all shudders 05:31:30 so long as the timing resolves such that it can fall through 05:32:38 well, i determined that using [.-] as the kill loop works much better than basically any thing else, so i gave up on expecting to be able to kill shudder without ruining my score 05:32:49 testing proves it out 05:33:10 interestingly, my modified shutter does much worse 05:33:17 even though it has a simpler kill 05:33:51 your new shutter appears to kill good_vibrations too 05:33:57 ...that was my initial conclusion ;P 05:34:36 though 05:34:42 not 100% like with the other shudder 05:34:49 of course 05:34:54 only when it lines up with the same set of instructions 05:35:12 i'm sure i could extend it to cover that but then someone would just make a bigger one and ugh 05:35:30 i bet it would fare well against almost all shudders that do okay though 05:35:39 just...not against anything else 05:35:58 the real trick here is to figure out what to put after ?-][ 05:36:10 so you don't do anything if it's *not* shudder 05:36:26 ---.+++++++++. works but that's long 05:36:53 well see what i said above; it's going to be zero in that cell 05:37:03 so it will skip it even if it is shudder 05:37:08 you would have to add a . 05:37:14 then make a longer loop 05:37:28 -!- Sgeo__ has joined. 05:37:58 fine. ?-].[ then 05:38:10 like i said, you'd just have to add more instructions 05:38:18 it can be so short because you catch it at a convergence 05:38:24 so 05:38:26 but the longer you wait, the more you have to struggle to swing to the other side 05:38:45 so would ].[+++-------] do it 05:38:52 look at what i said above 05:38:55 figure it out for yourself 05:39:09 you said something along the lines of tl;dr 05:39:44 look man, there's only so much work i'm going to do for YOU 05:39:53 i have satisfied myself 05:39:58 if you aren't satisfied, then do some damn homework 05:40:03 I'M TRYING MAN 05:40:13 i laid it out quite simple above, just extend the pattern 05:40:17 i'm staring at what you wrote 05:40:19 -!- Sgeo_ has quit (Ping timeout: 240 seconds). 05:40:22 and trying to make heads or tails of it 05:40:30 i went through every applicable case 05:40:31 might take a few minutes 05:40:35 there are three 05:40:53 only three cases where a -] loop will end when executing on a "shudder cell" 05:42:38 oh i see what format you're writing it out in now 05:42:57 "second instruction" means "the second of the three coincides with the - inside the loop" 05:45:05 here, i've got a good form for you 05:45:06 just a second 05:45:16 i've almost got it worked out man 05:45:23 yeah, but this will look so obvious 05:45:24 :) 05:47:08 yeah it makes it super long 05:47:34 but, it may be that you can use the second loop to your advantage to make the code succinct 05:47:36 so -].[.++--------] will do it 05:47:37 got it 05:47:38 not that it matters since it's gonna skip all this 05:47:42 not quite 05:47:50 your timing is off 05:47:51 one moment 05:48:05 i think that works man 05:48:11 your timing is off 05:48:12 i could spell out the cases like you do 05:48:17 Shudder : - - + - - + - 05:48:17 Attacker: - ] . [ + . + 05:48:17 Cell Val: 0 -1 0 -1 -1 0 0 05:48:17 Shudder : - + - - + - - 05:48:17 Attacker: - ] . [ + . + 05:48:20 Cell Val: 0 1 0 -1 1 0 0 05:48:37 actually i guess they are equivalent 05:48:56 and yeah, the long string of -s is necessary 05:49:05 it only goes down by one every three cycles 05:49:18 -!- cal153 has quit (Ping timeout: 240 seconds). 05:49:19 and so to make it up... 05:49:32 -].[.++--------++++++] will do it 05:49:34 -!- cal153 has joined. 05:49:50 it should only enter that loop if you are running on a shuddering program 05:49:53 not on a stable one 05:50:01 -].[.++--------.++++++] will do it 05:50:04 so it's kinda pointless to try and bring it back to what it was at the start 05:50:11 you also don't need to pause 05:50:24 it takes 13 -'s 05:50:25 wasn't sure whether i finished it or not 05:50:27 and all of them are required 05:50:32 13? 05:50:37 Shudder : - + + - + + - + + - + + - + + - + + - + 05:50:38 Attacker: - ] . [ + . + - - - - - - - - - - - - - 05:50:38 Cell Val: 0 1 2 1 3 4 4 4 4 3 3 3 2 2 2 1 1 1 0 0 05:51:16 - + + - + + - + + - + + - + + - + + 05:51:29 that's the third case: the opposite polarity 05:51:32 - ] . [ . + + - - - - - - - - - 05:52:45 0 1 2 1 2 4 4 4 2 2 2 0 0 05:52:53 zat it? 05:53:01 + - != 2 05:53:03 from 4 05:53:16 0 1 2 1 2 4 4 4 4 2 2 2 0 0 05:53:16 but i counted wrong, you're right 05:53:39 only need 7 -s 05:53:39 -!- nddrylliog has joined. 05:54:04 good point about not trying to make it match up tho 06:00:45 -!- nddrylliog has quit (Ping timeout: 240 seconds). 06:01:09 wow 06:01:11 i just did it 06:01:30 wireless_frownie not pwns shudder and outscores wireless 06:01:35 well then 06:01:40 no need to have two of them 06:01:53 -!- pikhq_ has joined. 06:01:56 -!- pikhq has quit (Ping timeout: 255 seconds). 06:02:59 seems to me the beest way to beat them all is just to rely on a loop that doesn't synch up and takes advantage of the -+ switch 06:03:03 pretty simple 06:03:03 -!- sebbu has quit (Read error: Connection reset by peer). 06:03:10 it always switches from + to - regardless of polarity 06:03:32 -!- sebbu has joined. 06:04:37 lul 06:04:49 it only beat wireless because it beat wireless 06:05:09 when i remove the original wireless...the new one sucks 06:05:18 pwnd 06:05:33 soooo...back to the one that loses :P 06:07:53 -!- asiekierka has quit (Ping timeout: 246 seconds). 06:30:06 -!- pikhq_ has changed nick to pikhq. 06:45:39 Gregor: is there a max depth that ({})% can be expanded? 07:31:10 -!- Sgeo_ has joined. 07:34:10 -!- Sgeo__ has quit (Ping timeout: 260 seconds). 07:53:10 -!- oerjan has joined. 07:53:58 -!- MigoMipo has joined. 07:56:27 someone doesn't know the difference between dcc and msg? <-- EgoBot uses dcc for responses of more than one line. msg would be inappropriate when the response can be up to 4096 characters (iirc) 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:04:55 hm... (a(b{c{d}e}f)%m g)%n as an abbreviation of (a(b)*m c))*n d (e(f)*m g)*n is actually perfectly effectively executable 08:05:24 if the former matches []'s textually 08:06:52 *efficiently 08:08:24 oh is that how you nest them? 08:08:37 ((a[b)*p)*q((c]d)*q)*p would be a bitch to expand 08:08:42 anyway, it doesn't work in egojoust 08:08:50 ({})% i mean 08:09:03 when the constant is too large it fails to parse 08:09:06 quintopia: i'm not sure anyone has thought of this before 08:09:29 oerjan: are you going to reimplement egojouse to work and work quickly? 08:09:35 quintopia: egojoust expands ({})% textually, as you know 08:09:47 it tries to, yes 08:09:55 but doesn't always succeed 08:10:03 quintopia: i'm not sure if i have the sufficient initiative 08:10:17 but i _do_ have ideas for how it _could_ be done 08:11:03 -!- pikhq has quit (Ping timeout: 240 seconds). 08:11:10 -!- pikhq has joined. 08:11:17 right now i'm pondering how to convert the currently accepted format to something which _does_ have lexically matching [], for which that (({{}})%)% notation would be _very_ useful 08:11:37 hmm 08:11:56 however for that ((a[b)*p)*q((c]d)*q)*p is a problem 08:12:20 (imagine p and q being primes, any expansion has to do that one fully afaict 08:12:21 ) 08:12:48 (imagine a b c d don't contain []) 08:13:39 because i am thinking that a conversion preprocessing stage would be a bitch to do in C, but you only needed to do it once for each program and the _result_ would be easy to interpret in C 08:15:07 oerjan: Isn't that particular one just identical to (a[b)*(c]d)* = (a[b{}c]d)% (where means substitute-the-product) since you don't have anything else inside the two "top-level" parens? 08:16:11 fizzie: sheesh i _tried_ to put a b c d to avoid such a simple fix 08:16:25 ok you need content somewhere else in that 08:17:02 (a([b)*p)*q c((]d)*q)*p perhaps? 08:18:12 That sounds more problematical, though maybe (c(]d)*q)*p as the latter half for symmetry? 08:18:37 hm maybe 08:21:51 hm maybe even (a([b[)*p)*q(c(]d])*q)*p 08:22:03 or wait no 08:22:54 -!- FireFly has joined. 08:23:13 For the first one, p=3, q=5 → a[b[b[b a[b[b[b a[b[b[b a[b[b[b a[b[b[b c]d]d]d]d]d c]d]d]d]d]d c]d]d]d]d]d → a [b[b [ba [b [b [ba [b[b [ba [b [b [ba [b[b [bc] d]d] d] d] dc] d] d]d] d] dc] d] d] d]d] d which does look quite messy. 08:23:26 -!- hagb4rd has joined. 08:23:35 (a([b[)*p)*<3*q>(c(]d]])*q)*<2*p>, now the expansion won't even preserve textual matching of parentheses 08:23:40 i think 08:24:05 well obviously since there aren't the same number of [ and ] textually 08:24:19 -!- mtve has joined. 08:29:29 quintopia: oh the expansion numbers have a limit of 10000 08:29:50 anything not between 0 and 10000 is turned into 10000 08:30:06 oerjan: in egojoust it breaks if you use anything above like 20 08:30:21 however this check afaict doesn't happen if the loop isn't expanded 08:30:29 quintopia: hm that's weird 08:34:19 oerjan: this is why wireless_frownie's code is so damn ugly at the moment. the compressed version always failed to parse 08:41:12 hm perhaps there is an actual bug there, and not just the size of the resulting expansion 08:45:36 -!- ndd has joined. 08:45:48 -!- ndd has changed nick to nddrylliog. 08:46:23 -!- nddrylliog has quit (Client Quit). 08:46:41 -!- nddrylliog has joined. 08:46:46 -!- nddrylliog has quit (Client Quit). 08:47:11 -!- nddrylliog has joined. 08:50:47 probably 08:52:13 given that you imply it works for values < 20, seems a bit strange 08:52:55 i never figured out exactly what value it first failed for 08:53:12 but i think it still failed sometimes for 19 08:53:34 (depending on whether the loops had to ever be expanded) 08:58:50 hm i'm detecting some dubious testing for the _end_ of the program during the iteration 08:58:57 for (i = 0; i < prog.bufused; i++) { 08:59:13 but while expanding he is _not_ keeping prog.bufused accurate 08:59:18 Gregor: ^ 08:59:44 because he is ignoring the length of the actual iteration _number_ 09:00:21 prog.bufused = prog.bufused - llen - 2 + temp.bufused; 09:00:23 ohhh i see 09:00:50 so, if it expands so that the brackets fall off the *old* end of the program, it might come up that they look mismatched to the parser 09:00:57 it is _possible_ that he could be parsing uninitialized memory at the end 09:01:16 quintopia: um no 09:01:19 oh 09:01:26 not sure what you're saying then :P 09:01:32 * quintopia hasn't studied the source 09:01:40 i don't think his code actually _copies_ anything into a wrong place 09:02:12 quintopia: he is using realloc. realloc gives no guarantee on the contents of the buffer outside the already used part, iiuc 09:02:46 quintopia: the thing is that after expansion his variable for telling the _length_ of the program might be too large 09:02:56 (prog.bufused) 09:03:40 so what would be better? calloc a whole new bit of memory and copy to it when realloc doesn't give back enough memory? 09:03:46 "#esoteric is not a very noob-friendly channel, and you can expect to receive abuse at the drop of a hat" -- what, are we really that angry? 09:04:21 quintopia: what does realloc not giving back have to do with this? 09:04:32 fizzie: THE ELLIOTT FACTOR 09:05:11 iunno oerjan. i don't understand exactly what the problem here is 09:05:26 fizzie: i was referring to the elliott factor, as oerjan said. 09:05:33 also 09:05:38 what i secretly meant was 09:05:51 "you people are as like as not idiots, so you should probably not talk" 09:06:02 but that would be insulting to the ones who aren't idiots 09:06:15 >_< 09:06:30 quintopia: MAYBE _YOU_ SHOULD PROBABLY NOT TALK 09:06:40 yes 09:06:42 probably not 09:06:48 but i can take abuse 09:06:55 lay it on me bro 09:06:55 * oerjan swats quintopia -----### 09:07:04 oh yeah, that's how i like it 09:07:19 Get a room, you two. 09:07:45 Perhaps a CHATroom. What, I get a "Tr" ligature on this input line? 09:08:03 wat 09:08:14 what fonts ligature Tr? 09:08:41 Maybe it's just a kerning thing now that I look closely enough; the r is under the T though. 09:08:59 quintopia: oh f wait i found a much worse bug in the size calculation 09:09:38 he is _reusing_ llen only inside the % code for a _much_ smaller part only from ( to { ... 09:10:10 the _same_ llen that he is later using to calculate the size of the final program 09:10:20 lol 09:11:04 ok so basically he is overestimating the program size after expansion, _particularly_ much if using ()% 09:11:39 and the more he overestimates, imho, the more likely he might end up interpreting uninitialized memory 09:11:44 Gregor: ^ 09:13:42 -!- poiuy_qwert has quit (Ping timeout: 276 seconds). 09:14:07 ohhhh, i see the problem now. 09:14:10 right 09:14:16 @tell Gregor I have been looking a bit at your egojoust parsing code and i think you are miscalculating the new size of the program after expansion, particularly if using ({})% (you are clobbering llen for a different use) but also elsewhere (ignoring the atoi length). might you not end up looking at unitialized memory? 09:14:16 Consider it noted. 09:14:28 fizzie, technically speaking they *are* in a room. 09:14:56 we are in different rooms 09:15:03 from which we access the same channel 09:16:04 right, right. 09:16:34 Are you sure oerjan is in a room instead of, say, a cave? (I can easily picture him in a cave.) 09:16:51 -!- poiuy_qwert has joined. 09:16:56 well this _looks_ like a room. 09:17:05 You know, the "bearded recluse of which the local populace tell strange stories of" style of cave. 09:17:45 fizzie: i recall we had one such here in trondheim, not sure if he still lives outside 09:18:43 i'd live in a cave 09:18:46 there's also a recent more national example... hm latest i heard he had managed to attract fleas or something from animals 09:19:08 so he took a break 09:19:12 if i could find a virgin one and lock it up 09:19:25 i'd totes build something just inside the entrance 09:19:26 ...wat 09:19:54 actually 09:20:29 i was thinking that if i got rich one day, i'd add speleothems and slanted floors and stuff in the basement so i could feel like i was in a cave 09:20:38 @tell Gregor I started looking because quintopia tells he cannot get ({})% to use with iteration count more than 20 or so, at least if the contents are slightly complicated iiuc 09:20:38 Consider it noted. 09:21:11 oh he has to know that eh? 09:21:11 @tell Gregor *to work 09:21:12 Consider it noted. 09:21:29 quintopia: well if that actually _affects_ things... 09:21:59 and he might be more likely to take a look if the bug actually affects something... 09:22:37 although i'm not sure they're _really_ related, i don't see how the calculation bug would be affect by the actual iteration size used 09:22:52 *affected 09:24:34 oh hm i see, the memmove(prog.buf + i + temp.bufused, prog.buf + end + 1, prog.bufused - end - 1); 09:24:40 might interact with this 09:25:36 in fact it might be that _that_ line breaks things more horrible but only due to a _nested_ expansion when prog.bufused has _already_ been miscalculated 09:25:42 *more horribly 09:26:59 @tell Gregor the interaction of this with memmove(prog.buf + i + temp.bufused, prog.buf + end + 1, prog.bufused - end - 1); after a _nested_ expansion when prog.bufused has _already_ been miscalculated particularly worries me, that _could_ be the case giving quintopia problems... 09:27:00 Consider it noted. 09:27:01 i was putting ()* inside of ({})% when it happened 09:27:46 gregor is going to get a flood when he next talks and it will be hilarious 09:28:25 quintopia: lambdabot initially only tells him there _is_ a message 09:28:43 mm 09:28:55 so...same as memoserv 09:29:04 yes. the ({})% is expanded first, giving a particularly wrong calculation of prog.bufused (basically, approximately by the length between { and ) ) 09:29:07 oh i know 09:29:24 it was cpressey's bot that just said it without any prelude 09:30:17 if this is large enough then when the program is rearranged uninitialized memory will end up _inside_ the program 09:30:40 sounds like you nailed it 09:35:28 hm wait no i don't think that memmove actually can do that 09:36:37 the prog.bufused is only used to tell how _much_ to copy, and it will only end up beyond the program anyway 09:39:09 @tell Deewiant maglev currently draws with shudder. it's easy to make it beat it. just change the the *21 to *20>(.+)*10000. this shouldn't hurt its performance elsewhere much at all. 09:39:10 Consider it noted. 09:41:11 !bfjoust maglev (>)*8<+<-<(+)*10<(-)*10<(-)*30<<(+)*42(>)*7(>[(+)*9[-]])*20>(.+)*10000 09:41:11 Deewiant: You have 1 new message. '/msg lambdabot @messages' to read it. 09:41:18 oh wait the atoi thing is _not_ a problem because he doesn't actually _remove_ the number from the program. or wait... 09:41:43 Score for Deewiant_maglev: 47.4 09:41:59 improvement! 09:42:16 Loses to egodeath instead of drawing with it now, but still a net improvement, yes 09:42:20 Cheers 09:42:30 it still kicks wireless's ass 09:42:43 More score, less points :-P 09:43:35 you could also try the anti-shudder trick myndzi and i worked out earlier. it might work for you even better. 09:43:42 or it may not be worth the effort :P 09:44:32 I'll stick with that for now 09:51:48 i don't understand decoybooster2 at all at all 09:52:18 why would he set that decoy to size 85, then decrease it to 42? wouldn't it make more sense to increase it to 128? 09:52:31 looks like a mistake to me 09:52:39 Probably 09:55:02 @tell Gregor actually won't the memmove(prog.buf + i + temp.bufused, prog.buf + end + 1, prog.bufused - end - 1); end up copying the ) as well... _that_ would surely be a problem when nesting... 09:55:02 Consider it noted. 09:56:07 @tell Gregor Scratch that last, i cannot read. also the atoi length is of course not a problem. the reuse of llen inside the % branch still is, i believe. 09:56:07 Consider it noted. 09:58:31 quintopia: i think i was wrong about there being something subtly wrong with the ()* case as well, i realize it doesn't _matter_ if the *n (or %n for that matter) is left in the program after expansion 09:59:42 @list tell 09:59:43 tell provides: tell ask messages messages? clear-messages 09:59:52 @help clear-messages 09:59:52 clear-messages. Clears your messages. 10:00:17 @clear-messages 10:00:18 Messages cleared. 10:00:41 it doesn't say whether it's messages sent or received though... 10:02:56 @tell gregor Summary (I don't know whether the previous messages were cleared or not): i think the reuse of llen in the % branch of egojoust.c's parseFile function is a problem that causes the prog.bufused to be calculated wrong when using ({})%, conceivable leading to reading of unitialized memory 10:02:56 Consider it noted. 10:10:41 seems @clear-messages clears messages _to_ you, not from you :D 10:28:45 -!- cheater- has quit (Ping timeout: 240 seconds). 10:29:55 -!- cheater- has joined. 10:30:15 xkcd is synchronistic with bfjoust today 10:31:32 ) 10:33:07 Now I have spurious )s after seeing those on multiple channels. 10:36:33 -!- ineiros has quit (Ping timeout: 246 seconds). 10:36:50 -!- ineiros has joined. 10:40:58 -!- cheater- has quit (Ping timeout: 240 seconds). 10:42:08 -!- cheater- has joined. 10:46:30 -!- nescience has quit (Quit: -a-). 10:46:50 -!- nescience has joined. 11:18:25 -!- BeholdMyGlory has joined. 11:48:13 -!- nddrylliog has quit (Quit: Leaving). 11:50:43 -!- sebbu has quit (Ping timeout: 250 seconds). 11:50:56 -!- poiuy_qwert has quit (Ping timeout: 240 seconds). 11:52:01 -!- poiuy_qwert has joined. 12:13:22 -!- Tritonio has joined. 12:16:51 -!- Tritonio has quit (Client Quit). 12:35:39 -!- Phantom_Hoover has joined. 12:58:30 -!- Tritonio has joined. 13:00:27 -!- Tritonio has quit (Client Quit). 13:00:32 -!- elliott has joined. 13:01:08 -!- pikhq has quit (Ping timeout: 255 seconds). 13:01:13 -!- pikhq_ has joined. 13:01:19 -!- elliott_ has joined. 13:01:20 -!- elliott_ has quit (Client Quit). 13:01:22 02:00:32 huh? 13:01:22 02:00:48 someone doesn't know the difference between dcc and msg? 13:01:31 myndzi: oh i thought you meant egobot 13:01:35 which sends errors via dcc chat 13:01:55 02:49:59 well just now, i was just trying to figure out a way to beat shudder consistently, cuz the old version just basically beat it on length 30 13:01:55 02:50:08 still haven't quite got it 13:01:58 quintopia: submit in channel dammit 13:03:00 -!- Behold has joined. 13:06:30 -!- BeholdMyGlory has quit (Ping timeout: 260 seconds). 13:07:49 $ time ~/Code/shiro/shiro mycology.b98 >/dev/null 2>&1 13:07:49 real0m4.261s 13:07:51 Not bad. 13:11:33 that's before porting forwards my optimised mergeByteString 13:12:32 shiro: <> 13:12:32 Woot 13:17:15 $ time ~/Code/shiro/shiro mycology.b98 >/dev/null 2>&1 13:17:15 real0m0.971s 13:17:24 Only 900x speed improvement before I equal or beat cfunge 13:17:47 small piece of cake, clearly 13:18:07 Actually CCBI only does Mycology in 0.94 to 0.73 seconds here. 13:18:14 So it's more like 10x-20x-30x improvement. 13:18:23 Which is totally feasible. 13:18:34 I'm using a dumb hashmap and haven't even started unpacking and strictifying things. 13:19:29 that ClearBF page got updated 13:19:32 Of course it's a bit unfair, since CCBI implements a lot more fingerprints than I do. 13:19:52 !bfjoust very_stupid_turtle -(>+>-)*4>([(+.)*255.+>]+>[(+.)*255.->]->)*11 13:19:52 Gregor: You have 7 new messages. '/msg lambdabot @messages' to read them. 13:20:02 CCBI gets 0.028, 0.027, 0.41s with fingerprints disabled here. 13:20:03 lambdabot: Yeah, fuck oerjan, that guy's a loser. 13:20:09 it's still a bit weird, but no longer a candidate for deletion, i should think. 13:20:11 wut 13:20:17 Why would anyone message Gregor with _lambdabot_ 13:20:34 elliott: he wasn't here and i couldn't remember if he read logs. 13:20:41 ah :D 13:20:42 oerjan: " ● Ability to make comments using "%" to start a comment. The comment ends at the end of the line. 13:20:42 ● All new identifiers (variables) will be awarded automatically initialized to zero." 13:20:53 also i got a bit carried away with the blathering. 13:20:57 oerjan: wow, I got "basic commands" almost exactly right with my direct cipher of brainfuck 13:21:18 09:35:55 @tell Gregor I have been looking a bit at your egojoust parsing code and i think you are miscalculating the new size of the program after expansion, particularly if using ({})% (you are clobbering llen for a different use) but also elsewhere (ignoring the atoi length). might you not end up looking at unitialized memory? 13:21:26 Gregor: btw ()*-1 lets you write *10000 easily 13:21:28 or with one more 0 whatever 13:21:48 Gregor: If I write lance will you rejig the scoreboard system to use it? :-P 13:21:59 It'll do ()* and ()% efficiently and all. 13:22:20 elliott: yeah i noticed ais523 has one program on the hill that actually has *-something and it then means *10000 13:22:30 it's *-160 for some strange reason 13:22:39 oerjan: and IIRC they're [s 13:22:43 elliott: If you write it to exit with the same status as egojoust, there's virtually nil rejigging to do. 13:22:52 so it's [[[...10000 [s... blah ...10000 ]s...]]] 13:23:03 Gregor: What's egojoust's exit status :P 13:23:11 elliott: Number of points. 13:23:22 elliott: Negative for left. 13:23:23 !bfjoust 13:23:26 Use: !bfjoust . Scoreboard, programs, and a description of score calculation are at http://codu.org/eso/bfjoust/ 13:23:33 Forgot how points are calculated. 13:23:56 Gregor: Yay, lance will result in IMMENSE POINT DEFLATION by not running redundant polarities :P 13:24:00 Oh wait, it's divided. 13:24:00 DARN 13:24:03 No point deflation. 13:24:12 I should be more clear :P 13:24:20 elliott: EgoJoust returns right wins - right losses. 13:24:29 Gregor: Ah. 13:24:40 Score for Gregor_very_stupid_turtle: 16.7 13:24:44 Gregor: 'Sok, I can make it do that, and the fact that it returns lower than egojoust all the time is your code's problem :P 13:25:47 I won't put it in EgoBot unless you multiply by two. 13:25:59 And it also prints the breakdown to stdout. 13:26:19 Gregor: (1) Dude, s/egojoust/lance/ is as much work as s//*2/ 13:26:24 (2) I can do that, sure. 13:28:00 Returning an array of label pointers: BEST IDEA??? 13:28:01 elliott: note that some people turned out to be sorta attached to the ([)*n notation 13:28:17 oerjan: s/some people/impomatic/, and he uses it unmatched, which is just perverse 13:28:26 everyone else is just doing it because it's faster on the current hill afaik 13:28:39 yeah only impomatic did it completely unmatched 13:28:43 anyway lance will end up running things like 50x faster than egojoust this way, so I'm going to reject such programs outright. well maybe ([)*nfoo(])*n I can do. 13:28:51 but i'd rather people just use %. 13:29:01 maybe i'll write a preconverter and plug it into lance to handle the 90% case. 13:29:46 elliott: btw what about my (({{}})%)% variation idea? 13:29:58 oerjan: what was that again? 13:30:01 it's quite easy to do efficiently too 13:31:24 basically you can abbreviate (([)*m{...}(])*m)%n as (([{...}])%m)%n 13:31:31 heh 13:31:42 well right now i'm implementing without any () stuff, just to get the basics down 13:32:18 Gregor: typedef enum { 13:32:18 SIEVE, /* no change */ 13:32:18 KETTLE, /* for right warrior, DINK and DONK are swapped */ 13:32:18 } polarity; 13:32:24 This is what real engineers do, Gregor. 13:32:27 Use correct terminology. 13:32:48 elliott: basically ( pushes starting count on the stack, { iterates back to matching ( or pops, } pushes like (, and ) iterates or pops 13:33:26 and provided [] matches inside () and inside {} like the rule is supposedly already, it should all work 13:34:15 !bfjoust 13:34:18 hm i guess } and ) need to count the reverse way of ( and { 13:34:23 Use: !bfjoust . Scoreboard, programs, and a description of score calculation are at http://codu.org/eso/bfjoust/ 13:34:39 oerjan: well myndzi is the one who came up with supar-efficient ways to do ()*n (well that's trivial) and ()%n (harder) 13:34:43 the latter i'll have to ask him about 13:34:53 or was it ais who came up with that. 13:34:58 elliott: mine is just a generalization of a ()%n method 13:35:01 right 13:35:25 Gregor: Are you serious about that "won't put it in EgoBot unless you pointlessly multiply by two" thing? 13:35:25 i just realized you didn't have to put {} immediately inside () always, you can have intervening ()'s 13:35:48 with a stack regime for matching 13:36:25 oerjan: heh 13:37:09 elliott: and the notation looks like it could be useful, too 13:37:23 oerjan: i'll implement that as soon as it can run ()-less programs then 13:42:32 oerjan: hm what's the maximum number of loops a warrior can get into, ... oh wait, it's 100000 13:42:44 in egojoust, yes 13:42:51 oerjan: well i'm not changing that for lance 13:43:24 781 kilobytes on the stack, nice :D 13:43:43 hm 13:44:10 elliott, looks like the TV Tropes people are eviscerating the Troper Tales and Fetish Fuel namespaces. 13:44:16 * (([{{...}}])%m)%n 13:44:43 Phantom_Hoover: So first they move everything to Troper Tales, and then they demolish it? 13:45:05 There's talk about moving it to another site. 13:45:39 ... 13:45:48 I don't get it either. 13:45:52 oerjan: it irks me that I can't optimise loops in BF Joust sanely :( 13:46:01 because the normal way basically turns it into a while loop that recurses the interpreter 13:46:06 which obviously fucks up cycles 13:46:08 I guess it's no big deal 13:46:12 but [ scanning for the matching ] is shitty 13:47:13 elliott: um Gregor's method of caching matching [] positions is quite adequate, you can just do it in a preprocessing pass if you want 13:47:28 oerjan: i haven't read the egojoust code 13:47:31 i could do it 13:47:35 it just irks me that i can't do it the normal way 13:48:04 elliott: caching [] _is_ equivalent to the normal way of compiling into something with jumps 13:48:19 well right 13:48:21 it just irks me that i can't do it the normal way <-- "the normal way"? 13:48:35 Vorpal: give loop instructions a ->body, just do "while (tape[ptr]) interpret(ins->body)" 13:49:01 also, the weather is horrible over here. 13:49:18 elliott, are you implementing brainfuck? 13:49:32 or more accurately bfjoust I guess 13:49:36 yes, i'm writing lance 13:49:38 elliott: the jump method is better for implementing () efficiently, i think. it leaves you free from needing handling [] on the stack as well 13:49:51 *to handle 13:50:15 elliott, congrats on the befunge project being alive until now. That is a record in continuous time spent on a given project I think! 13:50:53 Vorpal: um i'm just taking a break after getting mycology all passing apart from text IO, including all the FILE tests, having instant bounds shrinking, and getting Mycology running fully in less than a second 13:50:59 I think I've earned the right to write a little C program :D 13:51:12 elliott, text IO isn't that hard really. 13:51:23 i know, but it's also boring, so i've skipped it for now 13:51:30 i can read in text and binary mode, just not write in text mode 13:51:38 elliott, especially with a high level languages you could quite easily do a possibly-slow variant 13:52:09 well sure i could in haskell too, it'd just feel wrong. 13:52:14 map (reverse . dropWhile (==' ') . reverse) . lines 13:52:18 Deewiant: bytestrings 13:52:22 map is slow i think 13:52:28 ah right 13:52:30 oh that's map over a list 13:52:31 but yeah whatever 13:52:33 elliott: BS.pack . unlines . map (reverse . dropWhile (==' ') . reverse) . lines . BS.unpack 13:52:39 Deewiant, XD 13:53:11 Deewiant, that won't work though. Consider literal \n bytes in the funge space being written out 13:53:17 Deewiant: "you better pray that fuses" 13:53:35 Deewiant, or wait, what should you do in that case even? 13:54:03 Vorpal: You should do exactly that, and I think Mycology tests that. 13:54:12 Deewiant: Pack is slow :-P 13:54:16 Deewiant: But, uhh, B8.lines exists. 13:54:19 Except it's \n-only. 13:54:24 Well. 13:54:28 Deewiant, guess I does then 13:54:31 I _write_ with \ns in rectangleToByteString. 13:54:34 Vorpal: You should do exactly that, and I think Mycology tests that. 13:54:37 it says UNDEF 13:54:39 right 13:54:41 but yeaah 13:54:43 Deewiant: "you better pray that fuses" 13:54:47 oerjan: i have the utmost faith in GHC! 13:54:50 it's like religion 13:55:00 GREAT 13:55:27 Vorpal: So have you implemented the O(1) wrapping yet :P 13:55:52 elliott, no. I just got home today. As I told you before. Likely not until the weekend 13:56:03 so tomorrow or so 13:56:03 "EXCUSES" 13:56:10 Right, it's UNDEF, but I think it's preferable. :-P 13:56:10 still got university stuff to do 13:56:32 Deewiant: Rite, because then binary reading works with text output. 13:56:37 @hoogle (a -> Bool) -> [a] -> [a] 13:56:37 Prelude dropWhile :: (a -> Bool) -> [a] -> [a] 13:56:38 Prelude filter :: (a -> Bool) -> [a] -> [a] 13:56:38 Prelude takeWhile :: (a -> Bool) -> [a] -> [a] 13:56:41 Aww, no initsWhile :-P 13:56:51 textify = B8.unlines . map (reverse . dropWhile (== ' ') . reverse) . B8.lines 13:56:55 I think that has a good chance of fusing. 13:57:08 what's initsWhile 13:57:12 recent snowfall of rather dry snow + hard wind orthogonal to direction of road = horrible 13:57:18 elliott: Of course reverse won't work there since they're bytestrings 13:57:54 elliott: You want map (fst . BS.spanEnd (==' ')) 13:57:56 Deewiant: *B.reverse 13:58:00 Oh, there's a function for that? 13:58:03 Yay. 13:58:16 Deewiant: P.S. you mean == space 13:58:19 ' ' is a Char :P 13:58:23 (We need OverloadedChars.) 13:58:26 Well I don't know your data types 13:58:33 Deewiant: space is just 32 13:58:39 Obviously a bytestring contains word8s, not chars 13:58:47 So yours doesn't work anywhere 13:58:51 oerjan: initsWhile f === reverse . dropWhile f . reverse 13:58:56 > init [1,2,3] 13:58:57 [1,2] 13:59:01 I guess it should be initWhile 13:59:13 elliott, do you ever get such conditions in UK btw? Snow blowing over road. So much that you can only see about half a meter in front of the car. 13:59:13 The ' ' would work for a Data.ByteString.Char8 bytestring. 13:59:21 elliott: Mine works on the abominable Char8 ByteStrings... which are the only ones that provide lines/unlines 13:59:22 Vorpal: No. 13:59:27 elliott, I envy you 13:59:34 Deewiant: The Char8 type is the same as the regular type. 13:59:43 Deewiant: So you can happily use Char8 (B8) functions on regular ByteStrings when you need to. 13:59:43 elliott: No it's not, it's Char vs Word8 13:59:48 Deewiant: Yes it is. 13:59:51 Deewiant: Or at least it types for me. 13:59:53 Oh, the ByteString type is the same 13:59:55 I didn't know that 13:59:57 This might be an implementation detail, but it works :-P 14:00:45 Wrote to mycotmp3.tmp with o in linear text mode. 14:00:45 GOOD: o removed space prior to newline 14:00:45 UNDEF: o removes spaces prior to newline-valued cells 14:00:45 BAD: i misread or o miswrote 14:00:45 Odd. But it's better than last time. 14:01:04 Deewiant: Oh, do you expect there to be no trailing newline, or something of that sort? 14:01:12 No 14:01:27 UNDEF: o wrote EOL to EOF 14:01:36 Hm. 14:01:39 -!- asiekierka has joined. 14:01:52 elliott, hm it doesn't tell how it miswrote/misread? 14:01:58 Not here. 14:02:00 textify = B8.unlines . filter (/= empty) . map (fst . B.spanEnd (== space)) . B8.lines 14:02:01 oh wait, of course not. It is mycology 14:02:01 That might work. 14:02:05 Oh wait, I only want to strip them off at the end. 14:02:10 initsWhile, in other words. 14:02:12 :-P 14:02:29 Vorpal: It's much more of a pain to preserve info and print stuff out in Befunge than it is in your interpreter 14:03:01 When working on CCBI I practically ignore Mycology's BAD info other than seeing what instruction it's testing 14:03:20 Deewiant, yeah indeed. But sometimes knowing what you expected would be nice. It isn't always obvious. 14:03:29 Deewiant: The problem is that everyone who doesn't have fancy-super-debuggers because they're trying to get compliance first has a bit of a problem :-P 14:03:33 Not that I'm complaining 14:03:47 Anyone who writes over 100K of comprehensive Befunge-98 test suite has done enough for the world already :P 14:03:51 elliott: You don't need a fancy-super-debugger, you just need the ability to put traceShow in the right function 14:03:52 (Perhaps more than they should have.) 14:04:01 Deewiant: That counts as fancy-super-debugger in my book. 14:04:09 elliott: You have that ability :-P 14:04:26 Well, yeah, but I do it by printing tuples with ridiculous first values so they stand out :-P 14:04:38 elliott, I actually think I change ccbi to print a trace in the same format as cfunge -t does and then diffed at one point. That was for some threading stuff though. IIRC that one was a bug in mycology and ccbi. Was quite long ago. 14:04:48 fizzie: "Nokia will partner with Microsoft and use Windows Phone" 14:04:53 fizzie: Ha ha, Finnish Nokia losers 14:04:56 elliott, ouch 14:05:05 "The biggest impact will be to Finland's economy as Nokia is preparing to lay off thousands of workers." Joy 14:05:07 elliott: Windows is an improvement over Symbian 14:05:10 -!- ais523 has joined. 14:05:15 Enjoy going back to the ice age where you belong, dirty Finns! 14:05:24 (This is what happens when Nokia collapses, I'm told.) 14:05:26 Deewiant, meego looked good 14:05:36 MeeGo looked crap 14:05:42 That might've been better but it's still an improvement over what they have 14:05:55 I can't imagine actually wanting to use it... more importantly, I don't see how it could work on a tiny device. 14:05:57 And it might even be a good business move; in case you didn't know, there's a lot of Windows machines out there :-P 14:06:10 And this: 14:06:11 http://upload.wikimedia.org/wikipedia/commons/2/29/Meego_Architecture.jpg 14:06:14 is the very image of brain damage. 14:06:28 Although I do like how they've lumped huge chunks of Linux into the tiny bottom box. 14:06:40 And apparently consider X11 on the same level as device sync and single sign-on. 14:06:53 (Wait, they used X? Thank god nobody uses it.) 14:07:04 And it might even be a good business move; in case you didn't know, there's a lot of Windows machines out there :-P 14:07:08 Deewiant: Windows != Windows Phone. :p 14:07:14 And? 14:07:17 Windows Phone talks to Windows 14:07:24 Deewiant: So do other phones. 14:07:27 Same way iOS talks to OS X 14:07:34 iOS talks to Windows too :-P 14:07:36 I imagine they'll be much more synergistic 14:07:46 is the very image of brain damage. <-- what in specific? It looks rather complex... 14:07:48 You just said synergistic wrt a business strategy, congrats 14:07:50 Vorpal: Precisely 14:07:52 Especially if you use hotmail and the works, whatever 14:07:59 Hotmail? ITYM WINDOWS LIVE MAIL 14:08:31 Actually it's Windows Live Hotmail which I can abbreviate to Hotmail if I so choose 14:08:38 elliott, hm I think it might be the picture that is brain damaged. "3D Graphics" is listed twice in "Visual Svcs" 14:09:07 elliott: Also, synergistic wrt software, not the strategy :-P 14:09:17 You still said synergistic :-) 14:09:27 elliott: it was renamed to Windows Live Mail, but they quickly had to change it to Windows Live Hotmail on the basis that their customers wanted hotmail, not just ordinary mail 14:09:29 elliott, in generally that image looks rather unprofessional. What with the text going outside boxes and so on 14:09:31 If you find the word offensive that's your problem 14:09:33 ais523: *groan* 14:09:40 Deewiant: Not offensive, just meaningless 14:09:48 I don't blame Microsoft for that sort of thing, but I can definitely blame their customers 14:10:06 actually, Microsoft's business model - marketing to idiots - is probably a pretty good one 14:10:34 ais523: I wish Microsoft would just, for once, cater to second-stupidest people out there and disregard the absolute stupidest. 14:10:55 Why throw away money 14:11:16 Deewiant: Because the rest of us have to deal with the result 14:11:16 elliott: perhaps; but the absolute stupidest are more likely to spend money on things they don't actually need 14:11:22 elliott, what would the stupidest do. Possibly annoy other people than microsoft instead? Which sounds worse. 14:11:33 I've been in a computer shop where the salesman convinced someone who clearly didn't need Office - and probably not any other office suite either - to buy it 14:11:37 elliott: The result being hotmail instead of mail? I don't mind much :-P 14:11:58 Deewiant: IT WOULD BE A START 14:12:48 it's as if the customers didn't realise that people trying to sell them things generally don't have their best interests in mind 14:13:43 ais523: I have thought long and hard* about this matter and have concluded that most people are, in fact, dumb as bricks. 14:13:46 *not really 14:13:56 At least I don't see any other explanation :-P 14:14:29 elliott: well, I tend not to meet really really stupid people much 14:14:38 because of the methods I use to meet and virtual-meet people 14:14:47 if not stupid then at leats gullible 14:14:48 *least 14:14:54 hmm, gullible I can believe 14:14:55 and not very critically-minded 14:14:56 elliott: perhaps; but the absolute stupidest are more likely to spend money on things they don't actually need <-- you know what 14:15:08 make it "windows live mail" and then offer "hotmail" as an upgrade 14:15:09 not really surprising considering the state of the school system 14:15:18 Vorpal: You're hired. 14:15:22 Turn up in Redmond tomorrow. 14:15:38 elliott: it seems the ClearBF people turned up and added details about the lang 14:15:49 ais523: indeed, it's ... odd 14:15:52 change logo, add possibly one or two features so somewhat less stupid people can't complain about you selling nothing 14:15:52 admittedly, I almost thought it was spam 14:15:53 it's like PEBBLE, except useless 14:15:55 but took a second use 14:15:57 *second look 14:16:07 say, $2 / month or such for it? 14:16:30 Vorpal: ingenious 14:16:37 *ingenious 14:16:46 Vorpal: and then just team up with ISPs 14:16:46 obvious extra feature is to remove the ads in the sig space 14:16:50 to try and get people to buy it when they sign up 14:16:54 dear god, it would make millions 14:17:04 ais523: hmm, I bet sufficiently stupid people like them 14:17:05 but unfortunately, you have to be Microsoft to make it work 14:17:08 ais523: say, they click them on other people's emails 14:17:12 because they interest them 14:17:21 ais523, that could be an actual useful one. No idea how much money they make from the ads. But price it after that I guess 14:17:32 Vorpal: I doubt it's $2/month per user 14:17:33 better: 14:17:42 ais523, less or more? 14:17:43 have it advertise that the person is a VIP hotmail user 14:17:44 i.e. 14:17:48 less I guess 14:17:48 Vorpal: I doubt it's that much 14:17:51 right 14:17:56 "This person uses Hotmail, the email service for [...]. Do you? http://hotmail.com/" 14:18:03 where [...] is some self-congratulatory bullshit 14:18:07 replace the ad with that 14:18:24 or change it to an "upgrade to" advert if the email they're sending to is @live.com 14:18:26 elliott, and offer veryhotmail for $3 / month that lets you turn that off? 14:18:33 Hotmail no longer sends that 14:18:35 Sizzlingmail 14:18:45 Deewiant: OKAY, HOTMAIL USER 14:18:46 Deewiant: ah, they did last I checked, but that was a couple of years ago 14:18:59 Yes, it's relatively recent 14:19:15 I don't remember (or might not even know) when exactly 14:19:24 it's worth noting that hotmail/live.com blocks emails from yahoo.com addresses 14:19:36 I discovered that one by accident, but it was easy enough to confirm 14:19:44 /really/? 14:19:48 I _very_ much doubt that 14:19:49 ais523, how strange 14:19:55 elliott: it might have been a temporary spat 14:19:58 because Yahoo is still pretty damn commonly used 14:20:18 basically, I ended up in charge of an existing mailing list that had previously been run by someone else 14:20:21 on Yahoo! Groups 14:20:36 and emails sent to hotmail addresses from it didn't work 14:20:52 that seems more like yahoo blocking hotmail if anything 14:21:40 I wonder what sort of spam mail you get to emails under the .ng domain. 14:21:46 (That's Nigeria) 14:22:05 hi, i'm just this dude 14:22:07 and i hear you're a prince 14:22:13 and want to give me lots of money, if i give you some 14:22:20 so if i give you $2 14:22:25 do you think you could give me $1,000,000? 14:22:27 sincerely, 14:22:29 john smith smithson 14:22:32 a few quick searches imply it was a case of hotmail blocking yahoo, but only april-june 2007 14:22:33 Vorpal: that ^ 14:22:36 so presumably it doesn't happen any more 14:22:42 elliott, ha. Nice reversing of sum 14:23:14 elliott: you have to ask for the $1,000,000 first 14:23:28 hmm, right 14:23:30 otherwise you're, umm, advance-fee defrauding yourself, in case the other person just never sends the million 14:23:50 ais523: insert "THAT'S THE JOKE" macro 14:24:10 oh, I thought the joke was what Vorpal pointed out 14:24:25 ais523, I think the joke was that the *whole* thing was reversed 14:24:54 ais523, dude asking a prince, instead of the reverse. That is also part of the joke 14:25:32 elliott: I like how you tend to call other people's jokes poor, but always end up being all "WHOOSH" when you tell a joke yourself 14:25:38 Deewiant: I like that too 14:25:45 in that case, the money bit would work more like this: "I hear your uncle died last week, and you're having trouble moving the money, TEN BILLION POUNDS, to the UK. I'd be willing to pay your 10% processing fee in order for a 50% split of the resulting funds." 14:25:54 Deewiant: I have a state-sanctioned monopoly on bad jokes, you see 14:26:03 elliott: *oerjan has 14:26:08 no, he's puns 14:26:17 Deewiant, it would indeed not be inaccurate to say that elliott's behaviour is somewhat hypocritical. 14:26:26 elliott: I see. That /would/ be the simplest explanation. 14:26:35 It's not the case that double negatives don't not not not make you sound more not unneutral. 14:26:41 wow, ClearBF is actually sub-TC 14:26:50 ais523: so's Funge-98 14:26:54 elliott, ah. That is UK only though. I have the one in Sweden. 14:27:12 the only way you can have bignum coordinates violates the spec (like efunge does) 14:27:15 elliott: well, Funge-98 is a push-down automaton 14:27:19 I notice that yet again when I update the report style, nobody showers me with gratitude. 14:27:20 because y requires you to push the number of bits 14:27:21 Ingrates. 14:27:21 ClearBF's finite state 14:27:26 Gregor: we haven't looked at it yet 14:27:27 Gregor: You updated it again? 14:27:34 Yesterday :P 14:27:42 ais523: but it's amusing because people go "oh, Funge-98 lifted the restriction and it's TC now!!" 14:27:44 !bfjoust 14:27:45 Use: !bfjoust . Scoreboard, programs, and a description of score calculation are at http://codu.org/eso/bfjoust/ 14:27:50 elliott: well, Funge-98 is a push-down automaton <-- err... I thought it was BSM? 14:27:53 ah, it's a reasonably small change 14:27:59 more like BDSM 14:28:06 -!- poiuy_qwert has quit (Quit: This computer has gone to sleep). 14:28:08 Gregor: looks the same :P 14:28:11 elliott, only for implementing it :P 14:28:12 actually, I think it /is/ TC 14:28:18 I added the position >_< 14:28:21 well, the stack stack is infinite 14:28:23 no it's not 14:28:27 ais523: you have to push stack stack length and stack length on stack 14:28:31 ah, it's a reasonably small change <-- what is it? I can't find it. 14:28:35 you can use the junction of the top of the SOSS and the top of the TOSS as a zipper 14:28:46 and that's fine so long as you never call y 14:29:12 ais523, befunge-98 is TC if you allow bignum implementations like efunge. (Though of course efunge is not TC in practise either.) 14:29:15 ais523, no? 14:29:19 ais523: erm 14:29:22 i.e. it's not a case of "the existence of y means you can never make a change that would make y fail"; it's more "the specification of y means it can't manage certain possible states on the stack" 14:29:27 y should simply reflect in such cases 14:29:29 bullshit 14:29:36 y dictates the rest of the implementation 14:29:37 IMO 14:29:44 because it's _system_ info 14:29:50 i.e. information that exists in /every system/ 14:29:56 and y just _queries_ it 14:29:58 so it must already be there 14:30:24 it is there, nothing about y implies that the information is restricted to the size of a stack element 14:30:27 except the fact that y pushes it 14:30:29 You can just push infinity 14:30:39 so, the information is /there/, just y is incapable of pushing it, therefore should reflect 14:30:41 Then you need tagged cells, of course 14:30:51 Deewiant: I don't think that's spec-compliant :P 14:31:06 But if it's a value that works transparently like infinity then I guess it would be allowed 14:31:31 Deewiant: heh, are you arguing that there's no way from within standard Funge to determine that someone hasn't just pushed infinity on the stack? 14:31:33 that's ingenious 14:31:36 Point is, regular Befunge-98 isn't TC because of Funge-space being relaxed, like people think it is :P 14:31:38 Deewiant, I'm not sure you can consistently handle cells with the value infinity 14:31:39 simply push a value that is too huge for your program to ever detect it is not infinite 14:31:47 elliott: yep, it clearly doesn't have infinite fungespace 14:31:51 but it does have multiple stacks 14:31:56 graham's number or so 14:32:00 Deewiant, as in mathematically consistently 14:32:04 ais523: I don't think there is, as such 14:32:12 Infinity isn't inconsistent 14:32:13 Some fingerprints can cause problems, of course 14:32:23 and then take the limit of that behavior 14:32:24 oerjan: wow, that's such an engineer way of thinking about it 14:32:27 I'm disappointed 14:32:29 oerjan: oh, do you mean that 14:32:31 since fungespace is infinite 14:32:39 that there's a value and a value+1 that no Funge-98 program can distinguish? 14:32:42 erm 14:32:44 since fungespace is finite 14:32:45 that there's a value and a value+1 that no Funge-98 program can distinguish? 14:32:46 elliott, not as such. But if you aren't careful in how you handle it you can get issues. Besides what infinity is it? Aleph-zero? 14:32:48 Well, you have to figure out what to do about infinity-infinity and infinity/infinity 14:32:51 oerjan: if so, that's genius 14:32:52 except that no 14:32:55 because fungespace coords 14:32:57 what about doing it Feather-style: just push 8 or something, if any other value in the program ever end up becoming more just go back in time and increase the number you pushed 14:32:59 have the same possible range as cells 14:33:04 so no such value exists oerjan :( 14:33:17 Vorpal: Aleph-null is a cardinality, not relevant here 14:33:20 ais523: That'd work TRDS-style if it weren't for the fact that there's I/O 14:33:28 elliott, hm true 14:33:40 elliott: what i'm really saying is that _if_ you make things actually infinite you can do it in such a way that no befunge program can prove you did it 14:33:47 right 14:33:52 but howso 14:33:55 *but how 14:33:58 Deewiant: I/O doesn't fit well into Feather's worldview 14:34:25 *the world doesn't 14:34:27 Deewiant, Some fingerprints might interact badly with it. Is there any pow() for non-floating point in fingerprints? 14:34:37 -!- ultra1 has joined. 14:34:56 I have to flood 12 lines for their sheer ugly insanity, please forgive me: 14:34:57 [[ 14:34:57 ais523: Just saying that this isn't Feather, which may complicate things 14:35:00 mergeByteString :: Bool -> ByteString -> FungeSpace -> Vector -> (Vector, FungeSpace) 14:35:00 mergeByteString is2D s (FungeSpace m minXY maxXY rowPop colPop) offset@(ox,oy) = ((bx,by),FungeSpace m' (min offset minXY) (max (bx-1,by-1) maxXY) rp cp) 14:35:00 where ((_,by),m',rp,cp,_,bx) = B.foldl' byte ((ox,oy),m,rowPop,colPop,False,0) s 14:35:00 byte (p@(x,y),!m,!rp,!cp,lastWasCR,!biggestX) w 14:35:00 | is2D && (w == ff || (w == lf && lastWasCR)) = (p, m, rp, cp, False, biggestX) 14:35:02 | is2D && (w == cr || w == lf) = ((ox,y+1), m, rp, cp, w == cr, biggestX) 14:35:04 | w == space = ((x+1,y), m, rp, cp, False, max (x+1) biggestX) 14:35:06 | otherwise = ((x+1,y), Map.insert p (fromIntegral w) m, if Map.findWithDefault space p m == space then modm (+1) y rp else rp, if Map.findWithDefault space p m == space then modm (+1) x cp else cp, False, max (x+1) biggestX) 14:35:12 where modm f = Map.alter (\x -> 14:35:13 elliott: the befunge program cannot prove you didn't just choose a finite number too large to distinguish during the lifetime of the universe. since you are _actually_ doing it infinite, this still applies if the estimate for universe lifetime increases (as long as not infinite) 14:35:14 case f (maybe 0 id x) of 14:35:16 0 -> Nothing 14:35:18 x' -> Just x') 14:35:19 ouch 14:35:20 ]] 14:35:22 TODO: Make be not hideous 14:35:24 elliott, sprunge.us works too 14:35:28 oerjan: lifetime of the universe? please, we're not restrained by such petty constraints 14:35:31 Vorpal: EVERYONE HAD TO SEE THAT. 14:35:37 oerjan: it easily can: just run :- on it 14:35:50 infinity-infinity can be 0 :P 14:35:50 you end up with 0 if it pushed Graham's Number, and NaN if it's an actual infinity 14:35:58 infinity-infinity can be 0 :P 14:36:00 Vorpal: There is such a pow(), in FIXP IIRC, slowdown.b98 uses it 14:36:01 elliott: :1+- then 14:36:10 ais523, NaN only if floating point surely? 14:36:12 ais523: indeed 14:36:20 ais523: or even just 14:36:23 :` 14:36:31 er wait 14:36:33 obviously infinity=infinity 14:36:34 I mean 14:36:39 :1+`...it's infinity... 14:36:59 ofc you could have a stack of infinities :) 14:37:03 and infinity+1 -> infinity+1 14:37:12 what I mean is that infinity == infinity+1 14:37:15 Deewiant, now I'm not sure what sort of infinity we use, so what would 10^infinity do in that case? 14:37:20 ais523: yep, but you could make that not be the case 14:37:29 10^infinity = infinity 14:37:30 whereas A(G_64,G_64) != A(G_64,G_64)+1 14:37:39 you could make infinity+1 be a distinct value 14:37:54 Deewiant: that contradicts typical mathematical theory 14:37:58 Deewiant: nope, 10^infinity = 10^infinity 14:38:01 just store it algebraically 14:38:28 ais523: Eh? lim n 10^n = infinity, surely? 14:38:54 Deewiant: it's a different infinity, the cardinality of reals rather than the cardinality of ints 14:39:08 Only if we're talking about cardinalities 14:39:11 actually you want to choose a hyperreal number of some sort 14:39:28 oerjan: we're going to reinvent ordinals soon 14:39:33 but that has the 1+infinity vs infinity+1 problem 14:39:38 no, ordinals are inadequate for this 14:39:44 c est quoi ce charabbia 14:39:48 ORDINALS ARE INADEQUATE. WE NEED MORE INFINITY!! 14:39:51 ultra1: quoi! 14:40:03 elliott, what is the cardinality of the set of all ordinals btw? 14:40:06 ultra1: esteda moude emt ablee? 14:40:13 you want a number that can give answers to all your questions as if it were finite, but actually isn't 14:40:14 Vorpal: there is no set of all ordinals, surely you know that 14:40:21 such a set is inconsistent 14:40:33 and hyperreals fit that 14:40:42 elliott, oh indeed 14:41:01 I'm all the way down to #20? D-8 14:41:48 :t lookAhead 14:41:49 Not in scope: `lookAhead' 14:42:28 > ['0'..'9'] 14:42:29 "0123456789" 14:42:33 hmm, can & read an integer with - in front of it? 14:42:38 i.e. negative :P 14:43:26 @hoogle hLookAhead 14:43:27 System.IO hLookAhead :: Handle -> IO Char 14:43:54 indeed 14:43:57 elliott: Nope 14:44:03 -!- ultra1 has quit (Ping timeout: 240 seconds). 14:44:03 Deewiant: Really? 14:44:05 heh 14:44:08 elliott: Yep 14:44:21 Hmm, indeed. "Nice". 14:48:45 Deewiant: What does mycouser do between saying "UNDEF: got (char you entered) which is hopefully correct." and saying "All done checking the following instructions: / % & ~"? 14:48:50 It waits on a newline for me. 14:50:15 !bfjoust raping_turtle -(>+>-)*4>([(+.)*144+>]+>[(-.)*144->]->)*11 14:50:52 Gregor's warrior names get steadily more classy. 14:51:00 I nose 14:51:01 But invariably turtle-oriented. 14:51:06 elliott: It reads another char, can't remember why. 14:51:16 Deewiant: Ah. 14:51:35 Please input a number: UNDEF: got 3 which is hopefully correct. 14:51:35 Please input a character: UNDEF: got 120 'x' which is hopefully correct. 14:51:35 shiro: : hGetChar: end of file 14:51:37 Oh dear. 14:51:40 It should be reflecting. 14:51:45 Deewiant, it swallows newline iirc 14:51:48 Deewiant, no? 14:52:46 @hoogle hIsEOF 14:52:46 System.IO hIsEOF :: Handle -> IO Bool 14:53:06 -!- Slereah has quit (*.net *.split). 14:53:06 -!- shachaf has quit (*.net *.split). 14:53:07 -!- ais523 has quit (*.net *.split). 14:53:07 -!- asiekierka has quit (*.net *.split). 14:53:08 -!- Phantom_Hoover has quit (*.net *.split). 14:53:08 -!- cheater- has quit (*.net *.split). 14:53:08 -!- miekko has quit (*.net *.split). 14:53:08 -!- Herobrine has quit (*.net *.split). 14:53:08 -!- Mannerisky has quit (*.net *.split). 14:53:09 -!- MigoMipo has quit (*.net *.split). 14:53:10 -!- dbc has quit (*.net *.split). 14:53:10 -!- mtve has quit (*.net *.split). 14:53:10 -!- myndzi has quit (*.net *.split). 14:53:11 -!- coppro has quit (*.net *.split). 14:53:11 -!- ineiros has quit (*.net *.split). 14:53:12 -!- jix has quit (*.net *.split). 14:53:12 -!- SimonRC has quit (*.net *.split). 14:53:12 -!- rodgort has quit (*.net *.split). 14:53:13 -!- Deewiant has quit (*.net *.split). 14:53:13 -!- aloril has quit (*.net *.split). 14:53:13 -!- tswett has quit (*.net *.split). 14:53:14 -!- Behold has quit (*.net *.split). 14:53:15 -!- olsner has quit (*.net *.split). 14:53:15 -!- lifthrasiir has quit (*.net *.split). 14:53:15 -!- Gregor has quit (*.net *.split). 14:53:21 oerjan: yay you're still here 14:53:25 elliott: ^ 14:53:28 huh 14:53:30 oerjan: yes, I use it 14:53:37 oerjan: but more importantly, I use ioReflect 14:53:42 elliott: we're on the same server 14:53:50 so it should just be _reflecting_ 14:53:52 rather than complaining 14:53:59 unless isEOF doesn't throw an exception... 14:54:08 does error "foo" count as an IOException? 14:54:11 guess not 14:54:22 hope not, since that would fuck up some of my "wtf?" error prints :D 14:54:33 no, although you _can_ catch it 14:54:51 with the more general exception catching 14:55:01 -!- pikhq_ has quit (Ping timeout: 240 seconds). 14:55:03 oerjan: I use Control.Exception, which is probably that 14:55:04 Score for Gregor_raping_turtle: 30.0 14:55:19 -!- pikhq has joined. 14:56:00 mhm 14:56:43 !haskell import System.IO; main = hGetChar >>= print 14:57:05 hm i guess that won't really print anything 14:57:51 elliott: if you want to only catch IOExceptions, you have to restrict it i think... 14:57:55 oerjan: I do 14:58:16 oerjan: ioReflect :: IO a -> Shiro a 14:58:16 ioReflect action = do 14:58:17 st <- get 14:58:17 io action `catchShiro` 14:58:17 \(e::IOException) -> do 14:58:18 io . hPutStrLn stderr $ "*** [Reflecting on IO exception: " ++ show e ++ "]" 14:58:20 throw (ShiroIOException st) 14:58:24 (print is just for dbeugging) 15:00:02 but er 15:00:07 eof <- isEOF 15:00:07 if eof then return i else do 15:00:14 -!- SimonRC has joined. 15:00:14 -!- ais523 has joined. 15:00:14 -!- asiekierka has joined. 15:00:14 -!- Behold has joined. 15:00:14 -!- Phantom_Hoover has joined. 15:00:14 -!- cheater- has joined. 15:00:14 -!- ineiros has joined. 15:00:14 -!- mtve has joined. 15:00:14 -!- MigoMipo has joined. 15:00:14 -!- myndzi has joined. 15:00:14 -!- shachaf has joined. 15:00:14 -!- Slereah has joined. 15:00:14 -!- jix has joined. 15:00:14 -!- Mannerisky has joined. 15:00:14 -!- Deewiant has joined. 15:00:14 -!- aloril has joined. 15:00:14 -!- tswett has joined. 15:00:14 -!- rodgort has joined. 15:00:14 -!- coppro has joined. 15:00:14 -!- miekko has joined. 15:00:14 -!- dbc has joined. 15:00:14 -!- olsner has joined. 15:00:14 -!- lifthrasiir has joined. 15:00:14 -!- Herobrine has joined. 15:00:14 -!- Gregor has joined. 15:00:15 hard to get more direct than that kind of checking :) 15:00:21 oh wait 15:00:32 it's read with the other instruction 15:00:33 `sh which ghci 15:00:33 Gregor: 30.0 for the raping turtle btw 15:00:41 -!- asiekierka has quit (Excess Flood). 15:00:48 i don't think HackEgo has ghc 15:00:54 !sh which ghci 15:00:59 /usr/bin/ghci 15:01:04 wow, there's quite a renaissance of slow-rush programs in BF Joust 15:01:07 No output. 15:01:10 also that would be `run 15:01:11 -!- asiekierka_ has joined. 15:01:16 `run which ghci 15:01:16 No output. 15:02:42 oerjan: hm my catch should be working actually 15:02:58 ioReflect works other places? 15:03:14 yep 15:03:38 -!- tswett_ has joined. 15:03:40 -!- Behold has quit (*.net *.split). 15:03:41 -!- olsner has quit (*.net *.split). 15:03:41 -!- lifthrasiir has quit (*.net *.split). 15:03:41 -!- Gregor has quit (*.net *.split). 15:03:42 so can you show the actual use case which isn't working? 15:03:43 gah 15:03:44 not again 15:03:52 -!- Deewiant_ has joined. 15:04:01 Deewiant_, not sure if this got through last time: 15:04:07 Deewiant, it swallows newline iirc 15:04:08 Deewiant, no? 15:04:11 it did 15:04:17 oerjan: coreIns '~' = io (hFlush stdout) >> (push . fromIntegral . ord =<< io getChar) 15:04:18 elliott, well to us, but to him I meant 15:04:22 i suppose hFlush could be failing :) 15:04:27 oh 15:04:30 "io getChar" 15:04:32 elliott, we two were on the same side of the split. He wasn't :P 15:04:32 hurrrrr 15:04:37 Vorpal: o rite 15:04:40 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds). 15:05:02 elliott: and that's all wrapped inside ioReflect? 15:05:02 Deewiant_, anyway I'm pretty sure mycouser wants to eat a newline there. 15:05:11 -!- Behold has joined. 15:05:11 -!- olsner has joined. 15:05:11 -!- lifthrasiir has joined. 15:05:11 -!- Gregor has joined. 15:05:18 oerjan: no :D 15:05:19 oerjan: ioReflect is like io except reflecting 15:05:19 I just forgot to use it 15:05:19 fixed 15:05:23 *facepalm* 15:05:31 Vorpal: seems pointless 15:05:35 ais523: 15:05:36 and makes choosing \n as the character odd :) 15:05:40 yes quintopia? 15:05:43 elliott, why 15:05:47 check your pms 15:05:50 Vorpal: well why read the newline? 15:05:52 I didn't get one 15:05:55 huh 15:05:56 elliott, if you implement STRN it will test it's input function afterwards 15:05:59 you probably PMed me during the netsplit and it got lost as a result 15:06:01 try again 15:06:05 elliott, same for BASE iirc 15:06:12 elliott, so it would mess up those tests 15:06:12 quintopia: stop CONSPIRING 15:06:17 Vorpal: well true 15:06:23 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 15:06:25 hmm STRN seems easy 15:06:33 by "input a string" does MKRY mean "line" or what :) 15:07:07 elliott, what I do is give the rest of the input line buffer as the result of that (unless it is empty in which case I read a line) 15:07:27 !bfjoust raping_turtle -(>+>-)*4>([([+)*144(])*144+>]+>[([-)*144(])*144->]->)*11 15:07:29 elliott, I forgot if I strip away the trailing \n or not 15:07:37 check your pms <-- THAT'S VERY INSENSITIVE TO THE WOMEN HERE 15:07:42 all zero of them 15:07:53 Score for Gregor_raping_turtle: 13.1 15:07:57 don't be silly, Herobrine is obviously female 15:07:57 AWESOME FAILS 15:08:05 ok then 15:08:05 elliott, ... what? 15:08:15 quintopia: THAT'S VERY INSENSITIVE TO HEROBRINE 15:08:25 also Vorpal, even more obviously female! 15:08:29 -!- tswett has quit (Remote host closed the connection). 15:08:30 -!- Deewiant has quit (Remote host closed the connection). 15:08:34 elliott, no :P 15:08:36 ...i have _some_ doubts about that. 15:08:49 Vorpal: is there something wrong with that? do you feel _accused_? are you SEXIST? 15:08:54 arvida norlander 15:08:57 oerjan: why? if I said e was male you wouldn't object!! 15:08:59 that's sexism! 15:09:01 !bfjoust raping_turtle -(>+>-)*4>([(+)*112([+)*32(])*32+>]+>[(-)*112([-)*32(])*32->]->)*11 15:09:01 institutionalised sexism! 15:09:04 i'm leaving forever -> 15:09:22 elliott: i have some conflicting information 15:09:30 Score for Gregor_raping_turtle: 12.1 15:09:36 Yesssssssssssssssssssssssss 15:09:43 -!- Deewiant_ has changed nick to Deewiant. 15:10:21 !bfjoust raping_turtle -(>+>-)*4>([(+)*120([+)*16(])*16+>]+>[(+)*120([+)*16(])*16->]->)*11 15:10:38 Gregor, is that the verb or the adjective in that program name? 15:10:46 Score for Gregor_raping_turtle: 12.8 15:10:52 Dude you're pushing me below defend13, don't do that 15:10:53 Adjective. 15:10:55 Deewiant: That henk guy that isn't rcfunge or catseye or glfunge, where are the specs for those 15:11:00 Like {snapping,crapping,rapping} 15:11:33 hm 15:11:36 Gregor: I SENSE A LACK OF SHORT VOWEL 15:11:39 Raping is a verb? 15:11:50 no, it's an adjective 15:12:03 I'm just saying, how could it not be adjective 15:12:04 a participle, to be precise, the adjective form of a verb 15:12:05 the seed of rape 15:12:10 oerjan: *groan* 15:12:10 oerjan: Yeah, well raping_turtle is a fail regardless :P 15:12:12 oh wait I misread that word as another one. 15:12:15 I blame elliott 15:12:16 alternatively, it's a noun 15:12:26 How on earth can you misread "raping" 15:12:27 because there's also a gerund spelt the same way, derived from the same verb 15:12:33 Gregor: it cannot get the speed up 15:12:46 I really don't understand why this does so much worse than rapping_turtle .... 15:12:47 elliott, you talked about sexism. I misread it as "rapeing" 15:12:56 Rapeing isn't a word. 15:13:00 Let alone an adjective or a verb. 15:13:09 -!- BeholdMyGlory has joined. 15:13:18 But yes, "raping" means what you think "rapeing" means :P 15:13:51 I SENSE THE CURRENT BFJOUST NAMING CONVENTIONS DO NOT REFLECT WELL ON THIS COMMUNITY 15:13:57 Deewiant: [[Rc/Funge-98 is the official implementation of these fingerprints. When a behavior is not specified in these specs, the way that Rc/Funge-98 operates is the correct behavior]] 15:14:04 Deewiant: SPECIFIED SEGFAULTS 15:14:08 oerjan: *GREGOR'S CURRENT 15:14:14 !bfjoust fapping_turtle -(>+>-)*4>([(+)*120(+.)*16(-.)*16>]+>[(+)*120(+.)*16(-.)*16>]->)*11 15:14:16 elliott: :-P 15:14:23 elliott, right. But then follows that "to rape" gives that "raping"? 15:14:29 Score for Gregor_fapping_turtle: 34.1 15:14:31 Vorpal: What? 15:14:31 or did that turn it into an adjective? 15:14:42 I think you're very confused about how the English language works 15:14:50 elliott: Not anywhere AFAICT: mirror http://tar.us.to:1234/ 15:15:10 !bfjoust fapping_turtle -(>+>-)*4>([(+)*121(+.)*14(-.)*14>]+>[(+)*121(+.)*14(-.)*14>]->)*11 15:15:22 elliott, isn't the -ing form of a verb still a verb? 15:15:25 Score for Gregor_fapping_turtle: 34.1 15:15:45 !bfjoust fapping_turtle -(>+>-)*4>([(+)*124(+.)*8(-.)*4>]+>[(+)*124(+.)*8(-.)*4>]->)*11 15:15:52 Vorpal: verbs generally have two -ing forms, one of which is an adjective (present participle), and the other of which is a noun (gerund) 15:15:57 Score for Gregor_fapping_turtle: 35.3 15:16:02 Foobar. 15:16:05 present participles basically always end -ing; gerunds sometimes end -ion instead 15:16:27 (e.g. verb "subscribe" -> participle "subscribing", gerund "subscription") 15:16:56 ais523, then "raping turtle" could mean either "the act of raping a turtle" or "a turtle that rapes "? 15:17:00 subscription is a gerund? i thought it was latin. 15:17:10 -!- Behold has quit (Ping timeout: 272 seconds). 15:17:13 Vorpal: only the second 15:17:17 -!- elliott has quit (Quit: Leaving). 15:17:22 -!- elliott has joined. 15:17:24 ARRY: "Addresses used by this extension are absolute, the storage offset does NOT apply to these functions." 15:17:25 the first would have the words the other way round, "turtle raping" 15:17:27 But why 15:17:31 because English is often word-order-sensitive 15:17:54 oerjan: gerunds come up more in Latin than English, for whatever reason 15:18:08 !bfjoust fapping_turtle -(>+>-)*4>([(-.)*8(+)*112(+.)*16>]+>[(-.)*8(+)*112(+.)*16>]->)*11 15:18:19 Score for Gregor_fapping_turtle: 3.6 15:18:22 Hey guys, nonsensual intercourse with testudines 15:18:24 wtf 15:18:24 ais523, hm... I'm pretty sure that other order does occur. Mostly in titles. (Not that specific example of though) 15:18:28 *nonconsensual 15:18:44 possibly they are not correct though 15:18:45 elliott: it's not particularly sensual either 15:18:55 Deewiant: NCRS is the sane one and TERM the insane one right? 15:19:05 elliott, neither is completely sane 15:19:11 More-sanerer 15:19:18 elliott, not really. 15:19:30 Doesn't CCBI do NCRS and not TERM or something 15:19:31 elliott, I didn't know one was saner than the other either 15:20:07 elliott, I believe that was the case for ccbi1. Or it did TERM only on windows or something like that 15:20:16 CCBI1 did TERM only on Windows, yes 15:20:45 Deewiant, ccbi2 does it on both? 15:21:06 Yep 15:21:14 anyway TERM isn't insane. It is just cursor positioning mostly. 15:21:24 !bfjoust fapping_turtle -(>+>-)*4>([(-..)*8(+)*112(+..)*16+>]+>[(-..)*8(+)*112(+..)*16->]->)*11 15:21:25 @hoogle String -> CString 15:21:26 Foreign.C.String newCAString :: String -> IO CString 15:21:26 Foreign.C.String newCString :: String -> IO CString 15:21:26 Prelude read :: Read a => String -> a 15:21:35 Score for Gregor_fapping_turtle: 3.6 15:22:56 $ ./ffitest 15:22:56 Hello, world! 15:22:56 Woot 15:23:06 {-# LANGUAGE ForeignFunctionInterface #-} 15:23:07 import Foreign.C 15:23:07 foreign import ccall "puts" c_puts :: CString -> IO () 15:23:07 main :: IO () 15:23:07 main = c_puts =<< newCAString "Hello, world!" 15:23:19 !bfjoust fapping_turtle -(>+>-)*4>([(-.)*8(+)*128(+.)*16+>]+>[(-.)*8(+)*128(+.)*16->]->)*11 15:23:22 Bad math is bad 15:23:31 Score for Gregor_fapping_turtle: 25.0 15:24:02 Thanks, I'm above defend13 again 15:24:05 !bfjoust fapping_turtle -(>+>-)*4>([(+.)*256+>]+>[(+.)*120(+.)*16->]->)*11 15:24:16 I'm gonna kill fapping_turtle soon :P 15:24:21 Score for Gregor_fapping_turtle: 16.0 15:24:31 !bfjoust fapping_turtle < 15:24:34 !bfjoust raping_turtle < 15:24:40 Score for Gregor_fapping_turtle: 0.0 15:24:48 Score for Gregor_raping_turtle: 0.0 15:26:57 I'm disappointed that I can't do better without actually looking into other code and targeting specific contenders :( 15:30:54 Poor raping turtle. 15:31:21 Vorpal: Here's some fun for you: 15:31:23 [[Some C functions are actually defined by a CPP header file to be a C macro. Suppose you foreign import such a "function", thus: 15:31:23 foreign import foo :: Int -> IO Int 15:31:23 Then you'll get the right thing if you compile using -fvia-C, provided you cause the right header files to be included. But the native code generator knows nothing of CPP mcros, so it will generate a call to a non-existent C function "foo". In effect, the FFI is defined to interface to the C ABI rather than the C API; it doesn't take account of CPP magic.]] 15:31:38 i.e. I could do ncurses without a C wrapper, iff I use the right code generator :-P 15:32:30 ncurses is full of macros 15:32:45 Exactly. 15:32:55 elliott, how does ccbi manage it? 15:33:03 With a C wrapper I believe 15:33:37 $ ./ffitest 15:33:37 Segmentation fault 15:33:41 Haskell: LANGUAGE OF SAFETY 15:34:48 -!- copumpkin has joined. 15:35:00 Woo, almost works now \o/ 15:35:01 | 15:35:01 /| 15:35:50 elliott: 15:35:51 Prelude Unsafe.Coerce Data.ByteString> (unsafeCoerce 42 :: ByteString) 15:35:51 Loading package bytestring-0.9.1.5 ... linking ... done. 15:35:51 "Segmentation fault 15:35:56 Language of safety, indeed! 15:36:02 fizzie: INDEED 15:36:17 Woo, I now have env(1) written in hideously-unsafe Haskell. 15:36:44 What, you don't have Unsafe.Coerce imported by your .ghci? 15:36:48 Deewiant: :-D 15:36:57 It uses the environ variable, and C's puts. 15:37:08 I thought I might've but evidently not 15:37:12 So it's FAST (0.006 seconds, that's almost as fast as cfunge running Mycology) 15:37:18 Deewiant: You actually use unsafeCoerce? :-P 15:37:18 :m +Control.Applicative Control.Arrow Control.Monad Control.Monad.Loops Data.Char Data.Either Data.Function Data.Functor Data.List Data.List.Split Data.Maybe Data.Monoid Data.Ord Numeric Text.Printf 15:37:29 "Numeric" :x 15:37:32 THAT'S NOT HIERARCHICAL 15:37:43 There is no more hierarchical version of it 15:37:52 @hoogle showIntAtBase 15:37:52 Numeric showIntAtBase :: Integral a => a -> (Int -> Char) -> a -> ShowS 15:38:09 Well, yes. 15:38:37 fizzie: we thus have proved that ByteStrings are not the Answer. 15:38:58 quintopia: What the hell does wireless_frownie DO? 15:39:38 elliott: Numeric and Foreign, iirc 15:39:48 oerjan: ? 15:39:56 elliott: no hierarchy 15:41:10 oerjan: well Foreign has a hierarchy underneath it 15:41:18 Numeric should be Data.Numeric really 15:41:53 I like how Foreign stole my peek and poke names :( 15:42:41 > showIntAtBase 13 intToDigit (6*9) "" 15:42:42 "42" 15:42:46 http://sprunge.us/NjCI HOW TO PROGMA IN C 15:42:49 SORRY 15:42:50 *CSKELL 15:45:13 MANDATORY_PATH=/usr/share/gconf/gnome.mandatory.path 15:45:14 GNOME_DESKTOP_SESSION_ID=this-is-deprecated 15:45:14 Interesting environment variables... 15:46:22 -!- sebbu has joined. 15:46:58 Deewiant: Does Windows have putenv()? 15:47:20 "This POSIX function is deprecated beginning in Visual C++ 2005. Use the ISO C++ conformant _putenv or security-enhanced _putenv_s instead." 15:47:23 I think it does 15:47:23 But in theory, yes. 15:47:35 Security-enhanced. Heh. 15:47:36 But not setenv 15:47:41 It has the environ variable, right? 15:47:44 Nope 15:47:49 Deewiant: You sure? >_< 15:47:51 Yep 15:48:04 OH WELL, I'll just make EVAR POSIX-only like it is now. 15:48:29 fizzie: Microsoft have deprecated quite a lot of the C89 libraries 15:48:51 replacing them with _s versions which take (buffer, buffersize) pairs rather than just buffers 15:49:04 Deewiant: I don't suppose 0"oof"P can remove the environment variable "foo"? :-P 15:49:07 this becomes a little ridiculous in the case of functions that /already/ took the buffer size as input 15:49:11 It does say the argument is of the form foo=bar 15:49:14 So I guess that's fine 15:49:42 basically, it's a case of Microsoft missing the point of C 15:49:44 ais523: The C1x "bounds-checking interfaces" thing has _s functions that are quite similar. 15:50:01 fizzie: hmm 15:50:29 I seem to remember Microsoft suggested their _s functions to the C committee, and they rejected them in favour of something else 15:51:09 @hoogle CString -> IO String 15:51:09 Foreign.C.String peekCAString :: CString -> IO String 15:51:10 Foreign.C.String peekCString :: CString -> IO String 15:51:10 Prelude show :: Show a => a -> String 15:51:50 C1x seems pretty crap so far :) 15:53:43 Somebody pastebin an explanation of the no-expansion algorithms for BFJoust. 15:54:00 ais523: I'm not sure they're exactly the same; but similar. And even those that already took a size (say memcpy) do extra checking (for NULLs and such) and fail in a bit more safe fashion than a segfault. 15:55:11 (Food now. ->) 15:56:07 Gregor: No, I'm implementing lance. 15:56:11 Gregor: Stop ruining my fun >_< 15:56:24 elliott: What I'm trying to make is in no way competition for lance. It is strictly complementary. 15:56:33 Gregor: But that's the only thing lance has :P 15:56:45 elliott: I am not making a replacement for egojoust. 15:56:48 Ask oerjan I guess, he generalised it today/yesterday. 15:56:56 Gregor: YOU ARE GRANTED PERMISSION THIS ONE TIME 15:57:33 -!- Minizours has joined. 15:57:37 13:54:34 elliott: basically ( pushes starting count on the stack, { iterates back to matching ( or pops, } pushes like (, and ) iterates or pops 15:57:37 13:55:13 and provided [] matches inside () and inside {} like the rule is supposedly already, it should all work 15:57:37 13:56:05 hm i guess } and ) need to count the reverse way of ( and { 15:57:38 Gregor: ^ 15:57:48 -!- Minizours has left (?). 15:57:59 I think that way, * is the same as % after a (), and {} just become freaky-deaky virtual 0-tick instructions 15:58:23 elliott: not quite: { needs to look forwards to the % after the ) matching the containing ( 15:58:27 to know what the repeat count is 15:58:28 I'm not sure I'm convinced about [], in particular with respect to non-matching []s in ()s. 15:58:39 non-matching []s in ()s is evil and should be banned. 15:58:45 non-matching []s in ()s are disallowed by the spec as you're supposed to use ({}) instead 15:58:46 ais523: why does defend13 have a *-160? 15:58:56 elliott: it doesn't? 15:59:02 ais523: oerjan said it did. 15:59:04 or was that defend14. 15:59:33 I don't duplicate anything a negative number of times 15:59:43 You do 15:59:46 You've just forgotten where 15:59:48 Or oerjan is a liar 15:59:49 :P 15:59:57 nope, just checked 16:00:08 duplicating something a negative number of times would make no sense anyway 16:00:14 SO I HEAR THIS MUBARAK PERSON STEPPED DOWN, just trying to keep #esoteric ON TOP OF CURRENT EVENTS, like we always are 16:00:18 ais523: it's the same as *100000 in egojoust 16:00:21 but you _do_ do it! 16:00:32 oerjan is infallible 16:00:41 elliott: I just ran control-F over defend14's source 16:00:48 and defend13 as well 16:00:49 no *- there 16:00:53 11.02.10:13:15:59 so why does ais523_defend9 contain *-160 twice... 16:00:54 11.02.10:13:22:34 elliott: and there are two *-160, one containing exactly one [ and one containing exactly one ], so the match even if it's interpreted as 10000 :D 16:01:10 elliott: you didn't say defend9! 16:01:17 yo 16:01:17 ais523: You do 16:01:18 You've just forgotten where 16:01:22 i.e. I don't remember which contestant it was :P 16:01:23 elliott: **10000 16:01:32 oerjan: erm really? 16:01:33 also, that looks like a bug in defend9.pl 16:01:34 how strange 16:01:39 because the cycle count is 100000 16:01:40 (in case you didn't guess, defend9 is machine-generated) 16:02:35 ais523: maybe if you fixed it it'd do well :D 16:02:45 nah, the code that bit's in is unlikely to ever run 16:02:51 especially with the current hill 16:02:56 it detects a strategy nobody uses 16:03:10 Gregor: What does EgoJoust do for a tie, not change the return value? 16:03:30 The return value is WINS - LOSSES. Is a tie a win or a loss? :P 16:03:39 (The answer is "no" :P ) 16:04:17 !help 16:04:17 help: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help . 16:04:20 Argh 16:04:21 !info 16:04:22 EgoBot is a bot for running programs in esoteric programming languages. If you'd like to add support for your language to EgoBot, check out the source via mercurial at https://codu.org/projects/egobot/hg/ . Cheers and patches (preferably hg bundles) can be sent to Richards@codu.org , PayPal donations can be sent to AKAQuinn@hotmail.com , complaints can be sent to /dev/null 16:04:40 So Gregor, does that codu.org email forward to Hotmail :-p 16:04:41 *:-P 16:04:48 elliott: ... no. 16:04:50 The INSULT 16:04:53 The OUTRAGE 16:05:34 ais523: did you notice my comment that (({{}})%)% also makes sense and is efficient? 16:05:52 that's why LANCE, the enterprise BF Joust referee, will support it 16:06:02 oerjan: no, but that's interesting 16:07:28 oerjan: erm really? <-- really. if (times < 0 || times > 10000) times = 10000; 16:07:33 :D 16:07:39 to avoid OOM presumably 16:07:43 not a problem with LANCE 16:08:30 elliott: however it helps nothing with people doing (()*10000)*10000 16:09:14 indeed 16:09:21 !bfjoust slug ((.)*-1)*-1 16:09:29 -!- Wamanuz has joined. 16:09:35 !bfjoust 16:09:35 Use: !bfjoust . Scoreboard, programs, and a description of score calculation are at http://codu.org/eso/bfjoust/ 16:09:37 elliott: SHEESH 16:09:40 :D 16:09:49 huh it's actually running semi-quickly 16:09:49 oh wait 16:09:52 Score for elliott_slug: 10.0 16:09:53 it only expands if there's no [ in it 16:10:01 !bfjoust slug (([)*-1)*-1((])*-1)*-1 16:10:11 !bfjoust rule_of_nine >(>+[[<](>)*9((-)*64[-]>)*21])*30 16:10:16 -!- PH|lazytypist has joined. 16:10:18 -!- Wamanuz5 has quit (Read error: Connection reset by peer). 16:10:26 finally, an ais523 program name that isn't [program style][number] 16:10:33 elliott: many of mine aren't like that 16:10:34 (The answer is "no" :P ) <-- although "both" would be equivalent 16:10:36 ais523: are you the 523rd ais program? 16:10:43 besides, that is [program style][number] if you think about it 16:10:53 could you kill slug so I actually get a result before the end of the universe? 16:10:53 it's the ninth rule_of program? :-) 16:11:03 ais523: erm they run simultaneously 16:11:05 see http://codu.org/eso/bfjoust/breakdown.txt 16:11:25 I don't expect it to do too well; the strategy is reasonable, but that implementation isn't advanced enough 16:11:28 -!- PH|lazytypist has quit (Client Quit). 16:11:29 and actually, they run in alphabetical order 16:11:36 so there'll be a few of mine, then a few of yours 16:11:47 I won't be able to get all my runs in unless you kill yours 16:12:06 i'll wait until it stops running yours 16:12:11 just because i want to see what will happen >_> 16:12:25 * elliott decides that programs have no business being more than four megabytes, sets that as static limit 16:12:27 Yesterday: Mubarak refuses to step down. Today: Mubarak flees from Cairo and steps down. 16:12:48 Deewiant_sloth.bfjoust vs ais523_rule_of_nine.bfjoust: <<<<<<>>>>>>>><<<<<<< <>>><<<<<<<>>>>>>>>>> <>>><<<<<<<>>>>>>>>>> <<<<<<>>>>>>>><<<<<<< Tie 16:12:51 that's... bizarre 16:13:05 It's rare but not unheard of :-P 16:13:34 rule_of_nine is not doing well :P 16:13:36 Unless you meant something about the specific <> patterns 16:13:43 I bet slug beats it 16:14:04 elliott: indeed 16:14:10 it's not advanced enough 16:14:14 Gregor: btw that bug i mentioned could be fixed by changing prog.bufused = prog.bufused - llen - 2 + temp.bufused; into prog.bufused = prog.bufused - end + i - 1 + temp.bufused , i think 16:14:15 and yes, slug does beat it 16:14:38 oerjan: TBH, I'm kinda hoping elliott replaces egojoust outright X-P 16:14:44 I think what rule_of_nine needs is to waste time, preferably by setting large decoys 16:14:48 Gregor: That's what I'm coding right now :P 16:15:19 DINK, /* + */ 16:15:19 DONK, /* - */ 16:15:19 FRTH, /* > */ 16:15:19 BACK, /* < */ 16:15:19 WAIT, /* . */ 16:15:20 LOOP, /* [ */ 16:15:22 POOL, /* ] */ 16:15:24 someone rename FRTH 16:15:29 all my other operations fit into four chars nicely 16:15:44 FORE 16:16:25 I'd prefer "ADVANCE" "RETREAT" modifications, because it's not really > all the time 16:16:30 it can go left if you're the right player etc. 16:16:40 RITE / LEFT 16:16:44 yep, it's best described as "towards enemy flag", "towards own flag" 16:16:58 gregor: stuff 16:17:08 I see. 16:17:40 i assume you're asking about the mess o' [+? 16:17:54 and using such a command while on your own or enemy's flag means that you collide with the flag and die from concussion 16:18:58 elliott: THE ENEMY'S GATE IS RIGHT 16:19:20 * quintopia wonders what this rule_of_nine thing is 16:19:28 not working atm 16:19:44 elliott: ONWD RTRT ? 16:20:00 but the breakdown's indicating that it's at least a promising strategy 16:20:03 oerjan: okay, fine 16:20:58 s/LOOP/LEAP/ , fits better with POOL >:) 16:21:01 elliott: it looks like it just isn't executing slug at all 16:21:04 elliott: also TO and FRO 16:21:24 ais523: probably didn't get the allocation it wanted 16:21:24 quintopia: i'd a thought 4 letters were mandatory here 16:21:28 quintopia: that's not four characters! 16:21:32 yes, MANDATROY 16:21:37 my program will CRASH if they aren't used 16:21:39 CRASH 16:22:02 paris was a mandaTROY 16:22:25 hmm, what does unmatched [ do in egobot? 16:22:26 nop? 16:22:33 or does it end the program if the value isn't 0? 16:22:37 yerp 16:22:38 erm 16:22:39 is 0 16:22:41 it should be parse error IMO 16:22:46 ^ 16:22:57 does it matter what egojoust does? 16:22:57 ais523: yeah, agreed, I was trying to preserve the ] is nop behaviour but _meh_ 16:23:06 TWSE WSNS 16:23:07 quintopia: well i don't want to break the current hill beyond program that do ([)*n 16:23:11 well 16:23:17 I might make ([)*n...(])*n work with a preprocessor 16:23:21 but impomatic's program is gonna have to go :P 16:23:56 it would be unfair to break programs that do ([)*n because egojoust can't do ({})%n properly 16:25:00 alright, lunch over. time to go engage in an act of ritual vampirism for the good of my fellow man! 16:25:22 hmm, what does unmatched [ do in egobot? <-- none of the programs i checked yesterday had that after expansion, anyway 16:25:30 Is there some reason why you can't just do the (slower) text-expansion thing for those ()*n's you can't handle well? 16:26:04 fizzie: Not "can't handle well". 16:26:07 fizzie: According to the spec, they're invalid. 16:26:22 People are abusing undefined behaviour to write invalid programs that can't be run efficiently, and that's not my problem :P 16:26:59 ais523: can I have two simple ()-less BF Joust programs where you know one beats the other on a defined tape length and polarity? 16:27:07 elliott: you should make a converter, that, if it gets an invalid program, converts it into a valid one and resaves it. also you should possibly remove this feature once the current hill has been processed by it :P 16:27:37 quintopia: (1) That would cause rapid expansion for certain types of program's (a single impomatic one); the simple cases I'm planning to preprocess if I can't convince Gregor just to ditch the fuckers. :p 16:27:43 (2) Indeed :P 16:28:02 I'd like to add a tracing feature to lance, anyway, so you can debug your programs. 16:28:07 Methinks some of us might find that useful :P 16:28:09 elliott: the impomatic one doesn't get _that_ large, i actually did that manually yesterday. oh i tried to match up parts though. 16:28:32 oerjan: impomatic has way too many programs on the hill anyway :D 16:28:58 yeah there were only two that would affected if you do simple ()*n ... ()*n matching 16:29:16 (that would save 4 of them) 16:29:22 elliott: [>[-]+] [>[-]-.-.-.-.-.-]; the first loses on normal polarity, the second loses on swapped polarity, the length of the tape doesn't matter 16:29:25 of course the hill may be different today 16:29:36 *be affected 16:29:39 ais523: thank you 16:30:03 * elliott makes the makefile as insane as possible just for the hell of it 16:31:31 # MWAHAHAHAHA 16:31:32 PHONY: all clean 16:31:32 all: lance 16:31:32 lance: lance.c; $(shell grep '* compile:' $< | cut -d' ' -f4-) 16:31:32 clean:; rm -f lance 16:31:33 MWAHAHAHAHA 16:31:40 *.PHONY 16:31:51 alright, lunch over. time to go engage in an act of ritual vampirism for the good of my fellow man! <-- i'd a thought that would fit better _during_ lunch, m'self 16:31:55 * elliott hird 2011 16:31:55 * compile: gcc -std=c99 -O2 -Wall lance.c -o lance 16:31:55 * use: lance p1.bfjoust p2.bfjoust; $? = right wins - right losses 16:31:55 */ 16:31:57 erm 16:32:02 /* lance -- duel bf joust warriors efficiently 16:32:02 * elliott hird 2011 16:32:02 * compile: gcc -std=c99 -O2 -Wall lance.c -o lance 16:32:03 * use: lance p1.bfjoust p2.bfjoust; $? = right wins - right losses 16:32:05 */ 16:32:09 ais523: see wut i did thar 16:32:44 Score for elliott_slug: 2.4 16:32:45 Score for ais523_rule_of_nine: 2.4 16:34:02 wow, it ran 16:34:06 that took a while. 16:34:09 :D 16:34:12 equal scores 16:34:16 ais523: the only kind of cycle timeout is a tie, right? 16:34:19 "{ iterates back to matching ( or pops" When would it ever pop? 16:34:35 elliott: that would probably use, say, at least 500 Mb of memory? 16:34:36 Ohduh, if the iteration count matches. 16:34:37 IGNORE ME 16:34:37 APNIC down 0.09 in last day, 0.35 in last 2 weeks. 16:34:38 Gregor: If the count is 0, presumably. 16:34:43 Gregor: What are you implementing? 16:34:53 elliott: You'll see :P 16:34:57 It does INVOLVE a BFJoust interpreter. 16:35:01 Ilari: it's not going to last long, is it? 16:35:01 Gregor: I MUST KNOW 16:35:08 ais523: the only kind of cycle timeout is a tie, right? 16:35:08 assuming ints for *loops are 4 bytes, if they're 8, then 900 Mb 16:35:10 -!- Behold has joined. 16:35:11 Gregor: An evolver? 16:35:22 oerjan: ints are 32 bit in C 16:35:22 Hah, no. 16:35:23 generally 16:35:24 on linux 16:35:25 More helpful to other people than that. 16:35:30 Gregor: A debugger? 16:35:35 Ding 16:35:36 IGNORE ME <-- O KAY 16:35:38 Gregor: Because the debugger/tracer is part of lance :| 16:35:44 I'd like to add a tracing feature to lance, anyway, so you can debug your programs. 16:35:44 Methinks some of us might find that useful :P 16:35:49 elliott: Mine will be nicer :P 16:36:01 This allocation rate is actually bit slowish compared to one shown in first half of December and on January. 16:36:02 Gregor: Mine was going to have an optional ncurses animation of the tape activity. 16:36:05 Gregor: NICER THAN THAT, BITCH? 16:36:12 Substantially. 16:36:15 Gregor: What, then 16:36:24 Mine is browser-based :P 16:36:24 Mine was going to let you change programs as they run! 16:36:30 Uhh, that I won't do. 16:36:41 Gregor: You have a really weird definition of "nicer" that involves using a browser. 16:36:47 Gregor: If the count is 0, presumably. <-- depends which side he lets count up and which counts down (they need to be opposite) 16:36:58 Gregor: Is it because of your JavaScript-induced brain damage? >:) 16:37:16 *sigh*, the poor unindoctrinated. 16:37:27 Hey ais523 16:37:40 You can either use a line-based BF Joust debugger with live tape display and program editing capabilities 16:37:44 Or a browser-based debugger with none of that 16:37:46 Which do you use 16:37:55 Also the former is far faster for obvious reasons (i.e. C vs. JS) 16:38:36 Mine is browser-based :P <-- i sense some escalation here 16:38:47 -!- BeholdMyGlory has quit (Ping timeout: 255 seconds). 16:38:47 2.89 (primary blocks minus 1 reserved) + 1.58 (ERX) is 4.47 blocks. That would last about 24 weeks (about 5 and half months) at 0.35 blocks per 2 weeks. 16:40:20 Gregor: also if you want my proposed (({{}})%)% extension then ( and { as well as } and ) match in a somewhat parenthesis-like fashion 16:40:32 Yeah, I got that. 16:40:42 $ ./lance '[>[-]+]' '[>[-]-.-.-.-.-.-]'; echo $? 16:40:43 0 16:40:45 ais523: It was a... draw. 16:42:59 ais523: Any explanation? :-P 16:43:04 elliott: that was correct iirc 16:43:12 Neither can kill a flag 16:43:13 ais523 said that the former loses 16:43:18 is he a liar? 16:43:25 one loses all with one polarity, the other with the other polarity 16:43:38 oerjan: no this does only one match 16:43:43 return duel(program1, program2, SIEVE, 10); 16:43:43 } 16:43:44 O KAY 16:45:08 "Right warrior failed to parse, left warrior wins!" 16:45:11 looks like sloth didn't parse :D 16:45:20 erms 16:45:21 *erm 16:45:21 slug 16:45:24 but sloth would have been a better name 16:49:09 * oerjan notes )* is equivalent to {})% 16:51:21 -!- impomatic has joined. 16:52:05 ais523: got another set of programs? :P 16:52:23 there are plenty on the hill! 16:52:34 ais523: they all use () 16:52:36 ok this is totally bugged 16:52:38 elliott: thumbs up on the trace. if it does not flood the screen because it uses curses even better 16:52:41 $ ./lance '[>[-]+]' '.'; echo $? 16:52:41 0 16:52:42 $ ./lance '.' '[>[-]+]'; echo $? 16:52:42 0 16:52:51 quintopia: well your commands will flood the screen (it'll be part of the debugger) 16:53:01 quintopia: but you could run it in "animation mode" so to speak 16:53:04 where the tape would look like 16:53:25 123 0 94 0 ... 123 0 94 0 16:53:32 with the current cell of the warrior highlighted 16:53:39 and if they entered the ... region it'd scroll that part 16:53:43 this comes after it replaces egojoust ofc :P 16:56:01 Changes to BF Joust? 16:56:44 impomatic: no, they're planning a new interp 16:56:49 that can handle ({}) efficiently 16:56:54 but keeping the rules the same 16:57:06 Ah good :-) 16:57:30 impomatic: it is likely at least two of your warriors will need conversion and resubmission 16:58:00 because you use mismatching ()*n not in the ()*n...()*n format 16:58:44 impomatic: what oerjan said 16:58:57 also, ([)*nfoo(])*n is Officially Deprecated; I'll probably preprocess it to work, but you should use ({})% from now on 16:59:06 but then, the spec has said this all along 16:59:15 elliott: preprocess it into ([{foo}])%n 16:59:22 ais523: yes, that's what i mean 17:00:02 ais523: (A[)*NB(]C)*N -> (A[{B}]C)%n... as for (A[B)*NC(D]E)*N, not sure how to conevrt that 17:00:09 *convert 17:00:36 elliott: um the latter is completely similar 17:00:52 er, right, of course 17:01:17 (A[B)*nC(D]E)*n -> (A[B{C}D]E)%n 17:01:21 beyond that i'm not going to bother converting 17:03:06 but i want to fix this bug first :D 17:09:04 !bfjoust sexyghoul >(-)*9>(+)*9(>---)*6(>([+{[(-)*7([-{[(-)*122[-]]}])%5]}])%6)*21[-] 17:09:12 Ugly legal version 17:09:38 impomatic: Write a preprocessor :-P 17:09:48 Score for impomatic_sexyghoul: 32.9 17:09:53 impomatic: um you shouldn't resubmit _yet_, egojoust has big _trouble_ with ()% 17:10:00 oh it worked this time 17:10:22 but yeah what oerjan said 17:10:35 quintopia: has been complaining about not being able to use %n for n >~ 20. well you didn't, actually. 17:10:44 *quintopia 17:10:47 Does Egojoust only have trouble with ()% if it expands too large? 17:11:08 impomatic: there's at least one definite bug in the code, it miscalculates the resulting program size 17:11:48 (see my lambdabot messages to Gregor earlier) 17:13:01 i think this may cause stray characters to be interpreted after the end of the program. 17:13:30 could be heisenbuggy :/ 17:13:52 (note: this is all theoretical) 17:14:04 (except for the fact quintopia _had_ trouble) 17:19:36 hm so it actually does timeout 17:19:58 elliott: what times out? 17:20:04 the match i'm testing 17:20:17 $ ./lance '[>[-]+]' '.' | head -c 10; echo 17:20:17 0 0 0 0 0 17:20:19 well that's not right 17:20:29 hmm so it's not parsing the programs 17:20:42 how strange 17:21:38 while (*p++) 17:21:38 if (i >= MAXPROG) { 17:21:38 fprintf(stderr, "Oi -- your program is too long.\n"); 17:21:38 exit(1); 17:21:38 } 17:21:39 switch (*p) { 17:21:41 SPOTTE BUG 17:22:58 $ ./lance '[>[-]+]' '.'; echo $? 17:22:58 Oi -- your program has an unmatched [, and it's all your fault. 17:22:59 1 17:23:00 no it doesn't! 17:23:49 elliott: bug: switch (*p) after you already incremented p 17:24:00 oerjan: yes, but wrong 17:24:05 oerjan: bug was that while block had no {}s :D 17:24:18 ah 17:24:25 thx for that btw :P 17:24:35 elliott@elliott-MacBookAir:~/Code/lance$ ./lance '[>[-]+]' '.'; echo $? 17:24:35 1 17:24:35 elliott@elliott-MacBookAir:~/Code/lance$ ./lance '.' '[>[-]+]'; echo $? 17:24:35 1 17:24:36 -!- quintopia has quit (Ping timeout: 240 seconds). 17:24:37 "er." 17:25:23 -!- nescience has quit (Quit: -a-). 17:25:26 hey Gregor 17:25:31 what does egojoust return if right wins all 17:25:37 surely not a negative 17:25:45 -!- BeholdMyGlory has joined. 17:26:38 elliott: return rwins - lwins; 17:26:43 from main 17:26:47 oerjan: right 17:26:49 oerjan: so what if rwins=0a 17:26:51 *0 17:26:52 and lwins=big 17:26:55 it'll return a large unsigned value 17:27:00 yet, this bug doesn't manifest on the hill 17:27:01 so... 17:27:05 you'd think 17:27:49 [["Kilroy Was Here" is a school play available from Pioneer Drama Services, written by Bill Francoeur and Tim Kelly. Kilroy is a comedy and the setting is a U.S.O. Club ("The Serviceman's 'Home Away From Home'") in Brooklyn in 1942. Ships leaving the nearby Navy yard are being sunk by enemy U-boats. Allied intelligence suspects the club is unknowingly harboring Axis spies. Enter Private Joe Kilroy, a young soldier who draws a curious cartoon face 17:27:49 everywhere he goes (and is this causing trouble!). He's the only one who knows where the next Allied convoy will converge. The enemy agents are stopping at nothing to learn his secret. The action builds to an exciting finale during a wild radio broadcast. The score includes such hits as "Don't Say No To The U.S.O.," "Slap That Jukebox," "Jitterbug Saturday Night," and "Rat-a-tat-tat That Rivet," with classic Andrews Sisters style harmony.]] --Wi 17:27:50 kipedia 17:27:53 *Wikipedia 17:28:00 elliott: report.c does st = WEXITSTATUS(st); 17:28:03 I would remove it but I'm too busy WTFing. 17:28:11 -!- jix_ has joined. 17:28:16 st is an int 17:28:23 oerjan: hmm 17:28:26 i don't see how that can work then 17:28:27 Gregor! 17:28:47 oerjan: I have a feeling that it might be calculated such that you always end up with 0 if it loses more than it wins 17:29:37 Is this one of those times where you've found it already, or not? 17:29:39 elliott: oh hm i vaguely recall that being said 17:29:40 -!- Behold has quit (Ping timeout: 255 seconds). 17:29:41 -!- SimonRC has quit (Ping timeout: 265 seconds). 17:29:41 I guess you found it or you'd be staring at the channel waiting for an answer 17:29:41 -!- jix has quit (Ping timeout: 255 seconds). 17:29:42 -!- SimonRC has joined. 17:29:44 -!- BeholdMyGlory has quit (Changing host). 17:29:44 -!- BeholdMyGlory has joined. 17:29:54 Deewiant: Wow, you're lagged. 17:29:55 -!- nescience has joined. 17:30:06 Deewiant: Or I am. 17:30:09 elliott: Yes, clearly 17:30:11 I was 17:30:25 I got what I suspect is 8 minutes' worth in the span of 6 seconds 17:30:55 Guess the server hasn't completely recovered from its issues a few hours back 17:31:00 And I guess I'm lagging again 17:31:07 Deewiant: Hi 17:31:11 Deewiant: Not 8 minutes I suspect 17:31:20 Deewiant: Unless you got a LOT before that while 17:31:28 Well, I got your "SPOTTE BUG" at 19:43 17:31:40 And then I got your "$ ./lance" at 19:51 17:31:55 Along with your "Wow, you're lagged" 17:32:34 elliott: 17:32:35 st = WEXITSTATUS(st); 17:32:41 er 17:32:43 -!- Behold has joined. 17:32:43 oerjan: erm yes i saw that 17:32:46 i mean 17:32:49 130 if (p1 < p2) { 17:32:49 131 win = scores[p1*programCount + p2] * -1; 17:32:49 132 } else { 17:32:49 133 win = scores[p2*programCount + p1]; 17:32:51 134 } 17:33:12 from report.c 17:33:17 wait what. 17:33:23 elliott: Anyway, while braces, *p++ and then *p, and using i instead of something like p - begin (if you have both a running index and a running pointer... dude.) 17:33:38 Deewiant: ...yeah, why do I have i and p :-D 17:35:16 elliott: anyway is there anything wrong with passing an int through an exit code, as long as it's cast back at the end... 17:35:36 Deewiant: *actually* I need i 17:35:39 Deewiant: because of comments 17:35:42 that get stripped from the result 17:35:45 i refers to the position in the /result/ 17:35:48 SO HA 17:35:56 -!- BeholdMyGlory has quit (Ping timeout: 240 seconds). 17:36:05 oerjan: well signals do (255 - something)... 17:36:11 just sits wrongly with me :D 17:36:21 heh 17:36:47 i guess a signed char would have been less disturbing 17:37:06 -!- Wamanuz2 has joined. 17:38:38 -!- Deewiant has quit (Ping timeout: 240 seconds). 17:41:14 -!- Wamanuz has quit (Ping timeout: 276 seconds). 17:41:47 elliott: hm posix man page for exit shows that only last 8 bits are supposed to be transferred 17:42:06 * elliott just prints out the return for now :P 17:42:37 elliott@elliott-MacBookAir:~/Code/lance$ ./lance '.' '[>[-]+]' 17:42:37 ..........................................42 17:42:37 elliott@elliott-MacBookAir:~/Code/lance$ ./lance '[>[-]+]' '.' 17:42:37 ..........................................42 17:42:39 wtf... 17:42:59 *oh* 17:43:09 erm nope 17:45:50 -!- quintopia has joined. 17:45:50 -!- quintopia has quit (Changing host). 17:45:50 -!- quintopia has joined. 17:48:56 !c (-1000) >> 8 17:49:14 !echo hi 17:49:21 hi 17:49:24 *sigh* 17:49:25 you need printf 17:49:28 oh 17:49:31 !c printf("%d\n", -1000 >> 8); 17:49:32 -4 17:49:35 also this isn't haskell, - is parsed correctly 17:49:37 :) 17:49:48 WHATEVER 17:50:01 i was just looking at #define __WEXITSTATUS(status) (((status) & 0xff00) >> 8) 17:50:36 so if status is signed and 32 bits, this should all give a signed result right 17:51:04 * oerjan doesn't really have a clue here 17:51:33 !c printf("%d\n", -1000 & 0xff00) >> 8) 17:51:34 Does not compile. 17:51:38 !c printf("%d\n", -1000 & 0xff00) >> 8); 17:51:40 Does not compile. 17:51:51 !c printf("%d\n", (-1000 & 0xff00) >> 8)); 17:51:52 Does not compile. 17:51:57 NOW WHAT 17:52:19 !c printf("%d\n", ((-1000) & 0xff00) >> 8)); 17:52:23 Does not compile. 17:52:36 !c printf("%d\n", ((-1000) & 0xff00) >> 8); 17:52:40 252 17:52:50 apparently not, hm 17:53:10 !c printf("%d\n", ((int)(-1000) & 0xff00) >> 8); 17:53:12 252 17:54:11 oh wait... 17:54:22 the result is put into char later 17:54:32 char *scores; 17:54:49 and putc(st, cacheF); 17:55:31 so as long as char is signed, report.c works. 17:55:54 * oerjan recalls this is not guaranteed 17:56:30 it is on linux. 17:56:35 yeah 17:56:39 hey Gregor can i rewrite half of report.c, sounds like it sucks :D 17:56:45 XD 17:57:07 oerjan: ah but note! 17:57:11 I thought I checked signdedness somewhere ... 17:57:16 oerjan: when you do "return -1;" that gets turned into 255 17:57:28 oerjan: before any other process gets it 17:57:32 oerjan: what does that do to your logic? :D 17:57:37 oerjan: note that st doesn't contain the status 17:57:45 it contains the status somewhere, but its format is essentially ill-defined 17:57:53 -!- Deewiant has joined. 17:57:53 tl;dr report.c works out of utter chance. 17:58:06 I'm not convinced it _does_ work :P 17:58:18 elliott: um it does after the st = WEXITSTATUS(st); surely? 17:58:27 oerjan: oh yes 17:58:40 Lesson learned: if your Internet connection dies, the solution is not to SSH into your firewall and ifdown its LAN interface 17:58:45 but it probably just ends up as 255. but then if you put it into signed char, right, it will work 17:58:56 Deewiant: You've totally ruined my image of you as infallible, dude. 17:59:14 apparently the programs . and [-] draw, whodathunkit? 17:59:51 The reasoning was that I wanted access to my cable modem, but I didn't quite realize that I was killing my SSH connection in the process 18:00:50 Gregor: just put signed in front of char *scores; i think. 18:01:17 oerjan: well... 18:01:24 I'd just let me rewrite report.c personally :-P 18:01:30 O KAY 18:03:34 elliott: hm it's not an automatic loss for a program to end, is it? at least . drawing would seem to imply that 18:03:48 oerjan: well it should not be. but it may be. 18:04:04 nope, it isn't 18:04:21 [-] on your own flag loses, right? 18:04:28 erm 18:04:35 or wait well duh 18:04:47 elliott: OK I DON'T BELIEVE YOU 18:04:59 $ ./lance '[-]' '>' 18:04:59 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 18:05:01 at least that works 18:05:09 ...wait what 18:05:17 XD 18:05:40 int ptrs[2] = {0,0}; 18:05:41 spot the bug oerjan 18:05:42 spot the bug 18:06:01 um are those the starting positions 18:06:11 yes :D 18:06:12 and you put the warriors in the same spot? 18:06:17 yes 18:06:22 $ ./lance '<' '.'; echo 18:06:23 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 18:06:23 $ ./lance '.' '<'; echo 18:06:23 O KAY 18:06:24 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 18:06:25 at least that works 18:06:29 but [-] doesn't seem to suicide :D 18:06:56 for (int i=0; i<2; i++) 18:06:56 if (tape[i?tapesz-1:0] == 0) deathcount[i]++; 18:06:56 else deathcount[i] = 0; 18:06:56 if (deathcount[0] >= 2 && deathcount[1] >= 2) return 0; 18:06:56 else if (deathcount[0] >= 2) return 1; 18:06:56 else if (deathcount[1] >= 2) return -1; 18:06:58 that should _work_ :( 18:07:13 -> 18:08:16 oerjan: HEY COME BACK HERE 18:14:18 <- 18:14:31 O KAY 18:14:45 all this gives me the idea of "mexican BFJoust" 18:15:20 ais523: http://gcc.gnu.org/onlinedocs/gcc-3.4.1/gcc/Lvalues.html#Lvalues 18:15:21 ais523: insanity 18:15:24 oerjan: wat 18:15:52 three warriors, on a circular tape, equidistant, all with > clockwise, say 18:16:31 oerjan: i approve 18:16:44 oerjan: wait but a circular tape is just a wrapping tape 18:16:48 so the second warrior would be in the middle, say 18:16:52 no wait 18:16:54 no wait yes 18:17:32 if the tape has 3n cells, then it wraps, with warriors at positions 0, n, 2n say 18:18:08 !bfjoust rule_of_nine (>)*15(+<)*14(>)*14(-[(>)*8((-)*64(-.)*128>)*21]+<)*14(>)*20([(-)*2[+]]>)*8(+.++.)*10000 18:18:46 umm, why did I make that leave a trail? obviously that I wasn't thinking 18:21:03 Score for ais523_rule_of_nine: 0.8 18:22:35 !bfjoust rule_of_nine (+>)*9[(-[(>)*8((-)*64(-.)*128>)*21]<)*19(>)*9](+>)*9[(-[(>)*8((-)*64(-.)*128>)*21]<)*19(>)*9](>)*8[--[+]]>[--[.+]](+.++.)*10000 18:22:50 elliott: i see nothing wrong with your above paste 18:23:08 Score for ais523_rule_of_nine: 0.0 18:33:45 -!- Wamanuz2 has quit (Remote host closed the connection). 18:35:34 -!- Wamanuz has joined. 18:35:45 I'm testing rule_of_nine locally now, it's getting better... 18:38:19 !bfjoust rule_of_nine (>+)*9(-[(>)*9((-)*64(-.)*128>)*21]+<)*9(>)*9(>+)*9([(-[(>)*9((-)*64(-.)*128>)*21]+<)*18(>)*18)*1000([+.++][+.++]>)*10(+.++.)*100000 18:38:30 that still isn't very good, but it should do a lot better than 0 18:38:57 ais523: *100000 is changed to *10000 18:39:06 Score for ais523_rule_of_nine: 5.0 18:39:32 oh, I just meant "until the end of the program" 18:39:32 not that it's likely to matter... 18:41:55 !bfjoust speedy1 >>>>>>>>(>-[+[+[---]]])*21 18:42:11 umm, there's an obvious fix to /that/ one 18:42:55 Score for ais523_speedy1: 28.1 18:42:57 -!- asiekierka_ has quit (Ping timeout: 276 seconds). 18:43:32 !bfjoust speedy1 >>>>>>>>(>[-[++[---]]])*21 18:43:55 Score for ais523_speedy1: 31.0 18:44:18 let's add a few decoys and see what happens 18:44:32 !bfjoust speedy1 >++>-->++>-->>>>(+>[-[++[---]]])*21 18:44:45 Score for ais523_speedy1: 29.2 18:44:46 really, I should change the number now 18:44:55 !bfjoust speedy1 < 18:45:10 !bfjoust speedy2 >>>>>>>>(>[-[++[---]]])*21 18:45:14 Score for ais523_speedy1: 0.0 18:45:33 Score for ais523_speedy2: 31.1 18:45:43 Hmmm, my quick (not yet complete) debugger is working, but it's quite slow :P 18:45:49 Even for "I hacked this up quickly in JavaScript" 18:45:54 haha at it being higher up than defend7 18:46:07 how the mighty have fallen 18:46:42 Well, actually it's only slow when it has to run all 100K iterations. 18:46:52 Which usually only happens with defend v defend. 18:46:56 -!- MigoMipo has quit (Remote host closed the connection). 18:47:31 -!- MigoMipo has joined. 18:51:07 -!- Tritonio has joined. 18:54:30 -!- hagb4rd has quit (Ping timeout: 240 seconds). 18:55:19 ais523, elliott (haha you don't care), whoever: http://codu.org/eso/bfjoust/egojsout/egojsout.html // Stick a program in each box, click "Run", then click on the result of a particular run to see the step-by-step breakdown. If it takes all 100K iterations, you'll be waiting a while :P 18:55:44 Gregor: I've been doing that locally already, but it might be useful for if I'm not at my computer 18:55:53 ais523: This is prettier :P 18:57:32 it seems to draw one element beyond the flags on each side, is that deliberate? 18:57:47 oh, loss count? 18:58:06 Loss count, yeah 18:58:28 Gregor: It sucks because it's browser-based any questions! 18:58:39 !bfjoust vibration2 >>+<-<(-)*128(+-)*10000(+-)*10000(+-)*10000(+-)*10000(+-)*10000 18:59:36 Score for ais523_vibration2: 14.4 18:59:45 -!- elliott has quit (Remote host closed the connection). 19:01:39 -!- elliott has joined. 19:02:09 Gregor: Mind if I call my rewritten report.c lancealot? 19:02:14 Because, you see, it runs lance a lot. 19:02:33 I don't care what you call your report.c since I'll be using my own. 19:02:53 !bfjoust vibration2 >>+++<---<(-)*128(+-)*10000(+-)*10000(+-)*10000(+-)*10000(+-)*9939(-)*100 19:03:50 Score for ais523_vibration2: 12.0 19:04:02 Watching defend14 is a thing of beauty X-D 19:04:03 Gregor: But its return code mechanism is insane. 19:04:15 Gregor: what should I watch it against? 19:04:23 elliott: note that -1 isn't a valid UNIX return code 19:04:34 ais523: Yay, so report.c is even more broken. 19:04:35 ais523: Idonno, I was watching it against wireless_frowny 19:05:00 Gregor: Srsly, I'm not going to make lance to blatantly invalid things just because report.c does crazy stuff. What's wrong with changing it 19:05:02 Oh, I'm sorry that it doesn't run on the purely-hypothetical OS that doesn't exist and it isn't running on. 19:05:28 I don't see why you're so adamant to keep using the exact same code 19:05:38 You misunderstand. 19:05:41 I'm adamant about bothering you. 19:06:12 Enjoy laggy EgoJoust then :-P 19:06:27 s/laggy/laggy and broken on % 19:06:32 s/%$/%\// 19:06:41 Yeah, fixing report is TOTALLY going to make it faster X-P 19:07:04 Gregor: No, but I'm not going to mess with lance to make it do invalid things and multiply by two arbitrarily just so that report.c doesn't have to change :P 19:07:13 I don't care if you rewrite report, but I'd like to see SOMETHING actually come out of this and if you go "this all sucks because it's not PERFECTION ON A SANDWICH so I'm rewriting it" then instead I'll get nothing. 19:07:42 By rewrite I probably just mean tweak 19:08:18 Gregor: And hey, it'll stop the reports clashing with each other, so quit yer yappin' :P 19:08:20 (The breakdowns) 19:08:46 MAN, all this debugger is accomplishing is making me realize how wildly outclassed I am >_< 19:09:44 Oh yeah? Well LANCE'S debugger uses STRONG AI to make COMMENTARY on the match and SUGGESTS improvements to your program! 19:09:49 does the debugger have drop down menus to select programs from the hill? 19:10:20 Oh for fucks sake X_X 19:10:27 Gregor: Mine was joke btw 19:10:33 elliott: Yeah, I got that :P 19:10:41 JUST CHECKIN' 19:11:00 You could do a dropdown client-side by AJAXXXXXXXin' to in_egobot/ :-P 19:12:13 Dammit Emacs, why you forget my font settings 19:12:23 elliott: That's what I'm doing :P 19:12:23 (More or less) 19:12:43 Gregor: This is like the one situation where PHP would be appropriate :P 19:12:53 I am using PHP on the server :P 19:12:56 Hence the "more or less" part. 19:13:12 Gregor: Why not just send all programs down in a JS object at page load then 19:13:14 NO AJAX AT ALL 19:13:18 Unless you thought I meant JS by AJAX. 19:13:27 I'm not a horrible excuse for a human being so I don't say AJAX to mean JS. 19:13:32 PHP is generating the original use. 19:13:34 Err 19:13:35 Gregor: i only ask because copypasta is difficult on my phone :P 19:13:36 *original list 19:13:46 quintopia: Yeahyeah, I'm doin' it :P 19:14:25 Gah, Emacs, give me the right font size 19:14:41 I want to size it in PIXELS because you're DUMB 19:15:04 HA HA, VIM 19:15:16 (set-default-font "Monospace-10.5") 19:15:16 Wooooo 19:16:53 lance: lance.c; $(shell grep '* compile:' $< | cut -d' ' -f4-) 19:16:53 I still think this is the best Makefile rule ever written. 19:17:50 Sweet, programs still aren't being stored ... somehow ... 19:18:07 Wait *what*... 19:18:47 Looks like my programs are... circular... 19:18:57 ...which is cool mind, but not what I was going for. 19:19:52 Oh DUR 19:20:55 -!- Tritonio_GR has joined. 19:20:59 -!- Tritonio has quit (Ping timeout: 240 seconds). 19:24:13 $ ./lance '.' '' 19:24:13 .......................................... 19:24:13 Right wins (0) 19:24:18 X-D 19:24:22 Oops in output code. 19:24:59 Gregor: How long does it take egojoust to pit [] against [] with all polarities/tape sizes? Not bragging, just really want a point of comparison :-P 19:25:07 0.074s for lance. 19:25:28 I have no friggin' clue, don't care to check, and would be running it on a VM making the comparison meaningless. 19:25:45 I'll just assume lance is better then :-P 19:25:54 Hmm, it does think that [] beats [>[-]+] though. 19:26:01 That doesn't seem...quite...right. 19:26:55 And polarity isn't working quite right. 19:26:59 Have the Borg met the Changelings? 19:27:23 ais523: ping 19:27:28 wait why did i ping 19:27:30 elliott: pong 19:27:39 ais523: the polarities are ++ and +- right? 19:27:43 yes 19:27:53 ais523: so this is entirely understandable, 19:27:59 elliott@elliott-MacBookAir:~/Code/lance$ ./lance '[>[-]+]' '[>[-]+]' 19:27:59 .......................................... 19:27:59 Right wins (32) 19:27:59 elliott@elliott-MacBookAir:~/Code/lance$ ./lance '[>[+]-]' '[>[-]+]' 19:27:59 .......................................... 19:28:00 Left wins (-42) 19:28:01 well 19:28:03 ok 19:28:07 There, egojsout now gets the hill from the server. 19:28:07 the first isn't understandable 19:28:08 -!- Tritonio_GR has quit (Read error: Connection reset by peer). 19:28:09 because it should be a draw 19:28:11 but the latter has got me confused :P 19:28:23 why is it getting wins wrong... 19:28:28 they should both be draws 19:28:41 -!- Tritonio_GR has joined. 19:28:47 indeed 19:29:28 $ ./lance '[>[-]+]' '[>[-]+]' 19:29:29 >>>>>>>>>>>>>>>>>>>>>>X>X>X>X>X>X>X>X>X>X> 19:29:29 Right wins (32) 19:29:30 >_< 19:30:48 $ ./lance '<' '<' 19:30:48 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 19:30:48 Right wins (42) 19:30:49 Aha. 19:30:50 BIAS! 19:32:08 gregor: is bfjsout supposed to do anything but display the breakdowns? 19:32:27 i'm not seeing it step through in realtime >_> 19:32:36 quintopia: Click on an element of the breakdown. 19:32:43 oh 19:33:04 You can't step through real-time for 42 runs (well, I could, but it'd be dumb) 19:33:18 $ ./lance '[>[+]-]' '' 19:33:18 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 19:33:18 Nobody wins (0) 19:33:18 *eyebrow* 19:34:28 Gregor: Heh, I like the hex tape display, might steal that >_> 19:35:18 Gregor: May I humbly suggest replacing the X with an =, so that it's clearly distinct from the number 19:35:24 That vaguely makes sense in context of the comparison operators :P 19:35:28 And because the cell is "tied" 19:35:44 elliott: I wasn't thinking comparison operators, I was thinking arrows :P 19:35:48 But I suppose that would be more distinct. 19:35:55 It's a pun, it doesn't have to make sense :P 19:36:07 -!- nescience has quit (Read error: Connection reset by peer). 19:38:23 My bug was fixed by... recompiling? 19:38:34 $ ./lance '[>[-]+]' '[>[+]-]' 19:38:34 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 19:38:35 Right wins (42) 19:38:37 Or not 19:39:45 You're always checking the prevalue, right? 19:39:53 Not letting one commit then checking the other? 19:40:02 Gregor: In loops? Yeha. 19:40:03 *Yeah. 19:40:20 for (int cycles=0; cycles /* in case the first warrior changes the cell */ 19:40:20 int saves[2] = {tape[ptrs[0]], tape[ptrs[1]]}; 19:40:23 And I condition on saves[prog]. 19:40:26 Tasted like that family of bug, in this case Idonno :P 19:40:45 I think it's a polarity issue or SUMMAT 19:41:20 ais523: It's not sufficient when battling {p1,p2} to just do {+p1,+p2}, {+p1,-p2} is it? 19:41:28 I think you might have to do {-p1,+p2} as well 19:44:52 ais523: No, that's not right... 19:46:30 -!- tswett_ has quit (Remote host closed the connection). 19:47:05 -!- yiyus has quit (Read error: Operation timed out). 19:47:38 Gregor: The egojsout trace of [>[+]-] vs. [>[-]+] makes no sense to me (first breakdown). 19:47:49 elliott: +- is identical to -+. check any breakdown.txt 19:47:49 They stop in the middle and start doing freaky shit for no apparent reason after spending two cycles doing nothing. 19:47:55 quintopia: indeed 19:48:11 Oh wait. 19:48:14 They cross over or something. 19:48:19 Nope, still makes no sense. 19:49:45 Gregor: Does the bottom program appear on the left? x_x 19:50:03 BTW, the trace is totally fucked-up for a program like < :P 19:50:39 WEIRD 19:50:44 quintopia: ? 19:51:10 [[[[ does not actually work as a reverse tripwire avoider in all cases, but it does improve my score O_O 19:51:17 i have no idea what it is doing for me 19:53:51 elliott: you only need two, {+p1,+p2} and {+p1,-p2} 19:53:58 ais523: indeed 19:54:04 my trace is totally effed up right now, trying to figure out the problem 19:54:04 quintopia: I'm surprised it works at all, although it does 19:54:15 it basically has to hit the first tripwire while it's 0, then it works 19:54:23 *reverse tripwire 19:55:54 so it works just often enough to help? 19:56:12 i pretty much kill defend13 and defend14 on every game even without it though 19:56:19 no, because you generally beat defend13/defend14 even if you trip the tripwire 19:56:20 so i think it's helping somewhere else 19:56:43 I think it might help vs. defend13/14 not by doding the tripwire, but by causing it to misdetect your strategy 19:57:13 hmm 19:57:45 i don't think so. i think the [.+] wins regardless of what they think my strategy is 19:58:32 incorrect, as seen by the fact that defend14 beats wireless_frownie on a max-length tape 19:59:00 not since i removed that special case :P 19:59:12 it actually has a counter-three-cycle-clear in there somewhere, but doesn't trigger it very often 19:59:26 basically, three cycle clear can be countered, but only if you know the opponent's using it 19:59:33 the special case did a 2-cycle clear, which is why defend won in that case 19:59:37 aha 19:59:55 I should try to find a defend7/10 variant that also deals with three-cycle clears via pure maths 20:00:02 but it's kind-of tricky as 3 doesn't divide into 256 20:00:03 i was thinking of doing that 20:00:16 (defend10 can deal with /four/-cycle clears without issues) 20:00:20 basically, you just have to simulate the thing on all polarities simultaneously 20:00:34 and adjust every place it COULD go to zero by as much as possible 20:00:54 the resulting code would be ugly as shit tho 20:01:00 that wouldn't work, due to not knowing the size of the enemy's offset clear 20:01:05 but, imo, all defend code is already :P 20:01:17 could you detect it? 20:01:24 not easily at all 20:01:51 if you knew the first time the enemy would set your flag to 0 outside an offset, it would be easy 20:01:53 there's gotta be some kind of alternating bump that works for both 2 and 3 cycles though 20:01:57 but I can't think of any way to detect that at all 20:02:13 note that defend7/10 don't work via bumping at all 20:02:25 what do they do? 20:02:30 it's more reliable to drive the opposing program backwards, so that the flag doesn't hit 0 at all 20:02:39 that way, they can't detect the 0 and change tactics 20:02:46 7 and 10 both do that on one polarity 20:02:51 oh 20:02:59 that's still kind of like bumping 20:03:03 a bit 20:03:08 but it's over a wide range of cycles 20:03:16 the timings are chosen so that they accelerate a push in the other direction 20:03:28 thus causing the opponent to go over the same sequence each time 20:03:39 a sequence that misses zero 20:03:44 quintopia: plz stop submitting programs in /msg 20:03:48 that does go past 0, potentially, but not for more than a frame 20:03:49 it just means we have to look at in_egobot all the time 20:03:54 and also, don't see when our programs get knocked off etc. 20:03:55 please spam the channel 20:03:59 ais523: oh please 20:04:06 it's not like we talk much anyway :P 20:04:08 well I do. 20:04:14 ^ 20:04:15 I was just thinking it was opposite to your normal point of view 20:04:25 ais523: but yes, it is nice to watch people improve their bots. and also useful for the _rest_ of us players. 20:04:29 it's just courtesy 20:04:40 elliott: i'll copy the versions i end up leaving to here if that makes you happy 20:04:55 elliott: well, I test mine locally, often, before posting them in-channel 20:05:00 quintopia: I'd rather just see them all, after all, failed strategies often get copied by others and improved upon 20:05:03 but i'm not going to spam with all the little tests and tweaks 20:05:46 everyone else does it :) 20:05:52 so it's not as if you're creating spam out of nowhere 20:05:53 besides, you don't have any competitors on the hill...why are you the advocate? 20:06:37 is that relevant? 20:06:38 and i used to :) 20:06:39 quintopia: elliott isn't on the hill because he isn't very good at BF Joust, rather than because he hasn't tried 20:06:47 ais523: hey, I had some programs that were pretty high up first time around 20:06:53 ais523: how reliably can you detect polarity of consistent programs? 20:06:53 -!- yiyus has joined. 20:06:55 indeed 20:07:08 ais523: I firmly believe I could do well at the current hill, if I spent time studying the existing programs; I just haven't yet 20:07:10 quintopia: not completely reliably; I'd say around 50% 20:07:24 well, better than that 20:07:26 I'm very tempted to write exact_opposite_of_defend13 that specifically counters everything it does 20:07:29 I mean 50% better than guessing 20:07:58 aka, 75% :P 20:09:38 part of the issue is that detectors can be tricked quite easily 20:09:51 sometimes into going into an infinite loop rather than detecting either way 20:09:53 i'm pretty sure there is no way to prevent both 2 and 3 cycle decrementers from hitting zero at *some* point, but i suspect you could create a sequence that bumps both of them indefinitely (with the caveat that one of them could detect it) 20:10:45 namely, you'd let the 2-cycle one be able to detect it 20:10:52 AFAICT movement is broken... 20:10:55 and stave of the 3 indefinitely 20:10:56 that seems a little dangerous 20:11:16 the opposite is even more dangerous 20:11:40 you can't avoid 0 indefinitely without either a) getting lucky with exact timings (i.e. making both programs do + to go from -1 to +1), or b) knowing both the cycle sequence and polarity of the opponent 20:11:57 L80 00 00 00 00 00 00 00 00 R80 20:11:58 L80 00 00 00 00 00 00 00 00 R80 20:11:58 L7F 00 00 00 00 00 00 00 00 R7F 20:11:58 L7F 00 00 00 00 00 00 00 00 R7F 20:11:58 L7E 00 00 00 00 00 00 00 00 R80 20:11:58 L7E 00 00 00 00 00 00 00 00 R80 20:12:00 7E L00 00 00 00 00 00 00 00 R7F 20:12:02 7E LFF 00 00 00 00 00 00 00 R7F 20:12:06 7E LFF 00 00 00 00 00 00 00 R80 20:12:08 7E LFE 00 00 00 00 00 00 00 R80 20:12:10 yeah, that right program is _not_ [>[+]-] 20:12:20 odds on the first being possible? 20:12:24 -!- zzo38 has joined. 20:12:41 seems like it is heavily dependent on offset sizes 20:12:46 i'm gonna say it's not 20:13:09 I think it's not too 20:13:20 the thing it depends on is impossible to detect 20:13:50 wat 20:13:56 pretty much the only thing you could do would be to set up three or four decoys at 128 and count the number of cycles between them being zeroed 20:14:01 elliott: is that bfjsout's trace? 20:14:04 no 20:14:06 lance's 20:14:07 oh good 20:14:13 why? 20:14:15 and then assume the opponent will be consistent in the timing to the next one 20:14:17 but there isn't time to do that 20:14:41 [>[+]-] spends five ticks on a normal zeroed cell, right? 20:14:43 err 20:14:45 [>[-]+] 20:14:47 that is 20:14:50 well, there could be... you'd just have to make time to build a *lot* of decoys 20:15:01 -!- hagb4rd has joined. 20:15:02 those programs are identical 20:15:14 i mean with normal polarity 20:15:16 it takes five ticks 20:15:29 four ticks 20:15:34 ais523: I really think that -p1,+p2 might differ from +p1,-p2, because p1 might time out with the other polarity 20:15:34 after the first [ 20:15:38 because of a [+] or [-] loop 20:15:42 the trace for zeroed cells 20:15:45 quintopia: hmm, a bug then 20:15:57 is [>[-]>[-] 20:16:02 etc 20:16:13 elliott: no, symmetry 20:16:20 please understand the concept of symmetry 20:16:36 ais523: that only applies when the programs are the same! the point is that with a timeout it's not equivalent 20:16:37 -p1, +p2 is always the same as +p1, -p2 because the two runs will be identical, except for each tape element being - that tape element 20:16:44 ais523: that only applies when the programs are the same! the point is that with a timeout it's not equivalent 20:16:45 as i said 20:16:46 timeout 20:16:52 that makes no difference either 20:17:00 you're neglecting that +p1 might have a [-] loop that runs in N ticks 20:17:02 after, say, 50 cycles, even if the two programs are different, the two tapes will be the same 20:17:11 except for the values in one being minus the values in the other 20:17:33 ais523: wouldn't that only apply if the starting tape differed? 20:17:34 if +p1 has a [-] loop, -p1 has a [+] loop in the same place, running on a value which is minus the value that +p1 started on 20:17:36 wait, no. hmm. 20:17:41 the starting tape is minus itself 20:17:41 right. 20:17:43 elliott: yes against a different opponent the breakdowns for the two polarities will be switched when you switch the polarity :P 20:17:45 otherwise the symmetry wouldn't work 20:18:48 gah, my loop code is broken 20:18:58 oh 20:20:25 -!- zzo38 has quit (Remote host closed the connection). 20:22:02 brb 20:40:52 Added more SWEET debugging to egojsout :) 20:40:59 Click on a particular state for deliciousness :) 20:47:52 Gregor: k, but did you fix the thing where (<(-)*127<(+)*127)*2 doesn't get expanded right? cuz, you know, that's p annoying 20:48:08 Huh? Since when? 20:48:16 I like how quintopia wants Gregor to fix bugs without reporting them 20:48:33 elliott: you fix bugs before people find them all the time! 20:49:05 Certainly looks right to me ... 20:49:32 Yup, that's expanded right. 20:50:31 lemme refresh and make sure i'm testing on the latest version 20:52:11 Gregor: yup. it's not doing it right. fight monorail against wireless. you'll see wireless only builds two of the largest decoys before attacking and leaves the two cells nearest its flag zeroed 20:52:24 (put wireless on the right in case it's asymmetric) 20:52:42 >>>>>(<(-)*127<(+)*127)*2>>>>>(>[-])*100 has the correct behavior, btw. 20:52:56 okay, sure, but replicate my test case 20:54:26 Gregor: I think it's bugged in that [>[-]+] vs [>[+]-] produces weeeeeeird output. 20:54:33 They sort of stop at the middle for some reason. 20:55:17 ehehe 20:55:44 i bet he typed that with a perfectly straight face too 20:55:49 quintopia: E_CANNOTREPRO 20:55:55 -!- elliott has left (?). 20:55:58 -!- elliott has joined. 20:56:10 i bet he typed that with a perfectly straight face too 20:56:12 Who 20:56:17 Me? :p 20:56:28 I generally don't expect loops to start when the tape pointer is on a zero. 20:56:29 Generally. 20:57:01 Gregor: WTF 20:57:26 Maybe it's a BROWSER INCOMPATIBILITY. 20:58:00 It's not, it's a quintopia-is-doing-something-wrong-incompatibility :P 20:59:10 Gregor: i'm getting you a screencap of what is happening 20:59:27 -!- R0b0t1 has joined. 21:00:23 !bfjoust lame +.+ 21:00:31 elliott: the + in the first program cancels out the - in the second program, then they both escape from their main loops 21:00:35 gregor: http://imgur.com/qchSQ do you not see this in your trace? 21:00:39 and NOP forever due to hitting the end of the program 21:00:45 ah, hi R0b0t1 21:00:47 R0b0t1: Yup, that's pretty lame :P 21:00:48 ais523: that's not what i got in egobfjsout 21:00:53 I doubt that program will do particularly well 21:01:00 Score for R0b0t1_lame: 10.8 21:01:03 Just checking. 21:01:13 quintopia: No. Browser/platform? 21:01:20 heh, it isn't even last 21:01:21 FF 3.6.3 21:01:24 poor vibration2 21:01:30 quintopia: And this was wireless, right? Not wireless_whateverthatotheroneis? 21:01:34 yes 21:01:45 wireless currently has the code i mention above in it 21:03:45 !bfjoust lame2 [+.+] 21:04:02 Gregor: BROWSER INCOMPATIBILITY 21:04:10 elliott: Not as far as I can tell. 21:04:17 Well I hope it is. 21:04:22 Because that would be SO 90s. 21:04:26 Score for R0b0t1_lame2: 14.9 21:04:32 yet another shudder! 21:04:41 R0b0t1: hi, how did you find out about this place? the wiki? I suspect so since bf joust isn't exactly well known 21:04:44 :) 21:04:46 but one that sucks more because it actually loops and therefore suicides 21:05:02 elliott: Indeed :3. 21:05:09 welcome etc. 21:06:16 elliott: it was posted on reddit once 21:06:16 Gregor: it only happens in that particular trace for some reason 21:06:25 quintopia: ... 21:06:26 ais523: that would be a pretty delayed reaction 21:06:28 I can't remember if anyone turned up here and stayed as a result 21:06:28 OHWAIT 21:06:45 quintopia: There is a race condition, did you wait for it to finish running all traces before drilling down one? 21:06:45 and ofc, #irp exists merely as a honeypot for Redditors 21:06:49 Gregor: also, you need to make it so when you click on a different trace it stops ... yeah 21:07:09 quintopia: That race condition is actually REALLY FREAKING DIFFICULT to fix, so I didn't bother with it :P 21:07:27 Gregor: well, that's not what caused this. that was the first trace i clicked on after loading and running 21:08:05 Gregor: have a global variable that specifies the stats of the trace that's running, stop looping if it's set different to the trace that you're generating 21:08:12 that's not so REALLY FREAKING DIFFICULT, is it? 21:08:24 ais523: Feh, I could do that :P 21:08:31 ais523: be kind, Gregor is a javascript programmer, he doesn't understand such complex things! 21:08:32 ais523: But I can also fix it a little bit better, which I will in ~2hr 21:08:35 maybe you want to use lance instead 21:08:38 (countdown to "fuck you"...) 21:09:10 make it work first? 21:09:47 how often do we have warring interps for any particular esolang? 21:10:02 cfunge vs. CCBI (not really vs. Shiro, as it came at a different time) 21:10:02 quintopia: Idonno what to tell you, it works perfectly. 21:10:09 esotope vs. in-between 21:10:17 hmm, any others? 21:10:38 ais523: I'm joking though 21:10:39 Gregor: yeah, i can't repro it now either. i repro'd it twice perfectly and now nothing! heisenbug? 21:10:45 also, esotope vs. inbetween wasn't much of a war 21:10:53 yep, because Vorpal got bored 21:10:54 fun fact: windows has three file path separators. quiz: what are they? 21:10:54 that was just me mocking V*rpal for copy-paste code, which i also did when he was doing cfunge :P 21:11:03 aww, he'll see that now! 21:11:29 coppro: \ is the main accepted one 21:11:51 :? 21:13:37 coppro: \ for legacy purposes, / for modern use, : as the drive separator 21:15:17 \ is not for legacy purposes 21:15:27 The UNC uses it 21:16:33 you forgot yen 21:16:39 ¥ 21:16:43 (japanese versions only) 21:16:49 someone take the credit for that; coppro won't see it 21:17:00 -!- pumpkin has joined. 21:17:33 ais523: interestingly in cmd.exe, / = .\ 21:17:37 well, for cd 21:17:41 It works on every version, I think, it's just rather hard to type the ¥ symbol on some computers. 21:17:54 I just tried it. It does not work on 7. 21:20:37 -!- copumpkin has quit (Ping timeout: 260 seconds). 21:20:43 cmd.exe is insane 21:20:50 hmm, are you sure? I think it's a locale-specific thing, originally just because the \ octet showed as the yen sign in shift-jis, then retained for idiot-compatibility 21:20:59 I'm just reading "The Tao of Programming" again :-) 21:21:04 I would expect that it just special-cases the japanese locale but I may be wrong, perhaps for software compatibility 21:21:11 Well, on XP I remember seeing it on some autoconfigure scripts. 21:21:20 Not sure about 7. Still haven't used it :) 21:21:51 it's strange how programs can drop down the leaderboard merely due to a change in the composition of the hill, not because they're being outcompeted 21:22:09 (the actual truth is that it's locale-dependent) 21:22:12 e.g. a program can drop below another one that stays in much the same place 21:22:14 maglev at some point beat everything that was above it 21:22:17 ais523: it's the same in Corewar 21:22:25 that doesn't surprise me at all 21:22:27 Not any more though 21:22:32 the yen and won symbols are path separators in Japanese and Korean locales, respectively 21:22:39 When it was at pos 5 it did 21:23:58 ais523: that's just because of the scoring system 21:24:02 and it's totally correct 21:24:08 indeed 21:24:17 if it suddenly turns out that your big win against a major player was actually not as impressive, you should drop down 21:24:18 not even because of the scoring system, it would happen with a naive scoring system too 21:24:22 *not so impressive 21:24:26 ais523: are you sure? 21:24:28 as the programs that you're measured against change 21:24:39 if, say, lots of defence programs end up on the hill 21:24:44 then programs that do well vs. defence will do well 21:24:50 and as a result, all defence programs will start dropping down 21:24:55 ais523: i see now what you mean about defend9 guessing timings. it does an admirable job with wireless (probably due to the small offset size it uses) 21:25:05 because counter-defence stays on the hill longer 21:25:26 and more counter-defence will get up there and push away programs that might be more vulnerable to it 21:25:46 now why is lance so broken 21:25:57 you know what's the worst? off-by0one errors 21:25:58 *by-one 21:26:02 they're so sneaky and tricksy and heisenbuggy 21:26:11 yet so stupidly simple 21:26:33 I would like to amend the famous quote: 21:26:33 * quintopia hits elliott with a fencepost ===========> 21:26:42 quintopia: off by one 21:26:43 There are only two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors 21:26:45 *errors. 21:26:49 There, fixed the race condition X-P 21:26:55 neatsauce 21:26:58 DO YOU GET IT 21:27:36 what was the original quote 21:28:57 now I want to intentionally throw a technical interview by answering "what is a race condition" by answering "when a bunch of programs line up in the same place and, at a signal, each start moving as fast as they can to get to the destination. Like in Tron, or Reboot." 21:29:04 There are only two hard things in Computer Science: cache invalidation and naming things. 21:29:48 "Like in Tron, or Reboot" X-D 21:29:49 There are only two hard things in Computer Science: interfacing with Facebook and my sexy body. 21:29:59 Gregor: wat 21:30:13 elliott: What, do you have pooppy on ignore now? 21:30:45 Gregor: Yes, ever since the entire list of topics he talked about became "mentioning that I'm on ignore and how much better the channel is when it's nearly silent^W^Wlacking me, and complaining about Minecraft talk". 21:30:56 Gets a bit irritating. 21:30:59 Mm 21:38:23 elliott: that computer science joke seems to have its own local version of Muphry's Law, at least on the Internet 21:38:28 in that people nearly always seem to mess them up, or at least you do 21:38:46 ais523: I copy+pasted it, and added "off-by-one errors" 21:38:54 If you mean that I said "two" instead of "three" hard things... that's the joke. 21:39:49 elliott: I mean the correction to add the full stop 21:39:59 you've made a typo every single time you've done that joke 21:40:10 ais523: how often have I done it? 21:40:33 20:24:51 The REAL two hardest problems in CS: Cache Invalidation, Naming Things, and Off by One Errors. 21:40:34 20:25:06 ...yes. 21:40:34 20:25:33 when did #esoteric become #uncyclopedia 21:40:36 20:25:55 Presumably variable is writing an Oscar Wilde language. 21:40:38 20:26:15 but was that off by one error caused by a cache invalidation? 21:40:40 doesn't appear to have context 21:40:43 but er 21:40:44 elliott: twice, or maybe three times 21:40:45 he did it before me 21:40:47 hi variable 21:42:32 "int foo[N];" is guaranteed to be zero-filled, right? 21:43:00 If it's global... maybe 21:43:07 I forget how that works 21:43:19 It's global, eys. 21:43:20 *yes. 21:43:24 I know that "int foo;" is 0. 21:43:38 hi elliott 21:43:47 hi 21:43:56 20:25:33 when did #esoteric become #uncyclopedia --> explain ? 21:44:11 hm? 21:44:18 wasn't that _months_ ago that i quoted that 21:44:20 or at least week 21:44:20 s 21:44:25 yeap 21:44:27 elliott: it was also earlier today 21:44:33 ais523: not me 21:44:46 oh right, just now 21:44:50 I mean, it was elliott who quoted that 21:44:55 variable: someone did a fake abraham lincoln quote before 21:44:55 ais523: oh yes 21:44:57 :-) 21:44:57 variable, in fact 21:45:03 or was it oscar wilde... think it was abraham lincoln 21:45:23 20:23:44 â<80><9c>The problem with Internet quotations is that many are not genuine.â<80><9d> - Abraham Lincoln 21:45:23 20:24:32 "Abraham Lincoln never said that." - Oscar Wilde 21:45:23 20:24:51 The REAL two hardest problems in CS: Cache Invalidation, Naming Things, and Off by One Errors. 21:45:23 20:25:06 ...yes. 21:45:23 elliott: but you didn't say the joke properly 21:45:24 20:25:33 when did #esoteric become #uncyclopedia 21:45:32 why no 21:45:34 t 21:46:03 ? 21:46:14 I thought I invented adding off by one errors to it, probably subconciouscly stole it from you 21:46:48 There are only two hard things in Computer Science: cache invalidation and naming things. -> no off-by-one errors part 21:47:03 variable: um that's what the _actual_ quote is 21:47:09 elliott: hehe 21:47:19 I would like to amend the famous quote: 21:47:21 There are only two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors 21:47:21 *errors. 21:47:24 [...] 21:47:26 what was the original quote 21:47:26 There are only two hard things in Computer Science: cache invalidation and naming things. 21:47:31 variable: ^ 21:47:34 elliott: ah ok - I didn't read that far up 21:47:38 :) 21:47:40 stealing things from me is ok 21:47:45 sometimes 21:47:49 like quotes 21:47:59 `addquote stealing things from me is ok sometimes like quotes 21:48:49 303) stealing things from me is ok sometimes like quotes 21:54:50 -!- Mathnerd314 has joined. 21:58:14 ais523: holy shit! 21:58:19 ais523: E17 reached 1.0 last month 21:58:32 ais523: now /that's/ more surprising than Duke Nukem Forever 21:58:48 I didn't realise it was so delayed 21:59:02 ais523: since 2000 21:59:13 ais523: it's been in pretty much constant 0.0.0.0.0.000000000000000.1 release stage 21:59:29 (that doesn't stop anyone using it, though, it just had a drawn-out release cycle) 22:00:13 -!- augur has changed nick to TheDoctor. 22:00:19 -!- TheDoctor has changed nick to augur. 22:10:11 -!- Tritonio_GR has quit (Quit: Leaving). 22:10:42 -!- nescience has joined. 22:10:55 !bfjoust mapping_turtle -(>(+)*9>(-)*9)*4>([(+)*120(+.)*16.+>]+>[(+)*120(+.)*16.->]->)*11 22:11:19 Score for Gregor_mapping_turtle: 51.3 22:11:33 YESSSSSSSSSSSSSSS 22:11:34 O_o 22:11:50 DOES IT BURN 22:11:54 Oh well, maglev and monorail beat it no problem 22:12:48 Yeah, I'm just in the right sideo of the triangle-o-wins :P 22:12:50 *side 22:12:59 !bfjoust mapping_turtle -(>(+)*10>(-)*10)*4>([(+)*120(+.)*16.+>]+>[(+)*120(+.)*16.->]->)*11 22:13:42 Score for Gregor_mapping_turtle: 55.2 22:13:50 Wow 22:13:53 !bfjoust -(>)*8<+<-<(+)*10<(-)*10<(-)*30<<(+)*42(>)*7(>[(+)*9[-]])*20>(.+)*10000 22:13:54 Use: !bfjoust . Scoreboard, programs, and a description of score calculation are at http://codu.org/eso/bfjoust/ 22:13:57 Gregor: K w]] 22:13:58 !bfjoust maglev -(>)*8<+<-<(+)*10<(-)*10<(-)*30<<(+)*42(>)*7(>[(+)*9[-]])*20>(.+)*10000 22:13:59 oops 22:14:15 Gregor: I was expecting "arson murder shit-eating turtle wanker" after your progression 22:14:21 Oh I momentarily hit number one LA LA LA LA NUMBER ONE ONE ONE 22:14:26 X-D 22:14:26 !bfjoust 22:14:27 Use: !bfjoust . Scoreboard, programs, and a description of score calculation are at http://codu.org/eso/bfjoust/ 22:14:38 Score for Deewiant_maglev: 47.7 22:14:46 Gregor: See with lance, nothing at fucking all would change, carry on. 22:14:49 !bfjoust maglev -(>)*8<+<-<(+)*10<(-)*10<(-)*30<<(+)*42(>)*7(>[(+)*9[-]])*21 22:14:58 I could do better if I killed rapping_turtle, but I'm not quite that dishonest :P 22:15:00 ais523: GREGOR IS AT #1, PANIC PANIC PANIC 22:15:05 what wive? 22:15:08 *with? 22:15:11 Score for Deewiant_maglev: 47.5 22:15:12 ais523: -(>(+)*10>(-)*10)*4>([(+)*120(+.)*16.+>]+>[(+)*120(+.)*16.->]->)*11 22:15:15 mapping_turtle 22:15:16 umm, that shows how badly I can typo while not concentrating 22:15:22 !bfjoust maglev -(>)*8<+<-<(+)*10<(-)*10<(-)*30<<(+)*42(>)*7(>[(+)*9[-]])*20>(.+)*10000 22:15:24 Which one of your wives wrote that program Gregor 22:15:26 ais523 wants to know 22:15:29 oh, it's just a blatant 128-detector 22:15:36 ais523: All the turtles are. 22:15:39 BLATANT, Gregor; BLATANT 22:15:48 Score for Deewiant_maglev: 47.7 22:15:52 the fact that those are doing so well means that we need more fast attack programs, and that adjusting your own flag may soon be a good strategy 22:15:53 Will you all go "HEY DISHONEST" if I kill crapping_turtle? 22:16:01 I don't think it's dishonest 22:16:05 it's a valid strategy 22:16:10 !bfjoust crapping_turtle < 22:16:15 but it's one that does far too well in the current hill 22:16:17 It's not a strategy, I just don't like having old things floating around. 22:16:23 !bfjoust (>)*9([(-)*128[-]]>)*20 22:16:23 Use: !bfjoust . Scoreboard, programs, and a description of score calculation are at http://codu.org/eso/bfjoust/ 22:16:26 Score for Gregor_crapping_turtle: 0.0 22:16:36 !bfjoust shitting_tortoise (>)*9([(-)*128[-]]>)*20 22:16:41 I'm carrying Gregor's naming convention on. 22:16:41 HOW IS DIRK STILL ALIVE 22:16:43 Since he ABANDONED it. 22:16:55 elliott: So long as you keep "tortoise" only :P 22:17:00 Score for elliott_shitting_tortoise: 13.8 22:17:06 Gregor: Have you copyrighted "turtle"? 22:17:19 elliott: No, but within the scope of BF Joust programs it's my trademark. 22:17:29 !bfjoust shitting_tortoise >-(>+>-)*4([(-)*128[-]]>)*20 22:17:32 Gregor: I SEE 22:18:10 yay, i beat defend9 22:18:17 Score for elliott_shitting_tortoise: 10.2 22:18:43 !bfjoust shifting_tortoise (-)*127>+(>->+)*4([(-)*128[-]]>)*20 22:18:51 !bfjoust shitting_tortoise < 22:19:07 How can dirk STILL BE THERE 22:19:08 Honestly 22:19:11 How is it even possible. 22:19:13 Somebody knock it off. 22:19:20 OK 22:19:24 It's like it only wins against programs which are overall better than it. 22:19:29 (And not already on the hill) 22:19:35 Score for elliott_shifting_tortoise: 20.8 22:19:36 Score for elliott_shitting_tortoise: 0.0 22:20:04 Gregor: Dude, dirk is too close to shitting tortoise :P 22:20:17 elliott: dirk is shortsword with trivial modification. 22:20:20 !bfjoust shifting_tortoise (-)*127>+>-(>)*8([(-)*128[-]]>)*20 22:20:39 Score for elliott_shifting_tortoise: 22.4 22:24:18 !bfjoust shifting_tortoise (-)*127>+>-(>)*8([(-)*64[+]]>)*10([(-)*128[-]]>)*10 22:25:29 * Gregor is shocked beyond belief to still be #1 :P 22:25:39 !bfjoust 22:25:41 Use: !bfjoust . Scoreboard, programs, and a description of score calculation are at http://codu.org/eso/bfjoust/ 22:26:40 Score for elliott_shifting_tortoise: 22.2 22:27:04 !bfjoust overshot (>)*15(>[(-)*127[+]])*15 22:27:12 $ ./lance '[>[-]+]' '[>[+]-]' 22:27:12 ========================================== 22:27:12 Nobody wins (0) 22:27:12 Woot 22:27:49 Score for Deewiant_overshot: 1.6 22:29:22 Deewiant: (-)*127[+] is ... an odd choice. 22:29:34 Since if you leave the flag as is, that'll take for friggin' ever to zero it. 22:29:40 how not to do an offset clear! 22:29:40 I was aiming for mapping_turtle 22:29:49 Ah 22:29:57 Remember polarity :P 22:30:08 And am unsure why it only wins in one tape size 22:30:18 Well sure, it'll only win in one polarity 22:30:20 Looks like lance does basic programs perfectly, now to ping oerjan so I can get him to briefly walk me through the efficient {}% stuff 22:30:37 elliott: His explanation that you pasted at me was perfec.t 22:30:56 Gregor: It's a bit vague and unassured-sounding for my tastes, but okay. 22:31:27 -!- nescience has quit (Ping timeout: 240 seconds). 22:33:12 !bfjoust misoffset (>)*8(>[(-)*127[+]])*21 22:34:44 !bfjoust be_well_to_strangers -------------------------------------------------------------------------------------------------------------------------------[----++++] 22:35:33 16:19:28 13:54:34 elliott: basically ( pushes starting count on the stack, { iterates back to matching ( or pops, } pushes like (, and ) iterates or pops 22:35:33 16:19:28 13:55:13 and provided [] matches inside () and inside {} like the rule is supposedly already, it should all work 22:35:33 16:19:28 13:56:05 hm i guess } and ) need to count the reverse way of ( and { 22:35:54 hmm Gregor do you make sure to take into account that (){} all take 0 ticks 22:36:04 elliott: Of course. 22:36:08 kay :P 22:36:12 I can easily do that with... A GOTO 22:36:22 Or ... a while loop :P 22:36:23 (()*100+())*100*10 22:36:44 16:19:28 13:56:05 hm i guess } and ) need to count the reverse way of ( and { 22:36:46 What's that supposed to mean 22:37:20 Score for elliott_be_well_to_strangers: 14.7 22:37:21 Score for Deewiant_misoffset: 12.9 22:37:22 I'm not sure, I thought it was in reference to the fact that ({ are a matching pair and }) are a matching pair. 22:37:36 Right. 22:37:57 In his head probably he was counting up for one, then doing the middle, then counting down, but of course you don't NEED to do it that way. 22:38:25 Right. 22:38:28 You can just reset the count 22:38:35 !bfjoust hayaku (>)*8(>[[+]])*21 22:38:35 To be what it is in the program 22:38:45 Yuh 22:39:02 The instructions in lance: 22:39:11 ENDP, DINK, DONK, ONWD, RTRT, WAIT, LOOP, POOL, PARE, ERAP, ONCE, ECNO 22:39:12 best ever 22:39:15 Score for Deewiant_hayaku: 6.6 22:39:28 * Gregor huggles mapping_turtle 22:39:47 !bfjoust hayaku (>)*8(>[(-)*11[+]])*21 22:40:29 Score for Deewiant_hayaku: 12.4 22:40:45 !bfjoust ac (>)*8(>[(-)*11[+]]>[(+)*11[-]])*10>(-)*127[+] 22:41:58 Score for Deewiant_ac: 12.1 22:42:44 !bfjoust ac +(>->+)*4(>[(-)*11[+]]>[(+)*11[-]])*10>(-)*127[+] 22:43:29 -!- nescience has joined. 22:43:29 Score for Deewiant_ac: 23.9 22:43:38 I eventually got it 22:43:45 Darn, mapping_turtle is still 0.02 score higher than the second 22:43:55 D-8 22:43:56 I was expecting it to show up in the wifi list like my (windows 7) laptop 22:44:01 Only .02, 'snot enough 22:44:01 !bfjoust ac +(>->+)*4(>[(-)*11[+]]>[(+)*11[-]])*10 22:44:03 whoops wrong channel 22:44:14 Deewiant: WHY YA GOTTA BRING ME DOWN 22:44:19 BECAUSE 22:44:33 I don't like jousters at the top that all my programs beat :-D 22:44:42 lol 22:44:53 Score for Deewiant_ac: 22.1 22:45:03 Bah 22:45:44 Man, I should probably use a less hacky parser than I'm using now, it's insane. 22:45:47 (When expanding to () :P) 22:48:12 Gregor: Am I right in thinking that * and % are treated identically with these semantics? 22:48:42 elliott: I ignore which is used in egojsout :P 22:49:03 Since your use of {} or not implies % or * 22:49:06 Gregor: Propose, perhaps, that we deprecate % in favour of * then? 22:49:14 % is quite an ugly character. 22:49:15 If ais523 agrees. 22:49:19 HEY ais523! 22:49:25 AGREE TO OUR DEMANDS 22:49:41 I was just trying to make the difference clearer 22:49:53 AGREE 22:49:53 and I think they might be different with oerjan's idea of (( {{}})%n)%n 22:49:53 TO 22:49:54 OUR 22:49:56 DEMANDS 22:50:02 why don't you just parse them as identical? 22:50:17 ais523: That's what I do, and wtf does (({{}})) do 22:50:18 ais523: they're not different with his idea 22:50:30 Gregor: You handle that with the algo oerjan gave you 22:50:35 it's what he invented it for 22:50:36 Goodie :P 22:50:45 ais523: Parsing them as identical, suuure, but redundant syntax is irksome. Especially in BF. 22:51:03 context-sensitive commands is irksome too 22:51:09 ais523: Eh? 22:51:10 but I don't really care 22:51:14 { and } aren't context-sensitive the way oerjan does it. 22:51:20 { is a right bracket to ('s left. 22:51:22 In a sense. 22:51:28 It's just that } looks at the ( before it. 22:51:45 yep, and then for the % after the matching ) 22:51:52 ais523: no 22:51:58 that's not how it works in oerjan's semantics 22:52:00 you store the count in the ( 22:52:01 otherwise, how does it know how many times to repeat? 22:52:02 well 22:52:08 you could store it in the ) too, but it'd be redundant. 22:52:21 ah, so the ( copies the count from the )% on parse? 22:52:27 yes 22:52:31 ais523: elliott: basically ( pushes starting count on the stack, { iterates back to matching ( or pops, } pushes like (, and ) iterates or pops 22:52:35 in that case % does need to be different from *, as the ( wouldn't copy the count from a )* 22:52:42 untrue 22:52:43 elliott: basically ( pushes starting count on the stack, { iterates back to matching ( or pops, } pushes like (, and ) iterates or pops 22:53:14 egojsout does it this way :P 22:53:41 Also: Do we forbid *0? I kind of like it because you can use it for comments. 22:53:45 (Hello, world! ...)*0 22:53:55 ooh, I like *0 for comments too 22:54:08 as [...][comment] isn't a comment in BF Joust 22:54:18 You could even strip it (but I won't bother to start with since it'll be skipped over immediately). 22:54:20 * Gregor fixes that in egojsout :P 22:54:30 Gregor: Fixes what, *0? 22:54:34 Yeah 22:54:35 Woo, so I have to use strtol because atoi uses 0 to signal errors :P 22:55:17 that's quite some error recovery 22:55:47 ais523: ? 22:55:53 In his head probably he was counting up for one, then doing the middle, then counting down, but of course you don't NEED to do it that way. <-- um yes you do. that's the way you ensure that jumping directly between [] in there doesn't require changing the counter stack 22:55:58 using a legit return as an error return 22:56:15 Bleh, strtol allows whitespace before the number. I'll just parse it manually. 22:56:19 Base 10, how hard can it be. 22:56:23 oh, are you writing the new interpreter? 22:56:27 Yes. 22:56:34 nescience: With efficient () parsing. 22:56:41 nescience: Note that (a{b}c)%n is now (a{b}c)*n. 22:56:45 sweet 22:56:50 why 22:56:57 Because % turned out to be redundant. 22:57:10 meh, it should accept both 22:57:11 !bfjoust superfast_jellyfish +>(+)*128>>>>>>>>([-[++[(+)*15[(.-)*3]]]]>)*21 22:57:16 nescience: Additionally, (A[B)*nC(D]E)*n is Highly Deprecated, but will be supported with a preprocessor. 22:57:19 for compat with old programs 22:57:22 nescience: Please use {} in future programs. 22:57:26 sure 22:57:35 nescience: Such repeats _without_ trivially-matching []s are *banned*. 22:57:35 I only used the other because the % loop failed 22:57:40 Right. 22:57:56 like, I wrote it and it didn't work 22:57:58 Banned as in the program will literally reject them because interpreting them efficiently is ~impossible. 22:58:01 nescience: Yeah, blame egojoust :P 22:58:09 :P 22:58:24 and I think they might be different with oerjan's idea of (({{}})%n)%n <-- not that i know of 22:58:48 oerjan: ((({{}})%n)*n)%n, insert commands between the parens as appropriate 22:58:49 how fast does it do Defend now? :) 22:59:05 the {s couldn't tell which *s they matched if % and * were the same character 22:59:31 just don't allow traversal of } and )? 22:59:50 if everything is balanced it should be able to tell 23:00:19 ais523: are you sure? 23:00:43 elliott: ((({{}})*)%)% has different semantics from ((({{}})%)%)* 23:00:47 fprintf(stderr, "%d : Oi -- you have a * not followed by a digit. Did your parents drop you on your head as a kid?\n", n); 23:00:47 Inspired by lambdabot: 23:00:48 @src foo 23:00:48 Source not found. I can't hear you -- I'm using the scrambler. 23:00:50 @src foo 23:00:50 Source not found. You speak an infinite deal of nothing 23:00:52 (assuming there are actual commands and numbers there) 23:00:52 @src foo 23:00:53 Source not found. My pet ferret can type better than you! 23:00:54 @src foo 23:00:54 Source not found. My pet ferret can type better than you! 23:00:55 @src foo 23:00:55 Source not found. Sorry about this, I know it's a bit silly. 23:00:59 @src foo 23:00:59 Source not found. You speak an infinite deal of nothing 23:01:04 Argh, where's the insulting ones :P 23:01:05 { and } aren't context-sensitive the way oerjan does it. <-- actually it is slightly context-sensitive, you actually need to do that ({ and }) matching separately from the rest, so it's the _intersection_ of two context-free languages (i just thought this up while away) 23:01:05 @src foo 23:01:05 Source not found. I am sorry. 23:01:12 @src foo 23:01:12 Source not found. Do you think like you type? 23:01:18 oerjan: i wasn't talking language-wise :D 23:01:18 that seems rather un-Haskellish 23:01:20 @src foo 23:01:21 Source not found. That's something I cannot allow to happen. 23:01:23 @src foo 23:01:23 Source not found. :( 23:01:25 @src foo 23:01:25 Source not found. Wrong! You cheating scum! 23:01:26 fff 23:01:35 I give up :P 23:01:38 also, what's with the spaces in that last message? 23:01:45 @src : 23:01:45 Source not found. 23:01:51 ais523: presumably the insults are in a separate list 23:01:54 hmm, no source for :? 23:01:57 to the "Source not found." message 23:01:57 Stop criminal scum? 23:01:58 @src (:) 23:01:58 Source not found. You speak an infinite deal of nothing 23:02:05 it's a constructor 23:02:07 so hardly surprising 23:02:09 but you need the ()s 23:02:13 @src nescience_shade 23:02:13 in that case % does need to be different from *, as the ( wouldn't copy the count from a )* <-- ( doesn't _have_ to be different, although either ( or ) must be slightly different i think 23:02:13 Source not found. Just what do you think you're doing Dave? 23:02:14 can we not disallow (({{}}))? it seems more complicated than it's worth 23:02:15 so, it still needs to be declared somewhere 23:02:33 oerjan: hmm, so we still need %? 23:02:35 tell Gregor 23:02:36 oerjan: the thing is about knowing which */% matches which ( when parsing 23:02:38 he doesn't distinguish between them 23:02:51 you can use the same representation at runtime I think 23:02:59 but you need to initialise the counts differently at parsetime 23:03:05 obviously it belongs to the one at the proper level 23:03:32 I must be missing something here because it seems obvious 23:03:38 but I came in in the middle 23:04:05 i agree with nescience 23:04:16 oerjan: can you test your example with Gregor's efobfjsoust? 23:04:20 Oooh, look who's still #1 on the hill. 23:04:25 it doesn't distinguish * and % and implements your trick 23:04:29 oerjan: what are the semantics of (({})*)% meant to be anyway? 23:05:13 -!- FireFly has quit (Quit: swatted to death). 23:05:26 I don't see how it makes any sense at all 23:05:33 -!- hagb4rd has quit (Quit: hagb4rd). 23:05:37 e.g. what does (a(b{c}d)*2)%2 expand to? 23:05:41 I can't think of anything that is both sensible and not super-confusing. 23:06:13 Score for quintopia_superfast_jellyfish: 33.6 23:06:22 that took wai too long :P 23:06:56 that looks an awful lot like careless, what differentiates it? it seems to attack every other cell? 23:07:02 No speed complaints until lance is deployed :P 23:07:12 GUESS WHICH GUISE! shudderalikes are about to fall off the scoreboard... 23:07:27 woot 23:07:47 lance.c:182: error: a label can only be part of a statement and a declaration is not a statement 23:07:48 What 23:08:00 quintopia: Because you've been doing things in /msg and hiding things from us? :| 23:08:02 OHHEY 23:08:03 Dirk is gone 23:08:05 elliott: "int x:"? 23:08:12 Deewiant: "int repeat = 0;" 23:08:17 nescience: join my anti-/msg-submitters brigade! 23:08:19 Brigade I tell you. 23:08:20 elliott: Run clang over it :-P 23:08:21 Brigade. 23:08:23 nescience: the innovation i was hoping would accomplish something was the [(.+)*3] thing 23:08:27 Deewiant: Heh 23:08:30 oerjan: ((({{}})%n)*n)%n, insert commands between the parens as appropriate <-- i consider that illegal with my implementation idea, since it would require keeping track of _which_ iteration of *n you are recursing, each time. there should intuitively be only _one_ {} for each () after expansion 23:08:31 elliott: not since you complained this morning 23:08:41 I meant mapping turtle 23:08:42 (of other things) 23:08:46 quintopia: oh, so you're just going to like 23:08:47 WHAMMY us 23:08:48 in one god 23:08:49 *go 23:08:51 i'm preparing myself 23:08:53 emotionally 23:08:58 oerjan: indeed, I mentioned a little later that it didn't make any sense 23:09:00 looks similar to careless.. just attacks +-16 and moves on 23:09:02 wat? 23:09:10 quintopia: GUESS WHICH GUISE! shudderalikes are about to fall off the scoreboard... 23:09:10 so we're banning {} if there's a * inside the matching %? 23:09:12 that makes sense 23:09:28 ais523: Rather, it'll just take on whatever interpretation it takes on, since again * = % for all legal programs. 23:09:28 are shudderalikes popular because they're easy to write? 23:09:28 elliott: well, yeah. i mean. as soon as some more good programs get submitted :P 23:09:37 And since illegal programs are... illegal, we can again unify * and % :P 23:09:44 yep 23:09:52 probably because they succeed 23:10:08 but with the work I did the other day they should be easier to trivially beat 23:10:09 Their easy-to-writeness is nice, though 23:10:13 Anyone can write a shudder :P 23:10:28 Nice as in appealing. 23:10:35 My college required two years of a foreign language as an entrance requirement; I managed to get them to accept Fortran. 23:10:41 they are actually kind of elegant 23:10:51 Deewiant: lance.c:182:9: error: expected expression 23:10:51 int repeat = 0; 23:10:51 ^ 23:10:51 Helfpul 23:10:54 44 26 20.53 -20.79 impomatic_self_aware_brainfuck.bfjoust 23:11:00 but I don't like them because they kind of can't be successful by definition 23:11:02 what a huge disparity 23:11:03 Context: 23:11:05 switch (*p++) { 23:11:05 case '*': 23:11:05 int repeat = 0; 23:11:07 elliott: is that a clang message? 23:11:12 ais523: yep 23:11:13 elliott: You can't put a declaration there 23:11:17 elliott: It's correct :-P 23:11:20 Deewiant: I'm in C99 23:11:20 elliott: ah, you can't label a declaration, only a statement 23:11:26 I want to put declarations EVERYWHERE 23:11:26 elliott: It doesn't matter 23:11:35 Dammit C, I hate your guts. 23:11:37 case '*': ; int repeat = 0; 23:11:38 elliott: switch (*p++) { int repeat; case '*': repeat = 0; 23:11:40 nescience: http://codu.org/eso/bfjoust/egojsout/ 23:11:42 Yes, done. 23:11:44 But sitll. 23:11:44 So ugly. 23:11:46 *still 23:11:54 it's rare you find a legit use for the null statement 23:11:55 oerjan: hmm, so we still need %? <-- no, you can consider just whether there is matching {} inside (see previous comments) 23:12:05 lance.c:181: warning: ‘repeat’ may be used uninitialized in this function 23:12:06 gregor: ? 23:12:07 looks like typo :P 23:12:11 'snot 23:12:12 I DOUBT IT, GCC 23:12:18 oerjan: you don't even have to, do you? 23:12:23 you can just do the same thing for ( and ) always 23:12:47 oh nice 23:12:50 $ ./lance '(abc)*0' '' 23:12:50 1 : Oi -- you have a * not followed by a digit. Did your parents drop you on your head as a kid? 23:12:50 I don't like my program's error messages when they're wrong 23:13:05 nescience: Click a particular run in the breakdown (if you didn't already) 23:13:05 but too hard to use on my phone 23:13:10 oh! 23:13:21 I thought I was supposed to enter code :) 23:13:29 You can ... 23:13:33 You misunderstood :P 23:13:41 After you do a run, it shows the breakdown. Click on an element of the breakdown 23:13:51 can we not disallow (({{}}))? it seems more complicated than it's worth <-- it's not _that_ complicated :( 23:13:55 Gregor: Would be nice if EgoJSout printed the final result of a battle. 23:14:18 you have to do most of the algorithm just for a single level anyway 23:14:31 nice work! 23:14:35 "(128(128+)128(128-)128)128" I like your debug output, Gregor, I like it a lot :P 23:14:36 that is really cool 23:14:36 elliott: it prints everything you need to know! 23:14:48 Hmm, putting the repeat in the ) too is probably a good idea. 23:15:02 but as the author I was just asking what you did to improve on the idea in careless that was so effective 23:15:12 elliott: I can't decide how sarcastic you're being :P 23:15:31 Gregor: Well it, er, could have less 128s in there. 23:15:38 but you need to initialise the counts differently at parsetime <-- um the counts are initialized at runtime, not parsetime 23:15:46 Also for compulsive clickers like me, it's annoying clicking to the right of the playfield and having shit appear :P 23:15:48 I just don't have the flexibility to really take it on on my phone :P not trying to be lazy 23:15:55 err, you need to initialise the value the count initialises to at parsetime 23:16:41 nescience: decoytuner improves on careful by detecting opponents who use small decoys and using a standard offset clear in such cases 23:17:09 referring to mapping turtle 23:17:20 yep, I'm not sure why that one works so well at all 23:17:28 Sheer bloody-mindedness 23:17:30 first glance seems very similar to careless but maybe it skips every other cell or something 23:17:35 lol 23:17:55 It's independent work, I think. 23:18:08 128 detection is a time-honoured strategy, but it never used to work well 23:18:13 didn't quite mean that it wasn't 23:18:15 e.g. what does (a(b{c}d)*2)%2 expand to? <-- _if_ it's allowed, it would be -> (ab{c}db{c}d)%2 -> ababcdbcddbabcdbcdd 23:18:18 then a few people decided to try it again and it worked quite well 23:18:32 just that I think they work pretty similar so what makes the difference in the results 23:18:39 (assuming we distinguish * and %) 23:19:09 we should go all the way, and allow BF Joust programs to be generated from 1cnis progams 23:19:13 I think nesting () inside {} should be illegal if it crosses the braces 23:19:13 *programs 23:19:26 if it includes either of them really 23:19:32 yep, we came to that consensus, I think 23:19:53 (assuming we distinguish * and %) 23:19:57 what if we don't? 23:19:58 oh right 23:19:58 and I don't see what sane meaning can be given to, say, (a{b)*2c}d)%2 23:20:02 then it does the obvious 23:20:08 ais, I don't remember any programs much like careless.. I just noticed all the attackers were loop based and wanted to write one that wasn't 23:20:17 To be honest, (a(b{c}d)*2)%2 seems so ridiculously useless :P 23:20:26 it had a wider attack range at first but I wound up narrowing it way down 23:20:27 Unifying * and % is worth it 23:20:38 nescience: impomatic_Nyarlathotep has no control flow, IIRC 23:20:40 -!- hagb4rd has joined. 23:20:51 it's a tripewireless defence program 23:20:54 yeah but it is basically a defender 23:20:59 yep 23:21:00 I meant straight attack 23:21:30 but regardless, the question is why mapping turtle scores so much better ;) 23:21:48 oh I get my phone back,gonna update the rom 23:21:58 so we're banning {} if there's a * inside the matching %? <-- if we ignore the difference of * and %, then each ( must match a ) or { and each } must match a ) in that second context-free language (the first being ordinary matching of all types of brackets) 23:22:09 is what i figured recently 23:22:54 !bfjoust zip >>>>+<(+)*64)<(-)*64<(+)*128(>)*8([(.-)*15(.+)256[.-]])*21 23:24:11 -!- ais523 has quit (Remote host closed the connection). 23:24:36 mapping turtle scores so well not because it beats a lot of programs, but because it beats the *right* programs 23:25:03 Score for quintopia_zip: 0.0 23:25:10 lul 23:25:17 did i screw that up 23:25:18 you can just do the same thing for ( and ) always <-- no. in * assuming the ( does not set the counter to max (i.e. it starts zero instead), then ) must increment it, while for % ) must decrement it. vice versa if ( _does_ set the counter to max 23:25:28 quintopia: You don't > in the *21 23:25:34 oh 23:25:36 duh 23:25:38 :P 23:25:45 !bfjoust zip >>>>+<(+)*64)<(-)*64<(+)*128(>)*8([(.-)*15(.+)256[.-]]>)*21 23:25:57 Score for quintopia_zip: 0.0 23:26:03 you can just do the same thing for ( and ) always <-- no. in * assuming the ( does not set the counter to max (i.e. it starts zero instead), then ) must increment it, while for % ) must decrement it. vice versa if ( _does_ set the counter to max 23:26:06 Gregor: How do you handle this 23:26:18 quintopia: You close two ] in the () 23:26:27 Oh, no, that's right 23:26:41 Oh 23:26:48 quintopia: (.+)256 instead of (.+)*256 23:26:53 .... 23:26:54 duh 23:26:59 !bfjoust zip >>>>+<(+)*64)<(-)*64<(+)*128(>)*8([(.-)*15(.+)*256[.-]]>)*21 23:27:00 elliott: I'm thinking about it, I'm not sure whether that makes sense to me ... 23:27:07 -!- nescience has quit (Ping timeout: 272 seconds). 23:27:14 Score for quintopia_zip: 1.0 23:27:20 okay, better :P 23:27:31 :-P 23:27:43 oerjan: ^ 23:27:53 (.+)*256 seems excessive 23:27:58 it probably is 23:28:12 135 or so would be enough 23:28:23 !bfjoust zip >>>>+<(+)*64)<(-)*64<(+)*128(>)*8([(.-)*15(.+)*135[.-]]>)*21 23:28:34 Score for quintopia_zip: 1.0 23:28:56 not quite enough 23:29:05 !bfjoust zip >>>>+<(+)*64)<(-)*64<(+)*128(>)*8([(.-)*15(.+)*150[.-]]>)*21 23:29:48 Score for quintopia_zip: 1.0 23:29:50 oh 23:29:53 i see 23:30:37 it's just a terrible idea! 23:30:43 :-D 23:30:46 * quintopia goes away now 23:31:19 well, first i want to see how the thing with the thing does... 23:31:19 and I don't see what sane meaning can be given to, say, (a{b)*2c}d)%2 <-- indeed as i said i consider all brackets needing matching in the ordinary sense. only [] could even _consider_ an exception, the way egojoust applies it 23:31:20 !bfjoust zap >>>>+<(+)*64)<(-)*64<(+)*128(>)*8([(.-)*15(.+)*25[.-]]>)*21 23:31:35 Score for Deewiant_zap: 1.0 23:32:13 Deewiant: ITYM "crap" 23:32:27 Gregor: No, I wanted an edit distance of 1 from zip 23:32:36 I might've meant "zit" 23:32:37 To be honest, (a(b{c}d)*2)%2 seems so ridiculously useless :P <-- well with a higher %n it can give exponentially sized programs 23:33:07 oerjan: But can it give _reasonable_ exponentially-sized programs? 23:33:15 I can't think of any way to use it without my brain stack overflowing. 23:33:23 -!- pumpkin has changed nick to djtiesto. 23:33:24 oerjan: HOWWWWWWWWWwwwwwwtf does that even mean? 23:34:05 See, it even breaks Gregor. 23:34:07 ON THE OTHER HAND 23:34:20 I can see competition getting so fierce that exponentially sized programs are worthwhile. 23:34:29 You have 100K cycles. 23:34:32 -!- djtiesto has changed nick to copumpkin. 23:34:33 Exponential programs = nonsense. 23:34:34 oerjan: but note that because of the stack limit, after a certain point, large programs stop making sense 23:34:36 Gregor: Untrue. 23:34:40 Gregor: Consider lots and lots of control flow. 23:34:55 You might have a problem that consists of essentially five thousand special cases. 23:35:02 Can you do that with (({})*)%? 23:35:05 An exponential repeating mechanism might come in useful. 23:35:06 I dunno, ask oerjan :P 23:35:32 oerjan: Tell us what (a(b{c}d)*2e)%2 expands to 23:35:47 elliott: I'm thinking about it, I'm not sure whether that makes sense to me ... <-- once again, the left side of ({})% needs to increment the counter if the right side decrements it, so that matching nesting levels have the _same_ counter value, allowing jumping between [ and ] in there with no further adjustment of the counter stack 23:36:22 OHHHHHHHHHH I seeeeeeeeeeeeehmmmmmmmmmm do I handle that some other way? X-P 23:36:53 !bfjoust zup (>+)*3(>)*5((+)*128<)*4(>)*5([(-.)*135(+.)*135>)*21(])*21 23:37:10 -!- nescience has joined. 23:37:16 note: (a)*n can be considered an abbreviation for (a{})%n or ({}a)%n. each of those give different implementations of ()*n given the one for ({})%n 23:37:18 I thought that was disallowed? 23:37:27 Or (half of a{}half of a)%n 23:37:29 Score for quintopia_zup: 2.1 23:37:31 Deewiant: It's not in egojoust. 23:37:34 ha 23:37:46 Oh, I thought we switched already, for some reason 23:38:38 Deewiant: But it looks like that one fits the form (A[B)*nC(D]E)*n, which is easily convertible to (A[B{C}D]E)*n. 23:38:41 Dominion episode! 23:38:45 Which I'll write a preprocessor to lance to do. 23:38:52 And then summarily remove when said programs get replaced. 23:38:53 Would you rather I deadblog? 23:39:11 dominion episode? 23:39:39 This episode seems to relate to the Dominion War 23:39:43 Erm, upcoming 23:39:45 !bfjoust zup (>+)*3(>)*5((+)*128<)*5(>)*6([(-.)*135(+.)*135>)*21(]>)*21 23:39:56 oh, ds9 23:39:56 bleh 23:40:20 Score for quintopia_zup: 2.2 23:40:38 oerjan: HOWWWWWWWWWwwwwwwtf does that even mean? <-- note that a program of _depth_ 100000 can still have size > 2^100000 after expansion, and (a(b{c}d)*2)%100000 would be an example 23:41:23 oerjan: I honestly have no idea what that would even expand to, I can't argue about whether the expansion makes sense when there's no obvious expansion. 23:41:52 I remember something the wiki said about these two episodes..... 23:41:59 -!- impomatic has quit (Quit: ChatZilla 0.9.86 [Firefox 3.5.16/20101130074636]). 23:42:21 Can you do that with (({})*)%? <-- don't know, but (...{}...{}...)% looks more plausible... 23:42:40 oerjan: JUST SHOW ME THE DAMNED EXPANSION >_< 23:42:45 oerjan: that could actually work 23:42:49 -!- MigoMipo has quit (Read error: Connection reset by peer). 23:42:51 oerjan: if { scans backwards to the last ( in-code 23:43:21 Won't work in ego*, matching is static. 23:43:34 And all stored in the ( 23:43:40 what do curlies do again? 23:43:51 pooppy: (a{b}c)*2 = aabcc 23:43:57 ah 23:44:06 you mean %2 23:44:14 Sure, why not :P 23:44:29 No, he doesn't. 23:44:31 He means *2. 23:44:35 Someone forward that to crapppy. 23:44:55 oerjan: Tell us what (a(b{c}d)*2e)%2 expands to <-- ababcdbcdedbabcdbcdede, i think 23:45:26 oerjan: What - the - fuck 23:45:31 Gregor: Tell him about the ENTERPRISE LANGUAGE CHANGES, we can't have people lagging behind. 23:45:42 `addquote oerjan: Tell us what (a(b{c}d)*2e)%2 expands to <-- ababcdbcdedbabcdbcdede, i think oerjan: What - the - fuck 23:46:00 Gregor: It's not _that_ difficult to understand; first expand the inner: 23:46:08 (ab{c}db{c}de)%2 23:46:10 -> 23:46:15 ababcdbdbcdede 23:46:20 Ohohohohoh, it's just like the hypothetical multi-{} 23:46:23 Just type everything not in {}s twice. 23:46:26 I thought that was disallowed? <-- i don't see why empty parts of ({})% should be disallowed, it's just that it simplifies to ()* 23:46:32 Gregor: Yes, except that you can cause exponential blowup with oerjan's syntax. 23:46:37 Which is arguably a good thing. 23:46:45 oerjan: I was talking about zup, not your line 23:47:25 ) oerjan: Tell us what (a(b{c}d)*2e)%2 expands to <-- ababcdbcdedbabcdbcdede, i think oerjan: What - the - fuck 23:47:31 I thought that was disallowed? <-- oh wait misread who you were referring to 23:47:35 Quote... number... )? 23:47:37 wtf 23:47:41 `run tail quotes 23:47:43 actually, I think vorpal is the "retarded team member" to the left \ Deewiant: ha, you were wrong, I have stacks, fungespace and MULTIPLE functions! and a monad! nothing can stop me now! \ !bfjoust test (-)*10000 Score for Vorpal_test: 12.9 yay \ 23:47:48 those aren't quotes about tails! 23:47:52 `quote 300 23:47:52 `run tail -n1 quotes 23:47:54 300) The context is Gracenotes releasing an illegal copy of a film about monster cock dildos. 23:47:54 so you have legacy software in befunge that needs supported? 23:47:56 `quote 305 23:47:56 No output. 23:47:58 `quote 304 23:48:01 No output. 23:48:03 `quote 303 23:48:04 No output. 23:48:07 `quote 302 23:48:08 302) so you have legacy software in befunge that needs supported? 23:48:18 `addquote oerjan: Tell us what (a(b{c}d)*2e)%2 expands to <-- ababcdbcdedbabcdbcdede, i think oerjan: What - the - fuck 23:48:20 303) oerjan: Tell us what (a(b{c}d)*2e)%2 expands to <-- ababcdbcdedbabcdbcdede, i think oerjan: What - the - fuck 23:48:23 wtf. 23:48:32 `cat =addquote 23:48:33 No output. 23:49:42 oerjan: if { scans backwards to the last ( in-code <-- parsing-wise i'm thinking of this as allowing matching { and } in my second CF part, and then looking at chain matchings ( 2 { 1 } 2 { 1 } 2) 23:49:56 Deewiant: =addquote? 23:50:10 A zshism, apparently 23:50:25 Deewiant: Does it mean $(which addquote)? 23:50:28 zsh is so weird 23:50:29 Yes 23:51:03 zsh builds like 50000 programs into the shell :P 23:51:33 oerjan: I would have to say I expect (a(b{c}d)*2e)%2 to be a parse error 23:51:47 !bfjoust zip (>+)*3(>)*5((+)*128<)*5(>)*6(([(-.)*135(+.)*135>)*21(])*21>)*21 23:51:50 I would do innermost first 23:51:57 this one beats defend14. i checked that at least :P 23:52:02 ababcdbdbcdede <-- um no, you missed the part for db{c}d 23:52:02 Score for quintopia_zip: 9.4 23:52:05 so to (ab{c}db{c}de)%2 which is worng 23:52:06 *wrong 23:52:07 oerjan: OH NOES 23:52:44 Gregor: Dude... you stole lance's format... 23:52:47 "Left wins(-42)" 23:52:54 Add a space after wins and that's exactly what lance's output ends with right now :P 23:52:55 elliott: It says "tie" when nobody wins :P 23:53:02 Gregor: OH, that's not COPYRIGHT INFRINGEMENT then. 23:53:06 -!- elliott has changed nick to Gergor. 23:53:13 And I'M not POSING as GREGOR. 23:53:13 elliott: And thank you for pointing out I missed the space. 23:53:17 if you do outside first, then yes, it works out to ababcdbcdedbabcdbcded 23:53:37 defend13 sure is hilarious in the trace screen 23:53:37 err, plus an e 23:54:37 elliott: Besides, you requested the feature. 23:54:46 Did I? X-D 23:54:47 oerjan: I would have to say I expect (a(b{c}d)*2e)%2 to be a parse error <-- currently we seem to be settling on unifying * and %, which means it's just interpreted as old (a(b{c}d)%2e)*2 by the matching rules 23:55:11 So how does Greggsy Gregor handle {} vs normal 23:55:18 Like he seemed to imply he didn't 23:55:25 I just fixed it X-P 23:55:29 Gregor: How :P 23:55:38 Counting up in the left part, then down in the right part. 23:55:46 !bfjoust superfast_jellyfish +>>>>(+)*33<(-)*66<(+)*99<(-)*128>>>>>>>>([-[++[(+)*15[(.-)*3]]]]>)*21 23:56:02 Gregor: So still no marking of whether a repeater is a {} or () style? 23:56:06 oerjan's belief system is CRUSHED ONCE MORE. 23:56:11 Score for quintopia_superfast_jellyfish: 36.8 23:56:26 Gregor: I had to mark that in the first place. 23:56:36 Gregor: I just don't distinguish * from % because I already know by then. 23:56:52 coppro: the other legal option would require allowing multiple {} (iteration counts as multiplying there) corresponding to each (), which needs a different algorithm to handle the data for exponential blowup 23:57:01 Gregor: *Gergor: 23:57:04 yuck 23:57:05 Hey, what should (a{b}c)*0 do 23:57:12 illegal 23:57:12 Gregor: Expand to the null string. 23:57:14 Like all *0s. 23:57:18 Gregor: b 23:57:18 Not b? 23:57:20 Hmm. 23:57:24 Welllllllllll 23:57:26 no, not b 23:57:28 I'd prefer it be the null string 23:57:30 I mean it's obviously stupid :P 23:57:30 For commenting purposes. 23:57:32 coppro: yes b 23:57:36 we are not trying to make obfuscated bf code 23:57:39 Since it's useless. 23:57:43 It would be nice to be able to say {} in comments :P 23:58:24 coppro: b is the _logical_ result. (a{b}c)* = a(a{b}c)*n c fits with that 23:58:24 !bfjoust mostly_ripped_off_of_quintopia +>>>>(+)*33<(-)*66<(+)*99<(-)*128>>>>>>>>([-[++[(+)*15[(..-)*3]]]]>)*21 23:58:35 [expecting logic from coppro] 23:58:37 23:58:40 23:58:40 Score for coppro_mostly_ripped_off_of_quintopia: 23.7 23:58:42 oerjan: except n should be a positive integer 23:59:24 Gregor: Err, do you stop the battle at the end of program execution? 23:59:33 Or no... wait what. 23:59:37 Ohh