Bulmaca
Lisedeyken duyduğum küçük bir bilmece şöyle bir şey oldu ...
- Soru soran kişi benden ona bir numara vermemi isterdi;
- Numarayı duyduğunda, soru soran kişi, sonunda 4 sayısına ulaşana kadar (bu noktada sihirle bitirirdi ) tekrar tekrar (örneğin, on'un üç olduğunu söyleyebilir ) bir tür dönüşüm gerçekleştirirdi .
- Ne olursa olsun, herhangi bir sayı sonunda dörde dönüştürülebilir gibi görünüyor.
Amaç, dönüşüm işlevini anlamaya çalışmak ve ardından bu bulmacayı kendiniz güvenilir bir şekilde denetleyebilmekti.
Çözüm
Herhangi bir adımdaki dönüştürme işlevi,
- Söz konusu numarayı alın,
- Bir kısa çizgiyi veya boşlukları veya "ve" yi göz ardı ederek İngilizce kelime temsilindeki harflerin sayısını sayın (ör. "On" içinde 3 harf, "otuz dört" içinde 10 harf, "yüz kırk üç" içinde 20 harf vardır).
- Bu sayıda harfi döndür.
Şimdiye kadar test etmek istediğim tüm sayılar için bu 4'e yakınsıyor. "Dört" de dört harf içerdiğinden, burada sonsuz bir döngü olacaktır; bunun yerine sırayı sona erdirmek için geleneksel olarak sihir olarak anılır .
Meydan okuma
Zorluğunuz, kullanıcıdan bir sayı okuyacak ve ardından "dört sihir" olana kadar dönüşüm işlevinin tekrar tekrar uygulandığını gösteren satırlar yazdıracak bir kod parçası oluşturmaktır.
Özellikle:
- Çözümler kendi başlarına eksiksiz programlar olmalıdır. Girişte bir sayı faktörünü alan işlevler olamazlar.
- Giriş, standart girişten okunmalıdır. ("Echo" dan borulama veya giriş yeniden yönlendirme kullanmak iyidir, çünkü bu da stdin'den gelir)
- Giriş sayısal biçimde olmalıdır.
- Dönüşüm işlevinin her uygulaması için, bir satır yazdırılmalıdır:
a is b.
burada a ve b, dönüşümdeki sayıların sayısal biçimleridir. - Tam duruşlar (dönemler) GEREKLİDİR!
- Son satırda doğal olarak, demeli
4 is magic.
. - Kod, 0'dan 99'a kadar tüm sayılar için doğru çıktı üretmelidir .
Örnekler:
> 4
4 is magic.
> 12
12 is 6.
6 is 3.
3 is 5.
5 is 4.
4 is magic.
> 42
42 is 8.
8 is 5.
5 is 4.
4 is magic.
> 0
0 is 4.
4 is magic.
> 99
99 is 10.
10 is 3.
3 is 5.
5 is 4.
4 is magic.
Kazanan, kaynak kodu karakter sayısına göre en kısa başvurudur ve bu da doğru .
BONUS
Ayrıca, dönüştürme işlevinin her uygulamasında sayılar için İNGİLİZCE İSİMLERİNİ yazdıran kodun bir sürümünü de yazmayı deneyebilirsiniz. Orijinal girdi hala sayısaldır, ancak çıktı satırları sayının kelime biçiminde olmalıdır.
(Kodunuzla şekil çizmek için çift bonus)
(DÜZENLE) Bazı açıklamalar:
- Sözcüğün tüm uygulanabilir durumlarda her iki tarafta görünmesini istiyorum, örneğin
Nine is four. Four is magic.
- Yine de büyük harf kullanımı umrumda değil. Ve kelime jetonlarını nasıl ayırdığınız umurumda değil, ancak birbirlerinden ayrılmaları gerekir:
ninety-nine
tamam,ninety nine
tamam,ninetynine
tamam değil.
Bunları, meydan okumayla ilgili olarak bonus yarışması için ayrı bir kategori olarak düşünüyorum, bu nedenle, eğer bunun için giderseniz, kodunuzun sayısal versiyondan daha uzun olması konusunda endişelenmeyin.
Her sürüm için bir çözüm göndermekten çekinmeyin.