Mój przyjaciel i ja mamy tę grę, w którą gramy słowami. To jest fajna rozrywka i polega na „anulowaniu” liter w słowie, dopóki nic nie zostanie. Jestem naprawdę zmęczony tym, że jest o wiele szybszy ode mnie, więc Twoim zadaniem jest go wdrożyć i pozwolić mi w końcu go pokonać. Oczywiście, ponieważ muszę sprawić, by program był jak najłatwiejszy do ukrycia, musi być jak najmniejszy.
Jak działa ta gra?
Gra jest dość prostym algorytmem. Redukuje ciąg alfabetyczny, dopóki nie będzie można go dalej zmniejszać, co czyni go rodzajem skrótu. Rzeczywista gra, którą my, ludzie, jest bardzo trudna do wdrożenia, ale można ją uprościć w następującym algorytmie:
Zaczynasz od złożenia alfabetu na pół i ułożenia dwóch elementów w taki sposób:
a b c d e f g h i j k l m
z y x w v u t s r p q o n
Następnie, zaczynając od środka, przypisujesz dodatnie liczby całkowite do górnej połowy, a ujemne do dolnej:
a b c d e f g h i j k l m
13 12 11 10 9 8 7 6 5 4 3 2 1
z y x w v u t s r p q o n
-13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
Następnie weź swój ciąg (będziemy używać hello world
) i ignorując wszelkie znaki niealfabetyczne, przetłumacz go:
h e l l o w o r l d
6 9 2 2 -2 -10 -2 -5 2 10
Następnie sumujesz wartości literowe. Te, które znalazły się na wcześniejszym schemacie (np. d
I w
, l
i o
), anulują się, a pozostałe sumują się.
sum(6 9 2 2 -2 -10 -2 -5 2 10 )=12
12 jest liczbą b
, więc skrót hello world
jestb
Za słowa, które całkowicie niweluje (np love
), to wyjście „0 znak”: -
. Zauważ, że w danych wejściowych -
nadal będą ignorowane. Ma to znaczenie tylko w wyniku.
Jeśli wielkość liczby jest większa niż 13, wtedy zaczynasz podwajać liczby a
i. z
Zasadniczo bierzesz tyle samo a
lub więcej z
, ile pasuje do liczby i bierzesz wszystko, co pozostało do ostatniej litery, w ten sposób:
code golf: 43.
Pasuje do 3 a
i zostało 4:
aaa 4: j
result: aaaj
Wskazówka: Ta część jest w zasadzie divmod
z tym wyjątkiem, że zaokrągla się w kierunku zera, a nie -infinity
(np. -43 zamieniłby się na 3 z
, a a tak -4
jest ).p
zzzp
Uwaga: kreska nie przyjdzie, jeśli a
„s lub z
” s pasuje idealnie, tylko jeśli jest to dokładnie 0
.
Wyjaśnienia:
- Hash jest przypadek w czuły
- Standardowe luki są niedozwolone
- I / O może być w dowolnym formacie, który nie jest zbyt dziwaczny, stdin, stdout, arg wiersza poleceń, funkcja itp.
- To jest golf golfowy, więc wygrywa najmniejszy rozmiar w bajtach .
Przykłady:
hello world --> b
love --> -
this is an example --> aak
hello *&*(&(*&%& world --> b
good bye --> ae
root users --> zzs
love
jest pusty ...