Wprowadzenie:
Mam wiele różnych szyfrów przechowywanych w dokumencie, który kiedyś skompilowałem jako dziecko, wybrałem kilka z tych, które moim zdaniem najlepiej nadawały się na wyzwania (niezbyt trywialne i niezbyt trudne) i przekształciłem je w wyzwania. Większość z nich wciąż znajduje się w piaskownicy i nie jestem jeszcze pewien, czy opublikuję je wszystkie, czy tylko kilka. Ale oto pierwszy z nich.
Szyfr komputerowy zaszyfruje dany tekst w „losowe” grupy znaków danego length
. Jeśli taka grupa zawiera cyfrę, użyje tej cyfry do zaindeksowania własnej grupy dla zaszyfrowanego znaku. Jeśli w grupie nie ma żadnej cyfry, oznacza to, że użyto pierwszego znaku.
Załóżmy na przykład, że chcemy zaszyfrować tekst this is a computer cipher
o podanej długości 5
. Jest to potencjalny wynik (uwaga: liczby są indeksowane 1 w poniższym przykładzie):
t h i s i s a c o m p u t e r c i p h e r (without spaces of course, but added as clarification)
qu5dt hprit k3iqb osyw2 jii2o m5uzs akiwb hwpc4 eoo3j muxer z4lpc 4lsuw 2tsmp eirkr r3rsi b5nvc vid2o dmh5p hrptj oeh2l 4ngrv (without spaces of course, but added as clarification)
Weźmy kilka grup za przykłady, aby wyjaśnić, jak odszyfrować grupę:
qu5dt
: Ta grupa zawiera cyfrę5
, więc (1-indeksowane) 5 charakter tej grupy jest znak używany dla tekstu rozszyfrować:t
.hprit
: Ta grupa nie zawiera cyfry, więc pierwszy znak tej grupy jest używany w sposób dorozumiany do tekstu rozszyfrować:h
.osyw2
: Te grupy zawiera cyfrę2
, więc (1-indeksowane) 2. charakter tej grupy jest znak używany dla tekstu rozszyfrować:s
.
Wyzwanie:
Biorąc pod uwagę liczbę całkowitą length
i ciąg word_to_encipher
, wypisz losowy zaszyfrowany ciąg, jak opisano powyżej.
Musisz tylko wyszyfrować dane dane length
i word_to_encipher
, więc nie musisz również tworzyć programu / funkcji odszyfrowującej. Mogę jednak podjąć wyzwanie w ramach części 2 w celu odszyfrowania w przyszłości.
Zasady konkursu:
- Możesz założyć, że
length
będzie w zakresie[3,9]
. - Możesz założyć, że
word_to_encipher
będzie zawierać tylko litery. - Możesz użyć zarówno wielkich, jak i wielkich liter (podaj, którego użyłeś w odpowiedzi).
- Twoje dane wyjściowe, każda grupa i pozycje cyfr w grupie (jeśli są obecne) powinny być jednakowo losowe . Tak więc wszystkie losowe litery alfabetu mają taką samą szansę wystąpienia; pozycja zaszyfrowanej litery w każdej grupie ma taką samą szansę wystąpienia; a pozycja cyfry ma taką samą szansę wystąpienia (z wyjątkiem sytuacji, gdy jest to pierwszy znak i nie ma żadnej cyfry; i oczywiście nie może znajdować się w tej samej pozycji co zaszyfrowany znak).
- Możesz także używać cyfr 0-indeksowanych zamiast 1-indeksowanych. Podaj, którego z dwóch użyłeś w swojej odpowiedzi.
- Cyfra
1
(lub0
indeksowana 0) nigdy nie będzie obecna na wyjściu. Dlategob1ndh
nie jest prawidłową grupą do szyfrowania znaku „b”. Jednakb4tbw
jest ważne, gdzie4
enciphersb
na 4. (1 indeksowane) pozycji, a pozostałe znakib
,t
,w
są przypadkowe (który zawiera przypadkowo takżeb
). Inne możliwe ważnych gruplength
5 do encipher znak „B”:abcd2
,ab2de
,babbk
,hue5b
, itd.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły z domyślnymi regułami We / Wy , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i typem zwracanych, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu (tj. TIO ).
- Zalecane jest również dodanie wyjaśnienia do odpowiedzi.
Przypadki testowe:
Input:
Length: 5
Word to encipher: thisisacomputercipher
Possible output:
qu5dthpritk3iqbosyw2jii2om5uzsakiwbhwpc4eoo3jmuxerz4lpc4lsuw2tsmpeirkrr3rsib5nvcvid2odmh5phrptjoeh2l4ngrv
Input:
Length: 8
Word to encipher: test
Possible output:
ewetng4o6smptebyo6ontsrbtxten3qk
Input:
Length: 3
Word to encipher: three
Possible output:
tomv3h2rvege3le
abcd2
, ab2de
, babbk
wszystkie są takie same? Czy jest również b1akk
ważny?
b1akk
odmowę. Zmodyfikuje to w opisie wyzwania, aby wyjaśnić. Jeśli pierwszy znak jest zaszyfrowany, cyfra nie powinna być obecna.
"a??"
ma 676 możliwych wyników, ale "1a?"
, "?a1"
, "2?a"
, "?2a"
, ma only104 wyników. Tak więc, jeśli próbuję wybrać jeden wynik z tych wszystkich 780 wyników, rozkład „pozycji zaszyfrowanej litery” wynosi 13: 1: 1, a nie 1: 1: 1. I uznałbym to za działanie „równomiernie losowe”.