CodeIQの「hello, world × 3」に挑戦してみた
3/17現在、フィードバックはまだですが記事にしてみます。
最高評価は難しい、と思ったらやっぱり難しかった。
問題
挑戦者求む!【コーディングパズル】hello, world × 3 by @Nabetani 鍋谷 武典│CodeIQ
hello, world
という文字列を出力するプログラムを、3つのプログラミング言語で1つずつ書いてください。
ただし、どのプログラムも、他の2つのプログラムで使った文字をできるだけ使わないようにしてください。
複数の実装で使われている文字の種類が少ないほうが高評価となります。
複数の実装で使われている文字の種類がひとつもない場合に最高評価になります。
どうやって解いたか
「大文字」「小文字」「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}
3/24追記
出題者の鍋谷さん(id:nabetani)の解説記事に載りました。
CodeIQ に出した「hello, world × 3」の解説・解題 - Codeへの愛とCuriosity
△文字列を回避するためのトリックの量が最低限に抑えられていて、おそらく今回もっとも可読性が高いコードになっています。
○トリックなんてほとんど知らないので記号重複を回避しつつ簡単に書かざるを得なかった
— tmftake.local (@tmftake) 2014, 3月 21