(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