Basic の Chr関数の動作を実現したい

Basic の Chr関数の動作を実現したい

- 片岡 克己 の投稿
返信数: 4
試験問題を作成する際に、コンパイル毎に異なるアルファベットを表示させたい
と企んでおります。

(1)\time をシードとして乱数を取得する
(2)アスキーコードとみなして対応する文字を表示

という(2)番目で、行き詰まっています。26行ほどマクロを書けば出来ますが、
お洒落に書けないものか、と思いまして、簡単な手順をご教示頂けないでしょうか。
Basic の Chr関数が有ると良いのですが。

なお、(1)に関して、\time で事なきを得ておりますが、当初は \minute を利用したかったのです。
ところが私の環境では \year,\month,\day は問題なく表示されるのに、\hour \minute の取得が
出来ないのです。どういう理由が考えられるでしょうか。

OS:Windows7 Professional SP1
C:\usr\local\home>platex -v
e-pTeX 3.1415926-p3.4-130605-2.6 (sjis) (TeX Live 2013/W32TeX)
kpathsea version 6.2.0/dev
ptexenc version 1.3.1
Copyright 2013 D.E. Knuth.

よろしくお願いいたします。
片岡 克己 への返信

Re: Basic の Chr関数の動作を実現したい

- 小野 孝男 の投稿
「アルファベット 1文字だけでいい」ならカウンタと \alph でできませんかね.
小野 孝男 への返信

Re: Basic の Chr関数の動作を実現したい

- 片岡 克己 の投稿
小野さま、早速のご教示ありがとうございます。
その手がありましたね。1文字で十分です。

いつも「変数x」では変わり映えがしないので、
任意のアルファベットに置き換えたかったのです。
片岡 克己 への返信

Re: Basic の Chr関数の動作を実現したい

- 片岡 克己 の投稿
成果を報告させて頂きます。プリアンブルに

\FPseed=\time

\FPeval\X{trunc(1+random*25,0)}
\newcounter{HenX}
\renewcommand{\theHenX}{\alph{HenX}}
\setcounter{HenX}{\X{}}

\FPeval\Y{trunc(1+random*25,0)}
\newcounter{HenY}
\renewcommand{\theHenY}{\alph{HenY}}
\setcounter{HenY}{\Y{}}

として、本文中では\theHenX および \theHenY として、
無事に目的を果たすことが出来ました。
(fp.sty の入手などは、ここではご勘弁ください)

ただ、HenX, HenY で連立方程式の問題とする場合に、変数が一致する
場合をどう回避するか。さらに係数も乱数で作った場合に一次従属をどう
回避するか等々、悩みはつきませんね。

今は締め切り間際なので、目視でチェックするしかありませんが、
いずれそのようなケースにも挑戦してみます。

どうもありがとうございました。
片岡 克己 への返信

Re: Basic の Chr関数の動作を実現したい

- 片岡 克己 の投稿
HenX, HenY で、変数が一致する場合の回避は簡単にできました。

\FPeval\X{trunc(1+random*26,0)}
\FPeval\Y{trunc(1+random*25,0)}

としておき、(前回はアルファベットの範囲を間違ってましたね)

\if\theHenX\theHenY
\stepcounter{HenY}
\fi

ということで、一致したら HenY を1つ増やす。
これで一応は完全解決です。お騒がせ致しました。