インタビューの最後に、悪のインタビュアーは次のように語っています。「すべての応募者に短いコーディングテストを行って、彼らが話していることを本当に知っているかどうかを確認します。心配しないでください。実用的なプログラムです。すぐに仕事を提供します。」彼はあなたが近くのコンピューターに座るようにジェスチャーします。「あなたがしなければならないのは、有効なHello Worldプログラムを作成することです。しかし」-そして彼は広く笑います-「キャッチです。残念ながら、このマシンにある唯一のコンパイラには小さなバグがあります。ソースコードファイルをコンパイルする前に。OK、5分でお会いしましょう!」そして彼は部屋から出て、喜んで口whiを吹く。
あなたが仕事を得ることを保証できますか?
タスク
Hello, world!
ファイル内の任意の位置から単一の文字が削除された後でも、標準出力に印刷するプログラムを作成します。または、できるだけこれに近づいてください。
ルール
無関係な出力なし - Hello, world!
標準出力に印刷される唯一の実質的なものでなければなりません。選択した言語によって自然に生成される他の文字を含めることは問題ありません -末尾の改行やそのようなもの[1] "Hello, world!"
(たとえば、Rを使用している場合)でも、毎回まったく同じものを印刷する必要があります。たとえば、 印刷できないHello, world!Hello, world!
場合がありますHello world!" && x==1
。ただし、警告は許可されます。
テストスコアをテストするために、プログラムの各可能な順列をテストする必要があります。各文字を削除してテストし、正しい出力が生成されるかどうかを確認します。この目的のために、多くの言語で機能するはずの簡単なPerlプログラムを以下に示しました。うまくいかない場合は、テストプログラムを作成して回答に含めてください。
採点あなたのスコアはあるプログラムが失敗した回数。言い換えると、文字を削除するとプログラムが機能しなくなるファイル内の個々の位置の数です。最低スコアが勝ちます。同点の場合、最短のコードが優先されます。
"Hello, world!"
いくつかの言語(15のスコア)などの単純なソリューションは受け入れられますが、勝つことはできません。少なくともスコア4のPerlソリューションを見つけましたが、最終的に投稿します。
更新: 公式の勝者はチューリング完全なプログラミング言語を使用し、印刷する定義済みのメカニズムを使用しませんHello, world!
。使用される外部リソース(言語の標準ライブラリ以外)はプログラムの一部と見なされ、同じ1文字の削除の対象となります。 これらの要件は、ポストイットノートでデスクに貼り付けられていました。最初に表示されなかった場合はおologiesび申し上げます。
アップデート2:はい、あなたのプログラムは実際にスコアを受け取るために上記のタスクを達成しなければなりません!つまりHello, world!
、少なくとも1回は正常に印刷されるはずです。これは明らかなはずです。機能を追加するコマンドラインスイッチおよびその他の設定もプログラムの一部としてカウントされ、単一文字の削除の対象となります。プログラムは、ユーザー入力なしでタスクを実行する必要があります。コンパイルに失敗すると、失敗カウントにカウントされます。
幸せなプログラミング、そして仕事を手に入れてください。しかし、あなたが失敗した場合、おそらくその邪悪なボスのために働きたくなかったでしょう。
Perlテストスクリプト:
use warnings;
use strict;
my $program = 'test.pl';
my $temp_file = 'corrupt.pl';
my $command = "perl -X $temp_file"; #Disabled warnings for cleaner output.
my $expected_result = "Hello, world!";
open my $in,'<',$program or die $!;
local $/; #Undef the line separator
my $code = <$in>; #Read the entire file in.
my $fails = 0;
for my $omit_pos (0..length($code)-1)
{
my $corrupt = $code;
$corrupt =~ s/^.{$omit_pos}\K.//s; #Delete a single character
open my $out,'>',$temp_file or die $!;
print {$out} $corrupt; #Write the corrupt program to a file
close $out;
my $result = `$command`; #Execute system command.
if ($result ne $expected_result)
{
$fails++;
print "Failure $fails:\nResult: ($result)\n$corrupt";
}
}
print "\n$fails failed out of " . length $code;