CodeIQの「hello, world × 3」に挑戦してみた

3/17現在、フィードバックはまだですが記事にしてみます。
最高評価は難しい、と思ったらやっぱり難しかった。

問題

挑戦者求む!【コーディングパズル】hello, world × 3 by @Nabetani 鍋谷 武典│CodeIQ

hello, world
という文字列を出力するプログラムを、3つのプログラミング言語で1つずつ書いてください。
ただし、どのプログラムも、他の2つのプログラムで使った文字をできるだけ使わないようにしてください。
複数の実装で使われている文字の種類が少ないほうが高評価となります。
複数の実装で使われている文字の種類がひとつもない場合に最高評価になります。

提出内容

最終的に提出したコードはこちら。最高評価を目指して、文字の種類の重複なしを目指してがんばってみました。

実行結果 SQL
実行結果 Ruby
実行結果 Perl

どうやって解いたか

「大文字」「小文字」「ASCIIコード」と大枠を決めて、与えられた言語の中でそれぞれ組めそうなものを抽出しました。
他にも以下のもので試しに作ってみましたが、どれも重複有りでボツにしました。特に記号の重複には苦労しました。

「大文字」COBOL

ドットや丸括弧、空白など、他の言語と重複してしまうためNG。(COBOL、初めて書きました・・・。)

IDENTIFICATION DIVISION.
PROGRAM-ID. IDEONE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 HELLO PIC XXXXXXXXXXXXXX VALUE 'HELLO, WORLD'.
PROCEDURE DIVISION.
MOVE FUNCTION LOWER-CASE(HELLO) TO HELLO.
DISPLAY HELLO
STOP RUN.

実行結果

「ASCIIコード」Ruby

カンマやドットが他と重複、eachやchrの文字の種類が"hello, world"小文字表記や他言語のecho、print、sayなどの命令とかぶるためNG

[104,101,108,108,111,44,32,119,111,114,108,100].each{|e|$><<e.chr}

実行結果

「ASCIIコード」Perl6

タブを使うことで空白使用は回避したものの、「say」で"a"が他と重複するためNG。

say	"\x68\x65\x6C\x6C\x6F\x2C\x20\x77\x6F\x72\x6C\x64"

実行結果


最終回答の1.と2.を求めた後、カンマと空白が重複しないようにするために作ったプログラムがこちら。
Perlで文字列のビット演算が使えるのを別問題でちらっと見ていたので活用してみました。

3/24追記

出題者の鍋谷さん(id:nabetani)の解説記事に載りました。
CodeIQ に出した「hello, world × 3」の解説・解題 - Codeへの愛とCuriosity