W tym zadaniu napiszesz program / funkcję, która pobiera znormalizowany program Malbolge i wyświetla wynikowy program Malbolge . (To tajne narzędzie, z którego korzystają wszyscy programiści Malbolge!)
Wejście
Struktura danych, która (jakoś) reprezentuje znormalizowany program Malbolge.
Wynik
Struktura danych reprezentująca wynikowy program Malbolge.
Przykłady
jpoo*pjoooop*ojoopoo*ojoooooppjoivvvo/i<ivivi<vvvvvvvvvvvvvoji
(=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/.~P<<:(8&66#"!~}|{zyxwvugJ%
jjjj*<jjjj*<v
('&%#^"!~}{XE
jjjjjjjjjjjjjjjjjjjjjjj*<jjjjjjjjjjjjjjjjjjjjjjjj*<v
('&%$#"!~}|{zyxwvutsrqpnKmlkjihgfedcba`_^]\[ZYXWVT1|
Jak konwertować
Powtórz znormalizowany program Malbolge, wykonując następujące kroki dla każdego znaku:
Zamień znaki w ciągu
*jpovi</
na odpowiedni znak w'(>DQbcu
. (Oznacza to, że mapa*
do'
,j
do(
, i tak dalej).Następnie odejmij bieżącą pozycję licznika programu (tj. Liczbę znaków przed bieżącą) od kodu ASCII znaku.
Jeśli wynikowy kod ASCII jest mniejszy niż 33, zwiększ go o 94 i powtarzaj, aż będzie to co najmniej 33.
Dołącz wynikowy znak do wyniku.
Zasady
- To jest konkurs golfa kodowego ; najkrótsza odpowiedź wygrywa.
- Poproszę o brak standardowych luk .
- Domyślne metody We / Wy są dozwolone.
- Dane wejściowe będą zawierać tylko znaki
*jpovi</
.
*jpovi</
”?a: if ascii_code(temporary Malbolge representation) < 33: char := char + 94; goto a;
Odpowiedzi:
Galaretka ,
2922 bajtówWypróbuj online!
Monadyczny link przyjmujący łańcuch Jelly jako argument i zwracający łańcuch Jelly.
Dzięki @JonathanAllan za uratowanie 2 bajtów!
Wyjaśnienie
źródło
..._J‘ịØṖḊ¤
oszczędza jeden bajt.Oị“%þV DCµ2® ‘_JịØṖḊ¤
Python 3 , 82 bajty
Wypróbuj online!
Dzięki @Joel za zastąpienie brzydkich znaków niedrukowalnych w bajtowaniu znakami drukowalnymi.
Szukam łańcucha modów do zastąpienia
"*jpovi<".find(c)
, ale nie sądzę, aby istniał taki, który jest krótszy, a niewyczerpane poszukiwanie siły brutalnej niczego dotąd nie znalazło.82 bajty
Wypróbuj online!
źródło
b"de{#0ABT"["*jpovi<".find(c)]
jeśli masz do tego program.x%84%15%7
na prawej połowie mapowania, ale myślę, że mogę recyklingu jakiś kod, który napisałem na kolejne wyzwanie do poszukiwania w tym*
i/
warunki.%
i*
(//
w Pythonie 3 prawdopodobnie nie warto). W rzeczywistości nic nie pasowało do pierwszych 6 z 7 wartości. Miałem nadzieję, że to zadziała, ponieważ przybliżona ocena entropii mówi, że prawdopodobnie jest wystarczająco dużo wyrażeń kończących się na% 7`, ale jest blisko. I może te łańcuchy dają wyniki dalekie od równomiernie rozłożonych, zwłaszcza, że gdy dwa wejścia zapadną się do tej samej wartości, żadne dalsze operacje nie mogą ich rozdzielić. Rzeczy, których próbuję, są nadal zbyt głupie, aby szukać większego wyrażenia, ale jeśli masz jakieś pomysły, skorzystaj z nich.map(ord, "*jpovi<")
. Jeśli dane wyjściowe nie zachowują porządku dla większości danych wejściowych (tj.f(m)>=f(n)
Jeślim>=n
), niektóre starannie spreparowane stałe są%
i*
prawdopodobnie są potrzebne, a przeszukiwanie metodą brutalnej siły raczej nie przyniesie pozytywnego wyniku.Malbolge Unshackled (wariant rotacji 20-trytów), 7,784e6 bajtów
Rozmiar tej odpowiedzi przekracza maksymalny rozmiar programu do wysłania (eh), więc kod znajduje się w moim repozytorium GitHub .
Jak to uruchomić?
Może to być trudna część, ponieważ naiwny tłumacz Haskell będzie wieków na wieki, aby to uruchomić. TIO ma przyzwoitego interpretera Malbogle Unshackled, ale niestety nie będę mógł go używać (ograniczenia).
Najlepszy, jaki udało mi się znaleźć, to stały wariant szerokości rotacji 20-trytów, który działa bardzo dobrze, przekształcając 0,5 znaków na sekundę .
Aby nieco przyspieszyć tłumacza, usunąłem wszystkie kontrole z nieskrępowanego tłumacza Matthiasa Luttera.
Moja zmodyfikowana wersja może działać o około 6,3% szybciej.
To działa!
źródło
Python 3 ,
8483 bajtyWypróbuj online!
Jest to głównie problem matematyczny dotyczący uproszczenia obliczeń, a także trochę gry w golfa po wykonaniu matematyki. Wersja bez golfa pokazana jest poniżej.
Wersja bez golfisty, nierekurencyjna
Wypróbuj online!
źródło
JavaScript (Node.js) , 69 bajtów
Wypróbuj online!
W jaki sposób?
źródło
Perl 6 ,
65 5553 bajtówWypróbuj online!
Wykorzystuje sztuczkę mod 11 z odpowiedzi Arnauda
źródło
05AB1E ,
32312322 bajtów-8 bajty tworząc port NickKennedy „s Jelly odpowiedzi , więc upewnij się, aby go upvote !!
-1 bajt dzięki @Grimy.
Wyjście w postaci listy znaków.
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (sekcja Jak kompresować duże liczby całkowite? I Jak kompresować listy liczb całkowitych? ), Aby zrozumieć, dlaczego
•4¡ˆ¶ü]₁η₃•
jest82767635194143615015
i•4¡ˆ¶ü]₁η₃•₃в
jest[1,36,30,85,0,67,66,8,49,7,0]
.źródło
•1ÃQWý₂Ýδ9•86в
->•4¡ˆ¶ü]₁η₃•₃в
Perl 5 (
-p
),53, 51 bajtówoszczędzając 2 bajty, używając
de{#0ABT
zamiast'(>DQbcu
, aby61
nie było już potrzebneTIO
pierwsza odpowiedź brzmiała
TIO
źródło
Japt ,
2423 bajtyRozwiązanie Port of Nick's Jelly
Spróbuj
źródło
Retina 0.8.2 , 50 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Dokonaj transliteracji zgodnie z opisem w pytaniu.
p
(opisane poniżej) io
mają specjalne znaczenie doT
wymazywania, więc należy je zacytować.Podaj każdy znak w osobnym wierszu, poprzedzony liczbą spacji zgodnie z jego indeksem, tj. Tym, jaki byłby licznik programu.
Wielokrotnie cyklicznie zmniejszaj ostatni znak w każdym wierszu, usuwając za każdym razem poprzednią spację, aż wszystkie spacje zostaną usunięte. Te
p
stojaki dla druku ASCII czyli-~
jednak chcemy,!
aby na mapie, aby~
tak, że najpierw jest transliteracji, a następnie_
powoduje, że przestrzeń w meczu.¶
który ma zostać usunięty, a pozostałe znaki uzyskać transliteracji jeden kod znaku naraz.Połącz ponownie wszystkie postacie.
źródło
Węgiel , 23 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. Port odpowiedzi JavaScript na @ Arnauld. Wyjaśnienie:
źródło
C # (interaktywny kompilator Visual C #) , 62 bajty
Wypróbuj online!
Port odpowiedzi @Arnaulds JavaScript. Jeden, jeśli rzadkie przypadki, w których C # jest krótszy!
źródło
Haskell , 135 bajtów
Wypróbuj online!
źródło