問題は
標準出力に Hello World と出力するプログラムを作成して下さい。 ただし、数値、文字及び文字列リテラルを解答に含めることはできません。 Perlのqqやqw、Rubyの%Q、%q、%wなども避けたほうが評価が高くなります。 言語仕様をフル活用して下さい!というものです。
ここで注目したいのが!!
プログラミング言語は
AppleScript(osascript)/C/C++/C#/Clojure/D/Erlang/Fortran/Go/Groovy/Haskell/
Hello Algorithm/HSP/Java/JavaScript(Node.js)/Kuin/Lisp/Lua/OCaml/Pascal/
Perl/PHP/Pike/Python/R/Ruby/Scala/Scheme/Smalltalk/VB.Net
のいずれかを使用して下さい。指定された言語以外での解答は評価されません。
Pascal キター!!!!!
いままで CodeIQ では Pascal / Delphi は全く相手にされてなかったのに!!
ということで、軽く挑戦してみることにしました。
すぐに思いついた方法は3通り
このうち、1の方法は簡単すぎてつまらないので却下。
2の方法もあくまで言語指定が Pascal なので却下。
ということで、3の方法で行くことにしました。
ここで面倒だったのが言語指定が Pascal であること。
Pure Pascal では type とか var といったブロックは位置が決まっているし、Program には input / output を付けないといけないとか、const 指定子が使えないとか色々あります。
ということで、1回 Delphi でコンパイルした後 gpc 使ってコンパイルを試しました……ところが!!
gpc は最早 Pure Pascal ではなく Borland 拡張……つまり Delphi の文法が多分に採り入れられていたのです!!
すごいすんなりコンパイルされちゃう!! \(^o^)/
といっても、これが ISO 標準であり、これこそが Pure Pascal なのかなあなんて思ったりもしたのですが、 Pure Pascal は初版の物だろう!!ファースト以外は認めない!!……ということで、僕の頭の中にある Pure Pascal 文法で書きました。
それが以下になります。
program HelloWorld(Output);typeTHex = (hx00, hx01, hx02, hx03, hx04, hx05, hx06, hx07,hx08, hx09, hx0a, hx0b, hx0c, hx0d, hx0e, hx0f,hxCount);procedure WriteChar(h, l: THex);beginWrite(Chr(Ord(h) * Ord(hxCount) + Ord(l)));end;beginWriteChar(hx04, hx08); // HWriteChar(hx06, hx05); // eWriteChar(hx06, hx0c); // lWriteChar(hx06, hx0c); // lWriteChar(hx06, hx0f); // oWriteChar(hx02, hx00); //WriteChar(hx05, hx07); // WWriteChar(hx06, hx0f); // oWriteChar(hx07, hx02); // rWriteChar(hx06, hx0c); // lWriteChar(hx06, hx04); // dend.
まあ、どっちにせよ、あんまり面白くはならなかったのですが……。
特筆すべき事は何もないです。
ちょっと悔やまれるのは、hxCount なんてのをつくったところ。
そうじゃなくて、shl Ord(hx04) ってすれば良かった。
出題者の @cielavenir さんのコードはこちら。
その他の言語は一個上に。
1 を取得してから、それを使って他の数を取得、という方法のようですね。
Pure Pascal だと、これできないんじゃなかったかなあ……そのための Chr 関数な訳だし……。
C 系で言うところの 1byte を表す型は Byte っていう型があるんですよ-。
cielavenir さんに修正していただきました!
後日、解説記事がアップされるそうなので、解説記事がアップされたら、ここに追記します!
0 件のコメント:
コメントを投稿