Wprowadzenie
Pewnego dnia po prostu odpoczywałeś w swoim biurze w CIA, kiedy nagle zobaczyłeś alert na swoim komputerze. Twoje programy właśnie przechwyciły setki zakodowanych wiadomości! Szybkie sprawdzenie ujawnia zasadę kodowania, ale potrzebujesz programu, aby szybko dekodować.
Wyzwanie
Otrzymasz listę ciągów znaków oddzielonych przecinkami. Każdy ciąg będzie zawierał:
- Część zakodowanej wiadomości
- Jest to część zakodowanej wiadomości, jeżeli jest nie w formie
a=b
. Zauważ, że jest to część wiadomości, jeśli tak jestab=c
. Dodaj ten ciąg do zakodowanej wiadomości.
- Jest to część zakodowanej wiadomości, jeżeli jest nie w formie
- Część schematu kodowania
- Będzie to miało postać
a=b
. Oznacza to, że wszystkie a w wiadomości muszą zostać zastąpione przez b. Zauważ, że może tak byća==
, co oznacza, że wszystkie a muszą zostać zastąpione przez =.
- Będzie to miało postać
Twój program musi następnie wygenerować komunikat, odkodowany przy użyciu znalezionego schematu.
Inne informacje: dane wejściowe będą zawierać tylko przecinki do oddzielania ciągów. Może zawierać inne znaki, takie jak! 1 # itp. Nie będzie zawierać wielkich liter. Fragmenty informacji dekodujących nie dekodują się nawzajem. Informacje dekodujące mają wpływ tylko na wiadomość. Dla każdej postaci zostanie podany tylko jeden zamiennik, np. Nie"io,"i=u","i=g"
Przykłady
Wejście:"ta","y=s","y","a=e","b=t","b"," ","j","j=1"
Wynik:test 1
Wejście:"z=p","zota","g=e","yugkb","y=t","u=o","k=s","li","fg","b=="
Wynik:potatoes=life
Wejście:"p","=","==n","ot","p=a","hiz","i=e","z=r"
Wynik:another
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach!
źródło
"massega","e=a","a=e"
I tym podobne?"io,"i=u","i=g"
Odpowiedzi:
Galaretka , 19 bajtów
Wypróbuj online!
W jaki sposób?
źródło
m
to dyadyczny atom, który bierze każdy prawy element lewego *. Tutaj na przykład['x','=','y','<space>','a','=','b']m2
dałoby się['x','y','a','b']
. (* chyba że prawo jest równe zero, jeśli zamiast tego dodaje odbicie).Python 3, 98
Ta
lambda
funkcja otrzymuje listę ciągów (dane wejściowe) i zwraca ciąg znaków (zdekodowany komunikat).Przykłady:
źródło
'=' == x[1:2]
będzie prawdziwex = 'a=bc'
, co nie jest częścią schematu kodowaniaHaskell, 85 bajtów
Stosowanie
Opis
f
tworzy tabelę odnośników.concat[c|c<-x,[]==f[c]]
wyodrębnia wiadomość.map(\v->maybe v id$lookup v$f x)
kończy wyszukiwanie.źródło
JavaScript (ES6), 87 bajtów
źródło
Retina,
84827774 bajtówPobiera na wejściu listę rozdzielaną przecinkami. Zwróć uwagę na końcowy znak nowej linii
Wypróbuj online!
Wyjaśnienie:
Najpierw przenosimy wszystkie wyrażenia formularza
.=.
na koniec ciągu i oddzielamy je od komunikatu podwójnym przecinkiem (,,
). Jest tak, że w następnym kroku możemy znaleźć wszystkie kodowania, sprawdzając, czy każdy znak przed znakiem,,
ma=.
później dopasowanie . Uzyskuje się to poprzezM!&`(.).*,,.*\1=.|.+,
znalezienie wszystkich takich dopasowań i umieszczenie ich na oddzielonej kanałem linii ciągów znaków. Następnie modyfikujemy każdy ciąg, aby zawierał tylko jeden niekodowany znak lub zakodowaną wersję znaku. Na koniec zamieniamy wszystkie wiersze i przecinki pustym ciągiem, dzięki czemu nasze dane wyjściowe są ładnie sformatowane.źródło
Partia, 188 bajtów
Objaśnienie: Pętle dwukrotnie przewija listę ciągów (wygodnie
for
lubi ciąg znaków w formacie CSV). Za pierwszym razem szuka ciągów, które nie zawierają=
jako drugiego znaku, i łączy je z wynikiem. Za drugim razem szuka ciągów zawierających=
jako drugi znak i dokonuje podstawienia. (jeszcze wygodniej, podstawienie jest już w formacie wsadowym).źródło
PHP, 116 bajtów
Wersja online
źródło
PHP,
8987 bajtówdwie wersje:
pobiera dane wejściowe z argumentów wiersza poleceń; biegać z
-nr
.strtr
(tłumaczenie, jeśli argument zawiera
=
, komunikat inny).strtr
.źródło
05AB1E , 31 bajtów
Wypróbuj online!
źródło