Genellikle 8 yineleme gerçekleştiren tipik bir döngüye bir göz atalım:
for (int x=0; x<8; ++x);
Sonsuz yapmalısın!
Bu tür bir döngüyü destekleyen tüm diller için bir popülerlik yarışmasıdırfor
. Böylece en yüksek puana sahip çözüm (upvotes eksi downvotes) kazanır.
Diliniz başka bir biçime sahipse for
döngü , ancak eminseniz, onunla harika bir şey yapabilirsiniz, cevabı gönderebilir ve rakipsiz olarak işaretleyebilirsiniz. Mevcut yapıların ve dillerin kapsamını genişletme hakkını saklıyorum, ancak asla küçülmeyecek, bu yüzden daha önce doğru çözümleri bırakmaktan korkmayın.
Çözüm nedir?
Çözüm aşağıdakilerden oluşur iki programdan .
İlk program temiz bir programdır. for
8 yineleme yapan döngü ile kendi dilinizde tipik bir programdır . Bu normal bir program olmalı, herhangi bir geliştirici yazabilir. Hazırlık amaçlı herhangi bir özel saldırı yok. Örneğin:
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
İkinci program artırıldı. Bu program, temiz programdaki tüm kodları ve bazı ek kodları içermelidir. Sınırlı sayıda uzatma noktası vardır, ayrıntılar için kuralların tamamı bölümüne bakın. Yukarıdaki temiz program için artırılmış bir program olabilir
inline bool operator < (const int &a, const int &b)
{
return true;
}
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
Bu sadece bir fikir göstermek için bir örnek (C ++ ile derlenemez). Gerçek doğru artırılmış program derlenebilir, çalışır ve sonsuz döngüye sahip olmalıdır.
Tam kurallar
Her iki program:
- Böyle bir dili destekleyen herhangi bir dil
for
döngüleri tamam. - Döngü gövdesi boş olmalıdır. Daha doğrusu, döngüye bazı çıktılar veya başka kodlar yerleştirebilirsiniz, ancak boş döngü durumunda döngü davranışı aynı olmalıdır.
Programı temizle:
Döngü, tamsayı veya sayısal sayaç kullanır ve 8 yineleme gerçekleştirir:
for (int x=0; x<8; ++x); // C, C++, C# for (var x=0; x<8; ++x); // C#, Javascript for (auto x=0; x<8; ++x); // C, C++ for (auto signed x=0; x<8; ++x); // C, C++ for (register int x=0; x<8; ++x); // C, C++
Kullanıcı tanımlı türlere izin verilmez.
- Döngü değişkeni yerine özelliğin (genel değişken hariç) kullanımına izin verilmez.
Değişken bildirimi döngü içinde veya dışında olabilir. Aşağıdaki kod tamam:
int x; for(x=0; x<8; ++x);
Ön ek veya son düzeltme artışı kullanılabilir.
Döngü sınırı
8
, adlandırılmış sabit veya değişkene kaydedilmeden sabit değişmez olarak yazılmalıdır. Değişken veya sabitin 8'e eşit olarak bildirilmesine ve daha sonra diğer değerle yeniden atanmasına, geçersiz kılmasına veya gölgelenmesine dayanan çözümleri önlemek için yapılır:const double n = 8; int main() { const double n = 9007199254740992; for (double x=0; x<n; ++x); return 0; }
Artırılmış program:
- Temiz koddan tüm kodu içermelidir.
- Temiz programı sınırlı sayıda uzatma noktasında uzatmalıdır.
- Sonsuz bir döngü ile aynı
for
döngüyü çalıştırmalıdır .
Döngünün başka bir sonsuz yapıya yerleştirilmesi uygun değildir. - Kodun metinsel gösterimi değişmediği sürece çalışma zamanına veya derleme zamanı düzeltme ekine izin verilir.
- Yapıyı bir dizgiye yerleştirip geçmesine
eval
izin verilmez.
Uzatma noktaları:
- Diğer dosyalar veya diğer montajlar da dahil olmak üzere, parçanın dışında temiz kod içeren herhangi bir yer.
for
ifadesi (tek parça olarak -for
yapı ve gövdesi) değişmeden tutulmalıdır.- Değişken beyan aynı tutulmalıdır.
- Basit ifadeler arasındaki herhangi bir yer uzatma noktası olarak kullanılabilir.
- Değişken döngünün dışında ve değerin hemen atanması olmadan bildirildiyse, bu atama eklenebilir.
/* extension point here */
int main()
/* extension point here */
{
/* extension point here */
int x /* extension point for assignment here */;
/* extension point here */
for (x=0; x<8; ++x);
/* extension point here */
return 0;
/* extension point here */
}
/* extension point here */
int main()
{
/* BEGIN: No changes allowed */ int x = 0; /* END */
/* extension point here */
/* BEGIN: No changes allowed */ for (x=0; x<8; ++x); /* END */
return 0;
}
Not: Mümkünse, lütfen çevrimiçi IDE'ye bir bağlantı sağlayın.
java.lang.Integer
mi? 2. Bu, uygun bir kazanma kriteri ile daha iyi olur.