00:11:06 (Y (lambda (f) (cons 'bitch (f))) 00:12:07 -!- ShadowHntr has joined. 00:13:39 heh 00:14:03 that seems a bit too strict. You need lazy evaluation for any conses to actually happen. 00:14:30 let f = Bitch:f in f 00:15:05 or you could do it in reverse: 00:16:15 yeah 00:16:33 10:BITCH:GOTO 10 00:16:41 ((Y (lambda (f) (lambda (l) (f (cons 'bitch l))))) '()) 00:17:24 RUN 00:18:22 sequence_ $ repeat $ bitch 00:18:27 I don't think a Y combinator is even possible in scheme 00:18:57 yeah, that might need lazy evaluation too 00:19:31 ok then: 00:20:16 SII is simpler anyway 00:20:36 ((lambda (f l) (f f l)) (lambda (f l) (f f (cons 'bitch l))) '()) 00:21:10 ((lambda (x) (x x)) (lambda (f) (cons 'bitch (f f))))) 00:21:28 no, that won't work. 00:22:04 ? 00:22:15 without lazy evaluation, you cannot apply (f f) without another intervening lambda. 00:22:45 yeah you can 00:22:49 it just doesn't halt 00:22:58 it never bitches either 00:23:19 because it doesn't get to that part 00:23:34 yeah it does 00:23:54 ((lambda (f) (cons 'bitch (f f))) (lambda (f) (cons 'bitch (f f)))) 00:23:56 -!- tgwizard has quit (Remote closed the connection). 00:24:25 (cons 'bitch ((lambda (f) (cons 'bitch (f f))) (lambda (f) (cons 'bitch (f f))))) 00:24:30 and so on 00:24:32 ok it evaluates 'bitch, perhaps. but it never conses. 00:25:36 ((lambda (x) (x x)) (lambda (f) (bitch) (f f))) 00:25:45 that should satisfy all camps :) 00:26:31 it's even tail recursive 00:26:42 but not functional 00:28:11 I guess bitching does have side effects, though 00:28:17 you bet 00:28:31 in fact it has nothing _but_ side effects :) 00:30:35 ((lambda (x) (x x)) (lambda (f) (cons-stream 'bitch (f f))))) 00:32:26 bah, you got lazy and used a macro ;) 01:18:44 dummy variables are no fun 01:23:38 that's probably not the right word 01:24:25 fix (bitch>>) 01:24:57 what? 01:25:45 your comment made me think about how to remove all dummy variable names from that bitch recursion :) 01:26:38 on the downside, it requires an import Control.Monad.Fix 01:27:48 what kind of variables were you thinking of? 01:28:24 the x in \x.E 01:28:55 or \forall x.E 01:28:57 and so on 01:30:42 you mean unused variables? 01:31:40 in Haskell/ML, you use _ for those. 01:32:25 no, x can be used in E 01:33:08 so it's actually basic lambda calculus abstraction you don't like? :) 01:33:16 yeah 01:33:24 combinatory logic for the win! 01:33:50 there is also pointfree (pointless) style in Haskell 01:34:01 like my fix (bitch>>) above 01:34:57 and the whole Forth/Joy style of languages 01:36:00 ooh, I didn't think about a stack 02:34:06 interesting, disjunct types 02:50:08 -!- RodgerTheGreat has quit. 02:51:22 -!- RodgerTheGreat has joined. 03:34:51 -!- ShadowHntr has quit ("End of line."). 03:41:57 'night everyone 03:42:18 -!- RodgerTheGreat has quit. 03:51:24 -!- GreaseMonkey has joined. 04:08:31 -!- bsmntbombdood has quit (Read error: 54 (Connection reset by peer)). 04:21:36 -!- oerjan has quit ("Good night"). 04:43:21 -!- bsmntbombdood has joined. 04:46:35 -!- bsmnt_bot has joined. 04:48:02 what are the input symbols of a turing machine? 04:55:37 hmmm 04:56:00 I read that the halting problem is solvable on machines that have finite memory 04:57:06 so the number of steps needed before a repition occurs is known 04:57:11 -!- Arrogant has joined. 04:59:10 which means it is solvable on real computers 05:00:45 if it doesn't halt after 2**(number of bits in memory), it doesn't halt at all 05:01:30 2**(number of bits in memory) steps, that is 05:05:19 i reckon that turing machines should have more than one tape 05:20:36 bsmntbombdood: that would be true if "real computers" performed no IO of any kind. 05:21:58 -!- ShadowHntr has joined. 05:22:00 as it is, a simple +[,] stumps every oracle 05:34:48 lament: IO is included in the input 05:35:03 The halting function is given the program and its input 05:39:22 goodnight 05:51:10 gnight 05:51:29 sleep tight dood, even though there's bombs in your bsmnt 06:46:58 -!- NK` has quit (Read error: 54 (Connection reset by peer)). 06:50:19 -!- ShadowHntr has quit ("End of line."). 07:07:07 -!- Arrogant has quit (Read error: 104 (Connection reset by peer)). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:30:39 !bf-txtgen all your base aare belong to me! 08:30:42 Huh? 08:30:50 !help 08:30:52 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 08:30:54 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 08:31:38 for guitar players: http://users.adelphia.net/~cygnusx_1/equal_temperament.html 08:52:06 -!- nazgjunk has joined. 08:59:17 !ps 08:59:20 3 helios24: ps 09:03:41 !ps d 09:03:44 1 ais523: daemon ul bf 09:03:46 2 ais523: daemon deadfish funge93 09:03:48 3 GreaseMonkey: ps 09:04:02 !ul testing 09:04:11 !ul sfda 09:04:14 !ul 09:44:40 gtg, gnight 09:45:16 -!- GreaseMonkey has quit ("gnight"). 10:18:19 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 10:18:46 -!- nazgjunk has joined. 10:23:36 -!- jix__ has joined. 10:26:16 -!- UpTheDownstair has joined. 10:35:42 -!- UpTheDownstair has quit (Connection reset by peer). 10:38:37 -!- nazgjunk has quit (Read error: 110 (Connection timed out)). 10:53:14 -!- nazgjunk has joined. 11:04:42 -!- nazgjunk has quit ("Leaving"). 11:24:58 -!- jix__ has quit ("This computer has gone to sleep"). 11:26:35 -!- nazgjunk has joined. 11:27:58 -!- UpTheDownstair has joined. 11:31:56 -!- UpTheDownstair has quit (Read error: 54 (Connection reset by peer)). 11:32:56 -!- nazgjunk has quit (Connection reset by peer). 11:43:11 -!- nazgjunk has joined. 12:32:08 -!- UpTheDownstair has joined. 12:32:22 -!- UpTheDownstair has quit (Client Quit). 12:39:09 -!- nazgjunk has quit (Read error: 145 (Connection timed out)). 12:41:13 -!- nazgjunk has joined. 13:02:52 -!- oerjan has joined. 13:17:30 -!- jix__ has joined. 13:55:46 -!- jix__ has quit ("This computer has gone to sleep"). 14:08:58 -!- helios24 has quit (Read error: 60 (Operation timed out)). 14:09:14 -!- fizzie has quit (Read error: 60 (Operation timed out)). 14:11:33 -!- helios24 has joined. 14:13:30 -!- fizzie has joined. 14:41:09 -!- ais523 has joined. 14:41:36 ~bf ,[.,]!Is this still working? 14:42:49 ~exec self.bf3="def bfarg(x,y):\n p=y.group(2)\n a=y.group(3)+unichr(0)\n o=?\n p=p+'!'\n t=[0]*30000\n i=0\n l=0\n while p[i]!='!':\n if p[i]=='[' and t[l]==0:\n c=1\n while c>0:\n i=i+1\n if p[i]=='[': c=c+1\n if p[i]==']': c=c-1\n if p[i]==']' and t[l]!=0:\n c=1\n while c>0:\n i=i-1\n if p[i]==']': c=c+1\n if p[i]=='[': c=c-1\n" 14:43:03 ~exec self.bf4=" if p[i]=='+': t[l]=t[l]+1\n if p[i]=='-': t[l]=t[l]-1\n if p[i]=='<': l=l-1\n if p[i]=='>': l=l+1\n if p[i]=='.': o=o+unichr(t[l])\n if p[i]==',':\n t[l]=ord(a[0])\n a=a[1:]\n i=i+1\nsys.stdout(o)\nself. register_raw(r'\S+ PRIVMSG (\S+) :~bf ([^!]*)!?(.*)',bfarg)" 14:43:06 bsmnt_bot needs a better persistence system. 14:43:10 ~exec exec(self.bf3+self.bf4) 14:43:11 SyntaxError: invalid syntax 14:43:13 o.O 14:43:41 damn, something must have gone wrong with my copy-paste 14:43:49 * oerjan gives up on SWI-prolog 14:43:56 you program in Prolog? 14:44:02 i wanted to try 14:44:13 I've written a few simple Prolog programs somewhere 14:44:20 never got to run them though, I don't have an interpreter 14:45:13 ~exec self.bf3="def bfarg(x,y):\n p=y.group(2)\n a=y.group(3)+unichr(0)\n o=''\n p=p+'!'\n t=[0]*30000\n i=0\n l=0\n while p[i]!='!':\n if p[i]=='[' and t[l]==0:\n c=1\n while c>0:\n i=i+1\n if p[i]=='[': c=c+1\n if p[i]==']': c=c-1\n if p[i]==']' and t[l]!=0:\n c=1\n while c>0:\n i=i-1\n if p[i]==']': c=c+1\n if p[i]=='[': c=c-1\n" 14:45:14 06:45:54 ~exec self.bf4=" if p[i]=='+': t[l]=t[l]+1\n if p[i]=='-': t[l]=t[l]-1\n if p[i]=='<': l=l-1\n if p[i]=='>': l=l+1\n if p[i]=='.': o=o+unichr(t[l])\n if p[i]==',':\n t[l]=ord(a[0])\n a=a[1:]\n i=i+1\n sys.stdout(o)\nself.register_raw(r'\S+ PRIVMSG (\S+) :~bf ([^!]*)!?(.*)',bfarg)" 14:45:23 umm... 14:45:40 ~exec self.bf3="def bfarg(x,y):\n p=y.group(2)\n a=y.group(3)+unichr(0)\n o=''\n p=p+'!'\n t=[0]*30000\n i=0\n l=0\n while p[i]!='!':\n if p[i]=='[' and t[l]==0:\n c=1\n while c>0:\n i=i+1\n if p[i]=='[': c=c+1\n if p[i]==']': c=c-1\n if p[i]==']' and t[l]!=0:\n c=1\n while c>0:\n i=i-1\n if p[i]==']': c=c+1\n if p[i]=='[': c=c-1\n" 14:45:51 ~exec self.bf4=" if p[i]=='+': t[l]=t[l]+1\n if p[i]=='-': t[l]=t[l]-1\n if p[i]=='<': l=l-1\n if p[i]=='>': l=l+1\n if p[i]=='.': o=o+unichr(t[l])\n if p[i]==',':\n t[l]=ord(a[0])\n a=a[1:]\n i=i+1\n sys.stdout(o)\nself.register_raw(r'\S+ PRIVMSG (\S+) :~bf ([^!]*)!?(.*)',bfarg)" 14:45:57 ~exec exec(self.bf3+self.bf4) 14:46:10 ~bf ,[.,]!Hopefully this works now. 14:46:10 Hopefully this works now. 14:46:12 i thought SWI prolog should be so simple. But i have now spend more time than i want to try and make it work properly with gvim as external editor. 14:46:19 *spent 14:46:42 is it the language that's the problem, or the development environment 14:46:48 s/$/?/ 14:47:29 the environment. i end up being infuriated by a bug, and then even more because their bug tracking system wants me to log in and _they_ select my password. 14:48:00 I tried to write my own Prolog interpreter once, but that was when all my programs were in VBA for Excel 14:48:03 naturally, I failed 14:48:25 nowadays I mostly use C, unless I'm using an esolang (often a better choice!) or am forced to use Java 14:48:31 well it is possible in theory :) 14:49:27 !ul (Is this still working too?)S 14:49:28 Is this still working too? 14:49:50 EgoBot does have some useful persistence. 14:50:15 the thing that's surprising me is that the daemon hasn't crashed yet, considering it's written in BF and has no error checking 14:50:27 and that people keep insisting on feeding it illegal programs 14:50:56 the persistence of the deadfish daemon is less surprising 14:53:21 !daemon bct bf http://www.bf-hacks.org/hacks/bct.b 14:54:09 !bct 111001010011110 14:54:13 !bct 1110111 14:54:23 1110111 14:54:48 !kill 3 14:55:16 uh oh, maybe I shuldn't feed it programs without checking what they do first 14:55:18 !pd 14:55:20 !ps 14:55:38 3 ais523: ps 14:55:46 !ps d 14:55:50 1 ais523: daemon ul bf 14:55:52 2 ais523: daemon deadfish funge93 14:55:53 it would be nice if bsmntbombdood would make at least one directory writable. Then we could place nice scripts there. 14:55:54 3 ais523: ps 14:56:18 the process must have ended naturally before I could kill it 14:56:34 but yes, oerjan, I agree that a persistent-daemon directory would be nice 14:56:43 so we could store interpreters in it 14:57:33 I've found myself rather wanting a Thutu interpreter here so I could write esolangs in it. BCT is easy: 14:58:31 /^0.*?!./$1/ 14:58:51 ~exec list_dir("/") 14:58:52 NameError: name 'list_dir' is not defined 15:00:42 no, BCT is less easy through an IRC client when you can't think sensibly about what you're doing 15:01:44 hey, self-modifying BCT looks interesting 15:02:27 0 deletes at the left, 1x inserts at the right, and the instruction pointer cycles along the program 15:02:35 ~exec sys.stdout(os.listdir("/")) 15:02:35 ['bin', 'bot', 'etc', 'lib', 'usr'] 15:02:46 ~exec sys.stdout(os.listdir("/bot")) 15:02:46 ['betterbot.py', 'test.pickle', 'foo.py~', 'ski_repl.py', 'foo.py', 'ircbot.py~', 'start.sh', 'better.sh', 'ircbot.py'] 15:03:31 ~exec sys.stdout(os.listdir("/lib")) 15:03:31 ['libm.so.6', 'libreadline.so.5', 'libacl.so.1', 'libdl-2.4.so', 'libresolv.so.2', 'libutil.so.1', 'libncurses.so.5', 'libattr.so.1', 'libcrypt.so.1', 'ld-linux.so.2', 'libdl.so.2', 'libpthread.so.0', 'libpam_misc.so.0', 'libpam.so.0', 'libc.so.6', 'librt.so.1'] 15:04:46 might be too simple to be turing complete 15:05:04 it's not obviously not TC 15:05:25 let's see. Any 00 will force synchronization 15:06:45 wait, exactly how do you mean 15:06:59 there's a description on the page linked from the wiki 15:07:27 the instruction pointer takes the command after the current one, looping back to the start when it reaches the end 15:07:44 and the commands operate on the program itself. Apart from that, it's just BCT 15:08:12 (The 'start' is the first non-deleted command. So the logic of self-modifying BCT is more like Muriel than a tag system.) 15:08:18 -!- UpTheDownstair has joined. 15:08:51 The problem seems to be that the number of 0s has to be kept quite low, or they'll end up demolishing the program 15:08:58 but obviously you can't have nothing but 1s 15:10:34 So essentially you have a cycle with two pointers in it, one data and one instruction 15:11:30 that's it. And they both increase and cycle through. Wow, it's like a cross between tag systems, Muriel, and Malbolge 15:11:44 (more like Dis, actually, as there isn't encryption confusing the issue too) 15:11:56 the example seems buggy from step 4 to 5 15:12:07 -!- UpTheDownstair has quit (Read error: 104 (Connection reset by peer)). 15:12:36 I agree, there should be an extra 1 at the end 15:13:14 hm, what happens if the modified data is inside the current instruction? 15:13:15 -!- UpTheDownstair has joined. 15:13:51 I'm not sure if that can happen. A 0 can delete itself, but then you just go onto the next instruction, and a command can't add inside itself 15:14:25 why not? There could be 0...*1 15:14:30 I just noticed that 15:14:50 in that case, presumably you go on to the command after the 0 at the start, with an extra 0 at the end 15:15:33 and then what about 0...*0 15:15:52 ok it's obvious what it should do 15:17:07 there is a problem with the obvious linked list implementation though 15:17:59 if you are not careful, you will end up with the instruction pointer at a deleted node. 15:18:26 no matter which order you choose for the operations 15:18:26 I'm writing it in Thutu at the moment, which has problems of its own 15:18:44 (Unfortunately, Thutu is 'the obvious implementation' for just about everything for me at the moment) 15:26:09 -!- nazgjunk has quit (Read error: 110 (Connection timed out)). 15:43:45 hm, another subtlety: 15:44:21 with ...1x, does execution continue before or after the added x? 15:44:42 I've just written an interpreter, so I'll check 15:45:09 before the way I've written it 15:45:33 http://pastebin.ca/raw/397461 15:48:59 from my experiments so far, it seems that if the program contains any 0s the density of 0s increases until they end up swamping the program 15:54:50 If 1s and 0s are distributed randomly, with a proportion p of 0s, then there's a chance p(1-p) of deleting a 1, a chance p^2 of deleting a 0, a chance (1-p)^2 of adding a 1, a chance p(1-p) of adding a 0 15:55:54 -!- RodgerTheGreat has joined. 15:56:08 howdy, everybody 15:56:22 from that description one would expect the proportion to stay constant. 15:56:25 hello, RogerTheGreat! We were discussing self-modifying Bitwise Cyclic Tag 15:56:37 I know, there's something slightly stranger going on 15:56:39 ooh, neat! 15:56:53 glad I showed up, then 15:57:43 starting with 1111111110, the number of 0s grows gradually, with the 0s getting clumpier and clumpier, until the whole thing collapses 15:59:19 aha! Consider the number of 1s between consecutive 0s 15:59:40 if it's odd, then it adds a string half that length to the end of the input 15:59:54 if it's even, it ends up combining with the next string 16:00:21 so if there's even one odd string, all the strings before it in the program will combine to it 16:00:58 no, wait; my argument doesn't work due to the 0s changing the length of the initial string 16:01:25 but the point is that newly-generated strings of 1s tend to be shorter than the strings of 1s that generated them 16:01:45 so the 1s-in-a-row count tends to decrease, which is what causes the programs to tend to terminate 16:02:39 does this imply that a bitwise cyclic tag system must halt? 16:02:59 no, BCT is turing-complete. It's self-modifying BCT that I was talking about 16:03:05 ah 16:03:07 nvm 16:05:31 * RodgerTheGreat rifles through the logs 16:09:33 -!- nazgjunk has joined. 16:09:48 hm... 16:09:59 -!- UpTheDownstair has quit (Read error: 104 (Connection reset by peer)). 16:14:47 alright, I think I have a better handle on the topic now 16:15:10 hm... I wonder what I should write an implementation in? 16:21:18 standard BCT could probably be expressed very concisely in BASIC using strings, with the minor caveat that most BASIC interpreters have arbitrary string length limitations 16:21:32 it's hard to dynamically allocate storage in BASIC. <:| 16:22:21 there was a pragma in the version of BASIC I used that allowed for dynamic arrays, and it had a REDIM command to resize them 16:24:41 neat- what was the implementation called? 16:24:57 QBASIC, if I remember. It was bundled with some versions of DOS 16:25:08 ah, yes- QBASIC 16:25:17 Perl should be fairly compact, even more so if you write it directly rather than compile to it ;) 16:25:36 I've used it quite a bit, although I was never aware of REDIM 16:25:46 oerjan: more readable too without the compilation, and also more efficient 16:26:04 I'd say my favorite BASIC implementations are DarkBASIC and Cbaspad for PalmOS 16:27:36 what, not BFBASIC? 16:28:40 -!- nazgjunk has quit (Success). 16:29:11 Calamari's opus is truly an achievement, but it isn't particularly handy when I find myself without a Java runtime environment 16:30:37 and believe me, Cbaspad is an esoteric language in it's own right. It's the only BASIC interpreter I've found for palmOS that offers peek() poke and call(), making inline ASM possible 16:30:59 not to mention a number of additional low-level hardware access and I/O functions 16:31:40 that was possible in QBASIC too IIRC. It had a CALL ABSOLUTE that would jump to a particular location in memory, and you could find where in memory a variable was stored 16:32:52 yes, it's a standard feature on most BASIC implementations from the '80s and earlier 16:33:35 -!- nazgjunk has joined. 16:34:35 hi, nazgjunk 16:34:44 -!- jix__ has joined. 16:36:35 -!- jix__ has changed nick to jix. 16:38:01 -!- UpTheDownstair has joined. 16:40:17 hello jix, UpTheDownstair 16:40:30 hello RodgerTheGreat 16:41:08 ~bf ,[.,]!Hello everyone 16:41:08 Hello everyone 16:41:52 heh 16:46:08 -!- nazgjunk has quit (Connection reset by peer). 16:52:12 -!- UpTheDownstair has quit (Connection reset by peer). 16:57:49 -!- nazgjunk has joined. 16:58:27 -!- ShadowHntr has joined. 17:00:19 * ais523 has just written a Dupdog interpreter 17:01:10 http://pastebin.ca/raw/397555 17:01:39 I don't have any Dupdog programs to test it on, though 17:06:04 wow. I can see the essential features necessary for computation, but that would be tricky as hell to program with. 17:06:35 I can't even figure out "Hello, world!". 17:06:45 -!- oerjan has quit ("My brain is toast"). 17:06:46 unfortunately, I don't see any way to do input, so I don't think cat is possible either. :S 17:07:38 ~ and ! provide a facility for looping, and Mfit's ? seems to allow for branching 17:08:02 ...in an extremely painful and weird way 17:08:49 no, it doesn't, so the language can't be TC. The problem is that the only way to increase the program's length is by doubling it, so a nonterminating program is always odd for Mfit and even for Shanty 17:09:03 no, I'm wrong: Mfit can double it too 17:09:15 it would be a lot easier if instructions for each interpreter could act as NOPs for the other... 17:09:34 ...or if there were any NOPs at all 17:09:53 as it stands, it seems like it'd be very difficult to manipulate program length enough to generate useful output 17:10:25 hm 17:10:47 is the program length mod 255ed before it's converted to ASCII? 17:10:56 (when you're doing output) 17:11:00 if the program length is odd for Mfit, then ??...?? is a NOP 17:11:10 RogerTheGreat: I don't know. It isn't with my interpreter 17:11:27 (I just pass the length to chr() and see what happens.) 17:11:35 You get something like this: 17:11:35 hm 17:11:53 ~bf +++++++++++++++++[->+++++++++++++++++<]>. 17:11:54 -!- bsmnt_bot has quit (Remote closed the connection). 17:12:30 wait, why did the bot just crash when I did that? Outputting 17*17 can't be that hard, surely? 17:12:46 :/ 17:12:46 it might be easier to grow the program to fit into a character you needed by modding than to reduce it *and* increase it to generate strings 17:13:12 would get round the problem of output being impossible in sufficiently complex programs too 17:13:30 although, if we have a NOP, we can arbitrarily shorten the program whenever we want to 17:13:49 perhaps both of these techniques can be combined to achieve output 17:14:20 A sufficiently complex program needs a sufficiently large number of characters to represent it 17:14:25 yes 17:14:46 and so can't do output except right at the end, and even then only a limited amount of output 17:14:46 I get what you meant about output in complex programs 17:15:03 so the language isn't BF-complete or even Underload-complete, at least 17:15:19 but it might still be Turing-complete, because that doesn't depend on I/O 17:15:34 thus, I would suspect that modding of program length is the intent 17:15:53 hm... wait.. 17:15:59 "...Because dupdog is only capable of storing a single value (the source code itself) in memory at a time, which may correspond to a finite set of 256 states..." 17:16:14 that implies that a program must have <= 255 characters. 17:16:17 bollocks 17:16:30 I think that line at the bottom is probably wrong 17:16:49 yeah 17:17:01 let's deal without the arbitrary limit, and argue that as ASCII is a 7-bit code, it repeats every 128 characters. Then at least we might be able to get somewhere 17:17:13 ok 17:18:08 * ais523 updates their interpreter accordingly 17:18:08 and if we allow for modding, the program length can be any number- an infinite state automaton. I'm fairly certain that one-register turing machines exist, so turing completeness *may* be possible 17:21:11 alright, so we know that we can halt at any time by having a character other than ! or ? at an odd space in the initial source code. 17:21:12 updated interpreter: http://pastebin.ca/raw/397577 17:21:26 yes, we even get a nice error number as output 17:21:50 I think it's acceptable to generate some junk output as a consequence of halting 17:22:12 it's probably easier than making a program that ends by eating itself completely 17:22:38 I don't even think that's possible without generating more output 17:22:39 in theory the program could be reversed, and maybe a bit of duplication, so a non-command character won't necessarily halt wherever you put it 17:22:58 ???????? ends without output 17:23:04 (it's two nested NOPs) 17:23:11 oh- I see 17:23:22 I was forgetting the consequences of reversing the source... 17:23:41 and ~ might not end, because it might not be a ~ by the time you reach it 17:24:29 I get the sense that this will probably require a bit of malbolge-esque code buffering to ensure commands do what you expect them to 17:26:22 unfortunately, 128 is divisible by 4, so some duplication's needed to print characters with both odd and even ASCII codes 17:26:26 s/4/2/ 17:27:08 wrapping a code-reverse in an Mfit ? seems like a way to do some primitive branching, but it's necessary to make sure that you don't leave any ~'s for Shanty to encounter... 17:27:21 at least, no time soon 17:27:31 I guess that would allow for a conditional halt, at least 17:28:00 One of the more fundamental parts of the program state is whether Mfit or Shanty is seeing the even-length programs 17:28:28 In fact, it sort of seems more sensible to consider two-character commands than one-character commands 17:28:36 hm 17:29:11 we can look at it this way- the two ways we can manipulate the program size, "s" are to subtract one or to multiply s by two 17:29:22 yep 17:29:37 every time we muliply s by two, we are assured it is even 17:29:57 if the program is even for mfit, it will be odd for shanty 17:30:04 and vice versa 17:30:05 Yes. To think about it another way, the program+interpreter parity stays the same unless the odd-length interpreter duplicates 17:30:16 yes 17:30:58 although, I was wrong- we can only either do s-1 or (s*2)-1 17:30:58 Another point: we have to duplicate or reverse the program _every time_ Shanty executes, which is every other command 17:31:29 thus, we always have an *odd* after a duplicate 17:31:31 no, ~abc changes to abcabc (see the wiki Talk page) 17:31:32 true 17:31:44 oh 17:31:47 hm 17:33:07 It's going to be easiest if we just let duplication roam free up to infinity. After all, it doesn't change either end of the program unless the program is very short; it only changes the length 17:33:36 true 17:34:21 if we use both "ends" of the program to store our useful code, they will be preserved through duplication. 17:34:39 I agree that the ends are what matters 17:34:59 so, we can use them as two "branches" that we'll probably need to interleave code between, using reverses as a compact way to NOP 17:35:29 reverse and duplicate are both NOPs in a way 17:35:37 they just have different effects on the program length 17:36:08 (Now I'm beginning to see why the language might not be TC; data storage is going to have to be /very/ non-localised) 17:36:49 -!- tgwizard has joined. 17:37:59 if we design a program that doesn't fit evenly into 128 or 255, it should be a relatively simple matter of duplicating a specific number of times to get to each desired character, followed by an Mfit non-coding character 17:38:09 I think this will be huge 17:38:31 the problem of data being dependent on final program length is a tough one 17:38:44 yep. The parity isn't trivial to deal with, but it's workable-around 17:39:21 *or* we can just assume it's bigger than we need it to be and pad the center with a bunch of noncoding characters to make it the right sie 17:39:24 *size 17:40:07 an optimal solution is hard, but an extremely nonoptimal one is much easier 17:40:49 since there doesn't seem to be a lot of sourcecode handy, doing it at all seems like enough of an accomplishment 17:40:56 -!- jix has quit ("This computer has gone to sleep"). 17:42:57 so... what's an easy way to find the number of duplications we'll need to get each modulus value? 17:43:14 brute-forcing it? 17:43:28 I guess that works 17:43:46 come to think of it, it's easiest just to get a bit higher than needed and NOP your way down 17:44:07 that's effectively what I'm saying 17:44:32 there are two kinds of NOPs- nops the interpreters skip over and nops that are never encountered at all 17:44:50 we can use anything as that second kind, and keep them in the creamy nougat center of our program 17:45:54 even better, adding 128 junk characters to the middle of the program has no visible effect on anything, until we reach them 17:46:18 use mfit's duplicate to make duplicates and either reverse (code continues from the opposite end, nop) or duplicate with shanty 17:46:31 then do an mfit output when appropriate 17:46:42 you need the right interpreter to cause a duplicate according to whether the output character is odd or even 17:46:58 so the hello world will look like "codecodecodeJUNKJUNKedocedocedoc" 17:47:07 If you're not doing loops, it's actually not too hard to output arbitrary text, just generate the program from the outside in 17:47:16 exactly 17:47:23 that's how I'm thinking 17:47:37 and all you need to code is the transition from one character to the next 17:47:59 and at the end, we can encounter the junk as shanty to terminate 17:48:03 yep 17:48:38 In fact, ~!~!~!~ multiplies the source length by 128, so if we don't care about being optimal we can just generate code for each character. 17:49:01 We can even use Mfit's ? as a NOP whether the program length is odd or even; just take it into account in all future code 17:49:33 OTOH, a 99 bottles of beer program shorter than the song itself would be difficult and/or impossible 17:49:41 so we just need to estimate an upper limit to the number of instructions we need to use for initial program length purposes, determine the actual number of flips and dups, generate the code and add padding as necessary 17:49:48 I agree 17:50:22 largely because storing strings seperately from counter data is effectively impossible 17:50:36 unless you get unhealthily creative 17:50:52 I'd go further and say storing counter data is incredibly difficult regardless of whether you have strings or not 17:50:58 3.141592653589793238462643383279......... 17:50:59 like storing it implicitly in the nesting of duplicates of something equally painful 17:51:10 ais523: haha- true 17:51:58 The problem is that we only have effectively 6 states to play with: reversed or not * three possible permulations of ?!~ 17:52:30 I think ultimately your idea of Mfit ? NOPs could lead to a more compact solution, but would drastically increase the complexity of the program 17:52:52 the problem is that duplicating, reversing, and permuting are all independent of each other 17:53:07 hm 17:53:17 so the only way you can store data in the program is the /amount of the program/ that was still there last time you duplicated 17:54:26 oh, jesus- I hadn't thought of that. This makes determining the number of flips and dups to arrive at a value is entirely dependent on the sequence of instructions that came before... 17:54:57 you'd have to build it an instruction at a time to get working right, I think. 17:55:21 precalculating wouldn't get you very far 17:55:54 no. But I think I know how I can write a Hello World-program-generating-program now 17:55:59 It might be best to write a program to generate this program, to reduce the potential for error 17:56:08 (i.e. a program in another language that generates Hello World in Dupdog) 17:56:13 lol- we both arrived at the same conclusion. 17:56:32 I think we're operating on the same wavelength here 17:56:59 -!- ShadowHntr has quit ("End of line."). 17:58:19 * ais523 sets out to try to write the program 18:03:48 * RodgerTheGreat cheers ais523 on! 18:04:08 there's nothing like the thrill of groundbreaking esolang coding 18:04:25 thanks 18:07:55 -!- sebbu has joined. 18:08:01 hi, sebbu 18:08:34 hi 18:09:34 ais523 and I have been figuring out how to do something vaguely useful in dupdog (http://www.esolangs.org/wiki/Dupdog) 18:10:15 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 18:10:22 we have a rough method that should create the first hello world in the language 18:16:45 -!- nazgjunk has joined. 18:38:59 grr, it isn't working at the moment 18:40:59 well, it's a pretty non-trivial task 18:41:27 and I have a theory that the resulting program is going to be fucking *huge* 18:41:52 you have to work from the inside and outside simultaneously 18:42:28 and getting the right value means hopping around a lot- rather like doing hello world in BF without - 18:42:35 only much worse, naturally 18:45:05 average case, I estimate it should take something around 128 instructions to get a value from 0-255 as output. The number of hops could be much greater if your program doesn't try to get an optimal solution 18:46:18 and all the interdependencies for size make things really tricky 18:50:29 Do you think that genetic algorithms might be a good approach for this sort of thing? It worked for malbolge 18:50:50 no idea. I think that working it out deterministically will probably work better, though 18:51:59 I was just thinking that since we have a rough idea of how we want the program to "look", we could start the GA software with something pretty close to a correct answer, meaning reasonably rapid results 18:52:15 I'll give up for the time being; I just realised why the method I was using wouldn't work. I still think it's possible to do it deterministically, though 18:52:29 doing things deterministically will probably reap more benefits in terms of future work with the language 18:52:42 what was the problem you were encountering? 18:53:07 The problem's that you want to end up with a program to print 'ello, World!' after printing the H 18:53:31 but that you can't design the program to do that until you know what the H code is like, as it'll have to have a specific structure 18:53:52 and you can't design the H code until you know what code you're aiming for... 18:54:36 wait, most Dupdog programs don't care if they're duplicated, as long as they end up with the right length 18:57:18 that is correct- perhaps design each character's code segment to reset the code size to a multiple of some predictable value? 18:57:31 how do you do output 18:57:31 it adds more padding, but then you can build pieces independently 18:57:34 that's it, ~!~!~!~ resets the code size to a multiple of 128 18:57:46 lament: output's done when Mfit encounters an unrecognized character 18:57:57 it outputs a character depending on the length of the program 18:58:01 lament: the esolang page is here: http://www.esolangs.org/wiki/Dupdog 18:58:19 oh, okay 18:59:26 looks interesting 18:59:36 we chose to interpret the spec as saying that we take the program length modulo 128/256 to determine the printed char, so all we care about is that modulus 18:59:57 thus, you can have a program of any size and still be capable of output 19:01:02 it's in the Implemented category 19:01:24 is there a ref. implementation? 19:01:31 I wrote an implementation just now; however, the category was there before I wrote it. 19:01:55 Of course, we'll need a new optimizing implementation to have any chance of fitting Hello, World! into memory the way I plan to write it 19:02:56 and if our interpretation of the spec leads to the first "useful" program, I imagine it will become canonical for exactly that reason 19:03:27 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)). 19:04:49 -!- nazgjunk has joined. 19:04:49 damn, my latest idea doesn't work either; ~!~!~!~ resets the code size to something that isn't a multiple of 128 because those characters are disappearing all the time 19:05:17 damn 19:05:31 it does have a fixed value modulo 128, though 19:06:02 well, any reset value works as long as it's the same modulo 128 every time 19:06:29 If we only want to print characters with odd ASCII codes, we can just write a really long sequence of ??...?? NOPS and change appropriate characters to output characters 19:07:36 something similar can be done with even ASCII codes 19:08:15 Actually... the best way to think about a half-finished Dupdog program is as a sequence of commands at the start, commands at the end, and a /length/ for the whole thing 19:08:22 then it might be possible to do it outside-in 19:08:43 the specification is pretty bad 19:09:06 it's not clear whether the current command is counted as part of the source 19:09:15 lament: a few things are vague, but it's understandable. The talk page helps 19:09:26 no for duplicate/reverse, yes for length measurement, as far as I can tell 19:13:12 lament: we're pretty sure the "computational class" description is incorrect, although we're not certain it's turing-complete 19:13:46 we haven't really proven anything yet with regards to arbitrary branching (or an analogue), and data storage is a bitch 19:25:22 (was he on crack when he came up with this?) 19:25:39 quite possibly 19:26:00 If I remember correctly, they were messing around with the bots. 19:26:06 Someone did something like this: 19:26:08 I would be fascinated to know the meaning of "mfit" and "shanty" 19:26:31 !daemon dog bf >,[>,]<[.<] 19:26:59 !daemon dup bf >,[>,]<[<]>[.>]<[<]>[.>] 19:27:05 !dog Hello, world! 19:27:17 !eof dog 19:27:19 ah- that makes sense 19:27:33 'cept my coding hasn't worked 19:27:34 !ps d 19:27:36 still doesn't explain the names completely 19:27:41 1 ais523: daemon ul bf 19:27:41 2 ais523: daemon deadfish funge93 19:27:41 3 ais523: daemon dog bf 19:27:43 4 ais523: daemon dup bf 19:27:45 5 ais523: ps 19:27:48 !kill 3 19:27:49 Process 3 killed. 19:27:50 !kill 4 19:27:53 Process 4 killed. 19:28:03 EgoBot is 10=newline, isn't it? 19:28:26 so after the source code is duplicated, for the next instruction the length of source code is always EVEN? 19:28:36 lament: yes 19:28:39 yeah 19:28:42 okay. 19:29:02 it might be worthwhile to skim the logs from earlier today 19:29:13 !daemon dog bf +[->,----------[>,-----------]<[+++++++++++.[-]<]+] 19:29:21 !dog Hello, world! 19:29:42 !kill 3 19:29:43 Process 3 killed. 19:29:50 !daemon dog bf +[->,----------[>,-----------]<[+++++++++++.[-]<]++++++++++.[-]+] 19:29:55 !dog Hello, world! 19:30:12 Now what have I done wrong? 19:30:26 !kill 3 19:30:29 Process 3 killed. 19:31:16 bsmntbombdood: bsmnt_bot didn't come back online after last time I tried to give it a BF program 19:31:25 (and it wasn't even an infinite loop) 19:38:57 !daemon dog befunge 0>~# :# 5# 5# +# -# _> .# _,$ 19:38:59 Huh? 19:39:06 !help 19:39:09 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 19:39:12 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 19:39:19 !daemon dog funge93 0>~# :# 5# 5# +# -# _> .# _,$ 19:39:20 all i can see so far is that dupdog really likes printing the fourth character. 19:39:35 !dog Hello, world! 19:39:49 !undaemon dog 19:39:51 10 100 114 119 44 108 101 0 19:39:53 Process 3 killed. 19:40:06 o_O 19:40:20 !daemon dog funge93 0>~# :# 5# 5# +# -# _> ,# _,$ 19:40:32 !dog Hello, world! 19:40:41 !dog Try another line 19:40:43 drw,le 19:41:00 !dog WTF? 19:41:04 nlrhoayT 19:41:20 !undaemon dog 19:41:21 FW 19:41:23 Process 3 killed. 19:41:48 !daemon dog funge93 0>~# :# 5# 5# +# -# _$> :# ,# _,$55+, 19:41:54 !dog Hello, world! 19:41:57 !dlrow ,olleH 19:42:49 !dog .won gnikrow eb ot smees tI 19:42:51 It seems to be working now. 19:43:01 haha 19:43:17 One-line Befunge has a logic very like REVERSE. 19:44:13 except that in Befunge, loops always return true to the left, and in REVERSE it depends on the direction you're going in. 19:47:49 stupid mfit 19:49:10 lament: you said it 19:49:35 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)). 19:50:00 -!- nazgjunk has joined. 19:50:05 it seems like just using mfit to do duplications and relying on shanty to make up most of your code logic is a more predictable way to code 19:50:31 but mfit's replacement command is pretty necessary... 19:50:46 then we'll need a new interpreter that can handle the colossally large progam that will result 19:51:06 yeah 19:51:14 Maybe one that stores the program compressed? (It's going to consist of lots of repeated stuff.) 19:51:28 like RLE? 19:52:06 not exactly, because we need to store near-repetitions and repetitions of groups of more than one character 19:52:20 ah 19:52:21 It would probably also need a way to store nested repetitions 19:52:38 some kind of "duplication stack"? 19:53:03 You could store it as a stack of pointers into the original program and into itself 19:59:52 -!- ais523 has quit ("Sorry I couldn't get that Dupdog Hello, World! to work"). 20:00:04 cya... 20:29:07 -!- sebbu2 has joined. 20:35:35 http://i15.photobucket.com/albums/a379/GregorRichards/lcarssshot.png 20:40:31 nice desktop theme, GregorR 20:41:01 ^^ 20:41:06 It's awesome for a tablet PC :) 20:41:12 sweet 20:41:21 I am in envy of your tabletPC 20:41:38 The new tablet PC I'm getting in a week or so allows you to use your finger for input instead of just the pen. 20:41:52 I've wanted one for quite a while, but I keep hoping that apple will make one 20:41:54 And even though LCARS isn't real, it's definitely very finger-clickable ;) 20:44:06 this may be the next best thing, though: http://axiotron.com/ 20:44:36 ... no keyboard? 20:44:57 nah 20:45:30 but OSX has built in keyboard emulation and pretty spiffy handwriting recognition, so no huge biggie 20:46:05 I wouldn't give up the keyboard ... programming with handwriting recognition and/or onscreen keyboard == basically impossible. 20:46:10 I probably wouldn't use one of these for writing school papers or coding anyway- I'd be too busy doodling 20:46:17 Ah :P 20:46:26 See, I have a tablet PC as my general-purpose laptop. 20:46:33 So I can't sacrifice the keyboard. 20:46:33 typing is what my laptop is for 20:46:38 heh 20:47:14 well, I'll bet when Apple finally gets off their asses and makes a proper tablet they'll have a good solution to the problem 20:47:21 for now, I'll lust after the modbook 20:47:51 -!- sebbu has quit (Success). 20:47:58 Yeah ... like a rotating screen :P 20:49:11 I'm not a huge fan of the iPhone... mainly because I don't like cellphones and I dislike phone bills even more. If it had been designed as more of a PDA, I'd probably already have one 20:49:58 -!- jix__ has joined. 20:49:59 fortunately, the iPod seems to be slowly aiming in that direction, so I may see my dream device in a couple of years 20:51:21 Heh 20:52:44 if Apple just released an iPod SDK to take advantage of what the "games" feature opened up, we wouldn't need things like Rockbox or iPodLinux, and a lot of people would be happy 20:53:16 I can't really say "everybody's happy", because bleeding-heart open-sourcers and the linux crowd are rarely if ever happy. 21:02:05 -!- jix__ has quit ("This computer has gone to sleep"). 21:03:34 I hate Apple because of their interaction with the F/OSS community, not because they write proprietary software. 21:04:27 Their interaction with the F/OSS community has been incredibly dishonest and immoral, carefully crafted to make naive people think they're a F/OSS-supporting company. 21:05:00 At least Microsoft doesn't /pretend/ to support F/OSS. 21:06:00 it has a lot to do with the underlying differences between the BSD license and the GPL 21:06:38 -!- jix__ has joined. 21:07:24 No, it doesn't. Everything GPL that they use, they do /precisely/ what they're legally required to do, no more. BSD software they mix with proprietary software to create non-F/OSS software. The original chunk of BSD-licensed code they use, they do usually continue to distribute, but they have no qualms with making it worthless in isolation. 21:08:11 Mind you, I'm not saying they've done anything /illegal/, as they haven't. Just unethical. 21:08:24 A.K.A. good business >_> 21:10:57 -!- jix__ has quit (Client Quit). 21:13:11 -!- jix__ has joined. 21:20:10 i'm beginning to suspect a 'hello world' might be impossible 21:22:32 -!- sebbu2 has quit ("reboot"). 21:25:04 o.O 21:25:39 i have no proof though... 21:26:27 -!- Sgeo has joined. 21:26:56 RodgerTheGreat: you there? 21:27:05 yeah 21:27:09 RodgerTheGreat: http://www.esolangs.org/w/index.php?title=Dupdog&diff=6607&oldid=6606 21:27:21 at some point he put an implementation in 21:28:16 note how he apparently wraps by 257 21:28:31 that might be just a typo of course 21:29:04 if it's not a typo, it changes everything :D 21:29:07 odd 21:29:18 man, that is fucked up 21:29:21 probably a typo, though 21:29:33 no need to raise our hopes too high 21:30:27 well, it *could* be intentional- this is #Esoteric, after all 21:30:27 -!- UpTheDownstair has joined. 21:30:45 fortunately, it doesn't break our general solution to the problem, just the details of how it works 21:31:06 as far as i'm concerned, it would make things a lot easier 21:31:47 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 21:32:14 -!- UpTheDownstair has changed nick to nazgjunk. 21:32:27 lament: how so? 21:32:41 intuition :) 21:32:54 aside from confirming the theory that we do in fact wrap... 21:33:55 -!- sebbu has joined. 21:42:51 -!- oerjan has joined. 21:45:09 okay 21:45:18 i have written hello world for the case where we wrap on 257 21:45:59 it's 2386 characters long. 21:46:31 the case where we wrap on 256 is much much harder. 21:46:42 i still think it's just a typo 21:47:26 need to ask cakeprophet... 21:47:59 wait, woah 21:48:08 it seriously makes that much of a difference? 21:48:52 absolutely 21:49:07 the problem with 256 is that it's an even number 21:49:11 ah 21:49:18 I think I see what you mean 21:49:38 you end up needing to do less "nop" things to shave off an instructions 21:49:56 suppose we want to print an 'even' char 21:49:59 could you pastebin what you've come up with? 21:50:04 like 'H' = 72 21:50:26 if we wrap on 256, that means the program that prints this char has to be of even length 21:50:34 if we wrap on 257, the program could be either even or odd 21:52:35 gotcha- it does make a difference 21:53:05 well, if the hello world works and it's the first program coded in the language, doesn't that instantly make it canon? 21:53:28 well, 257 is a strange thing to wrap on, and he did remove that implementation from the wiki 21:54:11 i'm not sure pastebin likes being sent stuff to 21:54:22 oh, .ca 21:54:31 or use nonlogic.org/dump 21:54:48 21:55:27 http://pastebin.ca/397942 21:56:22 It's practically trivial. In particular, the source is never doubled. 21:56:38 hunh 21:57:02 -!- nazgjunk has quit ("Leaving"). 21:57:17 can you try it in the other interpreter? 21:57:24 in case mine's buggy 21:57:36 sweet jesus I do not understand that... wait, are you using a series of NOPs to gradually decrease the program value, and using a C to dump out each character? 21:57:50 yes :) 21:58:24 I believe the proper response to that lies here: http://www.myconfinedspace.com/wp-content/uploads/2007/03/omgwtfbbq-39352.jpg 22:00:59 hold on a sec 22:01:55 lemme see if I can find ais523's source... 22:03:47 got it. Now I need to find where he specified wrapping... 22:04:23 I haven't read all the logs yet, but it occurs to me that there should be a way to compress the program with all that duplication in it, so you could worry less about space. 22:04:31 yes 22:04:43 we discussed the possibility of doing that 22:04:58 although, lament's solution doesn't depend on duplication at all 22:05:36 augh. good lord perl is impenetrable 22:06:07 http://pastebin.ca/raw/397577 <- I'm having difficulty figuring out what part of this to modify for mod 257 wrapping... 22:06:33 prettified: 22:06:34 http://pastebin.ca/397959 22:06:42 That's not perl, that's thutu2perl 22:06:59 oerjan: ok, that explains why it's unreadable 22:07:14 RodgerTheGreat: i'm guessing you need to change those '128' to '257'? 22:07:19 lament: haha 22:07:50 lament: that's what I was thinking, but there seemed to be more than I was expecting- I'll just give it a shot and see what happens. 22:08:00 heh 22:08:37 might be an idea to use the original thutu source. 22:08:43 he didn't publish it. 22:09:10 RodgerTheGreat: use the prettified version, it's way more informative :) 22:09:38 * RodgerTheGreat strips newlines... 22:10:10 i would presume that everything from the original thutu is within that large while loop. 22:13:46 on the other hand the original thutu may not be much better, the part before the and's is probably the same and the part after just boilerplate for each thutu primitive command 22:15:03 which means we could probably reverse the compilation rather easily. 22:15:43 well, I'm not sure if it doesn't work or I'm just using the interpreter properly. :/ 22:15:54 *improperly 22:19:31 oh well 22:21:28 now we need to figure out how to create 99bob 22:22:25 which is currently looking fairly impossible without bruteforcing 22:22:26 i still think it's wrong to wrap on 257 22:22:32 probably 22:22:44 his interpreter is full of typos and doesn't even run 22:22:48 he never tested it 22:22:52 yeah 22:23:06 that's probably why it was removed 22:23:21 and that's probably why nobody else has tried to code in this language 22:24:02 -!- bsmnt_bot has joined. 22:24:25 oerjan: it has save_callbacks 22:24:28 where's seven inch bread when you need him? 22:25:14 writing a dupdog interpreter directly in perl should be trivial. 22:25:56 k, /bot/scripts is writable 22:26:02 hopefully 22:26:10 yoohoo 22:27:21 ~exec self.foo = open("/bot/scripts/foo", "rw") 22:27:22 IOError: [Errno 2] No such file or directory: '/bot/scripts/foo' 22:27:35 ~exec self.foo = open("/bot/scripts/foo", "w") 22:27:51 ~exec self.foo.write("fooo\n") 22:27:59 ~exec self.foo.close() 22:51:00 -!- nazgjunk has joined. 22:54:04 -!- nazgjunk has quit (Client Quit). 23:09:47 hmph 23:10:00 is BB(n+1) > BB(n)? 23:10:07 BB is busy beaver 23:11:30 yes 23:12:21 simply add a new initial state to the initial state of the maximal one for n, which transitions to the original immediately. Thus BB(n+1) >= BB(n)+1. 23:13:25 oh 23:14:38 in fact i think that can be improved to something approximately like BB(n+1) >>= BB(n)*(1+1/n) 23:15:07 namely, let s be the _most_ used state for the maximal one for BB(n). 23:15:58 Now make a new one which always pass through s and the new state in sequence. Thus at least 1/n of the steps will be doubled. 23:16:30 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 23:17:31 but intuition tells that it of course grows much more rapidly than that from some point. 23:18:30 because in fact there can be no computable function f such that f(BB(n)) >= BB(n+1) 23:18:45 yeah 23:21:23 although proving that f(BB(n)) < BB(n+1) for _every_ n greater than some limit might require some cleverness. 23:23:27 f(x) = BB(invBB(x)+1) 23:24:17 f(BB(n)) < BB(n+k) for some k and all n seems like it could be done, if k is big enough to embed computation of f in 23:25:26 What does "grows faster than" mean? 23:26:17 "computable function f such that f(BB(n)) >= BB(n+1)" 23:26:18 ? 23:27:51 it means at a minimum that lim (x -> inf) f(x)/BB(x) = 0 23:28:06 i.e. f(x) = o(BB(x)) 23:28:53 * Sgeo doesn't understand "f(x) = o(BB(x)) 23:28:59 * Sgeo understands the limit 23:29:12 well it's a notation for the limit 23:29:46 -!- ShadowHntr has joined. 23:31:27 WHERES CAKEPROPHET 23:31:41 Can there exist a computable function f(x) such that f(x) > BB(x) when x is less than an arbitrary integer a? 23:31:43 HE WAS EATEN BY THE COOKIE MONSTER 23:31:56 of course. 23:32:20 just let f(y) = 1 + max (x <= a) BB(x) 23:32:39 as you see it can even be constant 23:33:22 umm... BB(x) isn't computable.. am I missing something? 23:33:37 mind you the constant exists in theory but we cannot actually find it for any but a finite number of a's 23:34:19 well the point is that every constant is computable in isolation. 23:34:47 it's only functions that can be theoretically uncomputable 23:35:53 so it is sort of cheating 23:37:40 the constant "exists", but its decimal sequence cannot be proven to satisfy its definition (or for that matter, written down within the space of our universe). 23:38:14 "our universe"? So it's a finite amount of space? 23:38:22 the busy beaver function is able to solve the halting problem too 23:38:31 the visible universe, then. 23:38:58 No, I meant the space the number would require 23:38:58 S(n) < Sigma(3n+6) 23:39:26 BB(x) is finite for finite x 23:39:37 well it is a finite number, so it has a finite, but totally impractical and perhaps physically non-existing size. 23:40:59 but even writing down the _size_ would be impossible in practice. That's what being greater than any computable functions you can think of does. 23:42:01 oh nice, the busy beaver function is able to prove theorems experimentally 23:42:03 i.e. the number is greater than Ackermann(1000,1000), which is itself an entirely computable number but still of massively "unphysical" size. 23:42:23 By telling you how many test cases you need 23:43:07 *computable number = computable function of reasonable numbers 23:44:33 grr I don't have haskell installed I think 23:44:40 * Sgeo is reading about factorials 23:44:44 and the gamma function 23:45:10 yeah, factorials are a cool Haskell feature. 23:45:20 apropos haskell, the Data.Sequence module seems eminently suited for optimizing Dupdog, since it can concatenate in logarithmic time 23:45:23 what's a factorial? 23:45:37 and what's dupdog? 23:46:01 the language everyone was discussing during most of today 23:46:48 in fact you arrived just about when the discussion ended (just as i left just before it began) 23:46:56 oh 23:47:01 dupdog: it's hip and trendy! 23:47:12 and seveninchbread was probably stoned when he made it 23:59:33 -!- tgwizard has quit (Remote closed the connection).