(1)、(2) は与えられた課題の仕様を満たすプログラムが、逐次環境、又 は並列環境で動作するように作成して下さい。
今年度の課題は、「エントリ・コース」と「スピード・コース」で異なります。
以下、「エントリ・コース」、「スピード・コース」の順に課題を説明します。
→ Column 01234 0■■■■■ 1■□□□□ □ オン ↓ 2■■■■□ ■ オフ Row3■■□□□ 4■■■■□ 図 1. ライツアウトボタンを押した時の盤面の変化の規則は以下の通りです。
具体例で見てみましょう。
ボタンの位置を (Row,Column) で表すとします。(0,4) のボタンを押すと、 (0,3)、 (0,4)、 (1,4) のボタンが反転します(図 2 (a))。
01234 01234 0□□□□□ 0□□□■■ 1□□□□□ click(0,4) 1□□□□■ 2□□□□□ → 2□□□□□ 3□□□□□ 3□□□□□ 4□□□□□ 4□□□□□ 図 2. (a) 01234 01234 0□□□■■ 0□□□■■ 1□□□□■ click(2,2) 1□□■□■ 2□□□□□ → 2□■■■□ 3□□□□□ 3□□■□□ 4□□□□□ 4□□□□□ 図 2. (b) 01234 01234 0□□□■■ 0□□□■■ 1□□■□■ click(4,2) 1□□■□■ 2□■■■□ → 2□■■■□ 3□□■□□ 3□□□□□ 4□□□□□ 4□■■■□ 図 2. (c) 図 2. ボタンを押した時の盤面の変化(2,2) のボタンを押すと、 (1,2)、 (2,1)、 (2,2)、 (2,3)、 (3,2) のボタ ンが反転します(図 2 (b))。
(4,2) のボタンを押すと、 (3,2)、 (4,1)、 (4,2)、 (4,3) のボタンが反転 します(図 2 (c))。
今回は、 盤面の初期状態はすべてオンとします(図 5)。
01234 0□□□□□ 1□□□□□ □ オン 2□□□□□ ■ オフ 3□□□□□ 4□□□□□ 図 5. 盤面の初期状態
lo:game(Event)ここで引数 Event は 2.1.1 で示すインタフェースを持つ入力ストリームです。 出力は、入力ストリームの中で渡される変数に対して行ないます。
ボタンのクリック click(Row,Column,Output) Row、Column には押されたボタンの位置 (Row,Column) が来る。 Output は出力のための変数。 盤面の再描画 redraw(Output) 盤面を再描画する。 Output は出力のための変数。 (これは、 隠されていたウィンドウが表に出た時など、 盤面をすべて 書き直す必要がある際の入力。この時、 盤面はすべてオンの初期状 態になっているとする。)
set(Row,Column) ボタンをオンにする。(Row,Column) はボタンの位置 reset(Row,Column) ボタンをオフにする。(Row,Column) はボタンの位置とします。
lo:game([click(0,4,O1), click(2,2,O2), click(4,2,O3), ... ]) O1 = [reset(0,3),reset(0,4),reset(1,4)] O2 = [reset(1,2),reset(2,1),reset(2,2),reset(2,3),reset(3,2)] O3 = [set(3,2),reset(4,1),reset(4,2),reset(4,3)] ...
(この課題はTiger Electronics, Inc. の許可を得て作成しました。 Tigerのゲームについては こちらを御覧下さい。)
課題に関連して、lo:game/1 に追加して実際に遊べるプログラムとするモジュー
ルなどが、 随時 WWW/FTP に公開されます。メーリングリストにお知らせが流
れますので必要な場合、登録して下さい。
(ftp されたものは、tar, gzip されています。 (Mail で受けとる場合はさらに uuencode されています。) 利用方法等の詳細については, 解凍後 README を参照して下さい。 なお、希望者には mail にておくります。宛先(klic-contest@icot.or.jp) に、「エントリ・コース、添付プログラム希望」とメールして下さい) このプログラムは, 変更されることがあります。その際, 変更については, 本コンテストの応募者のメイリングリストにより通知されます。
たとえば 9×9 のマス目に対して: 《単語》 《点数》 FIFTH 5 GENERATION 17 KLIC 13 SPEED 4 CONTEST 9 PROBLEM 4 SOLUTION 15 YOURS 3 WINNER 21 OR 1 LOSER 2 という単語群が与えられたとき: 012345678 0■■■■■■■Y■ 1■KLIC■■OR 2■■■■O■■U■ 3■■WINNER■ 4■■■■T■■S■ 5■■SPEED■■ 6■■■■S■■■■ 7■FIFTH■■■ 8■■■■■■■■■というのは正しい解のひとつである。■は文字を入れなかったマス。この解の 得点は、用いた単語の点数を合計して
5 + 13 + 4 + 9 + 3 + 21 + 1 = 56 点 となる。応募作品では、モジュール名を skeleton、 述語名を solve とする 3 引数の 述語を記述すること。2. 単語の並べ方の規則
(1) 単語の並べ方は縦 (上→下) 横 (左→右) のいずれかの方向のみで、斜め や下→上、右→左は許されない。 (2) 同じ単語を二度以上使ってはならない。 (3) 単語は全体がひとつながりになっていなければならず、複数の「島」に分 れてはならない。 (4) 同じ行または列に複数の単語を並べるときには、間にひとマス以上空けな くてはならない。 (5) 与えられた単語以外に2文字以上が縦または横に連続してはならない。3. プログラムについて
3.1 述語のインタフェース
skeleton:solve(一辺の長さ、単語リスト、解のストリーム) 第1,第2引数を入力に、解を第3引数のストリームに出力する。 一辺の長さ: 入力 正方形の一辺のマス目の数を整数値で与える。20以下とする。 例) 9 単語リスト: 入力 以下のような形式の要素を持つリスト。 word(識別子、 綴り、 点数) 識別子は単語を識別するアトム。綴りは8ビット要素の文字列、文字 数は一辺のマス目の数以下で、要素はすべて英大文字。同じ識別子や 綴りが二度以上出てくることはない。点数は整数で与えられ、すべて 正で、負やゼロのものはない。すべての単語の点数を足し合わせても オーバフローが起きない範囲である。単語の数は200以下とする。 例) [ word(fifth, "FIFTH", 5), word(gener, "GENERATION", 17), word(klic, "KLIC", 13), word(speed, "SPEED", 4), word(cont, "CONTEST", 9), word(prob, "PROBLEM", 4), word(solut, "SOLUTION", 15), word(yours, "YOURS", 3), word(winner,"WINNER",21), word(or, "OR", 1), word(loser, "LOSER", 2) ] 解のストリーム: 出力 以下の形式で表現した解を要素として持つストリームである。 [ place(識別子、 行、 列、 方向), ... ] 識別子は単語リストに示された単語の識別子である。 行、列は単語の開始位置の行と列の番号で、整数値である。行は上か ら下、列は左から右に、ゼロから番号づけする。 方向は縦が tb, 横が lr とする。 リスト中の順序に意味はない。 例) [ place(klic, 1, 1, lr), place(winner, 3, 2, lr), place(speed, 5, 2, lr), place(fifth, 7, 1, lr), place(cont, 1, 4, tb), place(yours, 0, 7, tb), place(or, 1, 7, lr) ] 解はいくつ出力しても構わない。時間内に出力された最後の解の点数 をプログラムの点数とする。個々の解はストリームに流す前に完全に 具体化していなければならない。すなわち、未完成で未束縛変数を含 む項を解として出力してはならない。完全に具体化した解のみを出力 するためには、解が全部具体化していることを wait ガード述語など を用いて確かめた後に、ストリームに出力するようにする方法が考え られる。3.2 プログラミング上の制限
・C言語のインライン挿入を使ってはならない。 ・ボディ・ゴールの優先順位指定のために、 GOAL@priority(ABSPRIO) の形式は使ってはならない。 優先順位指定では、 GOAL@lower_priority GOAL@lower_priority(RELPRIO) の形式のみ使用してよい。 ・作成する述語およびそこから直接・間接に呼出される述語の中では入出力を 行なってはならない。 ・公開する動作確認プログラム中で使っているモジュール名と同一のモジュー ル名を用いてはならない。4. 参考(結果表示プログラムなどについて)
結果表示プログラムは、スピード・コース「スケルトンコンテスト」 参加者に対して、各自が作成したプログラムの動作確認に利用してもらう ために作成された。 なお、このプログラムは、実際に、本プログラムコンテストの選考に 用いられる保証は無い。 また、プログラムコンテストへの応募の際には、 本プログラムを添付しないこと。結果表示プログラム(ftp) プログラムの README 参照 → [日本語], [English] (ftp されたものは、tar, gzip されています。 (Mail で受けとる場合はさらに uuencode されています。) 利用方法等の詳細については, 解凍後 README を参照して下さい。 なお、希望者には mail にておくります。宛先(klic-contest@icot.or.jp) に、「スピード・コース、添付プログラム希望」とメールして下さい) このプログラムは, 変更されることがあります。その際, 変更については, 本コンテストの応募者のメイリングリストにより通知されます。
(c) 1998 NIKOLI inc.
www-admin@icot.or.jp