Hiç derleyiciye "Neden?" Sormak istediniz mi? Kod olması gerektiği gibi çalışmadığında çoğumuz sinirli olduk. Mathworks bu nedenle why
soruyu cevaplayan hoş bir küçük işlev uyguladı . MATLAB'dan birkaç örnek vermek gerekirse:
why
The programmer suggested it.
why
To fool the tall good and smart system manager.
why(2)
You insisted on it.
why(46)
Bill insisted on it.
Göreviniz, why
işlevi kendi dilinizde uygulamak. İşlev, giriş bağımsız değişkeni ile ve onsuz çalışmalıdır (alternatif olarak girdiyi kullanın 0
veya -1
). İşlev isimlendirilmelidir why
(veya why(n)
STDIN ile yazmak uygun dizgenin yazdırılmasıyla sonuçlanmalıdır).
Herhangi bir argüman verilmezse veya argüman sıfır veya negatifse, çıkış dizesi rastgele, geçerli bir ifade olmalıdır. Yani, orada bir işlevi olmalıdır why
, why()
, why(0)
veya why(-1)
döndürdüğü rastgele cümle.
Bir giriş argümanı n
verilirse (STDIN değil fonksiyon argümanı), çıktı n'ci dizge olmalıdır (aşağıda tanımlanmıştır). Bu nedenle, why(1)
her zaman aynı sonucu vermelidir (yazdır / görüntüle).
Cümleler aşağıdaki gibi oluşturulmuştur (Tip 1, Tip 2 ve Özel). Tüm cümleler ile biter !
.
"Person" "ending" !
"Verb" "adjective" "Person" !
A list of special cases
Kişilerin listesi:
Stewie
Peter
Homer
The programmer
The system manager
You
Bitişlerin listesi:
suggested it
insisted on it
did it
Fiillerin listesi:
To fool
To satisfy
To please
Sıfatların listesi:
the smart
the bald
the tall
the rich
the stupid
Özel durumlar listesi:
How should I know?
Stop asking!
Don't ask!
Numaralandırılmış olanı seçmenin yolu:
Cümlelerin türü:
Odd number => Type 1
Even number => Type 2
n % 7 = 0 => Type 3 (% is the modulus operator)
İsimler: nth ismi modül (%) kullanılarak tanımlanmıştır.
n = 1: 1 % 7 => Stewie
n = 2: 2 % 7 => Peter
...
n = 6: 6 % 7 => You
n = 7: 7 % 7 => How should I know?
n = 11: 11 % 7 => The programmer
n = 14: 14 % 7 => Stop asking!
n = 21: 21 % 7 => Don't ask!
Bitişler: Son bitiş ayrıca modül kullanılarak tanımlanır. Sonları (1, 2 ve 3) gibi listelendiğini varsayalım (1 2 2 3)
. Sayılar her zaman tek olduğundan, kullan((n+1)/2 % 4)
n = 1: ((1+1)/2 % 4) => suggested it
n = 3: ((3+1)/2 % 4) => insisted on it
n = 13: ((13+1)/2 % 4) => did it
Sıfatlar: İlk sıfat, modül kullanılarak tanımlanır. Sayılar her zaman olduğu gibi, kullanın:(n % 10)/2
n = 2: (2 % 10)/2 => Smart
n = 6: (6 % 10)/2 => The tall
...
Fiiller: Bu fiil, modül kullanılarak da tanımlanır. Fiillerin (1, 2 ve 3) şöyle sıralandığını varsayalım (1 2 2 3)
:(n % 8) / 2
n = 2: (2 % 8)/2 => To fool
n = 4: (4 % 8)/2 => To satisfy
n = 6: (6 % 8)/2 => To satisfy
n = 8: (8 % 8)/2 => To please
Şimdi, rastgele bir tane yaratmanın yolu oldukça basit olmalı, sadece bir rasgele seçmelisiniz n
.
Bazı örnekler:
why
You suggested it!
why
To fool the tall Homer!
why
Don't ask!
why(1)
Stewie suggested it!
why(14)
Stop asking!
why(8)
To please the rich Stewie!
Standart kod golf kuralları geçerlidir. Bir kazanan, yarışmanın yayınlandığı günden bir hafta sonra seçilecektir.
/2
çalışması gerekmez . Bu kesirli değerler verir. 13
olmalıdır insisted
(14/2 =% 7 4 = 3 = ısrarın 2.'si).
the rich The programmer
Belirtilen davalar gibi durumlarla karşılaşmanızın bir önemi var mı the
?
The
ve To
listelerinizdeki örneklerinizle eşleşmesi için küçük harflerle
why
yoksaWHY
kabul edilebilir mi?