Alice , 17 bajtów
/?.R?y.@
\i.!yDo/
Wypróbuj online!
Wyjaśnienie
/...@
\.../
Jest to zwykły szablon dla kodu liniowego w trybie porządkowym. Jeśli to rozwiążemy, rzeczywisty program stanie się po prostu:
i.!?D.?.Ryyo
Pomysł tutaj jest podobny do mojej odpowiedzi CJam . Ponieważ Alice nie ma łatwego sposobu indeksowania na ciągi liczb całkowitych, najłatwiej jest powtórzyć to zachowanie za pomocą transliteracji ( yw Alice). Jednak semantyka transliteracji Alicji jest znacznie bardziej ogólna niż CJama, co oznacza, że Alice nie ignoruje tylko powtarzających się mapowań. Na przykład, jeśli chcemy po prostu dokonać transliteracji Mmm, marshmallowsdo jej odwrotnej strony, reprezentuje to następującą listę odwzorowań:
M -> s
m -> w
m -> o
, -> l
-> l
m -> a
a -> m
r -> h
s -> s
h -> r
m -> a
a -> m
l ->
l -> ,
o -> m
w -> m
s -> M
Należy pamiętać, że mamy na przykład m -> w, m -> o, m -> ai m -> a. CJam po prostu odrzuciłby wszystkie oprócz pierwszego mapowania, ale Alice zamiast tego je zmieniała. Tak więc pierwszy mzostanie zmapowany w, drugi do o, piąty ponownie do witd. W tym przypadku nie jest pomocne, ponieważ w ogóle jeśli wykonujemy yna AAB(dla niektórych ciągów Ai B) jak my w CJam, będziemy zawsze po prostu Bw Alice.
Jak więc obliczyć mapowanie, które działa y(tj. W jaki sposób ręcznie odrzucamy powtarzane mapowania)? Oczywiście przy użyciu innej transliteracji. :)
Źródłem pożądanego mapowania musi być nub wejścia (tj. Wejście deduplikowane). Jeśli zastosujemy powyższe mapowanie do nub, każda postać pojawi się tylko raz, więc wykorzystujemy tylko pierwsze z każdego z powtarzanych mapowań. Zatem transliterując nub z wejściem i jego odwrotnością, skutecznie po prostu odrzucamy zduplikowane odwzorowania. Następnie możemy użyć nub i tego nowego wyniku jako mapowania oryginalnego wejścia. Jestem pewien, że to miało sens dla kogoś ...
Więc kod:
i Read input. ["Mmm, marshmallows"]
.! Store a copy on the tape.
?D Push the nub of the input. ["Mmm, marshmallows" "Mm, arshlow"]
. Duplicate. ["Mmm, marshmallows" "Mm, arshlow" "Mm, arshlow"]
? Retrieve input. ["Mmm, marshmallows" "Mm, arshlow" "Mm, arshlow" "Mmm, marshmallows"]
.R Push its reverse. ["Mmm, marshmallows" "Mm, arshlow" "Mm, arshlow" "Mmm, marshmallows" "swollamhsram ,mmM"]
y Transliterate. ["Mmm, marshmallows" "Mm, arshlow" "swllmhsr mm"]]
y Transliterate. ["swwllwmhsrwm mms"]
o Output. []