00:00:12 oklopol: but how many predefined block types will there be :P 00:00:12 elliott: combinations of as many features as i can come up with, and can make work together 00:00:21 you can just read the code of the blocks to see what they do 00:00:24 oklopol: as in, an actual number 00:00:26 for _predefined_ blocks 00:00:31 i.e. optimised ones 00:00:45 well astronomically many, because it's features that are optimized, not individual blocks 00:00:57 oklopol: so a block is a set of features? 00:01:04 mostly. 00:01:16 oklopol: mostly? :D 00:01:20 your game is SO IMPURE 00:01:29 basically it's a list of components that perform a physical action, and a program that executes them. 00:01:44 that's all 00:01:51 oklopol: so the former are like...limbs? 00:02:23 you can think of them that way, but components can teleport, change the block's shape, move it, copy it, change programs of other blocks, glue to other blocks, etc 00:02:48 oklopol: so what _is_ a component 00:02:51 in its actual definition 00:03:01 oklopol: also, so, there are no hardcoded programs? 00:03:03 there's also a kind of discrete version of euclidean physics in play, for when you build make huge structures, but dunno if i'll actually implement that 00:03:05 if blocks aren't hardcoded, just features 00:03:40 yeah 00:03:42 i believe so 00:03:48 the programs shouldn't be very complicated 00:03:52 in natural blocks 00:03:58 oklopol: so updating the world is running millions of programs, still. 00:04:04 that's not going to be fast. 00:04:17 not really, many of them will be event-based, and can just be unloaded 00:04:46 oklopol: :D so it's actually a table of programs? 00:05:07 and the programs are executed very slowly. and why do you say that? just a programming language that allows events. 00:05:49 -!- ais523 has quit (Remote host closed the connection). 00:05:58 oklopol: so updating the world does not actually run the block programs? 00:06:02 so anyway basically if you find a block that can execute a lot of code, you might still need a block that computes a specific type of function or your bot will take ages doing that in software 00:06:07 for instance pathfinding is like this 00:06:29 elliott: it does on paper, but the world is designed so that it can usually be optimized awayt. 00:06:30 -!- MigoMipo has quit (Read error: Connection reset by peer). 00:06:31 *away 00:07:04 oklopol: :D your game is not very conceptually pure, i have no idea what the block structure definition would look like at all 00:08:10 it is. a block has a piece of code that it executes at that blocks execution speed, and can call functions specific to that block. 00:08:13 oklopol, what do you actually *study*? 00:08:15 that's all the game is 00:08:22 math, corrently, rather cs type 00:08:46 doing my master's thesis in picture languages, currently doing automata on pics 00:08:51 *currently 00:09:20 currently as in forever from now on, but i was doing cs a year ago, and officially changed only after i finished my bachelor's which was a few months ago 00:09:29 again, oklo month which is anywhere between a day and a year 00:09:34 Picture languages? 00:09:36 november i think 00:09:40 yeah matrices over finite alphabet 00:09:56 oklopol: are you still in your second year :) 00:10:06 without any operations, automata theory in 2d, basically 00:10:12 elliott: no, second year of math tho 00:10:17 oklopol: third? 00:10:28 yeah third year of uni going 00:10:48 i wonder how you and Sgeo can be in the same room without, like, exploding 00:10:51 matter, antimatter, that sorta shit 00:11:01 if you count the cs time, i'm only half a year ahead of the usual scheduly, degreewise 00:11:30 elliott: It is not a bomb. It is a device that is (not) exploding. 00:11:34 zzo38: what. 00:11:35 -!- zzo38 has quit (Quit: zzo38). 00:11:38 yay 00:11:53 oklopol: yes but you have a stupidly large awesome surplus 00:12:01 lol i'm not that good, my master's thesis is going to be complete bullshit for instance 00:12:26 i have an open problem that i decided to solve 00:12:30 and i haven't been able to 00:12:41 even though anyone could do it 00:13:44 oklopol: does your game have gravity 00:13:55 yes, kind of 00:14:24 i mean 00:14:28 oklopol: lame 00:14:31 who likes restricted movement 00:14:32 NOT ME 00:14:35 gravity exists, but you can hover quite far 00:14:37 oklopol: unless you mean like 00:14:43 oklopol: air blocks have their program built to push you down 00:14:47 -!- cheater00 has joined. 00:14:47 i don't want lack of gravity, because i like the idea of falling 00:14:49 oklopol: and you can just hack their program out if you want :D 00:14:53 because that would be... amazing 00:16:47 well see currently there is quite a complicated physics, but i'll probably leave those optional, because i can't imagine others enjoying them. 00:17:15 oklopol: dude, my idea was amazing? leave the physics up to the blocks? 00:17:18 because i seem to be the only man on earth who enjoys learning weird physicses 00:17:21 hacking air to float? 00:17:27 or at least people don't play my cool games :( 00:17:34 oklopol: i want to but you only provide exes on vjn ;o 00:17:35 gimme some .py 00:17:53 -!- cheater99 has quit (Ping timeout: 240 seconds). 00:18:11 elliott: erm yeah, physics are up to the blocks of course 00:18:22 but you don't need air to even be an actual block for that 00:18:26 oklopol: but it should be 00:18:27 obviously 00:18:31 yes, it should 00:18:37 oklopol: the great thing is 00:18:44 oklopol: have an air meter which goes down very quickly 00:18:52 oklopol: then, air blocks just have code to give you air :D 00:19:00 and you can make a vacuum, which will suffocate you 00:19:04 but also let you float 00:19:14 and if you want to breathe but float, you could hack some air blocks' source 00:19:22 oklopol: amazing yes? 00:19:40 yeah at some point i was thinking about air physics, air pressure etc 00:19:59 not suffocation tho, you have to keep eating to survive anyway 00:20:08 oklopol: but then you could just chill in a vacuum 00:20:10 which makes little sense :D 00:20:11 (but you just have a program for that ofc) 00:20:21 oklopol: also bonus: if stuff like falls on top of you, you suffocate 00:20:27 or if you jam your head into stone somehow 00:21:26 head? 00:21:33 * Phantom__Hoover → sleep 00:21:35 oklopol: well as in you 00:21:38 right 00:21:40 the head is metaphorical 00:21:44 right 00:22:27 oklopol: but you could turn yourself into a robot if you wanted right? 00:22:30 artificial head etc. just have you as a brain 00:22:47 you can glue blocks to yourself if you get the glueing component 00:22:56 you inherit components from the blocks you own 00:23:21 you can make yourself into a robot, yes, that's basically what the game is about 00:23:27 oklopol: can i make a perpetual motion machine 00:24:03 well you have your in-game coding window, which is maybe not your primary, but a very important part of your movement. 00:24:44 and there's a high-level clue-based stack language......................... 00:24:52 maybe i shouldn't have mentioned that 00:25:03 oklopol: when can i buy it 00:25:05 :D 00:25:28 oklopol: tomorrow? 00:25:35 i'll try to finish my thesis in february, then start allocating coding time 00:25:49 i have a tiny little coding spark atm, actually 00:25:53 -!- Phantom__Hoover has quit (Ping timeout: 240 seconds). 00:26:02 oklopol: i kinda wanna code it somehow except i'd be terrible :D 00:26:56 go ahead, a proof of concept shouldn't be hard to make 00:27:28 oklopol: no it sounds _really_ hard 00:27:33 :D 00:27:52 oklopol: even doing it in haskell sounds like drudgery :D 00:27:57 oklopol: you should write the whole thing in Clue++ 00:29:13 basically you have a stack language, but there are events, and a command for "use the components X to achieve Y", which should work for simple things like pathfinding very well, and hopefully could manage some slow stupid way for more complicated things 00:29:35 and the language is very high-level, like you can just directly refer to things you see on map 00:29:39 well 00:29:44 oklopol: why stack though 00:29:51 that's not all that high-level, that clue command is much more high-level :D 00:30:13 oklopol: also you should make the code have no text form, clicking blocks to actually put a little line from them to a little point in the code sounds hilariously funsilly 00:30:15 yeah dunno about stack, for some reason it feels natural for that kind of things 00:30:32 well, maybe make a block highlight be, like, a picture of a block and its moore neighbours dimmed 00:30:35 yeah, it should be very untexty 00:30:49 and you can like hover over it with your mouse and it shows you that part of the map with a red border around the block 00:31:36 yeah that's pretty much what i'm going for 00:32:31 but anyway i'll probably publish the physics before starting to code it 00:32:36 oklopol: well then allow me to state the obvious 00:32:43 or at least completely specify them 00:32:43 oklopol: have there be another map, filled with functions 00:32:52 oklopol: you don't ever use words, you just include parts of the code-map 00:32:54 :D 00:33:00 :D 00:33:06 and you can draw a little like 16x16 icon for each block in the code-map 00:33:09 so you could fit a few letters on 00:33:14 or a representative picture demonstrating its operation 00:33:20 and then code is just a sequence of pictures 00:33:24 heh, i wish i didn't find that such a great idea. 00:33:39 oklopol: it's great because it'd show you the dimmed neighbours of that function in the actual code... like you know ... 00:33:43 but yeah i was kinda thinking that, something like an inventory of code blocks 00:33:45 oklopol: if you liked this function, why not try these similar functions... 00:34:27 xd 00:34:31 heh 00:35:22 oklopol: okay but seriously, it would be cool 00:35:26 oklopol: in fact... 00:35:33 yeah but anyway, mainly i'm interested in enemies. 00:35:35 oklopol: those function-squares? 00:35:39 oklopol: should be doors leading into function rooms 00:35:47 haha 00:35:50 oklopol: that's right: individual pieces of code are themselves a map 00:35:54 after all, they're just a bunch of blocks 00:36:01 stop laughing, i am a revolutionary 00:36:31 alrighty 00:36:41 oklopol: so that's how you're doing it, yes? 00:37:17 anyway the thing is i want the game to be fucking scary, you never know if the next block you mine out is a tree that grows 5 blocks at a time for 10 seconds, then explodes 00:37:45 you have to use bots to mine, and try to find ways to do that safely 00:37:53 oklopol: question, is it realtime or turnbased 00:38:47 realtime, a couple moves a second, where a move could be moving to your neighbor cell. (it will actually look rather smooth tho, because you have to look at it all the time.) 00:39:17 like when you start, it's that, of course later on your player block can basically just teleport whereever it wants 00:40:50 oklopol: but time is like... boring? 00:40:54 so linear 00:41:42 it's on the commutative free group with two generators, the second most done to death thing in the mathematical world 00:42:01 Z^2 00:42:12 time i do not mind, however. 00:42:16 oklopol: but time is lame. 00:42:33 oklopol: at least make each second take an amount of time determined by a complex formula 00:43:21 :D 00:43:23 well 00:43:37 time slows down further away from sentient blocks 00:44:21 and comes to a stop, eventually (i would make it never come to a stop due to purity, but that's not very practical) 00:45:41 -!- GreaseMonkey has quit (Quit: ilua). 00:45:51 oklopol: just make it so that some kind of circuit fails if time is going too slowly 00:45:56 and it turns out, everything is made out of this circuit! 00:46:25 elliott: it does 00:46:29 definitely 00:46:40 oklopol: then your problem is solved PURELY 00:46:58 :P 00:47:08 sorry i misread you 00:47:12 " oklopol: just make it so that some kind of circuit fails if time is going too slowly" 00:47:17 somehow i managed to read something like 00:47:33 "doesn't it make certain kinds of circuits fail if time slows down at a certain boundary" 00:47:48 oklopol: :D 00:48:17 because this is a very bad thing if you want to have say a computer: it doesn't just stop when you move away, it might completely break due to time slowing in an unfortunate way in one part of the machine 00:48:46 oklopol: just make the story be that everything is made out of this material or whatever 00:48:59 oklopol: and that its interactions break down when time gets too slow, such that it just sort of warbles on the spot 00:49:05 oklopol: and then starts running again if time is faster 00:49:12 but, 1) these distances are very big, 2) this is a completely documented (or at least consistent) physics thing, so you just have to deal with it. 00:49:17 and you should be able to 00:49:23 then, you can simulate infinite time-slowdown, with a discrete universe 00:49:34 just by ignoring all blocks beyond a certain point 00:49:39 and this is deemed OK by the pure physics 00:49:41 I AM GENIUS 00:50:38 well, anything can be called pure, and somehow implemented in-game, conceptually. although i'm sure this is a rather kill-joy thing to say 00:51:15 oklopol: specify the pure semantics based on the semantics of finite-state machines, x86, Unix, and C 00:51:18 oklopol: SO PURE YET SO PRACTICAL 00:51:29 elliott, cool craftbook has "ICs" that shoot arrows. I'm building a battery of them now 00:51:37 :D 00:52:12 also pvp should be more fun when you can program thousands of blocks to fight each other 00:52:29 oklopol, too many arrow cause lag 00:52:33 network lag 00:52:39 even when they are on ground 00:52:42 this makes no sense 00:52:46 we're talking about my nonexistant game, no lag in that one. 00:52:52 oklopol, ah 00:53:04 oklopol, I was talking about craftbook 00:53:13 (as well) 00:53:28 elliott: your radiation stuff should mutate animals into monsters. just saying. 00:53:30 *ent 00:53:36 whooplers 00:53:51 oerjan: way ahead of you :D 00:54:01 elliott: i didn't see you mentioning that... 00:54:08 my head calculates quickly 00:54:18 oerjan: i was thinking they'd turn into rotting, crazy animals that die easily but are vicious 00:54:29 oerjan: or maybe sometimes they are really hard to kill thanks to radiative superpowers 00:54:37 oerjan: i just couldn't perfect it enough to be worth saying yet :D 00:55:10 all of that feels so small-scale now that i have my game in my head again. 00:55:16 mmmm 00:55:17 my game 00:57:00 another thing i'd like to make is this game where you have an arbitrary monoid, and you can walk on it, dunno what the game is really, or if there is one, i have this marvelous way to project it in 3d 00:57:22 but it can't fit in an irc message 00:57:54 . 00:58:17 oerjan: so do you play MC :D 00:58:47 no he's too busy doing things 00:58:56 no 00:59:11 oerjan: if i giftcoded you it would you play it, it sounds like a hilarious event 00:59:33 no 01:00:46 hello 01:00:50 there is salsa night tonight 01:00:53 with lots of hot women 01:01:44 so which is hotter 01:01:47 oerjan: you would ... reject my purchase??!?!?!?! ;( 01:01:47 the women or the salsa 01:01:50 oerjan: take that insult back 01:01:56 oerjan: you can't do that, that's stealing 01:02:28 elliott: what's going onnn 01:02:37 i'm trying to convince oerjan that he should play minecraft 01:02:50 you might find yourself unable to 01:03:08 i think he's sort of had this thing where he was "siding with me" in not playing minecraft 01:03:17 (whereas i simply didn't care) 01:03:19 i...don't think so 01:03:24 oerjan: are you aware of any alliance with cheater00 01:03:33 that was like way back 01:03:37 he probably forgot already 01:03:39 oerjan: what's your relationship with cheater00? 01:03:47 it would be useless as i would undoubtedly trigger my rsi 01:03:54 cheater00: well i kinda know you for making up bullshit theories to explain random things you see. usually related to yourself 01:03:58 oerjan: rsi enhances the experience 01:04:04 oerjan: immensely 01:04:20 elliott: that's because i am god and everything i say immediately becomes reality... right? 01:04:28 cheater00: yes 01:04:36 oerjan: play with the other hand!!!!!!!!!! 01:04:55 haha yeah the one YOU DON'T USE FOR MASTURBATION :dDDDDDDDDD 01:05:02 i get it 01:05:04 cheater00: none of my hands are entirely free of it 01:05:09 also elliott, the functions of the mouse buttons, can you remap them to the keyboard somehow? 01:05:17 because you mostly only get rsi when you click the mouse 01:05:23 if you just move it around it's much better 01:05:30 surely. but not with minecraft itself 01:05:33 oklopol: :DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 01:05:37 yes. 01:05:41 did you get it too? 01:05:45 the joke is 01:05:51 erm 01:05:52 also it's nice to have them on the mouse 01:05:53 wait 01:05:57 oklopol: yes. 01:06:02 oerjan: i'll pay you, regularly, to play minecraft 01:06:02 cheater00: also it's not _really_ rsi because my feet hurt as well 01:06:11 * Sgeo ills 01:06:13 oerjan: use the other foot 01:06:16 :DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 01:06:17 xD 01:06:21 but it definitely gets worse when i play games 01:06:21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxD 01:06:33 haha yeah the one YOU DON'T USE FOR MASTURBATION :dDDDDDDDDD 01:06:38 :| 01:06:43 is that why you couldn't play mastur minecra minesweeper 01:06:49 minesweeper that one time 01:06:59 -!- zeotrope has joined. 01:07:02 oerjan: but no really 01:07:08 never mind masturbating with the feet.. 01:07:19 it might be a slipped disc? 01:07:20 i remember i told my record 01:07:29 oklopol: 23 times a day? 01:07:29 and oerjan is like LOL goddammit oklo ur so nub 01:07:37 oklopol: your masturbation record? 01:07:39 i can do it in like MINUTE 01:07:43 ha! 01:07:44 lol :( 01:07:49 oerjan gets it down to, like, 20 seconds 01:07:49 and i go well do it and show vid 01:07:52 and he starts 01:07:52 unfortunately it's given him rsi 01:07:54 oklopol: xDDDD 01:07:58 then says nah hands can't do it. 01:08:14 oklopol: i see no reason _whatsoever_ to read your words with the correct interpretation 01:08:18 true story, do you remember oerjan? 01:08:20 although i suspect you might have been encouraging that. sightly. 01:08:20 i mean 01:08:22 *slightly. 01:08:29 the part i said, the others may have added stuff 01:08:51 elliott: no 01:08:53 i didn't 01:08:59 i'm angry at you people for doing that 01:09:07 meanwhile in another channel 01:09:09 i have damaged oerjan's stellar reputation 01:09:10 and just for that i'm never letting you play my game 01:09:16 what router should i buy? 01:09:23 an old openbsd box! 01:09:31 use the other hand! 01:09:37 but that would be more expensive and generate more heat 01:09:48 haha ur mum generate heat 01:09:49 i just want something i can order and plug in ;( 01:09:55 www.dildos.com 01:09:58 haha like a sexual dol 01:10:00 cheater00: censoring usernames = lame 01:10:10 lol c gets it :D 01:10:13 cheater00: also that quote wasn't...funny 01:10:24 `quote 01:10:25 `quote 01:10:25 `quote 01:10:26 `quote 01:10:27 i don't want you quazimodos bothering srs ppl 01:10:28 `quote 01:10:39 cheater00: usernames != channel name 01:10:52 you can still /queery 01:11:03 139) ooh a test to see your procrastination hotspots ill do it later 01:11:04 126) Well yeah, but furthermore unlike, oh, say, an Apple product, you don't have to sign their "we own your sperm" license agreement to GET that SDK and the requisite libraries. ... pikhq: Sure, but it's the only way Apple could get a first-born-son clause into a modern licensing agreement without infringing 01:11:04 109) so a.b.c.d.e.f.g.h.i.j.k.com might be self-relative, but a.b.c.d.e.f.g.h.i.j.k.l.com always means a.b.c.d.e.f.g.h.i.j.k.l.com.? 01:11:04 6) His body should be given to science. He's alive :P Even so. 01:11:04 249) I love the way zzo38's comment was cut off after the f of brainfuck that's just the most hilarious place to cut it off in a discussion about censorshi 01:11:12 cheater00: who would bother doing that 01:11:33 elliott: oklopol 01:11:37 mee 01:11:40 ^ 01:11:56 oklopol talking is a gift to anyone so stfu 01:12:12 in german, gift means poison 01:12:14 yeah just the other day i was talking about bukkake on this channel on programming 01:12:24 what was your gift for christmas??????????????????????? 01:12:25 everyone was like OH GOD WHERES THE OPS ::DOS 01:12:33 oklopol: yeah 01:12:33 i didn't get any really 01:12:36 oklopol: i don't recall oh god wheres the ops :P 01:12:38 oklopol: "about programming" 01:12:38 presents 01:12:46 oklopol: you seriously need to die xD 01:13:11 i'm surprisingly hard to kill 01:13:11 no oklopol is the best 01:13:28 i got this 2tb drive actually 01:13:34 i guess that was sorta a present from my mumma 01:13:36 only 2tb? 01:13:45 my cpu has more cache 01:13:49 afaik 2.5 is the largest drive you can actually buy :p 01:13:51 yes, they didn't have smaller ones 01:13:55 nwb 01:14:00 so i'll have to do with that 01:14:06 what are you gonna run on it 01:14:12 windows 3.11? 01:14:26 i'm not gonna put an os on it 01:14:45 oklopol has a computer with no operating system in it 01:15:06 he turns it on, lets it fail booting, and then tries different keyboard inputs to see if anything happens like on a c64. 01:15:10 :D 01:16:05 this computer has maybe dunno 200gb 01:16:28 200 gb donkey porn 01:16:44 nowadays i usually stream everything 01:17:07 all your donkey porn 01:17:19 i do not have donkey porn on my hd 01:17:32 yeah you stream it all 01:17:33 you can lead a donkey to the stream, but you can't make it drink 01:17:35 oklopol is the registrar ceo for www.donkeyporn 01:17:55 :D 01:18:00 wait what 01:18:01 one of the lesser known toplevel domains 01:18:11 ah there you go 01:18:27 it seems i foresaw the funny 01:18:48 cinemraft! 01:18:51 they had to allow it but chose to keep it under lids 01:19:49 it's banned in most muslim countries though. not because they're donkeys, but because some of them are male. 01:20:33 lol it links femanic there 01:21:20 can't find any dp tho 01:21:49 rule 34 is pretty silly, clearly none of the people advertising it have actually researched the subject 01:22:17 in other news, that is 01:22:20 oklopol: no no it's far more subtle than you believe 01:22:32 oklopol: it's essentially a platonist statement 01:22:41 ohh i get it 01:22:49 oklopol: basically you can't consider 34 along, 35 is just as important 01:22:55 oklopol: porn *exists*, but if porn *doesn't* exist, it will be made 01:23:37 oklopol: the point is: 34 is "For every thing, there _exists_ porn of it." but 35 is "For every thing, if the _extant_ porn of it is has not been _realised_ and distributed yet, then it is _guaranteed_ to be at some point in the future (given that civilisation continues)." 01:23:57 oklopol: i.e., when porn of something is created for which no porn previously existed, it is actually just being _realised_; it already existed in the platonic realm of ideas. 01:24:15 right 01:24:16 therefore, rules 34 and 35 can and do coexist without contradiction; they are both completely true. 01:24:22 a deep philosophical statement. 01:24:30 -!- hagb4rd has joined. 01:25:00 hi folks 01:25:04 hey 01:25:09 we're talking about esolangs 01:25:14 haha yes totally true 01:25:21 yes 01:25:29 i wanted to start explaining clue but ugh 01:25:33 i came to listen 01:25:44 Someone should rule34 Brainfuck 01:25:59 thx anyway oklopol 01:26:29 as long as you didn't come to conquer 01:26:56 clue is pretty awesome tho 01:27:18 clue clue clue 01:27:38 nor to divide 01:27:57 division is quite accepted here 01:28:12 > 3%4 + 1/6 01:28:13 11 % 12 01:28:31 heeey found it www.vjn.fi/oklopol/clue.rar 01:28:37 at least to anything but zero 01:28:41 probably doesn't work with current pythons :( 01:28:46 > 1/0 01:28:47 Infinity 01:28:51 is it? 01:29:04 yeah we do wheels here 01:30:20 -!- FireFly has quit (Quit: swatted to death). 01:30:40 oklopol just has no clue 01:30:54 cluuuuuuuuuuuuuuuuue 01:31:08 every time an error in the official clue imp is corrected, a new u is added 01:31:16 the name is still clue because i'm very smart 01:31:41 unlike others who have no clue 01:31:49 actually me and a uni friend designed a much nicer conditional system but i've been too lazy to implement it 01:31:57 that was like when clue was first implemented 01:32:01 so what was that like last week 01:32:07 dunno 01:32:08 "SKI compiles in about 20 seconds on my machine." 01:32:09 :D 01:32:12 "All this code is mine, don't touch it unless you really want to." 01:32:13 I really want to. 01:32:25 :D 01:32:28 lol 01:32:39 oklopol: so is oklotalk superseded by clue 01:32:44 ilkka made an interp for random or what's it called 01:32:54 should up that 01:32:58 at some point 01:33:30 what's random 01:33:42 http://esolangs.org/wiki/Random? :P 01:33:42 a language on esolang, pretty retarded 01:33:52 oklopol: so is oklotalk 2 clue++ 01:33:54 i think so 01:34:01 hehe 01:34:04 maybe! 01:34:15 oklopol: so what's clue++ 01:34:19 clue where everything is an oklotalk object? :P 01:34:21 feed buridans mules 01:34:24 def funthatreturnsntharg(i): 01:34:25 return lambda*args:args[i] 01:34:27 :D 01:34:28 i like your naming convention 01:34:30 it's hilarious 01:34:42 basically i'd like clue with something like object 01:34:55 oklopol: right, and then you'll code oklOS in it 01:35:03 *s 01:35:18 oklopol: where you write programs by drawing a gui, drawing the result of using this gui, repeat a few times, and give it a few clues as to what operation the program performs 01:35:23 and it spits out a half-broken gui app object 01:35:27 but most importantly, the concept of strategies. 01:35:27 AM I CORRECT 01:36:05 lol 01:36:07 :D 01:36:13 oklopol: so erm is there a way to get clue to print out the function it infers 01:36:44 maybe the compiler has a way, but the code is not very structured 01:36:56 (and of course even if it were, you wouldn't know by reading it) 01:37:02 wait 01:37:07 # functions are applied (using applier and aritiers) randomly to objects, to get new objects 01:37:11 actually random? :D 01:37:33 not in that implementation, i think 01:37:40 afaict it has no actual interface :) 01:37:59 oklopol: hmm i think if you print out the function right before compiling it to a func it would work 01:38:09 but it's not specified, so that could be sensible, probably it's just poetic. 01:38:11 nice article on that topic http://en.wikipedia.org/wiki/Buridan%27s_ass 01:38:45 of course it doesn't have an interface, interfaces are for people who don't have faces exter. 01:39:03 i hope that is convincing enough 01:39:15 -!- Wamanuz has joined. 01:39:16 $ python cluetest.py 01:39:17 19.804610014 01:39:17 3 01:39:21 oklopol: this isn't... imprecise SKI is it? 01:39:28 oh no that's timing info :D 01:39:45 there should be a rather clear separation of compilation and running 01:39:48 "A discrete decision based upon an input having a continuous range of values cannot be made within a bounded length of time." 01:39:50 ...again conceptually 01:40:07 ^ 01:40:24 oklopol: i think i'm gonna try and hack cluetofun to print stuff 01:40:43 erm hrm, i have this vague memory that i considered making a nice output form for funcs 01:40:44 C[B[IOP([1]:0)], B[IOP([2]:0)], B[IOP([3]:0)], B[IOP([[2, 1]]:0), IOP([[2, 3]]:0)], B[IOP([[[3, 2], 1]]:0), IOP([[[3, 4], 5]]:0)], B[IOP([[3, 2]]:0), IOP([[3, 4]]:0)], B[IOP([[1, 0]]:1), IOP([[[2, 1], 0]]:2), IOP([[[[3, 2], 1], 0]]:3), IOP([[[[[1, 2]]]]]:4), IOP([[[[[[1, 2], 3], 4], 5], 6]]:4)]] 01:40:48 maybe i never got to that... 01:40:49 oklopol: does that look like post-inferred code? 01:40:54 or is that the pre-inferring 01:40:55 xD 01:41:00 that's... 01:41:02 inferring = working out actual function from the source 01:41:03 pre 01:41:09 those are just data 01:41:11 are you sure 01:41:13 they are lists 01:41:15 yes 01:41:16 for i in clue.branches: 01:41:16 if i.isbase(): 01:41:16 compile_base(clue.bag,clue.helper_objs,i) 01:41:18 if i.isrec(): 01:41:20 compile_rec(clue.bag,clue.helper_objs,i) 01:41:22 it's after that 01:41:26 1, 2, 3 are the ski functions 01:41:29 -!- Wamanuz5 has quit (Ping timeout: 240 seconds). 01:41:34 so what should i print, clue.bag? 01:41:50 no i don't think so... 01:42:00 can i see the... wait what the fuck maybe i can just dl it 01:42:08 elliott's writing Python? 01:42:18 no, i'm hacking okopython 01:42:21 he's learning from gods 01:42:21 which is a good language 01:42:21 no rapes it 01:42:38 oklopol: why do you use classes, you should write all your python code with functions 01:42:40 :D 01:42:41 hagb4rd: my code, elliott is just reading 01:42:52 elliott: www.vjn.fi/oklopol/python.txt 01:42:57 how about that style? 01:43:09 oklopol: yeah that is quite acceptable, but you still use objects 01:43:58 opening the jar of beauty that is clue.py 01:44:20 def nil(g): 01:44:20 return{'car':nil,'cdr':nil,'length':0}[g] 01:44:20 def cons(x,y): 01:44:22 def _(g):return{'car':x,'cdr':y,'length'1+y('length')}[g] 01:44:24 return _ 01:44:27 oklopol: is this not a more perfect way to implement lists than any other? 01:44:31 *'length':1+ 01:44:43 ofc ideally you'd do your own naturals too for the length 01:44:50 you should probably print code 01:44:53 .code 01:45:33 oklopol: that just prints a lot of None :D so i guess compile_clue is the important func 01:45:51 well you have to umm argh i'll read better 01:45:55 def compile_clue(clue): 01:45:55 def fun(*args): 01:45:55 return call_clue(clue,args,10) 01:45:57 funn=stuff.unvararg(fun,clue.arity) 01:45:59 clue.setcode(funn) 01:46:01 return funn 01:46:03 or not 01:46:13 ah 01:46:27 yeah that funn should be the program i think 01:46:54 erm... 01:46:58 oklopol: yess, but you see it's a python function 01:47:00 so not really printable:) 01:47:09 so compile all 01:47:16 def call_clue(clue,args,depth_lim): 01:47:16 if depth_lim==0: 01:47:16 return ["nothing here"] 01:47:18 value=clue.condcode(*args) 01:47:20 hmm 01:47:22 so condcode has something to do with it 01:47:24 except maybe not 01:47:24 compiles all functions in a piece of clue code, and returns a hashtable with these program 01:47:26 clue.branches 01:47:28 s 01:47:28 it's definitely clue.branches 01:47:33 for i in clue.branches: 01:47:33 if i.istest():continue 01:47:34 if i.value==value: 01:47:36 return call_branch(clue,i,args,depth_lim) 01:47:37 oh right 01:47:38 if i.value==None: 01:47:40 default=i 01:47:41 it's a python function yeah 01:47:42 oklopol: clue.branches is the real code, then? 01:47:44 yessss 01:47:49 i think so yeah 01:47:52 oklopol: but then branch.code is a python function :D 01:47:55 indeed i compile to python code 01:47:58 oklopol: so what's the precompiled version 01:48:00 of branch.code 01:48:03 is there an internal representation 01:48:11 erm fuck 01:48:19 printing branches gives 01:48:20 [B[IOP([1]:0)], B[IOP([2]:0)], B[IOP([3]:0)], B[IOP([[2, 1]]:0), IOP([[2, 3]]:0)], B[IOP([[[3, 2], 1]]:0), IOP([[[3, 4], 5]]:0)], B[IOP([[3, 2]]:0), IOP([[3, 4]]:0)], B[IOP([[1, 0]]:1), IOP([[[2, 1], 0]]:2), IOP([[[[3, 2], 1], 0]]:3), IOP([[[[[1, 2]]]]]:4), IOP([[[[[[1, 2], 3], 4], 5], 6]]:4)]] 01:48:26 which is pretty much what print clue gave :D 01:48:40 what's get_ast? 01:48:46 i have no fucking clue 01:48:51 well 01:48:56 i think that does roughly what you want 01:49:01 actually prints code 01:49:02 try it 01:49:29 oh seemingly 01:49:58 like just get_ast(funcs["ski apply"]) say 01:50:04 rite 01:50:06 oklopol: but wait 01:50:07 my python is too new, would have to correct a lotta stuff 01:50:09 funcs,asts=clue.compile_all(open(cluefile).read(),stuff.funcs) 01:50:19 oklopol: asts suggests that compile_all might actually already return the asts? 01:50:22 ('ski apply', "Condition: ski type?('#0')\nBase branch (0)\n'#0'\nRec branch (1)\nSubast(0,0):['car', ['cdr', '#0']]\nMain ast: '#1'\nRec branch (2)\nSubast(0,0):['cadar', '#0']\nMain ast: '#1'\nRec branch (3)\nSubast(0,0):['pair', ['cadaar', '#0'], ['car', ['cdr', '#0']]]\nSubast(1,0):['pair', ['cadar', '#0'], ['car', ['cdr', '#0']]]\nSubast(2,0):['pair', '#1', '#2']\nMain ast: '#3'\nRec branch (4)\nSubast(0,0):['car', '#0']\nSubast( 01:50:22 1,0):['pair', '#1', ['car', ['cdr', '#0']]]\nMain ast: '#2'\n") 01:50:23 indeed 01:50:23 that just compiles the clues in the code 01:50:24 :D 01:50:27 oklopol: yes 01:50:28 oklopol: it's in cluetest 01:50:30 oh yeah i guess 01:50:30 oklopol: asts contains the asts 01:50:32 lol :D 01:50:34 oklopol: so you already had all this code :D 01:50:35 indeed! 01:50:43 oklopol, always one step ahead of oklopol 01:50:53 i just skipped it, "don't need the ast... now how to convert funcs to ast" 01:51:17 anyway dunno if i print that nicely anywhere 01:51:25 i might just have been satisfied with that 01:51:27 hmm 01:51:35 for k,v in asts.iteritems(): 01:51:35 print '----', k 01:51:35 print v 01:51:37 does fairly well 01:51:43 shommmme 01:51:48 still not really readable though 01:51:49 oklopol: what 01:51:52 show 01:51:54 oh 01:51:54 okay 01:53:15 oklopol: http://sprunge.us/cERU 01:53:22 oklopol: whether you consider this readable or not is down to personal taste. 01:53:35 oklopol: i would, personally, prefer it outputted in a format "like" clue source, except without all the actual clue-y parts, but :) 01:53:50 well, obviously you need to know how clue works internally 01:53:53 hm is id(x) always true or something 01:53:58 ---- more than 3 01:53:58 Condition: id('#0') 01:54:08 no, it's just the identity function... conditions work kind of weirdly 01:54:10 that would seem to me like (x) is only valid if x is true 01:54:14 oklopol: :D 01:54:20 well see 01:54:25 it's not actually a condition, it's a branch 01:54:48 oklopol: but of course. that's why you've called it a condition 01:55:12 you have an expression, and a function on it, then, certain values of that function correspond to certain codes being executed 01:55:18 and there's always a default branch 01:55:27 elliott: yes :D 01:56:00 "deep first with cutoff" 01:56:11 i like that 01:56:36 ah 01:56:51 oklopol: clue is kind of pretty really, you started off with the most obviously readable and beautiful way to write a program possible (just show what it should do and let the computer figure it out), and have managed to make it completely incomprehensible and difficult 01:56:51 after Base branch, it shows (x) in parens, that's the value of the condition leading to that branch 01:56:56 it's skilful 01:56:57 :D 01:57:20 oklopol: so basically, it does a switch statement (ala C) on the result of the condition? 01:57:27 i assume you know what switch is >_> 01:57:43 elliott: yes, that's the whole point, make a beautiful concept really technical and complicated, while technically keeping the basic idea 01:57:50 elliott: yes! :D 01:58:26 but anyway that is a stupid system, and there's a better one coming, it's just so you have *some* way of doing stuff 01:58:34 :D 01:58:39 it's really annoying when you have say multiple recursive branches 01:59:07 oklopol: i really really have to meet you sometime, i get this feeling you're some kinda being of pure energy 01:59:21 who has three modes, programming, mathing, and normal 01:59:30 the latter seems a bit boring though 01:59:35 i'm a pretty normal dude 01:59:49 oklopol: while programming? 01:59:50 you wouldn't notice me on the street 01:59:57 oklopol: that's why i said, three modes 02:00:01 tru, tru 02:00:04 one normal, the other two oklopol 02:00:49 wait wtf are subasts... 02:00:56 i should ask ilkka how all this works 02:01:00 who is ilkka :D 02:01:03 he's probably the only one who gets it 02:01:07 a uni friend 02:01:11 no no no shut up i want to get this 02:01:15 :P 02:01:17 me too 02:01:18 i want to master the clue 02:01:25 why do you say , isn't <> for quoting multi word names 02:01:35 no 02:01:44 it's for stdlib 02:01:52 maybe 02:01:54 :D 02:01:59 oklopol: :D 02:02:00 oklopol: why 02:02:13 ...i don't knwo 02:02:15 *know 02:03:42 ---- make singleton 02:03:45 Condition: id('#0') 02:03:45 Base branch (None) 02:03:45 ['cons', '#1', '#0'] 02:03:45 wtf is this 02:03:47 :D 02:04:00 :D 02:04:06 make singleton conses two arguments together? maybe i don't know what #0 and #1 are... 02:04:45 -!- cal153 has quit (Ping timeout: 240 seconds). 02:04:49 oklopol: make singleturn turns x into [x] 02:04:51 so, lol :D 02:05:02 make singleton ~ {. 1 -> [1] 02:05:02 . [1, 2, 3] -> [[1, 2, 3]]} 02:05:02 make singleton ~ ; cons; #[] 02:05:28 "#[]" 02:05:29 ah 02:05:32 wat 02:05:36 oh is that an implicit param 02:05:39 the idea is it gives the empty list as an arg 02:05:42 :D 02:05:42 when it's actually used 02:05:44 cheater 02:05:47 :D 02:05:54 that's how you do constants 02:06:10 it should figure the constants out ITSELF 02:06:18 nonono 02:06:21 can i just omit the hints entirely 02:06:22 in this 02:06:24 and have it still work 02:06:34 will it just try everything 02:06:38 no! that's not what clue is about 02:06:44 i want a brute force :D 02:06:45 "_":(lambda a:0), 02:06:47 dude 02:06:51 you are such a fucking cheat 02:06:54 clue is about doing the drudge work BUT MAKING IT LOOK LIKE YOU'RE JUST GIVING THE RESULT 02:07:09 that's why it's so fucking awesome 02:07:24 oklopol: you stole "drudge work from me"...bitch 02:07:30 *drudge work" from me...bitch 02:07:31 but i mean it's actually pretty nice to read, for simple functions 02:07:41 so mm yeah it's kinda sex 02:08:02 #for i in asts: 02:08:02 # print i 02:08:02 # print asts[i] 02:08:04 # print 02:08:05 i did, i take things people say and use them. that's what i do. 02:08:06 found at the bottom of cluetest.py 02:08:21 oh 02:08:24 . 02:08:45 import clue 02:08:45 clue=reload(clue) 02:08:45 import stuff 02:08:47 stuff=reload(stuff) 02:08:49 lol 02:08:51 so elegant 02:09:02 yeeeah i'm not really into solving trivial problems in sensible ways :D 02:09:07 TypeError: 'NoneType' object is not iterable 02:09:12 that means my code is insufficiently helpful, right? 02:09:14 clueful even 02:09:23 erm hrm, i... dunno, what did your code say? :D 02:09:41 succ ~ {. 0 -> 1 02:09:41 . 1 -> 2} 02:09:41 succ ~ inc 02:09:45 adding ; #1gives: 02:09:49 File "/Users/ehird/clue/clue.py", line 574, in separate_cond 02:09:49 if l[i][0]=="<" and l[i][-1]==">": 02:09:51 TypeError: 'int' object is unsubscriptable 02:09:53 *; #1 gives: 02:10:15 try adding 02:10:39 oklopol: what. 02:10:45 in the bag 02:10:45 oh wait itshould be 02:10:46 right? 02:10:47 not inc 02:10:52 oh that too maybe 02:10:56 File "/Users/ehird/clue/clue.py", line 640, in compile_all 02:10:56 raise DepthLimitException("depth limit exceeded ("+i+")") 02:10:56 clue.DepthLimitException: depth limit exceeded (succ) 02:10:59 lol ok i'll try too 02:11:03 hehe, yeah 02:11:08 File "/Users/ehird/clue/clue.py", line 648, in compile_all 02:11:08 [i+"("+unfounds[i]+")" for i in compilees if not compilees[i].iscompiled]) 02:11:08 TypeError: exceptions must be classes or instances, not str 02:11:11 oklopol: ...:D 02:11:19 oklopol: you fail at triggering errors 02:11:20 xD 02:11:34 yeeeeeah i use strings as errors, it used to be possible 02:11:40 just frowned upon 02:11:45 i too remember those days 02:11:52 oklopol: frowned upon -- you stole that from me from notch 02:11:54 i hate your guts 02:12:12 oh you came up with that, i see 02:12:23 anyway, gah, can't you get anything to compile? 02:12:43 it shouldn't be *that* hard :( and i'm not saying ur stup i'm saying clue is 02:12:47 oklopol: almost almost almost i can do this 02:13:05 Exception: Can't compile succ() 02:13:06 um okay 02:13:07 why not 02:13:16 huh, 02:13:43 same code? 02:13:57 yeah 02:14:15 succ ~ {. 1 -> 2 02:14:15 . 2 -> 3 02:14:15 . 3 -> 4} 02:14:16 succ ~ ; 02:14:18 added one testcase, didn't help 02:14:32 and compiling crashes huh 02:14:34 oklopol: wait, what is this :. stuff 02:14:41 -!- hagb4rd has quit (Ping timeout: 240 seconds). 02:14:42 is that only for recursive shit 02:14:43 recursion 02:14:45 ignore for now 02:14:48 right 02:14:50 eeeerm 02:14:54 so okay 02:14:56 more than 3 ~ {. 0 -> 0 } 02:14:56 more than 3 ~ {. 1 -> 0 } 02:14:56 more than 3 ~ {. 2 -> 0 } 02:14:57 more than 3 ~ {. 3 -> 0 } 02:14:59 stuff in a {} 02:14:59 more than 3 ~ {. 4 -> 1 02:15:01 . 5 -> 1 } 02:15:03 more than 3 ~ ; #0; #1 02:15:05 wait what 02:15:05 should have the same value of condition func 02:15:07 i should add 02:15:09 another {} 02:15:11 around my other testcases? 02:15:13 as in have each be separate 02:15:15 oklopol: right 02:15:27 and can't make all those 3 numbers into the same thing! 02:15:46 succ ~ {. 1 -> 2} 02:15:46 succ ~ {. 2 -> 3} 02:15:46 succ ~ ; 02:15:49 same can't compile error 02:15:55 Exception: Can't compile succ() 02:15:56 grrrr 02:16:11 hmm maybe i have old python as well 02:16:19 i have 2.6 02:16:24 oh i have 3 versions 02:17:45 * oklopol is waiting for ski to compile 02:17:54 ski compiles fine here at least 02:18:19 oklopol: im gonna try a less ambitious function 02:18:20 "is zero 02:18:21 " 02:18:42 took only a minute to compile that 02:18:55 ---- succ 02:18:55 Condition: id('#0') 02:18:56 Base branch (0) 02:18:57 '#1' 02:18:59 Base branch (None) 02:19:01 '#0' 02:19:03 bitches 02:19:05 succ ~ {. 0 -> 1} 02:19:07 succ ~ {. 1 -> 0 02:19:09 . 2 -> 0} 02:19:11 succ ~ ; #0; #1 02:19:13 note: function is actually is zero 02:19:15 not succ 02:19:16 that's wrong tho, isn't it :D 02:19:17 oklopol: wait 02:19:22 are you sure? 02:19:25 I think None matches anything 02:19:28 erm 02:19:40 oklopol: can i make the condition a constant? 02:19:42 yeah but isn't applied is it 02:19:44 oh 02:19:47 sorry 02:19:48 yeah, that's is zero 02:19:48 right 02:19:48 not succ 02:19:49 as i said 02:19:50 :D 02:19:54 oklopol: can i make the condition a constant 02:19:54 yeah yeah 02:19:59 that... should work, yes! 02:19:59 how 02:20:27 hmm erm 02:20:38 :D 02:20:39 _ is a constant 02:20:41 0 02:20:43 ah indeed 02:20:44 -!- Behold has quit (Remote host closed the connection). 02:20:46 so <_> then 02:20:47 the best smiley 02:20:49 and then # gives you constants 02:20:51 but.... 02:20:57 :D 02:21:03 will it actually use them for condition though 02:21:04 :D 02:21:08 or will it try and condition on inc or something stupid like that 02:21:50 -!- hagb4rd has joined. 02:22:02 File "/Users/ehird/clue/clue.py", line 419, in parse_number 02:22:02 return int(code[:i]),code[i:] 02:22:02 ValueError: invalid literal for int() with base 10: '11-' 02:22:03 oklopol: ... 02:22:09 code: 02:22:10 s zero? ~ {. 0 -> 1 } 02:22:10 is zero? ~ {. 1 -> 0 02:22:11 . 2 -> 0 } 02:22:13 is zero? ~ ; #0; #1 02:22:15 succ ~ {. 0 -> 1 02:22:17 1 -> 2 02:22:19 3 -> 4 } 02:22:21 succ ~ <_>; 02:22:23 note distinct lack of "11-" 02:22:34 xD 02:22:46 i... wish i knew what to say 02:23:11 def parse_number(code): 02:23:11 i=0 02:23:12 while i i+=1 02:23:15 return int(code[:i]),code[i:] 02:23:17 NO LIGHT BEING SHED HERE 02:23:19 haha 02:23:22 yeaaaah 02:23:28 :D 02:23:30 Elliott-Hirds-MacBook-Air:clue ehird$ python cluetest.py 02:23:30 '0' 02:23:31 '1' 02:23:32 '0]' 02:23:34 '11->22->3' 02:23:36 '11->22->3' 02:23:38 '11->22->3' 02:23:40 that's code at each iteration 02:23:42 i have only one question 02:23:44 what. 02:23:46 how is code growing, it's not even touching code 02:23:48 as in 02:23:52 the loop body is literally += 1 02:23:57 oh because a different call 02:23:58 right 02:24:00 so what i'm saying is 02:24:01 i'm laughing my ass off here 02:24:04 ohh 02:24:07 I forgot the . before the next condition 02:24:10 did you notice that? 02:24:14 no you didn't, because your syntax sucks 02:24:20 or did you notice that and are mocking me 02:24:32 Exception: Can't compile succ() 02:24:34 hahaha fuck me 02:24:42 xD 02:24:54 do the order of hints matter? 02:24:54 i'll start playing too 02:24:58 this looks like fun 02:25:07 i think constants have to go last 02:25:08 yes, last is default. 02:25:08 for some reason :D 02:25:12 nope! 02:25:12 oklopol: default condition? 02:25:15 yeah 02:25:25 Exception: Can't compile succ(<_>) 02:25:27 WHY NOT 02:25:57 oklopol: this is the worst language i have ever used ... was gonna say "game i have ever played", my mind can't really view this as a rational activity 02:26:17 def is_function(a): 02:26:17 try: 02:26:17 a() 02:26:18 except Exception,e: 02:26:20 if str(e)[-12:]=="not callable": 02:26:22 return False 02:26:24 return True 02:26:26 oklopol: ... 02:26:28 oklopol: what on earth made you write that 02:26:43 oklopol: did you not consider any of the other 439857349857345 simpler and faster solutions :D 02:26:43 hmm 02:26:56 :D 02:27:10 i think i didn't want to open a browser 02:27:46 my first program compiled just fine, but lemme try succ 02:28:54 poop ~ {. 0 -> 0 02:28:54 . 1 -> 0 02:28:54 . 2 -> 0 } 02:28:56 poop ~ <_> 02:28:59 oklopol: things your shitty language cannot handle: this function 02:29:01 I think I need ; #0 02:29:15 IT WORKED WOOWOWOWOWO 02:29:20 FUCK 02:29:29 see <> means "this is the condition" 02:29:40 so nothing worked when it was used multiple times 02:29:40 oklopol: ...:DDD 02:29:43 oklopol: not "stdlib"? :D 02:29:49 fucking hell 02:29:53 hhaahahahaahaha 02:29:53 NO 02:29:56 your language is the worst 02:30:04 i thought it was pretty stupid mind :D 02:30:11 oh? 02:30:17 what's wrong with that 02:30:23 oklopol: nothing 02:30:27 oklopol: i meant it being used as stdlib 02:30:31 sounded... really dumb 02:30:38 indeed :D 02:30:46 ---- succ 02:30:46 Condition: _('#0') 02:30:46 Base branch (None) 02:30:48 ['inc', '#0'] 02:30:50 PRAISE THE LORD 02:30:51 i just threw it in the air more like, then started considering it word of god 02:31:16 hmhmm do you have negation in this language perchance 02:31:21 or should i just pretend negative numbers don't exist 02:31:37 succ ~ {. 0 -> 1 . 1 -> 2 } succ ~ ; inc 02:31:45 right, yeah 02:31:51 well you can just sub from zero i suppose 02:31:52 succ ~ {. 0 -> 1 02:31:52 . 1 -> 2 02:31:52 . 2 -> 3 } 02:31:54 succ ~ inc; <_> 02:31:56 oklopol: ^ less stupid ver :P 02:32:21 well that's UR opnn 02:32:33 oklopol: now i just have to figure out how to do "is negative?" 02:32:40 xD 02:33:02 see less than 3 function 02:33:08 ~<>? 02:33:10 does this thing have comments 02:33:18 for a proof of nonexistance of comparison operator 02:33:24 oklopol: which less than three function 02:33:27 i see more than three 02:33:28 no less than three :D 02:33:35 erm yeah that 02:33:48 so are there comments 02:33:51 What language is tis? 02:33:52 i mean in clue code 02:33:54 Sgeo: clue 02:33:54 this 02:33:57 ah 02:34:05 you don't need comments! 02:34:09 the code comments itself! 02:34:10 Eso or noneso, it looks noneso 02:34:12 lemmesee... 02:34:13 lol 02:34:21 i doubt it 02:34:38 write a comment and give it a bag... 02:34:43 Sgeo: eso. 02:34:43 Also, linky to info? Is this a new language youre making now? 02:34:47 THIS IS AN COMMENT HERE RIGHT HERE ~ 02:34:47 Ah 02:34:52 oklopol: comments to erase my undone code :D 02:34:57 ohhhh 02:34:59 Sgeo: it's pretty old actually 02:35:01 yeah sorry, nothing for that. 02:35:07 was wondering why you'd need them 02:35:08 oklopol: maybe i'll hack in a _stop peeking here_ 02:35:28 just strip lines that start with # 02:35:33 oklopol: boring 02:35:35 also more work to comment 02:35:42 Sgeo: basically you show a few examples of inputs and outputs in the function, give a basic list of operations to hint the impl what it needs to do, and it figures out the rest 02:35:46 also nymfokitiara says hi 02:35:48 works surprisingly well with sufficiently disciplined use 02:35:49 Ah, old as in, "we're not making it right now" 02:35:49 oklopol: who is that 02:35:57 a human 02:36:01 Sgeo: pretty cool 02:36:03 oklopol: is it a uni guy 02:36:09 i told we were playing with my clues 02:36:10 no 02:36:13 elliott, that sounds awesome 02:36:16 sgeo *g 02:36:20 Sgeo: oh yeah totally is 02:36:20 i don't know uni guys that irc 02:36:22 i'm a fan 02:36:33 "A Clue program is a string consisting only of 0s and 1s. " 02:36:39 Then what are you talking about? 02:36:40 er no. 02:36:41 that's another clue. 02:36:44 oklopol doesn't use the wiki. 02:36:56 i have a language there 02:37:02 made for the purpose of having a language there 02:37:13 Sgeo: example clue code 02:37:14 * Sgeo lols 02:37:15 make singleton ~ {. 1 -> [1] 02:37:15 . [1, 2, 3] -> [[1, 2, 3]]} 02:37:15 make singleton ~ ; cons; #[] 02:37:17 pair ~ {. 1, 2 -> [1, 2] 02:37:19 . [3], [4, 5] -> [[3], [4, 5]]} 02:37:21 pair ~ ; make singleton; cons 02:37:23 Sgeo: pretty obvious to see how that works 02:37:26 the ; stuff is hints 02:37:35 the {. ...} are example inputs -> outputs 02:37:41 but, once you start using recursion, things get slightly more hairy. 02:37:48 oklopol: only slightly! 02:37:54 i think it is pretty obviously the best language? 02:38:14 well, that is obvious ofc 02:38:25 Sgeo: example of recursion, very obvious code here: 02:38:25 Is it implemented? 02:38:26 -!- Wamanuz has quit (Ping timeout: 272 seconds). 02:38:27 ski apply ~ {. 3 -> 3 02:38:27 . [2, 2] -> [2, 2] } 02:38:27 ski apply ~ {:. [1, [1, 2]] -> 2 02:38:29 : [1, 2] -> 2 } 02:38:29 yes 02:38:31 ski apply ~ {:. [[2, [1, 3]], 2] -> 3 02:38:33 : [1, 3] -> 3 } 02:38:35 ski apply ~ {:. [[[3, [2, 2]], [2, 1]], 5] -> [2, 1] 02:38:37 : [[2, 2], 5] -> 2 02:38:39 : [[2, 1], 5] -> 1 02:38:41 : [2, 1] -> [2, 1] 02:38:43 :. [[[3, 1], 1], 1] -> 1 02:38:45 : [1, 1] -> 1 02:38:47 : [1, 1] -> 1 02:38:49 : [1, 1] -> 1 } 02:38:51 ski apply ~ {:. [[[[1, 2], 1], 2], 1] -> 1 02:38:53 : [[[1, 2], 1], 2] -> 1 02:38:55 : [1, 1] -> 1 02:38:57 :. [[[[[3, 2], 3], 2], 3], 1] -> 3 02:38:58 I'm too tired and stressed to think about all that 02:38:59 : [[[[3, 2], 3], 2], 3] -> [2, 3] 02:39:01 : [[2, 3], 1] -> 3 } 02:39:03 ski apply ~ 02:39:05 ski apply ~ pair; car; cdr; cadaar; cadar 02:39:07 Sgeo: yes, it is implemented 02:39:07 clue <3 02:39:11 obviously figuring out that ski apply just takes like a second 02:39:13 the examples illuminate it all 02:39:15 and the hints only make it obvious 02:39:36 btw, if you could write all that as actual ski code, it might make *even more* sense, if possible 02:39:44 * Sgeo is too tired to try to understand anything 02:39:49 and stressed 02:39:49 oklopol: 02:39:56 $ python cluetest.py 02:39:57 -1] wtf 02:39:57 Traceback (most recent call last): 02:39:58 ... 02:40:00 TypeError: 'NoneType' object is not iterable 02:40:04 es I did just say that 02:40:04 oklopol: i don't think it likes negatives 02:40:18 I think I'm going to explode in a Trogdor 02:40:35 I wa recently linked to H*R somehwere, btpobably TVTropes 02:40:48 you can add new commands if you like 02:40:58 i just added what i absolutely needed for ski, and a few other completely random ones 02:41:01 What are the Clue primitives? 02:41:06 comparison would be very nice 02:41:13 Sgeo: there are very few, but you can do stuff with lists and numbers 02:41:15 funcs={"cons":cons, 02:41:15 "car":car, 02:41:15 "cdr":cdr, 02:41:17 "id":identity, 02:41:19 "dec":decrement, 02:41:21 "inc":increment, 02:41:23 "add":add, 02:41:25 "empty":empty, 02:41:27 "is list?":islist, 02:41:29 "_":(lambda a:0), 02:41:31 "compare":compare} 02:41:33 oklopol: 02:41:35 remember how you said 02:41:37 nonexistence of a compare function 02:41:39 well uh 02:41:41 ... 02:41:43 def compare(a,b): 02:41:45 if a==b:return 0 02:41:47 if a return 1 02:41:51 :DDDDDDDDD 02:41:53 oklopol, adding features before he even realised 02:41:59 =P 02:42:00 asdf 02:42:10 what, compare is there? :D 02:42:15 oklopol: EVIDENTLY 02:42:19 * Sgeo compares oklopol 02:42:25 have you written a doc or sth oklopol? 02:42:43 hagb4rd: you're not a regular are ya? :P 02:42:50 :D 02:42:52 normal 02:42:54 oklopol: 02:42:56 if code[0].isdigit(): 02:42:56 return parse_number(code) 02:42:57 but in parse_number 02:43:00 while i but no, i have not 02:43:08 oklopol: i like how you've made sure it can parse such numbers as 3--2-1309324-2-34 02:43:10 there's a reference imp, and there's the ski program 02:43:15 oklopol: yet neglected to actually allow initial - 02:43:16 :D 02:43:27 :D 02:43:32 * elliott fixes 02:43:35 oh man still doesn't work 02:43:36 oh wait 02:43:38 my code was bork 02:43:51 oklopol: also syntax errors don't actually stop the program... 02:43:57 TypeError: compare() takes exactly 2 arguments (1 given) 02:44:04 can this thing actually "do" multi arg conditions 02:44:31 things can take multiple args 02:44:38 ski apply is an example of that 02:44:41 didn't you see it? 02:44:43 oklopol: yeah but 02:44:47 oklopol: can you do where foo takes 2 args 02:44:54 and if so, how do you get clue not to die by trying it with one 02:45:05 that i don't know, because compare has probably never been tried :D 02:45:05 lol 02:45:12 ohhh 02:45:16 well umm 02:45:19 conditions are kinda special... 02:45:23 ...:D 02:45:24 they can not take two args xD 02:45:32 oklopol: if i made a wrapper for compare 02:45:35 that takes it as a two-arg list 02:45:40 oklopol: then would that work? 02:45:42 just have as condition 02:45:46 and compare in bag 02:45:46 it'd have to call pair in the condition of course 02:45:48 oklopol: er how 02:45:50 okay 02:45:51 but how 02:45:51 Take it, take it, take it, I've gont tloco 02:45:56 Sgeo: leave 02:45:59 ~ ; compare 02:46:03 as you already realized 02:46:10 Sorry, just in a weird mood 02:46:36 somehow i thought giving the condition func would make things faster or whatever, but it's just fucking stupid 02:46:41 ---- is negative? 02:46:41 Condition: id('#0') 02:46:41 Base branch (None) 02:46:43 '#1' 02:46:45 Base branch (0) 02:46:47 '#0' 02:46:49 Base branch (1) 02:46:51 '#1' 02:46:53 oklopol: i dont think that'll actually work 02:46:55 *don't 02:46:56 almost there 02:46:57 it doesn't really call compare at ... all 02:46:59 need more testcases? 02:47:06 show code 02:47:07 oh lol my test was wrong too 02:47:24 oklopol: oh my god, it just figured out what zero is 02:47:34 lmao 02:47:35 Condition: id(['compare', '#0', ['compare', '#0', '#0']]) 02:47:36 oklopol: look 02:47:39 oklopol: it's a genius 02:47:46 xD 02:47:55 oklopol: it wanted 0, but despite the fact that it was _given_ 0, 02:47:56 - You are sitting in a chair. - 02:48:00 oklopol: it compares it to itself to get it 02:48:04 oklopol: wait what... 02:48:08 Base branch (-1) 02:48:08 '#1' 02:48:09 Base branch (0) 02:48:10 '#0' 02:48:12 Base branch (1) 02:48:14 '#0' 02:48:16 isn't #0 the param her 02:48:18 e 02:48:18 Wild shiny mon found. 02:48:19 i'm laughing so goddamn loudly right now 02:48:20 ...well whatever :D 02:48:20 Bitching. 02:48:34 elliott: show code? 02:48:37 elliott: have you heard about that embarassing DOS bug in php that they have found monday? 02:48:41 oklopol: i think, if you have 0, 1, and compare, and you want 0, choosing compare(x,x) to get it is an inspired solution 02:48:44 Caught. 02:48:54 cheater00: yes, but i'd rather forget php exists. also the bug is rather subtle and not _all_ that stupid 02:48:54 dos? cheater 02:49:06 elliott: how is that stupid? 02:49:13 cheater00: ? 02:49:17 s//not/ 02:49:41 elliott: how is that not stupid? 02:49:55 Linky? 02:49:57 they copypasted code from someone who didn't know wtf they were doing. 02:50:02 cheater00: no, they didn't 02:50:15 cheater00: it was to do with an edge-case on x87 vs sse 02:50:15 elliott: can i get your negative number parsing code? 02:50:32 if code[0].isdigit() or code[0]=='-': 02:50:32 return parse_number(code) 02:50:33 oklopol: in parse_object 02:50:37 that's it, the rest you already wrote :D 02:50:40 they didn't even write an exhaustive unit test for it which would have taken, only once executed, a minuscule amount of time. 02:50:52 cheater00: unit tests are stupid. 02:50:57 executing them only once is doubly so. 02:50:59 they test units 02:51:02 something they hadn't done 02:51:12 you only need to test code once every time it changes 02:51:14 cheater00: enjoy enumerating every floating point value lol 02:51:25 this ain't 32-bit land 02:51:44 exhaustive doesn't mean every value 02:51:49 exhaustive means every important value 02:52:02 ah, so basically what you are saying is: they should have predicted the bug perfectly 02:52:08 since when are you such a php fanboi? 02:52:12 i hate php, php devs are idiots, but this bug is subtle and not something i would expect anyone to catch. 02:52:18 every decision they make is idiotic. 02:52:25 yes 02:52:28 at least we agree on that 02:52:32 but it's like saying, oh, "john mccain raped me and my sister for five days on end and that's why he's terrible" 02:52:37 no, that's stupid, he's terrible for entirely other reasons? 02:52:46 bad metaphor prize 02:52:48 goes to me~~ 02:52:50 now back to clue 02:52:54 oklopol: okay so i am going to see if it can NEGATE 02:53:00 a little enjoyment hasn't hurt anyone so far 02:53:03 :D 02:54:07 oklopol: so to subtract i use the add function despite the fact thaty ou have decrement :D 02:54:08 *that you 02:54:14 because there's no subtract functin 02:54:15 *function 02:54:34 what bout addin neg numbers 02:54:38 oh wait 02:54:45 oklopol: lol... you can't actually do negate i don't think 02:54:50 oklopol: -x = 0-x = 0+-x 02:54:55 so to do negate with add, you need negate 02:55:07 oklopol: care to try and do negate or subtract as a recursive fn? :D 02:55:32 well you could start incing and deccing in both sides of a pair 02:55:36 until one reaches 0 02:55:43 oklopol: wait what 02:55:45 erm 02:55:52 well something like that, i mean there's a workaround 02:55:54 anyhows 02:55:59 you could just ass sub... 02:56:04 NO 02:56:05 THAT'S CHEATING 02:56:09 :D 02:56:09 this platonic core will be perfect forever 02:56:11 *add btw 02:56:18 oklopol: you write the subtract or negate function (negate is more useful for me fwiw) 02:56:20 elliott, want to get stats on block count so far in building that castle with hmod + worldedit + craftbook? 02:56:25 oklopol: wait, why don't we just use lists of [] 02:56:28 oklopol: to denote naturals 02:56:30 Vorpal: uh sure 02:56:31 elliott, even though it is just a shell it is rather massive 02:57:39 elliott, 596516 stone (note, area uneven, might include 5-10 deep into ground). 62806 obsidian. 968 lightstone. 829 torch. 02:57:46 oh so like 2 minute work 02:57:47 plus a number of other ones 02:57:58 elliott, no, more like half a day of work 02:58:06 3 minute :D 02:58:08 elliott, also some cool redstone stuff :P 02:58:13 elliott, that took time 02:58:23 elliott, like the automated arrow shooting battery 02:58:27 lol 02:58:31 oklopol: so is negate done yet 02:58:37 anyway whats the clue of clue, but making comments useless :p 02:58:44 http://www.vjn.fi/pb/p6778978682.txt 02:59:01 elliott, flip a lever, watch it shoot. Then watch notch poor code for arrows over network lag the thing to hell 02:59:17 oklopol: excuse me, i meant in clue 02:59:27 :P 02:59:36 that was almost as hard 02:59:41 some respect man 03:00:04 oklopol: i just don't see how you can write negate in clue at all :D 03:00:10 i really want to know 03:00:13 you can compare with 0 03:00:19 oklopol: and? 03:00:30 so whether it's negative or positive, you'll find it if you go both directions 03:00:39 erm 03:00:44 that's just comparison with 0 03:00:57 if you know it's negative, then just inc until 0, and inc twice on other track 03:01:11 you'll end up with (0, abs(n)) 03:01:12 what if dont? 03:01:15 i 03:01:21 oklopol: no don't do abs, i'm trying to do abs USING negate :D 03:01:22 fuck you man 03:01:30 you're like 03:01:32 skipping ahead 03:01:41 nono i didn't write abs 03:01:45 i just meant 03:01:50 erm 03:01:56 yeah true 03:02:01 but anyway the algo i gave is just for negate 03:02:13 and it requires a bit of list fiddling, but shouldn't be too hard 03:02:28 oklopol: ok then ... teach me how to recurse :D 03:02:36 i'd love to! 03:02:57 * hagb4rd gets some popcorn 03:03:20 if you have like (three points) a -> b (two points) c -> d 03:03:39 then, a is transformed into c, and a and d are transformed into b 03:03:43 wait wait 03:03:46 i need to brb for ooone sec 03:04:58 oklopol: back 03:05:05 okay, well that's recursion 03:05:07 oklopol: what are points 03:05:08 like 03:05:10 three = :. 03:05:12 two = :? 03:05:17 allya 03:05:21 *ya 03:05:23 good you ask 03:05:27 a and d transformed into b ... what 03:05:36 oh i see 03:06:02 oklopol: so basically, "given f(c) = d, f(a) = b, where c comes from a and b uses a and d"? 03:06:13 :D 03:06:23 yes 03:06:38 obvious right 03:06:40 oklopol: is that ":D how does anyone else but me understand this" :P 03:07:17 well. kind of, i wasn't actually surprised, more like yay ehird so smart i don't have to explain eeeeverything. 03:07:39 oklopol: i feel vaguely insulted :D 03:07:50 that's really all there is to recursion, and it is one of the things i like best about clue 03:07:54 oklopol: ok so base cases are done with onedots 03:07:58 oklopol: and then i have separate blocks with recursion 03:08:00 yarr 03:08:05 right 03:08:09 so (0,x) -> x and (x,0) -> x 03:08:10 btw remember it's just the amt of blocks, you can say ... as well 03:08:13 ...important right 03:08:18 yeah? for this abs subfunction thing 03:08:19 oklopol: wut 03:08:26 what's ... 03:08:26 soooomething like that 03:08:35 ":." = ".:" = "..." 03:08:40 oklopol: ah. :P 03:08:45 oklopol: i bet you were real proud of that 03:08:50 what are FOUR DOTS 03:08:51 :D 03:08:58 examples 03:09:01 general examples 03:09:03 test cases 03:09:24 documentation 03:09:31 oklopol: are five dots like 03:09:32 design documents 03:09:44 what about six dots, are six dots the one-sentence summary of how the code works 03:10:00 :D 03:10:11 maybe five could actually be comments 03:10:13 that would be... 03:10:20 ::. 03:10:32 oklopol: do the order of ~{} blocks matter? 03:10:49 well 03:10:55 now that i've given this thing some thought 03:11:00 i'm pretty sure they don't really 03:11:06 but, i'd but the default case last 03:11:34 what if there is no default case? 03:11:52 good q 03:12:01 leave it empty? 03:12:12 don't specify it, one would assume 03:12:18 i think there will always be one 03:12:27 oklopol: okay so wait what tuple do abs(-5) and abs(5) start out with? 03:12:30 for the loop 03:12:43 which is actually bad for further inference, you should definitely be able to make things fail 03:13:00 well i'd do negate separately 03:13:16 oklopol: okay what tuple do negate(-5) and negate(5) start with :D 03:13:17 help a retard here 03:13:32 well erm 03:13:36 i'd write those separately too 03:13:39 negate positive 03:13:43 negate negative 03:13:45 and then 03:13:53 negate negative starts with (-5, -5) 03:13:54 Console Hacking 2010 Part 2 - Chaos Communication Congress 03:13:59 oklopol: what about negate positive 03:14:00 and the rules is to (inc, inc inc) 03:14:02 Is this stuff that will be educational to me? 03:14:06 I seem to be learning 03:14:28 Sgeo: clue is VERY educational, yes 03:14:31 oklopol: okay wait negative negative, 03:14:36 oklopol: so that goes 03:14:39 (-4, -3) 03:14:43 oklopol, I'm talking about a talk 03:14:43 yes 03:14:44 (-2, -1) 03:14:45 exactly 03:14:46 About PS3 security 03:14:46 (-3, 1) 03:14:47 Sgeo: i know 03:14:51 oklopol: do we keep going? 03:14:54 (-2, 2) 03:14:57 (-1, 4) 03:14:58 (0, 5) 03:14:58 dont try it at home 03:14:58 :DD 03:14:59 oh wow 03:15:04 ok so it's 0,x -> x 03:15:10 yes, do that last 03:15:23 i'm sure you'll be able to translate that to clue 03:15:34 oklopol: hey i don't even need recursion do i 03:15:37 wait do i 03:15:40 oh, yes, i do 03:15:41 don't I? 03:15:42 yes, i do 03:15:48 you just need it for the loop 03:16:10 erm.... 03:16:17 quite hard :D 03:16:22 except you could also just write a program that adds the number to itself, twice 03:16:25 i mean... 03:16:26 wait what 03:16:30 oklopol: ...or that, yes 03:16:31 "just negate it, then" 03:16:34 oklopol: can clue do that? 03:16:39 it certainly can 03:16:46 what it can't do is negate 03:16:49 i mean 03:16:51 if you're not using that 03:16:54 oklopol: right, negate negative is easy 03:16:56 oklopol: negate positive won't be 03:17:14 whreres the difference? 03:17:20 no negate negative won't be easy! 03:17:36 the idea doesn't work, because you'd need to negate so you could negate 03:17:47 you need to add the negation twice! 03:17:50 oh, duh 03:17:53 :D 03:18:11 okay so let's see, i'll write this in a language this is actually easy and obvious in and then translate 03:18:17 f (0,y) = y 03:18:24 f (x,y) = f (x+1, y+2) 03:18:25 SO 03:18:46 f (x,y) = x where x = f (a, b); a = x+1; b = y+2 03:18:59 When it says geohot glitched .. something with the RAM, not entirely sure, do they mean physically? 03:19:08 oklopol: 03:19:09 negate negative ~ {:. a, b -> c 03:19:09 : a+1, b+1 -> c } 03:19:16 oklopol: i just need to fill in this template a few times, right? 03:19:17 erm 03:19:18 *b+2 03:19:24 Yes 03:19:38 "It required really annoying hardware to pull off" 03:19:44 yes, i believe so 03:20:02 and don't forget base case ofc 03:20:28 negate negative ~ {:. -5, -5 -> 5 03:20:28 : -4, -3 -> 5 03:20:28 : -2, -1 -> 5 03:20:30 : -3, 1 -> 5 03:20:32 : -2, 2 -> 5 03:20:34 : -1, 4 -> 5 03:20:35 : 0, 5 -> 5 } 03:20:37 oklopol: is that... correct? 03:20:46 sure, although you don't need that much 03:20:50 erm 03:20:53 noooooo 03:21:04 everything after -4 -3 is excess 03:21:11 the -5 -5 case is not using all that 03:21:15 just one level is given 03:21:20 ah 03:21:31 do i need more than one example? 03:21:32 or will that one do 03:21:40 point is to allow it to just brute force one layer instead of always going to base case 03:21:51 oklopol: btw i disagree with how you indent these things, IMO the : for subcase should be aligned with the . for supercase 03:21:56 then the two x -> ys get aligned 03:21:58 :D 03:22:01 one may do, one may not, i don't really have an intuition for that atm 03:22:44 TypeError: 'NoneType' object is not iterable 03:22:46 yaaaaaay 03:23:21 oh 03:23:25 turns out negative negative != negate negative 03:23:49 ---- negate negative 03:23:49 Condition: is zero?('#0') 03:23:49 Rec branch (0) 03:23:50 Subast(0,0):['inc', '#0'] 03:23:52 Subast(0,1):['inc', ['inc', '#0']] 03:23:54 Main ast: '#2' 03:23:56 Base branch (1) 03:23:58 '#1' 03:24:00 oklopol: holy shit, it actually works. 03:24:26 oklopol: and negate positive is just the same except it's x, 0 and we do dec/dec dec, right? 03:24:27 yeah 03:24:35 i believe this to be the case. 03:24:37 always wondered y -1*1 makes -1.. thats kind of evil 03:24:38 :D 03:24:43 hagb4rd: ...what 03:24:44 yo dawg, i heard you like negation 03:24:48 hagb4rd: x*1 = x 03:25:16 ok so far 03:25:22 hagb4rd: let x = -1 03:25:25 ergo -1*1 = -1 03:25:33 no 03:25:43 umm...yes 03:25:56 hagb4rd: both (-1)*1 and -(1*1) are -1, of course, even if for slightly different reasons 03:25:57 its an axiome..isnt it? 03:26:17 or rather both follow from x*1 = x actually 03:26:48 hagb4rd: x*1 = x 03:26:54 hagb4rd: do you accept that this is true no matter what x is? 03:26:55 1 of x is x. 03:26:56 hagb4rd: yes, x*1 = x is one of the field axioms 03:26:58 x times 1 is x. 03:27:04 yes? 03:27:06 yes elliott.. 03:27:22 hagb4rd: let us suppose that x = -1. so we have x*1 = x. expanding x's value, we have (-1)*1 = (-1). 03:27:25 is that so hard? 03:27:34 -!- zzo38 has joined. 03:27:36 elliott: you needed just one recursion case? 03:27:43 i needed 2 03:27:44 oklopol: yup, guess clue is magical 03:27:47 oklopol: also negate positive works 03:27:53 it is also true that (-a)*b = -(a*b) for all a and b 03:27:56 negate negative ~ {:. -5, -5 -> 5 03:27:56 : -4, -3 -> 5 } 03:27:56 negate negative ~ {. 0, 1 -> 1 03:27:58 . 0, 2 -> 2 03:28:00 . 0, 3 -> 3 } 03:28:02 negate negative ~ ; inc 03:28:04 oklopol: guess i am a better clue programmer than you? 03:28:07 :D 03:28:15 maybe! 03:28:17 oklopol: what's your code 03:28:49 you could have -a*b = b .. isnt it a question of notation? 03:28:50 clue.DepthLimitException: depth limit exceeded (negate) 03:28:51 oh come on 03:28:51 http://www.vjn.fi/pb/p1551824545.txt 03:29:04 hagb4rd: so negative one times two apples is two apples? 03:29:14 hagb4rd: also, you can have 2*2 = 72. 03:29:17 hagb4rd: um -a*b usually parses as -(a*b) 03:29:20 the fact is that * is an operation defined by certain facts about it. 03:29:21 so maybe that's the reason you only needed one 03:29:23 it's kinda random ofc 03:29:34 i think some programming languages violate that, though 03:29:58 thx oerjan.. 03:30:06 oklopol: oh i think i might actually need a non-inner loop version... 03:30:07 for negate 03:30:18 or maybe i just need to give it id 03:30:21 you just check if it's pos or neg and negate 03:30:27 thats the direction i wanted to get it goin 03:30:34 negate ~ {. -1 -> 1 03:30:34 . -2 -> 2 03:30:34 . -3 -> 3 } 03:30:36 negate ~ {. 0 -> 0 03:30:38 . 1 -> -1 03:30:40 . 2 -> -2 } 03:30:42 negate ~ ; negate negative; negate positive; id 03:30:44 oklopol: goes all depth limit, 03:30:46 oklopol: because negate X takes two arguments 03:30:48 I want it to give them both as the same 03:30:50 but i don't know if it's smart enough to 03:30:51 hagb4rd: but it is still true that both the obvious parsing candidates give the same final value 03:31:21 it should certainly be smart enough for that :\ 03:31:26 hmmhmm 03:31:38 also -a*b = b holds for a = -1 or b = 0 03:31:51 i mean it can deduce things like cadar 03:32:29 what's is negative?` 03:32:37 is negative? ~ {. -1 -> 1 03:32:37 . -2 -> 1 } 03:32:37 is negative? ~ {. 0 -> 0 } 03:32:39 is negative? ~ {. 1 -> 0 03:32:41 . 2 -> 0 } 03:32:43 is negative? ~ ; compare; #0; #1 03:32:45 i think it might infer wrong ... 03:32:49 ---- is negative? 03:32:50 Condition: id(['compare', '#0', ['compare', '#0', '#0']]) 03:32:51 Base branch (-1) 03:32:53 '#1' 03:32:55 Base branch (0) 03:32:57 '#0' 03:32:59 Base branch (1) 03:33:01 '#0' 03:33:03 that seems very suspicious to me 03:33:09 seems to work 03:33:12 erm 03:33:27 yeah 03:33:30 are you sure :D 03:33:39 ummmmmmm 03:33:44 no. 03:33:58 is #0 the zeroth arg or is it a zero 03:34:20 i do not know :D 03:34:26 i think it' the zeroth arg 03:34:26 *it's 03:34:27 but that makes like ... no sense 03:34:28 BUT bear in mind 03:34:33 I do have "#0; #1" 03:34:34 so it could be both 03:35:19 oklopol: just tested in console 03:35:21 it is correct 03:35:36 >>> _['negate negative'](-5,-5) 03:35:36 1 03:35:39 ... 03:35:39 :D 03:35:52 oh needs to be [-5,-5] 03:35:57 or not, no 03:36:06 >>> _['negate positive'](5,5) 03:36:06 2 03:36:14 oklopol: you're lying to me about how these constructs work ... or something 03:37:08 oklopol: :/ 03:37:33 oklopol: any ideas :D 03:37:47 umm...... 03:37:50 hmm. 03:38:03 i mean the _actual test case_ is failing 03:38:14 maybe is fucking it up somehow...naw 03:38:41 weirdness man 03:38:53 * elliott tries things 03:39:07 the fact is that * is an operation defined by certain facts about it. <-- so multiplication of a negative and a positive value results in a negative value,yes..it may be a metaphysical question, but i wonder if it's based on a natural law or just another entropy 03:39:20 oerjan: do you have the swatter? 03:39:27 oerjan: it is _really_ desperately needed. 03:40:00 oklopol: ok mine can't even figure out a one-arg negate negative :D 03:40:22 oklopol: i think our implementations are subtly different now :/ 03:40:49 i'll finish mine, and try to come up with why you can't 03:40:52 then 03:41:52 oklopol: gimme your current src tree and i'll diff it against mine 03:42:04 meh meh 03:42:10 oh what you mean clue.py? 03:42:58 oklopol: yes 03:43:00 also stuff.py 03:44:03 okky 03:45:39 http://www.vjn.fi/pb/p2332981772.txt http://www.vjn.fi/pb/p1364929955.txt http://www.vjn.fi/pb/p9712658752.txt 03:46:33 oklopol: okay, you have negate built in obvs 03:46:43 "function should be have" 03:46:44 be have :D 03:47:14 oklopol: the only cluedifferences we have are that i fixed the exception messages differently 03:47:16 *clue differences 03:47:29 cluetest mine is just a bit more featured 03:47:34 print funcs["is negative?"](-7) # --> 3 03:47:36 nice comment 03:48:14 :D 03:48:24 hey i can't get this little pecker to compile 03:48:59 ohh 03:49:01 im stupid lol 03:49:04 have youever felt 03:49:04 stupid? 03:49:14 no wait 03:49:18 clue is still the stupid one 03:49:29 hey 03:49:52 something wrong with parsing maybe, because negate negative works, but negate positive doesn't, even though i just changed signs 03:49:57 maybe my error 03:50:47 oklopol: :D 03:50:51 oerjan.. hmm.. okay.. so if -ab is kind of a short to notation to -1*a*b*.. there is no need to think in cases of negative or positive, right?.. makes sence 03:50:53 oklopol: probably, yes 03:50:56 oklopol: since the recursion is different 03:51:20 it's really not 03:51:55 and it's parsing that fails 03:51:57 aha 03:52:00 i'm just fixin' my negate negative 03:52:02 oklopol: weird 03:52:04 oklopol: what error 03:52:10 as can easily be seen from the error message........... 03:52:17 Traceback (most recent call last): 03:52:17 File "C:\stuff}clue\cluetest.py", line 10, in 03:52:17 funcs,asts=clue.compile_all(open(cluefile).read(),stuff.funcs) 03:52:17 File "C:\stuff}clue\clue.py", line 618, in compile_all 03:52:17 compilees=parse(code) 03:52:17 File "C:\stuff}clue\clue.py", line 596, in parse 03:52:17 clues[i]=stuff_to_clue(tokenized[i]) 03:52:18 File "C:\stuff}clue\clue.py", line 589, in stuff_to_clue 03:52:19 cond,others=separate_cond(helpers) 03:52:19 TypeError: 'NoneType' object is not iterable 03:52:24 what kind of piece of shit wrote this thing 03:52:31 I WANT FUCKING ERROR MESSAGES 03:52:47 the guy was probably like 03:52:48 oklopol: ahh ,yes, i remember that error 03:52:51 hey if you make amistake 03:52:51 oklopol: show me your code? 03:52:54 i remember fixing that 03:52:54 fuck you, you suck 03:52:58 oklopol: i think you forgot to specify clues 03:53:00 you got a name wrong somewhere 03:53:05 check your names 03:53:47 clue.DepthLimitException: depth limit exceeded (really negate positive) 03:54:29 >>> _['negate positive'](5,5) 03:54:30 ['nothing here'] 03:54:30 so 03:54:30 it turns out 03:54:30 i got a name wrong 03:54:30 oklopol: what 03:54:32 >>> _['negate positive'](5,5) 03:54:33 ['nothing here'] 03:54:35 oklopol: what 03:54:38 somewhere 03:54:42 ARE YOU A WITCH 03:54:48 i noticed when i checked my names 03:54:52 oklopol: excuse me 03:54:54 why is it doing that 03:55:04 if depth_lim==0: 03:55:04 return ["nothing here"] 03:55:04 huh 03:55:40 ...que 03:55:48 oh erm hrm 03:55:55 :D 03:56:00 "sorry" 03:56:15 ohh 03:56:17 duh 03:56:18 i made a mistake 03:56:21 and your impl was all like 03:56:22 "fuck you" 03:56:25 "stop making mistakes" 03:57:15 hmmhmm 03:57:23 yeah 03:57:27 it occasionally does that 03:57:51 ---- negate 03:57:52 Condition: is negative?('#0') 03:57:52 Base branch (1) 03:57:53 ['negate negative', '#0', '#0'] 03:57:55 Base branch (0) 03:57:57 ['negate positive', '#0', '#0'] 03:57:59 oklopol: do i win prize 03:58:01 it's not the most user friendly thing 03:58:43 ---- abs 03:58:43 Condition: is negative?('#0') 03:58:43 Base branch (1) 03:58:44 ['negate', '#0'] 03:58:46 Base branch (0) 03:58:48 '#0' 03:58:50 oklopol: can i get prize? 03:59:18 elliot scores 5dots 03:59:44 that's nice 03:59:44 nicer than mine, surely 03:59:44 in my defense, i was just gonna do negate negative, not all of negate 03:59:54 elliott: well i finished before you, so prolly not 03:59:56 wlel 03:59:59 *well 04:00:02 oklopol: did you get abs before me 04:00:05 :( 04:00:11 oklopol: well then 04:00:17 oklopol: i will just have to figure out subtraction 04:00:22 i haven't done abs! 04:00:23 didn't notice that sry 04:00:31 the second mouse gets the cheese 04:00:31 :D 04:00:42 yeah i couldn't have seen how that's done 04:00:56 it's like you... meh i'm not even gonna try 04:01:38 subtract ~ {. 1, 3 -> -2 04:01:38 . 2, 1 -> 1 04:01:38 . -3, -2 -> -1 } 04:01:38 well, that's pretty simple..... except you need to do positives and negatives separately again :D 04:01:39 subtract ~ <_>; add; negate 04:01:43 ... 04:01:44 ---- subtract 04:01:44 Condition: _('#0') 04:01:45 yeah umm 04:01:45 Base branch (None) 04:01:47 ['add', '#0', ['negate', '#1']] 04:01:49 oklopol: sure, i did 04:01:49 i'm a serious fucking retard 04:01:54 yep 04:02:02 oklopol: here's my code 04:02:05 forgot add exists 04:02:11 oklopol: http://sprunge.us/DFfN 04:02:11 :D 04:02:16 oklopol: to be honest add shouldn't exist. 04:02:24 :P 04:02:34 oklopol: in fact, nothing should exist except pairs and one non-pair object 04:02:44 oklopol: no multiple arguments, that's done with pairs 04:02:53 zero? 04:02:59 no, nil or something 04:03:03 you do realize *ski* takes 20 seconds to compile, and functions are executed about a million times when you compile somethin 04:03:04 g 04:03:06 oklopol: indeed, in a sufficiently advanced implementation, functions would be represented as lists in this kind 04:03:07 :D 04:03:19 oklopol: yeah so since it's useless, let's make it good and useless 04:03:54 btw i was close to adding higher order functions to the impl, not really any more work, but would be fucking awesome 04:04:05 i mean just think about the clue definition of map 04:04:20 mmmm 04:04:25 oklopol: see, like i said, do functions as lists 04:04:32 oklopol: then you already have it all :D 04:04:36 just have an apply function 04:04:40 taking an object and an objects 04:04:45 object = pair object object | nil 04:04:58 nah 04:04:58 and "foo" in examples is just a reference to that object ofc 04:05:04 oklopol: whyever not :D 04:05:21 because it's pretty much perfect now 04:05:30 it just needs MORE stuff, and a better conditional 04:05:42 oklopol: this would be more stuff 04:05:42 done 04:05:44 with LESS stuff 04:05:45 hagb4rd: the rule -(a*b) = (-a)*b holds for more than just ordinary numbers, it holds for any ring including those where you cannot distinguish positive and negative elements. 04:07:27 > all [ -(a*b) == (-a)*b | a <- [0 .. 255::Word8], b <- [0 .. 255::Word8]] 04:07:28 Couldn't match expected type `a -> GHC.Bool.Bool' 04:07:28 against inferred ... 04:07:31 eek 04:07:37 oh 04:07:39 heeeeeeey 04:07:41 CLUE BOT :D 04:07:43 > and [ -(a*b) == (-a)*b | a <- [0 .. 255::Word8], b <- [0 .. 255::Word8]] 04:07:44 True 04:07:54 oklopol: but you have no expression syntax :D 04:07:58 so how ya gonna test things 04:08:05 hagb4rd: Word8 being one such ring, arithmetic mod 256 04:08:25 elliott: i'm not proud of this but... clue was supposed to have main 04:08:34 oklopol: ...i'm disgusted 04:08:35 Do you think there should be any BytePusher related stuff in the esoteric programming files archive? 04:08:35 fuck off 04:09:14 elliott: no u 04:09:17 but yeah 04:09:31 oklopol: all you have to do is write another parser then 04:09:31 OMG 04:09:33 that's a bit... impure, really i'd prefer that you can't actually run the programs! 04:09:35 oklopol: or reuse the existing one 04:09:35 ...like now! 04:09:54 elliott: i was thinking 04:10:00 you just give the bot definitions 04:10:05 oklopol: func~{1,2} 04:10:07 and then you can give it mains which are expressions 04:10:08 will the parser parse that? 04:10:13 erm 04:10:14 or maybe func ~ 1; 2 04:10:17 right you would need to parse... 04:10:31 oklopol: basically, what can the parser parse that's nested reasonably :D 04:10:35 apart from list literals 04:10:51 nothing else i suppose 04:10:56 clue doesn't have logical nesting 04:11:10 oklopol: recursion duh 04:11:16 oklopol: ok if you just extend the parser a tiny bit 04:11:17 we can have 04:11:18 i mean in syntax 04:11:24 every expression is parsed as 04:11:26 foo~{...} 04:11:27 -!- azaq231 has joined. 04:11:28 where ... is the expr 04:11:29 so you can enter 04:11:30 and by logical i meant control 04:11:40 or what's it called 04:11:43 non-data 04:11:58 :. func, 1, x, 2 -> result; func2, 34 -> x 04:11:59 that's 04:12:03 func(1, func2(34), 2) 04:12:07 erm 04:12:10 :. func, 1, x, 2 -> result : func2, 34 -> x 04:12:11 ofc 04:12:39 yeah you could have something like that in a bot 04:12:50 oklopol: i mean all you have to do is keep strings you can't parse 04:12:55 then 'foo~{'+x+'}' 04:12:58 oklopol: i mean you don't need to write a parser 04:13:04 this gives you expressions for FREE 04:13:26 -!- azaq23 has quit (Ping timeout: 272 seconds). 04:13:53 or you could just have somekinda ugly sexp syntax 04:14:00 in the bot i mean 04:14:07 is that not what you're talking about 04:14:15 oklopol: well yes 04:14:21 oklopol: but this way you get to reuse almost the existing parser 04:14:26 so it's SO MUCH MORE CONVENIENT? 04:14:43 well right, so do it :P 04:14:45 i want the bot! 04:15:17 heeeey i could implement quicksort! 04:15:25 i wonder when i implemented that last 04:15:46 oklopol: is that even possible in clue 04:15:56 erm, why wouldn't it be? 04:16:02 it's a pretty high-level language 04:16:16 (;;;;;;;;;;D) 04:18:20 hmm, why can functions only return one value 04:18:21 ... 04:18:26 that's fucking stupid 04:18:29 oklopol: workin on the bot 04:18:30 and lol 04:18:31 just return a list 04:18:47 yeah i sort of came up with that 04:18:57 it's just fucking stupid 04:20:12 -!- azaq231 has quit (Changing host). 04:20:12 -!- azaq231 has joined. 04:20:24 oklopol: take a look at my amazing ast representation 04:20:28 [is zero?('#0')] <>(0) =>{0,0}:['inc', '#0'] ; {0,1}:['inc', ['inc', '#1']] ; ;; <= '#2' ;; !.(1) => '#1' ;; 04:20:37 irc optimised 04:20:48 hahahaha wow that is the worst ever :D 04:20:54 :P 04:21:02 * elliott makes less ghetto 04:23:28 [is negative?('#0')] .(1) => ['negate negative', '#0', '#0'] | .(0) => ['negate positive', '#0', '#0'] 04:23:31 oklopol: it's getting better! 04:24:01 nicenice 04:24:53 oklopol: what _is_ the "main ast" anyway, for a recursion 04:25:28 i think it's default branch, but... umm.... 04:25:33 wait waht 04:25:50 i guess it's the part that calculates actual result 04:26:05 oklopol: what :) 04:26:07 then there's special asts that calculate subinputs from input 04:26:09 ah 04:26:38 also, i can't get pivot to compile, and i'm not sure it's a coding error...... :D 04:28:11 ---- negate positive 04:28:11 [is zero?('#0')] 04:28:11 |^(0) => '#2' <= {(0,0): ['dec', '#0']; (0,1): ['dec', ['dec', '#1']]; } 04:28:13 |.(1) => '#1' 04:28:16 oklopol: this is actually a nicer syntax in general xD 04:29:00 oh 04:29:15 actually it was a coding error, and it compiles in a microsecond 04:29:16 what do oyu mean 04:29:19 *you 04:29:22 nicer than what 04:29:41 oklopol: than get_ast 04:29:43 which is hideous 04:29:44 this is my replacement 04:29:45 ghetto_ast 04:29:49 oh, well surely 04:30:06 get_ast is horrible 04:30:27 that was just a quick thingie so i could see what was going on, i think 04:30:29 hmm 04:30:48 or maybe i did give it some thought, don't really remember, if i did, it was bad touhght. 04:30:50 *thought 04:31:10 ---- is zero? 04:31:10 [id('#0')] 04:31:10 |.(0) => '#1' 04:31:12 |.(_) => '#0' 04:31:14 this is actually starting to make sense :D 04:31:26 oklopol: do Clues know what their constants are? 04:31:27 heh 04:31:27 i'd like to show them 04:31:45 hmm 04:31:54 look in the bag? 04:31:59 :D 04:35:04 oklopol: 04:35:05 ---- subtract 04:35:05 [_(#0)] 04:35:06 |.(_) => add(#0, negate(#1)) 04:35:10 ---- negate 04:35:10 [is negative?(#0)] 04:35:12 |.(1) => {negate negative}(#0, #0) 04:35:14 |.(0) => {negate positive}(#0, #0) 04:35:20 oklopol: i think i win 04:35:27 <- like 04:35:27 -!- Mathnerd314 has quit (Quit: ChatZilla 0.9.86-rdmsoft [XULRunner 1.9.2.12/20101026210630]). 04:35:58 ---- negate positive 04:35:58 [is zero?(#0)] 04:35:58 |^(0) => #2 <= {(0,0): dec(#0); (0,1): dec(dec(#1))} 04:35:59 |.(1) => #1 04:36:03 i can even understand that if i try hard enough :D 04:36:22 oklopol: so um constants are _not_in the bag 04:36:24 *_not_ in 04:36:42 aha 04:36:43 helper_objs 04:36:59 oh lol 04:37:28 somehow i think i should optimize this thing, i've been compiling pivot for a couple minutes now 04:38:03 it's incredibly hard to rip a list open, since from the program's standpoint that's not in anyway more sensible than adding stuff to it. 04:38:27 i'm going to make it more sensible, but because i need to do it in a pure an extensible way, that's easier said than done 04:38:58 oklopol: could i actually rewrite these constanty things to their val... nah 04:39:00 too lazy 04:40:32 [is zero?(#0)] |^(0) => #2 <= {(0,0): dec(#0); (0,1): dec(dec(#1))} |.(1) => #1 04:40:36 [id(#0)] <= [0, 1] |.(0) => #1 |.(_) => #0 04:40:39 think that's about as nice as these are gonna get 04:42:51 oklopol: so um 04:42:54 oklopol: wanna write a parser for this 04:43:03 .D 04:43:34 yeeeeeeeeeah totally 04:43:49 oklopol: expr := '#' nat | int | (string_without_spaces | '{' string '}') '(' args ')' 04:43:55 where args is comma-separated expr 04:43:58 Where is the lid? 04:43:59 oklopol: c'mon, it'll be fuuun :D 04:44:01 Oh where is the lid? 04:44:09 Where is the, where is the, where is the liiiid? 04:44:49 oklopol: ok i'll write the parser, but you have to tell me how lovely i am for four days after that 04:45:50 will do man 04:46:05 Sgeo: liiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii 04:48:08 i need a better computer 04:48:28 no but seriously i need to optimize this thing, it's kinda ridiculously slow atm :D 04:48:41 (or my code is wrong) 04:48:50 oklopol: i just realised that your language is so awesome that you don't even need {} 04:48:53 to group spacey names 04:49:19 indeed you don't 04:49:25 [is negative?(#0)] |.(1) => negate negative(#0, #0) |.(0) => negate positive(#0, #0) 04:49:28 flexibility yo 04:51:09 return ('a',n,a),s 04:51:09 anas :D 04:53:46 >>> park('is zero?(#0) this is a comment')[0] 04:53:46 ('a', 'is zero?', [('v', 0)]) 04:53:54 oklopol: note my cunning disregard for trailing text providing useful comment functionality 04:54:09 hm wait don't actually need #n here 04:54:21 YES 04:54:31 i managed to compile a tiny helper function for pivot 04:54:45 oklopol: should i require commas between arguments 04:54:48 it's so last year? 04:54:55 it's kinda last year yeah 04:55:11 i should probably remove some commas from clue 04:55:36 i mean from data 04:55:50 i will in ghetto_ast 04:57:20 [id(compare(#0 compare(#0 #0)))] <= [0 1] |.(-1) => #1 |.(0) => #0 |.(1) => #0 04:57:22 pure beauty 04:58:16 why does it consistently add that extra computation, i will never understand 04:58:37 elliott, you didn't punch me. Why didn't you punch me? 04:59:04 arrrrrrrrrrrrrrrrrrgh 04:59:22 i need to reimplement this fucker in a faster language, with a less brute force algo 04:59:54 oklopol: ok quick does clue support adding things to a funcs dict 04:59:54 like 04:59:56 incremental compilation 05:00:27 can you get cons to caaar 0, [[1], [2], [3]] -> [[1], [2], [0, 3]] to compile? 05:00:53 oklopol: what :D 05:00:55 the funcs dict is a python dictionary.... 05:00:59 yesyes 05:01:00 i mean 05:01:02 i have some func 05:01:03 s 05:01:05 i have some new clue code 05:01:09 can i add its compilation to func 05:01:10 cons to caaar ~ {. 0, [[1], [2], [3]] -> [[1], [2], [0, 3]] } 05:01:15 assuming it uses the stuff always in funcs 05:01:22 if you can compile that, you're my hero 05:01:28 oklopol: well my impl is the same as yours, or do you want me to fiddle with hints 05:01:35 if so, i will, just as soon as i get cluebot working, which will be soon 05:01:45 you have an impl for that? 05:02:09 but yeah i do want you to fiddle with hints 05:02:32 i always meant for it to be really hard to get things to compile, but i just plain can't come up with a way to do that :D 05:02:42 well, maybe some reeeeeeeally roundabout way 05:03:13 i mean you can write sequential code if you like ofc 05:03:20 oklopol: oh fucking god, compile_all is a bitch 05:03:21 that's just kinda tedious 05:03:33 i'm sure it is, why? :D 05:03:33 oklopol: isn't there something to like...fuck 05:03:36 oklopol: okay question um 05:03:52 oklopol: compile_all... can you use it on a predone funcs? 05:03:53 I think so 05:04:25 i think you can separate parsing if you like 05:04:32 but i don't know what you're supposed to call then 05:05:45 def run(coeducational): 05:05:45 asts.update(clue.compile_all(coeducational, funcs)[1]) 05:05:48 thought koed was too cliche 05:06:41 okay, now it compiles in 4 seconds 05:06:58 cons to caaar that is.... 05:07:33 i used to use koed because it's nice to write 05:07:40 koedkoedkoedkoedkoedkoedkoedkoedkoed 05:08:15 >>> cabinetoflaughter('is negative?(-1)') 05:08:15 's' 05:08:18 evaluation function: not so good 05:08:47 :P 05:08:58 Do you know the Unolympics? 05:10:34 * Sgeo wonders what Inventables stuff are good to just have fun with 05:11:07 cluebot starting 05:11:42 zzo38: nope 05:11:44 oklopol: cluebot nick is taken :D 05:11:45 oklopol: let's try us 05:11:47 *uh 05:11:55 oklopol: larc 05:12:06 oklopol: cluebot -> cluebat -> luser attitude readjustment clue 05:12:26 that's...... perfect., 05:12:54 oklopol: That's OK, I don't know either. 05:13:21 zzo38: what do you know then? 05:13:46 oklopol: larc is registered :D 05:13:57 oklopol: luatre then 05:14:02 LUser ATtitude REadjustment clue 05:16:02 oklopol: so I'm thinking, for luatre commands, 05:16:04 oklopol: It is just idea... make Unolympics with difference from Olympics, with events such as: * Circular reasoning * Judge bribing * Flagpole sitting * Beer drinking contest * Watch TV all channels at once by changing the channels really fast * You are allowed to use any drugs you want in order to win 05:16:12 oklopol: three dots evaluates, four dots defines 05:16:14 oklopol: five dots looks up 05:17:32 six dots is just for testing 05:17:40 seven dots means you win immediately 05:17:52 elliott: um it's lart not larc 05:17:56 t for tool 05:17:58 oerjan: luser attitude readjustment clue 05:18:01 oerjan: you silly 05:18:06 cluebot -> cluebat -> luser attitude readjustment clue 05:18:11 ARRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRGH FUCKING CLUE IMPLEMENTATION 05:18:16 but lart is already the same as a cluebat 05:18:18 who the fuck as written this piece of shit 05:18:30 oerjan: no shit 05:18:31 i'm gonna kill that little homo 05:18:33 oerjan: it's a pun 05:18:36 oerjan: heard of them? 05:19:01 NO SUCH THING 05:19:12 -!- luatre has joined. 05:19:16 :. butts 05:19:25 -!- luatre has quit (Remote host closed the connection). 05:19:30 -!- luatre has joined. 05:19:31 :. butts 05:19:35 ... buts 05:19:38 :(( 05:19:46 -!- luatre has quit (Remote host closed the connection). 05:19:50 -!- luatre has joined. 05:19:52 :. sdfsdfsdf 05:19:54 what 05:19:57 oh 05:20:16 -!- luatre has quit (Remote host closed the connection). 05:20:20 -!- luatre has joined. 05:20:22 :. asdf 05:20:25 what 05:20:41 oh 05:20:56 -!- luatre has quit (Remote host closed the connection). 05:21:00 -!- luatre has joined. 05:21:01 :. asdf 05:21:04 ffwef[kgsfdhiok 05:21:10 -!- luatre has quit (Remote host closed the connection). 05:21:14 -!- luatre has joined. 05:21:16 :. a sdf 05:21:18 what\ 05:21:21 :. asdf 05:21:37 zzo38: luatre will not respond 05:22:06 O, I didn't know that. 05:22:10 -!- luatre has quit (Remote host closed the connection). 05:22:16 -!- luatre has joined. 05:22:16 :. abc 05:22:17 lookup! 05:22:21 what 05:22:27 ... abc 05:22:27 lookup! 05:22:31 .... abc 05:22:35 ...:D 05:22:41 -!- luatre has quit (Remote host closed the connection). 05:22:44 -!- luatre has joined. 05:22:46 Lookup what? 05:22:49 yeah umm okay the pivot function may not be implementable :D 05:22:51 :. x 05:22:51 lookup! 05:22:56 i mean, in any sensible way at least 05:23:16 fucking hell :D 05:23:25 :D 05:23:28 -!- luatre has quit (Remote host closed the connection). 05:23:32 -!- luatre has joined. 05:23:33 :. tarski 05:23:34 eval! 05:23:34 tarski 05:23:38 :: foo 05:23:38 define! 05:23:38 foo 05:23:40 ::. lookup 05:23:40 lookup! 05:23:40 lookup 05:23:42 -!- luatre has quit (Remote host closed the connection). 05:23:49 it doesn't really have to do all that much... 05:23:55 what, the bot? 05:24:05 no i mean pivot 05:24:07 right 05:25:18 -!- luatre has joined. 05:25:31 -!- zzo38 has quit (Quit: ). 05:25:33 :. cons(1 []) 05:25:34 -!- luatre has quit (Remote host closed the connection). 05:25:47 -!- luatre has joined. 05:25:49 :. cons(1 []) 05:25:50 maximum recursion depth exceeded in cmp :( 05:26:01 -!- luatre has quit (Remote host closed the connection). 05:26:05 -!- luatre has joined. 05:26:06 :. cons(1 []) 05:26:07 -!- luatre has quit (Remote host closed the connection). 05:26:19 -!- luatre has joined. 05:26:20 :. add(1 2) 05:26:50 -!- luatre has quit (Remote host closed the connection). 05:26:57 -!- luatre has joined. 05:26:58 :. add(1 2) 05:26:59 : cannot concatenate 'str' and 'int' objects :( 05:27:56 hmm. 05:27:57 -!- luatre has quit (Remote host closed the connection). 05:28:35 wtf http://i.imgur.com/vymTu.jpg 05:28:42 (r/pics) 05:29:28 :DDDD 05:29:38 that is the best 05:29:40 at 5:30 05:31:04 -!- luatre has joined. 05:31:05 :. add(1 2) 05:31:05 3 05:31:09 :. cons(1 []) 05:31:10 exceptions.RuntimeError: maximum recursion depth exceeded in cmp :( 05:31:16 :( 05:32:22 -!- luatre has quit (Remote host closed the connection). 05:32:27 -!- luatre has joined. 05:32:28 as far as pieces of shit go, this program is one; i don't mind the lack of error messages really, but fucking hell i can't anything compiled :D 05:32:28 :. cons(1 []) 05:32:28 [1] 05:32:33 :. cons(1 [2 3]) 05:32:33 exceptions.RuntimeError: maximum recursion depth exceeded in __instancecheck__ :( 05:32:51 i think i compiled stuff more complicated than pivot at some point 05:32:54 dunno what happened 05:32:55 :. [1 2 3] 05:32:56 exceptions.RuntimeError: maximum recursion depth exceeded in __instancecheck__ :( 05:32:58 hmm 05:33:11 :.sdjfkdjfkjsdf 05:33:15 :SD:Sd.fDD:DDDD 05:33:58 -!- luatre has quit (Remote host closed the connection). 05:34:02 -!- luatre has joined. 05:34:05 :. cons (1 [2 3]) 05:34:06 [1 2 3] 05:34:26 neato 05:34:31 :: is zero? ~ {.0->1} is zero? ~{.1->0 .2->0} is zero? ~ ; #0; #1 05:34:32 is zero?: [id(#0)] <= [0 1] |.(0) => #1 |.(_) => #0 05:34:41 :. is zero? (-1) 05:34:41 i'm going to compile pivot overnight and see if something happens 05:34:42 0 05:34:43 :. is zero? (0) 05:34:44 1 05:34:45 :. is zero? (1) 05:34:46 0 05:34:51 ::. is zero? 05:34:51 is zero?: [id(#0)] <= [0 1] |.(0) => #1 |.(_) => #0 05:34:53 ::. cons 05:34:54 exceptions.KeyError: 'cons' :( 05:34:56 :D 05:34:58 ::. is zero? 05:34:58 is zero?: [id(#0)] <= [0 1] |.(0) => #1 |.(_) => #0 05:35:02 oklopol: admire please? 05:35:22 nice 05:35:36 * elliott fiddles 05:35:39 -!- luatre has quit (Remote host closed the connection). 05:35:44 -!- luatre has joined. 05:35:47 oklopol: did i mention that my expression syntax is awesome 05:35:55 oklopol: it's literally just 05:35:58 [id(#0)] <= [0 1] <<< this is like what args it gets or? 05:36:01 or constants 05:36:03 oklopol: constants, yeah 05:36:09 oklopol: feed it something recursive 05:36:28 expr := int | '[' expr* ']' | name '(' expr* ')' <----- the entire expression syntax 05:36:30 that's rather verbose, but k 05:36:33 with whitespace being irrelevant except to separate 05:36:41 huh 05:36:44 oklopol: what is, recursive stuff? 05:36:48 or the way to show constants 05:36:57 recursivity is verbose 05:37:00 in clue 05:37:01 in general 05:37:01 yeah well :P 05:37:07 but yeah let's see 05:37:40 erm so i don't really see how that syntax works if i'm supposed to use that for def as well 05:37:49 oklopol: :: foo 05:37:51 oklopol: just remove all newlines 05:37:51 or do i just write normal code 05:37:53 yes 05:38:00 ... 2 05:38:01 2 05:38:05 oklopol: threedots = expression 05:38:07 oklopol: fourdots = clue 05:38:13 rrright 05:38:14 oklopol: fivedots = look up the ast of this function i give 05:38:22 oklopol: guess how many lines cluebot.py is, note that my replacement for get_ast is in there (not in clue.py), also the parser and evaluator for my expression language, and all the irc code :| 05:38:27 * elliott coding skillz 05:41:20 .:. parity helper ~ { . 0, 0 -> 0 . 0, 1 -> 1 } parity helper ~ { :. 5, 1 -> 0 : 4, 0 -> 0 :. 3, 0 -> 1 : 2, 1 -> 1 } parity helper ~ ; compare; #0; #1; sub 05:41:20 Exception: Can't compile parity helper(sub) :( 05:41:24 that'll never compile 05:42:03 oklopol: no sub 05:42:07 oklopol: i can add it if you want me to cheat 05:42:11 do 05:42:38 :: sub ~ {.1,3->-2 .2,1->1 .-3,-2 -> -1} sub ~ <_>; add; negate 05:42:39 Exception: Can't compile sub(negate) :( 05:42:43 oh 05:42:49 this will be fun 05:43:25 :: is negative?~{.-1->1 .-2->1} is negative?~{.0->0} is negative?~{.1 -> 0 .2 ->0} is negative? ~ ; compare; #0; #1 05:43:26 is negative?: [id(compare(#0 compare(#0 #0)))] <= [0 1] |.(-1) => #1 |.(0) => #0 |.(1) => #0 05:43:47 can't you just add it as a primitive :D 05:43:56 : negate negative ~ {:. -5, -5 -> 5 : -4, -3 -> 5 :. -4, -3 -> 5 : -3, -1 -> 5 :. -3, -1 -> 5 : -2, 1 -> 5 } negate negative ~ {. 0, 1 -> 1 . 0, 2 -> 2 . 0, 3 -> 3 } negate negative ~ ; inc 05:43:59 shit 05:44:01 :: negate negative ~ {:. -5, -5 -> 5 : -4, -3 -> 5 :. -4, -3 -> 5 : -3, -1 -> 5 :. -3, -1 -> 5 : -2, 1 -> 5 } negate negative ~ {. 0, 1 -> 1 . 0, 2 -> 2 . 0, 3 -> 3 } negate negative ~ ; inc 05:44:01 Exception: Can't compile negate negative(is zero?) :( 05:44:20 :: is zero? ~ {.0->1} is zero?~{.1 ->0 .2->0} is zero?~; #0; #1 05:44:21 is zero?: [id(#0)] <= [0 1] |.(0) => #1 |.(_) => #0 05:44:23 :: negate negative ~ {:. -5, -5 -> 5 : -4, -3 -> 5 :. -4, -3 -> 5 : -3, -1 -> 5 :. -3, -1 -> 5 : -2, 1 -> 5 } negate negative ~ {. 0, 1 -> 1 . 0, 2 -> 2 . 0, 3 -> 3 } negate negative ~ ; inc 05:44:24 negate negative: [is zero?(#0)] |^(0) => #2 <= {(0,0): inc(#0); (0,1): inc(inc(#1))} |.(1) => #1 05:44:36 :D 05:44:38 this is beautiful 05:44:52 :: negate positive ~ {:. 5, 5 -> -5 : 4, 3 -> -5 :. 4, 3 -> -5 : 3, 1 -> -5 :. 3, 1 -> -5 : 2, -1 -> -5 } negate positive ~ {. 0, 1 -> 1 . 0, 2 -> 2 . 0, 3 -> 3 } negate positive ~ ; dec 05:44:52 negate positive: [is zero?(#0)] |^(0) => #2 <= {(0,0): dec(#0); (0,1): dec(dec(#1))} |.(1) => #1 05:45:04 i like how the ast dumps are nicer than the actual code 05:45:12 no they aren't 05:45:19 :: negate ~ {. -1 -> 1 . -2 -> 2 . -3 -> 3 }negate ~ {. 0 -> 0 . 1 -> -1 . 2 -> -2 }negate ~ ; negate positive; negate negative 05:45:20 negate: [is negative?(#0)] |.(1) => negate negative(#0 #0) |.(0) => negate positive(#0 #0) 05:45:26 :: sub ~ {.1,3->-2 .2,1->1 .-3,-2 -> -1} sub ~ <_>; add; negate 05:45:27 sub: [_(#0)] |.(_) => add(#0 negate(#1)) 05:45:28 oklopol: enjoy sub 05:45:31 they are not nearly as nice 05:45:36 thx 05:45:43 .:. parity helper ~ { . 0, 0 -> 0 . 0, 1 -> 1 } parity helper ~ { :. 5, 1 -> 0 : 4, 0 -> 0 :. 3, 0 -> 1 : 2, 1 -> 1 } parity helper ~ ; compare; #0; #1; sub 05:45:44 parity helper: [id(#0)] <= [0 1] |.(0) => #3 |^(_) => #4 <= {(0,0): sub(#2 #1); (0,1): compare(#1 #3)} 05:45:49 erm what 05:45:53 happened 05:46:10 huh. 05:46:30 oklopol: look right? :P 05:46:52 :. parity helper (5, 3) 05:46:53 ValueError: substring not found :( 05:47:03 what 05:47:05 i'm... too tired 05:47:08 :. parity helper(5,3) 05:47:08 ValueError: substring not found :( 05:47:09 oh 05:47:11 oh 05:47:12 oklopol: commas duh 05:47:14 :. parity helper (5 3) 05:47:14 we don't do commas ere 05:47:14 0 05:47:14 here 05:47:19 :. parity helper (5 4) 05:47:20 0 05:47:22 :. parity helper (3 4) 05:47:23 0 05:47:24 :. parity helper (5 1) 05:47:24 0 05:47:25 :. parity helper (0 0) 05:47:26 0 05:47:28 :. parity helper (5 0) 05:47:29 1 05:47:29 :. parity helper (-2 1) 05:47:29 RuntimeError: maximum recursion depth exceeded in __instancecheck__ :( 05:47:33 ...:D 05:47:36 :. parity helper (3 0) 05:47:36 1 05:47:39 :. parity helper (3 1) 05:47:39 0 05:47:42 okay it works 05:47:43 what's parity helper(-2 1) meant to be 05:47:48 an error 05:48:28 oh good 05:48:49 :: parity ~ {. 3 -> 1 . 2 -> 0 . 1 -> 1 } parity ~ <_>; #0; parity helper 05:48:50 parity: [_(#0)] <= [0] |.(_) => parity helper(#1 #0) 05:48:57 ... parity ( 5 ) 05:48:58 ValueError: substring not found :( 05:49:02 ... parity (5) 05:49:02 1 05:49:05 heh 05:49:05 ... parity (8) 05:49:06 0 05:49:08 that's a bug for sure :) 05:49:20 dunno about that, but i love clue again 05:49:30 maybe i could just hack up some crappy special casing for lists 05:49:43 because those are impossible to brute force together 05:50:09 whereas in numerical algos, i always completely underestimate the speed 05:50:34 like, when that parity helper compiled, i assumed it was an error message because it was so fast, never seen anything happen that fast with lists 05:50:46 :D 05:53:12 oklopol: i should sleep now 05:53:18 you can have cluebot.py tomorrow or something 05:53:36 -!- elliott has quit (Remote host closed the connection). 05:53:45 -!- luatre has quit (Remote host closed the connection). 05:54:07 clue cluecleucluceluceluceluceluceluclueclueclue 05:54:21 tomorrow's retro language: toi 05:54:40 :> 05:55:27 have you been here before oklopol? 05:55:50 * Sgeo blinks at hagb4rd 05:56:28 yess.. im the noob i know 05:56:48 -!- TLUL has joined. 05:57:01 i have, yes :P 05:57:25 been ircing kinda lazily lately 05:57:32 ah.. 05:57:38 since i have irl stuff i should be doing 05:57:42 -!- poiuy_qwert has joined. 05:58:36 ...or maybe graphica :D 05:59:07 i just realized graphica has kind of a similar syntax as clue 05:59:38 or maybe ef, although i have no idea how that thing works....... 06:00:04 a good point to start 06:01:06 isnt it? :) 06:01:58 well it's a verrry old language 06:07:44 -!- TLUL has quit (Ping timeout: 255 seconds). 06:13:19 i really like this chan..must admit i haven't found anything comparable on the whole wide irc net 06:14:40 Oh, didn't mean to accidentally offend you 06:14:47 It's just that oklopol has been here for a long time 06:14:57 * Sgeo continues to fail to eat 06:14:58 u didn't :> 06:15:27 Glad to.. see that 06:15:34 * Sgeo emotion-ills 06:17:13 * oerjan hits Sgeo with the saucepan ===\__/ 06:17:22 HOPE THAT HELPS 06:19:04 hagb4rd: when did you come? 06:19:23 that was a very rare moment of sanity you saw there, i arranged it just for you 06:19:36 we were talking about porn when you entered 06:19:50 yes.. thanks for that :) 06:19:58 * copumpkin goes home 06:20:01 its up to a month or sth 06:20:02 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 06:20:07 not longer 06:20:19 and i still dont understand anything 06:20:38 but, thats kind of good news 06:21:06 have you seen any of my definition listings 06:21:07 looking for teachers and friends ya know 06:21:18 nope 06:21:21 i sometimes just define random math concepts 06:22:13 Phantom_Hoover: If you logread, I think I accidentally left Station V3 [and sister comics on occasion] off the list 06:22:38 where do i have to look? 06:23:44 the logs? 06:25:08 oh i dunno about that 06:25:11 was just wondering 06:25:19 mainly to know whether i've been doing that lately 06:29:40 thats far behind my person insight so far..but it wouldnt surprise me at all 06:31:54 damn, my corroded-schoolenglish must be insulting, so please excuse.. im tryin to fix this 06:33:04 *trying >:) 06:38:12 and oerjan is send by the goodlord himself.. the good soul ..a real philanthrope :D 06:39:07 please just shut up and don't refuse ;) 06:39:54 O KAY 06:40:00 :> 06:44:17 -!- copumpkin has joined. 06:50:31 -!- poiuy_qwert has quit (Ping timeout: 260 seconds). 06:53:01 I'm tired 06:53:08 I'm about to start falling asleep on people 06:54:28 that may not be advisable 06:56:59 have you considered taking a vacation sgeo? 07:01:45 -!- Zuu has quit (Read error: Connection reset by peer). 07:02:53 drink sangria in the park 07:03:05 or feed some animals in the zoo 07:10:37 -!- Zuu has joined. 07:41:27 -!- cal153 has joined. 07:50:21 -!- zeotrope has quit (Quit: Lost terminal). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:35:18 -!- zzo38 has joined. 08:37:54 -!- zzo38 has quit (Remote host closed the connection). 08:39:29 -!- Sgeo has quit (Read error: Connection reset by peer). 08:46:04 -!- j-invariant has joined. 09:16:01 -!- copumpkin has quit (Ping timeout: 250 seconds). 09:16:26 -!- copumpkin has joined. 09:20:15 -!- azaq231 has quit (Quit: Leaving.). 09:32:45 -!- Phantom_Hoover has joined. 09:32:45 -!- Phantom_Hoover has quit (Changing host). 09:32:45 -!- Phantom_Hoover has joined. 09:39:33 -!- impomatic has joined. 09:39:38 Hi :-) 09:39:56 Does anyone know when BF Joust and FYB were added to EgoBot? 09:47:22 huh 09:49:50 For BF Joust, i think it was approximately the same time as it was added to the wiki 09:50:17 http://esolangs.org/w/index.php?title=BF_Joust&diff=14558&oldid=14535 09:52:20 for fukyorbrane, i have a vague idea that it was in the previous version of EgoBot as well. the wiki article is from before i joined here. 09:55:32 of course Gregor is the appropriate person to ask 09:57:43 FYB was in EgoBot as long as both existed, more or less, but that was in the pregobot. 09:58:05 It's been in this EgoBot for considerably less time, the hg log is sure to elucidate: https://codu.org/projects/egobot/hg/ 09:58:58 -!- MigoMipo has joined. 09:59:35 20 months for FYB, 19 months for BFJoust. 10:11:35 -!- oerjan has quit (Quit: Good night). 10:12:44 pregobot? 10:23:53 -!- cheater00 has quit (Ping timeout: 240 seconds). 10:25:02 -!- cheater00 has joined. 10:33:12 Phantom_Hoover, somehow I read that as "pogobot" first. (as in pogo-stick) 10:33:29 -!- Wamanuz has joined. 10:51:05 Thanks :-) 11:24:24 Gregor: 19 months is for the new version of BFJoust. Can you remember when it supported the original? 11:24:58 This was the only version it ever supported. 11:25:04 -!- impomatic has quit (Read error: Connection reset by peer). 11:25:08 ... 11:25:42 -!- impomatic has joined. 11:26:11 Firefox always crashes when I click a link in ChatZilla :-( 11:27:02 impomatic, strange. 11:28:07 Gregor: 19 months is for the new version of BFJoust. Can you remember when it supported the original? 11:28:07 This was the only version it ever supported. 11:28:26 Gregor: sorry, I was thinking of the hill that used to be at http://faculty.washington.edu/kerim/nomic/bf/ :-) 11:28:39 Snot mine! 11:28:47 Besides, my BFJoust hill is more fair :P 11:38:58 -!- cheater00 has quit (Read error: Connection reset by peer). 11:41:48 -!- cheater00 has joined. 11:42:46 -!- MigoMipo has quit (Remote host closed the connection). 11:55:45 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds). 12:00:17 -!- cheater00 has quit (Ping timeout: 240 seconds). 12:02:12 -!- MigoMipo_A has joined. 12:17:27 -!- Phantom_Hoover has joined. 12:17:40 * Phantom_Hoover boggles at the stupidity of Windows anti-virus software. 12:18:37 It's not unknown for Norton to identify itself as a virus, and both McAfee and AVG have deleted essential Windows files which they thought were viruses. 12:26:15 Sorry, *McAfee, AVG and Norton 12:42:37 -!- Sgeo has joined. 12:49:58 -!- cheater00 has joined. 12:50:56 Phantom_Hoover: got any screenshots of Mt. Hoover? 12:51:08 j-invariant, I might... 12:55:29 http://imgur.com/d1Df9 12:56:03 That's from a while ago; I've put a better lighting system in since and removed that small amount of dirt to the back of the room. 12:56:34 Phantom_Hoover, did you read logs? 12:56:39 [Nothing important] 12:56:42 huh thato's cool 12:57:07 I love how this game is like lemmings: Stuff does not just fall down 12:57:19 Sand and gravel does! 12:57:24 (The better lighting system in question is a layer of glass with lava on top. 12:57:26 *) 12:57:31 Sgeo, I haven't read the logs, but I will now. 12:57:36 And water and lava... are water and lava 12:57:39 j-invariant, sand and gravel falls though 12:58:20 Which is more worthless? Gravel or gold? 12:58:57 Sgeo, probably gravel, unless you are draining. At least gold can be used for watches and you can also built nice looking thrones out of gold blocks 12:59:20 Vorpal, gravel is the only source of flint, which is very useful. 12:59:24 huh, seems like it snows, rains and hails at the same time. 12:59:34 Gold can be used for nothing but watches and decoration. 12:59:35 Phantom_Hoover, hm true 13:11:17 And golden apples! 13:11:27 Sgeo, ahahahahahahahaha 13:12:01 Golden apples are good for bragging rights; that's it. 13:13:52 That sounds almost like a quote from the wiki 13:17:12 Case in point: Vorpal getting his hands on one. 13:18:07 Phantom_Hoover, found it as a golden apple in a dungeon 13:18:22 Yes, and you went on about it for half an hour. 13:18:23 never found even a normal apple in any local game or on SMP 13:18:33 Phantom_Hoover, no I mentioned it once. That was all 13:19:01 You've probably secreted it in one of your super-secret underground bunkers in the wilderness. 13:19:45 Phantom_Hoover, nah, it is pretty useless really. Who would want it? 13:20:51 If golden apples didn't require as much gold to make, would they be worth it? 13:22:15 Sgeo, I never found a normal apple yet and iirc they don't stack anyway 13:26:04 Sgeo, no, because you can just go out and punch some pigs if you need gold. 13:26:28 Are pigs a renewable resource? 13:26:54 http://www.youtube.com/watch?v=wwo8qxUit00 13:27:05 Phantom_Hoover: what do you do all night>? 13:27:35 -!- impomatic has left (?). 13:27:40 Sgeo, no, because you can just go out and punch some pigs if you need gold. <-- ?? 13:27:49 Er, *food 13:28:18 j-invariant, unless you're on the move, setting up a mine would be worthwhile. 13:28:36 oh but I have a treehouse 13:29:09 Phantom_Hoover, and they don't stack either. I suggest carrying a work bench and a stack of wheat when exploring. Maybe one or two ready breads in case you need them urgently 13:29:14 saves space 13:31:10 j-invariant, if you aren't in a hurry to smelt and/or craft stuff, then deferring it to the night might relieve some boredom (and also let you get more stuff that needs daylight done during the day) 13:31:34 oh I don't have any thing to smelt but I guess that's my problem 13:31:40 P.S. wyh is coal so hard to find?? 13:31:49 I keep finding it before I learned how to make chests 13:31:51 j-invariant, are you mining for it? 13:31:55 now I can store it I don't have any 13:32:04 I am not sure 13:32:10 I do dig into the cobblestone 13:32:15 j-invariant, why not go back to the coal you found back then? 13:32:30 it's gone 13:32:35 I already took it all 13:32:41 j-invariant, right then you used it I guess? 13:32:50 well I got kileld 13:32:54 ah 13:33:53 j-invariant, well you are likely to find more underground than when wandering the surface. As long as you have some torches (if you don't and can't find any surface coal you might be in a bit of a deadlock) it should be reasonably safe to mine 13:34:08 get some iron too, and make armour 13:34:10 yes it's a deadlock 13:34:56 j-invariant, well try mining in the open. As in, dig down so you have sky visible at all times, rather than digging tunnels. 13:35:24 clever 13:35:31 j-invariant, a lot more work though 13:35:42 but you will probably find coal soon enough 13:36:02 Also, if you have monsters on securing the thing will be a pain. 13:36:21 j-invariant, do this at close to sea level btw, not at a mountain top. Reason for this is that you won't find iron above a certain altitude 13:37:10 Phantom_Hoover, you mean for the open thing. Well as soon as you find enough coal to make a handful of torches you can switch to a different mining system 13:37:36 Phantom_Hoover, however, it seems a decent way to break the deadlock :P 13:38:28 hm to have one chest for every block id define you would need 173 chests (twice if you want double chests of course) 13:38:38 however, not all are possible to get 13:39:22 (such as fire, redstone ore, redstone-placed-on-ground, or similar) 13:40:08 <3 Fry & Laurie 13:40:16 And elliott will kill me for liking something good 14:00:12 what the hell 14:00:58 j-invariant, ? 14:05:04 I loaded up the game in the spawnpoint instead of my treehouse :( 14:05:21 don't know why that happened 14:05:48 j-invariant, did you die? 14:05:52 I don't think so 14:10:24 How do you avoid getting bored when hauled up in a 2x2x2 house at night? 14:11:04 Wait, if I'm on Peaceful, I don't need to bother with that, do I? 14:13:20 Sgeo: my question exactly :P 14:18:25 -!- BeholdMyGlory has joined. 14:20:23 Sgeo, you mine. 14:21:29 I wonder how many bug reports he gets a day... 14:21:44 Phantom_Hoover, while trying to keep the house small so mobs don't spawn? 14:21:56 Sgeo, do you have no coal? 14:21:56 [Note: I have hard times finding coal in a rush] 14:22:01 Oh, right. 14:22:47 Pass, then: I've never stuck at it in a world where I didn't get coal quickly. 14:37:37 -!- TLUL has joined. 14:40:35 hah, the fastest way to load all of minecraft world data into memory for map generation when it isn't cached into ram seems to be to prefetch it using find whatever/ -type f | xargs -P 4 -n 100 head -c1 > /dev/null. The files are small enough that this seems to load the entire files. And the parallel processes make it faster somehow (about 3.5 times as fast) . Could be NQC maybe, since I doubt a single 14:40:35 head process would try to read one file while waiting for the previous one. 14:43:07 err NCQ* 14:57:47 I love teh way you make symbols in minecraft 14:58:12 Sgeo: are you a newbie at minecraft too? 14:58:31 or haveu you had it for a while 15:01:25 Symbols? 15:01:32 Oh, you mean the crafting interface. 15:01:54 yies 15:18:56 -!- TLUL has quit (Quit: *disappears in a puff of orange smoke*). 15:25:09 -!- MigoMipo has joined. 15:37:49 -!- TLUL has joined. 15:49:53 -!- augur has quit (Ping timeout: 240 seconds). 15:53:23 -!- augur has joined. 15:56:23 -!- poiuy_qwert has joined. 15:59:53 -!- augur has quit (Ping timeout: 240 seconds). 16:00:59 -!- poiuy_qwert has quit (Client Quit). 16:03:31 -!- FireFly has joined. 16:05:14 -!- augur has joined. 16:13:53 -!- augur has quit (Ping timeout: 240 seconds). 16:18:45 -!- cheater00 has quit (Ping timeout: 240 seconds). 16:20:33 -!- elliott has joined. 16:20:41 21:55:27 have you been here before oklopol? 16:20:44 hagb4rd: no, he's very new 16:21:15 -!- aloril has quit (Ping timeout: 248 seconds). 16:22:15 hah 16:22:33 a whole bunch of creepers blew up in my face and killed me 16:22:36 hi elliott 16:22:48 but I went back to the spot to get my pick and they had revealed some coal 16:23:34 03:28:47 Besides, my BFJoust hill is more fair :P 16:23:38 Gregor: They're MYYY rules! 16:23:41 j-invariant: :D 16:23:48 j-invariant: they destroy like 70% of blocks though 16:24:03 j-invariant: p.s. you know you can fight from behind a door? 16:24:16 if you place a door from the outside of your house, not the inside, then you can walk right up to it and hit things from there 16:24:23 with a creeper you just keep whacking it with a sword until it goes away 16:24:49 hah cool 16:26:14 j-invariant: btw as far as finding coal goes 16:26:23 j-invariant: you probably *really* want a mine of some kind 16:26:34 I have a "mine" 16:26:40 a proper mine, I mean :) 16:26:47 yeah I don't know what that is I guess 16:26:52 j-invariant: the simplest kind is: just dig a shaft (doesn't matter how wide), diagonally, to bedrock (watch out for lava lakes near the bottom; you could stop there if you're lazy) 16:27:01 j-invariant: then, you build 1-wide shafts off to the sides 16:27:07 j-invariant: and then 1-wide shafts on both sides of *that* 16:27:11 separated by, iirc, three blocks 16:27:24 or no wait 16:27:27 separated by one block I think 16:27:32 j-invariant: and basically you just dig along _those_ shafts, and whenever you find ore, you dig out that area 16:27:34 watch out for caverns though 16:27:41 j-invariant: you get much more ore like 10 above bedrock 16:27:46 j-invariant: this method of mining is a bit tedious though 16:27:53 j-invariant: another way to do it is just spelunking 16:28:00 j-invariant: find caves, light them all up, get all their ore 16:28:16 j-invariant: in fact, you can even use a staircase mine to find caverns... they often appear underneath the shafts, and you fall down :> 16:30:08 j-invariant: http://www.minecraftwiki.net/wiki/Tutorials/Mining_Techniques 16:30:11 separated by one block I think <-- err, 2 blocks seem saner 16:30:17 OK, twob 16:30:20 *two blocks. 16:30:21 Right. 16:30:31 more if you do a zip like layout 16:30:45 where you alternate two alts, this stacks well 16:31:06 Vorpal: no, that's overcomplicated 16:31:18 j-invariant: the staircase mine method I mentioned, if done correctly, can have you see every block in the entire area 16:31:39 elliott, not if you want to cover a specific altitude. sorry bbl 16:31:50 sure, you do see everything 16:34:26 -!- aloril has joined. 16:38:15 elliott, well yes but if you want to cover a narrow altitude range but one that is larger than 2 blocks high you have to dig away more blocks with your 2 wide separation scheme 16:38:40 irrelevant, you still see it all 16:38:40 elliott, also, do you shift the layers relative each other, or how do you take care of the non-visible corners? 16:38:52 yes, each layer gets shifted right by one (IIRC) 16:39:39 elliott, hm you need a separation of one for that to work 16:39:40 i have this feeling that normal mining isn't too practical in general though 16:39:43 it takes ages to get ore 16:41:26 elliott, actually the high density scheme works fairly well. Also it turns out that if you have a large area at your disposal, a less dense mining scheme which might miss some ores will yield more per dug away block. Due to that ores often comes in clumps. 16:41:57 my staircase mining method is just as high density, but easier to keep track of :) 16:42:21 anyway 16:42:24 I think spelunking is easiest 16:42:29 caverns have shitloads of ore 16:43:19 elliott, anyway this is why shifting by one won't work with separation of two: http://sprunge.us/TIUA 16:43:53 right, so separate by two like i said 16:44:01 elliott, err by one you mean 16:44:07 erm. yes. 16:44:30 elliott, the problem is finding good caverns. Some games you find lots in that go deep. Sometimes you hardly find any that goes deep enough to need torching 16:45:35 and sometimes your mountain has little ore 16:45:37 sucks 2b u 16:49:07 elliott, quite 16:49:25 elliott, I have some single player games with awesome cavern systems though :) 16:50:08 elliott, btw, my basic mining scheme is this: http://sprunge.us/gMZH While it is indeed more complicated and requires some care to get it right, it is faster due to mining far fewer blocks per blocks seen. 16:50:24 of course, spelunking is probably the nicest way, at least on peaceful 16:50:44 (not so good if the cavern is overrun with monsters) 16:52:56 elliott, there was a quite interesting thread on the minecraft forums analysing this. I don't seem to be able to find it again though 16:54:07 Vorpal: Someone needs to figure out the big-O of these mining schemes! 16:54:13 So that the forum can say "lol 0x=0 u stupid" 16:54:18 Vorpal, I think that mining scheme is implementable in a staircase mine. 16:54:21 elliott, XD 16:54:39 Phantom_Hoover, yes, I don't see any problem combining them 16:54:42 Staircase mines with a drop shaft to the bottom are p. much the best! 16:55:01 Although seeing *every* block isn't really necessary. 16:55:22 I think I might start playing MC in a new way: on peaceful until I get an iron sword and armour, and then on hard. 16:55:27 Everything comes in clumps, so you can leave a line unchecked and not miss anything. 16:55:43 Phantom_Hoover is right 16:55:47 Phantom_Hoover, anyway, I wouldn't use it except for the diamond ore altitude range. Because other ores tend to have large deposits so in practise you don't need to see every block to find a deposit. And the few 1x1 coal deposits out there aren't really worth the extra diggign 16:55:49 digging* 16:56:00 hmm, so it's a ratio blocks seen/blocks mined that you want to maximize? (and the limit of that as you mine to infinity, of course) 16:56:12 gah, don't say what I intend to say while I'm writing it. ;P 16:56:21 minecraft is so addictive some people actually DO mine to infinity 16:56:44 j-invariant, can't in this case since it is a side view. And that has a limited range 16:57:20 at some point you'll want to factor in whatever random algorithm is used to place valuables in the ground 16:57:43 I have this huge tunnel to a good place from the spawnpoint// 16:57:47 Sgeo: stop making DCSS fanboi comments that i have to reply to 16:57:49 olsner, yes quite. we did that :P 16:57:49 but the stream in it goes the wrong way 16:58:00 olsner, when we noted the thing about those clumps 16:58:51 i live on as little ore as possible due to laziness but let's pretend it's just my style 16:59:01 if i need it i'll go get it! 16:59:06 elliott, wait, is Sgeo speaking? 16:59:29 Phantom_Hoover: http://www.reddit.com/r/gaming/comments/eydlc/as_a_gamer_without_a_steady_internet_connection/c1bwz27 16:59:36 elliott: hmm, doesn't that actually *make* it your style to use as little ore as possible? 16:59:51 Phantom_Hoover: Worse — he's replying to threads about NetHack on reddit with random factoids about how Dungeon Crawl Stone Soup is so great. 17:00:00 Which is just irritating, because (1) that's irrelevant and (2) it's a terrible game. 17:00:01 elliott, yeah personally I do it like mplayer buffers (or at least how you claimed it appears to be buffering) 17:00:05 olsner: INDEED 17:00:23 elliott, I thought yu were talking about the decryptomatic thing. 17:00:26 *you 17:00:30 Phantom_Hoover: that's DeCSS :P 17:00:32 mining is pretty much the most boring thing ever, so yeah i don't really do that 17:00:38 spelunking can be fun once in a while 17:02:28 it's slightly sad that this channel is now all about minecraft 17:02:43 olsner, yeah 17:02:47 oklopol's random walk method is great, I just found the Stairs accidentally 17:02:50 olsner: >:) 17:02:55 unless you're using minecraft for computation, because then it's suddenly on topic 17:03:03 olsner: we did interesting stuff yesterday! esolang i mean 17:03:03 olsner, there is that red stone CPU in it 17:03:18 and yes, we d id interesting mc computation stuff yesterday 17:03:18 *did 17:03:24 me and Phantom_Hoover invented THE BEST CIRCUIT SYSTEM EVER 17:03:32 because redstone is shit 17:03:36 cool 17:03:41 elliott, how is redstone shit as such? 17:03:49 It also allows you to make nuclear reactors. 17:03:51 oh, not *the* shit, but shit? 17:03:55 olsner: yes 17:03:57 redstone is crappy 17:04:01 we redesigned it ... and half the game, but 17:04:04 Vorpal: it can hardly interact with the environment 17:04:08 Vorpal: it has infinite power which is just no fun 17:04:15 and every circuit is gigantic 17:04:18 elliott, well true. There are mods for interacting with environment though. 17:04:27 and yes circuits are large 17:04:27 our way is the best :> 17:04:59 I am sad that civilisation gets little love now ... anyway 17:05:09 olsner: we'd talk about interesting stuff if someone said anything, but nobody does :) 17:05:13 elliott, one think I would like is a lever that affects a wire to blocks below. So you can place a lever on ground and hide the wires 17:05:45 Vorpal: hmm 17:05:48 elliott: I know, sans the minecraft spam it'd just be completely quiet in here, and that could be more boring 17:05:52 Vorpal: easy, since you can cover bluestone'd blocks with other blocks 17:05:58 so just have a wire going underground and cover it with blocks :) 17:06:16 olsner: it's not like we used to be more on topic before, it was just more varied offtopic 17:06:24 elliott, sure you can use a 3 thick wall currently but that is not always a viable option. Such when I wanted a fire level on top of the wall of that fort. 17:06:30 lever* 17:06:47 elliott: yah, probably 17:06:56 so speaking of on topic 17:07:13 elliott, s/f on/ff/ 17:07:47 nope 17:07:48 watch 17:08:03 * Vorpal waits for on topicness 17:08:08 stupid slow bot 17:08:16 -!- luatre has joined. 17:08:20 THAT'S ON TOPIC 17:08:26 :. cons(1 2) 17:08:27 TypeError: can only concatenate list (not "int") to list :( 17:08:28 :. cons(1 []) 17:08:29 [1] 17:08:32 :. add(3 -4) 17:08:33 -1 17:08:43 elliott, which language? 17:08:44 .: is list?([1 2 3]) 17:08:44 1 17:08:49 ... is list?(2) 17:08:49 0 17:08:50 Vorpal: Clue 17:08:54 Vorpal: well, Clue plus my expression language 17:09:05 Vorpal: the actual interesting parts are done with :: (or any combination of : and . resulting in 4 dots) 17:09:18 five dots looks up the compiled form of a given function 17:09:24 elliott, an esolang? It looks rather too sane for that 17:09:33 that's just the expression language... 17:09:36 elliott, ah 17:09:39 this is oklopol's language :) 17:09:48 okay likely extremely weird then 17:09:50 make singleton ~ {. 1 -> [1] 17:09:50 . [1, 2, 3] -> [[1, 2, 3]]} 17:09:50 make singleton ~ ; cons; #[] 17:09:53 ^ that's a function in clue 17:09:56 turns x into [x 17:09:57 ] 17:10:02 -!- cheater99 has joined. 17:10:13 basically, clue is programmed by giving a bunch of examples, and then telling it what functions it needs to use 17:10:14 elliott, [x] meaning? 17:10:16 and it solves all the rest by itself 17:10:18 Vorpal: um a list containing just x 17:10:19 obviously 17:10:24 i.e. f x = [x] 17:10:27 elliott, oh so why the name singleton then 17:10:30 it seemed strange 17:10:33 Vorpal: because the list is a singleton 17:10:47 -!- TLUL has quit (Quit: *disappears in a puff of orange smoke*). 17:10:52 another example function 17:10:55 more than 3 ~ {. 0 -> 0 } 17:10:55 more than 3 ~ {. 1 -> 0 } 17:10:55 more than 3 ~ {. 2 -> 0 } 17:10:57 more than 3 ~ {. 3 -> 0 } 17:10:59 more than 3 ~ {. 4 -> 1 17:11:01 . 5 -> 1 } 17:11:03 more than 3 ~ ; #0; #1 17:11:17 elliott, so.. how does it do this? Nearest example? 17:11:23 Vorpal: eh? 17:11:24 why are 4 and 5 in the same bracket? 17:11:28 "nearest example"? 17:11:35 elliott, I mean, how does it extrapolate from the examples 17:11:45 Vorpal: something almost, but not entirely, like brute force 17:11:50 it compiles the ski impl in 20 seconds 17:11:59 tehre's special syntax for doing recursion 17:12:00 *there's 17:12:03 j-invariant: basically, means "branch using id" 17:12:09 elliott, okay. But that doesn't answer my question on how. 17:12:15 j-invariant: so, the first branches are the branches for 0, 1, 2, 3, because it infers the branch as id(param) 17:12:16 which is just param 17:12:19 j-invariant: the last branch is default 17:12:24 and so contains everything above 3 17:12:29 elliott, how do you define something like sin() in it? 17:12:36 Vorpal: you don't, it just has integers and lists 17:12:48 elliott, well lets say integer fixed point sin then :) 17:13:04 Vorpal: very, very slowly 17:13:24 i'll show you the compiles form of make singleton 17:13:41 *compiled 17:13:45 :: make singleton ~ {. 1 -> [1] . [1, 2, 3] -> [[1, 2, 3]]} make singleton ~ ; cons; #[] 17:13:46 make singleton: [id(#0)] <= [[]] |.(_) => cons(#1 #0) 17:14:02 ok, so that <= [foo] means that it gets [] as the first parameter, because we told it it was a constant it needed 17:14:07 What's luatre? 17:14:13 so in the function body, #0 is [] 17:14:20 but in the condition, #0 is the parameter 17:14:24 -!- cheater00 has joined. 17:14:27 elliott, hm. Well what I'm trying to figure out is how it extrapolates. One obvious approach would be to use the examples to train an ANN for example. Another would be to compute a hyper-plane that separates the examples properly (this couldn't handle sin, or xor for example) 17:14:31 elliott: I hope you're saving up all these discusfsions, where you show people how Clue works: And saving them into "clue.clue" 17:14:31 so basically, we switch on the argument, but only have a default (this is the same as having no branch) 17:14:38 then it just conses the param with the constant param ([]) 17:14:41 j-invariant: :D 17:14:44 j-invariant: clog is doing that for me! 17:14:55 Vorpal: ANN? no, no, this is precise 17:15:04 Vorpal: the SKI implementation is a _real_ SKI implementation 17:15:08 that can handle any SKI form 17:15:40 elliott, so hm, what does it do when there could be several different alternatives that would fit the given examples? 17:15:55 Vorpal: then your program is bad... but that's why you use hints 17:16:11 elliott, will it error out or? 17:16:20 i managed to implement subtraction and abs, fwiw, when all there was was add, and no negate 17:16:26 thanks to help from oklopol 17:16:55 Vorpal: no, if it manages to generate a function using the functions in the bag you specified, using the conditional function you specified, meeting your recursion scheme (if you have one), and fitting all the examples in their corresponding branches 17:17:05 -!- cheater99 has quit (Ping timeout: 240 seconds). 17:17:06 Vorpal: then it'll use that function, but ... if you write it properly there's only one function it can really generate 17:17:13 elliott, that more than 3, does it handle -1? 17:17:15 that's the importance of the bag 17:17:19 Vorpal: let's find out 17:17:27 i think it'll say that -1 is more than three 17:17:32 heh 17:17:42 because anything that isn't 0, 1, 2, or 3 gets true, basically 17:17:44 but you could easily fix it 17:17:54 by having another case ... or even just a wrapper function 17:17:56 that checks for negativity 17:18:01 elliott, presumably you could make it extrapolate in both directions? 17:18:13 it doesn't "extrapolate"... 17:18:17 it is not guessing, it is very precise 17:18:19 elliott, well, okay, bad word 17:18:34 -!- augur has joined. 17:18:46 Vorpal: basically, no, because you'd still need to switch on whether it's negative 17:18:48 but that's easy 17:18:49 anyway 17:18:51 :: more than 3 ~ {. 0 -> 0 } more than 3 ~ {. 1 -> 0 } more than 3 ~ {. 2 -> 0 } more than 3 ~ {. 3 -> 0 } more than 3 ~ {. 4 -> 1 . 5 -> 1 } more than 3 ~ ; #0; #1 17:18:51 more than 3: [id(#0)] <= [0 1] |.(0) => #0 |.(1) => #0 |.(2) => #0 |.(3) => #0 |.(_) => #1 17:19:04 right, i can see straight away that that will think -1 is more than three 17:19:20 (if you can't, maybe you're not good enough at understanding my compiled syntax form) 17:20:47 hm 17:20:47 Vorpal: here's an implementation of negate, subtract, and abs http://sprunge.us/gOPE 17:20:54 the :. : bit is the recursion schemes 17:21:20 :: is negative? ~ {. -1 -> 1 . -2 -> 1 } is negative? ~ {. 0 -> 0 } is negative? ~ {. 1 -> 0 . 2 -> 0 } is negative? ~ ; compare; #0; #1 17:21:20 is negative?: [id(compare(#0 compare(#0 #0)))] <= [0 1] |.(-1) => #1 |.(0) => #0 |.(1) => #0 17:21:24 hm 17:21:31 that compare(#0 #0) is quite amusing, it's 0 obviously 17:21:40 but the brancher can't access the constants 17:21:43 since it doesn't get them yet 17:21:47 elliott, it doesn't use the examples in a very clever way it seems 17:21:47 so it couldn't just use teh constant 0 it's given 17:21:48 *the 17:21:50 it figured out what 0 is :) 17:22:02 Vorpal: what do you mean? 17:22:08 you generally don't need many of them at all 17:22:19 there's more in my negating functions because i made a mistake earlier 17:22:42 Vorpal: take a look at this 17:23:04 :: negate negative ~ {:. -5, -5 -> 5 : -4, -3 -> 5 :. -4, -3 -> 5 : -3, -1 -> 5 :. -3, -1 -> 5 : -2, 1 -> 5 } negate negative ~ {. 0, 1 -> 1 . 0, 2 -> 2 . 0, 3 -> 3 } negate negative ~ ; inc 17:23:04 Exception: Can't compile negate negative(is zero?) :( 17:23:08 oh :D 17:23:19 :: is zero? ~ {. 0 -> 1 } is zero? ~ {. 1 -> 0 . 2 -> 0 } is zero? ~ ; #0; #1 17:23:19 is zero?: [id(#0)] <= [0 1] |.(0) => #1 |.(_) => #0 17:23:25 :: negate negative ~ {:. -5, -5 -> 5 : -4, -3 -> 5 :. -4, -3 -> 5 : -3, -1 -> 5 :. -3, -1 -> 5 : -2, 1 -> 5 } negate negative ~ {. 0, 1 -> 1 . 0, 2 -> 2 . 0, 3 -> 3 } negate negative ~ ; inc 17:23:25 negate negative: [is zero?(#0)] |^(0) => #2 <= {(0,0): inc(#0); (0,1): inc(inc(#1))} |.(1) => #1 17:23:30 elliott, well hard to explain what i mean 17:23:33 Vorpal: see negate negative in that sprunge up there 17:23:37 17:22 luatre: negate negative: [is zero?(#0)] |^(0) => #2 <= {(0,0): inc(#0); (0,1): inc(inc(#1))} |.(1) => #1 17:23:39 it figures that out 17:23:43 based on the recursion scheme and base case 17:23:48 which is pretty good, if you ask me 17:23:55 to translate that inferred function to haskell: 17:24:09 hm 17:24:22 negneg x y | not (isZero x) = negneg (x+1) (y+1+1) 17:24:26 | otherwise = y 17:25:14 Vorpal: anyway it is the best and most expressive language ever :D 17:25:17 just...kinda hard to use 17:25:17 * Phantom_Hoover is puzzled by a clearly visible Sony TV in Red Dwarf. 17:25:22 elliott, well sure. But it takes rather a lot of code to do it 17:25:33 elliott, and yes, sure it is nice. 17:25:39 not really 17:25:40 Not because of the anachronism, but because I thought that violated the BBC's anti-product-placement rules. 17:25:43 i'll write negate negative shorter 17:25:59 Vorpal: i added the extra test cases because i was paranoid when it broke once 17:26:17 hm 17:26:19 -!- aloril has quit (Ping timeout: 248 seconds). 17:26:54 :: negate negative 2 electric boogaloo ~ {:. -5,-5 -> 5 : -4,-3 -> 5 :. -4,-3 -> 5 : -3,-1 -> 5 } negative negative 2 electric boogaloo ~ {. 0,1 -> 1} negative negative 2 electric boogaloo ~ ; inc 17:26:54 TypeError: 'NoneType' object is not iterable :( 17:27:02 :: negate negative 2 electric boogaloo ~ {:. -5,-5 -> 5 : -4,-3 -> 5 :. -4,-3 -> 5 : -3,-1 -> 5 } negative negative 2 electric boogaloo ~ {. 0,1 -> 1} negate negative 2 electric boogaloo ~ ; inc 17:27:03 TypeError: 'NoneType' object is not iterable :( 17:27:06 i fail at spelling 17:27:12 :: negate negative 2 electric boogaloo ~ {:. -5,-5 -> 5 : -4,-3 -> 5 :. -4,-3 -> 5 : -3,-1 -> 5 } negate negative 2 electric boogaloo ~ {. 0,1 -> 1} negate negative 2 electric boogaloo ~ ; inc 17:27:13 negate negative 2 electric boogaloo: [is zero?(#0)] |^(0) => #2 <= {(0,0): inc(#0); (0,1): inc(inc(#1))} |.(1) => #1 17:27:22 Vorpal: in long form, that code is just: 17:27:24 negate negative ~ {:. -5, -5 -> 5 17:27:24 : -4, -3 -> 5 17:27:24 :. -4, -3 -> 5 17:27:26 : -3, -1 -> 5 } 17:27:28 negate negative ~ {. 0, 1 -> 1 } 17:27:30 negate negative ~ ; inc 17:27:53 hm okay 17:27:57 -!- azaq23 has joined. 17:28:05 negate negative ~ ; inc <-- inc? 17:28:12 inc is just x->x+1 17:28:17 yes quite 17:28:22 but what's more, i can prove it 17:28:24 elliott, but why does it need to increment? 17:28:36 Vorpal: um because the algorithm works by doing f (x+1) (y+2) 17:28:39 see the compiled form 17:28:52 :: succ ~ {. 0 -> 1 . 1 -> 2 . 2 -> 3} succ ~ <_>; inc 17:28:54 succ: [_(#0)] |.(_) => inc(#0) 17:28:58 PROOF 17:29:06 oh right. 17:29:12 _ is just _(x) = 0 17:29:16 :. _([1 2 3]) 17:29:16 0 17:29:27 and if you gave negate negative ~ ; it would fin dhe other program? 17:29:38 j-invariant: what do you mean? 17:29:38 sqrt(x^2) instead of if x<0 then -x else x 17:29:53 j-invariant: well you would do <_>; sqrt square 17:29:54 although sqrt may be difficult to implement 17:29:56 j-invariant: but yes, it would probably get that 17:30:04 oh you mean sqrt being separate 17:30:07 j-invariant: well you would do <_>; sqrt; square 17:30:11 it would probably get it, yes 17:30:12 quite easily 17:30:14 but doing sqrt would be a bitch 17:30:29 Vorpal: here's the ski impl: http://sprunge.us/gdNj 17:30:34 can you do sqrt? :D 17:30:37 *impl: http://sprunge.us/gdNj 17:30:49 Vorpal: would be much more readable if s, k and i could be something other than constant integers, but 17:30:50 elliott, heh 17:31:01 j-invariant: not really :) ... you could probably do newton's method? 17:31:29 Vorpal: it's actually a wonderful program 17:31:31 ski apply especially 17:31:33 is very pretty 17:31:38 also note that :s after the first in a :. are ignored 17:31:40 they're documentation 17:31:49 well... or i think they are tested 17:31:49 elliott, just write a soft floating point library in it. In theory it is possible since it is TC. But likely infeasible. 17:31:53 but they aren't used for generating the recursion scheme 17:32:00 elliott, how long did ski take to compile? 17:32:06 Vorpal: i'll measure 17:32:18 Vorpal: note that the implementation has many, many really stupid things 17:32:28 such as? 17:32:32 def is_function(a): 17:32:32 try: 17:32:32 a() 17:32:33 except Exception,e: 17:32:36 if str(e)[-12:]=="not callable": 17:32:38 return False 17:32:39 return True 17:32:42 things like that :) 17:32:47 python, eww 17:32:48 and it also calls functions during compilation like 138917491238912379x more than itn eeds to 17:32:49 *it needs 17:32:53 it's not python 17:32:58 it's oklopython 17:33:02 Did oklopol write it? 17:33:05 yes 17:33:14 elliott, how does that differ from normal python? 17:33:20 # glue is just a helper for glue_ 17:33:20 # we add recipes to objects 17:33:20 def glue(functions,applier,applicabler,objects,condition): 17:33:22 objectswithrecipes=[] 17:33:23 I expected BETTER 17:33:24 for i in xrange(len(objects)): 17:33:26 l=(lambda j:lambda app,*args:args[j])(i) 17:33:27 Vorpal, it's crazier. 17:33:28 objectswithrecipes.append((objects[i],l,"#"+str(i))) 17:33:29 return glue_(functions,applier,applicabler,objectswithrecipes,condition,5,objects) 17:33:31 that's how 17:33:41 Phantom_Hoover, but it uses the same interpreter as normal python? 17:33:54 this is actaully not the most oklo python i've ever seen, that would be the oklotalk-- impl 17:34:08 this is how I mine http://sprunge.us/SbMK 17:34:17 def funthatreturnsntharg(i): 17:34:17 return lambda*args:args[i] 17:34:21 that's my favourite name for a function tbh 17:34:25 # glue is just a helper for glue_ <-- that sounds like a weird naming scheme 17:34:45 oh, he meant wrapper? 17:34:48 i'll compile ski now 17:35:09 always seem to find coal if you just do it for long enough 17:35:20 Vorpal: 17.8115589619 seconds 17:35:23 to compile everything in that paste i showed 17:35:29 elliott, on what sort of hardware? 17:35:33 nice thing about Clue is you don't have to test the program! 17:35:47 Vorpal: um 2.1ghz core 2, 4 gigs of ram... i don't think it's ram intensive 17:35:48 just very slow 17:35:49 j-invariant: naturally 17:35:52 elliott, right. 17:35:53 "Tested by construction" as opposed to "Correct by construction" that we do in Epigram 17:35:57 LOL 17:36:40 it's a whole program paradigm based around testing: I can hardly beleive it's not subsumed java/C# etc by now 17:36:43 Vorpal: recompiling ski now so i can show the asts in my form 17:36:44 (ghetto ast) 17:36:53 elliott, knowing python you would probably get a 3x speed improvement if you switched to another language. 17:37:00 which is actually less ghetto than oklopol's: 17:37:01 ---- depth of first 17:37:02 Condition: is list?('#0') 17:37:02 Base branch (0) 17:37:04 '#0' 17:37:05 Rec branch (1) 17:37:08 Subast(0,0):['car', '#1'] 17:37:10 Main ast: ['inc', '#2'] 17:37:12 Vorpal: you would get a 3x speed improvement just removing all the stupid shit from the impl 17:37:21 elliott, hah 17:37:47 Vorpal: 17:37:50 ---- ski apply 17:37:50 [ski type?(#0)] 17:37:50 |.(0) => #0 17:37:51 |^(1) => #1 <= {(0,0): car(cdr(#0))} 17:37:52 elliott, try it with pypy? 17:37:53 |^(2) => #1 <= {(0,0): cadar(#0)} 17:37:55 |^(3) => #3 <= {(0,0): pair(cadaar(#0) car(cdr(#0))); (1,0): pair(cadar(#0) car(cdr(#0))); (2,0): pair(#1 #2)} 17:37:57 |^(4) => #2 <= {(0,0): car(#0); (1,0): pair(#1 car(cdr(#0)))} 17:37:59 maybe. :p 17:38:02 some simple memoisation would help. 17:38:09 also impressive: 17:38:10 ---- ski type? 17:38:10 [id(cons(deep first(#0) make singleton(depth of first(#0))))] <= [0 1] 17:38:11 |.([1, 0]) => #0 17:38:13 |.([2, 0]) => #0 17:38:15 |.([3, 0]) => #0 17:38:17 |.([2, 1]) => #0 17:38:19 |.([3, 2]) => #0 17:38:21 |.([3, 1]) => #0 17:38:22 uh 17:38:23 |.(_) => deep first with cutoff(#2) 17:38:27 it's pretty good at figuring out conditions :) 17:38:32 hm 17:38:39 the id(x) thing is just because this version of the lang is stupid 17:38:44 the stuff is... basically totally unnecessary 17:39:02 elliott, it should be able to automatically strip id() off anything 17:39:11 Vorpal: no, it should just not need 17:39:16 the reason it has id there is because oko did 17:39:19 ; ... 17:39:23 -!- aloril has joined. 17:39:25 because the normal conditional form can only handle one argument and shit 17:39:27 because it's stupid 17:39:35 heh 17:40:21 ---- depth of first 17:40:21 [is list?(#0)] <= [0] 17:40:21 |.(0) => #0 17:40:24 |^(1) => inc(#2) <= {(0,0): car(#1)} 17:40:24 ---- deep first 17:40:26 [is list?(#0)] 17:40:29 |.(0) => #0 17:40:30 |^(1) => #1 <= {(0,0): car(#0)} 17:40:32 ---- deep first with cutoff 17:40:34 [id(more than 3(depth of first(#0)))] <= [4] 17:40:36 |.(0) => deep first(#1) 17:40:38 |.(1) => #0 17:40:40 ^ that's quite an interesting block of functions. 17:40:49 remember that in the body, rather than the brancher/conditional, the args are all N forward 17:40:52 where N is the number of constants 17:40:57 because the first N are the constants shown :) 17:42:13 hm 17:42:41 i should probably explain the ast format 17:42:42 shouldn't i 17:43:05 sure why not, got a bit busy RL now though 17:43:40 i'll wait then, gotta have someone hearing my blabbering 17:57:31 hm 17:57:38 how the thell do I take a screenshot of minecraft/ 17:59:27 j-invariant: F1+F2 17:59:30 F1 to turn on camera, F2 to screenshot 17:59:34 goes in ~/.minecraft/screenshots 18:02:26 morning 18:03:13 hi oklopol 18:03:19 do you want cluebot.py 18:05:58 " Which is more worthless? Gravel or gold?" <<< gravel, you can make armor out of gold. 18:06:15 oklopol: gold armour lasts like 0 seconds 18:06:16 it is useless 18:11:45 -!- hagb4rd has quit (Ping timeout: 240 seconds). 18:19:44 -!- Slereah has quit (Ping timeout: 276 seconds). 18:20:04 It's *slightly* better than leather IIRC. 18:22:14 " also note that :s after the first in a :. are ignored" <<< that's not true! 18:22:30 oklopol: i clarified 18:22:36 oklopol: they're tested but don't go towards making the recursion scheme 18:22:37 right? 18:22:46 they are when recursion branches multiple times, like you'd expect 18:23:14 well...whatever :D 18:23:26 negate negative ~ {:. -5, -5 -> 5 18:23:26 : -4, -3 -> 5 18:23:26 :. -4, -3 -> 5 18:23:28 : -3, -1 -> 5 18:23:30 :. -3, -1 -> 5 18:23:32 : -2, 1 -> 5 } 18:23:34 oklopol: so is there a better way to write that 18:23:51 -!- Slereah has joined. 18:26:40 can you write prime factorization? 18:26:55 j-invariant: um :D 18:26:58 oklopol: do prime factorisation 18:27:10 j-invariant: you can do pretty much any recursive algorithm ... as long as each step can also be done ... prolly 18:27:34 " oklopol: gold armour lasts like 0 seconds" <<< not really 18:27:42 twice as good as leather 18:27:47 they always double 18:27:49 oklopol: don't you have...iron 18:27:55 and chainmail is between gold and iron 18:27:55 iron is 100000x superior to gold 18:27:58 and lasts like 100000x longer 18:27:59 oklopol: what 18:28:06 oklopol: chainmail is impossible to get without inventory editing 18:28:12 and also stops all damage 18:28:35 " well...whatever :D" <<< it's just the way you explained it sounded like things like quicksort would indeed not be possible 18:28:44 okay 18:28:57 i thought you thought you can't recurse multiple times, but just tail 18:29:08 hmm except not tail because many examples are non-tail 18:29:24 oklopol: so is there a better way to write that <<< one or two examples is enough 18:29:31 oklopol: oh yes indeed 18:29:33 I just meant would : be useful 18:30:02 " can you write prime factorization?" <<< i believe it's possible to compile a simple imperative language to this, and prove some sort of bound on compilation speed 18:30:10 erm, referenced bad line maybe 18:30:48 " oklopol: don't you have...iron" <<< i have iron, yes. all i'm saying is if sand was much easier to find than gravel, would you say gravel is worthless because it doesn't fall 18:31:04 (because sand is easier to get and falls oh so much nicer) 18:31:17 well sure 18:31:21 if you have gold and gravel, and a bunch of creepers coming, gold is better. 18:31:37 oklopol: certainly, but if i have iron and all the usual necessities, 18:31:41 and your life is more precious than emptying seas 18:31:44 oklopol: then i'd rather have a bunch of gravel than gold ... probably ... maybe not 18:31:48 only cuz of the cube :) 18:32:55 but it's clear that gold has no actual use, usually 18:33:02 except the exeptions 18:33:05 *exc 18:33:36 anyway personally i'm more happy finding gold than gravel 18:33:44 and i'm sure i would be even if gold wasn't valuable irl 18:33:59 gold blocks are pretty, and gold is rare, that's enough. 18:34:58 but yeah i'm sure you all wouldn't even mine gold, just like you don't mine anything else you find 18:35:25 cuz you already have a lifetime stock of almost one whole stack of it 18:35:51 so seriously, i slept all day 18:36:04 i went to sleep at sunrise, and it's now been dark for a while 18:36:14 i have an exam on monday :( 18:36:19 i'll probably fail AS USUAL 18:36:30 http://i.imgur.com/Q0GSe.jpg 18:36:30 btw checked 18:36:45 after looking at the numbers, i notice chainmail is actually weaker than gold 18:36:48 -!- azaq23 has quit (Quit: Leaving.). 18:36:53 oklopol: you fail exams? :P 18:37:03 also, yeah, chainmail is weak, but ... dude, it stops all your damage 18:37:31 i actually failed an exam once, it was about using windows and unix 18:37:46 you had to get everything right, apparently i fucked something up in the excel part 18:38:01 or was it the unix part, maybe i wasn't able to unzip something 18:38:12 don't remember, i hate computers anyway 18:38:23 -!- azaq23 has joined. 18:38:52 but anyway not being able to solve a problem in the exam is as good as failing, and that i've done a lot 18:39:15 for instance, in a recent exam, there was this problem that i couldn't solve (and later proved impossible) 18:39:19 oklopol: really? 18:39:36 so everyone got a 100% from the prob 18:39:56 really what 18:40:00 i said a whole bunch of things 18:42:21 so, basically what i could do is, instead of doing brute force search (which already discards multiples), i do a kind of variant of a*, so that if an operation *simplifies* another object, it's applied first 18:42:34 where list simplicity is just its size as a tree 18:42:40 oklopol: um are you talking about clue now 18:42:55 this will later be made pure, since this is just a special case of a strategy 18:43:04 but for now, it's let me write things like quicksort 18:43:20 elliott: why not 18:43:30 and i meant that as in 18:43:39 "yeah sure, you may interpret this as clue talk" 18:44:03 but surprisingly, there's also an implicit "yes" 18:44:10 oh shit shoppe -> 18:46:21 oklopol, hm, couldn't means-ends analysis work for clue (if that was it was about) 18:51:59 Vorpal: so can i tell you ast yet 18:52:00 *so can 18:52:03 or are you still real-life-crapping 18:52:11 "crapping"? 18:52:26 like 18:52:27 thingsing 18:52:31 except life is boring so things=crap 18:52:33 so it's crapping! 18:52:50 elliott, sure, tell me. 18:52:57 * Vorpal is now known as /dev/null 18:53:16 Vorpal: psht fine then i won't 18:53:18 elliott, or why not tell someone else, sure clue was interesting, the ast not so much 18:53:31 Vorpal: the ast is just the shit that shows you waht it actually compiles to 18:53:34 which is the only way to understand it 18:53:43 elliott, oh okay 18:53:58 elliott, so it compiles to ast? (what?) 18:54:06 Vorpal: yes, before it compiles to a python function 18:54:07 okay so 18:54:09 [id(#0)] <= [0 1] 18:54:09 |.(0) => #0 18:54:10 |.(1) => #0 18:54:12 |.(2) => #0 18:54:14 |.(3) => #0 18:54:16 |.(_) => #1 18:54:18 basically 18:54:21 every clue function is of the form 18:54:50 yes? 18:55:07 \a1 a2 a3 ... -> (\c1 c2 c3 ... a1 a2 a3 ... -> case B of x -> ...; y -> ...; z -> ...; [and optionally] _ -> ...) cv1 cv2 cv3 ... a1 a2 a3 ... 18:55:13 c1,c2,c3 are the constants 18:55:16 hm 18:55:17 and cv1,2,3 are their values 18:55:23 elliott, this is pseudo-haskell? 18:55:24 B is the branching expression 18:55:26 yes 18:55:29 right 18:55:38 so, here, in this ghetto ast form, [x] in the top line is the branching expression (B) 18:55:51 there are two constants; c1's value is 0, and c2's value is 1 18:55:57 and these get passed as the first two arguments to the function itself 18:56:03 whereas the branching expression just sees the actual arguments 18:56:05 the problem with inference atm, is that you have things that build bigger things in your bag, now say you want to find a certain thing inside a list, should be easy because even though you need a depth 3 expression for that, there's only a finite amount of sublists, so just look at them all; unfortunately, by simply using cons, at level 3, you'll be looking at millions and millions of lists 18:56:11 elliott, you don't indent the ast to make it easier to follow? 18:56:17 so, this switches on id(first arg), i.e. the first arg 18:56:27 0 to [first arg], same with 1 2 3; anything else to [second arg] 18:56:32 in this case, the first arg is 0, and the second 1 18:56:34 those are the two constants 18:56:41 you can see this because after the branching expression it has "<= [0 1]" 18:56:43 which is the list of constants 18:56:47 hm 18:56:48 Vorpal: doesn't need it? 18:56:49 so really i could probably make it faster by *adding every sublist* in the set of objects currently usable in expressions 18:56:53 functions all follow this form 18:57:30 Vorpal: oh and function arguments are just written adjacent 18:57:31 no commas 18:57:32 Vorpal: so, now, considering some recursion 18:57:40 [is zero?(#0)] 18:57:40 |^(0) => #2 <= {(0,0): inc(#0); (0,1): inc(inc(#1))} 18:57:40 |.(1) => #1 18:57:44 booleans are just done as integers here 18:57:49 ^ means it's a recursive branch 18:57:53 there are no constants here 18:58:02 but we can see, if the parameter is zero, we just return the second parameter 18:58:06 because #n is the nth parameter 18:58:12 if it's not, we get recursion 18:58:22 so, there's 1 recursion here 18:58:28 so the first element of the recursion pairs is always 0 18:58:30 meaning first recursion 18:58:39 elliott, this isn't the AST. This is a human representation of the AST. Or if it is the AST, why the hell are you working on it in a textual form in the program ;) 18:58:40 (consider fib, which would have two, and so would have first-elements of 1) 18:58:47 Vorpal: yes, it's the representation of the ast 18:58:51 which is important for figuring out what the function does 18:59:06 Vorpal: ok, so that list basically says: the first recursion has first parameter inc(#0) and second parameter inc(inc(#1)) 18:59:12 which is first param + 1, and second param + 2, respectively 18:59:15 elliott, wouldn't looking at the compiled result work? Or is that unreadable? 18:59:33 the result of this recursion is treated as an extra parameter to the function 18:59:43 and in this case, we just return the subrecursion with no processing -- i.e. it's tail recursive 18:59:49 elliott, so if ^ is recursive then . is a base case? 18:59:50 right 18:59:51 Vorpal: this IS the compiled result 19:00:03 Vorpal: the ast is hard to follow because instead of writing it in sexp-like form, you name subtrees, and just say (cons #4 #6) where #4 and #6 are the fourth and sixth expressions defined 19:00:04 Vorpal: the compiled-compiled result is just a python function which processes the ast list when called 19:00:06 elliott: I can't deal with Haskell - Ishould program in Scheme 19:00:16 hm 19:00:20 elliott, ew 19:00:30 j-invariant: http://esolangs.org/wiki/Brainfuck/w/index.php%3Ftitle%3DTalk:Brainfuck/index.php#Implementation proof that scheme is best language 19:00:31 elliott, why not compile it to haskell or something 19:00:35 :) 19:00:43 Vorpal: um because the impl is written in python 19:00:44 it's an interpreter 19:00:58 Vorpal: also because the language isn't lazy/ 19:01:00 * 19:01:01 *? 19:01:04 that's a kinda stupid question. 19:01:07 elliott, but the actual interpretation doesn't look complicated? 19:01:14 of the ast I mean 19:01:17 -!- augur has changed nick to fum. 19:01:20 yes, that's why most of the code is the other parts. 19:01:30 oklopol: i think i'm going to change the ghetto_ast to show recursion normally 19:01:36 as in, as actual applications 19:01:38 elliott, oh I thought it was. Well compiling to scheme then? 19:01:53 Vorpal: that would require a python implementation _and_ a scheme implementation and vastly complicate everything 19:02:14 -!- fum has changed nick to augur. 19:02:17 elliott, we could move away from python. This alone would speed it up 19:02:25 elliott: do you drop the main branch? i can't see it in "is zero?" 19:02:29 Vorpal: yeah cuz scheme is sooooooooooooo fast 19:02:41 elliott, well there is one compiler 19:02:42 oklopol: the main branch being what in particular? 19:02:46 elliott, forgot the name of it 19:02:50 tbh that was the first nontrivial one i actually gave some thought to, apart from "mm correct general feel" 19:02:58 Vorpal: restricted subset of r4rs. also, oklo python is beautiful 19:03:11 oklopol: what was the fisrt nontrivial one you actually gave some thought to 19:03:11 erm what 19:03:11 *first 19:03:17 "is zero?" is, i just realized 19:03:19 elliott, what is it that makes it oklo? 19:03:25 oklopol: :D 19:03:25 "is zero?", and not "negate negative" 19:03:28 elliott, the weird thing with exception handling? 19:03:29 Vorpal: oklo 19:03:39 oklopol: the main branch is between => and <= 19:03:40 Vorpal: no 19:03:45 i assumed it was negate negative, because of the incing twice 19:03:48 oklopol: but i'm going to make it so that negate negative looks like this: 19:03:48 no wait what 19:03:51 [is zero?(#0)] 19:03:59 argh 19:04:08 |^(0) => recurse(inc(#0) inc(inc(#1))) 19:04:13 |.(1) => #1 19:04:17 except i'll give recurse a name 19:04:23 oklopol: should the recursion function be @ or $ 19:04:28 in the display 19:04:52 elliott, well I don't know what in the code is oklo. Just saying oklo makes it oklo is a tautology.. 19:04:59 Vorpal: oklopol wrote it 19:05:28 elliott, okay. But does it differ in coding style or something from normal python? 19:05:41 elliott, or is it just defined by author being oklopol? 19:05:41 umm yes 19:05:43 in every way 19:05:47 oklopol: link me to your scheme interp again 19:05:47 on vjn 19:06:16 " oklopol: i think i'm going to change the ghetto_ast to show recursion normally" <<< should be done, yes, just a tiny amt of work so i skipped it 19:06:21 elliott, so just wondering if you can give me some representative example showing what makes it oklo :) 19:06:40 oklopol: limme scheme terp vjn prove Vorpal oklopy langue 19:07:13 elliott: so was that thing actually the is zero function or is it a part of negate negative 19:07:14 elliott, your keyboard seems to have broken 19:07:26 it's negate negative clearly, that's why i'm asking 19:07:53 Vorpal: i usually have a rather unique way of writing in a language 19:08:07 oklopol: it was zero yeah now link me to scheme terp 19:08:10 usually it's in the canonical ugly code direction 19:08:14 ill make Vorpal rue day he evr asked 19:08:21 oklopol, yes I understood that. But I was basically wondering unique in what way. :) 19:08:24 oklopol: technically i'd prefer to show him the oklotalk-- impl but that's somewhere in space 19:08:25 elliott: scheme interp in what language? 19:08:31 Vorpal: your smiling is creepy 19:08:32 oklopol: python 19:09:05 elliott, ooh, like a creeper? 19:09:43 elliott: that can not be the is zero function! 19:09:51 [id(#0)] <= [0 1] 19:09:51 |.(0) => #1 19:09:51 |.(_) => #0 19:09:53 yes it can? 19:09:57 no but the 19:10:03 [is zero?(#0)] 19:10:03 argh 19:10:03 |^(0) => recurse(inc(#0) inc(inc(#1))) 19:10:03 |.(1) => #1 19:10:07 oklopol: oh well yes. 19:10:10 so 19:10:10 that's negate negative. 19:10:11 umm 19:10:17 main branch is not in there 19:10:17 as i sedd 19:10:19 that's negate negative 19:10:21 oklopol: howso 19:10:24 oklopol: the main branch is just #2 19:10:26 so it gets expanded out 19:10:32 erm fuck 19:10:33 oklopol: the point is that i'm going to inline all the recursions 19:10:35 yeah us right 19:10:36 to be, you know 19:10:37 pretty 19:10:40 see what happened was 19:10:44 unless it does like cons(#2 #2) 19:10:46 i didn't understand how tail recursion works 19:10:46 but who would do that 19:10:48 :D 19:10:49 yeah 19:10:50 happens 19:10:52 because it's a very new concept for me! 19:10:54 in life sometimes 19:10:56 absolutely 19:11:16 but right, when you write it in recurse(inc(#0) inc(inc(#1))) form, it's rather clear this function does not need cons 19:11:37 oklopol, just remember the linking of code :) 19:12:01 anyway i want functions to return multiple values, that would fit the scheme so perfectly, especially since you don't actually ever *call* functions 19:13:14 trivia: you can write code that looks like you're returning multiple values now, but they are completely ignored in examples by parser 19:13:37 win 3 19:13:39 -!- Sasha2 has quit (Quit: NO U). 19:14:04 ---- negate negative 19:14:04 [is zero?(#0)] 19:14:04 |^(0) => #2 19:14:06 |.(1) => #1 19:14:07 :DDDD 19:14:10 so elegant 19:14:32 ---- negate negative 19:14:32 [is zero?(#0)] 19:14:32 |^(0) => @(inc(#0) inc(inc(#1))) 19:14:34 |.(1) => #1 19:14:37 oklopol: ^ 19:14:55 actually i should probably drop the ^/. indicator 19:15:02 since it doesn't actually help you understand it now 19:15:04 opnz oklopol? 19:15:32 tusho: can't find it in there 19:15:55 ---- negate negative 19:15:55 [is zero?(#0)] 19:15:55 | 0 => @(inc(#0) inc(inc(#1))) 19:15:57 | 1 => #1 19:15:59 ---- negate positive 19:16:01 [is zero?(#0)] 19:16:03 | 0 => @(dec(#0) dec(dec(#1))) 19:16:05 | 1 => #1 19:16:07 oklopol: ...are you back in time? 19:16:15 HEY i JUST REALISED, i can replace constants like this 19:16:39 elliott: i was reading contents of vj.fi 19:16:41 *vjn.fi 19:16:43 i mean scp 19:16:46 oklopol: is tusho there a lot? 19:16:57 i saw a folder named tusho... 19:17:03 :Ddddd what's in there 19:17:44 ah the redirecting service 19:17:58 where does it go 19:18:16 http://www.youtube.com/watch?v=OYws8biwOYc someone has redirected "awesome" to this 19:18:16 :D 19:18:37 i... have seen that 19:19:00 so even more 100% sure that it was not just a random internet guy 19:19:17 tusho goes to google.com 19:19:29 xD 19:19:38 http://www.wellnowwhat.net/transfers/Tusho%20is%20a%20girl%20part%201.mov 19:19:42 is tusho1 19:19:46 :D 19:19:58 damn 19:20:01 oh god not that 19:20:05 why can't we forget i was ever proved female 19:20:43 indeed 19:21:56 [id(compare(#0 compare(#0 #0)))] 19:21:56 | -1 => 1 19:21:56 | 0 => 0 19:21:58 | 1 => 0 19:22:01 ...can't believe this is actually kinda working :D 19:22:17 oklopol: :( my ast is getting readable enough that i can't explain how amazing it is 19:22:48 elliott, that statement made no sense 19:23:00 unless unreadable == amazing 19:23:02 before i could give a lesson on what each part ment and how it switched and stuff 19:23:04 made a bit tho 19:23:06 but now anyone can make sense of it... 19:23:12 oklopol: made a bit what 19:23:16 sens 19:24:09 i agree that's kind beautiful, as long as you have #x actually mean constants and arguments, and not named expressions 19:24:21 and actually write a tree 19:24:24 erm 19:24:44 wait i guess it's just when the subrecursion inputs are calculated that new things are named? 19:25:02 bleh, i'll just let you figure this out, and complain about the obvious problems if there are any 19:25:34 ohhh 19:25:47 -!- coppro has quit (*.net *.split). 19:25:50 -!- lambdabot has quit (*.net *.split). 19:25:55 -!- Leonidas has quit (*.net *.split). 19:25:57 yeah i guess the reason for named things is that that's actually how the computation goes, since it's faster not to compute things multiple times 19:26:05 of course, usually the named expression is only used once 19:26:43 -!- coppro has joined. 19:26:44 -!- lambdabot has joined. 19:26:44 -!- Leonidas has joined. 19:29:33 oklopol: 19:29:35 [ski type?(#0)] 19:29:36 | 0 => #0 19:29:36 | 1 => @(car(cdr(#0))) 19:29:37 | 2 => @(cadar(#0)) 19:29:39 | 3 => @(pair(#1 #2)) 19:29:41 | 4 => @(pair(#1 car(cdr(#0)))) 19:29:46 oklopol, is this for the compiled output or for the process of compilation? If it is for the compiled output, couldn't you keep a counter for each named expression and inline it just used once? 19:29:46 this shit actually works :D 19:29:48 elliott: btw i think you can use constants when computing the condition, i think it's more likely that when it tries compare(#0 #0), it actually substitutes that for the code for generating the number 0 (which was the constant zero), because it noticed due to memoization that they have the same results. 19:30:03 because it can't actually measure whether constant 0 or compare(arg1 arg1) is faster 19:30:18 depth of first isn't working i don't think, it's showing wrongly 19:30:27 oklopol: no, you can't use such a constant 19:30:30 oklopol: because it gets the first param as #0 19:30:32 even if you have constants 19:30:38 so clearly it doesn't get constants :) 19:30:40 elliott: what are #0 #1 and #2 in that, it's not clear. 19:30:48 things...i'm trying to work it out 19:31:31 i'll look in the code to see if you're right about constants 19:31:39 i'm rather convinced you are 19:35:16 yeah 19:35:25 glue is not called with that information. 19:35:35 compile_cond 19:35:36 # find the code for determining branch 19:35:36 _,preprocessing,prepcode=glue(clue.bag, 19:35:36 stuff.apply_to_visible, 19:35:36 (lambda f,args:stuff.getarity(f)==len(args)), 19:35:36 nontestbranchinputs, 19:35:36 (lambda a:is_partition(stuff.apply_to_visible(clue.cond,[a])))) 19:35:42 nontestbranchinputes 19:35:44 *ts 19:35:52 should have constants before it 19:36:16 oklopol: you should add that :P 19:36:32 oklopol: should i patch it up to make it a little bit more efficient? 19:36:42 well, at least the great thing about clue is no programs should break 19:37:22 not many languages where you can start giving more unnamed args to functions, and they still work the same way 19:37:27 [ski type?(#0)] 19:37:27 | 0 => #0 19:37:27 | aaa1 => @(car(cdr(#0))) 19:37:29 | aaa2 => @(cadar(#0)) 19:37:31 | aaaaaaaaa3 => @(pair(#1 #2)) 19:37:33 | aaaaaa4 => @(pair(#1 car(cdr(#0)))) 19:37:35 now that's what i call debugging output 19:37:47 :D 19:37:56 hmm wait what 19:38:04 maybe i should fix it, that's so clearly an error 19:38:17 oh man, this is quite impressively broken i think 19:38:32 but i wonder how localized i can make the change, i believe pretty localized, but hmmhmm 19:38:42 oklopol: i can do it if you want, this is fun 19:38:54 well sure 19:39:18 copy paste the code for fixed_h_objs from some other func, unless you know what invisible_lists are 19:39:40 they are just when you want a vector such that all things are actually applied to their contents 19:39:51 oklopol: what xD 19:39:56 so that we can have multiple examples, and functions apply to them separately 19:40:01 i have never once wanted that 19:40:06 nor do i understand, but 19:40:21 well, you need it for this 19:40:47 it's a rather common thing to need 19:41:06 NEED, not even want 19:41:14 just as soon as i fix this abomination 19:41:57 ah!!!!!!!!!! 19:42:41 see this way i can write glue (which is the only thing that does any search) in such a way that it doesn't have to know anything about multiple examples, or even what examples are, it's just looking for a path from A to B, for expressions A and B, and given operations for walking (contents of bag) 19:43:22 oklopol: and yet it's a hideous function 19:43:26 very true to the Clue spirit i feel 19:43:28 :D 19:44:15 well there's tons of optimization 19:44:19 otherwise it's not that many lines 19:44:24 also some debugging stuff i haven't removed 19:45:02 the basic reason is the compiler actually compiles everything into a python function, the asts aren't actually executed 19:45:12 and of course i do this by building hideous lambdas 19:45:23 newobjrecipe=(lambda fun_,subsetrecs_ : 19:45:23 (lambda app,*args : 19:45:24 app(fun_,map(lambda o:o(app,*args),subsetrecs_))))(fun,subsetrecs) 19:46:45 wtffff 19:46:47 at this 19:47:29 I just need a really simple (to specify) program -- but filling the details in (i.e. writing it) is a huge hassle 19:47:38 j-invariant: that's why clue is great! 19:47:55 j-invariant: figures out all the little details for you, so long as you specify them all in an unreadable form underneath the examples 19:48:31 oklopol: can i have some coffee, i need it to understand clue 19:48:32 what makes glue hideous is that when it's building objects, it's actually building the actual python object, an ast explaining how it was made, and a python lambda that makes it from the arguments given to the original glue function 19:48:39 and then i have many lines that do the memoization stuff 19:48:43 ahaha I doubt Clue can do what I want 19:48:55 you should make a human powered web interface for Clue 19:48:56 and i have a big try catch thing that checks whether applications succeed 19:49:05 or maybe a different language all together 19:50:13 and applying, being applicable, what we're looking for, what functions we may use are abstracted away 19:51:11 their exact semantics are not as pretty as they could be ofc, might take 10 minutes to see how to make that thing infer say brainfuck code 19:52:38 but basically you could have objects be contents of brainfuck tape, and asts be code that generates them, prolly just leave recs empty (or generate bytecode of some sort) 19:53:48 then give a bag of operations like -- could be applicable iff object (the tape) has more than one at current cell, and it would add -- to the end of ast, and would decrement current cell twice to get the new object 19:54:03 glue would automatically memoize away multiple ways to get the same tape contents 19:54:30 oklopol: am i correct in thinking that hardcoding the brancher/conditional to would be the best thing? 19:54:40 oklopol: since it works perfectly fine when you do that, and is also a very common thing to do 19:54:43 and just removing <> entirely 19:54:55 does it break ski? 19:55:17 ilkka just put everywhere and told me conditions are done in a stupid way 19:55:24 oklopol: well yes, in that you'd have to strip <> from it 19:55:25 and i said duh 19:55:30 and then also get rid of ; since it'd be redundant 19:55:36 but other than that it should work perfectly 19:55:51 maybe have it as backwards compatibility :D 19:55:52 oklopol: call it "clue 1.5" :P 19:55:53 :DDDDDDDDDDDDDDDDDDDDDDDD 19:55:58 oklopol: lol 19:55:59 oklopol: you joke 19:56:10 oklopol: the backwards compatibility is the fact that there's a file called clue.py.old 19:56:12 :D 19:56:20 indeed 19:56:45 or "that old clue.rar on vjn server if i didn't overwrite it yet" 19:56:52 i have that saved :> 19:57:00 oklopol: clue 1.5 — more powerful conditions, less thinking about the bag, and OPTIMISED! 19:57:04 and also 19:57:07 erm 19:57:07 CONSTANTS IN THE CONDITIONAL 19:57:22 erm? 19:57:39 well if i make 1.5, it'll have a completely different condition system, not just dropping 19:57:53 oklopol: 1.25 19:57:59 heh 19:58:09 i don't think that's really necessary, just have for now 19:58:12 oklopol: I'm going to do it whether you want to bother or not, just tell me what version number to give it :P 19:58:19 ohhh 19:58:22 well i'm optimising it anyway...and putting constants in conditions 19:58:23 then you can use 1.5 19:58:25 *1.25 19:58:30 maybe i'll actually call mine 1.5 19:58:30 so i might as well fix the condition system a little bit while i am at it? 19:58:41 you can! 19:58:57 ...how? 19:59:07 oklopol: make it always assume is given, remove <> from the parser 19:59:11 and then in the ast printer, just ignore condname 19:59:17 and use condast instead 20:00:25 also how were you planning to optimize? my suggestion is you add a "size" function to glue, and it always makes sure all subobjects are in the bag 20:00:37 so that you don't make objects bigger, unless you really have to 20:00:59 this would be rather easy to do, and would probably make ski compile in a millisecond 20:01:27 oklopol: i'll probably do that 20:01:35 -!- luatre has quit (Remote host closed the connection). 20:01:40 -!- luatre has joined. 20:01:44 oklopol: first bit of optimisation was going to be "fix your stupid fucking is applicable" function though :D 20:01:54 ok luatre now has nicer function printing!!! 20:02:05 feed it something recursive 20:02:06 and gawp 20:02:07 in fact 20:02:08 just do it without making glue dependent on the rest of the code, i'm very strict about the conceptual purity of code 20:02:08 i will 20:02:31 what do you mean fix applicable function? 20:02:40 where you call a function to see if it can be called. 20:02:48 how else would you do it? 20:03:10 oklopol: um isinstance(f,types.FunctionType) 20:03:16 what 20:03:20 what 20:03:41 let's see... 20:03:54 i mean 20:04:04 what if the function only works for integers? 20:04:13 oklopol: irrelevant, you call it with no arguments 20:04:16 so you can't find that out anyway 20:04:41 ... length ~ {:. [1,2,3] -> 3 : [2,3] -> 2 :. [[],2,[1,2],3] -> 4 : [2,[1,2],3] -> 3} length ~ {. [] -> 0} length ~ ; cdr; inc 20:04:41 ValueError: substring not found :( 20:04:47 what 20:04:48 oh 20:04:52 .:. length ~ {:. [1,2,3] -> 3 : [2,3] -> 2 :. [[],2,[1,2],3] -> 4 : [2,[1,2],3] -> 3} length ~ {. [] -> 0} length ~ ; cdr; inc 20:04:52 DepthLimitException: depth limit exceeded (length) :( 20:04:54 call it with no arguments? applicabler(fun,subsetobjs) 20:04:56 :D 20:05:00 you do not call it with no arguments 20:05:01 .:. length ~ {:. [1,2,3] -> 3 : [2,3] -> 2 :. [[],2,[1,2],3] -> 4 : [2,[1,2],3] -> 3} length ~ {. [] -> 0} length ~ ; cdr; inc; #0 20:05:02 length: [empty(#0)] | False => inc(@(cdr(#0))) | True => 0 20:05:24 applicabler is one of the most important things in the whole system, currently of little use because you can't make your functions fail explicitly 20:05:26 def is_function(a): 20:05:26 try: 20:05:26 a() 20:05:27 except Exception,e: 20:05:29 if str(e)[-12:]=="not callable": 20:05:31 return False 20:05:33 return True 20:05:35 oklopol: i mean that. 20:05:36 oh you meant that? 20:05:38 ohhhhhh 20:05:45 20:04 elliott: .:. length ~ {:. [1,2,3] -> 3 : [2,3] -> 2 :. [[],2,[1,2],3] -> 4 : [2,[1,2],3] -> 3} length ~ {. [] -> 0} length ~ ; cdr; inc; #0 20:05:45 20:04 luatre: length: [empty(#0)] | False => inc(@(cdr(#0))) | True => 0 20:05:46 dude 20:05:47 oklopol 20:05:47 i thought you wanted to remove applicabler from glue :D 20:05:49 it has booleans 20:05:53 and you didn't even realise :D 20:06:06 well it uses python types directly 20:06:09 right 20:06:09 so sure 20:06:16 oklopol: ok so here's what i'm planning to do for clue 1.25 20:06:16 you just don't have operations for them yet 20:06:20 oklopol: optimisations and stuff 20:06:25 oklopol: remove <> 20:06:29 oklopol: remove commas from lists :D 20:06:37 oklopol: rename empty to empty? and make it return an int 20:06:41 yeah all those i agree with 20:06:45 oklopol: and maybe add those neg/sub you have 20:06:45 or 20:06:46 better 20:06:48 have stdlib.clue 20:06:53 which implements them using my impls :D 20:07:05 although i doubt you'll be able to donate that many optimizations 20:07:09 that are actually relevant 20:07:14 probably not, but who cares 20:07:15 well, except the one i just explained to you 20:07:25 19:59 oklopol: also how were you planning to optimize? my suggestion is you add a "size" function to glue, and it always makes sure all subobjects are in the bag 20:07:26 yeah 20:07:28 i'll do that 20:07:29 if i can :P 20:07:41 it can get slightly hairy, but shouldn't be that hard 20:07:57 hmhmm 20:08:01 or not... dunno 20:09:21 -!- ais523 has joined. 20:09:23 O() wise, it's enough to check if at least one new object was added that was smaller than the ones it was derived from, and if such an object was added, skip adding the big stuff on this iteration 20:09:32 -!- oerjan has joined. 20:09:53 unfortunately, if not all things are added, it also means you should start checking that you're not doing redundant stuff 20:10:23 which leads to all kinds of very nice fastenings, but will also make glue also conceptually ugly. 20:10:51 Exception: Can't compile cadar(), deep first with cutoff(), deep first(), make singleton(), cadaar(), depth of first(), more than 3(), pair(), ski type?(), ski apply() 20:10:52 :D 20:10:57 currently, glue is basically just for all subsets of objects found so far, check what functions can be applied, apply them all, remove duplicates, add to known objects. 20:10:58 silly me 20:11:18 "ski type?" ;O 20:11:24 wat 20:11:27 i was just using the old ski 20:11:29 in ski apply 20:11:35 yeah and? 20:11:42 A NONTRIVIAL CONDITION! 20:11:48 should probably change that 20:11:49 also 20:11:53 wait nm 20:11:57 oklopol: nah, you can't tell it's a condition in 1.25! 20:11:57 also 20:11:59 ---- succ 20:12:00 [?(#0)] 20:12:01 | _ => inc(#0) 20:12:05 but the code 20:12:06 succ ~ {. 0 -> 1 20:12:07 . 1 -> 2 20:12:09 . 2 -> 3 } 20:12:11 succ ~ _; inc 20:12:15 oklopol: clue decided it didn't need _ :D 20:12:17 isn't that amazing 20:12:17 well = ; ski type? 20:12:19 it's so smart 20:12:30 very 20:12:47 would be fun to look at the actual python bytecode generated btw 20:13:00 "fun" 20:13:08 and perhaps make a version of glue that writes java bytecode instead 20:13:15 or, abstract that away as well 20:13:22 oklopol: don't you call clue functions as the lambda 20:13:27 yes 20:13:29 so the bytecode will just look like... a function call to the interpreter 20:13:43 ---- negate negative 20:13:43 [#0] 20:13:43 | _ => #2 20:13:44 what? 20:13:44 | 0 => #1 20:13:49 oklopol: ...it decided it didn't need "is zero?" 20:13:50 holy shit 20:13:52 it is so fucking smart 20:14:05 a function call to the interpreter?!? 20:14:08 what the fuck man 20:14:11 IT ACTUALLY COMPILES TO PYTHON 20:14:18 oklopol: to...python strings? 20:14:18 there is not interpretation 20:14:19 does it actually 20:14:21 NO 20:14:27 that's why glue looks ugly 20:14:27 oklopol: it manually writes bytecode? 20:14:42 no, it writes a whole mess of lambdas. 20:14:56 oklopol: ok, but the point is that the lambdas don't get inlined inside each other 20:15:04 so it's still going to look like a single lambda with a big environment full of lambdas 20:15:19 well you'll get very fragmented and jumpy python bytecode, yes 20:15:32 but not a function call the an interpreter, because there isn't one 20:15:39 *to an 20:17:22 i could, i guess, make glue directly write bytecode, if i abstracted away code generation 20:17:26 which wouldn't be very hard 20:18:04 and i could then change tail recursion to an actual loop ofc 20:18:45 which happens outside glue ofc, glue never recurses into code that hasn't been completely inferred yet 20:18:56 so 20:19:13 yeah it doesn't understand recursion, i guess that's what my point was 20:19:40 you'll be pleased to know, i've broken ski somehow 20:19:47 :P 20:19:53 it wasn't very hard to write 20:21:10 maybe i should write a really simple and stupid version of that glue + size_functions 20:21:26 i basically just wanna see if pivot starts magically compiling fast 20:22:32 incidentally why does make singletone exist 20:22:36 you can do pair with just #[] and cons 20:22:53 *singleton 20:23:04 or even just that functions can be neutral, building or demolishing 20:23:20 oklopol: i'll be happy to incorporate those changes into 1.25 :P 20:23:26 elliott: because it was easier to make things compile that way 20:23:41 oklopol: :D 20:23:44 oklopol: see with clue 1.25 it just works 20:24:01 pair ~ {. 1, 2 -> [1, 2] 20:24:01 . [3], [4, 5] -> [[3], [4, 5]]} 20:24:01 pair ~ #[]; cons 20:24:03 well 20:24:05 *cons; #[] 20:24:06 for elegant 20:24:08 *elegance 20:24:12 -!- zzo38 has joined. 20:24:13 building and demolishing could easily be actual concepts you can have for your objects as well, it's clear what they are in general for inductive data structures 20:24:16 what are the terms in cs? 20:24:20 the correct terms 20:24:22 dunno :D 20:24:23 like building = cons 20:24:24 oklopol: erm 20:24:27 demolishing = car, cdr 20:24:29 oklopol: ah 20:24:32 oklopol: constructing, destructing 20:24:35 oklopol: introduction and elimination 20:24:35 ah! 20:24:39 or what j-invariant said 20:24:45 i prefer elliott 20:24:46 's 20:24:48 because those i knew 20:24:50 :( 20:24:54 mine have a nice balance :P 20:25:04 by which i mean oo uses constructing 20:25:07 of course 20:25:27 oo doesn't really make inductive data structures very natural 20:26:11 hmm 20:28:06 i should also have some kind of "in-place" changing of things, that is, you don't have to demolish an object, get to one of its subobjects, change it, and build the original back, but instead, you can virtually demolish, and sort of just get an (object, pointer) pair, such that building something out of this new object actually builds something out of the subobject referenced by the pointer, and the actual object is built on top 20:28:11 i mean 20:28:35 as an implementation detail, since elliott claims he might want to do this kinda stuff 20:28:50 well yeah if it's not too hard. 20:28:53 whereas it's clear i'll just do stuff in my head and then go all meeeeeeh code. 20:28:54 j-invariant: Which maze? 20:29:04 zzo38: the crazy mirror maze thing 20:29:26 elliott: that thing i just mentioned might be a tad complicated to do in a nice way 20:29:26 oklopol: introduction and elimination <-- that's more for type systems and logic deductions, isn't it? 20:30:01 the reason i like demolishing is that you actually destroy an inductive data structure *completely* 20:30:04 oklopol: yeah 20:30:05 when inferring 20:30:18 you don't just use it once or twice 20:30:32 i mean you will in the compiled prog, ofc 20:31:03 like if x :: a and y :: b then (x,y) :: (a,b) 20:31:05 j-invariant: Although the display-mode ("P") function doesn't work here, you can still use bombs and bullets. Also there are various fake walls. 20:31:24 elliott: or more like, easy to do in a nice way, but not at all easy to see how to actually have it make things fast, instead of just adding another exponential blow-up 20:31:32 well 20:31:40 or not, but i'm not gonna get into the details maybe 20:31:46 oerjan: it's what dependent losers use :D like me! 20:33:16 maybe i'll add building and demolishing as quick hacks now, as poc 20:33:50 but the functions are actual python functions, so i can't just quickly add that info to them :( 20:33:54 or i can, but that sounds ugly 20:34:00 zzo38: I am raelly stunned by this game btw 20:34:13 zzo38: it is very detailed and tricky 20:34:33 j-invariant: Yes that level with mirrors is not one of the best levels I have created. The other levels are better. 20:34:45 O mean the whole thing 20:35:03 did j-invariant mention the mirror room at some point 20:35:12 just checking 20:35:21 yes 20:35:24 okay 20:35:37 would've been so classis zzo38 to guess a specific room you're referring to 20:35:38 :P 20:35:40 *classic 20:36:41 elliott: makes sense 20:36:44 oklopol: i suggest rewriting it as an ast interpreter so that your structure easily allows compilation :} 20:36:52 (just because an interp is easiest first) 20:37:38 * oerjan suddenly gets the idea of a codependent programming language 20:37:42 -!- Wamanuz has quit (Remote host closed the connection). 20:38:04 j-invariant: Still, the mirror maze is solvable with some trial/errors (other levels are better). Just some hints, use bullets/bombs in case you forget where you are. Another way is that some things will push you and you can hear the noise of pushing. And, you can pick up potions, too. 20:38:25 nono i just need to have a function that extracts "construction type" information from functions, unspecified for most functions, but specified as building or demolishing for certain stdlib functions, in glue 20:38:39 so basically i'd be done if i could just add a string of information to the stdlib functions 20:39:26 zzo38: I am raelly stunned by this game btw <-- so it has lots of ufos? 20:39:31 (If you have a save game, you can restore the save game and try a different level if you don't like that one?) 20:39:47 oerjan: read you as oklopol was like, what, that's too real for him to mention 20:39:49 (rael lol) 20:41:10 oklopol: so when does the depth limit get exceedemated 20:42:37 return glue_(functions,applier,applicabler,lambda a:None,objectswithrecipes,condition,5,objects) 20:42:41 in glue 20:42:49 return glue_(functions,applier,applicabler,cons_typer,objects+newobjects,condition,depth_lim-1,orig_objs,objectlookup) 20:42:51 in glue_ 20:43:12 so it only does 5 rounds 20:43:16 elliott: that _doesn't_ make sense 20:43:25 later, it will only make 5 *build* rounds 20:43:28 oerjan: what 20:43:31 oklopol: no no no i mean 20:43:35 oklopol: if the depth limit gets exceeded 20:43:37 what has clue failed to do 20:43:38 *no no 20:43:40 at a high level 20:43:46 it has failed to find an implementatoin. 20:43:49 *implementation 20:43:55 for something 20:44:09 -!- Wamanuz has joined. 20:44:13 elliott: oerjan: read you as oklopol was like, what, that's too real for him to mention 20:44:22 oerjan: read your name as oklopol 20:44:23 i was like 20:44:24 what 20:44:29 that's too real for him to mention 20:44:40 oklopol: okay, so basically it means "im not smurf enough to this function?" 20:44:41 oklopol; was 20:45:13 where smurf is smart and to is to make 20:45:16 yes? 20:45:25 yes 20:45:33 in a very precise sense 20:45:35 oklopol: but that's...bad, yes 20:45:36 elliott: ufos are too real for oklopol to mention, gotcha 20:45:38 that it looks at the size 5 ball. 20:45:41 oerjan: no but raels 20:46:26 yeah i didn't know rael 20:46:40 oklopol: i think that <> is actually needed in some cases :D 20:46:43 e.g. deep first with cutoff 20:46:47 doesn't work without ... 20:46:51 ...wait what? 20:46:52 ? 20:46:59 it should, just slightly slower 20:47:09 it's not actually slower, this 20:47:34 well obviously the functions that previously used something other than id will now be slower 20:47:42 because you're giving it the topmost function 20:47:45 oklopol: nonono, this is confusing 20:47:47 instead of having it do that for you 20:47:55 okay 20:48:36 so how do i add a bit of information to a function 20:48:46 i don't want to make my own function class or anything 20:48:55 that'd take MINUTES 20:49:11 oklopol: hmm 20:49:24 oklopol: func.foo = 3 20:49:25 works fine 20:49:26 :D 20:50:00 xD 20:50:01 right 20:50:46 AND THEN I'LL JUST MAKE A TRY CATCH BLOCK TO CHECK FOR THAT 20:50:59 :D 20:51:04 oklopol: try 20:51:16 ? 20:51:18 oklopol: getattr(func,'propname',default) 20:51:31 right 20:51:35 didn't know the name 20:51:40 aw man, it doesn't print I BARFED UP A YUPPIE 20:51:43 bug isn't there then 20:53:10 oklopol: what the fuck is happening 20:54:15 xDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 20:54:19 oklopol: 20:54:20 ---- deep first 20:54:20 [#0] 20:54:21 | 1 => #0 20:54:23 | [[1 2] 3] => #1 20:54:37 MAYBE THAT'S THE BUG 20:55:19 oklopol: tl;dr without <>, you need more examples 20:55:24 to stop the silly thing thinking it can do trivial shit 20:55:52 oklopol: so uh... should i add more examples or restore <> 20:57:16 oklopol: EH 20:57:20 hmm 20:57:56 so erm how did you do the removal of <> exactly 20:57:58 oklopol: i mean obviously the clue purist in me says, obviously, get rid of <> and just add more examples 20:58:00 oklopol: simple 20:58:04 oklopol: i hardcoded the cond function to id 20:58:06 and left all the rest as is 20:58:17 so everything has now basically 20:58:22 and deep first broke what was it using? 20:58:39 is list k 20:58:55 oklopol: yeah... is list? is in the function list though 20:59:03 oklopol: it just needs another example in one or both blocks 20:59:07 oklopol: so that clue realises it needs is list 20:59:09 rather than hardcoding 20:59:25 it's okay that it needs two examples for deep first imo 20:59:45 i mean, the correct thing to do is assume the first ones are hard coded things, and the last one is a default branch 20:59:48 i mean 20:59:59 if you're trying to find the easiest implementation of the given behaviour 21:00:03 ---- deep first 21:00:03 [#0] 21:00:03 | 1 => #0 21:00:05 | _ => #1 21:00:06 er what... 21:00:18 so just add another example for the constant case, and is list? in the bag 21:00:35 is list was already in the bag 21:00:40 but yeah, it's the constant case that needs adding 21:00:52 oklopol: maybe if clue can't use all the functions you provide it should error out 21:01:01 "either you have useless code, or i wasn't smart enough" 21:01:33 or at least a warning 21:01:38 i mean 21:01:44 hmm 21:02:12 yay ski seems to compile now... I think either deep first or my printing function is broken though :) 21:02:15 probably my printing function 21:02:20 deep first ~ {. 1 -> 1 21:02:20 . 2 -> 2 } 21:02:20 deep first ~ {:. [[1, 2], 3] -> 1 21:02:21 : [1, 2] -> 1 21:02:23 :. [1, [2, 3]] -> 1 21:02:25 : 1 -> 1 } 21:02:27 is what seems to have fixed it 21:02:33 i mean for instance if you just go "this can prolly be done with car, cons and cdr but i can't ass thinking about it", and turns out you just need two of those, then i wouldn't call that a bad thing 21:02:35 well 21:02:39 oklopol: yeah, but 21:02:42 it should say 21:02:46 "hey, you might wanna remove these: " 21:02:50 yeah 21:02:53 "or else if you know it's needed, lol, i fucked up, be more examply please" 21:03:03 but i mean, see 21:03:08 oklopol: omg i just invented SuperClue 21:03:15 oklopol: every function defined so far is put into every bag 21:03:20 SO SIMPLE 21:03:42 yeah yeah, remove the reason glue actually works, and it'll be even more beautiful 21:04:21 oklopol: well ... who runs programs 21:04:24 i just write them 21:04:25 but, anyway that might actually be feasible, when a very nice interp is made by a very smart person, and when there's a bit more stuff you can do to help compilation 21:04:54 ---- ski apply 21:04:54 [ski type?(#0)] 21:04:54 | 0 => #0 21:04:56 | 1 => #1 21:04:58 | 2 => #1 21:05:00 | 3 => @(pair(cadar(#0) ski type?(cdr(#0)))) 21:05:03 | 4 => @(car(#0)) 21:05:04 that looks very suspicious 21:05:09 oh wait 21:05:12 just my broken printing function again 21:05:13 i mean, i'm going to add a rather nice syntax for adding new inductive data structures, at some point. 21:05:14 * elliott goes back to get_ast 21:05:21 oklopol: and then remove built in lists and numbers, yes? 21:05:33 oklopol: omg... if it actually did guessing based on the induction scheme of the structure 21:05:36 rather nice as in, clue should never start to look like an esolang... again conceptually 21:05:42 :}}}}}languagegasm 21:05:58 elliott: yeah that's the idea 21:06:23 oklopol: btw 21:06:24 62.0739979744 21:06:29 oklopol: ski compilation is over 2x slower :D 21:06:31 that you have something like "list tool bag", which is the basic operations of lists, and if you have lists as args, it's unioned with the bag by defauly. 21:06:33 *defauly 21:06:35 *default 21:06:47 oklopol: but then again... 21:06:47 not all that surprising 21:06:52 oklopol: optimising over language purity is kinda 21:06:53 BUT IT'LL RUN FASTER NOW! 21:06:53 yuck? 21:06:56 bags i can accept 21:06:58 indeed! :D 21:06:58 but 21:07:03 conditionals are just 21:07:11 oh man, it actually uses my cpu doing this 21:07:18 yes. conditionals are you writing actual code, doing some specific thing. 21:07:20 variable: we've invented your language which takes ages to compile anything 21:07:29 they should not be allowed near clue. 21:07:41 oklopol: well if conditionals could take multiple arguments. then i wouldn't mind nearly as much 21:07:44 because you wouldn't have to do . 21:07:46 but they can't. 21:07:48 so vomit 21:08:11 elliott, hrm? which lang? 21:08:12 i sort of mind them anyway, i mean next thing you know you'll want to say "...and this recursive case should cons two things together" 21:08:16 variable: cue 21:08:30 *clue 21:08:36 oklopol: oh sertanly, i just meant i wouldn't HATE IT WITH ALL MY GUTS if they could take multiple args 21:08:41 right 21:08:42 I'll look in a bit - I can't talk now 21:08:43 same here 21:08:49 oklopol: also, i am going to add constant support for conditionals now ... 21:08:52 * variable is working on a unnecessary compiler in haskell 21:08:53 oklopol: can we stop calling it a conditional? 21:08:56 "brancher" 21:08:58 that would be better 21:09:03 indeed it would. 21:09:33 condcode=lambda*a:clue.cond(preprocessing(apply,*a)) 21:09:35 hmm. 21:09:41 hmm. 21:09:55 preprocessing? 21:10:18 oklopol: i just wanna know where you create the conditional code :D 21:10:21 so i can give it constant access 21:10:26 although the inferrer would have to know about it too 21:11:12 giving it constant access is not that easy, because you also have to call it with constants then 21:11:18 which is done in a different place 21:11:20 but that should be it 21:11:28 and no, glue doesn't need to know about this. 21:11:39 glue has nothing to do with anything around it 21:11:53 well, it will when i add demolishing check, but glue_ will still not 21:12:27 -!- ais523 has quit (Ping timeout: 240 seconds). 21:12:36 oklopol: clue is so awesome. 21:12:38 i keep tight track of logical dependancies, usually 21:12:46 dancy dancy 21:14:37 oklopol: you know what, you can add constants in conditionals :D 21:15:07 it's not actually that hard, but you need to wrap stuff in invisible lists a bit and such 21:15:10 i can do it sure 21:16:28 essentially it's just giving glue the constants when you call it for conditional, in invisible lists full of that constant (for each example, that constant in the index of the invisible list reserved for that example), and then wait what? 21:16:31 (lambda a:is_partition(stuff.apply_to_visible(clue.cond,[a])))) 21:16:35 is it safe to turn this into uh 21:16:38 um 21:16:46 say that clue.cond doesn't exist any more 21:16:50 but it's assumed to be id 21:16:53 how can i rewrite that line? 21:16:56 and yeah then you need to find where the lambda is made that actually computes all of that stuff 21:17:55 i believe so, you can just check if the actual objects are a partition already 21:17:57 like 21:18:18 erm 21:18:59 is_partition is... a bit involved is it... 21:19:04 *n't 21:19:11 xD 21:19:20 ohh 21:19:26 it's because of default branches 21:20:06 is_partition actually checks if the list you give it is a partition, assuming one of the partition elements can be "default", so for instance [[1, 1, 1], [3, 3], [6, 5], [4, 4]] would be a partition 21:20:13 because only [6, 5] is default 21:20:14 ....maybe 21:20:29 yeah i believe that's how it works 21:21:05 so maybe just have is_partition as cond 21:21:08 oklopol: okay so i just put the list in there directly. 21:21:19 instead of that whole lambda 21:21:24 ah 21:21:58 I THINK. 21:22:41 61.5558609962 21:22:44 this is an achievement for me. 21:23:15 -!- Phantom__Hoover has joined. 21:23:15 -!- Phantom__Hoover has quit (Changing host). 21:23:15 -!- Phantom__Hoover has joined. 21:25:22 oklopol: can i rename inc/dec to succ/pred 21:25:26 >_> 21:25:48 okay 21:25:52 ski now compiles in 3 seconds 21:25:57 pivotpivotpivot!!!! 21:26:02 oklopol: what 21:26:03 oklopol: it does? 21:26:05 sure 21:26:12 oklopol: holy shit give me your new clue.py, i want to see if no-conditions could actually be fast 21:26:20 :P 21:26:27 oklopol: unless you're lying 21:26:51 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds). 21:26:53 http://www.vjn.fi/pb/p2721555448.txt 21:27:08 you ... just changed stuff.py? not clue.py? 21:27:17 http://www.vjn.fi/pb/p1499968214.txt 21:27:19 both 21:27:20 sry 21:28:48 rather obvious change 21:29:02 it just does... well exactly what i explained earlier 21:29:07 but 21:29:22 +def check_demolishing(f): 21:29:22 + if getattr(f,'demolishing',None)==True:return True 21:29:22 + return False 21:29:23 oklopol: lol 21:29:28 note that functions are partitioned into demolishing and nondemolishing ones because i just wrote it where my cursor was :D 21:29:30 yeaah :D 21:29:30 oklopol: "return getattr(f,'demolishing',False)" 21:29:31 xD 21:29:33 i knwo 21:29:35 *know 21:29:42 made me laugh when i saw what my fingers had done 21:30:06 but i wanted to leave it as a surprise for ya 21:30:27 xD 21:31:01 hmm.... it's very likely i won't get pivot to work without the pointer idea 21:31:09 i wonder if there's some two line solution for that... 21:31:26 " note that functions are partitioned into demolishing and nondemolishing ones because i just wrote it where my cursor was :D" <<< you should be laughing at this instead of that two line demolishing check tho 21:31:34 i'll fix it now 21:31:55 + for (funname,fun) in demolishingfuns+nondemolishingfuns: 21:31:57 oklopol: that's the same as functions 21:32:01 that list you construct 21:32:02 :D 21:32:05 it's really not 21:32:11 oh does the order matter 21:32:12 lol 21:32:26 unfortunately it does, see things are added one functions at a time 21:32:50 hello 21:32:56 for a reason that is rather irrelevant at this point 21:32:58 might i just add that i hate humans 21:33:10 thank you 21:33:44 oklopol: oaky, merged your changes in, time to test 21:34:38 -!- pikhq has quit (Ping timeout: 272 seconds). 21:35:35 UnboundLocalError: local variable 'newobjects' referenced before assignment 21:35:39 -!- Phantom__Hoover has quit (Ping timeout: 240 seconds). 21:35:56 oh lol 21:35:58 indentation :D 21:36:05 -!- pikhq has joined. 21:36:40 $ python cluetest.py 21:36:40 1.07862401009 21:36:41 oklopol: ^ 21:36:46 oklopol: ski without conditionals 21:37:04 oklopol: does that mean that removing conditionals has... made it go faster? 21:37:11 -!- sebbu2 has joined. 21:38:05 or maybe it means my computer is very slow 21:38:20 oklopol: well okay but mine didn't do ski faster than 20s either 21:38:25 oklopol: point is: hey removing conditions is practical!! 21:38:27 because it couldn't possibly be faster without conditionals 21:38:30 i mean compilation couldn't 21:38:32 well eys 21:38:34 *yes 21:38:34 but 21:38:38 it's not a problem 21:38:40 because the rest is so faster 21:38:41 oklopol: has pivot compiled yet 21:38:43 yarr 21:38:44 no :( 21:38:53 oklopol: i'll try with my faster computer? :p 21:39:17 -!- sebbu has quit (Ping timeout: 276 seconds). 21:39:32 http://www.vjn.fi/pb/p2549382249.txt 21:39:37 go ahead, code might be wrong as well... 21:39:52 but i think i've tested everything except pivot at least 21:40:00 i seriously need to add that :: thing 21:40:02 -!- sebbu has joined. 21:40:03 test cases 21:41:00 oklopol: i could make a repl for luatrelang :P 21:41:24 erm.... 21:41:32 Exception: Can't compile caaar pivot helper(), triple(), cons to caaar(), caaar with consed(), make singleton(), car pivot helper(), caaar(), pivot(), cons to car(), caar() 21:41:35 i get to modify your code!! 21:41:39 erm what 21:41:40 it can't even compile the things outside pivot now, maybe ski just happened to be faster :\ 21:41:41 hey 21:41:45 oklopol: lol 21:41:56 oklopol: i didn't save my old clue.py 21:41:58 you bastard :D 21:42:03 it's the only list prog i have so hard to say 21:42:04 :P 21:42:35 you can just comment car.demolishing = True. 21:42:46 what does that do. 21:42:48 make it faster? :p 21:42:58 -!- sebbu2 has quit (Ping timeout: 265 seconds). 21:43:03 if you comment that out, it's basically the same as earlier 21:43:10 it's just demolishing funcs are tried first. 21:43:41 presumably cdr too 21:43:42 so at all times, you will have, in the list of found objects, every object that's a subobject of it 21:43:50 -!- cheater99 has joined. 21:43:51 oklopol: pivot still going, are you sure this will compile in finite time? 21:43:53 *for every object, every subobject that's a ... 21:43:57 not relaly. 21:43:58 *really 21:44:00 see i just realized 21:44:01 that 21:44:13 no wait nm 21:44:19 well yeah 21:44:20 like 21:44:25 * elliott tries to compile without pivot 21:44:27 argh 21:44:29 uh this is... uncharacteristically slow 21:45:05 -!- cheater00 has quit (Ping timeout: 240 seconds). 21:45:07 -!- sebbu2 has joined. 21:45:09 there should be an simple way to disable compilation of something 21:45:11 *a 21:45:46 still churning 21:46:23 hmmhmm. 21:46:28 oklopol: i don't think this change was a good idea :D 21:46:35 it was 21:46:40 but hmm 21:46:43 oklopol: well this... definitely went faster before. 21:46:59 huh? you've compiled that before? 21:47:05 When a line of text is centered vertically in a box, should it use only the part above the baseline for centering the text? 21:47:08 oklopol: well no. but it looks trivial. 21:47:11 oklopol: i mean without pivot 21:47:18 it still hasn't compiled such simple things as "car pivot helper" 21:47:41 so 21:47:42 okay 21:47:43 maybe 21:47:55 what i should do, is make glue simply demolish the original objects completely 21:47:59 but then not demolish any of the new ones 21:48:05 like i said at some point 21:48:22 -!- sebbu has quit (Ping timeout: 276 seconds). 21:48:24 then maybe you would get both speedy ski, and speedy other things 21:48:32 i'll try that 21:48:56 my laptop is being a great heater right now 21:48:58 thanks to clue 21:49:50 -!- Phantom__Hoover has joined. 21:53:31 bleh :/ 21:53:44 changed, ski compiles at essentially same speed, no help with pivot :( 21:53:51 spent ages defining polynomials in coq but I got into trouble with equality 21:53:53 maybe it's wrong. 21:54:37 the notion of finite support is ugly 21:54:59 oklopol: 282.139328003 21:55:04 oklopol: to compile all the non-pivot functions in the file 21:55:08 xD 21:55:09 oklopol: note that they're all trivial :D 21:55:20 how long without demolishing? 21:55:35 oklopol: just removing the .demolishing = True stuff for car and cdr you mean? 21:55:41 yeah 21:55:46 just comment those out 21:56:02 then it's what it was before, i recall even i could compile them 21:56:17 i'll try 21:56:41 oklopol: compilin' 21:57:44 oklopol: 1.24288511276 21:57:47 oklopol: for all non-pivot functions 21:57:48 will try with pivot now 21:58:14 hmmhmm 21:58:14 see 21:58:21 pivot should work faster with demolishing. 21:58:24 the others not so much 21:58:34 oklopol: :D 21:58:44 oklopol: this is without conditionals btw 21:58:48 but i figured it can't actually *hurt* the others that much 21:58:53 although it's equivalent for this file 21:58:53 i think 22:00:21 it is 22:00:39 so umm, wanna try adding demolishing just before pivot is compiled? :D 22:00:52 oklopol: no :P 22:01:27 btw, as you may have guessed, that's essentially what strategies are, ugly workarounds so that you can help it look in the right direction 22:01:42 oklopol: yeah, i oppose them vehemently 22:01:47 oklopol: i do think you should replace the bag with something else though 22:01:51 although they have much higher ambitions than just guiding the search with utility functions 22:02:12 like what 22:02:56 oklopol: dunno 22:03:03 oklopol: i think a form of strategies but purer 22:03:08 oklopol: like, you describe what kind of algorithm is 22:03:11 "depth first recursion" might be one 22:03:16 oklopol: or like "fold" 22:03:19 and it uses that 22:04:46 except that's much less pure than strategies 22:05:28 strategies are so abstract and complicated i can't even put my finger on them 22:05:29 yay1 I slept all day! 22:05:30 :( 22:05:36 Sgeo: me too! 22:05:40 woke up at 8 22:05:46 20 22:05:50 20:00 that is 22:06:21 oklopol: yeah but 22:06:24 oklopol: it'd be describing the function 22:06:26 i guess tht's 22:06:28 icky behaviour code 22:06:49 oklopol: pivot still pivotoeing 22:06:54 :D 22:07:00 erm 22:07:08 with or without dem 22:07:09 oklopol: are you sure this isn't in an infinite loop 22:07:21 it's not an infinite loop, no 22:08:10 oklopol: greater-than-universe loop? 22:09:19 well it's superexponential 22:09:31 in that depth_lim = 5 22:09:35 oklopol: ...it is? :D 22:09:38 sure 22:09:48 why do you think it's 5 instead of 100 22:09:48 oklopol: why am i even running this then 22:09:52 erm 22:10:02 because it might find the answer before doing the complete search 22:10:23 i have no idea how deep the answer lies! 22:10:29 actually i could just calculate i guess 22:10:31 that's... so poetic 22:10:43 -!- j-invariant has quit (Quit: leaving). 22:11:43 oklopol: ...you adopted my indentation convention :D 22:11:46 i'm so loved 22:12:07 i did 22:12:27 oklopol: i have a feeling it's actually harder to read, but who cares it's prettier 22:13:03 it should just infer constocaaar( car(#2) #3 ) :\ 22:13:13 maybe something is very fundamentally wrong somewhere 22:13:24 or, i have no idea what it's finding hard to do 22:13:25 oklopol: are you sure your search algorithm is working right :D 22:13:37 oklopol: erm why not put a bunch of prints with the func and its arguments above suspect functions 22:13:41 and then just look at what it's doing so much 22:13:45 FUCKFUCKFUCKFUCKFUCKUFKCUFKFJDKSF 22:13:49 FUCKFUFKFUKCUFUUFUCCKCFKJUFCKUCFKUCFUKCFUKCFUKCF 22:13:52 CFUJCFUJCFUKCFKCFKCFUKCFKUCFKUCFKUCFKUCFKUCFKUCFKU 22:13:55 :D 22:13:57 LOOK AT PIVOT 22:13:58 WHAT 22:14:00 PROGRAMMING 22:14:00 LANGUAGE 22:14:01 IS 22:14:02 IT 22:14:03 WRITTEN 22:14:03 IN 22:14:05 BECAUSE 22:14:05 THAT'S 22:14:06 NOT 22:14:07 CLUE 22:14:14 um why not :D 22:14:18 what 22:14:20 's the condition? 22:14:31 ...does it have one? 22:14:33 :DDD 22:14:49 well. 22:14:49 oklopol: oh my god the poor thing's been sitting there going WHAT CONDITION IS THIS WHAAAAAAT 22:14:59 run that search up to depth five and it's possible we'll know. 22:15:02 i can't see it. 22:15:16 oklopol: so uh. fix it? :p 22:15:19 yeah, that's the kind of thing the new conditionals will be able to do 22:15:25 now, it needs to be worked around 22:15:35 oklopol: try not to work around it in a way that doesn't work without <> >_> 22:15:53 the problem is i didn't originally realize that i'll need cases for the recursive thing, and then i just split it in two cases without realizing CONDITIONS 22:15:57 branchers 22:16:07 oklopol: right well... go fix 22:16:14 will do. 22:16:32 fuck i'm blind 22:16:58 i actually have no idea how to fix that :P 22:17:04 well 22:17:06 oklopol: rewrite from scratch? :P 22:17:08 actually of course i do 22:17:08 ... 22:17:22 what i have to do, obviously, is write the condition function 22:17:27 and leave pivot as is 22:17:46 oklopol: has anyone told you that you behave exactly like a really dim but hyper kitten somehow given silly amounts of intelligene? 22:17:48 it's quite hilarious 22:17:54 *somewhat dim 22:17:58 *intelligence 22:19:14 hmm.... 22:19:36 no! actually no one *ever* told me that! 22:20:09 oklopol: well 22:20:11 now you know 22:20:16 -!- oerjan has quit (Quit: leaving). 22:20:22 oklopol: it has to be noted that i've been trying to think how to perfectly summarise how you act since, like, 2007 22:20:28 so maybe everyone else just gave up sooner? 22:20:40 :D 22:27:18 -!- augur has changed nick to |Rassilon|. 22:27:56 |Rassilon|: what 22:28:12 -!- |Rassilon| has changed nick to augur. 22:29:22 well fi:rassi is something you use to clean pipes 22:29:37 so isn't it fitting since augur is, well, you-know-what 22:30:02 sorry, i was reenacting the formation of timelord society in another channel 22:30:02 so 22:30:04 what i did was 22:30:11 augur: ah, that was my second guess 22:30:51 * elliott waits for first night in first minecraft game on hard 22:30:56 i told my computer hey you silly little thing that cannot handle most flash games, have here this python program that constantly allocated more and more memory while doing this impossible search for a nonexistant thing 22:30:57 i have a tiny house and no torches 22:31:04 i'll go do something else 22:31:11 oklopol: :( 22:31:11 *allocates 22:31:12 but i want fix 22:31:19 yeah yeah once my computer starts working 22:33:01 i meant i told my computer i'll go elsewhere btw, in case that was what you were :(ing about 22:33:01 oklopol im afraid of creepers 22:33:05 who isn't 22:33:06 and thinks taht make noise 22:33:08 *that 22:33:10 *things 22:33:18 what i'm saying is 22:33:19 "creepers" 22:33:21 HOW DO I MAKE NIGHT BEARABLE 22:33:36 i find creepers even scarier during the day 22:33:46 oklopol: also how do i get the courage to run outside on the first day 22:33:48 whats a creeper 22:33:50 all i have is a wooden fucking sword 22:34:03 in american parlance, a creeper is any guy who you're not attracted to who is attract to you 22:34:09 auhttp://4.bp.blogspot.com/_oaOBSdwJP7k/TFfZbw0Py8I/AAAAAAAABFQ/crE_sdzUIR4/s1600/Twocreepers.png 22:34:10 augur: http://4.bp.blogspot.com/_oaOBSdwJP7k/TFfZbw0Py8I/AAAAAAAABFQ/crE_sdzUIR4/s1600/Twocreepers.png 22:34:17 in american-post-minecraft parlance 22:34:18 a creeper 22:34:21 is the worst thing in the world 22:34:26 oh, a mindcraft thing 22:34:27 "D:" 22:34:27 mine** 22:34:36 augur: yeah creeper is a special case of that 22:34:41 oklopol: also i have no food! 22:34:53 i mean mc creeper is 22:34:56 oklopol: hi skeleton out the window 22:35:21 oh god it got up here 22:35:30 oklopol 22:35:31 can skeleton shots 22:35:34 get through my door 22:35:45 when's the hard server up 22:35:52 lol no 22:36:06 oklopol: you mean my server? when i learn how not to be a pussy 22:36:20 augur, hm what would a game called mindcraft do? 22:36:29 python is using 650mb :D 22:36:35 oklopol: also also how do i look outside the window without getting scared shitless 22:36:40 and that's a fuckload for this computer 22:36:52 Vorpal: it'd be like minecraft only instead of building castles you stop being lame. 22:36:56 "In SMP, other people can't see your pictures." :D 22:37:05 augur: excuse me, minecraft is awesome? 22:37:09 castles are for losers 22:37:15 uncreative poops build castles 22:37:19 of course augur hates mc 22:37:26 the only awesome thing about mincraft is that CPU someone built 22:37:26 too straight for him. 22:37:37 and maybe some other shit i dont know about 22:37:43 but the overwhelming majority of minecraft is lame 22:37:43 augur: excuse me i believe i am working on a 128x128x128 cube made out of glass lit by lava? 22:37:45 "In SMP, other people can't see your pictures." :D <-- further if the chunk unloads from your client the painting will be gone. If that is what you meant. 22:37:47 that is half underwater? 22:37:54 elliott: sounds pretty lame to me 22:38:05 funny, 'cuz so do you 22:38:19 i dont sound lame to me 22:38:34 ah, you do to me 22:38:43 yes, the majority of mc is lame from the outside, that's rather irrelevant. how much have you actually played? 22:38:49 yeah but you're lame so your opinion doesnt count 22:38:56 oklopol: also also how do i look outside the window without getting scared shitless <-- by making the walls out of obsidian and so on 22:39:07 mc 22:39:15 Vorpal: no i'm just scared of seeing things 22:39:15 's contributions to the world are mostly uninteresting 22:39:20 oklopol: i've played absolutely none, which is why my opinion is valid. its objective and untainted by the brainwashing of minecraft usage 22:39:23 duh 22:39:32 augur: gay sex is lame! 22:39:41 i can say this 'cuz my mind is untainted 22:39:43 no but it is gay 22:39:44 elliott, make a obsidian window shutter on the outside then. Then you can see through the window and see nothing scary 22:39:53 an* 22:39:56 Vorpal: BUT THINGS ARE MAKING NOISJEFOISNKGDFH;S] 22:39:58 besides, everyone knows you're a gay, elliott 22:40:05 yeah i'm a gay woman 22:40:08 well known fact 22:40:18 elliott, hm. Make your house large enough that you can't hear anything outside when near the middle 22:40:19 oh thats right 22:40:20 hmm 22:40:23 then never go near outer walls 22:40:27 are you a gay boy or a straight woman 22:40:28 augur: right, you should clarify that tho 22:40:30 girl 22:40:34 hmph! 22:40:36 both i should think 22:40:55 a superposition of both states, using the Quantum monad! 22:41:03 your mother is a monad 22:41:13 i'm fine with people hating on mc because you can't actually build anything interesting in it, it's just actually a fuckload of fun to do it, which is what makes the game a good one 22:41:17 is that a complement or a slight 22:41:20 who knows 22:41:21 its hard to tell 22:41:27 Vorpal: there is a skeleton like 5 blocks away from me fuck i can't see it aargh 22:41:29 -!- j-invariant has joined. 22:41:40 i actually dont give a shit about minecraft, i have no opinions of it 22:41:41 j-invariant what did you do on your first night before you had stuff to make tools and shit 22:41:45 elliott, not enough windows then! 22:41:50 augur, your mother is the linguistic analogue of a monad. 22:41:51 i'm in a really tiny house with a wooden sword looking scared out of my door with not orches 22:41:53 *no torches 22:41:57 heh 22:42:01 Phantom__Hoover: so a .. monad? 22:42:15 elliott, and that is a problem. 22:42:16 I died every night for the first 10 nights or something 22:42:33 Vorpal: that's the best solution to my previous problem that i could cook up in ten minutes 22:42:44 Vorpal: the previous problem was that i was in a dense forest with no good place for a house and basically nothing apart from wood and dirt. 22:42:48 my world is quite habitable now, if you know the right places to go 22:42:52 did i mention my house's bottom layer is made out of dirt 22:43:08 elliott, wait, didn't you spawn on a beach?! 22:43:21 I Spawned on a beach 22:43:23 yes i did 22:43:25 augur: i know 22:43:26 but it was right next to a forest 22:43:31 elliott, also digging down a few blocks will aways get to stone 22:43:33 O FUCKING GOD THE SKELETON JUST WALKED PAST MY DOOR 22:43:40 Vorpal: couldn't have got enough stone in time 22:43:40 anyway 22:43:41 oh god 22:43:42 can it see me 22:43:44 through the door 22:43:47 it can can't it 22:43:52 if so: can it hurt me 22:43:56 " j-invariant what did you do on your first night before you had stuff to make tools and shit" <<< it takes about 3 minutes to get rock tools 22:43:57 elliott, on Peaceful, I shouldn't bother with lighting, should I? 22:43:59 elliott, uh, you have 10 minutes from starting the first day until the first dusk 22:44:01 stone 22:44:05 elliott, what were you waiting for 22:44:13 Sgeo: well. if you don't care about being able to see at night, sure. 22:44:23 Vorpal: well first i had to walk to where there were trees, 30 seconds 22:44:41 Vorpal: then i cut down two trees, waited for the saplings, and replanted (second one i looked for a big one) - 2 minutes about 22:44:47 elliott, funny definition of "right next to" ;) 22:44:55 is there a way to list you XYZ coordinates? or would that be cheating? 22:44:55 ok it was actually 10 seconds. 22:44:57 Vorpal: then i walked until i found some land that wasn't a fucking forest 22:44:59 Vorpal: like 2 minutes 22:45:01 j-invariant: F3 22:45:13 Vorpal: then i climbed to the top of it 22:45:15 Vorpal: like 2 minutes 22:45:16 elliott, waiting for the saplings would be wrong thing to do at that stage unless it is the only tree near it 22:45:21 Vorpal: then i cut down a biiig tree to make space for a house 22:45:23 "waited for the saplings"? 22:45:24 about 2 minutes 22:45:28 oklopol: to generate 22:45:29 ah great! that will make coordinate two tunnels much easier 22:45:40 elliott, that was wasted time 22:45:41 Vorpal: then i started building my house, about 2 to 3 minutes 22:45:55 generate what? 22:45:58 Vorpal: finally it was done, then all the way through this i crafted a few things 22:45:59 new trees? :D 22:46:04 pick, sword, bench 22:46:08 that was about 2 minutes in total then 22:46:14 so yes, it started getting dark soon after. 22:46:21 oklopol: umm saplings spawn on leaves if you cut down a tree 22:46:25 oklopol: then the leaves decay and they fall 22:46:25 elliott, crafting takes 2-5 seconds usually 22:46:30 why didn't you just hack them? 22:46:31 Vorpal: i meant crafting in total. 22:46:34 oklopol: what 22:46:37 yes 22:46:38 the leaves? 22:46:38 well 22:46:52 oklopol: i did 22:46:59 oklopol: but you have to wait for the saplings to generate to get more 22:47:00 elliott, sure that takes some times. But point is, you wasted time on waiting for saplings 22:47:09 Vorpal: i.e. logs -> wood, wood -> sticks, -> workbench, -> pick, -> sword 22:47:10 ignore them until you have a good shelter 22:47:13 who cares, saplings took like 20 seconds in total 22:47:14 so stfu 22:47:22 also the craftings above weren't done all at once 22:47:23 so yeah 22:47:28 pretty much didn't stand around for a second. 22:47:40 elliott: you will get at least 2 saplings from a tree without any waiting 22:47:41 Goddamn it Sam Hughes, update your blog more. 22:47:52 come back you fucking skeleton i want to kill you 22:48:02 usually, that is 22:48:18 i did it 22:48:19 omg 22:48:21 i am a hero 22:48:38 did i mention i am on hard 22:48:52 skeletons are the same on hard 22:49:07 ...i mean CONGRATULATIONS! :) 22:49:10 oklopol: shut up 22:49:17 oklopol: their arrows deal greater damage 22:49:19 elliott, suggestion for better first day handling: craft bench with first log, then axe with the next few. Cut down some more, craft pickaxe. Now build a shelter around the bench you placed, use wood and/or dirt or whatever is around. Doesn't matter if it is in wooded area, Way better that it is near spawn in case you die. Then you will have a nearby shelter 22:49:20 true. 22:49:31 elliott, then hunt coal 22:49:34 but that's less discouraging 22:49:51 elliott, now, second day you look for a nice place for actual main base 22:49:56 also i didn't remember that, but that's not important. 22:50:35 another way to do things: take random direction, RUN 22:50:41 elliott, you can craft the sword during the first night. Also keep track of time so you can get back to shelter in time 22:50:50 work all day, run all night 22:51:05 shelters are for wimps 22:51:28 oklopol: I did that once 22:51:36 oklopol: except 22:51:40 oklopol: a creeper exploded me in the water 22:51:45 and i had to get onto land or shit would happen 22:51:49 because another was coming 22:51:51 so i got onto land 22:51:55 and then a zombie appeared 22:51:58 and the creeper got there 22:52:03 so i died, pretty much 22:53:28 i would've survived all that. 22:53:30 all of it. 22:53:36 elliott, hm you never see any live humans. But there are skeletons and zombies. Presumably you are like the last man on earth. Post-apocalypse. Except scenery looks too untouched for that. 22:53:40 oklopol: what would you have done, then 22:53:45 Vorpal: there is one other ... 22:53:50 elliott, a hoax yeah 22:53:54 well you know, the usual i woulda killed them all 22:53:58 Vorpal: h e r o b r . . 22:54:03 with my BARE HANDS 22:54:06 elliott, the hoax yes 22:54:11 oklopol: yeah i tried that, but they killed me 22:54:14 Vorpal: Stop. 22:54:20 elliott, stop what? 22:54:26 it's hard to explain, i'd have to show you 22:55:02 elliott, oh wait, do you use that mod that adds him? IIRC there was some human-mob mod too. That added both friendly and enemy humans. That built stuff even. 22:55:29 any mod to do it is probably not as good as it should be 22:55:40 i doubt he cuts down trees, for instance 22:55:44 elliott, they did 22:55:50 elliott, they didn't add doors though iirc 22:55:51 they, i mean a herobrine mod 22:55:56 the human mob stuff you can go up to 22:56:01 herobrine you can't get near 22:56:11 hm? 22:56:40 Vorpal: he's always just out of reach. 22:56:44 okay why do all the enemy mobs have such fucking terrifying noises 22:57:15 lol 22:57:18 two hours ago: 22:57:19 http://twitter.com/notch/status/23849639551700992 22:57:23 suspiciously 22:57:24 SPECIFIC 22:57:25 denial 22:57:26 don't you think? 22:57:56 "Oh no, I don't have a sister called Sandra who killed 10 people and then became web-famous by pretending to be a fish. And she definitely isn't secretly half-black." 22:58:04 (i feel this situation is comparable) 22:58:29 Vorpal: http://manicdigger.sourceforge.net/news/ 22:59:03 someone showed that to notch on twitter and he's all ":|||" 22:59:22 -!- pikhq has quit (Ping timeout: 276 seconds). 22:59:24 elliott, what does it do? It doesn't really say. Just news. 22:59:30 Vorpal: um look at screenshots 22:59:31 it's a MC clone 22:59:35 ah 22:59:36 seems to be compatible with MC servers too, well, circa july 22:59:57 doesn't seem updated 23:00:03 heh apparently it's actually about as old as mc... presumably they, eh, realigned their priorities after MC got popular though 23:00:09 probably better coded mind you 23:00:15 probably 23:00:48 -!- pikhq has joined. 23:01:00 (i feel this situation is comparable) <-- not really no 23:01:06 yes 23:01:37 elliott, so is that the semi-mythical Minecraft Clone With A Chance? 23:01:48 -!- invariable has joined. 23:01:51 no 23:01:53 Phantom__Hoover: It doesn't look good mind you. 23:01:54 elliott, he stated he never had a brother except a half-one he never met. And that herobrine isn't real. Presumably in reply to someone? 23:01:57 And Notch seems pissed. 23:01:58 :( 23:02:01 Vorpal: Herobrine is real. 23:02:05 "Yeah, I pretty much live by XKCD" ————————————————————Notch~~~~~ 23:02:08 (1) it's lowercase 23:02:10 (2) ha ha ha ha ha die 23:02:11 -!- invariable has quit (Remote host closed the connection). 23:02:13 (3) did i mention i hate you 23:02:17 (4) oh how i hate you 23:02:29 elliott, why not boycott the game then! 23:02:36 Well, yes, but he's *Notch*. He always hates people who build on his work. 23:02:36 too addictive 23:02:40 elliott, Herobrine is real? 23:02:42 Evidence? 23:02:49 if notch were a drug dealer 23:02:52 Phantom__Hoover, none whatsoever :P 23:02:52 he would b... 23:02:53 wait 23:02:54 uh 23:02:55 he kind of is. 23:03:08 Phantom__Hoover: http://www.minecraftwiki.net/images/6/68/1283223082465.jpg has photographic proof. 23:03:29 Phantom__Hoover, well know hoax :P 23:03:38 Vorpal is wrong. 23:03:39 elliott, "photographic proof" is completely useless here. 23:03:49 Hell, there's an hMod plugin that adds Herobrine. 23:04:07 Phantom__Hoover: did you know: talking to people who refuse to not take anything seriously is like talking to Vorpal 23:04:34 Huh? 23:04:37 -!- drakhan has joined. 23:04:44 That parses weirdly for me. 23:04:50 elliott, I don't take things too seriously 23:04:58 Maybe I don't take things seriously enough... 23:05:03 Am I the anti-Vorpal? 23:05:27 elliott, are you saying that you aren't being serious about Herobrine? 23:05:39 absolutely not 23:05:41 herobrine is real 23:05:46 -!- Sgeo has changed nick to AntiVorpal. 23:05:57 -!- elliott has changed nick to Sgeo. 23:06:05 [Note: This nick should not be construed to mean that I hate Vorpal] 23:06:05 Factor 23:06:25 AntiVorpal, you should ghost elliott now :P 23:06:27 hmm, guess it broke again :D 23:06:35 Vorpal: just steal my nick :{ 23:06:38 that is punishment enough 23:06:42 to know the evil Vorpal is using my nick 23:06:49 Sgeo, har, as if I would let myself be ghosted 23:07:07 -!- Sgeo has quit (Disconnected by services). 23:07:15 yay 23:07:34 -!- MigoMipo has quit (Read error: Connection reset by peer). 23:07:34 -!- Sgeo has joined. 23:07:42 so that's your password sgeo? 23:07:48 * AntiVorpal promises not to do that again, unless you actually get on my nerves 23:07:54 + Sgeo (~elliott@unaffiliated/elliott) has joined #esoteric <-- except you aren't logged in as him 23:08:00 i didn't bother 23:08:25 (FWIW, the only evidence I would actually accept of Herobrine (or any other ultra-rare events in a moddable game) would be if someone actually pointed me to the exact line where it says addHerobrine() in the MC jar.) 23:08:45 Herobrine? 23:08:47 Phantom__Hoover, would you accept add_herobrine() instead? 23:09:07 AntiVorpal, widespread Minecraft myth. 23:09:12 Vorpal, NO. 23:10:03 Phantom__Hoover: you DO realise that nobody believes herobrine? 23:10:09 it is, and always has been, a joke 23:10:35 Sgeo, well, I do now. 23:10:41 Sgeo, this one: http://www.minecraftforum.net/viewtopic.php?f=25&t=111753 23:10:48 Hey, when you pulled similar BS on me, you didn't admit it until I directly asked another channel and made a fool of myself there 23:11:07 AntiVorpal: yes, because you believing that was hilarious in a pathetic kind of way. 23:11:10 oklopol: done it yet? 23:11:13 AntiVorpal, what do you expect from elliott? 23:11:24 Vorpal, is consistency too much to ask? 23:11:37 Vorpal: dude, he reacted to "#machomebrew" by asking whether Apple _really_ didn't let people run unsigned code on their computers 23:11:50 and then kept believing it when me and Phantom__Hoover told him how, yes indeed, there were only a few interpreters and they only ran signed code 23:12:03 Sgeo, what makes you think I actually believed it? 23:12:04 Sgeo, I presume that channel is for their locked down products then? 23:12:13 AntiVorpal: um because you've been offended by it ever since? 23:12:16 Vorpal: no, it's a package manager. 23:12:28 -!- Phantom__Hoover has changed nick to elliott. 23:12:30 Sgeo, well okay. Did he know this? 23:12:40 -!- elliott has quit (Disconnected by services). 23:12:49 Vorpal: no. but it was damn obvious that we were mocking him. 23:13:00 beyond even "moron in a hurry" level. 23:13:07 -!- elliott has joined. 23:13:08 -!- elliott has changed nick to Phantom_Hoover. 23:13:15 darn, one second too quick 23:13:16 Sgeo, that was not very nice. 23:13:22 -!- Phantom_Hoover has quit (Changing host). 23:13:22 -!- Phantom_Hoover has joined. 23:13:30 Phantom_Hoover: sgeo did it to me :) 23:13:34 Sgeo, I have it on secure in any case. 23:13:44 don't care, i just wanted to ghost you 23:13:51 like herobrine 23:13:52 darn, one second too quick 23:14:10 yes 23:14:11 Hey, I'm not threatening to ghost you again... until I get bored of this nick, at any rate 23:14:13 i could have ghosted you again 23:14:28 And I'll likely give you warning 23:14:41 how do you screenshot? 23:14:51 j-invariant: F1+F2 23:14:53 didn't i tell you that 23:14:54 whoever is the real elliott atm: http://www.minecraftforum.net/viewtopic.php?f=25&t=122479 23:15:00 that's Phantom_Hoover 23:15:00 you might be interested in that 23:15:19 hmm. 23:15:27 does it still authenticate you if you choose to stay back 23:15:27 no idea if it logs in 23:15:32 I haven't tried it 23:15:41 http://www.minecraftforum.net/download/file.php?avatar=49238_1293764836.jpg omg what are these, they look delicious 23:16:01 http://i.imgur.com/c50oW.png 23:16:04 lol one of the idlers in here replied to that thread 23:16:05 okay sgeo is ehird I guess. *checks /whois* 23:16:17 j-invariant, yes? 23:16:20 Vorpal, you weren't paying attention to the nick changes? 23:16:31 reminds me of when Gregor and I were each other for like 23:16:31 hours 23:16:33 j-invariant: :D 23:16:35 j-invariant: tree hideaway 23:16:39 AntiVorpal, well not after "+ elliott is now known as Phantom_Hoover" 23:16:45 can yu see the creepers 23:16:54 they watch me at night :( 23:17:03 j-invariant, switch to peaceful? 23:17:09 * AntiVorpal is now known as JesusChrist 23:17:27 * Sgeo downloads the untested os x version 23:17:33 j-invariant: why not build a house :P 23:18:04 How do we end up with such an insane number of lurkers? 23:18:25 aww hi creeper :3 23:18:28 creepers are kinda cute 23:18:30 i actually don't mind them 23:18:37 i'd rather have all creepers and no zombies/spiders/skeletons 23:18:39 creepers don't make scary noises 23:18:42 and are relatively easy to deal withi 23:18:44 *with 23:19:02 question 23:19:07 how do you guys pick up enemy drops at night 23:19:12 like i don't wanna lose this sulphur 23:20:15 Sgeo: is there a way to deal with this?? http://i.imgur.com/KqQ16.png 23:20:25 j-invariant: sure 23:20:25 he is going to destroy D: 23:20:30 j-invariant: get close to it, bash with sword 23:20:32 he'll retreat 23:20:33 go up to him 23:20:34 repeat 23:20:42 either he'll die or, worst case, explode further away from your structure 23:21:47 Sgeo: is there a way to deal with this?? http://i.imgur.com/KqQ16.png <-- your structure looks insufficiently secured? 23:21:54 oh shut up 23:22:00 it's easy enough to deal with creeper 23:22:00 s 23:22:02 I mean, no walls 23:22:04 and beauty takes priority 23:22:04 no roof 23:22:06 and so on 23:22:07 so what 23:22:08 -!- MigoMipo_A has quit (Quit: Bye). 23:22:08 who cares 23:22:22 well, what is it? not a shelter at least 23:22:32 i think i'm going to build a house on top of a high stack of dirt 23:22:44 Sgeo, and beauty comes second place to "does it's job well" 23:22:56 Vorpal: it is obviously not meant for use at night 23:23:07 Sgeo: cool! it worked 23:23:15 Sgeo, indeed. 23:23:20 j-invariant: :) 23:23:23 -!- Sgeo has changed nick to elliott. 23:23:29 don't wanna not get credit for all this good advice 23:23:59 Sgeo, and if being beautiful is the job then of course it comes in first place. By the same definition. 23:24:19 elliott, ^ 23:24:40 umm 23:24:46 i don't see the relevance 23:25:05 you know what would be cool? an smp server which spawns everyone really far away from each other 23:25:11 with monsters that it 23:25:24 you'd have to set up a little empire and fort before you have enough materials and stuff to start finding other people 23:26:16 "At the end of 2010, the "open-source" software movement, whose activists tend to be fringe academics and ponytailed computer geeks" — wall street journal. ha 23:26:31 -!- AntiVorpal has changed nick to Sgeo. 23:26:36 /ns ghost sgeo 23:26:47 elliott, somehow, I'm not scared 23:26:47 stop stealing Sgeo's nick, antivorpal 23:27:09 seth, gold, activeworlds... no passwords found yet 23:27:17 -!- ais523 has joined. 23:27:20 Sgeo, and beauty comes second place to "does it's job well" 23:27:27 *its 23:27:57 Vorpal, there is no actual need for walls when you're in the air. 23:28:11 Phantom_Hoover, true. But how did the creeper get up? 23:29:07 It's not on the structure. 23:29:11 As can be plainly seen. 23:29:26 Phantom_Hoover: Omg, I should make a wall-less house. 23:29:29 Just floor and ceiling. 23:29:32 In the air. 23:29:42 Incidentally, I gave Vegastrike a try and found it supremely boring. 23:29:42 hmm, that was a power cut 23:31:06 It's not on the structure. <-- it is up in the tree however 23:31:34 and actually very near the structure. In fact I think it is in it, it looks like it dips down there 23:32:01 Yay at my step-mother calling me mentally ill 23:32:04 * Sgeo angers 23:32:15 lolllllll 23:32:25 sgeo home of stability 23:32:29 Phantom_Hoover, it feels like it had potential to be a good game, but the project seems to have more or less died. Or seemed to when I last checked. 23:32:38 elliott, my step-mother doesn't live here 23:32:42 If she did, I'd go insane 23:32:47 *sgeo, 23:32:58 it's a slogan 23:33:17 Sgeo, how have you not murdered your stepmother yet 23:33:28 elliott: i found an actual, meaningful error in the compile 23:33:28 r 23:33:42 oklopol: :D 23:33:44 one that's not a missed typo, but a complete failure of brianing 23:33:46 *braining 23:34:13 Vorpal, yes... I think it's just a general lack of interest in space sims. 23:34:24 unless i'm mistaken, everything is completely wrong, although it's very hard to notice. 23:34:31 -!- augur has changed nick to augur[food]. 23:34:56 like, i'm not sure multiple examples have actually helped the brancher at all, or something :D 23:35:03 not sure what the situ is yet 23:35:30 Literally the only two I can think of in active development are Oolite (held afloat on a raft of nostalgia) and Infinity (depressingly near being vapourware). 23:36:05 Phantom_Hoover, realistic space sims: too small market segment 23:36:09 EVE does not count as a space sim here, since it's more of a MMO RTS. 23:36:29 Vorpal, no, I mean generic space flight sims. 23:36:44 the great thing about asteroids ii is that it has great market potential! 23:36:49 Phantom_Hoover, generic as in including unrealistic ones too? 23:36:56 Vorpal, yes. 23:37:00 hm 23:37:02 it's basically an insane shooter! but awesome! 23:37:14 Phantom_Hoover, that's stranger. 23:37:37 I'm defining space sim as "you have a spaceship which you fly around in a non-automated fashion". 23:37:57 is minecraft in that definition? 23:37:58 Which excludes EVE etc. in one fell stroke, since their flight system is "right click". 23:38:27 Phantom_Hoover: Have I mentioned that I am terrible at Asteroids? 23:38:29 <3 MMORTS 23:38:33 elliott, you haven't 23:38:36 Maybe I should get involved with EVE? 23:38:52 I like Shattered Galaxy a lot, except for having to decide what stats to put points into 23:38:52 Sgeo: If you like spreadsheets. 23:38:54 Sgeo, do you enjoy fiddling with Excel? 23:38:58 Sgeo: EVE has a lot of that. 23:39:06 You "learn" automatically. Somehow. 23:39:07 I don't like the thought of applying math 23:39:10 But it takes time. 23:39:21 Sgeo, well, there's none of *that*. 23:39:23 Math for math's sake is fun. Math for gaming purposes is not. 23:39:26 If you're not good at accounting EVE is probably going to be a bit of a drag, though. 23:39:43 No EVE, then. Ok. 23:39:46 Sgeo: BTW, if you're good enough, you can play for free. You can buy the monthly subscription with in-game money. 23:40:07 You'd probably have to spend a few months paid and also be amazing to be able to do that exclusively, though. 23:40:22 And you might have to blow up some ships and steal their money to do it. 23:40:35 (Yes, this is legal in EVE.) 23:40:47 It's sad, really: space sims are a venerable genre with a history going back nearly as far as the idea of using a computer to play games. 23:41:24 * Sgeo <3 Microsoft Allegiance 23:42:16 "Allegiance, the multiplayer space-combat game from the minds of Microsoft Research, combines the challenges of tactical squadron-based combat, intense one-on-one space dogfights, and amazing graphical and sound effects into a space-action experience like nothing you've seen before." 23:42:19 Like Asteroids II, but worse. 23:42:58 oh is it 3d? lol 23:43:01 crap 23:43:22 I also get the sense that I am the only person under the age of 40 in the Oolite community. 23:43:24 elliott, that website is dead 23:43:39 Sgeo: It's probably not Newtonian, and it's also 3D. 23:43:39 http://freeallegiance.org/ 23:43:51 Sgeo: It is, therefore, *vastly* inferior to Asteroids II. 23:44:03 elliott, Newtonian 3D flight is not something with a good reputation. 23:44:08 cf. Frontier. 23:44:13 Phantom_Hoover: That's why Asteroids II isn't 3D. 23:44:28 Phantom_Hoover: As far as I know a 2D Newtonian space shooter just hasn't been created yet. 23:44:32 You do realize it's not a single-player game? 23:44:44 Sgeo: Asteroids II doesn't even have a single player mode ... or if it does it's a very low priority. 23:44:52 Oh 23:44:53 (I *really* want to give the ICP a spin, but it's Windows only and even on Wine it falls afoul of the Evil Graphical Glitch. 23:44:55 *) 23:45:03 Phantom_Hoover: ICP? 23:45:20 elliott, the prototype of Infinity's combat. 23:45:26 Ah. 23:45:42 Sgeo: Um, do you actually know what Asteroids II is? 23:45:45 Notable for a) being the only solid evidence of progress and b) being Newtonian and 3D. 23:45:46 No 23:45:52 Asteroids II? 23:45:54 Sgeo, http://au.gamespot.com/gamespot/features/pc/bestof_2000/p2_15.html 23:46:20 Sgeo: It's a 2D multiplayer space shooter based on Newtonian mechanics with gravity (including orbits) and localised physics distortions (e.g. slowing down the speed of light to trap someone, then shooting the hell out of that bubble before they can escape). 23:46:27 Phantom_Hoover, why newtonian? 23:46:28 It's the awesome physics-based space shooter that me, elliott and (sort of) oklopol came up with. 23:46:40 Vorpal: Because orbits. 23:46:48 elliott, why not base it on general relativity? 23:46:50 Vorpal, in the case of ICP, who knows. 23:46:55 Vorpal: Ha ha ha ha ha ah a ha ha ha hahahaahahahahahahahaha 23:47:12 Vorpal, because I do not actually have any idea what the hell a tensor is or what they do. 23:47:13 elliott, I don't think Astroids II and Allegiance are in competition 23:47:21 Phantom_Hoover, ah 23:47:22 [Says the person who always abandons one language for another] 23:47:27 Sgeo: Yes, sure they are. 23:47:36 Allegiance is a bad shooter that is neither Newtonian nor 2D. 23:47:39 Asteroids II is therefore superior. 23:47:48 elliott, why is being 3D bad as such? 23:47:57 Vorpal: Because movement in 3D is a bitch and distracts from shooting shit. 23:48:01 elliott, oi, those criteria include FS2 which was good. 23:48:02 Also you can't do Newtonian well in 3D. 23:48:05 It ends up not being fun. 23:48:05 elliott, uh. Joystick? 23:48:13 Phantom_Hoover: >_> 23:48:18 Vorpal: Still not nearly as smooth as 2D. 23:48:22 elliott, it was! 23:48:35 elliott, 3D is perfectly navigatable with joystick. Though not very much with just keyboard and mouse 23:48:41 It's cathartic when you need to blow stuff up! 23:49:03 Vorpal: Regardless, 3D Newtonian is a bitch. 23:49:05 And Newtonian is <3. 23:49:09 Ergo 2D. (Or 4D!) 23:49:09 elliott, to code or? 23:49:13 Vorpal: To play. 23:49:16 It's not very fun. 23:49:33 2D Newtonian hasn't been reacted-to yet because as of yet nobody has done it, as far as we know. 23:49:41 However it's probably going to be superficially similar to Asteroids in how flight works. 23:49:44 Thus the codename. 23:49:45 elliott, hm. Do you dislike realistic 3D sims in general? 23:49:51 elliott, such as flightsims. 23:49:54 elliott, erm, Asteroids is 2D Newtonian. 23:49:58 (In that turning around doesn't actually stop you flying in the way you're flying.) 23:50:01 Phantom_Hoover: Is it proper Newtonian? 23:50:04 Spacewar is 2D Newtonian. 23:50:09 Or just a vague approximation? 23:50:10 Star Control is 2D Newtonian. 23:50:17 elliott, define "proper". 23:50:23 Phantom_Hoover: As proper as gravity.lisp. 23:50:33 star control had that yeah 23:50:33 elliott, similar thing happens in Alleg. It's not Newtonian though, need thrusters to keep moving etc 23:50:33 If not, as far as I'm concerned, gravity basically changes a lot. 23:50:35 in fights 23:50:43 elliott, no, but the essential features are there, other than unlimited acceleration. 23:50:56 Phantom_Hoover: Well, it's the little bits that'll be innovative. :p 23:50:56 at least it rings a bell 23:50:57 Also, why not a relativistic 2d game, instead of newtonian? 23:51:02 (In that turning around doesn't actually stop you flying in the way you're flying.) <-- well duh. Even EV Override does that. It's 2D. And it is hardly realistic when it comes to other stuff (no gravity from planets and so on) 23:51:03 And Spacewar and Star Control both have (limited) gravitation. 23:51:04 Sgeo: Because we're doing it on computers. 23:51:16 elliott, uh? 23:51:16 Sgeo, because the calculations for that are sodding difficult. 23:51:20 Phantom_Hoover: Ours isn't limited. :p 23:51:22 Oh 23:51:26 Sgeo: Additionally multiplayer would be impossible. 23:51:30 You need, like, perfect sync. 23:51:32 "I cannot understand the equations" difficult. 23:51:44 "I cannot get even the vague gist of the equations" difficult. 23:51:50 Phantom_Hoover: Anyway, physics distortion is innovative. :p 23:52:02 "I do not understand the concepts behind the equations" difficuly. 23:52:05 elliott, IS IT 23:52:07 Is there any way I can help? 23:52:24 If Sgeo gets involved, I'm quitting 23:52:33 Sgeo: Can you program in Amber? 23:52:42 elliott, I'm sure I can learn Amber 23:52:45 elliott, not fair. It is a new language you invented for this. 23:52:45 OK, it's day. I'm going to go out there, sword in hand, try not to die, and punch some trees. 23:52:51 Sgeo, see that too ^ 23:52:59 Vorpal: My, my, life isn't fire, Vorpal. 23:53:02 *fair, 23:53:02 elliott, I'm sure I can learn Amber 23:53:04 It _is_ fire. 23:53:08 elliott, *I* cannot program in Amber. 23:53:17 Phantom_Hoover: No, but I hired you on other criteria. 23:53:19 Phantom_Hoover, wha? 23:53:30 Is only elliott _capable_ of programming in Amber? 23:53:35 -!- augur[food] has changed nick to augur. 23:53:38 Anyone can, it's a trivial language :P 23:53:38 That makes no bleeding sense 23:53:41 Sgeo, elliott is making a new language just for this project 23:53:41 Sgeo, I know nothing of it other than "it's C with GC and lambdas". 23:53:55 C with lambdas ooh 23:53:57 elliott has not actually defined it beyond some code snippets. 23:53:58 Sgeo, thus only he knows it yet. 23:54:08 Oh, "making", not "made" 23:54:11 Phantom_Hoover, is he slacking? 23:54:13 adding GC doesn't really have to change anything 23:54:19 for the progger 23:54:28 oklopol: yeah it's just that the GC is precise 23:54:30 He has concluded that CL is TOO SLOW and that I need to program 3 inches from the metal. 23:54:34 oklopol: which you can't do in C without ugly annotations 23:54:44 Phantom_Hoover: Too slow, not really, but without bindings to things we need, yes. 23:54:47 Phantom_Hoover, based on profiling? 23:54:53 Phantom_Hoover: Too slow, not really, but without bindings to things we need, yes. 23:54:54 Vorpal: ^ 23:55:04 elliott, yes it arrived same second 23:55:05 Also, as much as you love profiling, it is possible to use reason as well as blind testing. 23:55:05 elliott, erm, one can always bind with CL's FFI. 23:55:11 elliott, there are no good CL implementations with good ways to bind to ... what Phantom_Hoover said 23:55:16 Phantom_Hoover: ...which is a large project in itself. 23:55:27 Amber is explicitly designed to not require bindings. 23:55:39 elliott, larger than writing your own language and using the C interface? 23:55:47 Making it a perfect language for Active Worlds bots! 23:55:56 Phantom_Hoover: Amber is also a nice language. :p 23:56:08 Phantom_Hoover: ALSO: GC time. 23:56:17 _Any_ GC that causes _any_ significant pause is completely unacceptable. 23:56:22 Because the game will freeze. 23:56:30 Gregor's generational GC is much faster than boehm. 23:56:39 So hopefully it won't cause noticeable pauses. 23:56:50 And current CL GCs? 23:56:52 (If it does, I'll have to see if I can get a parallel GC.) 23:56:55 Phantom_Hoover: Are stop-the-world. 23:57:07 elliott, what about haskell gc 23:57:07 elliott, all of them? 23:57:15 Vorpal, HAHAHAHAHAHAHAHA 23:57:24 Vorpal: A Haskell game would spend an upsetting amount of time in IO without FRP. 23:57:25 Phantom_Hoover, I do not know the model of haskell's gc 23:57:28 Phantom_Hoover: Yes. Well, maybe not Franz's. 23:57:37 Vorpal: GHC's garbage collector is concurrent but I do not know that it's parallel. 23:57:47 elliott, what's the best way for me to learn FRP? 23:57:53 elliott, hm 23:57:59 Sgeo: Don't. 23:58:04 There are no useful implementations yet. 23:58:05 elliott, why not? 23:58:06 Oh 23:58:07 elliott, and why not use FRP then? 23:58:17 Vorpal: There are no useful implementations yet. Well, a few contenders, but. 23:58:19 what is FRP? 23:58:21 Definitely nothing commercial-ready. 23:58:22 elliott, ah 23:58:25 coppro: functional reactive programming 23:58:27 oh 23:58:33 thanks for clearing it up 23:58:35 j-invariant: did i mention i don't know where my house is 23:58:36 coppro: YW 23:58:40 Racket has an implementation? 23:58:41 elliott: yeah umm, can you get a "greater than?" function to compile? :D 23:58:46 because i sure can't. 23:58:47 elliott, fail 23:58:48 how can you not know? 23:58:50 oklopol: I CAN TRY 23:59:00 j-invariant: because i had to walk to somewhere with enough space for a house first day 23:59:01 coppro, apparently it will make the entire world into kittens. 23:59:05 it seems conditions vs multiarg is completely wrong 23:59:11 j-invariant, he can get lost inside a 3x3x3 room in minecraft :P 23:59:19 FRP is what makes functional programming possible. 23:59:25 Rather than functional core with imperative interface code. 23:59:43 oklopol: ok i will 23:59:44 j-invariant, he is THAT bad at navigating. (Okay, slight exaggeration, but not much) 23:59:44 oklopol: sec 23:59:45 rofl 23:59:52 Going to try MC again 23:59:54 coppro: what 23:59:56 Goddamn it, I have the Star Control 2 Ur-Quan theme stuck in my head