diff --git a/20230503/antiknirps.red b/20230503/antiknirps.red new file mode 100644 index 0000000000000000000000000000000000000000..86843ea77791cca4138c0d2a3684be10a341c1c4 --- /dev/null +++ b/20230503/antiknirps.red @@ -0,0 +1,11 @@ +;redcode +;name Antiknirps +;author Peter Gerwinski +;strategy Modifiziere den Code von Knirps, um ihn zu stoppen +;assert 1 + +falle DAT #0 + DAT #0 +start DJN start, falle + JMP start + END start diff --git a/20230503/dwarf-01.red b/20230503/dwarf-01.red new file mode 100644 index 0000000000000000000000000000000000000000..4e6a410f1223c35544c754261e68d95687146074 --- /dev/null +++ b/20230503/dwarf-01.red @@ -0,0 +1,13 @@ +;redcode +;name Dwarf +;author A. K. Dewdney, modified by Peter Gerwinski +;assert 1 + +bomb DAT #3 +dwarf ADD #1, bomb + MOV bomb, @bomb + JMP dwarf + END dwarf ; Programs start at the first line unless + ; an "END start" pseudo-op appears to indicate + ; the first logical instruction. Also, nothing + ; after the END instruction will be assembled. diff --git a/20230503/dwarf-02.red b/20230503/dwarf-02.red new file mode 100644 index 0000000000000000000000000000000000000000..436759c042b9fbb874b6f28038a64b19e8768a8e --- /dev/null +++ b/20230503/dwarf-02.red @@ -0,0 +1,13 @@ +;redcode +;name Dwarf +;author A. K. Dewdney, modified by Peter Gerwinski +;assert 1 + +bomb DAT #0 +dwarf ADD #-1, bomb + MOV bomb, @bomb + JMP dwarf + END dwarf ; Programs start at the first line unless + ; an "END start" pseudo-op appears to indicate + ; the first logical instruction. Also, nothing + ; after the END instruction will be assembled. diff --git a/20230503/koschka.red b/20230503/koschka.red new file mode 100644 index 0000000000000000000000000000000000000000..3b3ebbfff5c48ce7edb4c8d618e41582fcd10f54 --- /dev/null +++ b/20230503/koschka.red @@ -0,0 +1,14 @@ +;name Koschka +;version 0.6, 2022-05-10 +;author Peter Gerwinski +;assert 1 + +num dat #-2 +trap spl 0 +start mov trap, <pos1 + jmn start, pos1 +fini mov num, <pos2 + jmp fini +pos2 dat #-2 +pos1 dat #num + end start diff --git a/20230503/mice-jmp.red b/20230503/mice-jmp.red new file mode 100644 index 0000000000000000000000000000000000000000..ce76b9e6136d57e1a4e8fd8857316def373a3325 --- /dev/null +++ b/20230503/mice-jmp.red @@ -0,0 +1,15 @@ +;name Mice +;author Chip Wendell +;assert 1 + +ptr dat #0 +start mov #12, ptr ; n = 12 +loop mov @ptr, <dest ; *dest = *(ptr+(*ptr)) + djn loop, ptr ; if(--ptr != 0) + ; goto loop + spl @dest ; split(*dest) + add #653, dest ; dest += 653 + jmp start ; goto start +dest dat #833 + + end start diff --git a/20230503/mice-kommentiert.red b/20230503/mice-kommentiert.red new file mode 100644 index 0000000000000000000000000000000000000000..3eff47db0e3268558d01120cb5d07ac2430690fe --- /dev/null +++ b/20230503/mice-kommentiert.red @@ -0,0 +1,43 @@ +;name Mice +;author Chip Wendell +;assert 1 + +0 ptr dat #0 +1 start mov #12, ptr +2 loop mov @ptr, <dest ; kopiere das, worauf ptr zeigt, nach dest, +3 djn loop, ptr ; ziehe aber vorher von dest 1 ab +4 spl @dest ; djn zieht von ptr 1 ab, springt danach nach loop +5 add #653, dest +6 jmz start, ptr ; ptr nicht 0 --> etwas schiefgegangen --> Abbruch +7 dest dat #833 +8 dat #0 ; außerhalb des Programms, initialisiert auf dat #0 +9 dat #0 end start ; bedeutet: Fange in Zeile "start" an. +10 dat #0 +11 dat #0 +12 dat #0 +13 +... + + + +... +825 +826 +827 ptr dat #0 +828 start mov #12, ptr ; Hierhin zeigt dest nach dem Kopieren. +829 loop mov @ptr, <dest +830 djn loop, ptr +831 spl @dest +832 add #653, dest +833 jmz start, ptr +834 dest dat #833 ; ptr = 6 +835 dat #0 +836 dat #0 +837 dat #0 +838 dat #0 +839 dat #0 ; Hier landet die Kopie: dest(7) + 833 - 1 +840 +841 +842 +... + diff --git a/20230503/rtech-20230503.pdf b/20230503/rtech-20230503.pdf index 26f4de8c9ea27e517dddc3fd3f5b2b814db6dfdd..6e5ab6f238e3bb025e0d98913f148d23de81e46c 100644 Binary files a/20230503/rtech-20230503.pdf and b/20230503/rtech-20230503.pdf differ diff --git a/20230503/rtech-20230503.tex b/20230503/rtech-20230503.tex index 93aca2a685d0127336d0b69371983f85f77501f8..f9fc6c101ebb3db7801289c7292252f42fa668a6 100644 --- a/20230503/rtech-20230503.tex +++ b/20230503/rtech-20230503.tex @@ -329,7 +329,6 @@ \phantom{Problem: }bringt "`Dwarf"' sich selbst zum Absturz.\\[\smallskipamount] \pause Lösung: \textcolor{red}{Haben Sie Ideen?} - \pause \textcolor{red}{\textarrow\ Übungsaufgabe} \end{frame} @@ -404,6 +403,8 @@ \end{frame} +\iffalse + \begin{frame}[fragile] \showsubsection @@ -460,6 +461,8 @@ \end{frame} +\fi + \begin{frame}[fragile] \showsubsection diff --git a/20230503/scores b/20230503/scores new file mode 100755 index 0000000000000000000000000000000000000000..147b503a39376b29b4146b82210f79dcde2af262 --- /dev/null +++ b/20230503/scores @@ -0,0 +1,11 @@ +#!/bin/bash + +echo "score wins draws" +for x in *.score; do + printf "%4d %4d %4d %-15s\n" \ + $(wc -c "$x" | sed -e 's/ .*$//') \ + $(( $(grep -o "\*" "$x" | wc -l) / 3 )) \ + $(grep -o "+" "$x" | wc -l) \ + $(basename $x .red.score) +done \ + | sort -rn diff --git a/20230503/tournament b/20230503/tournament new file mode 100755 index 0000000000000000000000000000000000000000..9e5b2aa3bc8e4816ff1b7332a3aa0f941e019015 --- /dev/null +++ b/20230503/tournament @@ -0,0 +1,48 @@ +#!/bin/bash + +if [ "$1" = "-s" ]; then + core_size="$2" + shift 2 +fi + +if [ -n "$1" ]; then + PARTICIPANTS="$@" +else + PARTICIPANTS=$(ls *.red) +fi + +#PARTICIPANTS="nothing.red knirps.red mice.red $1" + +PMARS="$HOME/bo/2012ws/rtech/material/pmars-0.9.2/src/pmars-ncurses" + +mars () +{ + c1=$2 + c2=$3 + if [ -n "$core_size" ]; then + set $($PMARS -8 -b -k -p 64 -s $core_size $2 $3) + else + set $($PMARS -8 -b -k -p 64 -s $1 $2 $3) + fi + if [ $1 = 1 ]; then + echo -n "***" >> $c1.score + touch $c2.score + elif [ $3 = 1 ]; then + touch $c1.score + echo -n "***" >> $c2.score + else + echo -n "+" >> $c1.score + echo -n "+" >> $c2.score + fi +} + +rm -f *.score + +./turn $PARTICIPANTS \ + | sort -R \ + | tee tournament.log \ + | while read line; do + $line + done + +./scores diff --git a/20230503/turn.c b/20230503/turn.c new file mode 100644 index 0000000000000000000000000000000000000000..4fbaf4f9401c9159892243ff68df89d46660389d --- /dev/null +++ b/20230503/turn.c @@ -0,0 +1,13 @@ +#include <stdio.h> +#include <stdlib.h> + +int main (int argc, char **argv) +{ + srand (42); + for (char **p = argv + 1; *p; p++) + for (char **q = p + 1; *q; q++) + for (int i = 0; i < 100; i++) + printf ("mars %d %s %s\n", + 512 + rand () % (8192 - 512 + 1), *p, *q); + return 0; +}