Kredi
Rand Al'Thor'un bu kod golf mücadelesine ilham veren mektup temelli soruya teşekkür ederim .
Arka fon
Bu zorluğun doğası, Rand'ın "Üç Harfden Oluşan Üçgen" te belirtilen algoritmaya dayanmaktadır:
- Her biri X, Y veya Z olan 10 harflik bir sıra ile başlayın.
- Her satırın altında, sonraki satırı aşağıdaki gibi oluşturun. İki bitişik harf aynı ise, altlarına aynı harfi yazın; eğer farklılarsa, altlarındaki üçüncü harfi yazın.
Daha sonra onuncu satırınızda bir harf olana kadar önceki adımı tekrar edersiniz.
Meydan okuma
Yukarıdaki algoritmaya matematiksel bir dönüş yapacağız:
- Her biri bir boşlukla ayrılmış ve her biri 1, 2 veya 3 olan 10 basamaklı bir diziyle başlayalım.
- Her satırın altında, sonraki satırı aşağıdaki gibi oluşturun. İki bitişik basamak aynı ise, altlarına aynı basamağı yazın; eğer farklılarsa, altındaki üçüncü haneyi yazın.
- Bir son numaranız olana kadar önceki adımı tekrarlayın.
Bu nedenle, bu algoritmayı izleyerek 1 2 3 3 1 3 1 3 1 2
, örneğin satırla başlıyorsanız , aşağıdaki üçgen oluşturulur:
Input: 1 2 3 3 1 3 1 3 1 2
Output:
1 2 3 3 1 3 1 3 1 2
3 1 3 2 2 2 2 2 3
2 2 1 2 2 2 2 1
2 3 3 2 2 2 3
1 3 1 2 2 1
2 2 3 2 3
2 1 1 1
3 1 1
2 1
3
Ayrıca sayı üçgenindeki tüm rakamların toplamını bilmek de merak ediyorum, bu yüzden tüm bu rakamları ekleyin ve bu toplamı ilk satırdaki son basamağa doğru olarak haklı olarak onbirinci satıra koyun. Yani, sayı üçgenimiz aşağıdaki gibi görünecektir (örneğimdeki boşluklar, .
biçimlendirmeyi gösteren karakterle aşağıda temsil edilir .)
Input: 1 2 3 3 1 3 1 3 1 2
Output:
1.2.3.3.1.3.1.3.1.2
.3.1.3.2.2.2.2.2.3.
..2.2.1.2.2.2.2.1..
...2.3.3.2.2.2.3...
....1.3.1.2.2.1....
.....2.2.3.2.3.....
......2.1.1.1......
.......3.1.1.......
........2.1........
.........3.........
................109
Sorun, girilen bir string / array / etc ile başlayabilen kod yazmaktır. örneğime göre on basamaktan oluşan bir sayı girin ve ardından sayı üçgenini oluşturacak on satırı ve ardından sağa yaslama ile tüm basamakların toplamını görüntüleyecek 11. satırı oluşturmak için algoritmayı uygulayın.
Test yapmak
Bu dizenin testi, seçtiğiniz on basamaktan oluşan rastgele oluşturulmuş bir dizeyle veya aşağıdaki snippet'ten oluşturulmuş bir dizeyle yapılabilir ...
c1=()=>('1331123221'+(Math.random()*(1<<24)|0).toString(4)).replace(/0/g, "").slice(-10).split("").join(" ");
$("#btn").click(function(){
$("#str").val(c1());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="str"><button id="btn">Get numbers</button>
<br>
Please use this snippet to generate a starting row for testing your code. Alternatively, you can also use a string of your choice, so long as it's ten digits (ranging from 1 to 3), separated by single spaces.
kurallar
- Kod-golf kuralları geçerlidir, bu yüzden en az sayıda bayt zorluğu kazanır. Aynı düşük puana sahip iki giriş olması durumunda, kazanan oy sayısı üzerinden ödüllendirilir.
- Temelde peşinde olduğumuz şey 11 satır, 19 karakter uzunluğunda ... Son çıktınızı nasıl oluşturduğunuz tamamen size bağlı: dizi, konsol, dosya çıktısı, STDOUT, vb. Lütfen istediğiniz çıktı yöntemini kullanın yararınıza çalışmak. Çıktıdaki tek kural, her satıra 19 karakterden oluşan 11 satıra sahip olmaktır.
- Kodunuza yardımcı olursa, basamaklar için herhangi bir ayırıcı kullanın ... Okunabilirliğin katkıda bulunan bir faktör olabileceğini unutmayın.
- Aptal boşluklar yok .
- Girişin sabit kodlamasına izin verilmiyor. Bu kodun amaçları, değişken girdilerle her seferinde farklı sonuçlar üretmek için kullanılabilecek şekildedir.
1 1 1 1 1 1 1 1 1 1
Örneğin sabit kodlama , algoritmanın tüm noktasını tamamen ortadan kaldırır.
Hepinizin neler yapabileceğini görmek için sabırsızlanıyoruz!