00:05:44 * nazgjunk wtf's, audibly, and then goes to sleep.
00:07:14 <bsmntbombdood> mathmaticians come up with all kinds of crazy notations
00:09:56 -!- crathman has joined.
00:11:57 <oerjan> That notation is the fundament for understanding the rules of many of the new kinds of logic, such as linear logic.
00:15:32 -!- sebbu2 has joined.
00:16:48 -!- nazgjunk has quit (Nick collision from services.).
00:27:14 -!- Sgeo has quit ("Leaving").
00:28:34 -!- Sgeo has joined.
00:33:45 -!- tgwizard has quit (Read error: 110 (Connection timed out)).
00:34:18 -!- sebbu2 has quit (Client Quit).
00:34:34 -!- sebbu has quit (Read error: 110 (Connection timed out)).
00:37:42 -!- oerjan has quit ("Eek").
01:24:39 -!- Arrogant has quit ("Leaving").
01:49:23 -!- crathman has quit (Read error: 110 (Connection timed out)).
01:50:31 -!- wooby has quit.
01:53:01 -!- anonfunc has joined.
01:57:57 -!- goban has quit (Read error: 104 (Connection reset by peer)).
01:58:08 -!- goban has joined.
02:17:22 -!- crathman_ has joined.
02:29:10 <fizzie> >>> 'ABC' < 'C' < 'Pascal' < 'Python' < 'Scheme' < 'Zilog Z80 assembler'
02:29:19 <fizzie> I find Python's opinions a bit suspicious.
02:35:17 -!- crathman_ has quit (Read error: 110 (Connection timed out)).
02:35:49 -!- digital_me has quit ("Lost terminal").
02:39:23 -!- digital_me has joined.
04:04:22 -!- SevenInchBread has quit (Read error: 113 (No route to host)).
04:43:54 -!- Sgeo has quit ("Leaving").
05:26:41 -!- ShadowHntr has joined.
05:46:29 -!- digital_me has quit ("Lost terminal").
07:19:42 -!- nooga has quit (Read error: 110 (Connection timed out)).
07:31:17 -!- nooga has joined.
07:53:31 -!- ShadowHntr has quit (Read error: 60 (Operation timed out)).
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:55:42 -!- Sukoshi has quit ("ERC Version 5.1 (CVS) $Revision: 1.796 $ (IRC client for Emacs)").
08:56:09 -!- Sukoshi has joined.
09:11:19 -!- sebbu has joined.
11:11:15 -!- tgwizard has joined.
12:08:12 -!- anonfunc has quit (zelazny.freenode.net irc.freenode.net).
12:08:13 -!- helios24 has quit (zelazny.freenode.net irc.freenode.net).
12:08:13 -!- fizzie has quit (zelazny.freenode.net irc.freenode.net).
12:08:13 -!- sp3tt has quit (zelazny.freenode.net irc.freenode.net).
12:08:14 -!- cmeme has quit (zelazny.freenode.net irc.freenode.net).
12:08:14 -!- AfterDeath has quit (zelazny.freenode.net irc.freenode.net).
12:08:15 -!- tgwizard has quit (zelazny.freenode.net irc.freenode.net).
12:08:15 -!- Shaunaf has quit (zelazny.freenode.net irc.freenode.net).
12:08:15 -!- meatmanek has quit (zelazny.freenode.net irc.freenode.net).
12:08:15 -!- bsmnt_bot has quit (zelazny.freenode.net irc.freenode.net).
12:08:15 -!- puzzlet has quit (zelazny.freenode.net irc.freenode.net).
12:08:22 -!- bsmntbombdood has quit (Remote closed the connection).
12:09:10 -!- bsmntbombdood has joined.
12:09:10 -!- tgwizard has joined.
12:09:10 -!- anonfunc has joined.
12:09:10 -!- bsmnt_bot has joined.
12:09:10 -!- AfterDeath has joined.
12:09:10 -!- helios24 has joined.
12:09:10 -!- sp3tt has joined.
12:09:10 -!- Shaunaf has joined.
12:09:10 -!- meatmanek has joined.
12:09:10 -!- puzzlet has joined.
12:09:10 -!- fizzie has joined.
12:09:10 -!- cmeme has joined.
13:02:14 -!- csaba has joined.
13:03:09 <csaba> I'm thinking of writing a visual simulator of a Turing machine. I'm interested if you have any ideas what should I include into it? I mean, besides the basic machine.
13:23:52 -!- csaba has quit (" HydraIRC -> http://www.hydrairc.com <- IRC with a difference").
13:49:18 -!- ais523 has joined.
13:49:36 <EgoBot> 1 ais523: daemon ul bf
13:49:56 <ais523> !ul (Is the Underload interpreter daemon still running after all this time?)S
13:49:59 <EgoBot> Is the Underload interpreter daemon still running after all this time?
13:53:09 <ais523> Now what's happened to EgoBot?
13:53:14 -!- anonfunc has quit (zelazny.freenode.net irc.freenode.net).
13:53:14 -!- fizzie has quit (zelazny.freenode.net irc.freenode.net).
13:53:14 -!- helios24 has quit (zelazny.freenode.net irc.freenode.net).
13:53:14 -!- sp3tt has quit (zelazny.freenode.net irc.freenode.net).
13:53:15 -!- bsmntbombdood has quit (zelazny.freenode.net irc.freenode.net).
13:53:15 -!- cmeme has quit (zelazny.freenode.net irc.freenode.net).
13:53:15 -!- AfterDeath has quit (zelazny.freenode.net irc.freenode.net).
13:53:16 -!- Shaunaf has quit (zelazny.freenode.net irc.freenode.net).
13:53:16 -!- meatmanek has quit (zelazny.freenode.net irc.freenode.net).
13:53:16 -!- tgwizard has quit (zelazny.freenode.net irc.freenode.net).
13:53:17 -!- puzzlet has quit (zelazny.freenode.net irc.freenode.net).
13:53:17 -!- bsmnt_bot has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- oklopol has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- pgimeno has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- SimonRC has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- sekhmet has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- NK\ has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- sebbu has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- Sukoshi has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- nooga has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- goban has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- GregorR has quit (zelazny.freenode.net irc.freenode.net).
13:53:18 -!- tokigun has quit (zelazny.freenode.net irc.freenode.net).
13:53:19 -!- EgoBot has quit (zelazny.freenode.net irc.freenode.net).
13:53:44 -!- sebbu has joined.
13:53:44 -!- Sukoshi has joined.
13:53:44 -!- nooga has joined.
13:53:44 -!- goban has joined.
13:53:44 -!- GregorR has joined.
13:53:44 -!- tokigun has joined.
13:53:44 -!- EgoBot has joined.
13:53:47 -!- bsmntbombdood has joined.
13:53:47 -!- tgwizard has joined.
13:53:47 -!- anonfunc has joined.
13:53:47 -!- bsmnt_bot has joined.
13:53:47 -!- AfterDeath has joined.
13:53:47 -!- helios24 has joined.
13:53:47 -!- sp3tt has joined.
13:53:47 -!- Shaunaf has joined.
13:53:47 -!- meatmanek has joined.
13:53:47 -!- puzzlet has joined.
13:53:47 -!- fizzie has joined.
13:53:47 -!- cmeme has joined.
13:53:50 -!- oklopol has joined.
13:53:50 -!- pgimeno has joined.
13:53:50 -!- sekhmet has joined.
13:53:50 -!- NK\ has joined.
13:53:50 -!- SimonRC has joined.
13:54:00 <EgoBot> help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon
13:54:02 <EgoBot> 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl
13:54:10 <EgoBot> 1 ais523: daemon ul bf
13:55:06 <ais523> !daemon deadfish funge93 http://pastebin.ca/raw/373003
13:56:09 <ais523> That seemed to work (it sent the end of the message privately), but it could probably do without the prompts and newlines
13:59:14 <ais523> !deadfish funge93 http://pastebin.ca/raw/373012
13:59:24 <ais523> !daemon deadfish funge93 http://pastebin.ca/raw/373012
14:00:40 <ais523> !daemon deadfish funge93 http://pastebin.ca/raw/373016
14:02:46 <ais523> !daemon deadfish funge93 http://pastebin.ca/raw/373016
14:03:12 <ais523> Deadfish has no sensible way to set its single memory value to 0
14:03:29 <ais523> It doesn't have any loops or other flow control, either, so the benefits of implementing it are dubious
14:18:37 -!- UpTheDownstair has joined.
14:20:04 -!- UpTheDownstair has changed nick to nazgjunk.
14:21:33 <ais523> !ul (~exec sys.stdout("!deadfish iisso"))S
14:21:36 <EgoBot> ~exec sys.stdout("!deadfish iisso")
14:22:51 <ais523> It would be nice if all EgoBot's interpreters were written in esoteric programming languages
14:23:13 <ais523> although that would lead to some sort of infinite regress, probably, unless it ran on a machine with Brainfuck machine code or something like that
14:30:08 <ais523> The Underload interpreter is written in brainfuck, and the Deadfish interpreter is written in Befunge-93, so that's two already
15:09:12 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)).
15:09:28 -!- UpTheDownstair has joined.
15:09:42 -!- UpTheDownstair has changed nick to nazgjunk.
15:59:11 -!- oerjan has joined.
16:10:00 <ais523> Oerjan, your comments lack context to me
16:11:03 <oerjan> ~exec self.register_raw(~exec self.register_raw(r"\S+ PRIVMSG (\S+) :>>>(.*)", lambda x,y: sys.stdout(repr(eval(y.group(1)))))
16:11:29 <oerjan> ~exec self.register_raw(~exec self.register_raw(r"\S+ PRIVMSG (\S+) :>>>(.*)", lambda x,y: sys.stdout(repr(eval(y.group(1))))))
16:11:53 <oerjan> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :>>>(.*)", lambda x,y: sys.stdout(repr(eval(y.group(1)))))
16:12:00 -!- bsmnt_bot has quit (Remote closed the connection).
16:12:04 -!- bsmnt_bot has joined.
16:12:21 <oerjan> apparently not correct.
16:12:47 <oerjan> ~sys.stdout(repr(1+2))
16:12:57 <oerjan> ~exec sys.stdout(repr(1+2))
16:13:14 <oerjan> ~exec sys.stdout(repr(eval("1+2")))
16:15:30 <oerjan> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :>>>(.*)", lambda x,y: sys.stdout(repr(eval(y.group(1)))))
16:15:36 <oerjan> ~exec sys.stdout(repr(eval("1+2")))
16:15:42 -!- bsmnt_bot has quit (Remote closed the connection).
16:15:44 -!- bsmnt_bot has joined.
16:16:12 <oerjan> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :>>>(.*)", lambda x,y: sys.stdout(y.group(1)))
16:16:41 <oerjan> ~exec self.raw_regex_queue.pop()
16:17:31 <oerjan> strange. must be that darn scope again.
16:18:00 <oerjan> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :>>>(.*)", lambda x,y: sys.stdout(repr(eval(y.group(2)))))
16:18:27 <oerjan> >>> "Pascal" < "Python"
16:19:41 <ais523> Maybe it would be possible to do something similar to that to get an Underload/Python quine going
16:20:30 <ais523> ~exec self.register_raw(r"\S_ PRIVMSG (\S+) :%%(.*)", lambda x,y: sys.stdout(y.group(2)))
16:20:35 <oerjan> >>>"C++" < "Everything"
16:20:55 <ais523> I don't really know much Python
16:22:06 <ais523> >>>"Does this work for me too?"
16:22:33 <ais523> >>>sys.stdout("Nested printing")
16:23:15 <bsmnt_bot> <_sre.SRE_Match object at 0xb7c6b0f8>
16:23:36 <bsmnt_bot> ':ais523!n=chatzill@chillingi.eee.bham.ac.uk PRIVMSG #esoteric :>>>x'
16:24:23 -!- bsmnt_bot has quit (Remote closed the connection).
16:24:25 -!- bsmnt_bot has joined.
16:24:47 <ais523> I suppose I shouldn't have done that, really, but I wanted to see how it would handle the eval loop
16:25:00 <ais523> >>>'Is this still working?'
16:25:08 <oerjan> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :>>>(.*)", lambda x,y: sys.stdout(repr(eval(y.group(2)))))
16:25:26 <ais523> >>>"'this string contains single quotes'"
16:25:27 <bsmnt_bot> "'this string contains single quotes'"
16:25:41 <ais523> >>>"'single"+'"double'
16:26:44 <ais523> that would be a quine-by-cheating if it weren't for the repr()
16:27:22 <oerjan> I wanted it to give approximately the same output as the Python repl loop
16:28:18 <ais523> I wonder why my non-repr'd and eval'd version above didn't work?
16:28:44 <ais523> maybe it's because I can't count parentheses
16:29:05 <ais523> "~exec self.register_raw(r"\S_ PRIVMSG (\S+) :%%(.*)", lambda x,y: sys.stdout(y.group(2)))"
16:29:28 <ais523> no, I did count correctly
16:29:40 <oerjan> perhaps % has a regexp meaning
16:30:05 <ais523> I hope not, my Underload interpreter in a new regexp-based language Thutu that I'm creating relies on it being meaningless
16:30:14 <ais523> but I could always change to some other character instead
16:30:29 <ais523> ~exec self.register_raw(r"\S_ PRIVMSG (\S+) :<<<(.*)", lambda x,y: sys.stdout(y.group(2)))
16:30:41 <oerjan> you mispled S+ as S_ in there
16:30:50 <ais523> ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :<<<(.*)", lambda x,y: sys.stdout(y.group(2)))
16:31:17 <oerjan> that may have been the original problem too
16:31:37 <ais523> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:31:42 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:31:46 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:31:50 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:31:54 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:31:58 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:32:02 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:32:06 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:32:10 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:32:14 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:32:18 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:32:22 <EgoBot> <<<!ul (a(<<<!ul )~*(:^)*S):^
16:33:39 <oerjan> you might be able to do it just with ~exec sys.stdout(...) as well
16:34:13 <ais523> !daemon ul bf http://pastebin.ca/raw/36774
16:34:49 <ais523> I tried that a while ago, but the problem was that Underload needs a literal double-quote so it can pass it to Python, and Python has trouble with double-quotes inside strings
16:35:21 <ais523> i.e. whatever representation you use for the string delimiter, it can't be used inside the string without backslashing it
16:35:37 <ais523> !daemon ul bf http://pastebin.ca/raw/367774
16:35:58 <ais523> I have no idea what random code I fed EgoBot by mistake there...
16:36:12 <oerjan> apparently it did _something_
16:36:28 <ais523> that's not difficult in BF if you have enough dots in the program
16:36:48 <ais523> but it's interesting that it came up with characters that aren't near the end of the ASCII scale
16:37:33 <oerjan> there are plenty of - in Lisp.
16:38:18 <ais523> of course, I never quite got used to using - as part of a variable name
16:38:48 <ais523> my only real Lisping to date has been writing an Unlambda-using-lambda-notation to Unlambda-using-```ski-notation compiler in Emacs-Lisp
16:40:30 <oerjan> all the loops are essentially []
16:41:42 <oerjan> my guess is the first of them is infinite, since there is only one > in the program, which comes later.
16:42:44 <ais523> yes, the program's essentially ------(lots more minuses and some dots)----[] from a BF point of view, which is pointless
16:45:44 <EgoBot> ais523 did get the right page this time
16:46:30 <EgoBot> help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon
16:46:32 <EgoBot> 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl
16:47:15 <ais523> !irp Say "Hello, world!", please!
16:47:25 <oerjan> <ais523> !daemon deadfish funge93 http://pastebin.ca/raw/373003
16:47:59 <ais523> yes, there was a call for Deadfish interpreters other than the reference one, so I wrote one in Befunge-93
16:48:06 <ais523> My first Befunge-93 program, as it happens
16:48:33 <oerjan> i thought that the poster was carelessly vague on the language :)
16:48:48 <ais523> but 373016 is the EgoBot-ised version that doesn't give prompts and which doesn't print newlines except when outputting
16:49:04 <GregorR> Y'know, I could add a sensible interpreter if you asked me to :P
16:49:07 <ais523> I even preserved the bugs in the reference interpreter
16:49:23 <ais523> !irp Tell GregorR that EgoBot does IRP now.
16:49:38 <GregorR> Well that worked great X-P
16:50:08 <GregorR> For a quarter of a second, you'd fooled me.
16:50:46 <ais523> I got it to do Underload and Deadfish without cheating, though
16:51:03 <ais523> (using Keymaker's BF code for the Underload and my Befunge-93 code for the Deadfish)
16:51:18 <GregorR> Its daemon support isn't particularly reliable *shrugs*
16:53:29 <ais523> once you get used to the requirements for newlines in strategic places, though, it's not too hard to use
16:54:27 <ais523> According to the Deadfish reference interpreter, the value becomes 0 whenever it was previously exactly -1 or exactly 256
16:54:50 <ais523> but squaring makes it possible to jump past 256, and then it's very tedious to take it back down again
16:57:57 <oerjan> squaring is module size(int), isn't it?
16:58:31 <ais523> presumably, but I don't know what maxint for the Befunge-93 interpreter is
16:58:36 <ais523> It shouldn't be too hard to find out
16:59:28 <ais523> so that's probably an indication of maxint's value
17:01:21 <ais523> because 43046721 squared is 6954FE21E3E81 in hex
17:01:42 <ais523> and -501334399 is (infinite number of F's) E21E3E81
17:02:09 <ais523> Of course, it could be anywhere from 29 bits to 36 with that information, but 32's a good guess
17:03:42 <ais523> !daemon deadfish funge93 http://pastebin.ca/raw/373016
17:04:24 <EgoBot> 1 ais523: daemon ul bf
17:04:26 <EgoBot> 2 ais523: daemon deadfish funge93
17:04:28 <EgoBot> 3 ais523: daemon irp bf
17:05:52 <oerjan> this means that once you have assured the number is even, you can get it back to 0 by 5 squarings.
17:06:40 -!- jix__ has joined.
17:08:43 <oerjan> in general, 5 squarings, 1 increment, then 5 more squarings.
17:09:03 <oerjan> and you will have either 0 or 1.
17:09:23 <oerjan> which incidentally gives an actual algorithm for testing evenness
17:09:30 <ais523> I wonder if there's a way to get it onto 0 guaranteed, using the special behaviour of 256 and/or -1?
17:09:43 <ais523> Of course, sssssisssssd will get it to 0 guaranteed
17:10:33 <oerjan> does -1 have a square root? that could mess things up a bit
17:11:25 <oerjan> 256 is less important in this case, since you want to reach 0 anyhow
17:11:26 <ais523> no; -1 equals 2^(even number)-1 equals (some number)^2-1 equals (some number plus 1)(some number minus 1)
17:11:50 <ais523> and you can't have either bracket being a square, because they're one away from a square
17:11:58 -!- jix__ has changed nick to jix.
17:12:00 <ais523> and they can't share an odd factor because they differ by 2
17:13:31 <ais523> you know, with an extra register and some sort of flow control Deadfish could actually become a useful language
17:14:58 <ais523> I wonder what my JOIN message looks like from bsmnt_bot's point of view?
17:15:49 <oerjan> basically i think it is :ais523... JOIN #esoteric
17:16:04 <ais523> ~exec self.register_raw(r".*JOIN.*", lambda x,y: sys.stdout(x))
17:16:08 -!- ais523 has left (?).
17:16:17 -!- ais523 has joined.
17:16:18 <bsmnt_bot> :ais523!n=chatzill@chillingi.eee.bham.ac.uk JOIN :#esoteric
17:16:21 <oerjan> possibly JOIN :#esoteric, since they are equivalent
17:16:22 <bsmnt_bot> :oerjan!n=oerjan@hagbart.nvg.ntnu.no PRIVMSG #esoteric :possibly JOIN :#esoteric, since they are equivalent
17:16:58 <ais523> maybe we could get a bsmnt_bot welcoming service going
17:17:09 <oerjan> ~exec self.raw_regex_queue.pop()
17:17:38 <ais523> I was just looking for that command in the logs when you typed it...
17:18:30 <oerjan> i had it in my own history.
17:19:27 <ais523> ~exec self.register_raw(r":([^!]*)[^ ]* JOIN.*", lambda x,y: sys.stdout(y.group(1)))
17:19:33 -!- ais523 has left (?).
17:19:41 -!- ais523 has joined.
17:20:01 <ais523> ~exec self.raw_regex_queue.pop()
17:20:19 <ais523> ~exec self.register_raw(r":([^!]*)[^ ]* JOIN.*", lambda x,y: sys.stdout("Hello, "+y.group(1)+"!"))
17:20:40 <ais523> that should do for now
17:21:01 <ais523> I need to add the fast-loading low-fanciness logs to the wiki
17:21:28 <oerjan> the tunes one, you mean
17:21:56 <oerjan> yeah, the others have recently become nearly unbearably slow
17:23:26 <oerjan> Something intermediate would have been nice.
17:23:44 -!- kxspxr has joined.
17:23:58 -!- kxspxr has quit (Client Quit).
17:24:17 <ais523> I think bsmnt_bot frightened them off, probably
17:24:17 <oerjan> hm, this _could_ become annoying after netsplits.
17:24:43 <ais523> but then bsmnt_bot would probably just get kicked temporarily for flooding
17:24:58 <ais523> just like happens to EgoBot if you feed it an infinite loop that outputs something by mistake
17:25:04 <oerjan> except that i think it does its own throttling
17:25:41 <oerjan> EgoBot throttles too, but I think it has problems with huge lines
17:25:45 <ais523> but bsmnt_bot isn't throttled
17:26:04 <ais523> ~exec sys.stdout("a\nb\nc\nd\ne\nf\ng\nh")
17:26:12 <oerjan> i thought i remembered bsmntbombdood saying he put throttling on sys.stdout
17:26:21 <ais523> oh, the throttle only kicks in after 4 lines
17:26:21 <oerjan> in fact i think we discussed how to do it
17:26:26 <ais523> which is why I hadn't noticed it before
17:27:03 <oerjan> on the other hand the IRC network may do its own throttling in border cases
17:27:45 <oerjan> i don't know but it's suggested by the original RFC
17:29:05 <oerjan> btw i am not sure your argument that -1 has no square root mod 2^n holds
17:29:33 <ais523> no, it's an argument that -1 has no square root mod 4^n
17:29:36 <ais523> which applies in this case
17:30:32 <ais523> 4^n-1 = (2^n-1)(2^n+1)
17:30:44 <ais523> both brackets are odd, and so have no even factors
17:30:52 <ais523> they can't both be square numbers because they differ by 2
17:31:06 <ais523> and because they differ by 2, they can't share an odd factor
17:31:15 <oerjan> but the square could be a*4^n-1
17:31:31 <ais523> of course, I missed that
17:39:29 <ais523> anyway, even if -1 is hit in the sequence it isn't a problem
17:39:35 -!- anonfunc has quit.
17:39:41 <ais523> because you still end up with 0 or 1 before the final d
17:41:24 <oerjan> on the other hand Haskell does not give me square roots of -1 for any power of 2 that I've tested
17:41:29 <ais523> of course, relying on overflow for sssss removes any chance of a Turing-complete system unless you have an infinite number of registers
17:42:38 <oerjan> could use a strange number ring.
17:42:55 <oerjan> in which 2^32 = 0, but there are infinitely many odd numbers
17:43:30 <ais523> you could define any number that's a multiple of 2^32 to be 0
17:43:41 <ais523> much the same way as 256 is defined to be 0 in Deadfish
17:44:51 <oerjan> well, since the language already has that strangeness.
17:44:58 <ais523> the reference interpreter defines the data type to be 'unsigned int' from C
17:45:24 <ais523> it's on the wiki. I wonder if this makes the test against -1 redundant?
17:45:34 <ais523> or if the -1 is converted to unsigned before the test?
17:45:48 <oerjan> one way or the other there has to be a conversion
17:46:12 <ais523> of course, 'unsigned int' is allowed by the C specification to be as big as the implementation wants, as long as it's at least 16 bits
17:46:21 <ais523> so we may as well make it infinite
17:46:53 <oerjan> if we make it infinite we need to modify d
17:47:05 <oerjan> put the -1 test there instead.
17:47:26 <ais523> and simultaneously deal with the signed-vs-unsigned problem
17:47:38 -!- sebbu2 has joined.
17:49:25 <oerjan> i have a vague idea that there are no square roots of -1 for proper prime powers
17:49:46 <oerjan> let me look up the mobius function
17:50:18 <ais523> one of my few esolangs I never wrote an interpreter for
17:50:29 <oerjan> i have considered doing it
17:50:37 <oerjan> but never got around to it
17:52:11 <ais523> of course, Forte is limited to nonnegative integers
17:52:54 <ais523> apparently. I had to read the spec again though to make sure
17:53:12 <oerjan> how is - defined then?
17:54:17 <ais523> the spec doesn't make it very clear. It doesn't even define +, *, or /, now I've looked (it defines 'division', sort of, but doesn't explain the relationship to the / operator)
17:54:22 <ais523> I'll go and fix it now
17:55:41 <ais523> OK, - is now officially undefined if it would lead to a negative result
17:56:58 <ais523> or it would be if the wiki hadn't crashed the instant I tried to save
17:58:01 <oerjan> i hope it wasn't because i immediately tried to load the page
17:58:34 <oerjan> the justification for Forte resembles the justification for Smetana :)
18:00:43 <ais523> I actually tried programming in it; programs are mostly short commands, with huge gaps in numbering now and then, and with the occasional huge command that renumbers itself and all the others in the loop
18:00:56 <ais523> that's why there's a colon line-break provision
18:01:26 <ais523> I suspect that in larger programs it would be more efficient to use a loop to iterate through each command in a loop and renumber it
18:04:03 -!- UpTheDownstair has joined.
18:04:13 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)).
18:07:05 -!- sebbu has quit (Connection timed out).
18:09:48 <oerjan> I think I'll change your edit into a table.
18:12:22 <ais523> Yes, that looks better.
18:14:45 -!- NK\ has changed nick to NK`.
18:19:22 -!- ais523 has quit.
18:42:58 * oerjan finds a suspicious absense of information about square roots mod n when n is a prime power
18:45:13 <oerjan> if there are none mod 4 then there cannot be any mod 4n either.
18:47:21 -!- calamari has joined.
18:48:33 <oerjan> >>> "C++" > "Calamari"
18:48:45 <oerjan> bsmnt_bot doesn't agree
18:50:24 -!- goban has quit (Read error: 104 (Connection reset by peer)).
18:51:01 <calamari> error: request for member 'allocate' in 'MyObject::pool', which is of non-class type 'Pool*'
18:51:21 -!- goban has joined.
18:51:31 <calamari> I think Java is messing me up hehe
18:54:36 <calamari> ahh, I was using . when I should have been using ->
18:59:36 -!- crathman has joined.
19:02:30 <oerjan> no, it's bsmntbombdood's
19:02:54 <oerjan> but me and ais523 played a bit with it
19:04:03 <oerjan> he is responsible for the greetings.
19:08:46 -!- goban has quit (Connection timed out).
19:08:59 -!- goban has joined.
19:18:54 -!- goban has quit (Read error: 54 (Connection reset by peer)).
19:19:09 -!- goban has joined.
19:21:24 <bsmntbombdood> oerjan: yeah, sys.stdout is throttled, but not for multiple calls
19:22:34 -!- bsmnt_bot has quit (Remote closed the connection).
19:22:37 -!- bsmnt_bot has joined.
19:22:51 <oerjan> it does only expressions.
19:23:19 <oerjan> can exec return the result?
19:25:01 <oerjan> hmph. so neither eval nor exec will work as repl for statements.
19:26:41 <oerjan> just as well to have two different commands then. But you should do something about bsmnt_bot crashing on syntax errors.
19:27:15 <oerjan> i mean, shouldn't a do_exec be isolated?
19:28:08 <bsmntbombdood> when callbacks all executed, exceptions aren't caught
19:34:02 <bsmnt_bot> NameError: name '__names__' is not defined
19:34:09 <bsmnt_bot> NameError: name '__globals__' is not defined
19:34:45 <bsmnt_bot> SyntaxError: unexpected EOF while parsing
19:34:58 <lament> ~exec print type(type)
19:34:59 <bsmntbombdood> ~exec exec "def protected(f): try:\n return f()\n\except:\n pass\n\nself.protected = protected"
19:36:24 <oerjan> do callbacks run in threads or just do_exec's
19:36:49 <lament> ~exec sys.stdout("hello")
19:37:12 <oerjan> eh, so do_exec's don't run in threads either?
19:37:18 <lament> ~exec sys.stdout(sys.version)
19:37:32 <bsmnt_bot> SyntaxError: EOL while scanning single-quoted string
19:37:34 <oerjan> that's what i thought.
19:37:44 <bsmnt_bot> SyntaxError: EOL while scanning single-quoted string
19:37:51 <bsmnt_bot> SyntaxError: EOL while scanning single-quoted string
19:38:06 <lament> ~exec sys.stdout(sys.path)
19:38:09 <oerjan> so protected should do so as well, otherwise a repl based on it may lock up the bot.
19:38:11 <bsmnt_bot> ['/bot', '/usr/lib/python24.zip', '/usr/lib/python2.4', '/usr/lib/python2.4/plat-linux2', '/usr/lib/python2.4/lib-tk', '/usr/lib/python2.4/lib-dynload', '/usr/lib/python2.4/site-packages', '/usr/lib/python2.4/site-packages/Numeric', '/usr/lib/python2.4/site-packages/dbus']
19:38:24 <bsmntbombdood> ~exec exec "def protected(f):\n try:\n return f()\n except:\n pass\nself.protected=protected"
19:38:38 <lament> can you define functions?
19:39:15 <oerjan> sure, but you need to use exec with strings and \n escapes
19:39:52 <lament> ~~exec sys.stdout(locals())
19:39:54 <lament> ~exec sys.stdout(locals())
19:39:55 <bsmnt_bot> {'message': ':lament!n=lament@S010600110999ad06.vc.shawcable.net PRIVMSG #esoteric :~exec sys.stdout(locals())', 'r': <_sre.SRE_Match object at 0xb7c4a0f8>, 'command': 'sys.stdout(locals())', 'self': <__main__.IRCbot instance at 0xb7c4b14c>}
19:40:25 <lament> ~exec sys.stdout(self.__dict__)
19:40:25 <bsmnt_bot> {'commands_running_lock': <thread.lock object at 0xb7d10100>, 'ident': 'bsmnt', 'realname': 'bsmntbombdood bot', 'commands_running': [('sys.stdout(self.__dict__)', 1172518674.4520161, ({'thread_info': <thread._local object at 0xb7cd5890>, 'exec_global_tracer': <function exec_global_tracer at 0xb7c3da74>, 'pprint': <module 'pprint' from '/usr/lib/python2.4/pprint.pyc'>, 're
19:40:26 <bsmnt_bot> ': <module 're' from '/usr/lib/python2.4/re.pyc'>, 'SysWrapper': <class __main__.SysWrapper at 0xb7c393bc>, 'exec_local_tracer': <function exec_local_tracer at 0xb7c4d454>, '__doc__': None, 'math': <module 'math' from '/usr/lib/python2.4/lib-dynload/math.so'>, 'IRCbot': <class __main__.IRCbot at 0xb7c3935c>, 'args': {'ident': 'bsmnt', 'realname': 'bsmntbombdood bot', 'chan
19:40:26 <bsmnt_bot> ': '#esoteric', 'nick': 'bsmnt_bot', 'host': '85.188.1.26', 'exec_chans': ['#esoteric', '#baadf00d'], 'owner': 'bsmntbombdood!\\S*gavin@\\S*'}, '__builtins__': <module '__builtin__' (built-in)>, '__file__': '/bot/ircbot.py', 'inspect': <module 'inspect' from '/usr/lib/python2.4/inspect.pyc'>, 'IRCFileWrapper': <class __main__.IRCFileWrapper at 0xb7c3938c>, 'sys': <module '
19:40:29 -!- bsmnt_bot has quit (Excess Flood).
19:40:32 -!- bsmnt_bot has joined.
19:40:46 -!- goban has quit (Connection timed out).
19:41:21 -!- goban has joined.
19:41:29 <oerjan> there may be something about long lines and flooding
19:42:04 <lament> ~exec self.owner = 'lament!\\S*lament@\\S*'
19:42:24 <lament> ~exec sys.stdout(self.owner)
19:43:19 <lament> and self.owner is never looked up again?
19:44:30 <lament> ~exec open('lament', 'w').write('hello')
19:44:31 <bsmnt_bot> IOError: [Errno 13] Permission denied: 'lament'
19:45:27 <bsmnt_bot> ['bin', 'bot', 'etc', 'lib', 'usr']
19:45:32 <bsmnt_bot> ['betterbot.py', 'test.pickle', 'foo.py~', 'ski_repl.py', 'foo.py', 'start.sh', 'better.sh', 'ircbot.py']
19:47:32 <lament> ~exec os.remove('/bot/test.pickle') and os.mkdir('/bot/test.pickle') and open('/bot/test.pickle/lament', 'w').write('hello')
19:47:33 <bsmnt_bot> OSError: [Errno 13] Permission denied: '/bot/test.pickle'
19:48:22 <oerjan> that's not immensely clever.
19:48:41 <oerjan> well, now nothing is writable.
19:49:12 <lament> oerjan: shhh, that's only until we get root
19:49:34 <bsmnt_bot> NameError: name 'sys' is not defined
19:49:51 <bsmntbombdood> SimonRC: that will only effect it for the current exec
19:49:54 -!- NK` has changed nick to NK`divx.
19:55:19 <lament> ~exec sys.stdout(os.popen('ls').read())
19:56:10 <SimonRC> ~exec sys.stdout(sys.__dict__)
19:56:11 <bsmnt_bot> {'_SysWrapper__sys': <module 'sys' (built-in)>, 'stderr': <__main__.IRCFileWrapper instance at 0xb7c2f62c>, 'stdout': <__main__.IRCFileWrapper instance at 0xb7c2f5ec>}
19:57:00 <SimonRC> ~exec [i.clear() for i in sys.__dict__]
19:57:01 <bsmnt_bot> AttributeError: 'str' object has no attribute 'clear'
19:57:17 <SimonRC> ~exec [i.__dict__.clear() for i in sys.__dict__]
19:57:18 <bsmnt_bot> AttributeError: 'str' object has no attribute '__dict__'
19:57:31 <SimonRC> ~exec sys.__dict__.clear()
19:57:35 -!- bsmnt_bot has quit (Remote closed the connection).
19:57:38 -!- bsmnt_bot has joined.
19:57:50 <SimonRC> ~exec sys.__dict__.clear()
19:58:02 <SimonRC> hmm, didn't quit this time
19:58:09 -!- bsmnt_bot has quit (Remote closed the connection).
19:58:11 -!- bsmnt_bot has joined.
19:58:35 -!- goban has quit (Connection timed out).
19:58:42 -!- goban has joined.
19:59:02 <bsmntbombdood> there's a method, __getattr__, that gets called when a attribute on a object that's not there is looked up
19:59:32 <bsmntbombdood> if gettattr gets an attribute from it's self that isn't there, it recurses forever
20:00:00 <SimonRC> hmm http://www.angryfacts.com/
20:04:24 -!- crathman has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.2/2007021917]").
20:36:28 -!- ShadowHntr has joined.
21:07:17 -!- goban has quit (Read error: 104 (Connection reset by peer)).
21:07:43 -!- goban has joined.
21:17:53 -!- UpTheDownstair has changed nick to nazgjunk.
21:26:59 -!- goban has quit (Connection reset by peer).
21:27:02 -!- goban has joined.
21:45:07 -!- goban has quit (Remote closed the connection).
21:45:17 -!- goban has joined.
21:52:36 -!- ShadowHntr has quit (Client Quit).
21:52:37 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
22:03:27 -!- sebbu has joined.
22:07:56 -!- goban has quit (Connection reset by peer).
22:08:01 -!- goban has joined.
22:16:59 -!- goban has quit (Operation timed out).
22:22:22 -!- sebbu2 has quit (Connection timed out).
22:27:55 -!- goban has joined.
22:30:02 <bsmnt_bot> AttributeError: IRCbot instance has no attribute 'protected'
22:30:27 <bsmntbombdood> ~exec exec "def protected(f):\n try:\n return f()\n except:\n pass\nself.protected=protected"
23:01:56 -!- digital_me has joined.
23:02:05 <oklopol> ~exec print "I wanna play too :<"
23:05:02 <oklopol> ~exec sys.stdout("Does this work?")
23:05:23 <oklopol> ~exec sys.stdout([i+1 for i in range(3)])
23:05:39 <oklopol> ~exec sys.stdout((i for i in range 3))
23:05:52 <oklopol> ~exec sys.stdout((1,2,3,4))
23:07:57 <oklopol> ~exec sys.stdout(map((lambda a : a+"."),["a","b","c","d"]))
23:08:27 <oklopol> non-pure... non-imperative?
23:08:35 <oklopol> i'm a bit lost on terms from time to time
23:09:06 <bsmntbombdood> of course, side effects would have to be _required_ to be sufficiently esoteric
23:09:55 <oklopol> i've been thinking about this esolang where functions have every arithmetic operation defined
23:10:11 <oklopol> and somehow the programmer would be forced to use that feature of course
23:11:03 <oklopol> a lang where functions are _really_ first-class citizens
23:11:22 <oklopol> that is of course already done with math
23:12:44 <oerjan> instance Num a => Num (b -> a)
23:12:52 <oklopol> can you do arithmetic for functions in haskell by default?
23:13:10 <oerjan> nope, you need the instance i mentioned :)
23:14:32 <oklopol> but i wouldn't use the same basic arithmetic operations
23:14:56 <oklopol> so it wouldn't make sence like that
23:15:35 -!- sebbu2 has joined.
23:15:51 <oklopol> i find that the same thing you did with haskell
23:16:13 <oklopol> you think too functional, i've already shifted to stacks
23:16:25 <oklopol> much more esoteric when you shuffle stack operations
23:18:30 <oklopol> hmm, functions are a set of imperative commands that work on a stack, a function is executed, then used a "crazy" operation on, then executed again, repeated until in normal form
23:19:14 <oklopol> normal form might mean there is no function anymore
23:20:11 <oklopol> now there could be anyther stack, which is full of other functions that wait for their turn, functions can rely on themselves after the crazy operation or can call another function to be executed after they are in normal form or "dead"
23:20:58 <oklopol> the crazy operation in malbolge is boring since it seems so random, i think it should be more logical, but craziers
23:21:53 <oklopol> hmm... maybe i think about this at school tomorrow
23:22:28 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)).
23:22:41 <bsmnt_bot> NameError: name 'fooo' is not defined
23:23:02 -!- nazgjunk has joined.
23:23:25 <oklopol> ~exec foo="self.stdout(\"okokokoko\")"
23:23:33 <bsmnt_bot> NameError: name 'foo' is not defined
23:23:58 <oklopol> ~exec self.dict(foo)="self.stdout(\"okokokoko\")"
23:23:59 <bsmnt_bot> SyntaxError: can't assign to function call (<string>, line 1)
23:24:07 <oklopol> ~exec self.dict[foo]="self.stdout(\"okokokoko\")"
23:24:08 <bsmnt_bot> AttributeError: IRCbot instance has no attribute 'dict'
23:24:17 <oklopol> ~exec self.__dict__[foo]="self.stdout(\"okokokoko\")"
23:24:18 <bsmnt_bot> NameError: name 'foo' is not defined
23:24:24 <oklopol> ~exec self.__dict__["foo"]="self.stdout(\"okokokoko\")"
23:24:30 <bsmnt_bot> NameError: name 'foo' is not defined
23:24:40 <oklopol> ~exec exec(self.__dict__["foo"])
23:24:40 <bsmnt_bot> AttributeError: IRCbot instance has no attribute 'stdout'
23:24:59 <oklopol> ~exec self.__dict__["foo"]="sys.stdout(\"okokokoko\")"
23:25:04 <oklopol> ~exec exec(self.__dict__["foo"])
23:28:50 <oklopol> ~exec self.__dict__["oko"]=[]
23:29:00 <oklopol> ~exec sys.stdout(self.__dict__["oko"])
23:29:08 <oklopol> ~exec self.__dict__["oko"].append("sdfg")
23:29:09 <oklopol> ~exec sys.stdout(self.__dict__["oko"])
23:35:07 -!- sebbu has quit (Read error: 110 (Connection timed out)).
23:37:11 <oklopol> self.__dict__["B"].append("def brainfuck(code):")
23:37:11 <oklopol> self.__dict__["B"].append(" cntr=0")
23:37:11 <oklopol> self.__dict__["B"].append(" i=0")
23:37:11 <oklopol> self.__dict__["B"].append(" memi=0")
23:37:11 <oklopol> self.__dict__["B"].append(" mem=[]")
23:37:11 <oklopol> self.__dict__["B"].append(" for i in range(30000):")
23:37:13 <oklopol> self.__dict__["B"].append(" mem.append(0)")
23:37:15 <oklopol> self.__dict__["B"].append(" i=0")
23:37:35 <oklopol> ~exec self.__dict__["B"]=[]
23:38:29 <oklopol> ~exec self.__dict__["B"].append("def brainfuck(code):")
23:38:29 <oklopol> ~exec self.__dict__["B"].append(" cntr=0")
23:38:29 <oklopol> ~exec self.__dict__["B"].append(" i=0")
23:38:29 <oklopol> ~exec self.__dict__["B"].append(" memi=0")
23:38:29 <oklopol> ~exec self.__dict__["B"].append(" mem=[]")
23:38:30 <oklopol> ~exec self.__dict__["B"].append(" for i in range(30000):")
23:38:31 <oklopol> ~exec self.__dict__["B"].append(" mem.append(0)")
23:38:34 <oklopol> ~exec self.__dict__["B"].append(" i=0")
23:38:44 <oklopol> ~exec sys.stdout(self.__dict__["B"])
23:38:45 <bsmnt_bot> ['def brainfuck(code):', ' cntr=0', ' i=0', ' memi=0', ' mem=[]', ' for i in range(30000):', ' mem.append(0)', ' i=0']
23:39:07 <oklopol> ~exec self.__dict__["B"].append(" while i<len(code):")
23:39:07 <oklopol> ~exec self.__dict__["B"].append(" if code[i]==\'+\':")
23:39:07 <oklopol> ~exec self.__dict__["B"].append(" mem[memi]+=1")
23:39:07 <oklopol> ~exec self.__dict__["B"].append(" elif code[i]==\'-\':")
23:39:07 <oklopol> ~exec self.__dict__["B"].append(" mem[memi]-=1")
23:39:07 <oklopol> ~exec self.__dict__["B"].append(" elif code[i]==\'>\':")
23:39:09 <oklopol> ~exec self.__dict__["B"].append(" memi+=1")
23:39:11 <oklopol> ~exec self.__dict__["B"].append(" elif code[i]==\'<\':")
23:39:14 <oklopol> ~exec self.__dict__["B"].append(" memi-=1")
23:39:28 <oklopol> ~exec self.__dict__["B"].append(" elif code[i]==\'.\':")
23:39:28 <oklopol> ~exec self.__dict__["B"].append(" sys.stdout(chr(mem[memi]))")
23:39:28 <oklopol> ~exec self.__dict__["B"].append(" #elif code[i]==\',\':")
23:39:28 <oklopol> ~exec self.__dict__["B"].append(" #mem[memi]=input()")
23:39:28 <oklopol> ~exec self.__dict__["B"].append(" elif code[i]==\'[\':")
23:39:28 <oklopol> ~exec self.__dict__["B"].append(" if mem[memi]==0:")
23:39:31 <oklopol> ~exec self.__dict__["B"].append(" i+=1")
23:39:33 <oklopol> ~exec self.__dict__["B"].append(" opens=1")
23:39:35 <oklopol> ~exec sys.stdout(self.__dict__["B"])
23:39:36 <bsmnt_bot> ['def brainfuck(code):', ' cntr=0', ' i=0', ' memi=0', ' mem=[]', ' for i in range(30000):', ' mem.append(0)', ' i=0', ' while i<len(code):', " if code[i]=='+':", ' mem[memi]+=1', " elif code[i]=='-':", ' mem[memi]-=1', " elif code[i]=='>':", ' memi+=1', " elif code[i]=='<':", '
23:39:36 <bsmnt_bot> memi-=1', " elif code[i]=='.':", ' sys.stdout(chr(mem[memi]))', " #elif code[i]==',':", ' #mem[memi]=input()', " elif code[i]=='[':", ' if mem[memi]==0:', ' i+=1', ' opens=1']
23:39:48 <oklopol> ~exec self.__dict__["B"].append(" while opens!=0:")
23:39:48 <oklopol> ~exec self.__dict__["B"].append(" if code[i]==\'[\':")
23:39:48 <oklopol> ~exec self.__dict__["B"].append(" opens+=1")
23:39:48 <oklopol> ~exec self.__dict__["B"].append(" elif code[i]==\']\':")
23:40:06 <oklopol> soon either i get kickbanned or the bot dies...
23:40:11 <oklopol> ~exec self.__dict__["B"].append(" opens-=1")
23:40:11 <oklopol> ~exec self.__dict__["B"].append(" i+=1")
23:40:11 <oklopol> ~exec self.__dict__["B"].append(" i-=1")
23:40:11 <oklopol> ~exec self.__dict__["B"].append(" elif code[i]==\']\':")
23:40:11 <oklopol> ~exec self.__dict__["B"].append(" if mem[memi]!=0:")
23:40:12 <oklopol> ~exec self.__dict__["B"].append(" i-=1")
23:40:23 <oklopol> ~exec self.__dict__["B"].append(" opens=1")
23:40:23 <oklopol> ~exec aelf.__dict__["B"].append(" while opens!=0:")
23:40:23 <oklopol> ~exec self.__dict__["B"].append(" if code[i]==\'[\':")
23:40:23 <oklopol> ~exec self.__dict__["B"].append(" opens-=1")
23:40:23 <oklopol> ~exec self.__dict__["B"].append(" elif code[i]==\']\':")
23:40:24 <bsmnt_bot> NameError: name 'aelf' is not defined
23:40:24 <oklopol> ~exec self.__dict__["B"].append(" opens+=1")
23:40:27 <oklopol> ~exec self.__dict__["B"].append(" i-=1")
23:40:29 <oklopol> ~exec self.__dict__["B"].append(" i+=1")
23:40:30 <oklopol> ~exec self.__dict__["B"].append(" i+=1")
23:41:17 <oklopol> ~exec self.__dict__["B"] = reduce(lambda a,b : a+"\n"+b, self.__dict__["B"])
23:41:36 <oklopol> ~exec brainfuck("+++++++.")
23:41:36 <bsmnt_bot> NameError: name 'brainfuck' is not defined
23:42:05 <oklopol> can i dump B as a function somehow?
23:42:16 <oklopol> i don't really know how that works, just testing :P
23:42:18 <bsmntbombdood> ~exec exec "\n".join(self.B) + "self.brainfuck = brainfuck"
23:42:42 <oklopol> oh, yeah, that's a nice syntax
23:43:17 <oklopol> ~exec "\n".join(self.B) + "self.brainfuck = brainfuck"
23:43:31 <bsmnt_bot> NameError: name 'brainfuck' is not defined
23:44:01 <oklopol> bsmntbombdood, help me! :D
23:44:38 <oklopol> it's a function, how do i do that? :o
23:45:06 <oklopol> ~exec eval("brainfuck(+++.)")
23:45:16 <oklopol> ~exec exec("brainfuck(+++.)")
23:46:03 <oklopol> i just took a random thingie
23:47:05 <oklopol> ~exec exec(self.__dict__["B"])
23:47:18 <oklopol> ~exec eval(self.__dict__["B"])
23:47:37 <oklopol> might be a copy paste error
23:49:02 <bsmntbombdood> look in #bsmnt_bot_errors to see where the errors are
23:49:29 <oklopol> ~exec exec(self.__dict__["B"])
23:52:53 <oklopol> i might've found my problem, now that i actually looked at the spot in the code where the error was
23:54:14 -!- sebbu2 has quit (Client Quit).
23:54:52 -!- bsmnt_bot has quit (Excess Flood).
23:54:56 -!- bsmnt_bot has joined.
23:56:39 <oklopol> maybe i'll make a bit shorter an interpreter...