Röportajınızın sonunda, Evil Mülakatçısı size şunları söylüyor: “Tüm başvuru sahiplerimize ne hakkında konuştuklarını gerçekten bilip bilmediklerini görmek için kısa bir kodlama testi yaptırıyoruz. Endişelenmeyin; kolay. Bir çalışma programı, size hemen işi sunacağım. " Size yakındaki bir bilgisayarda oturmanız için işaret ediyor. "Yapmanız gereken tek şey çalışan bir Hello World programı oluşturmak. Ama" - ve geniş sırıttı - "bir yakalama var. Maalesef bu makinede sahip olduğumuz tek derleyicide küçük bir hata var. Rastgele bir karakteri siler. derlemeden önce kaynak kod dosyası. Tamam, beş dakika sonra görüşmek üzere! " Ve odadan çıkıp mutlu bir şekilde ıslık çalıyor.
İşi alacağını garanti eder misin?
Görev
Hello, world!
Tek bir karakter dosyadaki herhangi bir konumdan çıkarıldıktan sonra bile standart çıktıya yazdıracak bir program yazın . Veya buna mümkün olduğunca yaklaşın.
Kurallar
Harici Çıkış Yok - Hello, world!
standart çıkışa yazdırılan tek önemli şey olmalıdır. Seçtiğiniz dilde doğal olarak üretildiyse, sondaki yeni satır gibi bir karakter [1] "Hello, world!"
(örneğin R kullanıyorsanız) gibi başka karakterler de dahil etmek uygundur , ancak her seferinde aynı şeyi basması gerekir. Bu baskı olamaz Hello, world!Hello, world!
ya Hello world!" && x==1
örneğin zamanının bir kısmını,. Ancak uyarılara izin verilir.
Test Etme Puanınızı belirlemek için, programın olası her bir permütasyonunu test etmeniz gerekir: kaldırılan her karakter ile test edin ve doğru çıktı üretip üretmediğine bakın. Aşağıda, bu amaçla birçok dilde çalışması gereken basit bir Perl programı ekledim. Sizin için işe yaramazsa, lütfen bir test programı oluşturun ve cevabınıza ekleyin.
Puanlama Puanınız, programınızın başarısız olma sayısıdır . Başka bir deyişle, bir karakterin silinmesinin programınızın çalışmasını engellediği, dosyanızdaki bireysel konumların sayısı. En düşük puan kazanır. Beraberlik durumunda, en kısa kod kazanır.
"Hello, world!"
Birkaç dilde olduğu gibi (15 puan) önemsiz çözümler kabul edilebilir, ancak kazanamayacaklar. En azından 4'lü bir Perl çözümü buldum ve sonunda göndereceğim.
Güncelleme: Resmi kazanan, Turing-complete bir programlama dili kullanacak ve yazdırılan önceden tanımlanmış herhangi bir mekanizma kullanmayacak Hello, world!
. Kullanılan herhangi bir harici kaynak (kendi diliniz için standart kütüphaneler dışında) programınızın bir parçası olarak kabul edilir ve aynı 1 karakterli silme işlemine tabi tutulur. Bu şartlar, bir not üzerine masaya yapışmıştı. Onları ilk başta görmediyseniz özür dilerim.
Güncelleme 2: Evet, programınız bir puan almak için yukarıda açıklanan görevi yerine getirmek zorunda! Yani Hello, world!
en az bir kere başarıyla basmalı. Bu açık olmalıydı. Komut satırı anahtarları ve işlevsellik ekleyen diğer ayarlar da programınızın bir parçası olarak sayılır ve tek karakter silme işlemine tabi tutulur. Program, herhangi bir kullanıcı girişi olmadan görevini yerine getirmelidir. Derleme hatası, başarısızlık sayınıza dahil edilir.
Mutlu programlama ve işi alabilir misiniz? Ama başarısız olursan, muhtemelen o kötü patron için çalışmak istemedin.
Perl testi betiği:
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;
Hello, World!
Yazdırılmamasına yol açan silinmiş herhangi bir karakter bir başarısızlıktır.