Problem:
Dwóch tajnych agentów wroga opracowało wspaniałą (dla ciebie) metodę komunikacji!
Oto jak działa proces szyfrowania:
1) Weź ekwiwalenty ascii każdej litery. (Nie są wysyłane spacje, liczby ani znaki interpunkcyjne)
2) Dla każdej litery w wiadomości, jej ekwiwalent ascii i litera po niej (jeśli istnieje, jeśli nie, należy ją uznać za 0), są mnożone (ten produkt jest przechowywany w tablicy / liście) i zsumowane (liczba ta jest również zapisana na innej liście).
3) Dwie listy (sum i produktów) są łączone (lista sum, a następnie lista wielokrotności, w tej samej tablicy) i przesyłane.
Musisz napisać najmniejszy program, który może odwrócić ten proces i odszyfrować wiadomości wysłane w tym formacie!
Przykładowe pary wejść i wyjść:
[173, 209, 216, 219, 198, 198, 225, 222, 208, 100, 7272, 10908, 11664, 11988, 9657, 9657, 12654, 12312, 10800, 0] -> “HelloWorld”
[131, 133, 164, 195, 197, 99, 4290, 4422, 6499, 9506, 9702, 0] -> “ABCabc”
To jest golf golfowy , więc wygrywa najmniejsze rozwiązanie w bajtach.
Komunikaty o błędach są dozwolone.
Twój program może otrzymać albo listę / tablicę 1-wymiarową, albo ciąg oddzielony przecinkami, jeśli określisz to w swoim zgłoszeniu. Domyślnie jest to tablica / lista.
źródło
Odpowiedzi:
Łuska ,
76 bajtówWypróbuj online! Zgodnie z dokumentacją prowadzenie
m
nie powinno być potrzebne, ale wydaje się, że obecnie występuje błąd.Edycja: -1 bajt dzięki Zgarb!
Wyjaśnienie:
źródło
`-
może być≠
. Zachowaniec
rzeczywiście wygląda jak błąd.pieprzenie mózgu , 66 bajtów
Dane wejściowe to zaszyfrowany ciąg. Przyjmuje komórki o nieskończonej wielkości i 0 na EOF.
Jak to działa:
źródło
Haskell ,
4535 bajtówWypróbuj online!
Wyjaśnienie
fst.span(<245)
pobiera wszystkie liczby z początku listy, które są mniejsze niż 245. Są to tylko liczby z części sumowania, ponieważ największym możliwym sumowaniem jestz + z = 122 + 122 = 244
, a najmniejszym możliwym produktemA * A = 65 * 65 = 4225
.scanr1(-)
pobiera ostatnią wartość z listy i używa jej jako akumulatora początkowego. Następnie od tyłu do przodu każdy element listy jest odejmowany przez bieżący akumulator, a wynik jest wykorzystywany jako następny akumulator i dodawany do listy.map toEnum
zastępuje każdą liczbę na liście odpowiednim znakiem, aby odtworzyć ciąg.źródło
Galaretka , 9 bajtów
Wypróbuj online! lub Sprawdź oba przypadki testowe.
Alternatywny.
Wyjaśnienie
źródło
Python 2 , 72 bajty
Wypróbuj online!
źródło
Python 2 , 92 bajty
Wypróbuj online!
źródło
Galaretka , 11 bajtów
Monadyczny link pobierający listę liczb całkowitych i zwracający listę znaków.
Wypróbuj online!
W jaki sposób?
źródło
Pyt , 60 bajtów
Pobiera listę liczb całkowitych i zwraca ciąg znaków.
Wyjaśnienie:
Wypróbuj online!
źródło
JavaScript (ES6), 80 bajtów
Pokaż fragment kodu
źródło
Skrypt VB -
7471 bajtów(Udało mi się zmniejszyć z 74 do 71, używając While..Wend zamiast Do..Loop)
Dane wejściowe znajdują się w tablicy a (), dane wyjściowe są w ciągu d
Wyjaśnienie
Przetestowałem to w pliku vbscript z powyższym kodem opakowanym jako funkcja:
źródło
Czysty ,
96817877 bajtówzero
jest znakiem zerowym.Mógłbym zapisać kolejny bajt, gdyby Clean nie był tak wybredny w odniesieniu do dosłownych zer w pliku źródłowym.
Wypróbuj online!
źródło
f=
.f=
jest najkrótszym zadaniem, więc minimalne wywołanie i tak dodaje dwa.Perl 5 , 39 + 2 (
-ap
) = 41 bajtówWypróbuj online!
źródło
C (gcc) ,
9089 bajtóws+=(i%2?-1:1)*...
<~>s-=~(i%2*-2)
.Wypróbuj online!
źródło
Standardowy ML (MLton) ,
858482 bajtówWypróbuj online!
Nie golfowany:
Wypróbuj online!
źródło
Perl 6 ,
43 3935 bajtówSprawdź to
Przetestuj to (robi to samo co powyżej)
Sprawdź to
Sprawdź to
Wyjaśnienie:
źródło
05AB1E , 9 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
J
oin.ç
nie zmienia jednak domyślnie listy znaków w ciąg znaków. Jeśli dobrze rozumiem problem, program musi wypisać ciąg znaków, a nie listę znaków.Japt, 12 bajtów
Musi być krótszy sposób na uzyskanie pierwszej połowy tablicy ...
Spróbuj
źródło
Python 2 , 70 bajtów
Wypróbuj online!
źródło