인터뷰가 끝나면 Evil Interviewer는 다음과 같이 말합니다. "우리는 모든 지원자들이 짧은 코딩 테스트를 받도록하여 그들이 말하는 내용을 실제로 알고 있는지 확인합니다. 걱정하지 마십시오. 쉽게 만들 수 있습니다. 작업 프로그램으로 즉시 작업을 제공하겠습니다. " 그는 당신이 근처의 컴퓨터에 앉으라고 제스처를합니다. "당신이해야 할 일은 작동하는 Hello World 프로그램을 만드는 것뿐입니다."-그리고 그는 광범위하게 웃고 있습니다. "잡을 수 있습니다. 불행히도이 머신에있는 유일한 컴파일러에는 작은 버그가 있습니다. 컴파일 전 소스 코드 파일입니다. 5 분 후에 see겠습니다. " 그리고 그는 방에서 나와 행복하게 휘파람을 불렀습니다.
일자리를 보장받을 수 있습니까?
작업
Hello, world!
파일에서 임의의 위치에서 단일 문자를 제거한 후에도 표준 출력으로 인쇄 할 프로그램을 작성 하십시오. 또는 가능한 한 가까이 접근하십시오.
규칙
외부 출력 없음 - Hello, world!
표준 출력으로 인쇄 된 실질적인 것이어야합니다. 후행 줄 바꿈 또는 [1] "Hello, world!"
R 과 같은 문자와 같이 선택한 언어로 자연스럽게 생성 된 다른 문자를 포함하는 것이 좋지만 매번 똑같은 것을 인쇄해야합니다. 그것은 인쇄 할 수 없습니다 Hello, world!Hello, world!
또는 Hello world!" && x==1
예를 들어 시간의 일부. 그러나 경고는 허용됩니다.
테스트 점수를 테스트하려면 프로그램의 가능한 모든 순열을 테스트해야합니다. 각 문자를 제거한 상태에서 테스트하고 올바른 출력을 생성하는지 확인하십시오. 이 목적을 위해 간단한 Perl 프로그램을 아래에 포함 시켰습니다.이 프로그램은 많은 언어에서 작동합니다. 그래도 문제가 해결되지 않으면 테스트 프로그램을 만들어 답변에 포함 시키십시오.
득점 점수는 프로그램이 실패한 횟수입니다 . 다시 말해서, 파일에서 문자를 삭제하는 개별 위치의 수는 프로그램이 작동하지 못하게합니다. 최저 점수가 이깁니다. 동점 일 경우 가장 짧은 코드가 승리합니다.
"Hello, world!"
여러 언어 (15 점) 와 같은 사소한 솔루션 은 허용되지만 승리하지는 못합니다. 나는 적어도 4 점의 Perl 솔루션을 찾았으며 결국 게시 할 것입니다.
업데이트 : 공식 우승자는 Turing-complete 프로그래밍 언어를 사용하며 사전 정의 된 인쇄 메커니즘을 사용하지 않습니다 Hello, world!
. 사용되는 모든 외부 자원 (언어의 표준 라이브러리 이외의)은 프로그램의 일부로 간주되며 동일한 1 자 삭제가 적용됩니다. 이러한 요구 사항은 포스트잇 메모로 책상에 붙어있었습니다. 당신이 처음에 그들을 보지 못한 경우 사과.
업데이트 2 : 예, 프로그램은 실제로 점수를 받으려면 위에서 설명한 작업을 수행해야합니다! Hello, world!
적어도 한 번은 성공적으로 인쇄되어야 함을 의미합니다 . 이것은 분명했다. 기능을 추가하는 명령 줄 스위치 및 기타 설정도 프로그램의 일부로 간주되며 단일 문자 삭제가 적용됩니다. 프로그램은 사용자 입력없이 작업을 수행해야합니다. 컴파일 실패는 실패 횟수로 계산됩니다.
행복한 프로그래밍, 그리고 당신은 직업을 얻을 수 있습니다. 그러나 실패하면 어쨌든 그 사악한 보스를 위해 일하고 싶지 않았을 것입니다.
펄 테스트 스크립트 :
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;