Bu zorluk Ask Ubuntu Stack Exchange'deki bu cevaptan esinlenmiştir .
giriş
Windows ME ekran koruyucuyu hatırlıyor musunuz? Nostaljiyi geri getirme zamanı!
Meydan okuma
Ekran koruyucunun ASCII temsilini verecek bir program veya işlev yazmalısınız. Ekran koruyucusunda yarı rastgele yönlerde büyüyecek tek bir boru olmalıdır.
Borunun başlangıcı, ekranın sınırlarından herhangi birine rastgele yerleştirilir ve boru parçası sınıra dik olmalıdır (ilk köşe köşeleri yatay veya dikey olabilir). Her bir kene borunun baktığı yönde (yatay / dikey) bir 80%
şansta büyüyecek veya bir şansı köşeye alacaktır 20%
.
Boru gösterimi
Yöneltme oluşturmak için 6 unicode karakter kullanılacaktır
─ \u2500 horizontal pipe
│ \u2502 vertical pipe
┌ \u250C upper left corner pipe
┐ \u2510 upper right corner pipe
└ \u2514 lower left corner pipe
┘ \u2518 lower right corner pipe
Giriş
Program / fonksiyon, fonksiyon parametreleri aracılığıyla toplanabilen veya kullanıcıya sorulabilecek 3 giriş değeri alacaktır.
- Kenelerin miktarı
- Ekran genişliği
- Ekran yüksekliği
Kenelerin miktarı
Her kene için ekrana bir parça boru eklenir. Borular, aynı konumda ortaya çıkarlarsa eski boru parçalarının üzerine yazılır.
Örneğin, 3x3 boyutunda bir ekran alın
ticks == 3
─┐
┘
ticks == 4
─┐
└┘
ticks == 5
│┐
└┘
Bir boru ekrandan her çıktığında, son örnekte olduğu gibi 5 kenede, yeni bir boru rastgele bir sınırda ortaya çıkar. Örneğin:
ticks == 6
│┐
└┘
─
Yeni borunun yatay veya dikey olma olasılığı% 50 olmalıdır.
Ekran genişliği / yüksekliği
Ekran genişliği ve yüksekliği, tercih ettiğiniz dilde tercih edilirse, tek bir değerde birleştirilebilir. Ekran genişliği ve yüksekliği her zaman minimum 1 ve maksimum 255 değerine sahip olacaktır. Seçtiğiniz dil 255x255 karakterlik bir ızgaradan daha küçük bir konsol veya çıktı ekranını destekliyorsa, genişlik ve yüksekliğin asla konsolunuzun sınırlarını aşmayın. (Örnek: Windows 80x25 cmd penceresi)
Çıktı
Programınızın / fonksiyonunuzun çıktısı ekrana yazdırılmalı veya bir fonksiyondan döndürülmelidir. Programınızın her çalışması için farklı bir boru kümesi oluşturulmalıdır.
Test senaryoları
Aşağıdaki test durumlarının tümü geçerli çıktıların rastgele örnekleridir
f(4, 3, 3)
│
─┘
│
f(5, 3, 3)
│
─┘┌
│
f(6, 3, 3)
─│
─┘┌
│
f(7, 3, 3)
──
─┘┌
│
Açıkçası, daha fazla keneler meydana geldiğinde, programınızın geçerliliğini kanıtlamak zorlaşır. Bu nedenle, çıkış çalışmanızın bir gif'ini yayınlamak tercih edilecektir. Bu mümkün değilse, lütfen kodunuzun çıktıyı yazdırmayı içeren bir sürümünü gönderin. Açıkçası, bu puanınıza sayılmaz.
kurallar
- Bu kod golf , en kısa miktarda bayt kazanır
- Standart boşluklar geçerlidir
- Kaynak kodunuzda unicode kanal karakterlerini kullanırsanız, bunları tek bir bayt olarak sayabilirsiniz
Bu, birçok yaratıcı yolla çözülebilecek oldukça zor bir sorundur, kısa esolanglarda zaten cevaplar olsa bile, daha ayrıntılı bir dilde cevap yazmanız önerilir. Bu, dil başına en kısa cevapların bir kataloğunu oluşturacaktır. Süslü renkli gif için bonus upvotes;)
Mutlu golf!
Feragatname: Unicode karakterlerin ASCII olmadığının farkındayım, ancak daha iyi bir isim olmadığına sadece ASCII sanatı diyorum. Öneriler bekliyoruz :)