Bu komikti! Ancak, yalnızca üç basamaklı, eğlence çok yakında sona erdi. Bu zorluk benzer, ancak eğlenceyi devam ettireceğiz.
Meydan okuma
Altın Oranın birçok basamağını yazdır dig . Altın Oran, φ = (φ + 1) / φ değerini karşılayan ve ilk 100 basamağı veren sayı olarak tanımlanır:
1,6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375 ...
Bu zorluk bilgisayarla ilgili değil φ! Bunu iki kez yapmak için herhangi bir yöntem kullanmadan mümkün olduğu kadar çok rakam yazdırmakla ilgilidir. Bu nedenle rakamlarınızı olabildiğince almanın yaratıcı yollarını bulun!
Kısıtlamalar
Tek başına φ basamağını yazdırmak biraz fazla basit olurdu, işte kurallar:
- Sayıyı soldan sağa sırayla , parça parça yazdırarak veya soldan sağa bir dize oluşturarak ve sonunda yazdırarak yapmanız gerekir - hatta bir rakam karakteri dizisi oluşturabilir ve sonra birleştirebilir ve sırayla yaptığınız sürece yazdırın. Aşağıdaki kurallarda "print" ve "output" bu işlemlerin herhangi birine atıfta bulunabilir (örneğin, bir dize oluşturuyorsanız ve dize sahip
1.6
olduğu gibi sayar.1.6
zaten yazdırılmış ). - Kodunuz için rakam başına 15 karakterlik bir bütçe elde edersiniz . Dönem bu bütçeye göre sayılmaz, aynı zamanda basılması da gerekir. Kısıtlamanın yalnızca toplam kod boyutunda olduğunu unutmayın: Ortalama olarak daha fazla kullanmadığınız sürece herhangi bir rakam için 15'ten fazla karakter kullanabilirsiniz. Aslında, karakterlerde bir "borç" oluşturabilir ve daha sonra "öder". Örneğin yazdırmak
1.618
için 60 karakter var. - Standart kütüphane içerir / alır kod boyutuna sayılmaz. Ama bu kestirme takma adları ücretsiz olarak veremezsiniz!
- Şu anda oluşturduğunuz rakamı veya daha önce yazdırdığınız rakamları kullanmamalısınız. Örneğin
1
, kaynak kodunuzda hiçbir yerde görünmeyebilir, çünkü ilk basamaktır. Çıktılar kod8
in1.618
basamak herhangi birini veya tümünü kullanabilir[0234579]
, ancak hiçbiri[168]
. Bu amaçla, tek bir haneye eşdeğer tüm değişmezler bu basamak olarak değerlendirilir . . Yani eğer diliniz temsil edebiliyorsa9
,'\t'
onu kullanamayacağınız herhangi bir yerde kullanmanıza izin verilmez9
. - Aynı anda birden fazla rakam üretmemelisiniz. Kodunuzu bir seferde bir rakam üreten parçalara açıkça ayırmanız mümkün olmalıdır.
Daha önceki bir basamağı oluşturan kodda kullandığınız herhangi bir yerleşik fonksiyon, matematiksel / boolean / bit bilge / string operatörü, değişken veya sabiti ifade etmemelisiniz . İstisnalar, tam sayıdan dizeye dönüştürme, dizgiyi birleştirme ve her basamak için gerekebilecek yazdırma işlevleridir. O hangi önemli değil Not adı başvurmak herhangi yerleşik: Yalnızca size çünkü takma adı, dahili
PI
hemp
veq
kullanmak anlamına gelmezp
kez veq
bir kez. Aynı şekilde, vardır o dize gibi iki farklı dahili ins atıfta eğer iki kez bir isim kullanmasına izinlength
ve dizininlength
.Programlama dilinizde işlevler yoksa, eşdeğerin ne olacağına dair en iyi kararınızı kullanın - örneğin bash komut dosyası için, diğer programları çağırmak, işlevlere uygulanan kuralları takip etmelidir.
- Gönderiniz tek dilde yazılmalıdır. Bu yüzden o dilin yerleşiklerine erişmek için başka bir dilin tercümanını çalıştırma.
etkileri
Aşağıdaki hususların tümü yukarıdaki kurallarda belirtilmiştir, ancak daha önce sanal alana gelen soruları önlemek için buraya ekledim:
- Bazı geri baskılar bastırarak çıktınızın bölümlerinin üzerine yazmanıza izin verilmez (genellikle
'\b'
Aralarında . - Birden fazla basamak üreten / veren döngüler yasaktır. (Tek bir basamağı hesaplayan döngüler yine de iyidir.)
- Karışık bir sürüm kullanma
(1 + √5)/2
veya tek bir rakamdan fazlasını elde etmek için Fibonacci sayılarını bölmek yasaktır. - Sen 10 haneli ön hesaplama ve 10 değişken saklayın ve bu değişken referanslar 'dont çünkü o zaman sadece, bu başvuruda bulunamaz oluşturmak haneyi - does değişkeni doldurur kod Bu kuralın 6 ihlalidir bu yüzden.
- Aslında, önceki (veya ara sonuçları) tekrar kullanamazsınız, çünkü bu iki rakamın üretilmek için kod paylaşacağı anlamına gelir .
- Aksi halde, rakamları oluşturmak için herhangi bir yöntemi (yalnızca matematiksel olarak gerekmeyen) kullanabilirsiniz. (Ve yapmalısın!)
- Aslında, standart kütüphanenizi kullanarak birçok farklı yerden doğru rakamları çıkarabilirseniz, hiçbir şeyi hesaplamaya gerek yoktur.
- Sen olabilir bir tek basamaklı oluşturulurken bir operatör birden çok kez kullanır ve böylece
2+2+2
ilk üretmek için adil bir oyun6
(o kısa düşüktür rağmen). - Sen olabilir bunlar yerleşik olmadığı için sabitler, sıklıkta istediğiniz gibi herhangi bir hazır bilgi kullanın. Yazdırmak zorunda olmadığınız sürece , kodunuzda istediğiniz kadar s
5
kullanabilirsiniz5
. - Çıktıyı kodlayamazsınız, çünkü çıktı aldığınız sayıları kullanmayı gerektirir.
Kısacası: İki kere rakam üretme yöntemini kullanmayın ve yazdırmakta olduğunuz rakamı veya daha önce basılmış olan rakamları kullanmayın.
Eğer (yarı) sonsuz bir skor elde etmenize izin veren bir kaçık noktası tespit ederseniz, lütfen onu kullanarak bu zorluğun üstesinden gelmeyin, ama bana bildirin, böylece kaçağın hiçbir şey kırılmadan sabitlenip sabitlenemeyeceğini göreyim.
puanlama
En fazla rakamı doğru basan program kazanır. Kravat olması durumunda, kısa kod bağı kırar.
Lütfen, kodunuzun hangi bölümünün hangi rakamı ürettiğini tanımlayan eski bir yorumlu sürüm ekleyin.
Not: Eğer biri yukarıdaki 100 haneyi geçerse, işte birkaç tane daha .
x = (x+1)/x
(veya x^2 = x+1
) (veya x^2-x+1
) üzerindeki ikinci dereceli formülü kullanıyor .