00:00:18 !bfjoust pause2 ()*99999999999 00:00:23 Lymia: the reason the current version does better than the []*8 version is that it at least has a chance of locking a naive clear loop 00:00:26 !bfjoust pause3 ({})*99999999999 00:00:50 !bfjoust attack1 [>[-]+] 00:01:02 !ztest two_people_running_from_a_shark >+([]) -=≡(>[-])> *-1=≡(>[-])> 00:01:02 Lymia.two_people_running_from_a_shark: points -21.76, score 7.19, rank 47/47 00:01:06 b_jonas: should be ({})%99999999999 (with however many 9s you want) to comply with the spec 00:01:12 ah 00:01:19 !bfjoust pause4 ({})%99999999999 00:01:31 in retrospect, we should probably cap loop iterations to 100000, there's no reason not to 00:01:36 (but even then, nested loops could be a DoS) 00:02:12 !bfjoust fishbones >+]]]][-]> 00:02:23 what are the interpreters written in? something that uses bigints by default? 00:02:26 !ztest fishbones >+]]]][-]> 00:02:26 prooftechnique: error: parse error: terminating ] without a matching [ 00:02:33 juiced is written in C 00:02:37 Aww. 00:02:58 !bfjoust pause5 ()%99999999999 00:03:15 I'd probably try to fix () with some sort of AST manipulation 00:03:25 !ztest google http://google.com 00:03:25 The thing that's powering zemhill is also written in C, and the command to parse numbers actually does cap at 100000. 00:03:25 maybe it's still stuck on the first one and doesn't start to run the rest 00:03:25 ais523: error: parse error: encountered { without suitable enclosing ( 00:03:35 Or at whatever MAXCYCLES is defined as, but anyway. 00:03:45 !bfjoust dead < 00:03:51 fizzie: margins3 and preparation both care about the exact value of the cycle cap 00:03:58 see 00:04:04 both of them could be modified to handle a different cycle cap, but would need the modification 00:04:11 b_jonas: you killed hackego? 00:04:23 ais523: or at least its bfjoust or something 00:04:27 um, what other command does it have? 00:04:38 `ping 00:04:40 EgoBot, not HackEgo. 00:04:40 maybe it's still stuck on the first one and doesn't start to run the rest <-- i think so. i haven't seen any response since then. 00:04:42 pong 00:04:52 !sh echo hi 00:04:53 !bf8 ++++++++[->++++++++<]>. 00:04:53 hi 00:04:53 ​@ 00:05:11 HackEgo often did have problems with concurrent submissions 00:05:23 so maybe there's some sort of locking involved 00:05:28 that breaks on a time out 00:05:47 s/HackEgo/EgoBot/g/recently 00:06:19 ais523: oh, you mean if I submit two programs at the same time, I can get it to break and allow two of my knights on the same tapes? 00:06:37 it had a tendency to rerun apparently unrelated results 00:06:40 thus confusing the output 00:06:53 was normally visible in http://codu.org/eso/bfjoust/in_egobot/breakdown.txt 00:06:58 also, wow, look at that atm 00:07:00 a bunch of invalid unicode 00:07:19 and output interspersed in other output 00:07:24 `fetch http://codu.org/eso/bfjoust/in_egobot/breakdown.txt 00:07:27 2016-03-07 00:07:05 URL:http://codu.org/eso/bfjoust/in_egobot/breakdown.txt [8451/8451] -> "breakdown.txt" [1] 00:07:29 (for the benefit of logreaders) 00:07:38 `paste breakdown.txt 00:07:40 http://codu.org/projects/hackbot/fshg/index.cgi/file/tip/breakdown.txt 00:07:44 `rm breakdown.txt 00:07:46 No output. 00:07:48 !ztest (.)*-2 3 00:07:48 Lymia: Program name ((.)*-2) is restricted to characters in [a-zA-Z0-9_-], sorry. 00:07:53 !ztest f (.)*-2< 00:07:53 Lymia.f: points -32.14, score 2.99, rank 47/47 00:07:58 !ztest test (.)*-2< 00:07:58 Lymia.test: points -32.14, score 2.99, rank 47/47 00:08:00 !ztest test (.)*-0< 00:08:00 Lymia.test: points -46.00, score 0.00, rank 47/47 00:08:11 ais523: Your paste link no longer works, now that you removed the file. 00:08:13 !ztest test (<)*0 00:08:14 Lymia.test: points -32.14, score 2.99, rank 47/47 00:08:16 !ztest test (<)*-0 00:08:17 Lymia.test: points -32.14, score 2.99, rank 47/47 00:08:18 !ztest test (<)*--0 00:08:18 Lymia.test: points -32.14, score 2.99, rank 47/47 00:08:23 "breakdown.txt@d57f8e8d353c: not found in manifest" 00:08:23 !ztest test (<)*-----0 00:08:23 Lymia.test: points -32.12, score 2.99, rank 47/47 00:08:34 fizzie: seriously? I thought it'd permalink :-( 00:08:35 !ztest test (.)*-----1< 00:08:35 Lymia.test: points -46.00, score 0.00, rank 47/47 00:08:39 `revert 00:08:41 Messing with parsing. \o/ 00:08:45 rm: cannot remove `/home/hackbot/hackbot.hg/multibot_cmds/env/.hg/store/data/canary.orig': Is a directory \ Done. 00:08:48 I have no idea how this parses. 00:08:49 `paste < breakdown.txt 00:08:50 http://codu.org/projects/hackbot/fshg/index.cgi/file/tip/%3C%20breakdown.txt 00:08:55 !ztest test (<)* 00:08:56 Lymia.test: points -32.14, score 2.99, rank 47/47 00:08:56 `` paste < breakdown.txt 00:08:59 !ztest test (<)*----- 00:08:59 Lymia.test: points -32.12, score 2.99, rank 47/47 00:09:00 http://codu.org/projects/hackbot/fshg/index.cgi/file/tip/paste/paste.32218 00:09:01 !ztest test (<)*-----1 00:09:01 Lymia.test: points -32.12, score 2.99, rank 47/47 00:09:02 !ztest test (<)*-----0 00:09:02 Lymia.test: points -32.12, score 2.99, rank 47/47 00:09:04 there we go 00:09:08 `rm breakdown.txt 00:09:10 No output. 00:09:23 Yeah, it's an "optimization" to not generate a new file when given a file name. 00:09:44 Also the invalid characters in breakdown.txt seemed to be just 0 bytes. 00:09:44 but seriously, poor HackEgo 00:09:48 !ztest test (<)% 00:09:48 Lymia.test: points -32.14, score 2.99, rank 47/47 00:09:55 !ztest test (<)% 1 00:09:55 Lymia.test: points -46.00, score 0.00, rank 47/47 00:10:02 fizzie: I was guessing NUL bytes, they're a common symptom of two concurrent accesses to the same file without locking 00:10:02 !ztest test (<)%CC1 00:10:02 Lymia.test: points -46.00, score 0.00, rank 47/47 00:10:04 !ztest test (<)%C-C1 00:10:05 Lymia.test: points -32.14, score 2.99, rank 47/47 00:10:11 !ztest test (<)%C-1 00:10:11 Lymia.test: points -46.00, score 0.00, rank 47/47 00:10:27 Canonization is going to be a pain. 00:11:19 Lymia: Does zemhill work in privmsg? 00:11:22 yep 00:11:49 Lymia: Is there a reason you aren't using it then? 00:11:50 also over the Web, although it can't auth you there 00:11:54 !ztest test (<) 00:11:54 Lymia.test: points -32.14, score 2.99, rank 47/47 00:11:55 nope. 00:12:00 !ztest test {<} 00:12:00 Lymia: error: parse error: encountered { without suitable enclosing ( 00:12:25 {} with no matching () 00:14:08 I think (<)%C-1 gets interpreted (by zemhill) identically to (<)*-1, while (<)%C-C1 is just the empty program. 00:14:17 Yeah. 00:14:23 Looks like it tokenizes somehow. 00:14:29 >-1[<<] 00:14:33 !ztest test >-1[<<] 00:14:34 Lymia.test: points -46.00, score 0.00, rank 47/47 00:14:38 !ztest test >*-1[<<] 00:14:39 Lymia.test: points -46.00, score 0.00, rank 47/47 00:14:42 !ztest test >()*-1[<<] 00:14:42 Lymia.test: points -32.14, score 2.99, rank 47/47 00:14:53 Context sensitive too. 00:15:03 I'm sorry for breaking the bot 00:15:11 ais523: Is a LISP that compiles to JS a reasonable goal for a first transpiler? 00:15:17 juiced responds to "(>)C*-1" with ") not followed by % or *" 00:15:23 Well, if you can call it that. It's more that it ignores "non-meaningful" characters in most contexts, except after it's found the start of the number. So the C before the - is skipped, but the C between - and 1 isn't, so the count's just 0 for the latter. 00:15:24 ais523: IYHONHO? 00:15:29 hppavilion[2]: it's not terrible, especially as javascript has first-class functions 00:15:37 ais523: That's what I was thinking 00:15:46 also surely you mean IYHONSHO? 00:15:47 ais523: The part I was scared of is quote and unquote 00:15:50 I'm trying to gather all the programs that ever existed on the hill 00:15:56 And I'm working on a component to canonicalize stuff. 00:16:02 ais523: What does THAT mean? 00:16:25 (Mine was "In Your Humble (Or Not Humble) Opinion") 00:16:35 "not so humble" 00:16:38 You could actually say it treats anything that's not +-<>.,[](){}*%0123456789 as whitespace, and ignores whitespace except in the middle of a number. 00:16:43 ais523: Ah 00:16:44 by analogy with IMNSHO 00:16:54 ais523: Is that the one I use, or is that common? 00:17:00 IMNSHO that is 00:17:25 hmm, (>)*C-1 seems to be interpreted as (>)*0 by juiced 00:17:36 err, as (>)*0-C by juicd 00:17:42 (the - is parsed as an instruction) 00:17:44 I think I independently discovered IMNSHO, but it may already have been known 00:18:00 it used to be fairly common, especially on usenet 00:18:03 it's not used much nowadays 00:18:04 Ah 00:18:23 I still see “IMNSHO” in irc I think. 00:18:28 IMNSHO, it should be used more 00:18:58 ais523: I used to have a ") not followed by % or *" error, but then some program in the sample sets contained something akin to (this is a comment where there's (something) in parentheses)*0. 00:19:11 !ztest b_jonas_pause ((({})*999999)*9999999)*999999 00:19:11 oerjan.b_jonas_pause: points -32.14, score 2.99, rank 47/47 00:19:24 zemhill is rather more resilient 00:19:29 fizzie: I dislike it when hill interps are permissive, as that means I have to correct other people's programs for local testing 00:20:21 IIRC there was a controversy about "()* 1" and "() *1" (as opposed to the uncontroversial "()*1 ") which I had to patch in juiced at one point 00:20:32 to have any hope of compatibility with what other people were doing 00:20:34 urgh, manually written parsers. damnit Geany 00:20:56 sizeof(hppavilion) / sizeof(hppavilion[0]) 00:21:38 istr some programs had to be patched when the grammar changed (disallowing unmatched [] in ()*, iirc) 00:21:55 *accepted grammar 00:22:01 !ztest b_jonas_pause ((({.})*999999)*9999999)*999999 00:22:01 Lymia.b_jonas_pause: points -32.14, score 2.99, rank 47/47 00:22:02 "help ()*0 comments" says the commit message which introduced that change. 00:22:16 !ztest b_jonas_pause ((({.})*999999)*9999999)%999999 00:22:16 Lymia.b_jonas_pause: points -32.14, score 2.99, rank 47/47 00:22:20 +1 00:22:24 !ztest b_jonas_pause ((({.}.)*999999)*9999999)%999999 00:22:24 Lymia.b_jonas_pause: points -32.14, score 2.99, rank 47/47 00:22:31 Lymia: try adding some % 00:22:46 !ztest b_jonas_pause (((({[.}.}.)*999999)*9999999)%999999)%999999 00:22:46 Lymia: error: parse error: terminating } without a matching { 00:22:51 !ztest b_jonas_pause (((({{.}.}.)*999999)*9999999)%999999)%999999 00:22:51 Lymia.b_jonas_pause: points -32.14, score 2.99, rank 47/47 00:23:02 um 00:23:12 near the {} or something 00:23:22 !ztest syntaxerror } 00:23:22 b_jonas: error: parse error: terminating } without a matching { 00:23:25 !ztest syntaxerror ) 00:23:25 b_jonas: error: parse error: terminating ) without a matching ( 00:23:34 !ztest syntaxerror ([)*1 00:23:34 b_jonas: error: parse error: [..] crossing out of a ({..}) level 00:23:41 Does it not match ()* in ()% correctly? 00:23:48 Also zemhill considers * and % as synonyms. 00:23:51 !ztest syntaxerror ({)*1(})*1 00:23:51 b_jonas: error: parse error: starting { without a matching } 00:23:54 :S 00:23:55 I see. 00:24:09 !ztest syntaxerror {} 00:24:09 b_jonas: error: parse error: encountered { without suitable enclosing ( 00:24:16 !ztest syntaxerror ({{}}) 00:24:16 b_jonas: error: parse error: encountered { without suitable enclosing ( 00:24:19 b_jonas: (a{b}c)%n is equivalent to (a)*n b (c)*n 00:24:24 but allows you to match brackets between a and c 00:24:31 this is to make it possible to implement efficiently 00:24:31 ais523: yep 00:24:55 even then, implementing % takes a little thought and most BF Joust interpreters I've seen from non-#esoteric people omit it 00:25:08 although I think it would be possible to implement the general parenthesis (which allows unbalanced brackets) too, only more difficult to implement 00:25:19 how many interps implement outside-%-matches-inside-{} ? 00:25:27 urgh, manually written parsers. damnit Geany <-- the BFJoust ({})% construction is a bit tricky to parse, i don't think it's context-free. 00:26:07 erm, with nested {}s. 00:26:13 oerjan: isn't it just program ::= program '(' program '{' program '}' program ')' '%' integer ? 00:26:14 !ztest ({}) 00:26:14 Lymia: "!ztest progname code". See http://zem.fi/bfjoust/ for documentation. 00:26:17 !ztest test ({}) 00:26:18 Lymia.test: points -32.14, score 2.99, rank 47/47 00:26:23 nested {} is the thing that cause problems 00:26:23 !ztest test ({}{}) 00:26:23 Lymia: error: parse error: encountered second { on a same level 00:26:27 and I'm not sure if it's widely implemented anyway 00:26:28 !ztest test (({}{})) 00:26:28 Lymia: error: parse error: encountered second { on a same level 00:26:31 !ztest test (({}){}) 00:26:31 Lymia.test: points -32.14, score 2.99, rank 47/47 00:26:37 Even though it's an noop context 00:26:38 !ztest test (({{}})%2)%2 00:26:38 ais523.test: points -32.14, score 2.99, rank 47/47 00:26:40 ais523: not when you allow {}s to match other than immediately enclosing () 00:26:40 Interesting. . . 00:27:03 I mean, you'd have to count the brackets in the expansion of every parenthesis, and track a path in the tree for where the program counter is or something like that 00:27:04 which zemhill and EgoBot both support iirc 00:27:33 !ztest (({}{})%1)%1 00:27:33 b_jonas: "!ztest progname code". See http://zem.fi/bfjoust/ for documentation. 00:27:39 !ztest syntx (({}{})%1)%1 00:27:39 b_jonas: error: parse error: encountered second { on a same level 00:27:46 !ztest syntax (({})%2)%1 00:27:46 b_jonas.syntax: points -32.14, score 2.99, rank 47/47 00:27:54 OK, so with a test program of (1(2{3{4}5}6)%2 7)%2 00:27:56 (a(b{c{d}e}f)%n g)%m => (a(b)*n c)*m d(e(f)*n g)*m, yes. 00:28:18 juiced outputs 12231223456675667 00:29:35 I don't have a debug output like that, but that's what zemhill should execute as well. 00:29:57 so the way juiced's debug output works is 00:30:04 you write ()*n in your program (nothing in the brackets) 00:30:53 and it outputs n in a way that can be parsed 00:31:13 and when I run a program against the entire hill, I get the various values of n that were used in any of its runs, broken down via program 00:31:19 this means that, say, I can write a defence program detector 00:31:21 put a ()*1 in it 00:31:31 then run it and see which enemy programs my own program considers to be defensie 00:31:33 *defensive 00:32:18 Can't you just make an escape 00:32:19 like 00:32:25 ($debug command) 00:32:34 Without making it something that normally parses to noop 00:33:56 $help 00:34:14 Huh. 00:34:16 Lymia: but that'd prevent me putting these into programs submitted to the hill 00:34:17 No $ bot 00:34:37 ^prefixes 00:34:38 Bot prefixes: fungot ^, HackEgo `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ . 00:34:54 although I think it would be possible to implement the general parenthesis (which allows unbalanced brackets) too, only more difficult to implement <-- i've thought about that, the problem is you can get _very_ tricky about where exactly in the hierarchy the matching [ to a ] is. 00:34:59 [wiki] [[Bf joust]] N https://esolangs.org/w/index.php?oldid=46502 * Ais523 * (+22) caps redirect 00:35:24 You could've made it ($echo foo)*0 etc. though, so that it's not limited to numbers and could do other sort of commands. 00:35:42 it always seems weird seeing a miscapitalization, even though that's the whole point of a caps redirect 00:36:09 fizzie: then other people could trigger it using malicious comments 00:36:18 whereas a ()*5 in someone else's program is clearly harmless 00:36:44 !ztest does_this_have_a_distinct_score (+)*-1 00:36:45 ais523.does_this_have_a_distinct_score: points -12.88, score 9.15, rank 47/47 00:37:07 !ztest (<{(+)*-1}.)*0 00:37:07 ais523: "!ztest progname code". See http://zem.fi/bfjoust/ for documentation. 00:37:15 !ztest empty_percent (<{(+)*-1}.)%0 00:37:16 ais523.empty_percent: points -12.88, score 9.15, rank 47/47 00:37:32 oh wow, that is a hard case to handle correctly (and that is the correct handling of it) 00:38:12 just tested juiced, it seems broken on it :-( 00:38:16 (the whole thing is a no-op on juiced) 00:38:35 ais523: Perhaps I should make Thoof Bot? 00:38:42 ais523: One where you can add arbitrary axioms? 00:38:48 hppavilion[2]: you can just add an interpreter into HackEgo, can't you? 00:38:52 that's what it was originally meant to be for 00:38:56 ais523: Oh, right 00:39:00 before people started filling it with quotes and wisdom, anyway 00:39:14 very occasionally it is actually used for its intended purpose 00:39:15 `quote 00:39:17 `quote 00:39:17 579) it's not a list of /all/ interesting esolangs, btw; otherwise you can take the first command from the first esolang, the second from the second, the third from the third, etc, then add 1 to all of them and you get a new interesting esolang diagonal principle… 00:39:18 323) The system I kind of have in mind makes a flying train a natural consequence. 00:39:18 `quote 00:39:19 605) elliott, cars aren't perfectly spherical. 00:39:20 `quote 00:39:20 703) Why does CL get called functional? it's sort of like how you call ancient greece democratic. 00:39:21 `quote 00:39:22 1235) `addquote boily: thanks for getting quoted saying django btw, now I'm only in 87.5% of the django quotes [...] ah, the inevitable result of mentioning django 00:39:54 ais523: Of course, if I do that I have to somehow get it /into/ hackego 00:40:09 hppavilion[2]: `fetch is your friend 00:40:11 `help fetch 00:40:11 Runs arbitrary code in GNU/Linux. Type "`", or "`run " for full shell commands. "`fetch " downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert " can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/ 00:40:17 ais523: Yes, but I'm an idiot 00:40:26 hmm, that command was mis-parsed and yet somehow gave useful outut anyway 00:40:55 ais523: Is there a HackEgo API I can use? 00:41:08 ais523: Or perhaps docs on how to write scripts that run on HackEgo? 00:41:16 hppavilion[2]: see Linux manpages 00:41:18 it's basically just Linux 00:41:20 ais523: Perhaps 00:42:36 ais523: I'm going to start looking into how the Thoof command API should work 00:43:16 ais523: I suppose putting it in HackEgo's better as I don't need to make a full bot this way, AND it'll practically always be online 00:43:56 do people actually hate python 00:44:20 Oh shit 00:44:24 My computer's not charging 00:44:27 But the outlet is working 00:44:33 like my enduring impression of it is just this perfectly inoffensive language, but you can always find people who hate a given language 00:44:40 I'm going to try another outlet out of ill-thought-out desperation 00:44:56 Phantom_Hoover: I don't hate it /that/ much but I still have a pretty dim view of it 00:45:04 enough to get into flame wars with Python fans on occasion 00:45:32 hppavilion[2]: check that the other end of the power wire (the one that's not connected to the socket) is connected to the charger 00:45:39 this is a reasonably common failure mode and one that's confused me a bunch in the past 00:45:48 ais523: I did 00:46:17 Oh god 00:46:18 (it's also possible for the charger to become disconnected from the laptop in a way that's non-obvious; this is rarer but it's happened a few times) 00:46:23 It's on and off charging 00:46:34 It depends on my angle of sitting 00:46:37 oh, that makes it very likely that the end next to the laptop is loose 00:46:43 just push it in a bit further 00:46:53 ais523: It's as far as it'll safely go 00:46:58 hmm 00:47:01 ais523: I think the cord might be shot 00:47:06 ais523: _you_ get into flame wars? 00:47:10 in that case it could be – yes 00:47:23 oerjan: they are pretty tame by flame war standards 00:47:33 i thought you were this perfectly inoffensive guy. 00:47:49 it's more that I'm so inoffensive that I will consider even something pretty minor to be a flame war 00:50:13 -!- PinealGlandOptic has quit (Quit: leaving). 00:50:49 *ACHOO* 00:52:01 ais523: Should the Thoof have different proofspaces? 00:52:06 editor flame wars are fun, I typically take the side of emacs and vim versus everything else 00:52:34 normally I can get most of the emacs /and/ vim users round to my side, thus catching out all the other-editor-users who thought they were safe 00:52:43 hppavilion[2]: I have no idea 00:52:55 to be honest, I'm probably not the right person to ask about a Thue-based proof assistant 00:53:16 ais523: A proofspace being that you have to do `thoof-addax "" 00:54:32 well, global state in IRC bots has a tendency to get trampled on 00:54:39 so you're going to base it on deductive term rewriting? 00:54:57 Phantom_Hoover: Yes; it's based on string rewriting, to be exact 00:55:03 Phantom_Hoover: With s/// 00:55:36 hmm 00:56:09 won't you end up basically implementing a typed lambda calculus in thue, what with curry-howard? 00:56:21 Phantom_Hoover: I'm trying to decide whether to shove all the axioms in a global namespace or to be precise and specific and allow different proofs 00:56:34 Phantom_Hoover: Huh? 00:56:34 `addquote editor flame wars are fun, I typically take the side of emacs and vim versus everything else normally I can get most of the emacs /and/ vim users round to my side, thus catching out all the other-editor-users who thought they were safe 00:56:36 1271) editor flame wars are fun, I typically take the side of emacs and vim versus everything else normally I can get most of the emacs /and/ vim users round to my side, thus catching out all the other-editor-users who thought they were safe 00:56:48 Phantom_Hoover: How is string rewriting typed lambda calculus 00:56:53 -!- vyv has joined. 00:57:20 string rewriting isn't, but to get logic working properly i think you'll end up with a typed LC 00:58:45 Phantom_Hoover: There are a variety of ways to do what you want in it 00:58:49 well, global state in IRC bots has a tendency to get trampled on <-- we don't like _too_ much global state change in HackEgo, it clutters up the history browser. 00:59:05 indeed 00:59:20 perhaps HackEgo should have some non-versioned temporary state, too 00:59:29 that we can expect to get blown away on a regular basis 00:59:59 *ACHOO* more nosedrops -> 01:00:07 ooh, interesting approach to editor flame wars 01:00:15 Phantom_Hoover: Typed λ-calculus is one way to do things, but it is not necessary 01:00:16 like presumably you'll want some way to express the statement "forall x, A(x) implies B(x)" where A, B are some formulaic statements about x 01:01:21 Phantom_Hoover: That's possible, but not how you go about it 01:01:50 Phantom_Hoover: Thoof is based on proving strings from other strings together with substitutions 01:01:54 and some rewriting rule that lets you turn a proof of that, and an x, and a proof of A(x) into a proof of B(x) 01:02:09 Phantom_Hoover: You can do that, but that's not the goal 01:02:46 Phantom_Hoover: Substitutions are based on PCRE regexes, Phantom_Hoover. 01:03:26 you're just describing a string rewriting system here, not a string rewriting system that implements a proof assistant 01:04:13 to make it a proof assistant you'll have to define some kind of encoding of logic into your strings, and rewriting rules that let you make deductions 01:04:43 [wiki] [[BF Joust strategies]] https://esolangs.org/w/index.php?diff=46503&oldid=46497 * Ais523 * (+1501) /* Synchronization */ renamed to /* Reconnaissance */ mention the strategy Lymia.nyuroki uses, expand/adapt a bit 01:04:58 e.g. the deduction and rule i described above, which is essentially function application 01:05:55 [wiki] [[BF Joust strategies]] M https://esolangs.org/w/index.php?diff=46504&oldid=46503 * Ais523 * (+11) /* Decoy detection */ replace gratuitous Markdown with actual wikimarkup (I posted wikimarkup to a Markdown-using forum a little earlier, so the reverse error a few minutes later is perhaps not that unexpected) 01:08:16 -!- augur has joined. 01:09:48 Phantom_Hoover: You create axioms and theorems from said axioms and apply the axioms/theorems to other axioms until you get what you want 01:09:54 Phantom_Hoover: Sounds like a proof assistant to me 01:10:12 sure, i never said otherwise 01:10:34 Phantom_Hoover: The axioms are strings, s/// expressions, and y/// expressions 01:10:47 Phantom_Hoover: You prove strings, and those strings can represent other things 01:10:59 Phantom_Hoover: You have to construct things like numbers though 01:11:00 what does a y/// expression do 01:11:12 Phantom_Hoover: Character-by-character substitution, like in Sed 01:11:25 Phantom_Hoover: Less common than s///, but still potentially VERY useful 01:11:58 y/S/s/ 01:13:44 have you made any concrete proofs or anything with this? i'd like to have a clear idea of what you're thinking of 01:13:56 Phantom_Hoover: Yes, I proved 3+2=5 01:14:00 Phantom_Hoover: Using Peano arithmetic 01:14:07 It was more construction than proof, but close enough 01:14:16 Phantom_Hoover: So do you think it'd be better to have one big proofspace, sort of like lambdabot's functionspace, or multiple proofspaces like in any rational thing ever? 01:14:59 do you have a source file or something for it? 01:15:11 Phantom_Hoover: http://pastebin.com/Ax2v5XSV 01:15:22 Phantom_Hoover: That's the paste, but I also have the github if you like 01:15:57 Phantom_Hoover: Oh, crap, wrong file 01:16:30 Phantom_Hoover: https://github.com/ZodiacWorkingGroup/Thoof/blob/master/construct.thoof 01:16:33 Just read that 01:17:08 Phantom_Hoover: Note that the main theorem no longer shows 2+3=5, it instead was made for dealing with lists 01:18:16 what's \g? 01:20:05 nvm, found a cheatsheet 01:22:10 Phantom_Hoover: Group reference 01:22:22 Phantom_Hoover: PCRE groups are invaluable in Thoof proving 01:24:19 yes, i'd argue that's because they make it easy to beta reduce 01:24:56 Phantom_Hoover: Agreed 01:25:09 Phantom_Hoover: so, single- or multi- proofspace? 01:25:37 single, theorem prover naming schemes are a clusterfuck regardless 01:25:43 Single is easier, but more unwieldy 01:25:49 OK 01:25:59 Maybe I'll add multiple in a later version 01:26:20 Phantom_Hoover: Alternatively, I could speed up the ONLINE thoof, and just publish that sooner and add a sharing feature 01:28:10 wait 01:28:12 HEAD :: s/(?P[^:]*).*/\g/; 01:28:34 won't that clear the entire expression after the first colon... OK i guess that's what you want 01:28:40 what if you had a nested array though? 01:30:48 Phantom_Hoover: That isn't supported in the construction yet 01:31:00 Phantom_Hoover: Mostly because I have NFC how to do it using regexes alone 01:31:10 Probably some PCRE bullshit that detects nested parenthesis 01:31:48 Phantom_Hoover: Think I should just make Thoof's online impl sooner instead of something complicated on IRC 01:32:41 Phantom_Hoover: If you want to keep the rest, you have to do something complicated with the filesys and stuff (yes, Thoof is going to support a Unix filesys as part of its provingness) 01:33:54 Phantom_Hoover: Besides, what do you expect it to do with the tail of the list? 01:35:30 no that wasn't the issue, it's the fact that it can't recurse and it can't apply 01:37:17 Phantom_Hoover: It is TC actually 01:37:32 Phantom_Hoover: The fixpoint operator makes it reduce to Thue 01:37:42 (Fixpoint is when you prefix an application with @) 01:38:34 Phantom_Hoover: It also supports pattern matching and multiproving 01:39:26 -!- heroux has quit (Remote host closed the connection). 01:39:35 -!- heroux has joined. 01:43:13 -!- Phantom_Hoover has quit (Read error: Connection reset by peer). 01:51:29 -!- andrew__ has joined. 01:52:28 -!- andrew__ has quit (Remote host closed the connection). 01:56:32 -!- hppavilion[2] has quit (Ping timeout: 244 seconds). 02:00:20 -!- AlexR42 has joined. 02:08:07 -!- hppavilion[2] has joined. 02:08:09 -!- hppavilion[2] has changed nick to hppavilion[1]. 02:08:28 tswett: Hi 02:11:55 hppavilion[1]: Is that a DEFCON, or a countdown? 02:12:15 prooftechnique: What part? The [1]? 02:12:25 Yeah 02:12:37 http://smbc-comics.com/index.php?id=2941 02:12:44 prooftechnique: My nick is usually hppavilion[1] 02:12:50 prooftechnique: The [2] is my backup nick 02:12:58 prooftechnique: Which I sometimes am too lazy to change back to [1] 02:13:07 prooftechnique: It's an array index, hth 02:13:16 Are you rivals with hppavilion[0]? hppavilion prime? 02:14:03 I thought so, hence my attempt to sizeof(hppavilion) / sizeof(hppavilion[0]), earlier 02:15:00 -!- AlexR42 has quit (Quit: My Mac has gone to sleep. ZZZzzz…). 02:15:43 prooftechnique: hppavilion['wc'] is my alter ego, when hexchat stops working. It's very strange and causes a type error in most languages. 02:16:03 How rude 02:17:06 prooftechnique: Also, I'm not an array so much as a haskell-like list 02:17:23 prooftechnique: But one that can be indexed with [] in postfix, because I'm written in haskll 02:17:26 *haskell 02:17:31 I'm written in Jskell 02:17:37 jayskell 02:29:03 -!- hppavilion[1] has quit (Ping timeout: 244 seconds). 02:35:36 -!- hppavilion[1] has joined. 02:35:36 <\oren\> godammn windows update holding computer hostage 02:38:16 Windows is shutting down now! 02:39:47 -!- augur has quit (Remote host closed the connection). 02:44:44 -!- p34k has quit. 02:57:17 -!- andrew__ has joined. 02:57:25 -!- andrew__ has quit (Read error: Connection reset by peer). 03:02:46 -!- blockzombie has left. 03:16:52 \oren\: As an arbitrary selection, I have a question: Which should I put effort into first- a Haskell-like language that compiles to JS (jayskell), or a LISPy language that also compiles to JS? 03:17:07 \oren\: Or some other language format? 03:18:28 what kind of software do you want to write? 03:19:19 mad: Fun software that runs on the web 03:21:21 runs on the web? like on people's browsers or on servers? 03:23:05 mad: In browsers 03:23:40 mad: It's just another language that compiles to JS so we don't have to use that godawful language and can instead use one we're more familiar with the mindset of 03:24:01 JS isn't THAT bad 03:24:23 mad: It's pretty bad 03:24:27 I happen to think JavaScript is pretty good actually 03:24:42 zzo38: It may be good for its niche, but it isn't very good in general 03:24:43 I am writing a X client library in JavaScript. 03:25:04 I also wrote a Z-machine implementation in JavaScript, too. 03:25:25 zzo38: I heard 03:25:45 Ugh 03:25:54 At 27% battery and can't get my charger to work 03:27:14 -!- hppavilion[2] has joined. 03:28:54 -!- lleu has quit (Quit: That's what she said). 03:30:11 -!- hppavilion[1] has quit (Ping timeout: 248 seconds). 03:30:33 -!- oerjan has quit (Quit: Nite). 03:36:33 -!- hppavilion[2] has quit (Ping timeout: 240 seconds). 03:42:09 -!- hppavilion[2] has joined. 03:42:40 -!- nisstyre has joined. 03:44:47 mad: What paradigms would be good for web that haven't been done much yet? 03:56:25 -!- hppavilion[2] has quit (Ping timeout: 240 seconds). 04:24:45 -!- AlexR42 has joined. 04:27:44 -!- idris-bot has joined. 04:36:19 If what people have done to the web so far is to be taken into account, then apparently all of them. 04:38:14 anything stateful would be good for the web 04:40:42 -!- treaki_ has joined. 04:44:47 -!- treaki__ has quit (Ping timeout: 260 seconds). 04:46:38 maybe ther are no paradigms that are good for web? 04:47:34 that too 04:54:56 hm 05:00:53 -!- hppavilion[2] has joined. 05:01:08 maybe it could have the model where instead of having a single script control gfx elements like buttons and so forth 05:01:28 -!- AlexR42 has quit (Quit: My Mac has gone to sleep. ZZZzzz…). 05:01:59 it could instead have buttons etc and you attach an individual script to a button/object 05:02:29 with easy callbacks like :onclick() 05:03:18 and individual scripts each have their own thread 05:03:44 which gets a timeslice until the next wait() statement every displayed frame 05:04:36 I am not sure why I am awake but I am 05:06:47 because you do not sleep 05:07:47 -!- hppavilion[2] has quit (Ping timeout: 248 seconds). 05:20:42 Taneb: because when you're tired, it makes it harder to make decisions, and one such decision is to go to sleep 05:20:55 this is something I have problems with myself 05:21:22 ais523, actually, I went to bed at half past ten 05:21:33 am or pm? 05:21:36 pm 05:21:50 10:30 to 5:21 is about 7 hours 05:21:58 which is a reasonable amount of night's sleep 05:22:03 I got out of bed at 4:40 05:22:14 First woke up at 3:27 05:22:17 oh, hmm 05:22:21 I get out of bed long after I wake up 05:22:27 but that's at least partly because I do most of my work in bed 05:24:27 hm, a spambot is trying to sell me web design services: 05:24:35 "1.) Website Design & Redesign - (Logo design, Flash, Photoshop to HTML/ HTML5)" 05:25:08 I'm not 100% sure how this parses, but it seems to involve "Photoshop to HTML" either as a unit or as part of a larger whole, no matter how it's parsed 05:25:59 they also apparently do Windows Phone and Blackberry in addition to Android and iPhone 05:26:34 in terms of app development 05:34:05 lol flash 05:34:33 "Furthermore, if one counts demonstrations *not* based on quantum computing, some people have claimed even earlier precedents for [the theorem that 3 \times 5 = 15]." 05:35:16 That sounds like an occasionally useful theorem. 05:35:52 furthermore, scott aaronson is hopeful that quantum computing will soon be able to tackle the factorization of large numbers like 91 05:36:05 One does wonder. 05:37:21 coppro: what do you think of the theory that quantum computing will prove the many-worlds hypothesis of quantum mechanics via violating bounds on the processing power that can exist in one universe? 05:37:39 if something like that /is/ the case, it could be that "large" quantum computers are impossible to construct 05:37:47 quantum computers sound like something that's great for the NSA to have but not really for anyone else 05:38:05 ais523: I think that's a stupid view 05:38:23 many-worlds is not really a theory so much as an interpretation 05:38:25 mad, I hope it's useful because next year I'm doing two modules on them 05:38:39 it's the science fiction authors who ran with it and then everybody started getting philosophical 05:38:39 mad: having faster algorithms often ends up having applications unrelated to crypto 05:38:41 o 05:39:01 hmm, I was going to say "is there a quantum solution to the travelling salesman problem" 05:39:11 hmm 05:39:15 by which you mean BQP, presumably? 05:39:24 ais523 : I think there might be 05:39:32 coppro: by which I meant a quantum computer, but then I remembered NP =? BQP 05:39:36 and realised the question wasn't interesting 05:39:45 except inasmuch as NP =? BQP is interesting 05:40:45 Yeah, many-worlds as physicists think of it is rather less silly than what philosophers think. :) 05:41:07 Well, "philosophers". 05:41:25 there's a difference between the physicists' many-worlds? 05:41:35 it's basically just a debate about whether the universe uses threads or processes 05:42:13 Physicists notion of "many-worlds" is basically just "for each possible state in a quantum superposition, those states can be said to exist." 05:42:35 pikhq: what about "many-worlds" in linear logic twh 05:42:51 importantly 05:43:01 hmm, and /now/ I'm reminded of the proof that God exists due to God being defined as having all positive qualities, and existence is a positive 05:43:11 many-worlds (usually) makes no actual predictions, so it's not really a hypothesis 05:43:14 I am not convinced that that holds up either logically or theologically 05:43:29 ais523: more precisely 05:43:30 ais523 : that's a classic 05:43:34 (how do you define a positive quality anyway?) 05:43:50 the argument goes "consider the greatest possible being. This being must exist, because if it didn't, surely a being that existed would be greater." 05:43:58 which presupposes the existence of a greatest possible being 05:44:08 coppro: Yeah, many-worlds really is just "well, this is what the equations describe". 05:44:09 coppro: well if there aren't infinitely many beings… 05:44:10 yeah it has all sorts of logical flaws 05:44:48 however, I think that argument is equivalent to "nothing is better than eternal life, a ham sandwich is better than nothing, therefore a ham sandwich is better than eternal life" 05:45:06 one of the "greatest" is a "greatest hypothetical", the other is a "greatest currently existing", and the two are conflated 05:45:08 ais523: infinitely many *possible* beings, though? 05:45:22 ais523: I remember reading about this in a Smullyan book. 05:45:23 not to mention the assumption of an upper bound, which not all posets possess 05:45:25 coppro: it's conflating two different things and hoping you don't notice 05:45:39 Would you say that everything exists, or that existence is a property that some things have and some things don't? 05:45:55 shachaf: I'd say that that question is a debate about the meaning of the word "everything" 05:46:12 the concept of a perfect god has many qualities 05:46:33 but the real-world existance is not a quality of that concept 05:46:36 I enjoy the Stewart/Cohen/Pratchett characterization of the argument as being an "argument from God" rather than an "argument for God" 05:47:03 since real-world existance is a quality of the real world, not a quality of concepts 05:48:16 it's like a c++ class having a variable that's not in the computer 05:48:52 mad: I read that correctly the first time, looked back to it, looked at it again, and misparsed it as meaning something like "the real world defines itself to exist" 05:49:12 also, depending on what you mean by "class having a variable", that's totally possible 05:49:19 you could have network-abstracted getters and setters 05:49:22 yeah I'm like... "this fomulation is clumsy" 05:50:03 now I'm wondering if stable time loops could exist in real life 05:50:08 ais523 : well then it's not really a variable, it's something that pretends being a variable with setters and getters 05:50:14 ais523: theoretically, yes 05:50:18 ais523: CTCs 05:50:36 Fascinatingly, depending on their exact properties, they may or may not allow for increased computing power 05:50:47 it was eye-opening doing the maths for my semantics and discovering that it worked perfectly fine without causality 05:50:56 is it possible, in a many-worlds universe 05:51:09 mad: question doesn't make sense 05:51:13 had to add causality to get it to reflect the thing it was meant to model 05:51:14 many-worlds makes no predictions 05:51:14 for an universe to essentially be a dead-end so that 05:51:26 ais523: the thing that most makes me want to get a physics phd 05:51:44 is that quantum field theory, the most advanced understanding of the microscale world that we have, has no causa,ity 05:51:47 *causality 05:52:02 like, the universe gets to that dead end, decides that it's not possible, so that path is eliminated so that the universe goes through some other path 05:52:05 causality really isn't something that drops naturally out of maths and physics 05:52:32 hmm, maybe there's a really deep philosophical meaning behind "sometimes things just happen", a phrase whose truth value I've seen heavily debated (but not really with arguments, mostly as a shouting match) 05:52:46 which has the side effect of skewing event probability statistics for situations that can lead to "dead end" paths 05:53:18 mad: this is the theory behind quantum bogosort 05:53:37 which should probably never be implemented, because imagine what would happen if you were wrong about how physics works? 05:53:38 ais523: no, it isn't. It comes from thermodynamics, but calling them the "laws" of thermodynamics overstates them... I cringe every time I hear something "proven" due to thermodynamics 05:54:08 coppro: well the laws of thermodynamics are observations which, so far, appear to hold in the universe 05:54:12 ais523: right 05:54:26 I'm not sure if we have explanations for why they're true, they're just a data point for helping to understand things 05:54:28 but they are defined in terms of causality 05:54:48 specifically the directionality of time 05:54:56 yes, they're time-asymmetric 05:54:59 which is pretty rare, really 05:55:02 yes 05:55:05 and a huge problem 05:55:08 qft is not 05:55:16 well 05:55:24 it's CPT-symmetric 05:55:48 there's a very intereting paper out there on the arxiv discussing the thermodynamics of antimatter 05:56:34 ais523 : well, I was wondering if this "universe suicide" naturally happens due to the laws of physics 05:56:53 it describes models of antimatter where the thermodynamics work parallel or antiparallel to our own, the consequences, and concludes that both are compatible 05:57:14 (with physics as we know it, not with each other 05:57:14 ) 05:57:17 like the probability density of some event is due to the relative probability of each resulting universe of not comitting universe-suicide 05:57:18 mad: so you mean that you think it's impossible to set up a situation in which the universe will eventually be destroyted? 05:57:19 but either result is fascinating 05:57:33 and that things that would make it easier to happen are less probable as a result? 05:57:47 coppro: hmm, what if it's undecidable? 05:57:52 ais523: it's not 05:57:53 ais523 : well, for a specific kind of universe destroying 05:57:56 it's a physical property of the universe 05:58:08 observable, even 05:58:22 ais523 : like as if the whole universe decides 'no' and that path is removed from the possibilities retroactively 05:58:26 in that case there's not much point in wondering until we get to observe it 05:58:39 mad: as I said, this is how quantum bogosort "works" 05:58:39 but it's worth thinking of an experiment 05:58:49 ais523 : right 05:58:52 * ais523 wonders how quickly quantum computers can sort things 05:58:54 if antimatter is parallel to matter, then QFT is incomplete because thermodynamics breaks CPT symmetry 05:59:12 ais523: n log n 05:59:36 if antimatter is antiparallel to matter, then there are regions where thermodynamics work locally backward (though, still, globally forward, assuming a strong enough matter surplus) 05:59:52 my limited understanding of quantum computers is that basically it's got a distinct independent probability for every combination of qubits in it 05:59:58 until you collapse it 06:00:11 mad: not independent 06:00:13 mad: probabilities can be entangled 06:00:18 that's rather the point 06:00:30 right, you couldn't do useful computation with it otherwise 06:00:48 well, that's why I said probability for "combinations of qubits" instead of probability for "qubits" 06:00:58 but they're not independent 06:01:02 and they are not probabilities 06:01:31 a quantum system of n qubits is viewed as a 2^n vector, one entry corresponding to each possibly binary state, yes 06:01:32 yeah it's that weird complex domain thing where the probability is the square of the magnitude right? 06:01:37 yes 06:01:56 each entry is a complex number with the condition that the vector must have norm 1 06:02:16 so an n-qubit system is a point on the 2^n-dimensional complex unit sphere 06:02:51 when you measure, the probabilities collapse to classical ones by taking the magnitude squared 06:03:15 but when you manipulate qubits, the fact that entries are complex can lead to unintuitive results 06:03:53 this sort of thing is what causes wave/particle duality 06:04:07 i like the H gate 06:04:10 quantum electrodynamics has some strong predictive power 06:04:15 -!- lambda-11235 has quit (Quit: Bye). 06:05:15 H(1) is a state with 50% propability for 0 and 1, H(0) is a state with 50% propability for 0 and 1, H(H(1)) is 1 and H(H(0)) is 0 06:05:33 yeah, that's a great example 06:05:59 X, Y, and Z are boring by comparison 06:06:35 it took me a while to make sense 06:06:44 but there are great youtube videos 06:06:59 I implemented shor's algorithm as an a level project 06:07:20 (not on a quantum computer, obviously; on a simulator on a regular CPU that did arithmetic on the quantum probabilities) 06:07:48 I had a pretty fantastic professor 06:07:50 i liked the point at one video where someone told he could emulate up to 8 qubits but that would take tbs of ram 06:08:05 -!- lambda-11235 has joined. 06:08:22 poor 15 06:08:33 everyone factorizes it because they don't have any other options 06:08:33 all the lectures were recorded and put up as private videos on youtube too 06:09:15 coppro: how useful is that as a student? they're trying to make that happen here but many of the staff are very uncomfortable with it 06:09:37 ais523: extremely 06:09:39 and gathering more data would be useful to help me know what my opinion should be 06:09:58 -!- hppavilion[wc] has joined. 06:10:01 ais523: and I even attended those lectures 06:10:33 putting them up privately is an interesting decision 06:10:35 there are a ton of students who write down everything the lecturer says, which I never really understood 06:10:53 some of them find it easier to learn that way 06:11:22 some of them just want reference material that actually matches up to the lectures (which rarely correspond to the textbook, if any, used) 06:11:26 some of them don't know better 06:11:36 ais523: also interesting that you say "staff" 06:11:45 -!- vyv has quit (Ping timeout: 244 seconds). 06:11:50 do you mean teaching staff? 06:11:56 coppro: what do you expect me to have said? but yes, teaching staff 06:12:16 I imagine the sysadmins are a little annoyed too but mostly in a "more work" sort of way 06:12:39 -!- vyv has joined. 06:13:47 what if "rejected" universes of the multiverse don't "selfdestruct" like in quantum bogosort but go backwards in time and make themselves impossible? (ok I clearly don't know enough about quantum physics to ask this but I'm still curious) 06:13:56 ais523: here, the distinction between "staff" and "faculty" is quite sharply draw 06:13:59 *drawn 06:14:15 Do some of students know how to write shorthand so that they can write everything they say? 06:14:15 ah right, probably just an international language variant thing 06:14:21 mad: it's not really a physics question 06:14:26 I'm aware of the word "faculty" being a word but am not really sure what it means 06:14:37 ais523: not neceessarily, because there's a class aspect to it 06:14:39 zzo38: possibly, but it's common for students to ask lecturers to wait so that the student can finish writing 06:14:51 so you can't, as a lecturer, really talk faster than the slowest student writes anyway 06:14:56 faculty are the professors and, increasingly, lecturers 06:15:01 @wn faculty 06:15:02 *** "faculty" wn "WordNet (r) 3.0 (2006)" 06:15:02 faculty 06:15:02 n 1: one of the inherent cognitive or perceptual powers of the 06:15:02 mind [syn: {faculty}, {mental faculty}, {module}] 06:15:02 2: the body of teachers and administrators at a school; "the 06:15:04 dean addressed the letter to the entire staff of the 06:15:06 university" [syn: {staff}, {faculty}] 06:15:22 and ranking administrators, of course, since they must be professors themselves 06:15:24 wordnet has a "syn:" on the words 06:15:37 wait, there's a rule that administrators must be professors? 06:15:39 ais523: many professors here simply go as fast as they can explain the math, and it's up to you to catch up 06:15:53 ais523: Anyone with authority over a professor must be. 06:16:07 coppro: Then you must learn shorthand writing 06:16:09 here the main problem with finding qualified people to administrate is to persuade them to take the job, few people want to 06:16:11 so department chairs, deans, some vice-presidents, and presidents 06:16:16 and the people who do are rarely suited for it 06:16:23 that's a problem here too, moreso at the department level 06:16:28 If it is up to you to catch up. 06:16:37 at the higher ranks, some academics are career administrators and move from school to school 06:16:53 the senior administrators don't actually teach, mind you 06:17:11 academia 06:17:46 well, there's a "central administration" which doesn't teach and isn't attached to a subject 06:17:49 there is a strong culture that academics should not be subject to non-academics' authoirty 06:18:07 but everyone associated with a subject, including as a head of school or whatever, teaches too, as far as I know 06:18:21 it depends how high up you are 06:18:29 and the size of your unit, etc. 06:18:30 what do you do about people like human resources, accounting, etc.? 06:18:37 those are the staff 06:18:39 "staff" 06:18:42 those people have a lot of authority, and sort-of need it to do their jobs 06:18:51 they do, but not direct authority 06:18:54 <\oren\> my dad deliberately takes more teaching work in order to avoid administrative work as much as possible 06:18:56 but they aren't generally academics and it doesn't make much sense for them to be 06:19:18 basically, no academic has a non-academic in their chain of command 06:19:27 doesn't mean that the non-academics have no power! 06:19:32 chain of command can be fairly meaningless at times 06:19:48 -!- hppavilion[wc] has quit (Quit: Page closed). 06:19:52 it's more a matter of principle really 06:20:06 <\oren\> usually they avoid a chain of command by having lots of commitees that my dad never attends 06:20:25 \oren\, what does your dad teach? 06:20:30 but it's also to reserve academic decisions to the academics 06:20:31 <\oren\> math 06:20:42 Only one math? 06:20:59 since the suppport staff don't make academic decisions, and they never have academics as reports, the academics can't be told what to teach/research by the non-academics 06:21:25 <\oren\> specifically, calculus, logic, and operations research (this year) 06:21:53 Nice! 06:22:14 coppro: we can basically be limited in what to research by what we can get funding for 06:22:20 which often depends on external entities 06:22:52 ais523: that's true here too 06:23:00 and the academics chafe against that, naturally 06:23:12 yes 06:23:17 in large part, the real chafing is against the government 06:23:17 some of the requirements are often bizarre 06:23:21 as I'm sure you have there too 06:23:57 hmm, I'm not sure, the government is many steps away indirectly, and the EU government probably matters more than the UK government for the purpose 06:24:16 although that's kind-of specific to being in Europe 06:24:30 the government controls the purse-strings, though 06:24:43 for instance, a lot of people here in Ontario are upset with the degree of enrollment growth at universities 06:24:51 feeling that it's diluting the quality of education 06:25:03 but the government has decided that funding is allocated based on enrollment growth so up it goes 06:26:00 oh, rapid increases in attendance can be a problem here too 06:26:46 we're building constantly to try to keep up; the building I'm in had its layout changed, e.g. all the common rooms were combined into one and the old ones were converted into offices, just to try to get more office space 06:26:56 As a student I'm not really privy to the inner workings of my university, but it got fined a couple of years ago for taking on more students than it could accomodate 06:27:14 <\oren\> well the problem is that people enroll in degrees and don't learn anything useful, and then complain that they can't pay their loans 06:27:22 About 300 students who were guaranteed on-campus accomodation were housed off-campus (I was one of them) 06:27:24 !ztest semanticsTest (>(>{})*1)%2 <<< 06:27:25 Lymia.semanticsTest: points -32.14, score 2.99, rank 47/47 06:27:27 and a bunch of the land nearby got bought up and now student accommodation is being built on it (in the passive because I'm not entirely sure who's responsible for that happening) 06:27:32 !ztest semanticsTest (>(>{})*1)%2 <<<<< 06:27:32 Lymia.semanticsTest: points -46.00, score 0.00, rank 47/47 06:27:48 !ztest semanticsTest (>(>{})%1)*2 <<< 06:27:49 Lymia.semanticsTest: points -32.14, score 2.99, rank 47/47 06:27:51 Lymia: that's equivalent to (>(>{})%1)*2 06:28:03 Taneb: I was on both of said senate and board as a student representative. It was a fascinating experience. 06:28:04 and some there was a bed shop nearby which had a slogan that's been much-quoted by my family: "if you can't buy a bed today, you are not in Beds Direct" 06:28:50 I'm not actually sure how to test which way it does it. 06:28:51 But, bleh. 06:28:52 <\oren\> but it is hard to blame people who are told they have to have "a degree in something" to get a job 06:28:56 oh. 06:29:00 it got demolished to build more student accommodation, we're a little upset about that 06:29:05 I guess it fits what the wiki says. :/ 06:29:18 (I assume the slogan worked, given that I did actually get my current bed from there) 06:29:23 "Any parentheses which directly contain braces after expansion of all interior parentheses must be terminated by a %." 06:29:32 ais523, where are they going to get the beds for the student accomodation 06:29:42 Taneb: I'm not sure 06:29:50 It implies that, by spec, (({})*2)%2 should be expanded like this: ({}{})%2 06:29:53 Which is invalid. 06:29:57 perhaps they took the beds out before they demolished it and are planning to put them back afterwards 06:30:04 Lymia: (({})*2)%2 is invalid by spec 06:30:09 That would make sense 06:30:14 however, zemhill treats * and % as synonyms 06:30:22 ais523, right. 06:30:23 because they're always uniquely distinguishable by where the {} are 06:30:35 I would have expected it to expand like this: (()%2)%2 06:31:06 Which would be a slightly different spec: ()% blocks are matched with their corresponding {} blocks, then expanded first. then ()* blocks are expanded. 06:31:41 ({({})%2})%2 is equivalent to (({{}})%2)%2 06:31:48 although it'd be a bit clearer if you used larger and different numbers 06:32:12 would a quantum functionnal language be possible? 06:32:25 (({{}})%5)%3 expands to ({({({{}})%5})%5})%5 06:32:32 I'd expect (({})*2)%2 to be valid, and expand to (()*2)*2 06:32:39 mad: well the thing about quantum computing is that everything has to be reversible 06:32:50 so you could start by trying to make a reversible functional language 06:32:56 I don't see why you can't make a declarative functional language. 06:33:00 Lymia: what does (a(b{c}d)*2e)%2 expand to? 06:33:01 Er 06:33:02 quantum* 06:33:31 oh, I think I see how you're parsing it 06:33:49 a(ba(bcd)*2ed)*2e 06:34:07 that actually works, I think 06:34:10 ais523, Under the scheme that distinguishes ()* and ()%? (a(b{c}d)*2e)%2 -> a(ba(bcd)*2ed)*2e 06:34:16 next question is "is it useful", but it probably is 06:34:59 But to be less confusing, the BF Joust page should probably just make having )* and )% synonyms is standard, and explain that the two symbols exist for historical reasons. 06:35:10 Or, at least. 06:35:43 Be clear that there's no distinction between )% and )* that lets you make nestings that implementation wouldn't 06:35:48 i see 06:35:52 Since they're explicitly forbidden. 06:36:26 we could arguably change the semantics again 06:36:41 the inside {} matches outside % rule is pretty new, and came out of a discussion in #esoteric 06:36:59 I still don't use it in any of my programs (even though it would have helped a couple of times) because I don't trust interpreters with it 06:37:20 (I don't consider the #esoteric hills to define BF Joust, although IIRC nyuroki was originally written for an implementation that didn't even support %) 06:37:49 That one had a completely different algorithm. 06:37:53 Basically a different program. 06:38:28 ah right 06:38:30 you just like the name? 06:38:37 Or, well. Yeah. Basically. Didn't check before decoys either. 06:38:42 Not quite 06:38:49 It was originally the same program. 06:38:54 Then lots of changes happened. 06:39:01 So maybe it should have a 2 on the end. 06:39:02 hmm 06:39:09 But it didn't 06:39:12 So it doesn't 06:39:28 margins3 is basically an entirely different program from margins except that it uses the same basic strategy of playing for a draw if conditions in the first few turns don't work out favourably 06:40:01 hmm, that is the first time I've used Firefox's "search for an open tab" thing intentionally 06:40:08 to get at the zemhill matrix 06:40:15 Both use the same basic strategy still too. 06:42:55 Lymia: btw I updated the wiki article to talk about decoy detection 06:43:39 I saw. 06:44:08 Basically, both versions set decoys, then go do a slowish clear. 06:44:35 that's a description of 90% of hilltopping programs over the last several years 06:45:02 -!- lambda-11235 has quit (Quit: Bye). 06:45:08 And its strategy for anti-lock was to nest another copy of the clear loop after it falls through (under some conditions) so it does make leaps of faith. 06:46:21 leaps of faith are something that IMO you can't do if you're looking for a 100% win rate, but may help if you're only going for topping the hill 06:46:39 certainly, it's possible to do very well by exploiting the existence of leaps of faith on the hill 06:47:29 * ais523 checks if anticipation2 is still there 06:47:41 0% lose rate rather, right? 06:47:51 If margins had no tripwire 06:47:53 it is 06:48:03 It would force leaps of faith, or else, you can't win. 06:48:15 But you'd probably take ties too, if margins is willing to. 06:48:15 Lymia: oh, by that, I mean it gets a better than 50:50 record against each other program 06:48:27 ah. 06:48:28 there are programs I've written before now that have pulled that off and /not/ topped the hill at that time 06:48:53 (although they did so later; in some cases I may have edited my own programs to lose to them temporarily to give them their moment at the top of the hill) 06:49:20 margins strikes me as not being the sort of program for which a 100% win rate is feasible 06:49:29 although I've been wrong before now 06:51:58 I should try to make a nyuroki 2, or something. 06:52:16 Keep the basic approach, but, actually react appropriately to different behaviors. 06:52:28 Instead of just skipping decoy setup and going straight to rush. 06:53:12 the thing is, the basic reactions to behaviours have become so standardised now that people have started exploiting them 06:53:24 omnipotence trips enemy tripwires intentionally then starts defending, for exampel 06:53:39 which tends to cause the opponents to assume fast rush and not use counter-defence mechanisms 06:54:48 What about.. 06:55:03 Set a tripwire right next to your flag, then do the reverse decoy setup? 06:55:04 Hrm. 06:55:27 Lymia: right, that's what most programs do at the moment 06:55:38 typically checking the tripwire every now and then, and panicking if it gets tripped 06:56:01 (the basic problem being that you can /detect/ that the enemy is on your flag, but it's much less clear what you're meant to do about it) 06:56:05 I'm trying to think of if there's a case where 06:56:17 I find a conflicting decoy setup, and it matters if the flag tripwire is broken. 06:56:18 various possibilities involve attempted locks, and careless clears 06:56:53 I might steal Margin's double tripwire here, and just attempt a lock. 06:57:07 well if the flag tripwire is broken as the result of a decoy clash you can typically assume that the tape's no longer than about 11 06:57:46 flag tripwire broken as the result of a deep poke or fast rush is much more likely 06:58:01 in either case, decoys aren't going to help, but it's less clear what you should do instead 07:00:20 I jumped straight to cell 14 if I didn't find a decoy conflict, in fact. 07:00:42 That might be a bad assumption though 07:00:54 Since it assumes reverse decoy setups from the opponents. 07:01:09 amazing how such a simple game has become so complex 07:01:30 maybe if I get really bored someday I'll do genetic evolution of bfjoust programs 07:01:34 Lymia: well, I think about BF Joust like this: 07:01:38 there are two main classes of programs 07:02:03 there's the "standard strategy" programs, for which the actual strategy changes slowly over time, but for which the programs tend to converge 07:02:11 and the "experimental" programs that are doing something weird 07:02:24 to do well you have to beat both classes 07:02:38 beating standard strategy programs normally relies on exploiting their common weaknesses (see, e.g. ais523.counterpoke) 07:03:06 I don't think BFJoust is ammendable to genetic evolution. 07:03:16 beating experimental programs relies on having a good, resilient strategy (such as a ton of large decoys) that's generally hard to defeat quickly 07:03:25 You'd need to smooth out the fitness landscape somehow 07:03:25 and having some sort of valid attack 07:03:36 now, the best programs for beating experimental programs are normally the standard ones 07:04:10 whereas a programs designed to consistently beat standard programs tends to have to be experimental 07:04:32 (but most experimental programs will fail to beat standard programs unless they identify a common weakness that allows them to do so) 07:04:41 Part of it might be that Nyuroki's flaws aren't standard at all, so, experimental programs fail to poke at them.. 07:05:35 I need to analyze nyuroki more, really 07:05:44 typically I run programs on tape length 25 against a few other programs to see how they work 07:05:50 because that allows you to see the "main strategy" 07:06:07 (you have more tape length to see the patterns play out) 07:06:16 but that doesn't really hold in cases where decoy clashes, etc., are an intended part of the duel 07:06:33 Is detecting short tape lengths relatively standard now? 07:07:02 I normally make some attempt at it but it normally isn't very successful 07:07:22 poking has been done for ages, and is definitely part of what I would consider the standard strategy 07:07:25 (although the form of the poke varies) 07:07:36 and poking gives a lot of clues about the tape length 07:07:42 it was pretty revolutionary when quintopia invented it 07:08:35 although Gregor's versions of it (the furry girls) are probably the most definitive; the original quintopia_poke was very primitive 07:09:35 Hrm. 07:09:48 Part of it is that you can only do so much in the earlier steps of the game. 07:10:05 wow, ffspg is down at #38 07:10:07 You can't poke after so long 07:10:09 how the mighty has fallen 07:10:19 Lymia: right, the first few turns are very critical 07:10:24 You think there's still time to do the reverse decoy setup thing after a poke? 07:10:34 do you aim to block enemy pokes, set up your own, or a bit of both? 07:10:37 and there's totally time 07:10:43 you leave a medium decoy on cell 6 or so 07:10:49 and hope that the opponent's poke didn't get inside it 07:10:58 But you might just see very directly that the tape is (probably) small. 07:11:00 I guess it makes sense. 07:11:07 although, ofc, time you waste doing that means that you may fail to get inside the opponent's decoys when you could have done otherwise 07:11:11 Leave decoy -> poke -> return to decoy setup. 07:11:31 If you get a decoy conflict *then*, either the opponent trails, or you're on a very small tae. 07:11:32 tape* 07:12:04 !egojoust is_this_working_yet (>)*8(>[(+)*8[-]])*21 07:12:07 err 07:12:10 !bfjoust is_this_working_yet (>)*8(>[(+)*8[-]])*21 07:12:35 hmm, yes 07:12:45 But what do you do with that information? 07:12:49 it'd probably work against preparation 07:13:09 also, knowing you're on a short tape should bias you towards fast rush programs 07:13:30 margins3's strategy on a short tape is basically a copy and paste of stealth3, but with some details changed 07:13:48 and the stealth series is a fast rush idea I had a while back that I never really got to work 07:13:51 This is sort of what my scripting language is for, at least. for($minimumTapeLength in 1 to 30) { > [ $mainBody($minimumTapeLength) ] } 07:13:55 but it works much better on short tapes 07:16:19 ... maybe evolutionary algorithm time? 07:16:19 !zjoust this_is_working_yet (>)*8(>[(+)*8[-]])*21 07:16:20 ais523.this_is_working_yet: points -8.14, score 13.81, rank 46/47 07:16:33 to be fair, I didn't expect it to do well 07:16:39 but it didn't come last! :-D 07:16:56 Start with a fixed block that distinguishes minimum tape lengths and some conditions. 07:17:10 And give the decoy constants, etc to an evolutionary algorithm to play with. 07:17:13 I have an evolutionary algorithm for tweaking constants 07:17:16 I didn't use it on margins3, though 07:17:28 I'd run it against the set of all programs that existed in BFJoust ever. 07:17:45 typically I only use it on programs that are close to the top of the hill to squeeze out a few more points 07:18:04 prooftechnique.helloerjan: points -33.14, score 2.92, rank 47/47 07:18:41 huh, how long ago was /that/ submitted 07:18:44 is prooftechnique online righ tnow? 07:18:48 Yeah 07:18:58 Just wanted to get on the board before bed :D 07:19:02 it's not a very complex-to-run program 07:19:06 so I suspect it was submitted by PM 07:19:59 I'll probably make a real effort tomorrow at work. I've been reading the wiki on and off all day 07:20:51 one thing I like about BF Joust is that you can compete against yourself indefinitely even if nobody else is playing 07:20:58 another thing I've noticed is that everyone has their own style 07:21:00 !zjoust rank45plz ---(>>++++)*4(>(-)*20([+{}[-.-+]])%500)*20([-.-+])*-1 07:21:01 Lymia.rank45plz: points -19.74, score 7.34, rank 47/47 07:21:04 :( 07:21:28 if I write a gimmick program I often see a lot of correlation between its score and the author of the program it plays against 07:21:48 Oh? 07:22:01 Also, I like reading the comments in your programs, ais523 07:22:24 !zjoust sometimes >(+)*128<(-)*128(+-)*-1 07:22:24 ais523.sometimes: points -5.21, score 14.91, rank 41/47 07:22:25 Very informative, and often entertaining 07:22:40 prooftechnique: well they're partly for me and partly for other people 07:22:49 sorry about the base64 07:23:09 I hope it wasn't too hard to get the program into a readable form 07:23:21 Not at all. A fish one-liner 07:23:46 Why the base64 anyway 07:23:48 I've even developed a sort of "comment grammar" that uses only BF Joust-safe characters 07:23:52 lots of semicolons rather than commas 07:24:04 I just went and made a macro processor for BFJoust 07:24:10 Which has a proper grammar for comments. 07:24:10 Lymia: it's encoding a Perl script 07:24:13 oh 07:24:16 That explains everything. 07:24:19 that generates the program 07:24:33 I base64ed it so that I could put it into the program's source without stray parentheses 07:24:39 The script grammar I wrote wasn't written to be BF Joust safe at all though 07:24:44 I just linked to the source instead. 07:25:31 linking's fine, and sometimes you have to do that (e.g. anticipation2, which is running up against code size limit) 07:25:40 Anyway, time for sleep. Maybe I'll think of a goofy joust gimmick in the meantime. Night, all 07:25:44 but I prefer to have everything in one place 07:25:45 night prooftechnique 07:26:08 people should be able to see how my program was generated just with a copy of the repo, in most cases 07:26:39 Hrm 07:26:51 Maybe a formal BFJoust spec is in order? 07:27:08 Like, BNF and hopefully unambigious semantics. 07:27:08 the wiki page is reasonably formal, and has become more so over time 07:27:26 also there's some debate about whether the % to {} matching thing even works in BNF 07:27:36 Don't describe it in BNF? 07:27:47 Describe ()% and {} seperately 07:27:52 And presume compilers resolve it at a later stage. 07:28:05 come to think of it, I'm not sure which categories of languages can describe it in a remotely semantic way 07:28:14 There's plenty of things in normal programming languages that you can't describe in BNF 07:28:33 I wonder if something like... 07:28:55 1#(2#(1#{2#{}})%2)%2 has any chance of working 07:28:56 Let's see. 07:31:21 Hrm, nope. Definitely not. 07:32:31 ais523, what do you do about "incompatible" semantics? 07:32:37 [wiki] [[BF Joust]] https://esolangs.org/w/index.php?diff=46505&oldid=44193 * Ais523 * (-4) /* External resources */ better (i.e. direct-linkable, also it's the original) link for the origins of BF Joust 07:32:46 Like nesting {} inside ()* inside ()% 07:32:51 By making ()* and ()% distinct 07:33:09 Lymia: the * meaning the same thing as % thing is just implementation convenience 07:33:21 Right. 07:33:26 But programs are written assuming it. 07:33:42 if we allow ()* in the a and b portions of a ()%, inside implementations would just have to suck it up 07:33:52 we've fixed programs via editing the hill manually to adjust them for spec changes in the past 07:34:10 there are some old hill-toppers with ([)*n in them 07:34:30 hr 07:34:31 hrm* 07:35:42 I wonder if it'd be possible to write new opcodes that expand to infinite (or extremely long) BFJoust programs. 07:36:14 -!- J_Arcane_ has joined. 07:36:15 -!- impomatic has joined. 07:36:22 -!- J_Arcane has quit (Ping timeout: 252 seconds). 07:36:28 -!- J_Arcane_ has changed nick to J_Arcane. 07:36:45 !bfjoust comex_the_first_program_ever (>)*9[-]+[>[-]+] 07:36:50 (adapted for current rules) 07:36:55 (and syntax) 07:36:58 !zjoust comex_the_first_program_ever (>)*9[-]+[>[-]+] 07:36:59 ais523.comex_the_first_program_ever: points -17.31, score 9.39, rank 47/47 07:37:03 also let's submit it to a hill that works 07:37:05 <\oren\> my interpreter needs your program to end 07:37:23 \oren\: ? 07:37:28 There's some cases where I wanted to do something in my BFJoust macro processor 07:37:40 <\oren\> but it may be possible to write one that can handle an infinite stream of bf characters 07:37:44 But it'd have to expand to a hundreds of megabytes long script. 07:37:52 Like 07:37:54 haha, it beats smartlock, probably because smartlock is so special-cased 07:38:17 Lymia: I'm aware of the problem 07:38:21 ${defmacro name ... ${name} ... ${name} ....}$ 07:38:28 in general it's the reason there's a program size limit 07:38:32 to stop people writing things that go exponential 07:38:39 the biggest example is an if/then/else 07:38:40 It'd expand to an exponential length program. 07:38:54 But it's expandable to BFJoust. 07:39:07 I wonder if it'd be worth it to integrate something like that into a hill? 07:39:14 a (if nonzero then b else c) d expands to a[bd]cd 07:39:35 which tends to blow up very quickly 07:39:38 It's not generally a problem like that. 07:39:42 due to the duplication of d 07:39:46 That doesn't blow up too quickly. 07:40:09 Trying to write the equivalent of continue or break does. 07:40:21 ah yes, break 07:40:31 there are so many cunning methods of writing break that I've seen 07:40:45 nyuroki's main loop is basically 07:41:04 (>[... {} anti-defense continue ...])*21 07:41:43 -!- J_Arcane_ has joined. 07:42:03 Lymia: you mean %21 07:42:21 also IMO that's inferior to the (>[clear][antidefence])*21 method 07:42:33 because it gets tricked by vibrators 07:42:42 It's more complex than that 07:42:44 It's actually 07:42:54 * ais523 checks the nyuroki versus anticipation2 matchup 07:42:55 (>([... {} [anti-defense] continue ...])*2)*21 07:43:09 The .. has a ()% somewhere in it 07:43:13 So i didn't include it 07:44:03 -!- J_Arcane has quit (Ping timeout: 240 seconds). 07:44:08 -!- J_Arcane_ has changed nick to J_Arcane. 07:44:41 ah, it comes down to timer clear, I think? 07:45:21 Yeah. The {} is supposed to represent exiting the timer clear. 07:45:35 was wondering if it hit one of the unimplemented cases in anticipation2 but it doesn't 07:45:42 everthing works fine up until the final defense loop 07:45:45 and then the lock just breaks 07:46:44 Is anticipation supposed to hide its flag? 07:46:56 yes 07:47:08 Nyuroki doesn't actually skip a cell unless it's zero for 0 cycles. (>([main clear loop])*2)*21 07:47:09 if the enemy doesn't vary clear pattern, its flag will always be 0 when encountered for the first time 07:47:22 ooh, ([main clear loop])*2 07:47:30 I like that 07:47:49 (normally I use a specific counter-defence clear loop after the main one rather than just running the main one twice, but those can be hard to write) 07:48:18 this is why it's called anticipation, it times the opponent's code and anticipates the moment the opponent will zero-check its flag 07:48:25 Also causes an exponential blowup. 07:48:33 Because break + two loops isn't compatible. 07:48:41 So I didn't do it. 07:48:53 Nyuroki is basically a long list of things I didn't do because the program would have exponential size. 07:49:16 tell me about it :-) 07:49:37 I like the restrictions that come with the size limit 07:50:14 How does anticipiation deal with timer clears? 07:50:17 Does it just not 07:50:21 actually, I designed a "minijoust" with the following rules: very serious length limit on programs (short enough that they all fit onto one line of IRC); and in the case of a timeout, whichever program ran the most . instructions wins 07:50:37 Lymia: right, they hadn't been around at the time 07:50:51 or, well, they'd been only recently invented 07:50:56 and most programs didn't use them 07:51:02 also it beats some timer clear programs via the vibration 07:51:54 But the ()*2 pretty much invalidates vibration. 07:51:58 yes 07:52:07 vibration is easy to defeat if you expect it 07:52:09 I don't think it hurts in any cases? 07:52:17 Nobody in their right mind is going to vibrate off their flag. 07:52:22 the only reason I wrote anticipation2 was because someone (maybe even me) submitted a vibration program for fun and it did unexpectedly well 07:52:44 I guess some fast rush programs genuinely can't spare the extra cycle 07:53:14 If it's fast enough 07:53:19 And hits cell 30 before cycle 128 07:53:24 it can't be vibrated, right? 07:53:41 And if it gets caught by a flag or a decoy, it can switch to something more careful. 07:53:49 Because it definitely isn't fast rushing anymore. 07:54:32 vibration programs normally leave a decoy to get enough time to zero their own flag 07:54:50 but yes, the reason you need to go quickly is to get inside the decoys of enemies that set multiple 07:55:16 it's nothing to do with vibrators 07:56:00 !zjoust parity (>+>-)*4(>+>([(+)*10([-{}[-.-+]])%500])*2)*-1 07:56:00 Lymia.parity: points -19.52, score 7.63, rank 47/47 07:56:10 !zjoust parity (>)*7(>+>([(+)*10([-{}[-.-+]])%500])*2)*-1 07:56:10 Lymia.parity: points -14.12, score 10.01, rank 47/47 (--) 07:56:24 IME parity is hardly ever a factor in matchups nowadays, except for sometimes lock-based ones 07:56:29 !zjoust parity (>)*7(>>[(+)*20[-]]))*-1 07:56:29 Lymia: error: parse error: terminating ) without a matching ( 07:56:37 !zjoust parity (>)*7(>>[(+)*20[-]])*-1 07:56:37 Lymia.parity: points -13.52, score 10.72, rank 47/47 (--) 07:56:39 -!- mroman has joined. 07:56:43 fnurd 07:56:46 @messages-load 07:56:46 boily said 14h 51m 28s ago: mrelloman. 07:56:50 I'm trying to win the even length tapes only 07:56:56 For the fastest rush ever. 07:56:56 ooh, impomatic is here 07:56:56 :P 07:56:59 Lymia: oh, I see 07:57:07 I think oerjan.netsnail worked like that? 07:57:38 an improved version of that is a fast rush program that only checks every nth cell for the first set cell, but rushes more normally once it finds one 07:58:30 !zjoust collision2 (>)*7(>>[([(+)*3[-[-]]>])*-1])*-1 07:58:30 ais523.collision2: points -8.62, score 12.87, rank 47/47 07:58:44 hmm, at this rate we might actually get somewhere :-) 07:58:49 !zjoust collision2 (>+)*7(>>[([(+)*3[-[-]]>])*-1])*-1 07:58:49 ais523.collision2: points -15.81, score 9.42, rank 47/47 (--) 07:58:53 This is such a difficult hill. 07:58:57 indeed 07:59:10 I think given enough time all hills become difficult 07:59:12 !zjoust totally (+--+)*-1 07:59:13 Lymia.totally: points -19.60, score 7.02, rank 47/47 07:59:17 I find that at this point, the best way to attack it is with a program that does something really unusual 07:59:20 If you made a rock paper scissors hill it would end up difficult 07:59:31 Well 07:59:36 Taneb: I don't know, the hill that was basically all turtles got beaten pretty quickly 07:59:36 That's the point of a hill, kinda. 07:59:38 ;p 07:59:48 Which hill? 07:59:51 and we'd been playing for a while when that happened 07:59:55 Lymia: old version of egojoust 08:00:05 turtles had only been recently invented 08:00:09 and they were doing really well 08:00:12 competent turtles, that is 08:00:21 people had submitted non-working versions of them in the past 08:00:21 ais523, cororoallary: if the hill is easy, you haven't given it enough time 08:00:32 hills get easier sometimes 08:00:58 there was that time when someone (not naming names, but wasn't me) submitted a bunch of copies of omnipotence with different names 08:01:02 I have no idea how to spell, or how to pronounce, corollororary 08:01:06 at the time, omnipotence beat every other program 08:01:17 so it pushed all the other progams off the hill 08:01:35 that hill would have been trivial to top, assuming you can come up with something that beats omnipotence (it's not hard, especially if you know how it works) 08:01:48 err, probably wasn't omnipotence 08:01:50 might have been waterfall3 08:01:58 I don't think omnipotence ever had 100% wins 08:03:23 oerjan: I see 08:03:52 I still want to implement my 100% win rate bot sometime. 08:03:59 Blatant autogeneration and hill fitting. 08:04:22 lots of people have had that idea 08:04:29 Has the EgoBot bfjoust healed yet? 08:04:34 no 08:04:35 it is a) probably possible to do in most practical cases; b) harder than it seems 08:04:47 who hosts egobot? 08:04:54 My idea was to decompose all "enemy bots" into tuples of "enemy bot, tape length, parity" 08:04:56 they should probably be pinged as I suspect it's pegging a CPU 08:05:02 Then run them all in parallel. 08:05:18 ais523: are you sure it's EgoBot, rather then the hill that's stuck? 08:05:19 So decide the best action on that tick, and advance every possible case at once. 08:05:20 Lymia: fwiw, it's possible to write a set of programs that it is impossible to collectively beat all of 08:05:23 b_jonas: no 08:05:32 that's why I only /suspect/ it's pegging a CPU 08:05:32 Yeah. Someone brought that up last time I talked about it. 08:05:40 But I don't think 47 bots is enough to do it. 08:05:49 :) 08:05:57 Lymia, I'd be surprised if 2 bots wasn't enough to do it 08:06:00 the simplest construction I'm aware of a proof for requires 768 08:06:08 I am surprised 08:06:11 ais523: yes, but you don't have to beat all of them at once. you just have to beat enough of that in each step to gradually push some off the heap, and eventually start beating enough to get to the top 08:06:15 Taneb, the key is 08:06:40 If three bots would do +, -, and . on your flag all on the same cycle. 08:06:41 b_jonas: hmm, clever 08:06:55 You just do ++ sometime beforehand, so your flag is 2 when the bots would clear it if it would be 0. 08:06:57 huh what? 08:07:05 what's clever? not achieving 100% wins? 08:07:14 yes, this devious gradual hill takeover 08:07:20 you get to the top of the hill with one bot without making it 100% win 08:07:26 you've done that multiple times 08:07:41 I wonder how hard an infinite hill would be to maintain 08:07:43 b_jonas: yes but most of the time it's because the program is genuinely better than any of the others 08:07:45 Or at least a huge one. 08:07:56 you even brought up how it's not obvious who the best Go player is that google should challenge or something 08:07:57 you could create a sort of Swiss hill 08:08:02 where programs only competed against those nearby 08:08:14 Lymia, you'd need a way to remove blurgh bots 08:08:46 fwiw the hill sizes are twice as big as they used to be 08:08:48 blurgh bots? 08:08:51 because we like the diversity in a larger hill 08:09:02 Lymia: I assume Taneb is talking about bots that do nothing useful 08:09:07 like the syntax check bots we had earlier 08:09:10 Yeah, those 08:09:14 Hrm. 08:09:16 hmm, what about this 08:09:22 if you have the exact same breakdown as a previous bot 08:09:28 What about a "qualifier"? 08:09:31 you don't get saved 08:09:34 A set of maybe 10-20 fixed bots. 08:09:43 That you don't get on the hill if you can't 100% sweep, or maybe beat 80% 08:09:50 that way, we only have one suicide, one nop, etc. 08:09:50 Nothing advanced or clever. 08:10:15 ais523: what? how would more than one of the syntax check bots even get to the hill? don't they lose too often to get on the hill? 08:10:22 Just a demonstration that you aren't a potato. 08:10:32 b_jonas, we're talking about an infinite hill. 08:10:45 a... what 08:10:55 A hill without a fixed size. 08:11:06 we could at least force people to beat simple 08:11:17 What'd be a good qualifier bot set? 08:11:23 a hill without a size limit makes no sense 08:11:43 (that said, quite a few highly advanced programs lose to simple because its lack of counter-anything causes it to be one cycle faster moving from one tape element to the next than it's possible to detect) 08:12:28 b_jonas, perhaps "hill" isn't the right term. Maybe "ladder" 08:12:33 Or something. 08:12:34 what you could do is lock a few hand-selected bots on the ill 08:12:46 Maybe a hill that's unbounded upwards but has a fixed bottom? 08:12:52 ais523, I'd say a set of basic (or not so basic?) bots that bots to get on the hill have to beat. 08:12:53 like, a few champions from each year that are hand-checked to make sense 08:12:57 plus a few basics 08:13:04 Say... 08:13:11 Like, if a submission loses to the 10 bottom it falls off the hill 08:13:11 don't make it obligatory to beat them, just lock them on the hill so the hill includes them 08:13:13 50% or 75% winrate against them to qualify in the first place. 08:13:14 Lymia: I guess we could write an intentionally bad implementation of each of the main strategies 08:13:14 int he score 08:13:22 as gatekeepers 08:13:27 no no 08:13:28 don't do that 08:13:39 b_jonas, if the hill is infinite 08:13:39 that would only let bots that work against _all_ strategies on the hill 08:13:47 There's no point in locking anything on the hill. 08:13:57 Because once a bot is on, it can't actually fall off. 08:14:16 why the heck do you even call it a hill then if you can't fall off? 08:14:20 The markov scoring should make it so that 90% potatos still doesn't affect the upper part of the hill much, right? 08:14:33 What would you call it, then, and why does it matter to you? 08:15:18 dunno, a pool or something 08:15:20 hmm, what about a hill that knocks off programs, not because they score badly, but because they're too similar to a better-scoring program 08:15:25 but I don't really understand how this would work 08:15:30 ais523: how would you detect that/ 08:15:32 using whatever similarity measure we want, maybe breakdown 08:16:15 ais523: would that make it impossible to add new programs similar to an existing one that aren't _yet_ as good as the original, but eventually might be? 08:16:18 Right now we use names as the "identifier" for replacing programs, right? 08:16:29 perhaps we find the two programs with the greatest number of matchups for which they both lose, and delete the one which has the most losses elsewhere 08:16:33 Lymia: yes 08:16:47 b_jonas: until you improved them, possibly 08:16:48 Hrm. 08:16:50 I don't see this as a problem 08:16:53 What about clustering bots somehow? 08:17:04 (note that you'd still get feedback on what the score would be, it just hasn't happened) 08:17:04 And keeping the 5-10 best of every cluster? 08:17:11 Lymia: fizzie's way ahead of you on the clustering 08:17:24 So, if there's a cluster that's too dense (detecting that somehow) 08:17:30 You cull just that. 08:17:36 Oooh! Going on a tangent a bit 08:17:53 Do you know of any BF Joust-y games that are more accessible? 08:17:55 here: http://zem.fi/egostats/tn_plot_cluster.png for breakdown cluster, http://zem.fi/egostats/tn_plot_heatclust.png for heatmap cluster 08:18:10 By which I mean, competitive programming games 08:19:04 Taneb: I think BF Joust is one of the most accessible; there's a whole wiki of them at http://programminggames.org/ (e.g. http://programminggames.org/BF-Joust.ashx) that you could look at, I guess 08:19:57 huh, BF Joust's even mentioned on the front page, under "programming games of note" 08:20:19 as is Final Fantasy XII 08:20:23 interesting interpretation of the genre, that 08:22:48 interesting thought experiment: given everything that we know about BF Joust now and didn't before, write a program for the original BF Joust that does something clever 08:23:08 "Original"? 08:23:10 the _original_ one? is that the one that's parity locked? 08:23:22 ais523: what was the tape size and program size limit for that? 08:23:22 b_jonas: no, the original's even older 08:23:37 Taneb, what do you mean by "more accessible"? 08:23:42 To non-esolang programmers? 08:23:42 tape size was 128-134 IIRC, and you died from a zero flag in one cycle 08:23:46 Lymia, yeah 08:23:53 Something like robocode, I think 08:23:55 ais523: right, and no dot command and no repetition syntax 08:24:05 fwiw, I've been thinking (as a far-future thing) about making a reflavoured BF Joust game 08:24:15 which is mathematically equivalent but less obviously connected to BF 08:24:18 It's not a "programming game" per se, like, BFJoust or Redcode. 08:24:37 redcode's the language; the game is called core wars 08:24:41 Opps 08:24:43 Core Wars* 08:24:44 Lymia: someone suggested https://www.codingame.com/ or something of a similar name. I don't know what those stuff are like, I don't care much about htem. 08:24:45 impomatic: Do you know of any BF Joust-y games that are more accessible? 08:24:49 Taneb, basically 08:24:51 you might be a good person to ask this 08:25:02 These games are more like conventional video games that a human could play directly too. 08:25:18 -!- AnotherTest has joined. 08:25:22 And the "programs" are AIs for them. 08:25:29 Like, say, a Starcraft AI hill. 08:25:34 That'd be in that category. 08:26:05 I think a human playing BF Joust in realtime would be interesting 08:26:10 allow them to hold down buttons to select a move 08:26:32 [ and ] would be a single instruction that told you if you were looking at a zero cell 08:26:32 ais523: and (] would be a single instruction that told ((<(<,'"'),<(<'you'),<(,'0');_),<(<,'"'),<(<'you'),<(,'0');_) were looking at a zero cell) 08:26:43 thank you j-bot 08:27:10 [ if 08:27:11 shachaf: if_syntax_ 08:27:18 [ and ] if 08:27:18 shachaf: (and ])if 08:27:43 you'd probably start off small, adding more commands along the way 08:27:51 BFJoust wouldn't really count, I think. 08:28:05 Since part of the metagame now is how limited programs are. 08:28:20 A human playing would effectively emulate an arbitrary length program. 08:28:23 yes 08:28:27 OTOH the human would have human limitations 08:28:43 maybe I'll program it with a very basic UI just to see how me personally does against the hill 08:28:49 I suspect I wouldn't do too well 08:28:53 Games would take forever. 08:29:06 Lymia: exactly, and there are many programming games that similarly wouldn't work, eg. the ant brain one which requires you to write a program for a very limited capability ant brain, ran separately on each of your ants 08:29:22 although there was a very different ant game that allowed any program 08:30:21 ais523, taneb: accessible is what way? Using an easier to use DSL or standard programming language but still capture the flag? Or a different genre of programming game? 08:30:26 (the first one is ICFP contest 2004, at https://alliance.seas.upenn.edu/~plclub/cgi-bin/contest/ , the second one was at http://ai-contest.com/ but that domain is now owned by someone completely different) 08:30:55 impomatic: was just relaying the question, I'm a little confused as to the meaning too 08:31:02 btw, new hill-topper 08:31:05 impomatic, I'd prefer one that you could use Python for, and you could watch it looking pretty 08:31:06 thanks for getting me back into the sport :-) 08:31:16 ais523, well. 08:31:19 Taneb: is egojsout not pretty? 08:31:28 The JoustExt thing I made, for obvious reasons 08:31:42 ais523, it has the disadvantage in that post people in the CS department here do not often program in brainfuck 08:31:46 Any program that can be written in it is equivalent to some Brainfuck program. 08:31:51 It could just be arbitary length. 08:32:15 I figured out a lot of neat tricks like how to implement effectively call/cc 08:32:21 Taneb: it might be an interesting experiment to allow arbitrary (i.e. not bf-limitations) programs 08:32:42 I fear defence would not work well (you could do things like random walk clears once your timer expired) but the other tactics would still work 08:32:54 your API would be forwards, backwards, up, down, and test, each of which would cost a cycle 08:33:02 Python has yield, which is perfect for this usecase 08:33:07 Do programs have to be deterministic? 08:33:07 http://www.programminggames.org/INJECTION.ashx / https://bitbucket.org/leeharr/pybotwar / https://github.com/sgimenez/laby are a few I've bookmarked 08:33:24 This is important to decide. 08:33:35 But the most popular seems to be RobotGame http://robotgame.org/ 08:33:36 Lymia: in brainfuck, yes, as it has no randomization facilities 08:33:45 Because otherwise, it'd be equivalent to a BFJoust variant with non-deterministic instructions. 08:33:51 Not BFJoust with arbitary length programs. 08:33:53 in other languages, I would say it helps for tournament structure if the program has to act identically each time 08:34:03 /but/ I don't see any reason to ban, say, seeded RNGs 08:34:20 impomatic: robotgame.org is NXDOMAIN 08:34:24 ais523. taneb@ RobotGame is in python and has a channel on freenode #robotgame 08:34:38 I'll ask in the channel about the domain :-( 08:34:56 ais523, ofc. 08:35:14 it's still equivalent to some arbitrary length BF program. 08:35:22 hrm. 08:35:26 only because of the cycle limit 08:35:31 Otherwise. 08:35:40 s/arbitrary/infinite/ 08:35:50 impomatic, I'll look into it 08:35:52 assuming you allow the system access to non-TC sources of information 08:36:11 (like a random number generator) 08:36:21 or, hmm 08:36:34 You can always rewrite the cycles 08:36:39 Like 08:36:45 taneb, ais523: might also be robotgame.net - seems to be up and down all the time :-( 08:36:47 Any time you execute a test 08:37:15 You can rewrite it to [a]b, where a and b are arbitary/infinite length programs. 08:37:18 a doesn't have to terminate 08:38:29 Assuming it's deterministic, at least. 08:38:42 Otherwise, it'd be BF plus a new instruction (I think) 08:38:44 Something like 08:38:54 *{a}b 08:39:06 Where *{} is 0 cycles, and executes a with a 50% probability? 08:39:24 That'd be an interesting extension to test as a BFJoust version. 08:39:43 *{a} is 1 cycle, and executes randomly 50% of the time. 08:41:13 -!- ais523 has quit (Ping timeout: 268 seconds). 08:51:48 -!- augur has joined. 09:08:52 [wiki] [[Lua Joust]] N https://esolangs.org/w/index.php?oldid=46506 * Lymia * (+1548) Created page with "'''Lua Joust''' is a competitive programming game, equivalent to [[BF Joust]] with arbitrary length programs. Instead of using [[Brainfuck]] as the language for warriors, '''L..." 09:08:59 -!- J_Arcane has quit (Ping timeout: 244 seconds). 09:09:01 opps 09:09:02 i meant to preview 09:09:11 Oh well, let's finish this. 09:18:15 -!- ais523 has joined. 09:22:56 ais523, I'm writing up a spec for BF Joust with arbitary Lua programs. 09:23:43 IMO this should be written in a way that easily generalizes to any language (at least any language with generators, but you can do them even in C via use of pthreads) 09:24:41 -!- augur has quit (Remote host closed the connection). 09:25:17 -!- AnotherTest has quit (Ping timeout: 248 seconds). 09:26:43 -!- augur has joined. 09:27:48 I'm writing it for Lua for now. 09:28:00 Since I want to include the provisions for determinism as part of the spec. 09:29:45 ais523, taneb: you can see a robotgame battle in action on the web archive http://web.archive.org/web/20160304042803/https://robotgame.net/ 09:31:04 hmm, it's hard to follow with all that many robots 09:32:04 -!- augur has quit (Remote host closed the connection). 09:33:18 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46507&oldid=46506 * Lymia * (+4238) Finish specification. 09:34:02 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46508&oldid=46507 * Lymia * (+13) 09:35:40 https://i.imgur.com/TJFEkDa.jpg 'Selling Dy notebook' 09:35:42 Dy 09:35:44 hmm, is it a BF derivative? 09:35:50 I guess it's a BF derivative derivative 09:35:53 guess why Dy 09:35:59 Don't ask me 09:36:03 There's no BF involved, but. 09:36:09 It shares the tape concept. 09:36:26 Notably, Lua Joust and BF Joust programs can theoretically share the same hill. 09:37:18 Not even theoretically. 09:37:20 They simply can. 09:37:54 [wiki] [[Lua Joust]] M https://esolangs.org/w/index.php?diff=46509&oldid=46508 * Ais523 * (+173) cats, minor clarification 09:38:17 Lymia: can I make a naming suggestion? instead of next and prev, use advance and retreat 09:38:26 .. hrm. 09:38:36 I think that definitely works. 09:39:11 also they're documented as equivalent 09:39:24 do you want to change it or shall I? 09:40:08 also they're documented as equivalent 09:40:11 What do you mean? 09:40:21 copy and paste error 09:40:24 they both increment the tape pointer 09:40:36 opps 09:40:39 Let me fix that 09:41:24 hrm 09:41:27 I think that if we want this to be accessible, it needs less computery and BF-y terminology 09:41:30 also an implementation 09:41:40 It's just a draft, so. 09:41:48 Is there a good way to say "towards the opposing flag"? 09:42:03 Without implying that it might turn around on the flag or past the end 09:42:44 I think it's probably best to say "forwards" and "backwards", then in the battlefield section, define that forwards is the direction from your flag to the opponent's, and backwards is the other direction 09:45:10 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46510&oldid=46509 * Lymia * (+59) Clarify advancing and retreating the tape pointer. 09:45:25 [wiki] [[User:Lymia]] N https://esolangs.org/w/index.php?oldid=46511 * Lymia * (+4) meow 09:46:05 I'd like to do a Lua implementation, maybe? 09:46:10 That should be relatively simple. 09:46:27 how good is lua at sandboxing subsets of itself? 09:47:08 impomatic: robot game looks interesting, i'd prefer another language though 09:47:10 while still gaining access to the bits it locked off 09:47:42 I remember when I wrote an automatic marking script for ocaml 09:47:46 bits of it ran inside the sandbox 09:47:49 Hrm. 09:47:52 It's decent. 09:48:00 and I had to figure out how to write string_of_char without access to anything in the standard library 09:48:03 Esp in Lua 5.3 rather than 5.1 09:48:18 Implementations in Lua have to worry about the string metatable and such 09:48:20 it took some discussion in #esoteric and #ocaml but I figured out a way in the end 09:48:22 Which can be used to escape the sandbox. 09:48:44 While a C implementation can just use two separate contexts. 09:48:58 (for anyone wondering: «let string_of_char c = (let s = ("" ^ "x") in s.(0) <- c; s)») 09:49:09 this is actually deprecated in recent OCaml, but it still works 09:49:43 I can see why it's deprecated; it's ridiculous :-) 09:51:18 myname: I haven't seen anything like Robotgame in other languages, but there are robot vs robot battle games in most languages 09:52:13 Berrybots in Lua, Scalatron in Scala have been active recently I think. 09:52:27 [wiki] [[Lua Joust]] M https://esolangs.org/w/index.php?diff=46512&oldid=46510 * Lymia * (+240) Add in a provision for Lua implementations. 09:52:42 robocode for java... but who likes java anyways 09:53:11 hrm. 09:53:18 I could define some convinence functions 09:53:19 Like 09:53:25 joust.plus(50) 09:53:34 Or joust.modify(50) 09:54:59 let people write their own, they're easy enough 09:55:01 Maybe get rid of the joust. namespace 09:55:15 Well, it's for convinence for when you write out full programs on an IRC line, and such. 09:55:17 and I have a feeling Taneb wants to use this as an "intro to programming" anyway 09:59:02 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46513&oldid=46512 * Lymia * (-96) Remove the joust namespace. 10:00:04 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46515&oldid=46513 * Lymia * (+2) Rename nop() to wait() 10:00:14 I should probably not treat this like git commits. 10:01:20 it's not a bad model 10:01:29 although note that the edit summary doesn't have space for a really long discussion 10:01:34 you have to use the talk page for that 10:01:45 it beats the useless summaries most people use 10:02:11 the main difference is that mediawiki edit summaries tend to be heavily abbreviated with a kind-of grammar of their own; complete sentences aren't wrong but they look out of place 10:05:42 I'm going to rewrite it to split the more technical details and a more "accessible" description. 10:06:52 hmm, I wonder if the concept of a reduced offset timer is worth mentioning in the strategies page 10:07:13 the idea is that you use an inflexible timer clear with a small timer, maybe only 100, and an offset 10:07:18 when it runs out you give up on the offset 10:07:28 the idea is that enemy programs rarely set small decoys behind large decoys 10:07:46 Explain further? 10:08:27 so the idea is, you do a timer clear, if a cell is cleared, you move on and offset while still under the same timer 10:08:39 as long as you're clearing small decoys you don't make much of a dent in the timer, so you keep going 10:08:40 Oh, i see. 10:08:43 So something like 10:08:50 when you hit a large decoy the timer runs out very quickly and you change strategy 10:09:03 (>(-)*10[+{} ... ])%100 10:09:04 Right 10:09:05 Er 10:09:10 >(-)*10([+{} ... ])%100 10:09:15 this is how margins3's clear loop works against defensive programs 10:09:16 Offset timer clear? 10:09:27 you put the offset after the ] 10:09:34 nowhere else to put it 10:09:43 (or before the [, it comes to much the same thing) 10:09:56 Nyuroki does basically that. 10:10:10 It uses an inflexible timer clear with an offset beforehand. 10:10:36 right, it's a sensible enough strategy 10:11:00 the main improvement is that older programs used to make the timer quite high (1000 or so) and I feel that lower ones work better 10:11:11 based on the principle that against large decoys, the best offset size is 0 or even negative (i.e. reverse offset clear) 10:11:45 What do you do when the timer ends? 10:11:51 I'm not sure I quite understand now 10:11:55 plain clear 10:11:57 i.e. no offset 10:12:01 on a second timer 10:12:17 or possibly a small reverse offset clear 10:12:27 say you predict all the enemy decoys will be at least 20 10:12:33 you do something like (+)*20[+] 10:12:44 20 cycles saved right there 10:13:25 (regardless of polarity, assuming that there is a decoy of 20 or larger on the cell) 10:14:10 I see. 10:14:10 so. 10:14:26 Optimize for decoys in the range of 1-a and b-128, or so? 10:14:39 And not work so well for decoys between a and b? 10:14:51 yep 10:15:00 Interesting. 10:15:24 this relies on the principle that people tend not to use medium decoys behind large ones 10:16:37 I guess one big general rule of BF Joust is "if there's /anything/ that programs consistently do, there's some way to exploit it" 10:16:58 although it took me a while to figure it out with rule of nine, I got there eventually 10:18:30 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46516&oldid=46515 * Lymia * (+890) Split the rules description into a detailed and "simple" section. 10:19:06 What's "large" and "medium" mean, in general? 10:19:40 Nyuroki, for example, uses decoys of size 20 against rushes and 50 for its larger decoys, then patches up its size 20 decoys to be size ~40. 10:20:00 small = detected by the start a wiggle clear, typically 1-3; medium = within the size of an offset clear but not small; large = beyond the offset of a typicaloffset clear 10:20:24 I see 10:20:29 So 50 would be considered large. 10:20:56 yes; a few programs do use offsets that large but it's probably a bad idea 10:21:23 [wiki] [[Lua Joust]] M https://esolangs.org/w/index.php?diff=46517&oldid=46516 * Lymia * (-1) Fix a mislocated ending tag. 10:21:33 uh 10:21:40 Why would an offset that big be useful 10:22:33 Think this makes it less technically dense? The Lua joust page. 10:22:57 Lymia: a bit 10:23:11 it would be good to not conflate the tape pointer with the program with the warrior 10:23:42 hrm. 10:23:48 I'm using "warrior" as a term for "program' 10:24:03 Suggestions for terminology? 10:24:16 "arena", "arena cell", "arena pointer"? 10:24:45 I think the best mental image is if the program controls the warrior, who is the pointer 10:25:24 I'm not sure I like the term "warrior" in that context. 10:25:28 Hrm. 10:26:49 Well. 10:26:58 "competitor" instead of "warrior"? 10:27:40 warrior == pointer, program, arena == tape? 10:27:43 Is that what you mean? 10:27:50 (@ais523) 10:28:01 -!- gniourf has quit (Quit: Leaving). 10:28:36 Is there some other easy to understand term for "pointer" available? 10:28:47 it's more that "pointer" is a very programmy term 10:28:53 but yes, warrior=pointer, program, arena=tape 10:29:03 "warrior" is also used as another term for "program" in stuff like Core Wars, right? 10:29:09 and possibly flag=tape element (with each program owning one flag and the others being neutral) 10:29:11 So I'd like to avoid using it for a subtly different meaning. 10:29:21 Lymia: I think so, but in core wars the programs are literally attacking each other's code and memory 10:29:30 I think "cell" is understandable enough. 10:29:35 in BF Joust, it's more like they're controlling an entity 10:29:48 I guess the difference is that you care about technical clarity and I care about flavour 10:29:59 Yes, "warrior" is also used in Core War. "battle program" is another term used in a few programming games 10:30:07 I'm writing it as a spec, after all. 10:30:16 Unambigious between implementations. 10:30:23 I'd like a middle ground though. 10:30:47 impomatic: how many programming games are like core wars in that the programs can literally alter each other? 10:32:57 ais523: at the moment I can only think of Darwin, Core War, CoreLife, CoreWar68000, CoreWar8086 and Binary Armageddon although there are probably more. 10:33:19 some of the competitive game-of-life based games, you could, I guess 10:33:24 (not sure how popular any of those are) 10:33:37 Most programming games are played by controlling an agent in an arena without any access to the opponent's code. 10:34:24 There's a very messy and incomplete wiki for programming games here http://programminggames.org/ 10:35:16 While we're on the subject, did I mention there's a Core War tournament in 3 weeks? $50 first prize http://corewar.co.uk/easter2016.htm 10:36:23 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46518&oldid=46517 * Lymia * (-200) Rename the "tape" to the "arena". 10:36:29 First step. 10:37:25 Is arena > cell understandable? 10:37:32 Hrm. 10:37:38 impomatic: I linked that wiki earlier :-) 10:37:46 I like the way BF Joust is cited on the main page 10:37:49 I get what you mean by using "flag" for cells though. Raising and lowering flags? 10:38:20 raising would strike me as meaning "away from zero" 10:38:26 I think of it as "clockwise" and "anticlockwise" 10:38:31 flag's on a continuous rope that forms a loop 10:38:36 highest point is 128, lowest point is 0 10:38:46 and depending on which way you turn, you can take it up/down either side of the flagpole 10:39:19 Anyway. 10:39:28 "program" controlling a "warrior' 10:39:36 I'm not sure how that terminology would read. 10:39:56 "advance() advances the warrior forwards one cell." 10:40:02 "plus() increments the cell the warrior is on." 10:40:03 ? 10:40:07 yep 10:40:16 hrm 10:40:21 I guess "space" would work if you don't like "cell", using board game terminology 10:40:49 To me, using "pointer" terminology is more clear, but, it wouldn't be to someone without C/etc experience. 10:41:14 I think "cell" should be fine. 10:42:27 Could also rename "cycle" to "turn" for board game terminology? 10:42:30 It's not really a cycle anymore anyway 10:43:42 "turn" is a good terminology 10:43:48 Oh! 10:43:51 What about "current cell" 10:43:55 Instead of "cell pointer" 10:44:10 "advances the current cell by one"? 10:44:15 "advances the current cell one space"? 10:44:16 How about a 2D version of BF Joust? Flags are in diagonally opposite corners. The agent could be a dwarf with a pick axe, chipping away at locations to decrease the cell value or depositing stone on a location to increase the cells value. If a cell's value is to different from it's neighbour, it could be a wall or chasm blocking your way. 10:45:03 -!- earendel has quit (Ping timeout: 244 seconds). 10:46:13 Lymia: that sounds like you're changing the cell itself, not the poitner to it 10:46:39 impomatic: presumably with this flavour it isn't wrapping, and there's some limit to how high you can increase a cell? 10:47:05 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46519&oldid=46518 * Lymia * (+711) Add numeric arguments to plus, minus, advance, and retreat 10:47:41 hmm, I think the arguments will make it much more confusing to follow the rules 10:47:56 because they take multiple turns 10:48:08 Hrm. 10:48:16 Oh, hold on. 10:49:01 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46520&oldid=46519 * Lymia * (-711) Undo revision 46519 by [[Special:Contributions/Lymia|Lymia]] ([[User talk:Lymia|talk]]) 10:50:15 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46521&oldid=46520 * Lymia * (+164) Clarify function numeric parameters. 10:51:01 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46522&oldid=46521 * Lymia * (+20) 10:51:31 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46523&oldid=46522 * Lymia * (+1) 10:51:32 There. 10:52:36 -!- jaboja has joined. 10:54:57 ais523, is this more clear? 10:55:00 yes, that seems clear enough 10:57:40 What about turn > cycle? 10:57:47 A cycle is both the program's turns. 10:58:58 -!- bender| has joined. 10:59:10 I like that, actually 10:59:49 so the description of a cycle is something like "both programs are executed; when a program runs an API command that takes a turn, it is paused. Then both commands happen and the programs resume executing." 11:00:12 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46524&oldid=46523 * Lymia * (-335) Distinguish 'cycles' and 'turns'. 11:01:04 [wiki] [[Lua Joust]] M https://esolangs.org/w/index.php?diff=46525&oldid=46524 * Lymia * (+27) Clarify text for test(). 11:01:46 .. hrm. Should "warrior's program" be a term? 11:02:03 A warrior is the warrior and the code that controls it. 11:02:08 (Conceptually) 11:02:19 I think that terminology would work. 11:03:56 -!- ais523 has quit (Read error: Connection reset by peer). 11:04:01 [wiki] [[Lua Joust]] M https://esolangs.org/w/index.php?diff=46526&oldid=46525 * Lymia * (+46) :) 11:04:07 -!- ais523 has joined. 11:04:16 .. hrm. Should "warrior's program" be a term? 11:04:17 A warrior is the warrior and the code that controls it. 11:04:17 (Conceptually) 11:04:17 I think that terminology would work. 11:04:58 a warrior is the warrior? 11:05:47 -!- scarf has joined. 11:07:41 -!- ais523 has quit (Read error: Connection reset by peer). 11:08:50 -!- scarf has quit (Read error: Connection reset by peer). 11:09:08 -!- scarf has joined. 11:09:29 ugh, pinging out enough to use second alternate nick :-( 11:09:29 * scarf has no idea if anyone will see tihs 11:09:32 -!- scarf has changed nick to ais523. 11:09:43 ooh, looks like it got through 11:10:35 D: 11:13:32 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46527&oldid=46526 * Lymia * (-49) Distinguish between the "program" and "warriors" 11:13:36 I think this works. 11:14:15 [wiki] [[Lua Joust]] M https://esolangs.org/w/index.php?diff=46528&oldid=46527 * Lymia * (+0) Move the ''turn'' to when the term is first introduced. 11:17:10 -!- ais523 has quit (Remote host closed the connection). 11:18:19 -!- ais523 has joined. 11:18:27 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46529&oldid=46528 * Lymia * (+360) Introduce one character aliases. 11:18:52 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46530&oldid=46529 * Lymia * (-1) 11:19:46 Now to implement 11:23:21 * impomatic is slowly working through TIS-100 but apart from maybe one of my solutions they're all fugly :-( 11:24:10 Lymia: gah you wrote brainfuck with a captal B 11:24:14 it isn't a proper noun 11:24:15 * ais523 fixes 11:24:29 opps 11:24:36 [wiki] [[Lua Joust]] M https://esolangs.org/w/index.php?diff=46531&oldid=46530 * Ais523 * (+0) caps 11:26:16 [wiki] [[Lua Joust]] M https://esolangs.org/w/index.php?diff=46532&oldid=46531 * Lymia * (-3) extra word. 11:30:20 ais523, could you give me some basic BFJoust programs to translate? 11:30:25 Most basic examples of strategies 11:30:49 Lymia: (>)*8(>[(+)*5[-]])*21 11:31:06 !zjoust basic_attack (>)*8(>[(+)*5[-]])*21 11:31:07 ais523.basic_attack: points -6.69, score 14.33, rank 46/47 11:31:24 wrt a basic defence program, it rather depends on whether you want to win or not 11:31:32 also I've become disconnected again, haven't I? 11:31:34 Nope 11:31:38 I don't htink so 11:31:55 if you see this, let me know next time I'm back online (assuming it's in the near future) so I know I don't have to resend 11:31:55 -!- ais523 has quit. 11:34:24 -!- boily has joined. 11:51:42 -!- AnotherTest has joined. 12:18:25 [wiki] [[Lua Joust]] M https://esolangs.org/w/index.php?diff=46533&oldid=46532 * Lymia * (-14) 12:20:09 -!- jaboja has quit (Ping timeout: 260 seconds). 12:21:03 -!- boily has quit (Quit: SOVIET CHICKEN). 12:21:55 -!- AnotherTest has quit (Ping timeout: 248 seconds). 12:24:38 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46534&oldid=46533 * Lymia * (+71) Use constants for the coroutine.yield values 12:26:30 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46535&oldid=46534 * Lymia * (+38) 12:45:15 -!- earendel has joined. 12:46:14 https://manuels.github.io/texlive.js/ neato, texlive compiled with emscripten 12:51:29 -!- gniourf has joined. 13:09:26 The esolang wiki ought to have a category for programming games now there are a few on there. 13:23:17 -!- J_Arcane has joined. 13:45:38 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46536&oldid=46535 * Lymia * (+92) 13:58:48 -!- jaboja has joined. 14:07:13 !ztest syntax (<)*-X1 14:07:13 Lymia.syntax: points -32.14, score 2.98, rank 47/47 14:09:01 !ztest syntax >()*xx-xx1[<<] 14:09:02 Lymia.syntax: points -32.14, score 2.98, rank 47/47 14:09:18 !ztest syntax >-[<<] 14:09:18 Lymia.syntax: points -46.00, score 0.00, rank 47/47 14:09:27 !ztest syntax >()*- [<<] 14:09:28 Lymia.syntax: points -32.14, score 2.98, rank 47/47 14:09:36 !ztest syntax >()*mmmm- [<<] 14:09:36 Lymia.syntax: points -32.14, score 2.98, rank 47/47 14:09:39 !ztest syntax >() - [<<] 14:09:39 Lymia.syntax: points -46.00, score 0.00, rank 47/47 14:10:16 !ztest syntax >()*xx+xx1[<<] 14:10:16 Lymia.syntax: points -46.00, score 0.00, rank 47/47 14:10:24 !bfjoust hi . 14:10:27 still ded 14:14:17 -!- `^_^v has joined. 14:26:30 Ded as a dornil. 14:30:53 !ztest ()*-1< 14:30:53 Lymia: "!ztest progname code". See http://zem.fi/bfjoust/ for documentation. 14:30:57 !ztest test ()*-1< 14:30:57 Lymia.test: points -46.00, score 0.00, rank 47/47 14:31:02 !ztest test (.)*-1< 14:31:02 Lymia.test: points -32.14, score 2.98, rank 47/47 14:34:43 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46537&oldid=46536 * Lymia * (-2) 14:37:59 "(<)*-X1" → "(<)*0 X1" → "". ">()*xx-xx1[<<]" → ">()*0 xx1[<<]" → ">[<<]". ">-[<<]" is just what it is. ">()*- [<<]" → ">()*0 [<<]" → ">[<<]". ">()*mmmm- [<<]" ditto. ">() - [<<]" → ">()*0 -[<<]" → ">-[<<]" (no * or % means () gets treated as ()*0). ">()*xx+xx1[<<]" → ">()*0 +xx1[<<]" → ">+[<<]" (explicit + not part of repeat count but also not "whitespace" that gets ... 14:38:05 ... skipped). "()*-1<" → "<". "(.)*-1<" is again just what it looks like. 14:40:24 Lymia: are you sure that Lua Joust is deterministic? 14:40:26 Somewhat inconsistently, "(.)*;4" is the same as "....", but "(.)*,4" is "". That's a bug. "," got accidentally added to the list of non-whitespace characters, even though it doesn't have any meaning. 14:40:48 b_jonas, it shoul dbe. 14:40:50 should be* 14:40:56 What would cause it not to be? 14:41:10 oh, bleh 14:41:18 There's ordering of hashes in arrays containing hashes. 14:41:21 Lymia: in Lua, you can iterate on the keys of a table, or get the length of a non-array table, and those aren't well-defined enough to be deterministic. I'm not sure if they are, that depends on the lua implementation. 14:41:28 I could remove pairs. 14:41:32 And that problem'll be gone. 14:41:36 pairs and next. 14:41:37 Lymia: no, it wouldn't be 14:41:44 Lymia: even the # operator can be nondeterministic 14:41:54 Explain in what cases? 14:41:57 Lymia: plus, removing next would limit lua SERIOUSLY 14:42:02 like, make it a much less usable language 14:42:13 Lymia: read the docs for # to know 14:42:14 um wait 14:42:20 what version of Lua is this based on exactly? 14:42:23 5.3 14:42:24 5.3 14:42:27 yes, then it stands 14:42:39 Again. 14:42:46 Explain what code would cause # to have nondeterministic behavior. 14:43:17 Lymia: I'm not sure it has, but the manual doesn't promise that it's deterministic, just like for the next function: http://www.lua.org/manual/5.3/manual.html#3.4.7 14:43:23 on tables that is (no problem on strings) 14:44:15 Lymia: basically, getting the length of a table is optimized so it doesn't have to read each element of integer key 14:44:42 AFAIK 14:44:49 From what I read of the code, the result is undefined, yes 14:44:57 But not non-deterministic. 14:45:06 That's a pretty critical difference. 14:45:12 -!- spiette has joined. 14:45:45 Lymia: yes, but unless you read the implementation, you can't tell if it's deterministic. It depends on the details of how tables work, just like the order of keys as returend by next. 14:46:06 I have read the implementation before for unrelated versions. 14:46:33 Lymia: in a not too old version? 14:47:36 Lymia: also, in recent versions, you have to modify the load function so that you can't load binary (precompiled) chunks 14:47:42 because that can lead to breaking the lua sandbox 14:47:45 I know. 14:47:47 loading text chunks is fine 14:47:48 I'm passing "t" to load. 14:48:08 Lymia: I mean, in the load function you give in the environment to the program 14:48:12 http://esolangs.org/wiki/Lua_Joust doesn't list this 14:48:19 Oh, I see. 14:48:41 I'll just remove load because I don't think there's a legitimate use for it. 14:48:50 Lymia: sure there is! evalling code 14:48:55 dynamically comptued code 14:49:01 but you can easily make a modified version of it 14:49:06 I'd like to see that program. 14:49:31 I have such an obfu somewhere... we're still on #esoteric, right? 14:49:58 hrm 14:50:27 hmm, actually I use loadstring 14:50:35 it's for an older version of lua 14:50:44 btu it would have to use load in lua 5.3 14:50:52 I think you can still extract non-deterministic behavior out of tables even if you skip non-safe values in next/pairs 14:51:20 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46538&oldid=46537 * Fizzie * (+4) /* Lua Environment */ I'm pretty sure this was a typo. 14:51:49 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46539&oldid=46538 * Lymia * (+246) 14:52:02 [wiki] [[Lua Joust]] M https://esolangs.org/w/index.php?diff=46540&oldid=46539 * Lymia * (+1) 14:52:13 -!- Lymia has left ("Hug~♪"). 14:52:18 -!- Lymia has joined. 14:52:19 opps 14:52:51 The only solution I can think of is disabling next and pairs. :c 14:53:12 -!- spiette has quit (Quit: :qa!). 14:53:19 -!- bender| has quit (Ping timeout: 250 seconds). 14:53:35 Lymia: but if you do that, then what you get doesn't resemble to lua much anymore 14:54:03 I could also do a very slow pairs() implementation 14:54:06 Which sorts 14:54:23 Lymia: can't you just (a) be careful with how you prepare the tables you pass to the program, and (b) set the hash seed to a fixed deterministic value so that any table the user creates is deterministic if you know its history? 14:54:39 b_jonas, the problem is allocation 14:54:48 The hash of, say, {} is its memory address. 14:54:54 oh... 14:54:55 ouch 14:55:04 that would be more difficult to fix, yes 14:55:40 -!- jaboja has quit (Ping timeout: 244 seconds). 14:56:05 Lymia: luckily for you the lua math standard library doesn't have a signbit or copysign function. The sign bits of NaN values from normal float arithmetic could depend on how you compile your code, but I think with the current lua standard library there might not be any way to extract the sign bit. 14:56:16 -!- spiette has joined. 14:56:27 I believe that'd be artitecture dependent. 14:56:31 Which I'm just going to have to live with. 14:56:41 No good ways out of that one. 14:56:44 Lymia: exactly, x87 has a saner rule for the sign bit than sse2 14:56:49 s/sse2/sse/ 14:57:06 no wait 14:57:42 bleh 14:57:44 x87 and sse also differ on the mantissa of the nan, but you can't generates nans with mantissa different from the "indeterminate" nan, so that doesn't matter 14:57:53 and x87 has the sane rule for them 14:57:57 The table data structure doesn't let me make the guarantees I want. 14:58:10 So I don't think just skipping over "bad" values in next will work. 14:58:22 and the sign of nans is actually undefined on sse (as in the documentation says that it's undefined, which is uncharacteristic for x86) 14:58:44 Lymia: could you fix the addresses too by allocating with a memory allocator you control from a pool of a fixed address? 14:59:02 Or from a pool of variable address, but modify the hash function? 14:59:08 That would eliminate any possibility of a Lua implementation. 14:59:15 It'd have to be in C, maybe with a patched Lua. 14:59:42 Lymia: ok, alternately, can you determine determinism if next returns only keys of certain types? 14:59:47 I don't know how the table works 15:00:00 I don't think so. 15:00:04 though there's still the problem with # of course 15:00:27 The hash table uses some algorithm that puts colliding elements in different slots, instead of a linked list. 15:00:27 I have looked at only very few parts of the lua implementation, not the table impl. 15:00:43 So bad elements (From what it looks like) can actually cause reordering in otherwise good elements. 15:00:54 # should be safe. 15:01:07 Ok, wait, what if you ask a hint from #lua here on freenode? They can handle crazy technical questions about lua as far as I remember. 15:01:35 Hrm. 15:01:37 I could remove next. 15:01:53 And replace pairs() with a custom deterministic ordering. 15:02:48 Lymia: you say "The tostring function is modified to not reveal the address of tables, threads, functions, or userdata." -- can exception formatting use the builtin tostring, which you could detect with xpcall? 15:03:11 Lymia: also, wait, can you catch "out of memory" errors from pure lua? 15:03:45 .. er. 15:03:59 I don't know. 15:04:17 I'm being evil here 15:04:19 I also thought of stack overflows, but. 15:04:48 wait wait 15:05:04 Running out of stack space. 15:05:06 you're allowed to set metatables on tables, right? 15:05:09 Yes. 15:05:17 Lymia: you say "The tostring function is modified to not reveal the address of tables, threads, functions, or userdata." -- can exception formatting use the builtin tostring, which you could detect with xpcall? 15:05:25 I can't figure out how to get that into an error message. 15:05:34 Calling error gets you (error object is a table value) 15:05:41 that means you can create a table with weak values, which means you can observe the garbage collector, right? 15:06:01 And __gc too. 15:06:03 But that's solvable. 15:06:10 go on 15:06:14 Those only matter on setmetatable() time, so. 15:06:19 You can just remove those values from the table. 15:06:38 If you add __gc or __mode to the metatable after you setmetatable, they don't do anything. 15:07:42 Lymia: what if __mode was already there but you modify it later? 15:08:38 Lymia: also, does the __mode of the metatable get possibly re-examined at the next garbage collection cycle? 15:09:22 I just mentioned that. 15:09:38 Hold on 15:09:54 "Note that if you set a metatable without a __gc field and later create that field in the metatable, the object will not be marked for finalization." 15:10:23 The same is not guarenteed for __mode in the secp. 15:10:24 spec* 15:10:25 Lymia: I think what you said about __mode is for older versions of lua 15:10:27 But, AFAIK, it still holds. 15:11:00 Lymia: I don't think so 15:11:43 Hrm. __mode was changed, yeah. 15:11:50 *snicker* 15:12:03 I sort of like lua for things like this, but good luck if you fix all this 15:13:14 OK. 15:13:15 Let's do this 15:13:24 Disable garbage collection while running the programs. 15:13:29 And run a cycle manually afterwards. 15:15:05 Eliminate GC non-determinism. 15:16:36 oh 15:16:47 you mean you won't re-create the lua interpreter between runs? 15:16:58 The implementation is in Lua. 15:17:11 I guess that is a solution. 15:17:11 I assumed you would, but it might not be necessary, if you recreate all of the environment (including the math table and stuff) 15:17:18 Yep. 15:17:20 -!- oerjan has joined. 15:17:36 pairs() is the only real nasty problem. 15:17:41 you might also have to recreate the metatable of strings, and stuff like that 15:17:56 getmetatable and setmetatable are patched to only set metatables on tables. 15:18:03 But I'll just remove them since __mode is an issue. 15:18:14 ouch 15:18:20 you remove them entirely? 15:18:26 I might. 15:18:43 I'll have to think about that. 15:18:56 is there some way to access the metatable of strings without getmetatable? 15:20:53 No. 15:21:04 getfenv used to be a problem 15:21:06 But not anymore. 15:21:11 `? metatable 15:21:30 metatable? ¯\(°​_o)/¯ 15:21:51 Lymia: ok, well good luck, and ask #lua 15:24:09 The other answer is to drop nondeterminism. 15:24:14 And allow random behavior. 15:27:30 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46541&oldid=46540 * Lymia * (+131) /* Detailed Rules */ 15:30:44 @tell ais523 but that's at least partly because I do most of my work in bed <-- i believe that doing ordinary activities in bed is considered bad for sleep hth 15:30:44 Consider it noted. 15:30:58 Hrm. 15:31:02 Different project. 15:31:08 Helloerjan 15:31:20 tafterneb 15:31:23 What's the best way to detect "potato" programs. 15:31:37 In BFJoust which are terrible and unlikely to be useful. 15:31:51 check for initial < hth 15:31:57 I intend to run a large hill of >10000 programs 15:32:19 How do I take the raw scores from that and figure out which programs are potato. 15:32:49 Lymia: recursively eliminate the programs with zero wins? 15:33:00 hrm 15:33:05 That'd indeed cull the worst of the worst. 15:33:12 But not the "maybe OK" programs. 15:33:28 Like. 15:33:37 `olist 1027 15:33:38 That ends as soon as you find a program where A beats B and B beats A 15:33:42 olist 1027: shachaf oerjan Sgeo FireFly boily nortti b_jonas 15:33:45 It doesn't actually have to do if they're any good or not. 15:33:48 but whether a program does well depends on the other programs on the hill 15:34:15 oolist 15:34:57 Lymia: how would you run a hill of 10000 programs? that would mean 10000**2 matches! you'd need a powerful set of computers for that, even if you write really optimized joust backends. 15:35:30 -!- p34k has joined. 15:35:35 Time 15:35:36 Lots o fit 15:35:38 of it* 15:35:52 but... um... 15:36:54 Volume! 15:37:25 ? 15:37:30 But what 15:38:08 just hack into a supercomputer hth 15:38:28 -!- lambda-11235 has joined. 15:38:29 then it should only take about 80 years. 15:39:38 It's 15:39:51 wait, he doesn't even mention that Banjo is freaking chaotic and could easily have voted the wrong way? 15:39:56 Only a hundred million matchups 15:40:01 That isn't too terrible. 15:40:08 As far as "computable things" goes. 15:40:12 `learn It's written with an apostrophe. 15:40:20 Learned 'it'': It's written with an apostrophe. 15:40:33 A week at worst, most likely. 15:41:59 > 100 * 100 * 42 15:42:00 420000 15:42:18 > 100 * 100 * 42 * 100000 -- :: Cycles 15:42:19 42000000000 15:42:32 -!- lleu has joined. 15:43:04 Lymia: assuming 1000 cycles a second, worst case that'll take 16 months 15:44:06 > 50 * 99 * 42 * 100000 -- :: Cycles, removing trivial matchups 15:44:08 20790000000 15:44:23 Still 240 days 15:44:44 1000 cycles a second? 15:44:59 Are you running it on a Pentium III? 15:45:19 Lymia: I have no instinct for how fast a cycle should be 15:45:41 -!- XorSwap has joined. 15:45:50 Or a 8086? That might get the 1000 cycles/s 15:45:56 It's orders of magnitude off. 15:46:00 Well then 15:46:09 You're in luck that I don't decide how fast things go 15:47:55 I'd say very conservatively maybe 1 million cycles a second. 15:48:02 um 15:57:56 Taneb, basically. If you estimate 1000 cycle/s 15:58:47 You're guessing 2 million processor cycles per BFJoust cycle at 2 GhZ. For one core. 16:01:07 I am way off 16:04:55 I'm measuring 0.019s per core for a full round of (.)*-1 vs (.)*-1 16:05:24 Which implies maybe 50 full rounds per second worst case 16:06:22 Giving 23 days. But that's if every match takes the full 100000 cycles. 16:06:50 So, around a week or so given 4 cores. 16:07:42 I'm not worried. 16:08:02 -!- _46bit has joined. 16:09:31 -!- J_Arcane has quit (Ping timeout: 252 seconds). 16:10:10 -!- mroman has quit (Quit: Lost terminal). 16:10:48 <_46bit> I came second in a Brainfuck competition! 16:11:48 _46bit: are you from york 16:12:00 <_46bit> yes! 16:12:09 Taneb here also participated 16:12:12 <_46bit> indeed 16:12:26 oerjan: we know each other 16:12:36 <_46bit> Taneb actually earned their prize 16:12:44 Lymia: IIRC, it takes on the order of a few seconds (less than three, I think) to run through the 1081 pairings zemhill's 47-program hill has. Assuming it was 2 seconds, and extrapolating to 10000 (so a factor of (10000*9999)/(47*46)), that'd be about ~100k CPU-seconds. That's barely over a day, and that's single-threaded. 16:12:53 <_46bit> I did something like FizzBuzz 16:12:59 <_46bit> and then nobody else entered 16:13:00 <_46bit> so I won 16:13:04 @bf ++++++++++[>++++++++++>+++++++++++>+++<<<-]>-.>+.-.<++++.>++++.<------.>++.+.---------.<.>++++++++.<++++++++.++++++.-.>-.<<. 16:13:04 congratulations 16:13:06 <_46bit> :-( :-) 16:13:08 congrats to both of you 16:13:18 @bf ++++++++++[>++++++++++>+++++++++++>+++<<<-]>-.>+.-.<++++.>++++.<------.>++.+.---------.<.>++++++++.<++++++++.++++++.-.>-.>. 16:13:18 congratulations 16:13:34 ah. 16:13:37 @bf ++++++++++[>++++++++++>+++++++++++>+++<<<-]>-.>+.-.<++++.>++++.<------.>++.+.---------.<.>++++++++.<++++++++.++++++.-.>-.>+++. 16:13:37 congratulations! 16:13:39 In practice 16:13:40 stupid. 16:13:55 I only actually have 5297 programs. 16:13:57 So cut that by 1/4 16:14:36 -!- J_Arcane has joined. 16:14:47 Also from an old hill -- "Simulated a total of 378501202 cycles in 45402 individual jousts for 1081 duels." That gives an average of 8337 cycles/[whatever term you want to use]. 16:15:59 11470 distinct programs, but. 16:16:09 If my canonicalization is good. 16:16:17 Only 5297 in effect 16:18:24 oh, well 16:18:25 nope 16:18:30 I definitely have canonicalization errors 16:20:51 hmm 16:21:35 fixed. 16:22:09 Ah, there's an actual number. 16:22:10 2014-09-22 19:53:50 ais523: gearlanced can run the entire hill (all 1081 program pairs) in 1.7 seconds on this system. 16:22:29 Is what I get for using regex. 16:22:37 How's torquelance? 16:23:00 None of the fancy variants have really been worth it, IIRC. 16:23:15 I did measure a 2x speedup from it 16:23:22 On a simple case 16:24:01 -!- XorSwap has quit (Ping timeout: 244 seconds). 16:24:09 but, urgh protobuf 16:24:21 Yeah, I kind of got carried away. 16:24:40 It's only for the visualization statistics, I think. 16:25:03 Most of my runtime in the version gathering phase 16:25:07 Is from hg 16:25:19 Oh, I guess it's for everything now. Sorry about that. 16:25:19 That thing is slow 16:25:35 I could probably honestly speed it up using git-hg 16:25:37 Let's try that 16:25:55 Well, the "ascii-based" protocol it had wasn't exactly pleasant either. 16:27:05 Anyway, using gearlanced to run a hill is quite a bit faster than calling gearlance individually for each pair. 16:28:13 Can has a torquelanced? :P 16:28:21 iunno 16:28:26 I should benchmark it for real sometime 16:28:30 To see if that stuff is actually worth it 16:29:19 I think wrenchlance worked better than torquelance in my own tests, but I haven't really been very rigorous about this. 16:30:04 wrenchlance invokes gcc 16:30:08 oh, but only once per pair 16:30:17 Er 16:30:19 program* 16:30:48 You could probably put together a torquelanced though 16:30:54 wrenchlance seems more resistant to taht 16:31:34 Not even a torquelanced 16:32:10 torquelance_multiple right_B right_B2 program1A program2A program3A program4A... 16:32:40 Huh, that's interesting. In a straight-forward "run the thing for each pair individually", http://sprunge.us/JHOS -- more elapsed-time but less user-time. 16:34:23 ? 16:34:31 Could it be from your shell script 16:36:39 Could be. These aren't really meant for benchmarking at all, it's part of the regression-testing thing. 16:36:46 I just stuck a "time" there for funsies. 16:36:51 -!- nycs has joined. 16:37:17 -!- `^_^v has quit (Ping timeout: 268 seconds). 16:44:23 -!- jaboja has joined. 16:48:29 Hrm 16:48:39 Maybe I could make do with a specialized program based off torquelance? 16:48:57 Reads BFJoust programs from stdin, compiles and does a full tournament on them in-memory 16:54:34 @tell ais523 mad: as I said, this is how quantum bogosort "works" <-- btw i think such things are not really believed possible; they're basically incompatible with the principle of unitary evolution - they require postselection, a feature which quantum mechanics does _not_ seem to support. 16:54:34 Consider it noted. 16:54:59 -!- J_Arcane has quit (Ping timeout: 244 seconds). 16:56:31 @tell ais523 That is, you can set up an experiment in which two paths (with indistinguishible results) cancel each other, but you cannot do that from inside that paths themselves, and there must always remain possible paths. 16:56:31 Consider it noted. 16:57:34 @tell ais523 (because unitary evolution means the total probability of all remaining options does not change.) 16:57:34 Consider it noted. 17:00:26 -!- AnotherTest has joined. 17:05:40 -!- J_Arcane has joined. 17:17:52 fizzie, so. Something more difficult 17:18:06 What do I do if I want full stats for 10000 v 10000 17:20:47 !ztest http://google.com 17:20:47 Lymia: "!ztest progname code". See http://zem.fi/bfjoust/ for documentation. 17:20:52 !ztest google http://google.com 17:20:52 Lymia: error: parse error: encountered { without suitable enclosing ( 17:21:08 Hrm 17:21:17 impossible things: html+bfjoust polygot 17:21:22 Or, well. 17:21:25 It's possible, but... 17:21:32 Only for one bfjoust program. 17:24:03 Lymia: that depends on how exactly you interpret HTML 17:24:35 b_jonas: if you interpret HTML using a brainfuck interpreter.... 17:26:06 you die 17:33:46 -!- XorSwap has joined. 17:34:44 -!- oerjan has quit (Quit: Later). 17:35:08 -!- XorSwap has quit (Client Quit). 17:41:51 -!- jaboja has quit (Ping timeout: 264 seconds). 18:00:48 -!- oerjan has joined. 18:01:01 !sh uptime 18:01:01 18:01:01 up 83 days, 11:14, 0 users, load average: 13.09, 13.15, 13.22 18:01:09 Lymia: which is just what you deserve 18:01:20 I mean, if you did that 18:01:45 !sh ps | grep lance 18:01:46 ​\ \ Signal 18 (CONT) caught by ps (procps version 3.2.8). \ Please send bug reports to or 18:01:54 wat 18:02:08 oh well. 18:02:12 (many brainfuck interpreters won't care, of course... and after the next > you'll be in safe territory again) 18:02:29 -!- oerjan has quit (Client Quit). 18:02:30 hmm, that's a cool one... 18:02:56 !sh ps | grep lance 18:02:56 ​\ \ Signal 18 (CONT) caught by ps (procps version 3.2.8). \ Please send bug reports to or 18:03:10 okay so apparently it does that every time :/ 18:03:16 \o/ 18:03:43 and what's !sh anyway 18:04:49 !sh pstree | grep lance 18:04:50 ​| | | `-report---gearlance] \ | | | `-report---gearlance] 18:05:10 Can you kill it? 18:05:18 Try killall -9 report 18:05:57 !sh grep lance /proc/*/cmdline 18:05:57 Binary file /proc/12604/cmdline matches \ Binary file /proc/12663/cmdline matches \ Binary file /proc/12728/cmdline matches \ Binary file /proc/13455/cmdline matches \ Binary file /proc/13547/cmdline matches \ Binary file /proc/13728/cmdline matches \ Binary file /proc/13988/cmdline matches \ Binary file /proc/14438/cmdline matches \ Binary file /proc/14988/cmdline matches \ Binary file /proc/15555/cmdline matches 18:06:43 * int-e isn't sure how much he can break there 18:06:45 !sh whoami 18:06:46 ​/usr/bin/whoami: cannot find name for user ID 1546733 18:06:59 !sh pstree -u | grep lance 18:07:00 ​| | | `-report---gearlance] \ | | | `-report---gearlance] 18:07:34 !sh pstree -u | grep report 18:07:34 ​| | | `-report---gearlance] \ | | | `-report---gearlance] 18:07:41 !sh killall report 18:07:42 report(995): Operation not permitted \ report(12604): Operation not permitted \ report(12663): Operation not permitted \ report(12728): Operation not permitted \ report(13455): Operation not permitted \ report(13547): Operation not permitted \ report(13728): Operation not permitted \ report(13988): Operation not permitted \ report(14438): Operation not permitted \ report(14988): Operation not permitted \ report(15555): 18:07:47 okay, nothing :) 18:07:53 Wish that'd work. 18:07:55 !sh pstree -u | grep report 18:07:56 ​| | | `-report---gearlance] \ | | | `-report---gearlance] 18:08:00 It needs doing. 18:08:08 !sh pstree -p | grep report 18:08:08 ​| | | `-report(995)---gearlance(31444) \ | | | `-report(12604)---gearlance(3138+ \ | | | `-report(12663)---gearlance(3138+ \ | 18:08:10 Check /tmp for goodies 18:09:05 -!- lynn has joined. 18:09:33 !sh du -s /tmp 2>/dev/null 18:09:34 4./tmp 18:09:59 I wonder if there's overflows and/or 'fun' to be had with gearlance. 18:10:11 probably? 18:10:18 If you can get it to run code as the same user as report. 18:10:22 And killit 18:11:09 Lymia: Well, zhillcrank.rb takes 4.121s of elapsed time to crank full statistics for the 47-program hill, so computationally speaking that doesn't sound like a problem. Though you'd probably need to adjust it to do some batching. The stat file for 47 programs is 8147534 and I would assume it to be approximately linear in the number of pairs. Extrapolating to 10k programs, that'd mean ... 18:11:15 ... 376814026207 bytes ~ 350 GB, which might not fit in RAM on many systems. (Especially since the in-memory representation probably has more overhead.) 18:11:38 s/8147534/8147534 bytes/ 18:12:16 You need gearlance, right? 18:12:18 For stats 18:12:24 No fancy lances. 18:12:32 Yes. 18:12:37 But it's not that slow. 18:12:55 I'd also like to modify it to generate .svg files instead of .png 18:13:01 To save on storage spce. 18:13:02 space* 18:13:31 Last time I tried 100x100 I remember problems with it using lots of space on disk. 18:13:33 Oh, you mean running the old-style egostats? That would be entirely impossible. 18:13:34 The final output 18:14:48 How so? 18:16:26 Because those scripts manage to use multiple gigabytes of memory to even run for the 47x47 case. 18:16:37 I assumed you just wanted the raw data. 18:17:33 (To do something with, I don't know what.) 18:18:09 Many (most?) of the plots also wouldn't really work for 10k programs. 18:25:58 !sh awk '{ print $22 }' /proc/{995,self}/stat 18:25:59 717423685 \ 721318974 18:26:26 > (721318974 - 717423685) / 100 / 3600 18:26:27 10.820247222222221 18:26:52 I think that's how long ago (in hours) that thing was started 18:27:49 I think I vaguely recall a discussion on how EgoBot's copy of gearlance predates the fix for empty loops. 18:28:07 oh is that the ()*-1 stuff? 18:28:41 I think so, yes. 18:28:50 Or some more complex forms. 18:29:06 (Like nested ones.) 18:31:53 hah, there's a !bfjoust command at 8:36, which fits my calculation 18:37:04 !sh grep -l report /proc/[1-9]*/stat | xargs awk 'p { print (s - $22)/100, "seconds ago" } !p { p = 1; s = $22; }' /proc/self/stat | date -f- 18:37:05 ​/bin/grep: /proc/9303/stat: No such file or directory \ Sun Mar 6 23:57:45 UTC 2016 \ Sun Mar 6 23:57:56 UTC 2016 \ Sun Mar 6 23:58:03 UTC 2016 \ Mon Mar 7 00:00:19 UTC 2016 \ Mon Mar 7 00:00:27 UTC 2016 \ Mon Mar 7 00:00:51 UTC 2016 \ Mon Mar 7 00:01:20 UTC 2016 \ Mon Mar 7 00:02:13 UTC 2016 \ Mon Mar 7 00:02:58 UTC 2016 \ Mon Mar 7 00:03:46 UTC 2016 \ Mon Mar 7 07:12:11 UTC 2016 \ Mon Mar 7 14:10:24 UTC 18:37:09 fizzie, so, better question. 18:37:17 zhillcrank outputs this, right: http://zem.fi/bfjoust/vis/cycles/ 18:37:33 How do you expect this UI to hold up to 10000 x 10000 warriors 18:39:13 00:56:23 !bfjoust pause ()*-1 00:56:26 ​Score for b_jonas_pause: 6.1 ... hmmmmm. 18:40:33 !sh date 18:40:34 Mon Mar 7 18:40:34 UTC 2016 18:40:51 !bfjoust live . 18:41:14 ah, that's the one: 00:57:44 !bfjoust pause ((({})*999999)*9999999)*999999 18:41:35 it's been broken since. 18:42:41 `? b_jonas 18:42:49 b_jonas egy nagyon titokzatos személy. Hollétéről egyelőre nem ismertek. 18:42:58 aha. 18:43:05 does it say that he's a bad person? 18:44:45 !sh grep -l report /proc/[1-9]*/stat | xargs awk 'p { print (s - $22)/100, "seconds ago" } !p { p = 1; s = $22; }' /proc/self/stat | date -f- +%d-%H:%M:%S 18:44:46 ​/bin/grep: /proc/15886/stat: No such file or directory \ 07-18:40:52 \ 06-23:57:45 \ 06-23:57:56 \ 06-23:58:03 \ 07-00:00:19 \ 07-00:00:27 \ 07-00:00:51 \ 07-00:01:20 \ 07-00:02:13 \ 07-00:02:59 \ 07-00:03:46 \ 07-07:12:11 \ 07-14:10:25 \ 07-07:36:46 18:45:34 !sh grep -l report /proc/[1-9]*/stat 2>/dev/null | xargs awk 'p { print (s - $22)/100, "seconds ago" } !p { p = 1; s = $22; }' /proc/self/stat | date -f- +%d-%H:%M:%S | sort | xargs 18:45:35 06-23:57:45 06-23:57:56 06-23:58:03 07-00:00:19 07-00:00:27 07-00:00:51 07-00:01:20 07-00:02:14 07-00:02:59 07-00:03:46 07-07:12:11 07-07:36:46 07-14:10:25 07-18:40:52 18:49:07 (these are the start times of the various report processes; presumably they all hang waiting on a gearlance process that's merrily consuming CPU cycles) 18:49:37 oh and the output is UTC 18:50:25 h,, 18:50:27 hm 18:50:29 Check their pid 18:50:55 995 is the first one (see above) 18:51:05 Er 18:51:06 Not pid, uid 18:53:29 -!- copumpkin has quit (Quit: Textual IRC Client: www.textualapp.com). 18:53:47 !sh ls -la /proc/995/stat 18:53:48 ​/bin/ls: /proc/995/stat: Function not implemented \ -r--r--r-- 1 5000 0 0 Mar 7 14:10 /proc/995/stat 18:53:49 -!- copumpkin has joined. 18:54:02 !sh id 18:54:03 uid=1236523 gid=1236523 18:54:07 !sh id 18:54:07 uid=1332109 gid=1332109 18:54:14 ... is it 100% random? 18:54:27 That could be fun if it randomly happens to be 5000 18:54:37 uname -a? :P 18:54:45 !sh uname -a 18:54:45 Linux codu.org 3.2.0-4-amd64 #1 SMP Debian 3.2.68-1+deb7u3 x86_64 GNU/Linux 18:54:51 can't you do that yourself? 18:55:01 !sh test 18:55:01 No output. 18:55:06 !sh test 18:55:07 No output. 18:55:07 huh 18:55:18 3.2.0 is old isn't it 18:55:40 I wonder if it fixes the keyrings exploit 18:55:40 !ls /boot 18:56:03 !sh ls /boot 18:56:04 ​/bin/ls: cannot access /boot: No such file or directory 18:56:09 !sh ls / 18:56:10 bin \ dev \ etc \ home \ lib \ lib64 \ opt \ proc \ tmp \ usr 18:57:20 !sh find / -perm -4000 18:57:20 ​/usr/bin/find: `/': Function not implemented 18:57:27 wut 18:57:29 !sh find / -perm 4000 18:57:29 ​/usr/bin/find: `/': Function not implemented 18:57:34 !sh busybox find / -perm 4000 18:57:55 find: /proc/tty/driver: Input/output error \ find: /proc/1/task/1/fd: Input/output error \ find: /proc/1/task/1/fdinfo: Input/output error \ find: /proc/1/task/1/ns: Input/output error \ find: /proc/1/fd: Input/output error \ find: /proc/1/fdinfo: Input/output error \ find: /proc/1/ns: Input/output error \ find: /proc/2/task/2/fd: Input/output error \ find: /proc/2/task/2/fdinfo: Input/output error \ find: /proc/2/task/2/ns: 18:58:00 !sh busybox find / -perm 4000 | paste 18:58:17 find: /proc/tty/driver: Input/output error \ find: /proc/1/task/1/fd: Input/output error \ find: /proc/1/task/1/fdinfo: Input/output error \ find: /proc/1/task/1/ns: Input/output error \ find: /proc/1/fd: Input/output error \ find: /proc/1/fdinfo: Input/output error \ find: /proc/1/ns: Input/output error \ find: /proc/2/task/2/fd: Input/output error \ find: /proc/2/task/2/fdinfo: Input/output error \ find: /proc/2/task/2/ns: 18:58:24 !sh busybox find / -perm 4000 2>/dev/null 18:58:40 -!- Reece` has joined. 19:01:25 !sh busybox ps ax 19:01:26 PID USER COMMAND \ 1 0 /lib/systemd/systemd --system --deserialize 17 \ 2 0 [kthreadd] \ 3 0 [ksoftirqd/0] \ 5 0 [kworker/u:0] \ 6 0 [migration/0] \ 7 0 [watchdog/0] \ 8 0 [migration/1] \ 10 0 [ksoftirqd/1] \ 11 0 [watchdog/1] \ 12 0 [cpuset] \ 13 0 [khelper] \ 14 0 [kdevtmpfs] \ 15 0 19:01:56 !sh ldd `which find` 19:01:56 ldd: exited with unknown exit code (139) 19:02:03 !sh busybox ldd `which find` 19:02:04 ldd: applet not found 19:02:26 !sh LD_PRELOAD=/lib/libc.so.6 ldd `which find` 19:02:26 ​/bin/bash: /usr/bin/ldd: No such file or directory 19:02:39 !sh LD_PRELOAD=/lib/libc.so.6 LD_LIBRARY_PATH="" ldd `which find` 19:02:40 ​/bin/bash: /usr/bin/ldd: No such file or directory 19:02:48 !sh ls /usr/bin/ldd 19:02:49 ​/usr/bin/ldd 19:02:53 !sh ls -alh /usr/bin/ldd 19:02:53 ​/bin/ls: /usr/bin/ldd: Function not implemented \ -rwxr-xr-x 1 0 0 5.8K Aug 16 2009 /usr/bin/ldd 19:03:01 !sh busybox ls -alh /usr/bin/ldd 19:03:01 ​-rwxr-xr-x 1 0 0 5.7K Aug 16 2009 /usr/bin/ldd 19:03:12 !sh busybox cp /usr/bin/ldd /tmp/ldd 19:03:12 No output. 19:03:19 !sh LD_PRELOAD=/lib/libc.so.6 LD_LIBRARY_PATH="" /tmp/ldd `which find` 19:03:20 ​/tmp/input.32686: line 1: /tmp/ldd: No such file or directory 19:03:26 !sh /tmp/ldd `which find` 19:03:27 ​/tmp/input.358: line 1: /tmp/ldd: No such file or directory 19:03:33 !sh ls /tmp 19:03:33 input.504 19:03:43 !sh busybox ls /tmp 19:03:44 input.693 19:03:50 !sh busybox ls -alh /tmp 19:03:51 ​-rw-r--r-- 1 5000 0 21 Mar 7 19:03 input.837 19:03:56 !sh busybox ls -alh / 19:03:56 drwxr-xr-x 2 0 0 4.0K Oct 12 2011 bin \ drwxrwxrwx 0 0 0 0 Jan 1 1970 dev \ drwxrwxrwx 0 0 0 0 Jan 1 1970 etc \ drwxrwxrwx 0 0 0 0 Jan 1 1970 home \ drwxr-xr-x 11 0 0 8.0K Dec 31 2011 lib \ lrwxrwxrwx 1 0 0 4 Jan 1 1970 lib64 -> /lib \ drwxrwxrwx 0 0 0 0 19:03:57 Hrm 19:04:00 Mount namespaces? 19:04:05 !sh busybox mount 19:04:06 rootfs on / type rootfs (rw) \ sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) \ proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) \ udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=477568,mode=755) \ devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000) \ tmpfs on /run type tmpfs (rw,nosuid,relatime,size=771108k,mode=755) \ /dev/xvda1 on / type ext3 19:04:13 !sh busybox mount | grep tmp 19:04:14 udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=477568,mode=755) \ tmpfs on /run type tmpfs (rw,nosuid,relatime,size=771108k,mode=755) \ tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev) \ tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k) \ tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755) \ tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=385556k,mode=700) 19:04:21 !sh busybox mount | grep /tmp 19:04:21 No output. 19:04:25 !sh busybox mount | grep / 19:04:25 rootfs on / type rootfs (rw) \ sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) \ proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) \ udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=477568,mode=755) \ devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000) \ tmpfs on /run type tmpfs (rw,nosuid,relatime,size=771108k,mode=755) \ /dev/xvda1 on / type ext3 19:05:15 !sh busybox ls /run 19:05:15 ls: /run: No such file or directory 19:05:20 !sh busybox ls / 19:05:20 bin \ dev \ etc \ home \ lib \ lib64 \ opt \ proc \ tmp \ usr 19:05:33 Mount namespaces, definitely. 19:05:39 !sh busybox ls /home 19:05:39 egobot 19:05:41 !sh busybox ls /home/egobot 19:05:41 egobot.hg 19:05:45 !sh busybox ls /home/egobot/egobot.hg 19:05:46 multibot_cmds 19:05:53 !sh busybox ls /home/egobot/egobot.hg/multibot_cmds 19:05:54 interps \ lib \ slox 19:06:00 !sh busybox ls -alh /home/egobot/egobot.hg/multibot_cmds 19:06:00 drwxr-xr-x 39 5000 5000 4.0K Feb 20 2011 interps \ drwxr-xr-x 2 5000 5000 4.0K May 31 2012 lib \ drwxrwxrwx 0 0 0 0 Jan 1 1970 slox 19:06:12 !sh ls /dev/shm 19:06:13 ​/bin/ls: cannot access /dev/shm: No such file or directory 19:06:15 !sh ls /dev/ 19:06:16 null 19:06:42 I only know about HackEgo sandboxing, I don't know if/how similar EgoBot is. 19:06:45 !sh busybox --help 19:06:45 BusyBox v1.14.2 (Debian 1:1.14.2-2) multi-call binary \ Copyright (C) 1998-2008 Erik Andersen, Rob Landley, Denys Vlasenko \ and others. Licensed under GPLv2. \ See source distribution for full notice. \ \ Usage: busybox [function] [arguments]... \ or: function [arguments]... \ \.BusyBox is a multi-call binary that combines many common Unix \..utilities into a single executable. Most people will create 19:06:53 !sh ldd `which busybox` 19:06:53 ldd: exited with unknown exit code (139) 19:07:06 It looks like there's something weird going on with the libc 19:07:13 busybox is usually static, so. 19:07:22 `? 19:07:22 Mmmmm... no. 19:07:36 I'll get revenge some day. 19:08:14 !sh (sleep 100) & 19:08:20 !sh id ; (sleep 100) & 19:08:31 !sh busybox ps axu | grep sh 19:08:31 115 0 [flush-202:0] \ 941 5000 /bin/bash PRIVMSG/tr_21.cmd PRIVMSG #esoteric !bfjoust comex_the_first_program_ever (>)*9[-]+[>[-]+] \ 953 0 /usr/sbin/sshd -D \ 967 5000 /bin/bash scmds/bfjoust bfjoust comex_the_first_program_ever (>)*9[-]+[>[-]+] PRIVMSG #esoteric !bfjoust comex_the_first_program_ever (>)*9[-]+[>[-]+] \ 990 5000 /bin/bash scmds/bfjoust bfjoust comex_the_first_program_ever 19:09:27 !sh busybox ps axu | grep gearlance 19:09:28 995 5000 ../report ../gearlance ../cache Deewiant_allegro.bfjoust Deewiant_pendolino.bfjoust Fiora_timestopping-mahou-shoujo.bfjoust Gregor_furry_furry_strapon_pegging_girls.bfjoust Lymia_aurora.bfjoust Lymia_flow.bfjoust Lymia_nyuroki.bfjoust Lymia_two_people_runn \ 6587 5000 /bin/bash PRIVMSG/tr_21.cmd PRIVMSG #esoteric !sh busybox ps axu | grep gearlance \ 6604 5000 /bin/bash PRIVMSG/tr_21.cmd 19:10:17 !sh busybox wget https://api.ipify.org?format=json - 19:10:18 wget: not an http or ftp url: https://api.ipify.org?format=json 19:10:22 !sh busybox wget http://api.ipify.org?format=json - 19:10:22 wget: bad address 'api.ipify.org' 19:10:29 !sh busybox wget http://api.ipify.org/?format=json - 19:10:30 wget: bad address 'api.ipify.org' 19:10:56 !sh busybox wget http://23.21.54.217/?format=json - 19:10:57 Connecting to 23.21.54.217 (23.21.54.217:80) \ wget: cannot connect to remote host (23.21.54.217): Connection refused 19:11:12 !sh busybox ifconfig 19:11:12 eth0 Link encap:Ethernet HWaddr AA:00:00:3E:AD:41 \ inet addr:64.62.173.65 Bcast:64.62.173.127 Mask:255.255.255.128 \ inet6 addr: fe80::a800:ff:fe3e:ad41/64 Scope:Link \ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 \ RX packets:16546593 errors:0 dropped:0 overruns:0 frame:0 \ TX packets:14196923 errors:0 dropped:0 overruns:0 carrier:0 \ collisions:0 19:11:37 !sh busybox ifconfig | grep Link 19:11:37 eth0 Link encap:Ethernet HWaddr AA:00:00:3E:AD:41 \ inet6 addr: fe80::a800:ff:fe3e:ad41/64 Scope:Link \ lo Link encap:Local Loopback 19:11:58 !sh busybox wget http://127.0.0.1/ - 19:11:58 Connecting to 127.0.0.1 (127.0.0.1:80) \ wget: can't open 'index.html': Permission denied 19:12:09 !sh busybox curl http://127.0.0.1/ 19:12:10 curl: applet not found 19:12:45 !sh busybox curl http://127.0.0.1/ -O - 19:12:46 curl: applet not found 19:12:50 !sh busybox get http://127.0.0.1/ -O - 19:12:50 get: applet not found 19:12:52 !sh busybox wget http://127.0.0.1/ -O - 19:12:52 Connecting to 127.0.0.1 (127.0.0.1:80) \ \ \ Codu \ \ \ \ \ \ !sh busybox wget http://64.62.173.65/ -O - 19:14:17 Connecting to 64.62.173.65 (64.62.173.65:80) \ \ \ Codu \ \ \ \ \ \ !sh busybox wget http://64.62.173.66/ -O - 19:14:22 Connecting to 64.62.173.66 (64.62.173.66:80) \ wget: cannot connect to remote host (64.62.173.66): Connection refused 19:14:31 !sh busybox wget http://8.8.8.8/ -O - 19:14:31 Connecting to 8.8.8.8 (8.8.8.8:80) \ wget: cannot connect to remote host (8.8.8.8): Connection refused 19:16:02 !sh wget http://google.com/ -O - 19:16:02 ​--2016-03-07 19:16:02-- http://google.com/ \ Resolving google.com... failed: Name or service not known. \ wget: unable to resolve host address `google.com' 19:16:57 -!- jaboja has joined. 19:20:08 !sh wget http://127.0.0.1/projects/hackbot/fshg/index.cgi/raw-file/0837befd290c/foo 19:20:10 ​--2016-03-07 19:20:08-- http://127.0.0.1/projects/hackbot/fshg/index.cgi/raw-file/0837befd290c/foo \ Connecting to 127.0.0.1:80... connected. \ HTTP request sent, awaiting response... 200 Script output follows \ Length: 4 [application/binary] \ foo: Permission denied \ \ Cannot write to `foo' (No such file or directory). 19:20:15 !sh wget http://127.0.0.1/projects/hackbot/fshg/index.cgi/raw-file/0837befd290c/foo -O - 19:20:16 ​--2016-03-07 19:20:15-- http://127.0.0.1/projects/hackbot/fshg/index.cgi/raw-file/0837befd290c/foo \ Connecting to 127.0.0.1:80... connected. \ HTTP request sent, awaiting response... 200 Script output follows \ foo \ Length: 4 [application/binary] \ Saving to: `STDOUT' \ \ 0K 100% 285K=0s \ \ 2016-03-07 19:20:16 (285 KB/s) - `-' saved [4/4] \ 19:20:45 !sh wget http://127.0.0.1/projects/hackbot/fshg/index.cgi/raw-file/0837befd290c/foo -O - 2>/dev/null 19:20:47 foo 19:20:58 !help 19:20:58 int-e: I do !zjoust; see http://zem.fi/bfjoust/ for more information. 19:20:58 ​help: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help . 19:21:34 !sh which gcc 19:21:35 ​/usr/bin/gcc 19:21:45 !fetch 19:22:21 Lymia: oh well, at least you can access files inside the hackego environment that way 19:22:25 `fetch 19:22:28 http://: Invalid host name. 19:23:03 !sh uname --kernel-release 19:23:03 3.2.0-4-amd64 19:23:19 !sh busybox uname --kernel-release 19:23:19 3.2.0-4-amd64 19:23:26 `fetch http://lpaste.net/raw/2845173683343851520 19:23:29 2016-03-07 19:23:06 URL:http://lpaste.net/raw/2845173683343851520 [26] -> "2845173683343851520" [1] 19:23:47 !sh busybox uname --operating-system 19:23:47 GNU/Linux 19:23:49 `pooch 19:23:54 !sh wget http://127.0.0.1/projects/hackbot/fshg/index.cgi/raw-file/tip/2845173683343851520 -O - 2>/dev/null 19:23:55 Testing something or other 19:24:04 `rm 2845173683343851520 19:24:08 No output. 19:24:13 !sh busybox uname --kernel-version 19:24:14 ​#1 SMP Debian 3.2.68-1+deb7u3 19:24:22 Strange. 19:24:36 !sh busybox ps ax | grep apache 19:24:37 2746 1000 /usr/sbin/apache2 -k start \ 2763 1000 /usr/sbin/apache2 -k start \ 3089 1000 /usr/sbin/apache2 -k start \ 3096 1000 /usr/sbin/apache2 -k start \ 3097 1000 /usr/sbin/apache2 -k start \ 3497 1000 /usr/sbin/apache2 -k start \ 8357 1000 /usr/sbin/apache2 -k start \ 13355 0 /usr/sbin/apache2 -k start \ 15913 1000 /usr/sbin/apache2 -k start \ 18503 1000 19:24:49 Is this Usermode Linux? 19:24:56 But if it is, why are there all these priviledged processes here 19:24:59 `uname -a 19:25:00 Linux umlbox 3.13.0-umlbox #1 Wed Jan 29 12:56:45 UTC 2014 x86_64 GNU/Linux 19:25:01 !sh busybox ps axu | grep apache 19:25:01 2746 1000 /usr/sbin/apache2 -k start \ 2763 1000 /usr/sbin/apache2 -k start \ 3089 1000 /usr/sbin/apache2 -k start \ 3096 1000 /usr/sbin/apache2 -k start \ 3097 1000 /usr/sbin/apache2 -k start \ 3497 1000 /usr/sbin/apache2 -k start \ 8357 1000 /usr/sbin/apache2 -k start \ 13355 0 /usr/sbin/apache2 -k start \ 15913 1000 /usr/sbin/apache2 -k start \ 18503 1000 19:25:13 it might be 19:25:47 `uname --kernel-release 19:25:48 3.13.0-umlbox 19:26:22 `uname --kernel-version 19:26:23 ​#1 Wed Jan 29 12:56:45 UTC 2014 19:26:44 !sh echo -e "\n\1" 19:26:44 ​\ \1 19:26:51 !sh echo -e '\n\1' 19:26:51 ​\ \1 19:27:09 !sh echo -e '\n\01' 19:27:09 ​\ . 19:27:21 !help 19:27:21 Lymia: I do !zjoust; see http://zem.fi/bfjoust/ for more information. 19:27:21 ​help: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help . 19:27:42 !help ne 19:27:42 ​Sorry, I have no help for ne! 19:27:56 !help 19:27:56 ​Sorry, I have no help for _! 19:31:26 -!- Reece` has quit (Read error: Connection reset by peer). 19:32:34 !sh top b 19:32:35 top - 19:32:35 up 83 days, 12:46, 0 users, load average: 14.34, 14.16, 14.09 \ Tasks: 241 total, 16 running, 225 sleeping, 0 stopped, 0 zombie \ Cpu(s): 0.6%us, 0.2%sy, 1.0%ni, 95.6%id, 2.6%wa, 0.0%hi, 0.0%si, 0.0%st \ Mem: 3855536k total, 3533808k used, 321728k free, 576588k buffers \ Swap: 0k total, 0k used, 0k free, 2309552k cached \ \ PID USER PR NI VIRT RES 19:33:05 soo, 95.6% idle, so it's probably not stuck on CPU 19:33:15 I think it's waiting for an external bfjoust server 19:33:52 which is why other commands work, only bfjoust doesn't work 19:35:31 !say a 19:38:19 !help "a b c" 19:38:19 ​Sorry, I have no help for _a_b_c_! 19:38:24 !help a b c 19:38:25 ​Sorry, I have no help for a_b_c! 19:39:06 !.empty 19:39:13 !sh ls /home/egobot 19:39:14 egobot.hg 19:39:17 !sh ls /home/egobot/egobot.hg 19:39:18 multibot_cmds 19:39:22 !sh ls /home/egobot/egobot.hg/multibot_cmds 19:39:22 interps \ lib \ slox 19:39:29 !sh ls -alh /home/egobot/egobot.hg/multibot_cmds 19:39:30 ​/bin/ls: /home/egobot/egobot.hg/multibot_cmds: Function not implemented \ /bin/ls: /home/egobot/egobot.hg/multibot_cmds/interps: Function not implemented \ /bin/ls: /home/egobot/egobot.hg/multibot_cmds/lib: Function not implemented \ /bin/ls: /home/egobot/egobot.hg/multibot_cmds/slox: Function not implemented \ total 8.0K \ drwxr-xr-x 39 5000 5000 4.0K Feb 20 2011 interps \ drwxr-xr-x 2 5000 5000 4.0K May 31 2012 19:39:34 !sh busbox ls -alh /home/egobot/egobot.hg/multibot_cmds 19:39:35 ​/tmp/input.1761: line 1: busbox: command not found 19:39:39 !sh busybox ls -alh /home/egobot/egobot.hg/multibot_cmds 19:39:40 drwxr-xr-x 39 5000 5000 4.0K Feb 20 2011 interps \ drwxr-xr-x 2 5000 5000 4.0K May 31 2012 lib \ drwxrwxrwx 0 0 0 0 Jan 1 1970 slox 19:40:38 !help () { :;}; echo vulnerable 19:40:38 ​Sorry, I have no help for __________echo_vulnerable! 19:40:46 !sh bash --version 19:40:46 GNU bash, version 4.0.28(1)-release (x86_64-pc-linux-gnu) \ Copyright (C) 2009 Free Software Foundation, Inc. \ License GPLv3+: GNU GPL version 3 or later \ \ This is free software; you are free to change and redistribute it. \ There is NO WARRANTY, to the extent permitted by law. 19:41:55 -!- XorSwap has joined. 19:42:13 !sh env x='() { :;}; echo vulnerable' bash -c "echo this is a test" 19:42:14 vulnerable \ this is a test 19:43:55 When was this system last updated 19:44:47 Lymia: it's possible that only the bash _inside_ the sandbox has that bug 19:45:32 !sh busybox ps axu | grep bash 19:45:33 941 5000 /bin/bash PRIVMSG/tr_21.cmd PRIVMSG #esoteric !bfjoust comex_the_first_program_ever (>)*9[-]+[>[-]+] \ 967 5000 /bin/bash scmds/bfjoust bfjoust comex_the_first_program_ever (>)*9[-]+[>[-]+] PRIVMSG #esoteric !bfjoust comex_the_first_program_ever (>)*9[-]+[>[-]+] \ 990 5000 /bin/bash scmds/bfjoust bfjoust comex_the_first_program_ever (>)*9[-]+[>[-]+] PRIVMSG #esoteric !bfjoust 19:45:45 !sh busybox ls /proc/941 19:45:46 attr \ autogroup \ auxv \ cgroup \ clear_refs \ cmdline \ comm \ coredump_filter \ cpuset \ cwd \ environ \ exe \ fd \ fdinfo \ io \ limits \ loginuid \ maps \ mem \ mountinfo \ mounts \ mountstats \ net \ ns \ numa_maps \ oom_adj \ oom_score \ oom_score_adj \ pagemap \ personality \ root \ sched \ sessionid \ smaps \ stack \ stat \ statm \ status \ syscall \ task \ wchan 19:45:52 !sh busybox ls -alh /proc/941/exe 19:45:53 lrwxrwxrwx 1 5000 0 0 Mar 7 18:57 /proc/941/exe -> /bin/bash 19:46:00 !sh busybox strings /proc/941/exe | grep "Bash version" 19:46:01 ​@(#)Bash version 4.0.28(1) release GNU 19:46:04 nope 19:46:11 Everything uses that version. 19:46:27 versio 19:46:49 !ztest suicide256 [-.] 19:46:49 b_jonas.suicide256: points -27.05, score 3.86, rank 47/47 19:47:09 !ztest suicide128 (-)*128(.)*-1 19:47:09 b_jonas.suicide128: points -37.71, score 1.83, rank 47/47 19:47:17 !ztest suicide1 < 19:47:17 b_jonas.suicide1: points -46.00, score 0.00, rank 47/47 19:48:05 !ztest suicide128 (-)*128(.-)*-1 19:48:05 b_jonas.suicide128: points -32.74, score 2.01, rank 47/47 19:48:15 !ztest suicide128 (-)*128[.-] 19:48:16 b_jonas.suicide128: points -34.76, score 2.08, rank 47/47 19:48:20 !ztest suicide128 (-)*120[.-] 19:48:21 b_jonas.suicide128: points -33.83, score 2.24, rank 47/47 19:48:27 !sh busybox cat /proc/941/personality 19:48:27 cat: read error: Operation not permitted 19:48:31 personality? 19:49:02 Weird 19:49:21 Oh, /exe is a symlink. hrm. 19:49:52 -!- l0de has left. 19:49:54 Lymia: you decided to remove load competely, rather than allowing it for strings? 19:50:01 in luajoust that is 19:50:19 For now. 19:50:25 Some hard to solve problems. 19:50:43 -!- hppavilion[wc] has joined. 19:50:47 Lymia: does "for now" mean you're prepared to re-run the hill if you add it later? 19:50:57 ? 19:51:02 It's not near ready for a hill yet. 19:51:04 sure 19:51:11 of course 19:51:36 And unless I can fix the determinism issues 19:51:38 It might never be 19:51:47 -!- hppavilion[wc] has quit (Client Quit). 19:52:10 right 19:52:18 I still suggest that you try asking #lua 19:52:35 maybe someone has already tried to make a deterministic variant of lua 19:53:42 -!- hppavilion[wc] has joined. 19:54:21 !sh -f=/tmp 19:54:22 ​/tmp/input.15005: line 1: -f=/tmp: No such file or directory 19:57:06 Taneb: I still want to make a BFOS. Perhaps you could help and we could include your banner maker as a feature? 19:57:17 !help () { :;}; killall -9 report 19:57:17 ​Sorry, I have no help for __________killall__9_report! 19:57:19 @messages-lud 19:57:19 Sgeo said 2m 16d 13h 29m 18s ago: http://www.h-schmidt.net/FloatConverter/IEEE754.html 19:57:29 !sh busybox ps ax | grep report 19:57:29 995 5000 ../report ../gearlance ../cache Deewiant_allegro.bfjoust Deewiant_pendolino.bfjoust Fiora_timestopping-mahou-shoujo.bfjoust Gregor_furry_furry_strapon_pegging_girls.bfjoust Lymia_aurora.bfjoust Lymia_flow.bfjoust Lymia_nyuroki.bfjoust Lymia_two_people_runn \ 12430 5000 ../report ../gearlance ../cache Deewiant_allegro.bfjoust Deewiant_pendolino.bfjoust Fiora_timestopping-mahou-shoujo.bfjoust 19:57:42 hppavilion[wc], I'm not sure that a banner maker is the most important part of an OS 19:57:54 Taneb: Yeah, but it 19:58:10 'd be a cool feature 19:58:13 !bf8 . 19:58:13 No output. 19:58:24 (I'm using a netbook with a shit keyboard) 19:58:30 !sh env 19:58:30 PLASH_FAKE_GID=0 \ XDG_SESSION_ID=1233 \ I_CMD=sh \ ARG_FILE=/tmp/input.18746 \ SHELL=/bin/bash \ TERM=xterm \ IRC_SOCK=/tmp/multibot.EgoBot \ XDG_SESSION_COOKIE=3c3b7af247c6eb1bba05718349f88198-1450975846.369246-2144293266 \ SSH_CLIENT=99.236.22.36 42058 22 \ IRC_NICK=Lymia \ PLASH_CAPS=conn_maker;fs_op \ SSH_TTY=/dev/pts/0 \ PLASH_FAKE_EUID=5000 \ USER=root \ LD_LIBRARY_PATH=/usr/lib/plash/lib \ PLASH_FAKE_EGID=0 19:59:06 !sh busybox env 19:59:07 PLASH_FAKE_GID=0 \ XDG_SESSION_ID=1233 \ I_CMD=sh \ ARG_FILE=/tmp/input.19296 \ SHELL=/bin/bash \ TERM=xterm \ IRC_SOCK=/tmp/multibot.EgoBot \ XDG_SESSION_COOKIE=3c3b7af247c6eb1bba05718349f88198-1450975846.369246-2144293266 \ SSH_CLIENT=99.236.22.36 42058 22 \ IRC_NICK=Lymia \ PLASH_CAPS=conn_maker;fs_op \ SSH_TTY=/dev/pts/0 \ PLASH_FAKE_EUID=5000 \ USER=root \ LD_LIBRARY_PATH=/usr/lib/plash/lib \ PLASH_FAKE_EGID=0 19:59:09 !sh busybox id 19:59:10 uid=1916107 gid=1916107 19:59:39 !sh busybox env | grep I_ 19:59:39 I_CMD=sh \ I_ARG=busybox env | grep I_ 19:59:55 !sh () { :;}; killall -9 report 19:59:55 ​/bin/bash: /usr/bin/killall: Function not implemented 20:00:11 !sh () { :;}; env; killall -9 report 20:00:12 ​/bin/bash: /usr/bin/env: Function not implemented 20:00:19 !help () { :;}; killall -9 report 20:00:19 ​Sorry, I have no help for __________killall__9_report! 20:00:25 Er 20:00:26 Taneb: As long as you 20:00:28 GAAAAH 20:00:35 !sh busybox ps ax | grep report 20:00:36 995 5000 ../report ../gearlance ../cache Deewiant_allegro.bfjoust Deewiant_pendolino.bfjoust Fiora_timestopping-mahou-shoujo.bfjoust Gregor_furry_furry_strapon_pegging_girls.bfjoust Lymia_aurora.bfjoust Lymia_flow.bfjoust Lymia_nyuroki.bfjoust Lymia_two_people_runn \ 12430 5000 ../report ../gearlance ../cache Deewiant_allegro.bfjoust Deewiant_pendolino.bfjoust Fiora_timestopping-mahou-shoujo.bfjoust 20:00:43 !help () { :;}; echo test 20:00:44 ​Sorry, I have no help for __________echo_test! 20:00:51 !sh () { :;}; echo test 20:00:51 test \ /tmp/input.21095: line 1: syntax error near unexpected token `)' \ /tmp/input.21095: line 1: `() { :;}; echo test' 20:00:54 're a God of Brainfuck, do you know of a floating point implementation for BF? 20:01:12 !sh () { :;}; echo $PID 20:01:13 ​\ /tmp/input.21441: line 1: syntax error near unexpected token `)' \ /tmp/input.21441: line 1: `() { :;}; echo $PID' 20:01:20 !sh () { :;}; echo $PLASH_FAKE_GID 20:01:20 ​\ /tmp/input.21595: line 1: syntax error near unexpected token `)' \ /tmp/input.21595: line 1: `() { :;}; echo $PLASH_FAKE_GID' 20:01:27 !sh () { :;}; echo $IRC_NICK 20:01:27 ​\ /tmp/input.21732: line 1: syntax error near unexpected token `)' \ /tmp/input.21732: line 1: `() { :;}; echo $IRC_NICK' 20:01:45 !sh () { :;}; busybox id 20:01:46 ​/bin/bash: /bin/busybox: Function not implemented 20:01:55 !sh () { :;}; echo `busybox id` 20:01:56 ​/bin/bash: fork: Function not implemented \ \ /tmp/input.22220: line 1: syntax error near unexpected token `)' \ /tmp/input.22220: line 1: `() { :;}; echo `busybox id`' 20:01:59 !sh () { :;}; echo `busybox id`; 20:01:59 ​/bin/bash: fork: Function not implemented \ \ /tmp/input.22320: line 1: syntax error near unexpected token `)' \ /tmp/input.22320: line 1: `() { :;}; echo `busybox id`;' 20:02:26 !sh () { :;}; export ARG_FILE="" 20:02:27 ​/tmp/input.22828: line 1: syntax error near unexpected token `)' \ /tmp/input.22828: line 1: `() { :;}; export ARG_FILE=""' 20:02:37 waaah 20:02:53 any particular reason you don't do that via /msg? 20:03:24 !sh () { :;}; export LD_DEBUG="all" 20:03:24 ​/tmp/input.23674: line 1: syntax error near unexpected token `)' \ /tmp/input.23674: line 1: `() { :;}; export LD_DEBUG="all"' 20:03:27 Not particularly 20:03:56 Lymia: Then start doing it via /msg 20:04:08 You sure like complaining 20:04:35 Lymia: I do 20:04:40 !sh env | sed s/=.*//g 20:04:41 PLASH_FAKE_GID \ XDG_SESSION_ID \ I_CMD \ ARG_FILE \ SHELL \ TERM \ IRC_SOCK \ XDG_SESSION_COOKIE \ SSH_CLIENT \ IRC_NICK \ PLASH_CAPS \ SSH_TTY \ PLASH_FAKE_EUID \ USER \ LD_LIBRARY_PATH \ PLASH_FAKE_EGID \ SOCAT_PID \ MAIL \ PATH \ _ \ PWD \ EDITOR \ PLASH_COMM_FD \ IRC_HOST \ IRC_IDENT \ PLASH_FAKE_UID \ SOCAT_VERSION \ I_ARG \ JAVA_ARGS \ SHLVL \ HOME \ LOGNAME \ SSH_CONNECTION \ XDG_RUNTIME_DIR \ SOCAT_PPID 20:04:50 (In fact, I might ask them myself.) 20:04:51 he also deletes teue wisdoms 20:05:11 !sh echo $LD_LIBRARY_PATH 20:05:12 ​/usr/lib/plash/lib 20:05:22 !sh LD_LIBRARY_PATH="" ps ax 20:05:22 Cannot find /proc/version - is /proc mounted? 20:05:41 !sh LD_LIBRARY_PATH="" busybox ps ax 20:05:42 PID USER COMMAND \ ps: can't open '/proc': No such file or directory 20:06:53 Lymia: I think you could permit later extensions of the luajoust built-in library while keeping determinism. You would have a table for this where you store exceptions, and rig the table with its metatable such that if the program tries to access a nonexistant entry, it blows up (with an uncatchable exception, same as you have to treat out of memory errors), and that the metatable can't be changed. 20:07:15 Lymia: you could also make a few entries (like load) in the global environment like that. 20:07:27 You'd have to permit accessing those elements if they're assigned first, for ease of use. 20:07:50 But actually lua does that already. 20:08:01 I believe that the X window system is very well designed, although some of the modern extensions seem to be worthless and/or should be optional. Also in some cases, protocol extensions probably are not needed anyways, to do something 20:08:11 Also, you'd have to make the table unnextable with its metatable. 20:08:39 For the BFOS, I'm adding {} for conditionals and * for pointers 20:09:10 !sh env x='(){:;}; echo vulnerable' bash -c "echo this is a test" 20:09:11 this is a test 20:09:13 hmm wait 20:09:21 do we have a lua 5.3 here to test? 20:09:24 !"sh" echo 3 20:09:27 if not I'll compile one locally 20:09:34 `lua --version 20:09:36 lua: unrecognized option '--version' \ usage: lua [options] [script [args]] \ Available options are: \ -e stat execute string 'stat' \ -i enter interactive mode after executing 'script' \ -l name require library 'name' \ -v show version information \ -E ignore environment variables \ -- stop handling options \ 20:09:42 `lua -v 20:09:42 Lua 5.2.1 Copyright (C) 1994-2012 Lua.org, PUC-Rio 20:09:48 local then 20:10:16 !sh a b c 20:10:17 ​/tmp/input.29799: line 1: a: command not found 20:10:21 !echo a b c 20:10:22 a b c 20:10:27 !help a b c 20:10:28 ​Sorry, I have no help for a_b_c! 20:12:58 !sh echo $ARG 20:12:58 No output. 20:13:57 !addinterp test bf () { :;}; echo vulnerable 20:13:57 ​There is already an interpreter for test! 20:14:03 !addinterp test_ss bf () { :;}; echo vulnerable 20:14:03 ​Interpreter test_ss installed. 20:14:09 !test_ss 20:14:09 vulnerable 20:14:27 !addinterp test_ss bf () { :;}; id 20:14:27 ​There is already an interpreter for test_ss! 20:14:29 !addinterp test_ss2 bf () { :;}; id 20:14:30 ​Interpreter test_ss2 installed. 20:14:31 !test_ss2 20:14:32 uid=5000(egobot) gid=0(root) groups=0(root),150 20:14:48 !addinterp test_ss3 bf () { :;}; $* 20:14:48 ​Interpreter test_ss3 installed. 20:14:50 !test_ss3 id 20:14:51 No output. 20:15:41 Lymia: further nastiness. string.format("%e", 1) calls the libc's sprintf or snprintf function, so on windows it will use one different formats (three digits for exponent instead of two, and some completely nonstandard output for infinity and nan) 20:15:49 ick 20:15:54 That 20:15:59 Might be problematic. 20:16:03 ("").format 20:16:17 But you could do string.format = nil in the global context if you really need to. 20:16:18 Hrm. 20:16:26 This requires thought 20:16:56 Lymia: also, I think on some platforms (at least windows) you can extract the sign and mantissa of a nan that way (I think the C standard actually allows that, it's only the particular format windows uses that's wrong) 20:17:10 Lymia: let me see if the default implicit number to string conversion also does this 20:17:21 as in, 1..(1.0e100/3) 20:17:23 Is it just %e? 20:18:27 Lymia: no, also %g and %E and %G 20:18:38 and I think %f is affected too because of nan 20:18:46 and I don't know if %a is affected or not 20:18:50 (and %A) 20:19:22 I'll look up how the number to string conversion works 20:24:47 * Lymia pokes int-e 20:26:34 what I do? 20:27:12 I mean I'm doing important things right now... like watching the lastest John Oliver youtube video. 20:30:29 My entire backlog: Lymia messing with bots 20:30:36 :P 20:31:28 -!- lambda-11235 has quit (Quit: Bye). 20:33:25 Lymia: it seems you can reveal the sign of nans by an implicit string conversion even on linux 20:35:20 ​Score for prooftechnique_fishbones: 0.0 20:35:20 ​Score for ais523_comex_the_first_program_ever: 13.0 20:35:20 ​Score for prooftechnique_test: 0.2 20:35:20 ​Score for b_jonas_pause5: 5.2 20:35:20 ​Score for ais523_attack1: 12.0 20:35:20 ​Score for b_jonas_dead: 0.0 20:35:20 ​Score for b_jonas_pause2: 5.2 20:35:21 ​Score for ais523_is_this_working_yet: 19.8 20:35:21 ​Score for Lymia_two_people_running_from_a_shark: 1.6 20:35:22 ​Score for Lymia_live: 0.0 20:35:22 ​Score for b_jonas_pause3: 5.2 20:35:23 ​Score for b_jonas_pause: 1.3 20:35:32 I fixed it. 20:35:49 two_people_running_from_a_shark :DD 20:36:00 Lymia: and it seems that ordinary number to string conversion also calls the system libc's sprintf 20:36:14 Lymia: so you're screwed 20:36:33 Lymia: basically, you'd have to change a LOT in lua 20:36:47 I am working on a Scala implementation of Lua 20:36:49 It's not far along, but. 20:36:51 It's a thing. 20:37:02 I could add a deterministic mode 20:37:07 Lymia: should I put notes about these on the esowiki page, or do you want to write them up instead? 20:37:11 You can go ahead. 20:37:15 scala? why scalar? 20:37:17 um 20:37:20 s/ar/a/ 20:37:30 Because it's the language I'm most proficient at. 20:37:56 ok 20:38:03 I'm not particularly interested in writing a Lua interpter in a language I'm not good at. 20:38:04 I don't really know anything about Scala 20:38:07 `? scala 20:38:09 scala? ¯\(°​_o)/¯ 20:38:18 It's a JVM language with functional programming features. 20:38:37 Has a few nasty warts, but, there's not much better in the JVM. At least, anything statically typed. 20:38:39 -!- Phantom_Hoover has joined. 20:38:46 I see 20:38:49 have you heard about Frege? 20:39:34 !bfjoust suicide dance ((>><)*10(<<>)*10)*10< 20:39:36 ​Score for Lymia_suicide: 4.4 20:39:37 yes and i'm disappointed it's not pronounced 'frayzh' 20:39:43 !bfjoust suicide_dance ((>><)*10(<<>)*10)*10< 20:39:45 ​Score for Lymia_suicide_dance: 4.4 20:40:15 it's fray-guh, right? 20:40:22 Lymia: anyway, fixing the string formatting in a customized lua would be possible, but for fixing the table stuff you'd probably need to write an entirely new implementation of tables (presumably one based on a balanced tree and a consistent comparison function) 20:40:38 Lymia: there is frege 20:40:40 You'd need to modify the lua core for either. 20:41:15 lynn: no, it's not 20:41:36 frege is a german name and to be pronounced german 20:41:44 !bfjoust suicide_dance ((>><)*10>(<<>)*10<)*10< 20:41:46 ​Score for Lymia_suicide_dance: 6.1 20:41:50 Dance! :D 20:41:58 that is an English approximation of the German name 20:41:59 Gottfried? I'm so bad with names 20:41:59 myname, yes it is 20:42:13 Gottlob. Close, but wrong. 20:42:19 yeah 20:42:25 i like frege 20:42:40 the point is, haskell is more convinient for me atm 20:43:37 fray-guh is a pretty good approximation to [ˈfreːɡə] 20:44:07 oh well, maybe english just sucks for that 20:44:25 All languages suck for that... 20:44:43 don't think sp 20:44:48 Pronouncing foreign words "right", that is. Approximations are fine 20:45:10 inglish is just incredibly bad since its own pronouncoation rules are completely broken 20:45:23 englidh even 20:45:27 yeah they can't even pronounce their own words correctly 20:45:29 well 20:45:46 english orthography is a complete mess, yes 20:45:52 today's not my day 20:46:09 but 'ay' for /e/ isn't bad at all 20:46:10 @google "dearest creature in creation" 20:46:25 how do you justify the dh in englidh? 20:46:25 Plugin `search' failed with: <> 20:46:32 @google "dearest creature in creation" 20:46:32 i hears that on youtube once 20:46:38 * int-e shrugs 20:46:47 Plugin `search' failed with: <> 20:46:48 i was like "dafuq is this shit" 20:48:10 https://youtu.be/tfRSvTSY0d4 20:48:27 e.g. https://www.cs.cmu.edu/~clamen/misc/humour/TheChaos.html 20:48:46 I guess youtube works as well 20:48:59 i like lindybeige 20:49:02 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46542&oldid=46541 * B jonas * (+1114) /* Unresolved Problems */ 20:51:32 looool i guess toRational in haskell gives you an injection from Real to Rational? 20:51:50 :t toRational 20:51:51 Real a => a -> Rational 20:52:01 types don't lie 20:52:35 (the numeric classes in Haskell are a bit of a mess from a practical perspective, and a huge mess from a theoretical one) 20:52:54 saw a reddit thread a while back full of haskellers saying that types are all the documentation you ever need 20:53:09 mmm 20:53:50 types help. types are valuable abstractions restricting program's behavior. but no, they don't fully describe functions. 20:54:16 @type inits 20:54:17 [a] -> [[a]] 20:54:18 it wuild make djinn incredibly useful 20:54:19 @type tails 20:54:20 [a] -> [[a]] 20:54:30 i mean who cares about the difference between fst and snd 20:54:39 Phantom_Hoover: that's visible in the type. 20:54:51 @type fst 20:54:52 (a, b) -> a 20:54:54 @type snd 20:54:55 wait yeah im idiot 20:54:56 (a, b) -> b 20:54:59 i was thinking (a,a) 20:55:21 who cares about the difference between K and KI! 20:55:36 (a,a) would have no advantage to [a], wouldn't it? 20:56:04 well you'd know there are exactly 2 things in it... 20:56:38 -!- XorSwap has quit (Quit: Leaving). 20:57:05 i suppose this is the same mindset that leads the categorically-inclined to write helpful textbooks that do things like define products purely with a universal property 20:57:10 -!- lynn_ has joined. 21:00:42 -!- lynn has quit (Ping timeout: 260 seconds). 21:07:52 -!- hppavilion[wc] has quit (Ping timeout: 252 seconds). 21:13:02 http://whatsmyuseragent.com/ this result was far sillier than I expected 21:13:11 myname: with ghc at least, (x,y) uses less memory than [x,y], too. 21:13:15 today I learned about the User-Agent history I guess @_@ 21:13:50 have you tried that with the Windows 10 "Edge" browser? 21:14:26 Lymia: I was wrong 21:14:37 (I forgot the result, but it was a long, long list of browsers) 21:14:44 on Chrome, I get Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36. 21:14:45 Lymia: nowhere do either of the two manuals say that the sign of nans in arithmetic is undefined 21:14:56 on Edge of course it is one longer, excellentttt 21:15:37 Both the sign and mantissa are deterministic for a particular instruction, but sse instructions use a different (crazy) rule for them than the x87 instructions (which us a sane rule). 21:16:29 [wiki] [[Lua Joust]] https://esolangs.org/w/index.php?diff=46543&oldid=46542 * B jonas * (-3) 21:17:15 fast and loose 21:18:17 b_jonas: does that include addition and multiplication too? 21:18:27 http://asset-a.soupcdn.com/asset/8754/6027_adb0.jpeg :D 21:18:38 int-e: yes 21:18:49 int-e: the result is that on sse, addition ISN'T COMMUTATIVE 21:18:56 I thought IEEE 754 was rather strict on those (though I guess you can choose a rounding mode that fits your purposes)... 21:18:59 ...ouch. 21:19:25 int-e: no, the IEEE doesn't tell which particular nan value (mantissa and exponent) the result has when it's a nan value 21:19:31 s/exponent/sign/ 21:19:38 int-e: it's rather strict on everything 21:20:06 well... hmm... all nans are equal (even though they compare as different) 21:20:20 so what about defined results? 21:20:46 int-e: um, what's your question? 21:22:41 int-e: the good news is that I think this might not come up on lua 21:22:48 hmm 21:22:58 oh wait 21:23:00 it does come up 21:23:01 b_jonas: does x + y equal y + x for all x and y such that x + y is defined? 21:23:13 (i.e. not NaN) 21:23:44 it comes up because you can generate both indeterminate and its negation, and then add them, and the result has a sign that depends on whether that addition is done on sse or x87, and in the case of sse, which order it's done in (the optimizer is permitted to commute it) 21:24:00 int-e: oh, so by "defined" you mean it's not nan? 21:24:04 yes 21:24:14 int-e: yes, in that case addition and multiplication is commutative 21:24:23 Okay. I don't care then. 21:24:31 (Except as a curiosity) 21:27:43 I care because it's annoying that they ruined the reproducibility of floating point arithmetic this way, when x87 had a perfectly good and documented way of choosing the particular nan result that was commutative and thus deterministic. 21:27:52 I just don't understand why they did it. 21:28:05 And since the sse version is also documented, it can't be fixed now. 21:29:07 That is, it could be fixed by introducing a set of new floating point instructions, or perhaps a new flag in the control register, and then adding a compiler flag, and running your code on cpus that support it. 21:32:05 I just don't understand why Intel did this. 21:33:17 Oh! 21:33:48 On the other hand, this could be used as the basis for an esoteric feature in a strongly typed programming language: 21:35:40 make the language have two floating point types of each size, implicitly converting in both directions. The first one is such that the mantissa and sign of nan values can be arbitrary, and the second one is where it's deterministic. 21:36:42 When you convert from the first type to the second, if it's nan, it's converted to a deterministic one (this can be done relatively quickly, between 2 and 7 instructions depending on what exactly you want), 21:38:39 the signbit function takes the second type as input, other arithmetic builtins take either type and propagate the types in a sane way. Stringification functions makes sure not to reveal details about nan. 21:39:41 You're permitted to explicitly reinterpret from the first type to the second, unless certain sandbox flags are set, but if you don't do that, then floating point arithmetic will be deterministic. 21:40:11 (Floating point transcendent functions are a different question. Those are not guaranteed to be deterministic, but in practice they might be on sane systems.) 21:40:23 `unidecode v̲e̲r̲y̲ 21:40:26 ​[U+0076 LATIN SMALL LETTER V] [U+0332 COMBINING LOW LINE] [U+0065 LATIN SMALL LETTER E] [U+0332 COMBINING LOW LINE] [U+0072 LATIN SMALL LETTER R] [U+0332 COMBINING LOW LINE] [U+0079 LATIN SMALL LETTER Y] [U+0332 COMBINING LOW LINE] 21:41:20 Presumably there'd also be unsafe stringification functions. 21:43:12 Also, the floating point functions that let you examine representation (take representation as integer, make from representation integer, bitwise ops) would also operate on the correct types. 21:43:48 In fact, if I wanted to make a deterministic interpreter, I could implement this in C++ to help writing the interpreter in an eso way. 21:44:49 Although in that case, unless you're writing a really optimizing interpreter, presumably all the float values the interpreted program works with will be represented as the first type floats, and fixed only before those few functions that need it. 21:50:29 -!- lynn has joined. 21:53:01 -!- lynn_ has quit (Ping timeout: 268 seconds). 21:55:40 -!- hppavilion[wc] has joined. 21:59:40 JVM would be nice for that 21:59:43 I can use strictfp. 21:59:59 And let the JVM take care of making sure floating point is deterministic for me. 22:00:55 Lymia: only if the stuff is statically typed. 22:01:33 if it's weakly typed, then it's better to just normalize the float before you do any operation where the nan representation matters, rather than to keep track of which floats are already normalized 22:02:44 That's what strictfp does. 22:03:03 I can write the code normally and let the JVM make all floating point operations do the right thing on all platforms. 22:05:46 -!- hppavilion[wc] has quit (Quit: Page closed). 22:08:15 -!- jaboja has quit (Ping timeout: 264 seconds). 22:10:37 -!- AnotherTest has quit (Quit: ZNC - http://znc.in). 22:31:32 -!- nycs has quit (Quit: This computer has gone to sleep). 22:39:09 -!- spiette has quit (Ping timeout: 250 seconds). 22:42:14 -!- augur has joined. 22:43:06 -!- augur has quit (Read error: Connection reset by peer). 22:43:17 -!- augur has joined. 22:43:20 -!- augur has quit (Remote host closed the connection). 22:44:33 -!- augur has joined. 22:49:12 -!- augur has quit (Ping timeout: 260 seconds). 22:50:25 -!- augur has joined. 22:55:05 -!- lleu has quit (Quit: That's what she said). 22:55:57 -!- augur has quit (Read error: Connection reset by peer). 22:59:09 -!- boily has joined. 23:14:27 `wisdom 23:14:33 java/java is a programming-language shaped collection of misfeatures 23:16:02 -!- oerjan has joined. 23:17:56 -!- augur has joined. 23:25:14 How cruel 23:26:16 Hellymia. I'd say Java is a nice core, wrapped in endless layers of Enterprise Abstraction. 23:26:42 and then it's AbstractTurtleFactories all the way down. 23:28:42 -!- XorSwap has joined. 23:31:38 Java the language and the JVM are... acceptable. 23:31:47 The ecosystem is a big nope. 23:32:34 yup. 23:32:41 `? php 23:32:43 php is the PigeonHole Principle 23:32:45 `? python 23:32:48 python? ¯\(°​_o)/¯ 23:32:49 `? ruby 23:32:50 Ruby is a programming language from Japan, that Eventually decided to support non-ascii characters. 23:32:54 `culprits wisdom/java 23:33:00 coppro 23:33:27 For example. 23:33:29 Scala is nice. 23:33:31 `? scala 23:33:32 scala? ¯\(°​_o)/¯ 23:33:34 Until you pull in a Java library. 23:33:43 And then have to go "wtf is this???" 23:33:48 Scala's syntax turns me off... 23:34:04 Is the syntax that weird? 23:34:10 It's still roughly C family 23:35:46 the syntax is weird. 23:36:08 It doesn't bother me anymore, at least. 23:36:19 But nor does any language I use. 23:37:25 The syntax is quite nice to me, but, perhaps I'm conflating its semantics with the actual syntax. 23:37:45 (Expression focused, most blocks return a reasonable value) 23:37:46 Lymia: needs more frege, still 23:43:49 You could possibly to make C compiling also target JVM? 23:44:55 -!- XorSwap has quit (Ping timeout: 252 seconds). 23:45:35 also, clojure is an option, too 23:45:54 from all the functional languages i know for jvm, i like scala the least 23:46:07 -!- boily has quit (Quit: DRYING CHICKEN). 23:51:42 * int-e cries. 23:51:50 int-e: hm? 23:51:57 This article was so good, until... "Meanwhile, a third tool, called Monte Carlo tree search, helps the system play strategically as well as tactically." 23:52:08 (source: http://www.theguardian.com/technology/2016/mar/07/go-board-game-google-alphago-lee-se-dol ) 23:52:41 int-e: btw girl genius: here goes nothing D: 23:53:17 what's going on with olist twh 23:53:30 shachaf: there was an olist earlier today? 23:53:33 *. 23:53:34 yes 23:53:35 (well, at least to my limited understanding, the tree search is really about the tactics, though it's a bit blurry because some tactics will be ingrained as patterns in the policy network as well.) 23:53:39 it's updating once a week now? 23:54:18 Someone participated in our university's "Introduction to AI" course's JVM-sandbox-based boardgame AI tournament thing with a non-Java JVM language, I think it might've been Scala. 23:54:47 All the other solutions were generally <100 kB, but theirs was something like 7 MB. 23:55:01 Because of all the libraries they had to include in the .jar to make it go. 23:55:38 so did anybody compare the source code size? 23:56:28 That wasn't one of the metrics. 23:56:38 oerjan: oh... big jump forward on that story arc 23:56:55 Yeah, Scala it was. 23:57:48 scala.util.parsing.* and scala.xml.* are particularly big chunks in here. 23:58:08 Also their .jar doesn't include the sources. 23:58:13 int-e: well they _were_ pressed for time, they're under attack after all. 23:58:36 The standard Ant build file we shipped did include .java files in the deliverable it made, but I guess they had to use their own. 23:59:09 oerjan: but even with the castle's help, extending their tunnels to the right location must've taken a while 23:59:30 oerjan: does Gil know about the poison? 23:59:35 int-e: oh. i thought you meant today. yes, it said it took months. 23:59:59 int-e: i don't know how he would. he _should_ be able to notice he's been stabbed...