I think copying is (or at least should be) totally not off-limits (how could they tell lol) but in case you want to do it in a more direct way, there is git-show(1) or git-cat-file(1). Ordered from porcelain (high-level) to plumbing (low-level):

git show feature~1:riddles.txt
git cat-file -p feature~1:riddles.txt
git cat-file blob feature~1:riddles.txt
# P.S. This last command is obviously a joke
# (works only on loose objects, i.e. no pack files!)
cat "$(git rev-parse --git-dir)"/objects/$(git rev-parse feature~1:riddles.txt | sed 's!..!\0/!') | python -c 'import sys, zlib; sys.stdout.buffer.write(zlib.decompress(sys.stdin.buffer.read()))' | perl -0777 -pe 's/\Ablob \d+\0//'

You can save this to a file (e.g. append > riddles.txt to the end of any command), pipe it to your system clipboard (that's pbcopy on Mac; on X11 there is xclip), or just... copy it---if you have a mouse that is. This isn't fundamentally different than git log -p or git show <commit>, but the benefit is you just get the file itself; you don't have to remove the + and - prefixes.

Some other options (that probably lack the flexibility of saving to a different path; though it is possible to rename the riddles.txt you have before running any of this, e.g. mv riddles.txt riddles.bak):

I came up with this:

git reset --hard feature~1
git reset @{1}

(don't laugh at me for using reset, it does work, however I am not responsible for your unstaged (worktree) or staged (index) changes if you run reset --hard <anything> without saving them :x and it should go without saying but I don't recommend this over any of the two commands above---even checkout --force <commit> <path> is far far safer than reset --hard.

Actually, here is the same thing that does not move your ref (branch) at all. Let's say you are on the feature branch, and git symbolic-ref HEAD prints refs/heads/feature. Remember this name. Now detach HEAD and check out the commit where the previous riddle lives, using any of these commands (this should be familiar to people who completed A04 in the way they told you to):

# if your worktree is dirty, any of these should complain to you.
# that's part of what makes these safer than git reset --hard. :)
git checkout feature~1
git switch -d feature~1

then run this, using the name you (hopefully) remembered:

git symbolic-ref HEAD refs/heads/feature

I will not explain what this line means. :)

There is a Stack Overflow question titled "How to retrieve a single file from a specific revision in Git?" with a very nice and comprehensive answer, if you ever bothered to look it up. I didn't look at this forum when writing this though, I was just having fun imagining different ways to do the same thing (maybe a bit too much fun, oh well.... XD)