00:08:24 -!- Sgeo_ has joined.
00:08:26 -!- Sgeo has quit (Read error: Connection reset by peer).
00:11:53 <Lymia> Starting to test out the BF Joust evolver for real at this point, since I have a lot of the core framework written.
00:12:32 <Lymia> In testing, the initial set of random programs contains at least one rudimentry attacker that can kill a bot that does nothing.
00:13:03 <Lymia> Don't have any mutation code yet, just random programs for "initialization".
00:13:41 <Lymia> `(->+[-+>(+.[[(+)*103+(+)*206>[(-)*103]]])*-1]{})*-1` - terrible program, but it IS an attacker and kills a bot that does nothing.
00:13:43 <HackEso> (->+[-+>(+.[[(+)*103+(+)*206>[(-)*103]]])*-1]{})*-1`? No such file or directory
00:28:24 <b_jonas> by "can kill a bot that does nothing", do you mean it can kill such a bot in the majority of the 38 tape-length-polarities?
00:29:07 <Lymia> It can kill `(.)*-1` on length+polarity combinations
00:29:11 <Lymia> It's a functional attacker, just an inefficient one.
00:33:06 <korvo> Lymia: Are you always evolving from the starting position, or are you also evolving mid- and endgame specialists?
00:33:31 <Lymia> bfjoust works by starting from the starting position.
00:37:12 <korvo> Yeah. But what if we evolved programs for other positions? Like positions where both jousters are on a flag cell?
00:38:45 <Lymia> That defeats the point.
00:39:40 <korvo> Oh, is this like one of the "Alpha" or "Zero" projects, learning from nothing? Sorry, I don't know where you're headed with your project. But I think it's cool nonetheless.
00:40:32 <int-e> "from nothing" -- full access to game state and a perfect black box implementing the rules is not nothing
00:41:35 <int-e> (I do realize that the context is bfjoust where this is possible. But the qualification is important for people who are dreaming of doing the same thing for languages, say.)
00:42:06 <b_jonas> so there's an esolang-adjacent thing that I've been wondering about, let me tell you.
00:42:12 <korvo> Oh, I don't even realize what's being learned! Sorry, is there a page I can read?
00:42:30 <korvo> I would have thought about learning the individual jousters via genetic tournaments, but I guess this is something else?
00:42:49 <Lymia> BFJoust is a corewars-like thing, where two programs run against each other via certain rules. There's a very restricted language in use, and the restrictions of that language are intentionally part of the match.
00:43:00 <Lymia> This is an evolver for the programs in BFJoust.
00:43:55 <korvo> Oh, okay. So I guess I should explain what I'm thinking more clearly.
00:45:03 <korvo> In chess bots, it's often useful to recognize that the game has entered an "endgame" phase characterized by lack of pieces. Solving the endgame can be qualitatively different from earlier parts of the game.
00:45:09 <b_jonas> you know how BASICs and APLs come with an interactive interpreter that has not only a REPL but also a line editor where you can modify individual lines of a program then re-save or re-run or continue the program, right? this works well on line printers as hardcopy terminals, because you can show just part of a program, typically a function, modify some lines by referencing line numbers (you can even add
00:45:15 <b_jonas> lines between existing lines because the line numbers are presistent during editing). it also works on single-line editable terminals, where you can run a repl command to edit a specific line, the editor prints that line and puts your cursor into it, you move your cursor in that line to edit the contents or line number of that line interactively, then press enter to save the line. but here I'm more
00:45:21 <b_jonas> interested on using such a line editor in IRC.
00:46:02 <korvo> In some jousters, it appears that it's useful to believe/approximate the location of the other jouster. In particular, if both jousters are on/near a cell which they both believe to be a flag, then they can enter a defensive or offensive mode which contests the flag cell.
00:46:30 <b_jonas> now the problem is that this kind of REPL+editor is great when you have a language like Fortran or C, where the program is made mostly of global functions with a short body and global variables, but less so in modern languages where you can have nested definitions and functions with upvalue bindings to them and first-class functions or classes created programmatically.
00:46:57 <korvo> So, it could be useful to try evolving endgame jousters and then composing them with other parts of Brainfuck programs to yield a composite jousting strategy.
00:47:51 <korvo> Lymia: That's all I was thinking. Does that make sense?
00:49:39 <b_jonas> so the task would be to design a language+REPL+editor with IRC interface that merges the good parts of the new and the old. this should be based on a language that's already well-known by many users, such as python or javascript or (god forbid) perl; but it should have an IRC interface where if you define a function/class/module or assign a variable in the most usual way in those languages then you can
00:49:45 <b_jonas> later retrieve the definition and edit it, or collect multiple recent definitions and put them into a module/namespace that you can later edit together if you know the name of any of its public (exported) names, while keeping them as a namespace so the definitions can refer to each other even if one of the names clash with a recent definition.
00:50:00 <esolangs> [[Anything]] M https://esolangs.org/w/index.php?diff=144528&oldid=144500 * Aadenboy * (+12) link to esolang:sandbox
00:50:22 <esolangs> [[Esolang:Sandbox]] M https://esolangs.org/w/index.php?diff=144529&oldid=144486 * Aadenboy * (+13) fixed
00:50:44 <b_jonas> this would be useful for doing simple programming experiments on IRC, like you can do with some existing IRC evaluator bots that support some form of persistent context, but also lets you easily modify existing experiments after the fact even if you didn't originally specifically save them but just typed them interactively.
00:51:05 <b_jonas> this can be useful not only for IRC of course, and there can still be other interfaces, like an editor through web.
00:52:43 <korvo> Yes. Going beyond documents.
00:52:46 <b_jonas> one solution that people did for this is the workspaces of the kind that computer algebra software usually has, with command-output pairs that you can have anywhere in an editable document and edit and run existing lines.
00:52:55 <b_jonas> (you can also put plain text in them)
00:54:36 <b_jonas> (sagemath if you need an example for such a computer algebra worksheet)
00:55:36 -!- ajal has quit (Remote host closed the connection).
00:56:41 <korvo> It also reminds me of content-addressed functional programming: closed-source stuff like Unison and Dark, but also Cammy and a few other small experiments.
00:58:15 <b_jonas> this could also exist for highly typed languages like C++/rust/haskell, but a dynamically typed scripting language like python/perl/javascript works better for quick experiments on IRC, so you can consider the former a harder version of this esoteric thing
00:59:47 <Lymia> https://dl.aura.moe/paste/lymia/report_1cjp61nsa2rh6bmslz549f4rxk1jkv7ad2rw6iq6hi2mr8pyi8zp.txt
00:59:56 <Lymia> Generation 0 stats for the evolver are looking surprisingly good. :o
01:00:23 <Lymia> From the initial program set, most of the hills have a handful (or more) of programs with viable strategies.
01:00:29 <Lymia> So, evolver should have something to seed from.
01:01:46 <b_jonas> Lymia: what I'd like to see is a generator that's not black box but specifically traces and backtracks over the matches against the programs in the current hill and tries to fool those 37*19*2 games and their turns specifically
01:01:56 <Lymia> I've already written that.
01:02:01 <Lymia> markov score: 100 and perfect score happened.
01:02:08 <Lymia> It's not on the hill anymore because that breaks the hill. XD
01:02:38 <Lymia> The scoring mechanism is not resiliant against fragile but 100% dominant programs
01:02:58 <Lymia> Any new program not already on the hill will win against it more than likely.
01:03:07 <Lymia> And immediately shoot to the top of the hill via markov scoring.
01:03:18 <Lymia> Even if it's trash.
01:03:33 <b_jonas> well sure, but if multiple people repeatedly submit such programs there'll eventually be some new equilibrium
01:03:48 <b_jonas> or maybe not, and maybe you can always write a new program that goes into the top
01:05:53 <Lymia> Kinda kills most of the "old" hill and makes a mess.
01:09:03 <Lymia> better to just take it off the hill. u.u;
01:12:35 <korvo> The only reason to have a size limit on the hill is quadratic tournament size, right? Perhaps we should have a series of like a dozen hills.
01:14:14 <b_jonas> korvo: what would that mean?
01:16:33 <b_jonas> korvo: no, the hill is also small because there are few people playing BFJoust. it's not like big sports where you have a separate hill for clubs per country or continent and then a Champion's Leage hill for the few best clubs from each country
01:17:26 <b_jonas> I mean football mostly, but I think that design occurrs in other sports too
01:18:02 <korvo> b_jonas: I was merely thinking that we would give a numeric rank to each hill. Falling off of a high-rank hill merely means switching places with the champion of the next lower hill.
01:18:14 <korvo> ...Wow, I really can't use English, huh.
01:19:02 <b_jonas> but then it can be expensive or difficult for two football teams from faraway places to meet, so a country or continent league makes more sense than for bfjoust
01:20:46 <b_jonas> and I don't think the quadratic number of matches is a problem, that can be solved with a swiss tournament where only a pseudorandom fraction of all 37*37*19*2 games are played for the score
01:22:02 <b_jonas> well no, only (37 choose 2)*19*2 games
01:25:19 -!- X-Scale has joined.
01:28:07 <Lymia> Alright. Have a workable core hill + evaluation setup. Just gotta write the code for mutation+crossover now.
01:28:09 <Lymia> Then run and pray.
01:29:22 <b_jonas> also in the editor REPL thing, the problem isn't just stuff like functions with upvalues or nested definitions, but also programs that interact with the outside world in a non-pure way, like write a file or take interactive input from the user or post on network.
01:29:43 <b_jonas> you have to know when to rerun what statements that may have side effects
01:32:52 <korvo> Ah, the notebook problem.
01:37:22 <b_jonas> oh, another question. so browsers have to limit how you can send HTTP queries with frames or forms or xmlhttprequests etc, because without limits an unrelated webpage could send a request using your cookies on a webpage to take actions in your name. I think some HTTP request or response headers are involved here. can you point me to a description of how this works?
01:39:00 <Lymia> !ztest evo >++-(+>(+)*88+.(-)*193(-)*49-([.+])*228)*-1
01:39:00 <zemhill> Lymia.evo: points -26.86, score 3.80, rank 47/47
01:39:22 <Lymia> Some of these programs are weird, and I don't quite understand why they're scoring an--- oh, it's another shitty attacker.
01:39:49 <Lymia> Yeah, if I can evolve a program to #1, uh.
01:39:55 <Lymia> Reverse engineering time to write the champion description, LOL.
01:41:21 <b_jonas> I understand the part where if a website has logins then in addition to the login cookie it puts a hard to guess string into a hidden parameter in every form that the server validates, that way before sending a valid request using your login you have to retrieve a page from that website, but this obviously isn't all the protection there is, because frames or scripts can retreive pages from other servers.
01:42:02 <korvo> b_jonas: The magic phrase to look up is "cross site request forgery", often abbreviated "CSRF". That hidden param is called a "CSRF token".
02:25:16 -!- slavfox has quit (Quit: ZNC 1.8.2 - https://znc.in).
02:25:23 -!- slavfox has joined.
02:34:15 <esolangs> [[Hq(-]] https://esolangs.org/w/index.php?diff=144530&oldid=94255 * Fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff * (+137)
02:34:24 <esolangs> [[Hq(-]] https://esolangs.org/w/index.php?diff=144531&oldid=144530 * Fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff * (+1) /* = Output the meaning of life */
02:37:30 <esolangs> [[Hq(-]] https://esolangs.org/w/index.php?diff=144532&oldid=144531 * Fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff * (+1) /* XKCD Random Number */
02:37:38 <esolangs> [[Hq(-]] https://esolangs.org/w/index.php?diff=144533&oldid=144532 * Fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff * (-1) /* XKCD Random Number */
02:42:41 <esolangs> [[Talk:FROSTWIRE-666]] N https://esolangs.org/w/index.php?oldid=144534 * Salpynx * (+631) trying to find a universal basis (for TCness)
03:02:20 <esolangs> [[Talk:FROSTWIRE-666]] https://esolangs.org/w/index.php?diff=144535&oldid=144534 * Salpynx * (-631) back to drawing boad on S
03:10:31 <esolangs> [[Talk:FROSTWIRE-666]] https://esolangs.org/w/index.php?diff=144536&oldid=144535 * Salpynx * (+631) Undo revision [[Special:Diff/144535|144535]] by [[Special:Contributions/Salpynx|Salpynx]] ([[User talk:Salpynx|talk]])
03:15:34 -!- baldibacak has joined.
03:28:33 <esolangs> [[Special:Log/delete]] delete * Ais523 * deleted "[[Anything]]": offtopic (not an esolang)
03:40:22 <esolangs> [[Ecliptica]] https://esolangs.org/w/index.php?diff=144537&oldid=144522 * Baldibacak * (+28)
04:13:17 <esolangs> [[Redirekt]] N https://esolangs.org/w/index.php?oldid=144538 * Xyzzy * (+15) Created page with "{{Stub}}{{WIP}}"
04:13:46 <esolangs> [[Redirekt2]] N https://esolangs.org/w/index.php?oldid=144539 * Xyzzy * (+22) Redirected page to [[Redirekt]]
04:13:59 <esolangs> [[Redirekt]] https://esolangs.org/w/index.php?diff=144540&oldid=144538 * Xyzzy * (+8) Redirected page to [[Redirekt2]]
04:15:06 <esolangs> [[Main Page]] https://esolangs.org/w/index.php?diff=144541&oldid=143712 * Xyzzy * (+46)
04:16:04 <esolangs> [[Esolang talk:Sandbox]] https://esolangs.org/w/index.php?diff=144542&oldid=137761 * Xyzzy * (+108)
04:17:25 <esolangs> [[Esolang talk:Sandbox]] https://esolangs.org/w/index.php?diff=144543&oldid=144542 * Xyzzy * (+19)
04:21:35 <zzo38> What is the proper way to take apart the significand and fraction parts of the C float and double type? (I wrote asn1_encode_real_parts function and now I should write asn1_encode_float and asn1_encode_double functions too)
04:23:47 -!- baldibacak has quit (Quit: Client closed).
04:25:21 <esolangs> [[-25 bytes (O o)]] https://esolangs.org/w/index.php?diff=144544&oldid=133464 * Xyzzy * (+194)
04:25:37 <esolangs> [[-25 bytes (O o)]] https://esolangs.org/w/index.php?diff=144545&oldid=144544 * Xyzzy * (+78)
04:28:40 <esolangs> [[-25 bytes (O o)]] https://esolangs.org/w/index.php?diff=144546&oldid=144545 * Xyzzy * (+98)
04:30:21 <esolangs> [[-5 bytes ;)]] https://esolangs.org/w/index.php?diff=144547&oldid=126981 * Xyzzy * (+195)
04:42:10 <esolangs> [[VERPNL]] https://esolangs.org/w/index.php?diff=144548&oldid=138608 * Xyzzy * (+934)
05:01:19 <zzo38> And, what is the proper way to then make the C float and double number from the taken apart significand and fraction part?
05:07:38 <zzo38> Also, I had read that they will remove damage assignment order in Magic: the Gathering.
05:10:01 <zzo38> I had made up a "covering" keyword ability that restricts damage assignment order, although the meaning of this keyword can be changed to something similar if the damage assignment order is removed. I can change it to: A creature cannot assign damage to a creature without covering unless it assigns lethal damage to all permanents with covering that it is allowed to assign damage to.
05:15:40 <zzo38> The other consideration is damage prevention effects, since you will have to use them before you will know how the damage is assigned. (Maybe another new keyword ability might help with that.) (This change is probably good other than that, though, I guess.)
05:18:02 <zzo38> (although I am not sure)
05:28:44 -!- wWwwW has joined.
05:30:01 -!- Sgeo_ has quit (Read error: Connection reset by peer).
05:55:41 -!- salpynx has joined.
05:56:25 -!- wWwwW has quit (Quit: Client closed).
05:59:00 <Lymia> "Sacrifice this creature: Prevent damage that would be dealt this turn equal to this creature's toughness."
05:59:08 <Lymia> Don't make CR when you can use rules text, lol.
05:59:28 <Lymia> dealt this turn by creature blocked by this creature equal to its toughness*
06:01:10 <zzo38> Yes, that can also work
06:01:32 <salpynx> !ztest test_original_atom http://zem.fi/git/?p=hill;a=blob_plain;f=david_werecat.atom.bfjoust;hb=940981f9fab92d8126888cf1ddfe3dd8d9bdf980
06:01:32 <zemhill> salpynx.test_original_atom: points -4.93, score 16.14, rank 34/47
06:01:50 <salpynx> !ztest synanceia >(-)*9<++.++[+.[+.-]]
06:01:51 <zemhill> salpynx.synanceia: points -4.88, score 15.23, rank 37/47
06:02:13 <zzo38> (It is not the same as any of the stuff that I mentioned, for a few reasons; but, it is possible anyways, and can be done.)
06:02:17 <salpynx> those are two warriors kicked off the hill a while back that still place
06:04:33 <esolangs> [[Talk:FROSTWIRE-666]] https://esolangs.org/w/index.php?diff=144549&oldid=144536 * Yayimhere * (+116)
06:05:36 <esolangs> [[FROSTWIRE-666]] https://esolangs.org/w/index.php?diff=144550&oldid=140717 * Yayimhere * (+0) /* combinators */
06:05:57 <esolangs> [[Talk:FROSTWIRE-666]] https://esolangs.org/w/index.php?diff=144551&oldid=144549 * Yayimhere * (+2) /* complete basis? */
06:06:55 <salpynx> !zjoust synanceia >(-)*9<++.++[+.[+.-]]
06:06:56 <zemhill> salpynx.synanceia: points -4.88, score 15.23, rank 37/47
06:10:46 <salpynx> that was modified slightly from the original version, it doesn't place with the original form. That makes sense
06:14:38 <salpynx> wWwwW: do you have a construction to build a K combinator in FROSTWIRE-666?
06:26:31 -!- craigo has joined.
06:53:00 -!- tromp has joined.
07:03:25 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
07:10:22 <esolangs> [[User:Superstitionfreeblog]] https://esolangs.org/w/index.php?diff=144552&oldid=144527 * Superstitionfreeblog * (+244)
07:11:09 <esolangs> [[User:Superstitionfreeblog]] https://esolangs.org/w/index.php?diff=144553&oldid=144552 * Superstitionfreeblog * (+1)
07:11:58 <esolangs> [[Main Page]] https://esolangs.org/w/index.php?diff=144554&oldid=144541 * Ais523 * (-46) Undo revision [[Special:Diff/144541|144541]] by [[Special:Contributions/Xyzzy|Xyzzy]] ([[User talk:Xyzzy|talk]]) I don't think it improves the page
07:12:34 <esolangs> [[Special:Log/delete]] delete * Ais523 * deleted "[[Redirekt]]": broken redirect
07:12:44 <esolangs> [[Special:Log/delete]] delete * Ais523 * deleted "[[Redirekt2]]": broken redirect
07:13:37 <esolangs> [[Esolang talk:Sandbox]] https://esolangs.org/w/index.php?diff=144555&oldid=144543 * Ais523 * (+202) why create a broken redirect? that isn't what this wiki's for
07:27:46 -!- tromp has joined.
07:30:55 <b_jonas> zzo38: "take apart the significand and fraction parts of the C float and double type" => one of frexp, logb, ilogb for doubles; frexpf, logbf, ilogbf for floats. frexp is the traditional one that has existed since very early C, logb and ilogb are much newer functions defined to extract the exponent in the native format which were added because frexp is defined to always use exponent 2 regardless the
07:30:59 <esolangs> [[User:Superstitionfreeblog]] https://esolangs.org/w/index.php?diff=144556&oldid=144553 * Superstitionfreeblog * (+1478)
07:31:01 <b_jonas> underlying floating-point format: on modern machines where float and double are IEEE 754 floats this doesn't make a difference.
07:34:18 <Lymia> Getting 20 second generations, yeouch.
07:34:25 <Lymia> Evolver's defs not fast, but that's evolvers for you.
07:34:30 <b_jonas> zzo38: if you know the specific floating-point format of the C implementation then you can also memcpy a float to an uint32_t or a double to an uint64_t and mask its parts to get the exponent and significand, which is more or less what those functions do, but the functions also have specific handling for denormals (they give a normalized exponent), zero, infinity and NaN
07:36:16 <b_jonas> there are also the corresponding functions ldexp (the old one paired with frexp) and scalbn (the new one paired with ilogb) to assemble numbers from a significand and exponent
07:37:40 <Lymia> heck, this thing found a small offset clear.
07:37:43 <Lymia> !ztest evo +.->++>.-+(>--+[+]{})*-1
07:37:44 <zemhill> Lymia.evo: points -25.64, score 5.05, rank 47/47
07:43:24 -!- Lord_of_Life has quit (Ping timeout: 252 seconds).
07:43:44 -!- Lord_of_Life has joined.
07:50:08 -!- X-Scale has quit (Quit: Client closed).
07:52:33 <esolangs> [[User:Superstitionfreeblog]] https://esolangs.org/w/index.php?diff=144557&oldid=144556 * Superstitionfreeblog * (-4) /* Shebang Support */
07:54:46 <Lymia> !ztest test +(+)*31++>(-(>+>--(>[+()*47191[.(+)*24[-.][+-(-)*14]]])*11053)*-1{})*-1(+)*6>---[.(-(>+(+)*31++>(-(>+>--(>[+()*47191[.(+)*24[-.][+-(-)*17]]])*11053)*-1{})*-1+><>+(>--(<{})*-1{})*-1)*-1)*-1]+(+)*31++>(-(>+>--(>[+()*47191[.(+)*24[-.][+-(-)*17]]])*11053)*-1{})*-1
07:54:46 <zemhill> Lymia.test: points -12.00, score 11.79, rank 47/47
07:58:13 <b_jonas> baldibacak: if you made a compiler you should ideally link it from the wiki page https://esolangs.org/wiki/Ecliptica
08:34:57 <esolangs> [[Rlng]] N https://esolangs.org/w/index.php?oldid=144558 * Iddi01 * (+1901) Created page with "{{stub}}<includeonly>(or is it?)</includeonly> {{Distinguish/Confusion|Relang}} '''Rlng''' is the simplest [[REGXY|regular expression]] based language. Programs consists of two strings, each cycle, both strings replaces the first match using the other string as a [[regular
08:41:02 <esolangs> [[User:Iddi01]] M https://esolangs.org/w/index.php?diff=144559&oldid=143817 * Iddi01 * (+18) Add [[Relang]]
08:46:45 <esolangs> [[Talk:FROSTWIRE-666]] https://esolangs.org/w/index.php?diff=144560&oldid=144551 * Salpynx * (+943) /* complete basis? */ example implementation of these combinators in Python (Gist link)
08:48:53 <esolangs> [[Language list]] M https://esolangs.org/w/index.php?diff=144561&oldid=144495 * Iddi01 * (+177) /* R */ Add [[Relang]]
08:51:30 <Lymia> Doing first real run of the evolver.
08:51:32 <Lymia> Let's see how it does.
09:04:56 -!- iddi01 has joined.
09:05:16 <Lymia> Hill's already figured out offset clears.
09:07:07 <iddi01> !zjoust polexchange <was too similar to ×speed× and inferior to it>
09:07:07 <zemhill> iddi01.polexchange: points -46.00, score 0.00, rank 47/47 (-12)
09:09:53 <iddi01> Lymia: does your evolver include any programs from zemhill? would like to see how my another_rush_program does.
09:14:58 <Lymia> The evolver programs are in a specific format that is not a BFJoust program.
09:16:35 <iddi01> fizzie: found out roughly the pattern of the bug: when any change is made to the hill, the previous worst-scoring program will display all losses against anything but the changed (or newly submitted) program, while the games page works correctly.
09:17:31 <Lymia> These programs are a linear list of opcodes that is then translated into a bfjoust format.
09:17:42 <Lymia> No actual recursive structure in the evolver's IR.
09:28:37 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
09:28:59 -!- iddi01 has quit (Quit: Client closed).
09:31:50 <Lymia> Behavior of this evolver is quite interesting.
09:32:23 <Lymia> So far, I see it getting caught in cycles of defense winning and then alternatively offense winning.
09:35:03 <Lymia> Trying an adjusted version with tweaked parameters. Seems it got caught in a plateou before it used a lot of the underlying IR features or interesting bots emerged.
09:35:32 -!- b_jonas has quit (Quit: leaving).
09:51:00 <salpynx> isn't the hill 'bug' just the intended behaviour of the 47th slot? I was thinking of the 47th slot as already off the hill. A new program that does better than 47th place always pushes the previous 47th slot out, even if the Markov adjusted scoring might have placed it higher
09:52:33 <salpynx> it's a bit confusing, but i think it it justified. It's what allows 47th to function as a pre-hill slot for _any_ new submission
09:54:59 <fizzie> Given how it works, when a change is made, I don't think the "previous worst-scoring program" should show up at all, because it's not even on the hill at that point.
09:57:12 -!- ursa-major has quit (Ping timeout: 246 seconds).
09:57:32 <salpynx> I think the Markov scoring can theoretically allow the previous worst scoring program to score higher than other programs on the hill based on the re-scoring from the new arrival... but it isn't included in the rescoring
09:57:41 -!- ManDeJan has quit (Ping timeout: 272 seconds).
09:58:18 -!- dcreager has quit (Ping timeout: 272 seconds).
10:01:28 <salpynx> you see that sort of change with the big swing changes +3 / -3, i think there have been shifts of 6 for some warriors when adding a new opponent. If 47th place happened to get a +6 position boost, it would still be viable on the hill (but it's booted before this is calculated (i believe))
10:01:50 <fizzie> Yes. It picks what slot to replace (`replaced = @hill.include?(newprog) ? newprog : @hill.ranking[-1]`) before recomputing the scores.
10:02:46 <fizzie> But that also means the program that got replaced should not show up in breakdown.txt (or the web equivalent) at all.
10:04:05 <salpynx> i don't it's a bug, but i understand it can look unfair. I rationalised it by considering a warrior that has dropped to 47th is already off the hill and is merely occupying the staging slot
10:04:38 <Lymia> Blargh, may have found a way to infinite-to-indefinite loop gearlance.
10:04:44 <Lymia> Evolver keeps crashing in gearlance-derived code.
10:05:12 <Lymia> In particular, it's a dead freeze during hill evaluation on all cores. :c
10:06:06 <fizzie> Although I guess if you *update* a program (ratherthan adding a new one), the previous slot 47 program would still be there. But in that case it shouldn't get any special treatment. It might even still rise up in the ranks.
10:07:41 -!- ursa-major has joined.
10:07:56 <Lymia> Well, that's hard to use information. There's *some* code usage pattern that hangs gearlance, that my evolver seems to produce fairly often.
10:08:10 <Lymia> Will need to add in more insturmentation when I'm awake. I was hoping I could just leave it running overnight. u.u;
10:08:28 -!- ManDeJan has joined.
10:08:41 <fizzie> For example after that iddi01.polexchange submission, web.test is now technically rank 46; its breakdown shows it losing fully to all, but the game viewer disagrees. Which I think _is_ a bug.
10:09:40 <fizzie> (Doesn't apply to breakdown.txt, since that's just for the most recent submission.)
10:13:02 <Lymia> !ztest best_on_hill ><----->(+++((+)*17-(>>-((-)*14>++++((+((++[>(-)*13>+(+>[(-)*12[+]])*-1]{})*-1{})*-1)*21970)*22252)*-1)*-1)*31493)*-1.(-)*67+<+-+>.(>-(-(-)*165-++(+)*71(+)*227(+)*106[(>->(+)*126+(+)*217+)*549{{}}])*-1)*-1
10:13:02 <zemhill> Lymia.best_on_hill: points -8.57, score 12.84, rank 46/47
10:13:05 <fizzie> Ooh, I wonder if it's a shallow-copy problem.
10:13:24 <salpynx> huh, that is interesting. web.test shows a win against iddi01.polexchange, which must be automatically granted.
10:13:24 <Lymia> Best program on the evolver hill, so the thing that crashes gearlance is likely somehow related to its structure.
10:14:10 -!- tromp has joined.
10:14:40 <fizzie> The supposedly non-mutating Results#replace method does a shallow copy of the object (with the `dup` method), which I think might leave the data array being a reference to the same result list.
10:15:50 <Lymia> Going to take a close look at `{})` later, looks pretty suspicious for being a potential evaluation killer.
10:18:48 -!- dcreager has joined.
10:19:51 <salpynx> Isn't the behaviour: A new submission always kicks out the 47th slot, before running combat. A updated warrior runs the hill combat on everything but the 47th slot, and potentially boosts 47th by one, or leaves it unchanged at 47th.
10:21:23 <fizzie> For an updated warrior, it should run the hill combat on everything (including the 47th slot), and should be able to potentially boost it by more thann one if the scoring works out that way.
10:21:45 <fizzie> The only special thing about the 47th slot should be that it's the program that will get kicked out for a new submission.
10:22:03 <fizzie> It's not supposed to have any special behavior when an existing program is updated.
10:24:42 <salpynx> ok, that makes sense, but it looks like if web.test were included in the full re-run, it should have done better
10:24:58 <salpynx> !ztest web_test >(+)*21[>[-[++[(+)*25[-]>]]>](-)*25]
10:24:58 <zemhill> salpynx.web_test: points -7.02, score 14.60, rank 43/47
10:27:22 <fizzie> Yes, I was describing the intended behavior, not the actual one. :)
10:27:49 <salpynx> i think that's a representative test, even though its going to be drawing with itself so the real results will be slightly off
10:30:12 <salpynx> ok, I get you now, so there is a specific 47th slot bug when warriors are updated, but otherwise the 47th slot behaviour seems correct?
10:30:44 <fizzie> Yes... ish. I haven't checked if there's some other breakdown weirdness on new submissions rather than only on updates.
10:30:58 <fizzie> FWIW it will *never* do a real "full re-run", because only one program at a time can change, so the majority of the O(n^2) results (the ones between two unmodified program) are still valid. So technically what it does is, before doing anything else, the newly submitted code is evaluated against all existing 47 programs.
10:31:40 <fizzie> One of those results, the one between the new submission and whatever it will be replacing, is supposed to then be ignored. But it's easiest to compute it, given the way gearlanced's test function works; it has the entire existing hill already pre-parsed as "left program" entries, and the new code is evaluated as the "right program" to produce the results.
10:31:52 <Lymia> When it isn't crashing, the evolver is producing some awful defense programs.
10:32:06 <Lymia> Good to see there are some on the hill, and it isn't just pure rusher meta.
10:32:49 <zemhill> Lymia.hszr-g1423h1n2-remote-job: points -4.02, score 16.14, rank 34/47
10:34:26 <salpynx> my synanceia was an attempt at a defense only strategy, use the opponents agression against it, in a tai chi / taoist way. The current iteration is too finely tuned, which explains the -8 drop. The original was more natural, but no longer places
10:34:41 <fizzie> That pushed web.test down to rank 47, and its breakdown is still broken (heh) against all but the new submission.
10:35:00 <fizzie> Though I think that might just be "sticky badness" from the fact that it doesn't actually ever recompute the results.
10:36:04 <fizzie> So if web.test somehow got that "all losses" data in the result matrix, it'll stay that way.
10:36:53 <fizzie> Can't really tell if/how the shallow copy issue would cause that behavior, but it seems wrong on principle, so I'll adjust it anyway. (Though not now, I'm trying to get to work.)
10:38:05 <salpynx> for the record, none of my submissions were trying to exploit bugs, real or imagined. Despite the name, 1337 only aimed to get a score of 13.37, and that Unicode issue in kalb was unintentional -- it was in comments and AFAICT it behaved the same with and w/o comments on every tape length
10:38:49 <fizzie> Yeah, I don't think the Unicode thing was broken on the hill until I updated it.
10:39:21 <fizzie> It was using a line-oriented protocol that didn't care about byte lengths of things.
10:40:07 <fizzie> What broke it was switching to one that uses length-delimited records (and then counting code points rather than bytes).
10:42:04 <fizzie> Incidentally, how exactly does it draw a heart? That wasn't quite clear to me.
10:43:23 -!- wib_jonas has joined.
10:43:31 <salpynx> I gtg, but Lymia i'm interested in the results of the evolver and the `{})` investigation. I'll check logs later
10:44:09 <wib_jonas> salpynx: yes, the last slot is effectively off the hill, it's shown in the hill so that when you submit a program you can see the results of all its games, including the ones with the program in the last slot, or all its results if the newly submitted program goes into the last slot
10:46:49 <wib_jonas> huh, no, fizzie explicitly contradicts that above, so I'm wrong
10:46:57 <salpynx> fizzie: the heart drawing code is pre-calculated, once it establishes the field width it chooses the best resolution from a set of options
10:47:28 <wib_jonas> in that case take what I said as how I think this should work
10:48:25 <salpynx> wib_jonas: that was along the lines of how I was thinking about it too
10:49:15 <salpynx> the heart drawing can be seen in this game browser, unfortunately it's not linked from the matrix to make it obvious: https://zem.fi/bfjoust/game/#joust,web.salpynx_kalb,web.salpynx_kalb,5e7e742
10:51:30 <salpynx> desing rationale: sufficiently complex behaviour seems to get results, and is hard to defend against, the direction changes required for drawing mimic good decoys found in other bots
11:01:04 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
11:01:21 -!- salpynx has quit (Quit: Leaving).
11:02:15 -!- tromp has joined.
11:11:20 <wib_jonas> what the heck! the new REPL in python 3.13 doesn't let you enter an EOF with F6. you have to press control-Z or control-D. this is annoying.
11:16:30 <esolangs> [[Pyfuck]] N https://esolangs.org/w/index.php?oldid=144562 * ShirAko * (+20714) Created Pyfuck programming language
11:18:09 <esolangs> [[JSfuck]] N https://esolangs.org/w/index.php?oldid=144563 * ShirAko * (+20) redirected to JSFuck
11:19:45 <wib_jonas> ah, but it also uses bash readline-like keys rather than ones similar to the windows terminal ones, so it won't be a problem
11:19:55 <wib_jonas> those are distinct enough that I probably won't confuse them
11:35:31 -!- amby has joined.
11:36:26 <esolangs> [[JSFuck]] M https://esolangs.org/w/index.php?diff=144564&oldid=142829 * ShirAko * (-35) JSFuck doesn't seem to be a BrainFuck derivative
11:40:58 <esolangs> [[Sucks]] N https://esolangs.org/w/index.php?oldid=144565 * ChuckEsoteric08 * (+816) Created page with "'''Sucks''' is a derivative of [[Suc]] by [[User:ChuckEsoteric08]] ==Description== It's syntax is very similar to Suc, but with following additions: IN x Would input a number and store it in register x CIN x Would input byte x and store it's value in reigster x
11:44:37 <esolangs> [[Pyfuck]] https://esolangs.org/w/index.php?diff=144566&oldid=144562 * ShirAko * (-20694) Created redirect to PyFuck
11:46:05 <esolangs> [[PyFuck]] N https://esolangs.org/w/index.php?oldid=144567 * ShirAko * (+20848) Created page (from Pyfuck, just renaming)
11:47:14 -!- dcreager has quit (Ping timeout: 272 seconds).
11:47:15 -!- ManDeJan has quit (Ping timeout: 272 seconds).
11:47:53 -!- ursa-major has quit (Ping timeout: 272 seconds).
11:51:33 <esolangs> [[10 1]] https://esolangs.org/w/index.php?diff=144568&oldid=144524 * Ractangle * (-2) Shout out to the person who implemented this
11:54:07 <esolangs> [[PyChr]] N https://esolangs.org/w/index.php?oldid=144569 * ShirAko * (+17644) Created PyChr page
11:54:20 -!- dcreager has joined.
11:54:24 -!- ManDeJan has joined.
11:54:29 -!- ursa-major has joined.
11:55:40 <esolangs> [[Language list]] https://esolangs.org/w/index.php?diff=144570&oldid=144561 * ShirAko * (+25) Added PyChr and PyFuck
12:02:41 <esolangs> [[Talk:-25 bytes (O o)]] N https://esolangs.org/w/index.php?oldid=144571 * Ractangle * (+342) Created page with "<blockquote> :The implementation must has -25 bytes. So YOU CAN NEVER IMPLEMENT THIS!!!! HAHAHAHAHAHAHAHAHA!!!!!! </blockquote> WHO THE GIVES A LIVING FUCK ABOUT YOUR RESTRICTIONS?~~~"
12:11:08 <esolangs> [[Special:Log/move]] move * ChuckEsoteric08 * moved [[Stakc]] to [[Stakc/Old]]
12:11:45 <esolangs> [[User:ChuckEsoteric08]] https://esolangs.org/w/index.php?diff=144574&oldid=142456 * ChuckEsoteric08 * (+27) /* Things I made */
12:16:29 -!- X-Scale has joined.
12:32:17 -!- zemhill has quit (Remote host closed the connection).
12:32:35 -!- zemhill has joined.
12:33:20 <fizzie> Addressed that deep-copy thing, which may or may not fix the game breakdowns.
12:33:46 <fizzie> (Simply *restarting* it has fixed the breakdown for web.test, but that's to be expected, there *is* a full recomputation of all scores at startup.)
12:34:20 <fizzie> Also just as a reminder, the rank deltas will be nonsense until the next submission.
12:46:14 -!- amby has quit (Ping timeout: 260 seconds).
12:48:57 <esolangs> [[..:]] N https://esolangs.org/w/index.php?oldid=144575 * Yayimhere * (+39) Redirected page to [[Colon period period colon]]
12:49:17 -!- wWwwW has joined.
13:00:56 <esolangs> [[Talk:FROSTWIRE-666]] https://esolangs.org/w/index.php?diff=144576&oldid=144560 * Yayimhere * (+174) /* complete basis? */
13:07:28 -!- X-Scale has quit (Quit: Client closed).
13:21:08 -!- Artea has quit (Ping timeout: 264 seconds).
13:26:37 -!- m5zs7k has quit (Quit: m5zs7k).
13:33:26 -!- esolangs has joined.
13:33:26 -!- ChanServ has set channel mode: +v esolangs.
13:33:48 <esolangs> [[Stakc]] https://esolangs.org/w/index.php?diff=144577&oldid=144573 * ChuckEsoteric08 * (+1190) Removed redirect to [[Stakc/Old]]
13:33:59 -!- riv has quit (Ping timeout: 265 seconds).
13:34:12 -!- wWwwW has joined.
13:34:23 <esolangs> [[User:ChuckEsoteric08]] https://esolangs.org/w/index.php?diff=144578&oldid=144574 * ChuckEsoteric08 * (+11) /* 2024 */
13:34:33 -!- riv has joined.
13:36:08 <esolangs> [[Stakc]] https://esolangs.org/w/index.php?diff=144579&oldid=144577 * ChuckEsoteric08 * (+23)
13:36:11 -!- m5zs7k_ has changed nick to m5zs7k.
13:36:51 <esolangs> [[Stakc]] https://esolangs.org/w/index.php?diff=144580&oldid=144579 * ChuckEsoteric08 * (+14) /* Documentation */
13:44:10 <esolangs> [[PyFuck]] M https://esolangs.org/w/index.php?diff=144581&oldid=144567 * None1 * (+0) /* Variants */. is ambiguous
13:53:35 <esolangs> [[Sickfrog]] M https://esolangs.org/w/index.php?diff=144582&oldid=98757 * Qawtykit * (+7) fixed examples
14:05:21 -!- wWwwW has quit (Ping timeout: 256 seconds).
14:11:14 -!- user3456 has joined.
14:14:24 <esolangs> [[Xuki]] https://esolangs.org/w/index.php?diff=144583&oldid=142031 * Ractangle * (+30) /* Syntax */
14:14:49 <esolangs> [[Xuki]] https://esolangs.org/w/index.php?diff=144584&oldid=144583 * Ractangle * (-30)
14:15:42 <esolangs> [[Xuki]] https://esolangs.org/w/index.php?diff=144585&oldid=144584 * Ractangle * (+25)
14:17:31 -!- user3456 has quit (Quit: I use ZNC - https://znc.in).
14:18:59 -!- wWwwW has joined.
14:19:47 -!- user3456 has joined.
14:22:18 <esolangs> [[Xuki]] https://esolangs.org/w/index.php?diff=144586&oldid=144585 * Ractangle * (-14) /* Syntax */
14:39:19 <esolangs> [[256]] https://esolangs.org/w/index.php?diff=144587&oldid=136683 * Ractangle * (+83) /* Commands */
14:43:28 <esolangs> [[256]] https://esolangs.org/w/index.php?diff=144588&oldid=144587 * Ractangle * (-83) /* Commands */
14:49:33 -!- amby has joined.
15:01:51 -!- wib_jonas has quit (Quit: Client closed).
15:23:44 -!- X-Scale has joined.
15:30:56 -!- baldibacak has joined.
15:31:15 <wWwwW> helllllllllooooooo
15:31:57 <baldibacak> i made an converter for my esolang took me 3 hours to do now any code written in my esolang can be translated to c code
15:34:27 <esolangs> [[Stakc]] https://esolangs.org/w/index.php?diff=144589&oldid=144580 * ChuckEsoteric08 * (+77) /* Documentation */
15:34:57 <esolangs> [[Stakc]] https://esolangs.org/w/index.php?diff=144590&oldid=144589 * ChuckEsoteric08 * (+26)
15:35:02 -!- korvo has joined.
15:45:37 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
16:05:04 -!- baldibacak has quit (Quit: Client closed).
16:06:29 <esolangs> [[Special:Log/newusers]] create * 3cxpy * New user account
16:11:49 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=144591&oldid=144496 * 3cxpy * (+173) Introducing myself
16:16:07 -!- tromp has joined.
16:50:46 -!- ais523 has joined.
17:01:25 -!- b_jonas has joined.
17:05:20 -!- X-Scale has quit (Quit: Client closed).
17:08:32 <esolangs> [[Stakc]] https://esolangs.org/w/index.php?diff=144592&oldid=144590 * Ractangle * (+13) /* Documentation */
17:24:15 -!- wWwwW has quit (Ping timeout: 256 seconds).
17:25:55 -!- wWwwW has joined.
17:27:08 <wWwwW> any good esolangs to learn?
17:35:49 -!- wWwwW has quit (Quit: Client closed).
17:45:00 -!- wWwwW has joined.
18:01:05 -!- wWwwW has quit (Ping timeout: 256 seconds).
18:39:41 -!- wWwwW has joined.
18:48:54 -!- craigo has quit (Quit: Leaving).
18:50:27 -!- shikhin has changed hostmask to ~shikhin@offtopia/offtopian.
18:55:15 -!- baldibacak has joined.
18:55:32 -!- baldibacak22 has joined.
18:55:48 -!- baldibacak22 has quit (Client Quit).
18:56:05 -!- baldibacak70 has joined.
18:56:42 -!- baldibacak70 has quit (Client Quit).
18:58:16 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
18:58:19 -!- wWwwW has quit (Ping timeout: 256 seconds).
19:22:19 -!- tromp has joined.
20:09:58 <esolangs> [[6 bytes of useless element]] https://esolangs.org/w/index.php?diff=144593&oldid=142321 * Ractangle * (+52) /* Interpreters */
20:11:28 <esolangs> [[6 bytes of useless element]] https://esolangs.org/w/index.php?diff=144594&oldid=144593 * Ractangle * (+81) /* Interpreters */
20:12:05 <b_jonas> stupid question, if you have an execution environment that runs programs compiled from eg. C or C++, and its behavior is that if you read memory that isn't mapped you read zeros but if you write memory that isn't mapped it raises a fatal signal, is that for some reason worse or more stupid than if both reading and writing unmapped memory succeeds and automatically maps a new page initially filled with
20:13:16 <esolangs> [[6673846770]] https://esolangs.org/w/index.php?diff=144595&oldid=88392 * Ractangle * (-95) /* Example */
20:39:41 <Lymia> fizzie: Did find one crashing case in gearlance so far: `((((.)*0)*10000)*10000)*10000`
20:42:18 <Lymia> The check that disables redundant loops only checks that the instruction exists, not that it's executed.
20:42:18 <int-e> > 10000^3 `mod` 2^32
20:42:37 <int-e> > 10000^3 :: Int32
20:43:44 <int-e> (just a thought, not even an idea because I don't know whether gearlance actually does (()a)b = ()n with n = a*b
20:47:34 -!- earend1 has joined.
20:54:34 -!- baldibacak has quit (Quit: Client closed).
21:10:42 <ais523> b_jonas: memory that's readable but not writable is common in modern OSes, so that behaviour doesn't seem like something programs should be inherently incapable of handling
21:11:32 <ais523> I think I've used an execution environment where you could read zeros from NULL, which strikes me as potentially being a dubious idea but it is after all UB, so programs shouldn't be doing that?
21:12:30 <ais523> (that said, I can't remember what language I was using – it was a long time ago)
21:12:49 -!- Everything has joined.
21:13:01 <Lymia> !ztest hszr-g1870h5n2-willing-ride-2 https://dl.rimin.moe/paste/lymia/hszr-g1870h5n2-willi_14f1w9zcabmvvam4m2h1964xwm3d0q5c7g7raac4f6j3yps72kvy.bfjoust
21:13:04 <zemhill> Lymia.hszr-g1870h5n2-willing-ride-2: points -2.10, score 17.81, rank 27/47
21:13:19 <ais523> Lymia: your evolver's [(-)*103] clear loop had me in stitches
21:13:41 <ais523> I guess that is technically a clear loop?
21:14:41 <b_jonas> I don't much care about which language as long as it allows unsafe low-level memory access by either use-after-free or indexing out of an array
21:14:57 <Lymia> There's a basic instruction for "adjust cell".
21:15:03 <Lymia> It's supposed to be used for decoys, but.
21:15:09 <ais523> hmm, isn't that program's first movement instruction a <?
21:15:18 <Lymia> yes. It's a pure vibrator.
21:16:14 <ais523> b_jonas: I can see some potential large gains to being able to read garbage from memory locations that either a) were previously allocated or b) are vaguely near an existing allocation
21:16:18 <ais523> I think you've talked about this before
21:17:44 <ais523> I have been considering proposing to Rust an instruction that reads a memory address, and where reading a memory address that is being written by another thread or is currently mutably/uniquely referenced reads garbage (or uninitialized data) rather than causing UB
21:17:58 <ais523> AFAICT there are certain lock-free algorithms that cannot be correctly implemented without such an instruction
21:18:27 <korvo> ais523: IIRC the Mill and Solaris both have a zero page. Also IIRC one of the BSDs (NetBSD?) has a zero page mapped to 0x0 so that invalid reads have deterministic behavior.
21:18:34 <korvo> ...But that's all off the top of my head and probably wrong.
21:18:40 <ais523> (although they still break if someone uses their mutable reference to return the memory being referenced to the OS, which I *think* is not allowed in Rust but it logically could be)
21:19:43 <ais523> Linux doesn't allow non-root users to map readable memory over NULL, and I think there was a non-obvious security reason for this
21:21:20 <Lymia> ais523: I'm probably going to need to make a cycle-aware DCE/simplification pass for the programs.
21:21:50 <Lymia> To remove the `{})` and make analysis of the output simpler.
21:23:30 <ais523> OK, so it seems the reason is that if the *kernel* does a NULL dereference, having user-mode memory mapped over NULL might cause it to not crash, escalating a crash bug to a security bug
21:23:58 <ais523> although, I thought nowadays the kernel can't read user-mode memory anyway unless it specifically asks to do so, as an alternative method to mitigate that sort of bug
21:24:41 <Lymia> (Average score against the test hill is -41 now, with no reference to the test hill in the actual evolver loop, and it does slowly grow. So, I can be fairly confident that it is innovating better warriors over time.)
21:24:59 <Lymia> (Doesn't look like it's innovated a timer clear yet.)
21:25:07 <Lymia> (Internal meta is a defense meta.)
21:26:00 <b_jonas> "vaguely near an existing allocation" => sure, because you might not want to support allocating at byte granularity, so if the user asks for a 127 byte long array you might actually give them a 128 byte long one
21:26:03 <ais523> it surprises me how many of the programs on the current hill are at least partially defensive
21:26:41 <ais523> b_jonas: I was thinking more along the lines of "you can unconditionally copy 16 bytes out of a string without first verifying that it's at least that long, without anything bad happening"
21:27:03 <b_jonas> sure, that's possible as well
21:27:14 <ais523> operations like strlen() are very hard to implement efficiently without knowledge of the processor because you can't read even one byte beyond the terminating NUL, in case the next byte traps
21:28:03 <ais523> (an implementation in asm, or in C-with-extensions, can normally exploit the fact that if one address on a page doesn't trap the others won't either, but standard C doesn't let you do that and compilers will optimise on the assumption that you aren't)
21:28:21 <b_jonas> "where reading a memory address that […] is currently mutably/uniquely referenced reads garbage" => would that work regardless of the data type that that memory is referenced as? as in, not just on a special atomic type (whether an existing one or a new one)?
21:28:31 <Lymia> I've been considering adding the fixed hill (random programs from every bfjoust hill ever) to the actual fitness evaluation in the evolver, but I'm worried that rather pushing it to innovate new strategies, it'll just make it only generate defense programs ever.
21:29:05 <Lymia> Since defensive programs in general (even very basic and braindead ones) will get a higher score to begin with than a basic offensive program. But it's also a dead end.
21:29:07 <ais523> this is easy to implement – you compile it into an asm instruction to perform a memory read, that is opaque to the compiler backend (and thus doesn't know it is a memory read instruction)
21:29:34 <Lymia> I wonder if some variant of markov scoring would be approprate here, though. Set it up so that the more programs beat a particular bot, the less valuable beating it is.
21:30:12 <ais523> heh, your evolved vibrator beats nyuroki
21:30:31 <b_jonas> "Linux doesn't allow non-root users to map readable memory over NULL" => wait, really? even on x86_32? I thought it was allowed on x86_32, though only in some unusual way, i.e. you need some specific syscall or option rather than just a normal mmap
21:30:35 <ais523> my guess is that it wins short tapes due to the lack of decoys, and a large enough fraction of the long ones to get a win
21:30:47 <ais523> b_jonas: there's a procfile that allows it
21:30:57 <ais523> although, only root can write the procfile
21:31:01 <b_jonas> "if the *kernel* does a NULL dereference" => ah, that makes sense
21:32:03 <b_jonas> I thought x86_32 allows it specifically so that the program can use the v8086 mode to emulate an x86_16 real mode machine
21:32:17 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
21:32:38 <Lymia> The best attacker on the hill (that I can detect) so far is this thing:
21:32:40 <Lymia> !ztest test >(+)*6+(>((-)*3->(-)*10->-->+>(++++[>(>>(+>[+[(-)*23[+]]])*1490{})*-1]{})*-1)*23560)*64623
21:32:41 <zemhill> Lymia.test: points -7.90, score 13.15, rank 47/47
21:33:02 <b_jonas> not that this matters now that everyone is running x86_64 (or arm64) rather than x86_32
21:33:33 <ais523> Lymia: I'd expect that to beat or at least tie with all the defenders, unless there's a true flag-to-0 vibration program
21:33:57 <Lymia> It's not actually higher on the champions hill; but that could be because that one's slow to change by design.
21:34:28 <Lymia> !ztest evo >(>((-)*3->(-)*9+(--->+(>(+++(>(+>+>[-((>[-[(-)*9[+]]])*82339{})*-1]{})*-1{})*-1{})*-1{})*-1)*-1)*8036)*82245<(+)*67.+(+(+((+(-(+)*100++(+->>((-)*14+-+{})*-1{})*-1)*-1{})*-1{})*-1)*-1)*-1
21:34:28 <zemhill> Lymia.evo: points -8.31, score 14.85, rank 39/47
21:34:31 <ais523> also, I think if {} appears at one end of a ()% loop, you can just delete it and change it to a ()* loop
21:34:32 <Lymia> Here's a random top of hill.
21:34:45 <Lymia> Yeah, just can't really do it in the current code structure.
21:35:02 <Lymia> I'd need a seperate parse+simplify pass.
21:35:05 <Lymia> I know why it happens.
21:35:36 <b_jonas> the tricky part is that the libc function mmap returns the address of the mapped area or nullptr to indicate an error, so if you try to map specifically at address 0 it becomes hard to use, and you can't work this around by mapping from a slightly smaller address because that's conventionally kernel address space on linux
21:36:06 <Lymia> The actual internal IR structure for (X{})*Y is something like "ComplexRepeat(Y) X End End End"
21:36:15 <Lymia> And if any of the Ends are omitted, the IR just dumps it at the end of the block.
21:36:33 <Lymia> (This way, the evolver only needs to work with linear segments of instructions, not any complex branching structure)
21:36:56 <Lymia> So all the {}) is just the evolver arbitarily picking the complex repeat, and not closing it.
21:37:54 <ais523> b_jonas: hmm, you think of pointers as signed?
21:38:20 <ais523> I hadn't even considered that an mmap of, say, -4096 for 8192 bytes would ever be possible, to me that's an overflow rather than a wrap
21:38:48 <ais523> quite separately from the "high bit of address set = kernel address" rule
21:41:34 -!- tromp has joined.
21:41:48 <b_jonas> ais523: that is kind of ambiguous on x86_32, or in userspace x86_64 where negative pointers are always invalid. on x86_64 they're clearly signed becuase the current versions of the architecture only pointers with small magnitude as a signed number, though in a way that the address space can be extended easily in future cpus. but I think of pointers more as wrapping modulo 2**32 or 2**64, with wrapping
21:41:54 <b_jonas> addition and subtraction, and it usually doesn't matter whether they're signed, unless you for some reason want to less-than compare two pointers that needn't point into (or at the end of) the same object.
21:42:42 <b_jonas> the address part of x86_16 real mode or protected mode pointers is clearly unsigned though
21:43:25 <b_jonas> and on x86_64 too you may have to consider whether a 16-bit or 32-bit offset that you add to the pointer is signed or unsigned extended to 64 bits.
21:43:41 <ais523> I'm not sure it's "clearly signed", I think of a userspace section at the bottom of the address space and a kernelspace section at the top
21:43:45 <b_jonas> but that's for when the offset is shorter than the full pointer, which is why it matters.
21:44:08 <ais523> those are next to each other from a wrapping point of view, which makes me think a non-wrapping point of view makes more sense because it gives the most possible space in between
21:44:17 <b_jonas> yes, kernelspace at top probably makes more sense for x86_32
21:44:33 <ais523> x86_32 commonly uses 3GiB of userspace and 1GiB of kernelspace, doesn't it?
21:44:54 <ais523> leaving as much room as possible in between means you can expand them asymmetrically if you have to
21:45:02 <b_jonas> on x86_32 there's a configurable setting for that when you compile the kernel, I don't know what the most commonly used value is
21:45:31 <ais523> oh, I was thinking of Windows when I said that, which I think uses the 3/1 split, not totally sure though
21:45:49 <b_jonas> oh, x86_32 windows! I don't know then
21:48:16 <Lymia> Yeah, imma end this at generation 10000.
21:48:20 <Lymia> And throw the best hits onto the hill.
21:48:26 <Lymia> Looks to be stagnating.
21:48:54 <Lymia> !zjoust hszr-g1423h1n2-remote-job <
21:48:54 <zemhill> Lymia.hszr-g1423h1n2-remote-job: points -46.00, score 0.00, rank 47/47 (-13)
21:49:37 <Lymia> (The evolver uses small generations with few new bots each generation, because of the computational costs of BF Joust hills)
21:52:39 -!- Everythi1g has joined.
21:53:09 -!- Everything has quit (Ping timeout: 276 seconds).
21:59:59 <esolangs> [[10 1]] https://esolangs.org/w/index.php?diff=144596&oldid=144568 * Ais523 * (-37) /* Implementations */ compilers and interpreters are both valid ways to implement a language but it doesn't make sense to label a compiler as an interpreter, so rename the section to the more general "implementations" and adjust contents to match
22:14:40 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
22:16:43 <esolangs> [[S.B.M.F.B]] https://esolangs.org/w/index.php?diff=144597&oldid=140530 * Kaveh Yousefi * (+579) Added a hyperlink to my implementation of the S.B.M.F.B programming language on GitHub and altered the Unimplemented category tag to Implemented.
22:18:13 <esolangs> [[S.B.M.F.B]] https://esolangs.org/w/index.php?diff=144598&oldid=144597 * Kaveh Yousefi * (+508) Introduced an examples section which embraces as its two incipial members a Hello, World! printer and a repeating cat program.
22:19:57 <Lymia> No more evolver freezes.
22:20:06 <Lymia> So I'm reasonably sure the bug I caught in chainlance is the issue.
22:25:20 <esolangs> [[C-fuck]] N https://esolangs.org/w/index.php?oldid=144599 * Baldibacak * (+878) Created page with "<pre>C-fuck is an esoteric programming language design by ~~~ C-fuck is 1+1 copy of c but it doesnt have variables instead it uses a single array called memory C-fuck is not implemented yet or there is any plan of implementing it if it did existed here are some pro
22:25:54 <esolangs> [[C-fuck]] https://esolangs.org/w/index.php?diff=144600&oldid=144599 * Baldibacak * (-14)
22:27:04 -!- Sgeo has joined.
22:33:14 -!- tromp has joined.
22:38:37 -!- salpynx has joined.
22:43:45 <esolangs> [[PyChr]] https://esolangs.org/w/index.php?diff=144601&oldid=144569 * ShirAko * (+57)
22:43:54 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
22:53:42 <Lymia> !ztest hszr-g1904h5n7-rowdy-mate-simplified .-((+)*9(-)*4+++)*-1
22:53:42 <zemhill> Lymia.hszr-g1904h5n7-rowdy-mate-simplified: points -0.40, score 21.18, rank 21/47
22:54:12 <Lymia> Can someone explain to me how a completely primitive vibration program is not dead on this hill. XD
22:55:23 <Lymia> What the heck is special about this specific combination of vibrations.
22:56:00 <Lymia> !zjoust hszr-g1904h5n7-rowdy-mate https://dl.rimin.moe/paste/lymia/hszr-g1904h5n7-rowdy_0x1vw1r2pf474ws36b4xzy6pqmndiqsj8dba340v7zyzsj5s3v42.bfjoust
22:56:03 <zemhill> Lymia.hszr-g1904h5n7-rowdy-mate: points -0.40, score 21.18, rank 21/47
22:59:14 <esolangs> [[PyFuck]] https://esolangs.org/w/index.php?diff=144602&oldid=144581 * ShirAko * (+224)
23:00:16 <ais523> Lymia: lots of programs sacrifice win rate against vibrators to beat other things – it's rare for vibrators to be totally dead
23:00:31 -!- Everythi1g has quit (Quit: leaving).
23:00:38 <ais523> although, that's a shudder program, not a vibrator
23:01:14 <Lymia> Any little adjustment to the shudder pattern there makes the score shoot down.
23:01:42 <Lymia> Which is surprising, given no bots on esohill contributed to the fitness/internal hills at all.
23:01:43 <ais523> in fact, with the current knowledge of BF Joust strategies, shudder programs should in theory form part of an equilibrium
23:02:13 <Lymia> So something about that specific shudder pattern generalizes across hills.
23:02:15 <ais523> I think it may be impossible to reliably simultaneously beat both ash with randomized constants, and a shudder program with randomized constants
23:04:10 <ais523> the breakdown is interesting, it reliably loses against all my programs except the original margins (which seems reasonable) and impatience (which intentionally sacrifices winrate against programs that actively defend their own flag)
23:04:24 <ais523> but it beats lots of programs by other authors
23:06:04 <Lymia> I know an approach like Nyuroki's clear loop probabilistically solves that conundrum, at least.
23:06:26 <Lymia> Probably something about that specific pattern abuses the probabilistic solutions somehow.
23:06:37 <ais523> yes – although you probably need to test more than twice to get the probability high enough against a sufficiently advanced shudder program
23:07:19 <Lymia> There has to be some probablistic anti-shudder on the evolver's hill, I think.
23:07:29 <Lymia> Or else no reason something this effective would A) emerge, B) top the internal hill.
23:07:56 <ais523> oh wait, this pattern simplifies (+)*12(-)*4, that adjusts by 8 every 16 cycles (thus locking a 2-cycle clear going downwards), and it is very likely to push a 2-cycle clear going upwards past 0
23:08:27 <Lymia> !ztest hszr-g1904h5n7-rowdy-mate-simplified ((+)*12(-)*4)*-1
23:08:28 <ais523> so this is a very strong probabilistic lock in addition to being a shudder program
23:08:28 <zemhill> Lymia.hszr-g1904h5n7-rowdy-mate-simplified: points -2.52, score 17.81, rank 28/47
23:08:37 <Lymia> !ztest hszr-g1904h5n7-rowdy-mate-simplified .-((+)*12(-)*4)*-1
23:08:38 <zemhill> Lymia.hszr-g1904h5n7-rowdy-mate-simplified: points -0.14, score 21.27, rank 21/47
23:08:55 <Lymia> !ztest hszr-g1904h5n7-rowdy-mate-simplified -((+)*12(-)*4)*-1
23:08:56 <zemhill> Lymia.hszr-g1904h5n7-rowdy-mate-simplified: points -4.52, score 15.10, rank 38/47
23:09:02 <ais523> if I asked an evolver to come up with a pattern to defend its own flag I would expect it to come up with something like that
23:09:13 <Lymia> !ztest hszr-g1904h5n7-rowdy-mate-simplified ..((+)*12(-)*4)*-1
23:09:14 <zemhill> Lymia.hszr-g1904h5n7-rowdy-mate-simplified: points -4.67, score 14.90, rank 39/47
23:09:33 <Lymia> The extra-confusing part to me is that the initial - and the initial 2-cycle delay are both important
23:09:33 <ais523> combine that with setting no decoys, and the idea is to win short tapes via overshoot and draw long ones
23:11:06 <ais523> in theory the delay and offset should be based on the details of the opposing programs, e.g. imagine if the opposing programs got there 1 cycle later (e.g. due to making one of their decoys 1 higher), now you'd need a 2-cycle delay to synchronise
23:11:10 <ais523> so I suspect the delay is just chance
23:11:20 <ais523> I feel like the offset helping is also just chance but am less certain on that one
23:11:25 <Lymia> What's weird is that the delay's working on an unrelated hill to its origin hill.
23:11:42 <esolangs> [[PyFuck]] M https://esolangs.org/w/index.php?diff=144603&oldid=144602 * ShirAko * (+0) For some reason the '' empty string didn't seem to work so changed it to ""
23:11:47 <korvo> Lymia: I know it's not a satisfying answer, but I suspect that the target hills just aren't large enough for the biodiversity y'all desire.
23:12:29 <korvo> I haven't actually defined entropy for jousters or anything like that, so I don't know how diverse the hill currently is, but 47 just seems like a small number to me.
23:13:35 <ais523> korvo: well, we haven't identified all that many basic strategies
23:13:56 <ais523> 47 is large enough to usually have each basic strategy represented by multiple bots
23:14:22 <Lymia> I'd personally like to see it increased to help compensate for the instability that markov scoring induces.
23:14:46 <ais523> except that fast rush, vibration and shudder are all known to struggle sometimes (fast rush and shudder are doing fine right now but vibration seems dead)
23:15:25 <korvo> ais523: So, my prior for this sort of thing is that perhaps only 1-2% of the ecosystem is going to be worth studying. 47 isn't even 50, which would give us one interesting candidate per hill on average.
23:15:44 <ais523> korvo: oh, you mean from an evolver?
23:15:55 <ais523> I thought you were talking about the human hill
23:15:59 <korvo> Sure, or from any evolutionary process, like having humans chat on IRC.
23:16:27 * korvo having trouble distinguishing humans from the rest of thermodynamics today
23:16:46 <ais523> well, I think the majority of the hill is interesting, and has been for a while
23:17:04 <ais523> the less interesting programs tend to fall off quickly, because being boring = being predictable = being exploitable
23:17:25 <ais523> the majority of programs in the top half of the hill do at least one thing that no other program on the hill does
23:17:53 <Lymia> I'm using 10 hills of 50 bots.
23:18:03 <ais523> ash's triplock, impatience's stupidly fast timer, nyuroki's very pure reverse decoy setup…
23:19:09 <ais523> oh wow, I think there's an interesting meta emerging with reverse tripwires, too
23:19:27 <ais523> lots of programs use size-1 reverse tripwires, you can avoid triggering those half the time by leaving a size-1 trail
23:19:46 <Lymia> Found one of the attackers from the hill that vibrator's from: .>(+)*26>-->(-)*4-(>-(+)*17>->-()*-1-->((-->(+>[(-)*3[+]])*5)*72464{})*-1)*15108
23:19:46 <ais523> and defenders are exploiting that with size-*0* reverse tripwires – leave a cell empty and see if you can detect a trail there
23:20:12 <ais523> wait, what does ()*-1 mean
23:20:24 <ais523> that's a fun syntax corner case
23:20:32 <ais523> yes, but it's infinite amounts of nothing
23:20:46 <salpynx> Lymia, did you say say you had a 100% winning evolved bot, with a Markov score of 46 (i think that's max, but wanted to confirm / see it)?
23:20:57 <Lymia> That one wasn't evolved.
23:21:17 <ais523> was it 100% winning as in beating all other programs, or as in beating them all on all tape lengths and polarities?
23:21:25 <Lymia> Beating all tape lengths and polarities.
23:21:39 <salpynx> it was generated / calculated though?
23:21:41 <ais523> OK, so someone finally figured out how to do that
23:21:47 <ais523> we went back and forth on how difficult that would be
23:21:52 <Lymia> It used a custom bfjoust evalulator that ran the matches in parallel rather than serial: So at any time, it could examine the state it would be in vs every other opposing program and generate a "silver bullet" program.
23:22:10 <Lymia> Was on the hill at one point, then took it off because it fucked up the hill. XD
23:22:36 <ais523> I think the only way something like that would fail would be if there were two incredibly similar programs on the hill
23:22:43 <salpynx> nice, i had thought about how hard that would be, and whether a max score was possible. Nice.
23:22:45 <ais523> making them difficult to tell apart
23:23:03 <ais523> ("we" = BF joust players in its early history)
23:23:25 <ais523> very early versions of BF Joust kept program source secret to stop people doing that, although it mostly hasn't been a problem in practice
23:24:21 <Lymia> The issue is that the output of that program is unintresting.
23:24:25 <Lymia> Only the generator itself is interesting.
23:25:06 <ais523> the really interesting part would be how stable you can make something like that
23:25:09 <ais523> to new programs arriving
23:25:25 <salpynx> I like the idea of a separate hill for anything goes, machine generated bots, so it becomes a meta-game of coding bots to make bots that play well against similar automated strategies
23:25:38 <ais523> another thing I've been considering is an abbrevation for slightly randomized constants, to stop people special-casing against you
23:26:42 <ais523> but that has some obvious logistical problems
23:27:09 <Lymia> wtf I seem to have a memory leak in the evolver.
23:27:24 <Lymia> ais523: the abberviation could be seeded on the hill, but the exact seed is hidden.
23:27:38 <Lymia> So a compromise between secret source and such.
23:29:14 <zemhill> web.ais523_ash: points 7.81, score 41.98, rank 1/47 (--)
23:29:23 <ais523> thank you for helping to debug ash :-)
23:29:58 <Lymia> urgh, time for MISERY
23:30:01 <Lymia> I have a memory leak.
23:30:26 <esolangs> [[BF Joust champions]] M https://esolangs.org/w/index.php?diff=144604&oldid=143984 * Ais523 * (+0) /* 2024 */ ash was bugfixed, link to the latest version
23:31:02 <ais523> it is surprising how often, when designing BF Joust warriors, that I can't count to 10
23:31:13 <ais523> or, rather, count past it
23:31:48 <Lymia> (nvm, it's not misery, just code I forgot to add in.)
23:32:23 <zemhill> web.ais523_ash: points 7.81, score 41.98, rank 1/47 (--)
23:32:39 <ais523> …except that I somehow submitted the old version by mistake
23:33:13 <Lymia> (My 96GB of RAM hid a memory leak from me, lol.)
23:33:23 <esolangs> [[BF Joust champions]] M https://esolangs.org/w/index.php?diff=144605&oldid=144604 * Ais523 * (+0) /* 2024 */ correct link
23:34:22 <ais523> impatience still seems to have the decoy-zero-flag bug, although it doesn't trigger in as many circumstances
23:34:33 <ais523> the control flow of flexible timer clears is hard to reason about
23:35:06 <Lymia> I completely forgot to free the opcode list and compiled programs.
23:35:11 <Lymia> So it wasn't even a subtle leak.
23:36:57 <Lymia> This is why I shouldn't write C...
23:38:06 <ais523> Lymia: oh wow, so I decided to swap the handwritten shudder loop from ash out for the one you evolved, and it does even better – significantly more better
23:38:13 <ais523> but now I am not sure whether I should submit it or not
23:38:32 <salpynx> my changes to Lymia's Nyuroki still do well, its score has been fluctuating, recent changes have put it back over 50. I guess i should analyse what the changes from the original _mean_
23:39:25 <salpynx> !ztest experiment_optinyuroki https://raw.githubusercontent.com/hornc/JoustExt/897620ad597db89b3378aa7881023c354fe887af/examples/nyuroki-opti.bf
23:39:25 <zemhill> salpynx.experiment_optinyuroki: points 19.55, score 51.02, rank 1/47
23:41:56 <ais523> mostly this is minor changes – significant changes are -24 to -8 against lugh and -12 to -31 against stealth4, both of which may be timing randomness
23:42:25 <ais523> oh and +0 to +7 against XspeedX – a smaller increase but one that changes the match result
23:42:58 <ais523> there are also a lot of +1/+2/+3 improvements – most of those are likely to be cases where the better shudder helps but isn't usually used
23:45:09 <Lymia> !zjoust hszr-g9953h5n3-sizzling-distance https://dl.rimin.moe/paste/lymia/hszr-g9953h5n3-sizzl_099zcq37p3cyf7wwaps4ibas6y1gqpfcn96c6s18kzcxv52njh7f.bfjoust
23:45:09 <zemhill> Lymia.hszr-g9953h5n3-sizzling-distance: points -3.98, score 16.90, rank 32/47
23:45:18 <Lymia> Best offensive program I could find on the internal hills.
23:46:39 <ais523> it's less innovative than good evolved programs usually are
23:47:19 <ais523> I guess the reason it doesn't do very well is that this is the sort of program that everyone is starting out by optimising against
23:49:10 <ais523> i.e. if your warrior isn't designed to beat programs like sizzling-distance, what sort of programs *is* it defined to beat?
23:49:17 <Lymia> There's almost definitely better on that hill, but I lack the means to find them.
23:50:02 <ais523> there was that one program ages ago that was designed primarily to beat turtles rather than medium rushes, but that was a significant exception
23:50:46 <salpynx> ()*-1 is a NOP right? it seems like there are multiple possible ways to interpret the spec tho
23:51:26 <salpynx> "giving a repeat count of -1 indicates that the enclosed section of code should be repeated until the match is over." I'd assume it would hang and do nothing until the match is over, and never reach the subsequent code
23:51:37 <Lymia> Yes. But that's bad for the hill. :)
23:51:40 <ais523> to me, it's invalid code
23:51:54 <Lymia> In practical bfjoust implementations, ()*-1 is a true nop.
23:51:57 <Lymia> !ztest wtf https://dl.rimin.moe/paste/lymia/hszr-g12235h6n6-slee_1pb6xy776sbf2xp82sknmfajk4kpz4cxhvl3vg7jn8ivl6n3dyij.bfjoust
23:52:00 <zemhill> Lymia.wtf: points -0.95, score 19.37, rank 26/47
23:52:03 <Lymia> I'm going to need to reverse engineer this thing.
23:52:06 <ais523> but my interpreter is stricter than many and I sometimes have to modify programs to make them work with it
23:52:13 <Lymia> Last interesting program I found on the hill in the current version (before I continue on)
23:52:50 <salpynx> hszr-g9953h5n3-sizzling-distance.bfjoust has a ()*-1 in it, which is why I'm mentioning it :)
23:53:10 <ais523> wow that's a big program
23:53:45 <ais523> I think most of it is dead code
23:53:51 <ais523> but it's hard to even match the parens
23:54:05 <Lymia> Yeah, it's just the same vibrator.
23:54:11 <Lymia> But with a mess of dead code.
23:54:21 <Lymia> I'm writing an optimizer pass for a reason, lol.
23:54:29 <Lymia> The core warrior generation code can explode in code length.
23:54:33 <Lymia> Without regard for whether it's dead.
23:55:15 <ais523> maybe you should do it like real-life evolution, where dead code can have an influence on how likely the surrounding code is to mutate
23:55:42 <ais523> (live code too, but dead code is only useful for that and for absorbing damage)
23:57:18 <esolangs> [[Hello world program in esoteric languages (N-S)]] https://esolangs.org/w/index.php?diff=144606&oldid=144215 * ShirAko * (+22564) Added for PyFuck and PyChr
23:58:24 <esolangs> [[PyChr]] M https://esolangs.org/w/index.php?diff=144607&oldid=144601 * ShirAko * (+27) Added rectwarp for better readability