Qiita Engineer Festa 2024(キータ・エンジニア・フェスタ 2024) - Qiita
において、約1ヶ月で38記事という大量の記事の投稿を要求されることがわかった。
そこで、あまりコストをかけずに記事数を稼ぐ方法を考えた結果、「Welcome to AtCoder を様々な言語で解く」ことを思いついた。
単に解くだけでなく、使用する言語仕様の解説を入れれば、記事として一応成立するだろう。
Welcome to AtCoder
PracticeA - Welcome to AtCoder
Welcome to AtCoder では、以下の形式で整数 $a$, $b$, $c$ および文字列 $s$ が入力として与えられる。
a
b c
s
この入力をもとに、与えられた整数の和 $sum = a + b + c$ および文字列 $s$ を、以下の形式で出力することが求められる。
sum s
ECLiPSe の情報の入手方法
「ECLiPSe」だけでググっても、統合開発環境 Eclipse やその他関係ないものばかり出てきて、ECLiPSe の情報にたどり着くのは難しそうであった。
「ECLiPSe 言語」でもダメそうだった。
そこで、AtCoder でわかるバージョンを入れた「ECLiPSe 7.1_13」でググると、以下のサイトが出てきた。
Index of /Distribution/Builds/7.1_13
このサイトのURLのパスを /
に置き換えてアクセスすることで、情報にたどり着くことができた。
さらに、適当なサンプルコードを AtCoder のコードテストにコピペして実行を試みると、
calling an undefined procedure main in module eclipse
abort
と出てきたので、main
の定義を要求されるらしいことがわかった。
そこで、main site:https://eclipseclp.org/
でググると、以下のページなどが出てきた。
ここに載っている情報から、プログラムの書き方を推測できた。
今回用いた ECLiPSe の機能
Input and Output
Input/Output
Programming Concepts
プログラムは
main :-
処理内容.
の形で表現できるようである。
複数の処理を行う場合は、,
で繋ぐといいようである。
read_token(値を受け取る変数, 種類を受け取る変数)
で、標準入力から数値 (など) を1個読み込めるようである。
get(結果を受け取る変数)
で、標準入力から1文字読み込み、数値として受け取れるようである。
(今回は、数値の後の改行文字を読み捨てるために使用した)
read_string(探す文字, 長さを受け取る変数, 文字列を受け取る変数)
で、標準入力から指定の文字の直前までを読み込み、文字列として受け取れるようである。
sum(数値のリスト, 結果を受け取る変数)
で、数値の和を求めることができるようである。
printf(書式文字列, データのリスト)
で、文字列で指定した書式にデータを埋め込み、標準出力に出力できるようである。
文字列は ""
で囲むことで表現できるようである。
リストは、[]
で囲み、各要素を ,
で区切ることで表現できるようである。
提出コード
main :-
read_token(A, T1),
read_token(B, T2),
read_token(C, T3),
get(New_line),
read_string("\n", L, S),
sum([A, B, C], Sum),
printf("%d %s\n", [Sum, S]).