Hacker News new | past | comments | ask | show | jobs | submit login
Chess Written in GNU Sed (github.com/moldabekov)
117 points by pabs3 on Oct 16, 2023 | hide | past | favorite | 29 comments



I played a game where I moved my bishop to c4 and queen to h5 while Black was busy advancing h and g pawns (and trading its rook for my knight on h3), and when I thought I played the final move Qxf7 checkmate, it calmly played ... Kxd8 I guess making illegal moves is its only way of acknowledging defeat.


In the late 1970s, I bought a chess computer at J. C. Penney, the one in a brown plastic case with the chessboard printed on top and a keypad to the right with a red LED display. I returned it after about a week because it cheated. Whenever I moved to take its King/Queen, it would call an illegal move, and claim that its King/Queen was on the other side of the board. I've wondered what glitch in programming would create that behavior.


it says in the comments that it does not check correctness.

impressive feat with sed but not really worthy of the term "chess engine"


The comments say that

> Human move correctness

is Not Implemented. Which suggests that the script only makes correct moves. My example shows that's not true when there are no valid moves.


That's the same as a typical Unix script cobbed together with these tools. When the input data isn't of the expected form (a regex doesn't match, or matches in the wrong place, or whatever), there is often still a nonfailing behavior of some kind.



See also:

* "A proof that Unix utility sed is Turing complete" https://catonmat.net/proof-that-sed-is-turing-complete

* https://github.com/izabera/cube.sed


I really need to invest more time into Sed/Awk. I typically only use them for find/replace or deleting characters/lines in my shell scripts.


For awk, start with the book by Kernighan/Aho/Weinberger. The PDF of the first edition is freely available on archive.org, and a second edition has been announced. Chapter 2 of the first edition is only 40 pages, and describes all language features.

https://news.ycombinator.com/item?id=13451454

For sed, the best resource is likely the free "UNIX Bookshelf" from O'Reilly that can be found online; this contains a book specifically focusing on Sed and Awk.

https://freecomputerbooks.com/The-Unix-CD-Bookshelf-Version-...


The second edition is out! I started reading it last week, and it's great so far.

https://www.awk.dev/


I've shared this before, but this sed tutorial made me a pro. [0] Even if you don't use it for more complex things, you may find there are faster ways to do the things you are now.

[0]: https://www.grymoire.com/Unix/Sed.html

Edit: That said, I don't even want to start dissecting the submitted code.


Grymoire is how I learned sed, and is a fantastic quick reference for grep and regex also.


I have ebooks on GNU sed and GNU awk with plenty of examples and exercises (free to read online):

* https://learnbyexample.github.io/learn_gnused/

* https://learnbyexample.github.io/learn_gnuawk/

I also wrote TUI apps for interactive exercises (grep, sed, awk, etc): https://github.com/learnbyexample/TUI-apps


Just use Perl for one-liners. It's more powerful than sed/awk but it does pretty much everything those do.


Perl is probably overkill for 99% of one-liners and may not be available on as many environments as awk/sed are, but I advocate that folks do whatever is best for them in their environment and if that's Perl for you, rock it out!


If Perl isn’t available in the environment try ‘systemctl start oyster-farm’


This taught me awk, from an HN submission years ago: https://ferd.ca/awk-in-20-minutes.html

I've had some fun using awk to generate C# classes for an Ultima Online emulator.


awk can do much more than sed. And, with patience, you could even write a Z-machine interpreter on it as some guy did with postscript. You might have to convert the binary input to hex first with xxd/od in order to parse the opcodes in a nice way, but everything else would be simulated from awk.


> You might have to convert the binary input to hex first

If you're okay with gawk, most implementations ship with gawkextlib, which has readfile(), and you also have FIELDWIDTHS.


black removed its own queen when I placed its king into checked :P then it moved its king from check to the space to the left staying in check :) :P

impressive but the graphics need to be much bigger.

Would be good to have some indication that is is my move and show the move that the chess.sed made, would also be good to place all moves into chess.log :P


Sweet, now do Awk!

(I guess Sed is turing-complete?)


It says:

Not Implemented:

- Roque - Ceit not - Draw game - Human move correctness

What is Ceit not? Roque is French for castling, it appears.

This is wild.


Ceit not is likely “Zeitnot”, or time pressure.


I came to ask this. I assumed it's en passant, which is likely not to be implemented if castling isn't.


It's a cool idea, but the computer sucks. They even moved their King in check, which is an illegal move.


It's fucking sed. Nobody expects it to have a full AI engine in there...


Micro-Max (https://home.hccnet.nl/h.g.muller/max-src2.html) is a chess engine written in C (2000 characters!) and has an ELO of about 1900 and plays only legal moves.


Are you comparing C and sed as similar platforms for developing a chess engine? :)


I would be kind of shocked if you can't compile C to an unholy sed program.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: