Ta mała świnka poszła na rynek, ta mała świnka napisała jakiś kod ...
Ach, czekaj, nie mówimy o tym bekonie, mówimy o Sir Francisie Baconie! W szczególności szyfr Bacon opracowany pod koniec XVI wieku jako metoda ukrywania wiadomości w innej wiadomości, metoda steganografii .
Szyfr działa poprzez ukrywanie wiadomości w prezentacji tekstu, a nie jego treści. Po pierwsze, litery twojej wiadomości są kodowane na binarne (od 0 do 25) w następujący sposób:
Uwaga: Proszę użyć następującego kodowania w kodzie i nie martw się liczbami, spacjami lub innymi symbolami na wejściu, chociaż mogę opracować pewną premię dla tych, którzy zawierają te znaki w swoim kodowaniu. Jeśli uwzględnisz inne symbole, litery muszą nadal zajmować spacje 0–25 w kodowaniu.
Letter Encoding
A AAAAA
B AAAAB
C AAABA
D AAABB
E AABAA
F AABAB
G AABBA
H AABBB
I ABAAA
J ABAAB
K ABABA
L ABABB
M ABBAA
N ABBAB
O ABBBA
P ABBBB
Q BAAAA
R BAAAB
S BAABA
T BAABB
U BABAA
V BABAB
W BABBA
X BABBB
Y BBAAA
Z BBAAB
Po zakodowaniu wszystkich liter wiadomości w powyższych sekcjach A
s i B
s, musisz teraz wybrać dwa kroje pisma dla swojego kodu. W tym przykładzie użyję normalnego tekstu dla kroju pisma A
i pogrubionego tekstu dla kroju pisma B
.
Więc wiadomość
HELLOWORLD
jest zakodowany do
AABBB AABAA ABABB ABABB ABBBA BABBA ABBBA BAAAB ABABB AAABB
A teraz ukrywamy ten plik binarny tekstem przewoźnika .
Szybki brązowy lis przeskakuje nad leniwymi psami, grając na polach, na których pilnują pasterze.
Jest w porządku, jeśli wiadomość operatora jest dłuższa niż faktycznie zakodowana wiadomość, chociaż nie może być krótsza. Teraz zamieniamy tekst operatora na pogrubiony w zależności od tego, gdzieB
s są w zakodowanej wiadomości,
P e qu IC K bro w n fo x j u tt s ove r t h e l az y wykonać g s , gam b O L i ng wt jego obszarach, w których pasterze czuwa.
Który bez Markdown brzmi jak
Th**e** **qu**ic**k** bro**w**n **fo**x **j**u**mp**s **ove**r **t**h**e** **l**az**y**
**do**g**s**, gam**b**o**l**i**ng** in t**he** fields where the shepherds keeps watch.
Zauważ, że nie użyłem interpunkcji w komunikacie przewoźnika do zakodowania wiadomości, ale to, czy interpunkcja jest zakodowana, czy nie, zależy od Ciebie /.
Zasady
Twoje dane wejściowe będą zawierać wiadomość, którą chcesz zakodować, i wiadomość operatora. Jeśli komunikat operatora jest za krótki, zwróć komunikat o błędzie.
Musisz wybrać dwa kroje do kodowania
A
iB
, jak wielkie litery, małe litery, kursywa , pogrubienie , Bold ,przekreślenie,in code format
i tak dalej. Musisz użyć formy Mark Exchange stosu do wymiany tych krojów pisma, tjUPPERCASE, lowercase, *italic*, **bold**, ***bold italic***, <s>strikethrough</s>, `in code format`
Twój wynik musi być zakodowanym teraz komunikatem operatora, albo pokazanym za pomocą Markdown, albo pokazanym bez, jak pokazano w powyższym przykładzie.
Musisz tylko wykonać algorytm kodowania. Wszelkie algorytmy dekodowania, które chcesz podać, są mile widziane, ale w momencie pisania nie pomogą ani nie utrudniają twojego wyniku.
Twój kod musi być programem lub funkcją.
To jest kod golfowy, więc wygrywa najmniejsza liczba bajtów.
Jak zawsze, jeśli problem jest niejasny, daj mi znać. Powodzenia i dobrej gry w golfa!
źródło
Odpowiedzi:
Pyth, 47 bajtów
Wypróbuj tutaj .
Wyjaśnienie:
źródło
Python 3,
216211231225207 bajtówTo rozwiązanie wykorzystuje normalny tekst i kursywę w stylu Markdown dla swoich dwóch krojów pisma. I koduje wszystko w komunikacie przewoźnika oprócz spacji.Edycja: Musiałem naprawić kod, aby wynik był drukowany poprawnie i dodał przykłady poniżej kodu.
Edycja: Edytowałem kod w celu uzyskania wcześniejszego gorszego rozwiązania wielkich / małych liter, z powodu problemów z prawidłowym drukowaniem kursywy.
Przykłady
Nie golfowany:
źródło
C, 124 bajty
Wymaga to, aby argumenty były w kodowaniu zgodnym z ASCII (np. ISO-8859.1 lub UTF-8). Modyfikuje on przewoźnika w miejscu i zwraca 0 w przypadku sukcesu lub w przeciwnym razie niezerowy. Kodowanie to
A
== wielkie litery iB
== wielkie litery. Niewykorzystane litery operatora są ustawione na górną.Wyjaśnienie
W tym program testowy. Przekaż litery do zakodowania jako pierwszy argument, a łańcuch nośny jako drugi.
Wyjście testowe:
źródło