Arka fon
Birçok ezoterik programlama dili, değişmez değerlerde yerleşik sayılara sahip değildir, bu nedenle bunları çalışma zamanında hesaplamanız gerekir; ve bu vakaların çoğunda sayı temsili oldukça ilginç olabilir. Underload için sayıları temsil etme konusunda zaten bir zorluk yaşadık . Bu zorluk Modüler SNUSP'deki sayıları temsil etmektir . (Bu zorluğu tamamlamak için SNUSP öğrenmeniz gerekmediğini unutmayın - ihtiyacınız olan tüm bilgiler spesifikasyondadır - ancak arka planı ilginç bulabilirsiniz.)
Görev
Bu meydan okuma amaçla, bir Modüler SNUSP sayı karakterlerinin dışına oluşan bir dizidir @
, +
ve =
son karakter olması dışında, #
sondan bir önceki karakter olmalı ve bu +
ya =
(bu olamaz @
). Örneğin, geçerli numaralar arasında, @+#
, ==#
ve @@+@=#
; Geçersiz sayı örnekleri +=
, @@#
ve +?+#
.
Modüler SNUSP numarasının değeri tekrar tekrar aşağıdaki gibi hesaplanır:
#
0 değerine sahiptir (bu temel durumdur).- Sayı
=x
herhangi bir dize için forma sahipse,x
değeri, değerine eşittirx
. - Sayı
+x
herhangi bir dize için forma sahipsex
, değerix
artı 1 değerine eşittir . - Sayı,
@cx
herhangi bir tek karakterc
ve herhangi bir dize için forma sahipse,x
değeri değerinex
artı değerine eşittircx
.
Bu zorluk için, girdi olarak negatif olmayan bir tam sayı alan ve girdiye eşit bir değere sahip mümkün olan en kısa Modüler SNUSP numarası olan bir dize çıkaran bir program yazmalısınız.
Açıklamalar
- Aynı değere sahip birden fazla dize olması tamamen mümkündür ve özellikle bazı tamsayılar için bu değere sahip en kısa Modüler SNUSP numarası için bir bağ olacaktır. Böyle bir durumda, berabere kalan sayılardan herhangi birini çıkarabilirsiniz.
- Numarayı bulmak için kullandığınız algoritmada herhangi bir kısıtlama yoktur; örneğin, kaba kuvvet dizeleri ve bunları değerlendirmek yasal bir taktiktir, ancak arama alanını azaltmak için daha akıllıca bir şey yapar.
- PPCG'de her zamanki gibi, gönderiminiz tam bir program veya bir işlev olabilir (dilinizde daha özlü olanı seçin).
- Bu, girdi ve çıktı biçimlerini işlemeyle ilgili bir sorun değildir, bu nedenle negatif olmayan bir tam sayı girmek ve bir dize çıkarmak için makul herhangi bir yöntem kullanabilirsiniz. Meta'da tam bir rehber vardır , ancak en yaygın kullanılan yasal yöntemler arasında işlev bağımsız değişkenleri / döndürme, komut satırı bağımsız değişkenleri ve standart giriş / standart çıktı bulunur.
Test senaryoları
İlk birkaç sayının en kısa gösterimleri:
- 0 :
#
- 1 :
+#
- 2 :
++#
- 3 :
+++#
veya@++#
- 4 :
++++#
veya+@++#
veya@=++#
- 5 :
@+++#
veya@@++#
- 6 :
+@+++#
veya+@@++#
veya@=+++#
veya@=@++#
veya@@=++#
- 7 :
@++++#
veya@+@++#
- 8 :
@@+++#
veya@@@++#
- 9 :
+@@+++#
veya+@@@++#
veya@+++++#
veya@++@++#
veya@+@=++#
veya@@=+++#
veya@@=@++#
- 10 :
@=@+++#
veya@=@@++#
veya@@@=++#
( olası tüm cevaplar dahil olduğu için bu kontrol etmek oldukça önemli bir test örneğidir=
) - 11 :
@+@+++#
veya@+@@++#
veya@@++++#
veya@@+@++#
- 12 :
+@+@+++#
veya+@+@@++#
veya+@@++++#
veya+@@+@++#
veya@=+@+++#
veya@=+@@++#
veya@=@=+++#
veya@=@=@++#
veya@=@@=++#
veya@@=++++#
veya@@=+@++#
veya@@=@=++#
- 13 :
@@@+++#
veya@@@@++#
- 14 :
+@@@+++#
veya+@@@@++#
veya@=@++++#
veya@=@+@++#
veya@@+++++#
veya@@++@++#
veya@@+@=++#
- 15 :
@+@++++#
veya@+@+@++#
veya@@=@+++#
veya@@=@@++#
veya@@@=+++#
veya@@@=@++#
Daha büyük bir test olarak, girdi çıktı 40 olmalıdır @@@=@@+++#
, @@@=@@@++#
, @@@@=@+++#
ya da @@@@=@@++#
.
Zafer koşulu
Bir kod golf mücadelesi olarak, kazanan bayt olarak ölçülen en kısa giriş.
=
optimal olarak sadece şu şekilde gerçekleşecek@=
, değil mi?