Taşçı hakkında eski halinden asla memnun olmayan bir hikaye var. Güneş olabilmesini diledi ve öyle oldu. Bulutlar tarafından engellendi, bir bulut olmak istedi ve bir bulut haline geldi. Rüzgar patladığında, rüzgar olmasını istedi. Dağın yanında durdu, bir dağ olmayı diledi ve böylece bir oldu. Ancak kısa süre sonra bir taşçı tarafından saldırıya uğradı ve taşçı olmak istiyordu.
Benzer şekilde, göreviniz içinde bulunduğu dilden hiç memnun kalmayan bir program yazmaktır. Programınız, onu farklı bir dile çevirmek için bir dizi normal ifade yerine koymalıdır. Ve bunun gibi.
kurallar
- Bir programı istediğiniz dilde yazın.
- Program en az iki bölümden oluşan bir seri çıkarmalıdır. Segment, noktalı virgülle ayrılmış bir grup metindir. Ancak, normal ifadenin içinde noktalı virgül varsa, bu bölümün parçalanması geçersiz sözdizimi ile sonuçlanacak şekilde segmentleri ayırmaz. Örneğe bakın.
- İlk segment, bulunacak bir normal ifade modelidir ve ikinci segment, yedek modeldir. Üçüncüsü başka bir "bul" kalıbı, dördüncüsü ise bir "değiştir" kalıbı vb.
- Normal ifade kalıplarını programa uygulayın. İlk segmentteki deseni ikincisiyle değiştirin; üçüncü kalıbı dördüncü kalıpla değiştirin, vb.
- Sonuç, farklı bir dilde bir program olmalıdır, ki bu da kendisi 2 ila 4 kurallarını takip eder.
- Kullanılan diller sonsuz, tekrar eden bir döngü oluşturmalıdır.
- Örneğin, Python -> PHP -> C ++ -> Python -> PHP -> C ++ -> Python -> ...
- Puanınız döngü periyodudur. Bağlar en kısa başlangıç kod uzunluğu ile kesilir.
- Yukarıdaki örnekte, puan üçtür.
- Döngünün her yinelemesinde, hiçbir dil bir kereden fazla kullanılamaz.
- Kural 5 ve 7 için uyumlu diller (C ve C ++) ve aynı dilin farklı sürümleri (Python 2 ve Python 3) aynı kabul edilir.
- Programların kendilerinin tekrarlanmasına gerek yoktur.
- Yukarıdaki örnekte, birinci ve dördüncü programlar farklı olabilir.
- Regex'in herhangi bir sürümü kabul edilebilir, ancak tüm programlar için aynı şekilde kullanılmalıdır.
- Her program için toplam çıktı 100 karakteri aşamaz.
- Her çıktı, programı gerçekten değiştirmek için talimatlar içermelidir. Yani, döngüdeki iki ardışık program aynı olamaz.
Misal
Python -> Yakut -> Python -> ...
print "uts;Z;rint;uts;Z(?=;Z);rint"
Çıktılar:
uts;Z;rint;uts;Z(?=;Z);rint
Segmentler:
FIND ; REPLACE
uts ; Z
rint ; uts
Z(?=;Z ; rint (breaking the first segment in two would result in invalid syntax)
Normal ifade değişikliklerini sırasıyla uygulamak bize şunları verir:
print "Z;Z;rint;Z;Z(?=;Z);rint" # replace each "uts" with "Z"
puts "Z;Z;uts;Z;Z(?=;Z);uts" # replace each "rint" with "uts"
puts "rint;Z;uts;rint;Z(?=;Z);uts" # replace each "Z" followed by ";Z" with "rint"
Son satırı çalıştırmak bize bunu tekrar Python koduna dönüştürme talimatlarını verir.
\;
;)