Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
dervival
Apr 23, 2014

Carbon dioxide posted:

If anyone has any improvements for this last puzzle, or any others before it, this is the time to post them. I'll feature those in one final edition of Trash World Inbox next week, before closing the threads.

does DDOSing the AWS IP in file 201 count as an improvement on this puzzle

Either way, thank you so much for this LP! It's been neat seeing the different approaches that people in the thread showed off - truly shows that there's always another way to pick something apart.

Adbot
ADBOT LOVES YOU

Lurker Above
Jun 17, 2014
I greatly enjoyed reading this LP. (And, admittedly, cribbed from it for postgame puzzles 5-8, which were a bit much for me.) Since my own solution for the final puzzle is (technically) an improvement for once, I figured I'd go ahead and post it:

code:
;XA (LOCAL)
MARK WRITEBOT
GRAB 300
COPY F X
DROP
MAKE
COPY X F
COPY X F
COPY X F
MARK PACKING
COPY M X
TEST X > 0
FJMP SENDING
COPY X F
JUMP PACKING
MARK SENDING
ADDI X 1 T ;0 OR -9998
FILE X
DROP
REPL DELIVERBOT
FJMP WRITEBOT;-9998 != 0
;HALT

MARK DELIVERBOT
GRAB X
LINK 800
LINK 885
COPY F X
REPL DNSBOT
COPY M F
SEEK 1
;THE BIG CHECKSUM THING
COPY 0 X
MARK SWIZONE
SWIZ F 0001 T
ADDI X T X
TEST EOF
FJMP SWIZONE
SWIZ X 0001 X
SEEK -9999
COPY #ADDR F;TIMESAVE
SEEK 1
SUBI 0 X F
COPY 0 X
MARK SWIZTEN
SWIZ F 0002 T
ADDI X T X
TEST EOF
FJMP SWIZTEN
SWIZ X 0010 X
SEEK -9999
SEEK 2
SUBI F X X
SEEK -1
COPY X F
COPY 0 X
MARK SWIZHUND
SWIZ F 0003 T
ADDI X T X
TEST EOF
FJMP SWIZHUND
SWIZ X 0100 X
SEEK -9999
SEEK 2
SUBI F X X
SEEK -1
COPY X F
COPY 0 X
MARK SWIZTHOU
SWIZ F 0004 T
ADDI X T X
TEST EOF
FJMP SWIZTHOU
SWIZ X 1000 X
SEEK -9999
SEEK 2
SUBI F X X
SEEK -1
COPY X F
;END CHECKSUMMARY
LINK 800
;SEE YOU SPACE COWBOY

MARK DNSBOT
GRAB 201
MARK DNSLOOP
TEST F = X
FJMP DNSLOOP
COPY F M
code:
;XB (LOCAL)
GRAB 301
MARK READBOT
COPY 30 X
MARK READING
COPY F M
TEST EOF
TJMP FINALE
SUBI X 1 X
TEST X > 0
TJMP READING
COPY -1 M
JUMP READBOT
MARK FINALE
COPY -9999 M
There are basically four "programs" here: Writebot (XA), Readbot (XB), Deliverbot (XA:0), and DNSbot (XA:0:0).
Writebot reads the target domain name, then creates the first packet, filling all three header values with the domain name string. It then receives a chunk of the data from Readbot to append to the packet, ending with either -1 (end of chunk) or -9999 (end of file). When Writebot gets a negative number, it adds 1 to it and stores it in T, then stores the packet's file ID in X, drops it, and then REPLs a Deliverbot. It then either FJMPs back to the beginning, or if EOF was reached it falls through to an invalid command and crashes because FJMP conveniently doesn't consider -9998 to be "false".
When spawned, a Deliverbot immediately grabs its assigned packet, moves over to Network, reads the domain name from the packet into X, and then REPLs a DNSbot, which grabs the DNS file, finds the domain's IP address, and sends that back to the Deliverbot, which in turn stores it in its proper place in the packet header. The Deliverbot then does four loops to calculate each digit of the checksum, adding the local IP address to the packet after one post-loop SEEK -9999 for efficiency's sake. Finally, with the header complete, it immediately delivers the packet.

2566/96/27. It's by no means optimal, but it's what I came up with. Anyway, I would definitely be interested in seeing solutions for the other two top percentiles, especially a 44-line solution.

Carbon dioxide
Oct 9, 2012

Part 53 - Trash World Roundup


=== Trash World Inbox ===

I finished the last puzzle with a score of 2653/98/11. Lurker Above posted a nice improvement.

Lurker Above posted:

I greatly enjoyed reading this LP. (And, admittedly, cribbed from it for postgame puzzles 5-8, which were a bit much for me.) Since my own solution for the final puzzle is (technically) an improvement for once, I figured I'd go ahead and post it:
code:
;XA (LOCAL)
MARK WRITEBOT
GRAB 300
COPY F X
DROP
MAKE
COPY X F
COPY X F
COPY X F
MARK PACKING
COPY M X
TEST X > 0
FJMP SENDING
COPY X F
JUMP PACKING
MARK SENDING
ADDI X 1 T ;0 OR -9998
FILE X
DROP
REPL DELIVERBOT
FJMP WRITEBOT;-9998 != 0
;HALT

MARK DELIVERBOT
GRAB X
LINK 800
LINK 885
COPY F X
REPL DNSBOT
COPY M F
SEEK 1
;THE BIG CHECKSUM THING
COPY 0 X
MARK SWIZONE
SWIZ F 0001 T
ADDI X T X
TEST EOF
FJMP SWIZONE
SWIZ X 0001 X
SEEK -9999
COPY #ADDR F;TIMESAVE
SEEK 1
SUBI 0 X F
COPY 0 X
MARK SWIZTEN
SWIZ F 0002 T
ADDI X T X
TEST EOF
FJMP SWIZTEN
SWIZ X 0010 X
SEEK -9999
SEEK 2
SUBI F X X
SEEK -1
COPY X F
COPY 0 X
MARK SWIZHUND
SWIZ F 0003 T
ADDI X T X
TEST EOF
FJMP SWIZHUND
SWIZ X 0100 X
SEEK -9999
SEEK 2
SUBI F X X
SEEK -1
COPY X F
COPY 0 X
MARK SWIZTHOU
SWIZ F 0004 T
ADDI X T X
TEST EOF
FJMP SWIZTHOU
SWIZ X 1000 X
SEEK -9999
SEEK 2
SUBI F X X
SEEK -1
COPY X F
;END CHECKSUMMARY
LINK 800
;SEE YOU SPACE COWBOY

MARK DNSBOT
GRAB 201
MARK DNSLOOP
TEST F = X
FJMP DNSLOOP
COPY F M
code:
;XB (LOCAL)
GRAB 301
MARK READBOT
COPY 30 X
MARK READING
COPY F M
TEST EOF
TJMP FINALE
SUBI X 1 X
TEST X > 0
TJMP READING
COPY -1 M
JUMP READBOT
MARK FINALE
COPY -9999 M
There are basically four "programs" here: Writebot (XA), Readbot (XB), Deliverbot (XA:0), and DNSbot (XA:0:0).
Writebot reads the target domain name, then creates the first packet, filling all three header values with the domain name string. It then receives a chunk of the data from Readbot to append to the packet, ending with either -1 (end of chunk) or -9999 (end of file). When Writebot gets a negative number, it adds 1 to it and stores it in T, then stores the packet's file ID in X, drops it, and then REPLs a Deliverbot. It then either FJMPs back to the beginning, or if EOF was reached it falls through to an invalid command and crashes because FJMP conveniently doesn't consider -9998 to be "false".
When spawned, a Deliverbot immediately grabs its assigned packet, moves over to Network, reads the domain name from the packet into X, and then REPLs a DNSbot, which grabs the DNS file, finds the domain's IP address, and sends that back to the Deliverbot, which in turn stores it in its proper place in the packet header. The Deliverbot then does four loops to calculate each digit of the checksum, adding the local IP address to the packet after one post-loop SEEK -9999 for efficiency's sake. Finally, with the header complete, it immediately delivers the packet.

2566/96/27. It's by no means optimal, but it's what I came up with. Anyway, I would definitely be interested in seeing solutions for the other two top percentiles, especially a 44-line solution.
Very nice. I don't have anything to add to your explanation, other than that there's a quick improvement to prevent having the Deliverbot grab the file again. Instead of REPLing the deliverbot, REPL the writebot. That means the writebot has to start with a TJMP DNSBOT or something so it dies when there's -9998 in T, but you can get rid of the FILE X, DROP, MARK DELIVERBOT, and GRAB X lines, giving 2549/93/27.

Since the number of values is always a multiple of 6, you can then use the freed lines to unroll loops a little bit, e.g. do a @REP 2 around the SWIZ F mask T / ADDI X T X for 3 of the deliverbot's SWIZ loops, to drop the cycles score to 2459. I don't know if that's the best place to unroll, since I didn't try all possibilities.

To make it even faster it might also help to somehow cache the DNS data or the domain name in an additional EXA but finding available lines for that might be though. I didn't really attempt this, though.


There are some good guides for this game on the internet. I mostly kept away from them because I felt like copy-pasting from them wasn't in the spirit of this LP, but if you're interested in how to get the most optimal scores, you could check those out.



OST: Exapunks


Well, this was truly my final update. I'll keep the threads open, it's just that any further suggestions won't make it into the LP Archive.

Quackles
Aug 11, 2018

Pixels of Light.


Once again, thank you— and congratulations.

GuavaMoment
Aug 13, 2006

YouTube dude
Thank you for the LP and incredibly timely update schedule.

Community LP tournament using custom challenges when? ;)

Podima
Nov 4, 2009

by Fluffdaddy
Thanks for the LP, this was fun to follow along even if I was far too dumb to understand a lot of the computer wizardry at play here!

Nth Doctor
Sep 7, 2010

Darkrai used Dream Eater!
It's super effective!


Agreed. Thanks for doing this LP, I had a great time following along

Adbot
ADBOT LOVES YOU

Carbon dioxide
Oct 9, 2012

https://lparchive.org/EXAPUNKS/

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply