Bu soruyu sormak için önceki birkaç girişimde bulunuldu , ancak hiçbiri bu sitedeki modern standartlara uymuyor. Başına Meta üzerinde tartışma , bizim çağdaş rulesets altında adil rekabet için izin verecek şekilde yineden ediyorum.
Arka fon
Bir palindrome "aynı ileri ve geri okuyan" bir dizedir, yani dizginin tersi dizgenin kendisiyle aynıdır. Burada "uygun palindromlar" dan bahsediyoruz, ancak karakter karakterleri kesin bir şekilde değişiyor; örneğin, ()()
bir palindrom değil ())(
, öyle.
Görev
Girdi olarak S dizesini (veya kendi dilinizde uygun eşdeğeri) alan ve tercih ettiğiniz bir tür Q çıkışına sahip bir program veya işlev yazın . Girdiyi almak ve çıktıyı sağlamak için herhangi bir makul yolu kullanabilirsiniz .
- S girişi bir palindrom olduğunda, Q çıkışı A değerine sahip olmalıdır (herhangi bir palindromik S için aynıdır ).
- S girişi bir palindrom değilse, Q çıkışı B değerine sahip olmalıdır (bu herhangi bir palindromik olmayan S için aynıdır ).
- A ve B birbirlerinden farklı olmalıdır.
Veya başka bir deyişle: tüm palindromları bir değerle ve tüm palindromları bir başka ile eşleyin.
Ek olarak, yazdığınız program veya işlev bir palindromun kendisi olmalı (yani kaynak kodunun palindromik olması gerekir), bu da onu sınırlı bir kaynak zorluğu haline getirir .
Açıklamalar
- Her ne kadar
true
vefalse
için bariz seçimler A ve B , sizin "bir palindrom olup" için herhangi iki farklı değerleri kullanabilirsiniz ve mantıksal olması gerekmez çıkışları, "bir palindrom değil". - Buradaki karakter düzeyinde string tersini tanımlıyoruz ;
éé
UTF-8 kodlamasından sonra paltromik bir oktet dizisi olmasa da, programın UTF-8 veya Latin-1'de kodlanıp kodlanmadığına bakılmaksızın palindromiktir. - Ancak, programınız ASCII olmayan karakterler içeriyor olsa bile, yalnızca ASCII girişi için çalışması gerekir. Spesifik olarak, S girişi yalnızca yazdırılabilir ASCII karakterleri içerecektir (boşluk dahil ancak yeni satır dahil değil). Bu, diğer şeylerin yanı sıra, girdiyi bir karakter dizisi yerine bir bayt dizisi olarak kabul ederseniz, programınızın muhtemelen belirtime uygun olacağı anlamına gelir (dilinizin G / Ç kodlaması çok garip değilse ). Bu nedenle, önceki madde imlerindeki bir palindromun tanımı yalnızca programın doğru bir formda olup olmadığını kontrol ederken gerçekten önemlidir.
- Programın yarısını bir yorumda ya da dizgede yazmak, yaratıcı olmamakla birlikte yasaldır; yaratıcılığa değil, uzunluğa göre puan alıyorsanız, programınızın bir palindrom olmasını sağlamak için "sıkıcı" yöntemleri kullanmaktan çekinmeyin. Elbette, uzunluğa göre puan aldığınız için, programınızın hiçbir şey yapmayan kısımları puanınızı daha da kötüleştirecektir, bu nedenle programınızın her iki yarısını da kullanabilmeniz büyük olasılıkla size yardımcı olacaktır. .
- Zafer kriteri bayt cinsinden ölçüldüğü için, programınızın puan alabilmesi için yazıldığı kodlamayı belirtmeniz gerekir (birçok durumda hangi şifreyi kullandığınız açık olsa da).
Zafer kriteri
Programın karakter seviyesinde bir palindrome olması gerekmesine rağmen, kimin kazandığını görmek için bayt kullanıyoruz. Spesifik olarak, programınız ne kadar kısaysa bayt cinsinden ölçülürse o kadar iyidir; Bu bir kod golf mücadelesidir. Gönderilerin (özellikle aynı dilde gönderilerin) karşılaştırılmasına izin vermek için, gönderiminizin başlığına programınız için bir bayt sayısı yerleştirin (bayt sayısından farklıysa karakter sayısı).
(
ile a
ve )
ile değiştirmeyi deneyin b
. Mı abab
bir palindrom? Hayır, olması gerekirdi abba
. O zaman ()()
bir palindrom da değil; olması gerekiyordu ())(
.
()() is not a palindrome, but ())( is.
Tebrikler, reddit ettin!