« first day (7 days earlier)      last day (36 days later) » 

12:49 AM
ugh i just test my bot against burrowing wheel and it only survive 5 deletions
 
 
1 hour later…
2:12 AM
Wem
@mousetail update reminder
 
 
3 hours later…
5:27 AM
posted an ascii piet bot :D
probably like 10th place is my estimation
@mousetail u already have python and c installed right, i dont have to specify the download instruction for those?
 
6:03 AM
@AidenChow Yes
 
@mousetail k good to know
 
As long as you have a compatible version of both
If you need a older python version or clang or something you need to specify instructions
 
@mousetail i think latest version of python is fine
not sure about c tho
npiet is from 5 years ago
maybee u can do a quick test to see if it works?
 
C doesn't change that fast
 
@mousetail lol idk, i dont use c
 
6:15 AM
C is over 50 years old
 
@mousetail oh really? i didnt know that lol
does my new bot work btw?
 
@NumberBasher hi!
@NumberBasher i have no idea what that is
 
6:44 AM
Unlikely
 
^
it needs to be voted on
also @mousetail did u get my piet bot to work or no
 
Any suggestions on the lang?
 
@AidenChow Not yet
 
@NumberBasher probably ask in tnb or smth, not in this chatroom
@mousetail oh rip, whats the error?
 
I'm trying to find it
It dumps all errors in a 10 MB giant log file
 
6:47 AM
@AidenChow seems like nobody is in the chatroom https://chat.stackexchange.com/rooms/240/the-nineteenth-byte
@mousetail good luck finding it
 
@NumberBasher Doesn't mean you can use unrelated chatrooms
 
^
we tryna talk about the koth rn
 
True, then everybody go to TNB to see my lang
@AidenChow ok
 
@AidenChow This seems to be the error:
cannot read from `src.png'; reason: unknown PPM format
 
bruh it requires PPM ???
 
6:48 AM
IDK what that means
 
bruuuuh the specs literally says it can accept png files
so confused
 
Maybe it needs more dependencies to support png
For example if you just ./configure python in a blank container it won't have SSL support
 
have no idea what ssl is but ok
 
@Bubbler
Traceback (most recent call last):
  File "//golfish/src/golfish.py", line 21, in <module>
    from fractions import gcd
ImportError: cannot import name 'gcd' from 'fractions' (/usr/lib/python3.10/fractions.py)
Traceback (most recent call last):
  File "//golfish/src/golfish.py", line 21, in <module>
    from fractions import gcd
ImportError: cannot import name 'gcd' from 'fractions' (/usr/lib/python3.10/fractions.py)
 
bro i need to ask bubbler about this error, he basically gave me the install and run instructions and i just copy pasted
idk how to convert it to smth npiet can take
some flag maybe
 
6:53 AM
I guess both new submissions require input from bubbler then. Thief works properly at least
 
Bubbler, the actual bot
 
Bubbles implies being under water which is typically bad for bots
 
Bubbler (someone who bubbles) implies having to bubble, which implied being under water, which implies a bad bot. Therefore, Bubbler is bad. Good logic.
 
seems like the important part of the npiet code is this:
#ifdef HAVE_GD_H
fprintf (stderr, " ");
#else
fprintf (stderr, "out ");
#endif
fprintf (stderr, "GD support, with");
#ifdef HAVE_GIF_LIB_H
fprintf (stderr, " ");
#else
fprintf (stderr, "out ");
#endif
fprintf (stderr, "GIF support, with");
#ifdef HAVE_PNG_H
fprintf (stderr, " ");
#else
fprintf (stderr, "out ");
#endif
fprintf (stderr, "PNG support)\n\n");
it seems like it has some if statements to check for png and gif support
problem is i cant read c code that well so idk the conditions that are needed
 
@AidenChow You probably need to check the makefile rather than the code itself
It will decide which defines are enabled
Or check the configure file, which will generate the makefile
 
7:08 AM
@mousetail ummmm its like hella long
i cant make sense of any of it
 
Important line from the readme:
if compiled with gd-lib and png-lib support (if avail), graphical
trace output can be created by npiet - great fun ;-)
 
@mousetail ya but we dont want graphical trace output
 
True, but it implies png-lib is a seperate thing
 
ok well bruh wtf is png-lib, gotta go searching for that now
 
Yea, I've used libpng (github.com/libpng/libpng) but not sure if it's the same or different from png-lib
 
7:15 AM
lol try it out, it might be
 
probably not the same, considering there's too many libraries
 
libpng is the official Portable Network Graphics (PNG) reference library (originally called pnglib). It is a platform-independent library that contains C functions for handling PNG images. It supports almost all of PNG's features, is extensible, and has been widely used and tested for over 23 years. libpng is dependent on zlib for data compression and decompression routines. libpng is released under the libpng license, a permissive free software licence, and is free software. It is frequently used in both free and proprietary software, either directly or through the use of a higher level image...
> (originally called pnglib)
so im thinking its probably the same thing
 
hmm...
 
@mousetail For this error you can just edit from fractions import gcd into from math import gcd
 
7:31 AM
@NumberBasher why tf u posting this link here, this is the chatroom for the koth
 
7:44 AM
@mousetail did it work with libpng?
 
I guess mousetail is not here
 
8:29 AM
@AidenChow How do I install it
@Bubbler Can you please fork the repo if you want to use a modified version
 
8:46 AM
@mousetail idk man :(
never heard of libpng until now
probably smth like git clone https://github.com/libpng/libpng.git libpng ?
and u need to run github.com/libpng/libpng/blob/main/autogen.sh after install it seem like
oh wait libpng requires some other thing called zlib
damn
 
Can't you install it with apt?
 
9:11 AM
@mousetail maybe, i searching on ask ubuntu rn
ok well i found smth
sudo apt-get install libpng-dev
and for the dependency, zlib:
sudo apt-get install zlib1g-dev
 
Um now the entire controller broke
Traceback (most recent call last):
  File "/home/mousetail/SideProjects/Radiation-Hardened-Koth/src/main.py", line 202, in <module>
    asyncio.run(combine_all())
  File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
    return future.result()
  File "/home/mousetail/SideProjects/Radiation-Hardened-Koth/src/main.py", line 194, in combine_all
    results = await asyncio.gather(*(run_all(i) for i in range(0, 6)))
 
bro idek
u can read those errors better than i can
 
I don't know how to recover from this other than restarting the container
 
wait so u ran the sudo thingy and now the whole controller is busted?
 
I don't think it's specifically related to your program, one bot is generating a very large amount of output on one line
which exceeds the line length limit of pythons readline function
a very long limit
 
9:23 AM
i could see that being my piet program going haywire
specifically, if enough chars get deleted, the code wont halt and keep outputting
or maybe not, idk
 
I added | head -c1000 to the end
should maybe fix it
 
so my piet bot is working now?
@mousetail wat that do
 
Limit to 1000 bytes
 
if the output is more than like 5 chars then its guaranteed not valid
 
some bots output multiple extra newlines
I decided to allow it
 
9:26 AM
oh ok
 
I guess you could abuse this by adding 1000 line breaks after your answer instead of exiting
but I doubt it would benefit you
 
i could see myself utilizing that to "halt" my bot instead of actually halting it normally. halting a program in piet is always such a pain
 
I'd consider that exploiting the controller
Your bot does quite ok now
 
ay top 10 nice
also wow thief just stole 1st from distributed dmg
amazing
 
Exteremly impressive to beat a esolang with a practlang
their difference is extremly small, I'd consider them equal
 
9:34 AM
rookie drop down to 4th rip
 
So many good bots now playing that top4 is impressive
 
i feel like my rookie bot and comment skipper are pretty equal, sometimes my bot is above but other times comment skipper is above, its just kinda by chance i feel like
 
Thief would be in trouble if aes fixes the unicode issues for burrows wheel and almost rare
but right now they can't really handle invalid unicode so it goes thief a advantage
 
aes? whos that
oh u mean ais lol
 
oops yes sorry
I am way out of my depth writing a controller for something like this. I'm very concerned the ranking is influenced by bugs
 
9:49 AM
@mousetail nah u hella good at coding, dw
also i updated my piet bot becuz i noticed a vulnerability, if u have could u run it again
 
Happy Birthday
 
 
1 hour later…
10:58 AM
 
@Bubbler Yes that's your bot
 
I think because any remove of the ` characters destroy your bot
 
Err... I was pretty sure it'd survive backtick deletion but idk
 
idk, i dont know the lang
did you test your bot
maybe the bot had problems, not the deletion
the deletion just happened to make the problem visible
 
@Bubbler No it dies immediatly regardless of characters
since the controller can't start up
 
11:09 AM
erm
 
What is happening is it's attacked there, then it dies. But it was already dead. So the highlight is a bit useless
 
11:31 AM
This room is more active than TNB lol
 
11:44 AM
@NumberBasher TBF we where the majority of the talking in that room before they split
 
very true
 
 
2 hours later…
1:49 PM
** (FunctionClauseError) no function clause matching in String.trim_trailing/2

    The following arguments were given to String.trim_trailing/2:

        # 1
        :eof

        # 2
        "\n"

    (elixir 1.12.2) lib/string.ex:1215: String.trim_trailing/2
    (osabie 1.0.1) lib/reading/input.ex:8: Reading.InputHandler.parse_multiline_string/1
    (osabie 1.0.1) lib/reading/input.ex:8: Reading.InputHandler.parse_multiline_string/1
    (osabie 1.0.1) lib/reading/input.ex:29: Reading.InputHandler.read_input/0
 
I deleted my golfish bot, maybe the interpreter itself has something wrong with nonascii i/o
 
@Bubbler It's just the GCD error
you can fork it to fix the issue
 
2:05 PM
@mousetail in order to clear LC_ALL, the variable has to be unset entirely; easiest way to do that is probably to use the env command as a prefix to the Jelly command
 
@ais523 Won't that clear LANG too though?
 
so something like env -i LANG=C.ISO-8859-1 jelly f programfile
env can set variables as well as clearing them
(this should also make it possible to have environment variables set inside timeout
 
Ok nice
I'll probably replace all my environment variable settings with this then
To not polute the global scope
 
$ dpkg -S /usr/bin/env
coreutils: /usr/bin/env
(in case it isn't installed)
but coreutils seems pretty important
 
Yea I needed coreutils for base64
 
2:09 PM
IIRC there are some Linux distros with only two programs installed in the "usual" places (/usr/bin and /bin) and env is one of them, I forget what the other one is
the reason is that env is always in /usr/bin so that you can use it to run programs via a hardcoded path, in cases where the calling program doesn't know how to do a path lookup
so if you want to run, say, Perl no matter where it happens to be on this OS, you can write /usr/bin/env perlenv is always in /usr/bin and it knows how to look for perl
 
Yea I've seen programs use #!/usr/bin/env python but never really thought about what it meant
 
it will only look on $PATH though, so if the program is somewhere weird you still need to give the full path
also, wow, some mod must have put in a lot of effort working out which messages to move
when this chat room was created
 
true, @emanresuA did a lot of work
 
@mousetail reason we're using ISO-8859-1 (or "Latin-1" for short) is that its codepoints are in order in Unicode – in Latin-1, the byte with value x maps onto the Unicode codepoint with value x, e.g. an 0xA0 byte is interpreted as the Unicode character with codepoint 0xA0, so all 256 possible bytes map on to 256 different Unicode characters in a way that makes codepoint math work
 
@mousetail What does the input look like when you get that error? If I look at the 05AB1E source code, it seems to check for the trailing """ for multiline inputs. Do you also have a leading """? And which of the programs from the other answers was used as input?
 
2:22 PM
@KevinCruijssen Give me a moment I can check. The logfile is huge so it's a bit of searching
 
2:43 PM
Ok running the controller now consistently BSODs my PC
F not sure how to run it now
Sometimes it just freezes my cursor for 10 minutes
 
try reverting changes you made recently?
 
Only change I made was adding env to all commands that use environment variables
 
are you using the Windows or Linux version of Docker? Probably running the Linux version through WSL would be less likely to cause BSODs
BSODs are so hard to debug on Windows, unfortunately
(the last time I got the equivalent on Linux I did manage to debug it to the extent of finding a vlable workaround, although it's a pain – with no working kernel, you can't save the debug information anywhere nor take a screenshot, so I had to copy it all down by hand using pencil and paper)
 
3:22 PM
I was on linux. By BSOD I meant my window manager crashed
This was my work computer, but now I'm at home on my windows laptop which was typically must worse at running the challenge
 
@mousetail i dont think u updated my piet bot yet in the leaderboard
also my bot is dropping places, sad
might need to do another revision for the newer bots
 
Yea as expected the unicode fix made all ais's bots OP
 
3:45 PM
@mousetail ya ais just too good
also happy bday!!!!
 
4:12 PM
@mousetail I noticed Thief was being mostly killed by simple first character deleters, so I hardened it a bit more.
Well, maybe not simple. Some of them are pretty hard to kill.
 
@mousetail you accidentally linked my revised piet bot with kevins bot protect and shoot randomly
 
4:49 PM
@OskarSkog fwiw, the greatest number of deletions I've been able to harden a first-character-deletion bot against is 27
(i.e. the program can withstand any 27 characters being deleted)
but that would die in 30 rounds to a first-character-deleter itself, so I'm not convinced it would do very well
I think that part of the reason Distributed Damage works so well is that it's 192-hardened against deletions from the start, so if it ends up in front of a first-character-deleter, it has time to kill pretty much everything
 
I'm interested to see how well a last character deleter would work
 
in general, the way the hill works is pretty weird when there's a mix of defensive and offensive programs – if an offensive program ends up being attacked by a defensive program, it gets a huge advantage, whereas if it ends up attacking a defensive program, it gets a huge disadvantage
 
Still need to find a suitable language to write it in
 
for my programs: it would pretty much kill Comment Skipper in 5 (by causing it to always output the index as 0, killing it unless it happens to want to delete the first character anyway)
Distributed Damage survives 192 last character deletions as long as the first character is intact
The Burrowing Wheel can survive 3 last character deletions (its chaff is intentionally front-loaded due to the hill composition)
and Almost Rare can survive 27 I think – I chaffed that area because it was an early bot and I wasn't sure what the hill would look like
last character deleters are hard to write because you need a language with EOF handling, and that can express arbitrary numbers in decimal
 
I don't think such a bot would be top tier against but be strong in some specific situations so maybe be top 50%
If hardened enough
 
5:00 PM
A Pear Tree might be a good language for that
its implicit input handles byte counting and EOF the way you'd want, and has a "length" builtin that lets you get at the index of the last character easily
so unhardened it'd be something like #r3TQJ\n/.$/;$_=length."$&"
and that gives you a lot of room for redundant copies and chaff
(the #r3TQJ start is a good tip for testing A Pear Tree programs – it's an easily typable checksum that checksums itself rather than the rest of the program, so it gets you around the a partridge error without limiting what you can write later on)
oh, needs to be /.$/s I think, so that it matches newlines
and " $&" not just "$&"
 
That would probably live quite long at least
 
it's a pity that length has a fairly long name
oh, and need to subtract 1 from the length because we need to return 0-indexed positions
#r3TQJ\n/.$/s;$_=(length-1)." $&"
ugh, needs to be (length)-1
otherwise it takes the length of the number -1
not a great time to hit a syntax ambiguity :-(
 
Thanks, but I'd actually like to find some less specialized language that happens to ignore invalid lines
 
What about Perl? Are the memes true enough?
 
A pear tree is basically pearl with checksums
what memes?
 
5:15 PM
@mousetail: That anything is a valid Perl program
 
it isn't true, keyboard mashing is almost always invalid in Perl
unless it consists pretty much entirely of letters/digits/semicolons
 
The entire point would be that invalid code would do nothing
 
the "83% of paint splatters are valid Perl programs" results are generally obtained by tweaking the OCR to not output spaces or punctuation
 
Not do something else than what I want
 
you might want to check the polyglot for ideas? it's full of languages which ignore anything they don't understand
 
5:17 PM
Yep I'll check it out
 
but I don't know how many of them can read to EOF
 
You don't want to know how many whitespace interpreters I had to try before I found one that could read EOF
 
I had a similar issue with brainfuck once, trying to find an interpreter that could distinguish EOF from all 256 valid bytes
I got there in the end but I had to go through so many interpreters to get it to work
 
It's one thing language designers never think about
just have to find a interpreter bugged in a way that's usable
 
I think about it
 
5:20 PM
I happen to have an unreleased tailstrike program, but it's yet another Python and I don't think it'll live very long.
 
but in many cases it has nothing to do with the goals of the language
e.g. TC-proving languages generally don't need I/O at all because you don't need I/O for Turing-completeness
and with low-level languages intended for translating between languages, I often intentionally don't have working EOF handling because the languages I'm translating into also don't have working EOF handling, so if I mandated a working EOF, the translation wouldn't be possible
 
Makes sense, it's rarely useful but when you need it there is no alternative
 
EOF is also hard to define from the point of view of inputting into a program, too
UNIX/Linux doesn't have an actual EOF condition, just a "no more data available right now" condition; it's possible to read a file, get "no more data", read it again, and get actual data again
(this can happen if the file is appended to between the reads, or if it's a terminal and the user sent an EOF manually with Ctrl-D)
 
That's good enough though right? You use EOF when getting input from a file, other things can send a EOF only when mimicking a file
Yes you can type after cntrl-D but I wouldn't expect a program to deal with that in any sensical way
 
it's generally good enough because few programs read after EOF to see if the file has grown
(less does, incidentally; if you try to scroll beyond EOF, it'll send another read system call at the file to see if it's become any longer)
 
5:37 PM
Well, if you reach the end of the content of the file as it currently is, did you or did you not reach the end.
 
I'm the sort of person who thinks that there's a conceptual problem with the concept of "end of a file"
e.g. /var/log/syslog I would not consider to conceptually have an end, just a point it's reached so far
in many older OSes, files always had to be a multiple of, e.g., 512 bytes long – the "conceptual end of file" was signalled in-band
 
 
2 hours later…
7:37 PM
Assuming there was a program that would cause any program to fail but itself would always fail, what would happen to it scoring wise?
"cause any program to fail" meaning that if a program tried to remove a byte from it, itd fail, and "itself would always fail" meaning that it never outputs validly
why are words so hard
like i know the empty string is automatically disqualified, but imagining it weren't, what would it score?
challenge body says it'd be "unbeatable" but that's only true if it goes last :P
(right?)
 
7:54 PM
@thejonymyster it would earn 0 points, since none of the failers would be atributed to itself
See this comment chain:
If a bot causes its attacker to die by including null bytes or invalid encoding, does that count as a kill? –
Oskar Skog
8 hours ago
1
@OskarSkog No, since there is no way to tell. The kill is always awarded to the last attacker, not the victim. There would be no way to tell if the previous attacked or the victim caused the crash except maybe for the very first but I don't want to special case that.
 
8:26 PM
ohh right, thanks :-)
 
Why does Python 3 have to be so bloody annoying, it won't accept ISO-8859-1 no matter how try.
 
8:50 PM
@mousetail before u update the leaderboard, u gotta fix the switch up with my bot and kevins bot. u accidentally put my bots code into the other bot
 
Yes it's been fixed in the repo
still need to figure out how to run the controller without crashing my PC
 
@mousetail why whats happening
 
Burrows Wheel is making me run out of RAM
 
@mousetail oh damn riiipp
 
When it was bugged it died pretty fast but now that it's fixed it's a problem
 
8:54 PM
@mousetail it creates a multidimensional 256×256×256 array, and I'm not quite sure how much overhead Python has for those things
 
I don't know what's happening exactly btw, this is just my theory
 
this is what happens when writing algorithms tersely (to shrink the core) is more important than writing them efficiently
 
256x256x256 is a good amount
 
it should be well within the capabilities of modern computers, though
2^24, so 16 MiB of data + however much overhead Python has
Perl has a ridiculous amount of overhead for this sort of thing (factor of 10-100, I think); I don't know whether Python is the same
 
How did you get 16MB, I got 134
Wait MiB
Yea in python even integers are stored by reference
 
8:57 PM
256 is 2^8, so 256^3 is 2^24, = 2^4 MiB
 
so you can count about 16 bytes each
 
ah, so this is getting up into the 256MiB – 1GiB range
 
It should be able to be handled but I'm running multiple processes at once
 
depending on how much is needed to specify the data type
 
Time to implement a memory optimized Jelly interpreter
 
8:58 PM
although, hmm, I'm not actually sure that the entire array is created at once
the way Jelly implements , I would have thought that only one 256×256 plane of the array is being processed at a time, then deallocated before moving onto the next one
 
Python never (or extremly rarely) frees any memory. It will reuse memory from garbage collected objects but never release it back to the OS in normal circumstances.
Anyway, I'll look into it tomorrow. Probably just need to reduce the number of concurrent processes
 
ooh, theory: Burrowing Wheel itself has a reasonable memory usage, but the memory usage explodes when it gets damaged
I just tested: memory usage is about 3 MiB in an undamaged run
but damage could easily make it go much larger
it might make sense to stick a ulimit on there in order to prevent excessive memory usage?
ulimit -m 1048576 will limit programs to 1 GiB of memory, which is low enough to prevent runaway swapping but high enough to allow any likely program
(note: this form of ulimit is not reversible within the current shell, you have to exit the shell and restart it to remove the limit)
 
I've found out that using LC_ALL with Python 3 neither helps or is necessary. I've updated only the description of Bastarf (no code change), made major changes to Tailstrike, and updated Thief to not quickly die from a tailstrike.
 
I did realise that there was a cleverer/more interesting way to write Distributed Damage, but it would be some effort
the idea is to write the same program four different ways, rather than literally the same program four times
to make it harder for things like Almost Rare and Thief to shut it down
I'm also wondering whether I should harden The Burrowing Wheel against the closing getting deleted, because it's a very vulnerable point and some programs can identify it
 
I think LC_ALL was messing with the Jelly answers, and that only one of my answers was using it without even needing it. Searching for "LC_ALL" on the page only turns up two hits.
@ais523 I think that would be a good idea, Thief hits it immediately.
 
9:17 PM
I'm not sure how much it makes sense to update programs once they're posted
I did put lots of copies of the other vulnerable characters in the chaff to specifically guard against this sort of thing, but forgot that was also vulnerable
err,
it is so hard to tell those quote marks apart and I may have just written the same one twice
 

« first day (7 days earlier)      last day (36 days later) »