Jest to o wiele bardziej zaawansowane niż Jak losowo wybierać litery w słowie i Cambridge Transposition z powodu reguły o tym, które litery mogą być zamieniane z którymi. Proste wyrażenie regularne nie wystarczy tutaj.
Powszechnie wiadomo, że tekst można nadal czytać, podczas gdy wnętrze jego słów jest zakodowane, o ile ich pierwsza i ostatnia litera oraz ich ogólny zarys pozostają niezmienne. Biorąc pod uwagę tekst Ascii + Newline do wydrukowania, zmieszaj każde słowo zgodnie z następującymi zasadami:
Mieszanie musi być (pseudo) losowe.
Słowo to ciąg znaków łacińskich od A do Z.
Tylko początkowe litery będą zawsze wielkie.
Pierwsza i ostatnia litera muszą pozostać nietknięte.
Podczas szyfrowania tylko litery z jednej z następujących grup mogą wymieniać się miejscami:
acemnorsuvwxz
bdfhkl
gpqy
it
j
(zostaje na miejscu)
Przykład
Srcmable wyszedł, a psrrnveieg ich oeiltnus
Powszechnie wiadomo, że txet można nadal czytać, podczas gdy rozszyfrowywane są jego produkty, o ile ich fisrt i ostatnie litery oraz ich ovaerll ontliues raemin nie są w stanie. Biorąc pod uwagę patnirlbe Acsii + Nwnliee txet, samrclbe ecah słowo anoccdirg do tych relus:
Smncrbliag musi być (pusedo) rondam.
Wrod jest sekwencją łacińskich chrerataków, A thurogh Z.
Tylko pierwsze inicjały będą dostępne.
Lettres fisrt i lsat muszą pozostać uctoenhud.
Kiedy sarnclbimg, tylko litery z jednym z guwps fwllnoiog mogą ecxhange tablice:
aneusvrowxmcz
bhkfdl
gqpy
it
j
(zostaje w pokoju)Emxaple
t
ma być krótszy niżh
choć wiele osób tego nie pisze.t
z grupy 2? A możet
w grupie 4i
?printable
/patnirlbe
nie jest całkiem czytelny. Myślę, że winą jesti
/t
swap. Hmm ...paintrlbe
Nie, to też nie pomogło. Zatem prawdopodobnie jest topr
/pa
swap. Zarys utrzymuje, ale myślę, że czytam „Pr” i „PA” jako semantycznie (?) 1 list.prtnialbe
O tak. To zrobiło to. Nie jestem jednak pewien, czy mogę zaoferować poprawkę do algorytmu.Odpowiedzi:
Galaretka ,
8074 bajtów-2 bajty, przechodząc z
czar + vex + mow + sun
doczar + vexes + unmown
(powtarzanee
sin
nie stanowią problemu)-1 bajt przy użyciu
Tị
zamiastȦÐf
-1 bajtu,
Œle€Øa
zamiasti@€ØB>⁵
-2 bajtów przez nieco zmienioną konfigurację układu
Pełny program pobierający listę znaków (lub ciąg sformatowany w języku Python), który drukuje wynik mieszania.
Wypróbuj online!
Wydaje się, że tutaj istnieje ogromna trudność dla Jelly (albo to, albo nie trafiłem sztuczki, o której wiadomo, że się zdarza!) Na pewno zostaną pokonane przez języki z lepszą manipulacją ciągami, takie jak
Retina(brak losowej funkcjonalności) lub 05ab1e .W jaki sposób?
źródło
czar + vex + mow + sun
‽acemnorsuvwxz
. W pewnym momencie też napiszę skomentowany kod.PHP, 278 bajtów
Wypróbuj online!
Rozszerzony
Funkcje
array_combine
filtr_tablicowy
tablice_kluczy
ksort
preg_replace_callback
człapać
źródło
Pyth , 79 bajtów
gdzie
❤
jest U + 0018.Wypróbuj online!
Próba
Dobrze wiadomo, że tekst można jeszcze usunąć, podczas gdy jego nazwy są seraclbmd, o ile ich pierwsza i ostatnia litera plus ich oaervll ontliues rmeain conntsat. Biorąc pod uwagę tekst, poświęcić każdego wrod acrncdiog, aby zobaczyć relus:
Scamrlbing musi być (puesdo) rnadom.
Słowo jest suqencee łacińskich chraectars, A thuorgh Z.
Tylko iaitinl lettres będzie zawsze uppaersce.
Pierwsza i ostatnia litera pozostają nierozłączone.
Kiedy srancblimg, tylko litery wiihtn jednego z guorpsów follnwiog mogą enxhcage plecas:
amsuvrcnoxewz
bhfkdl
gpqy
it
j
(zostaje na miejscu)źródło
\pL
zamiast[A-Za-z]
?\pL
?\w
wystarczy?JavaScript 176 bajtów
Metoda:
RegExp iteruje po środku każdego słowa (
/\B(\w+)\B/g
), używając 1. zastępowania fn.1st replace fn iteruje tablicę RegExp dla każdej litery-grupy (
/[bdfkhl/g, /[gqpy]/g, etc..
).Każda iteracja tworzy tablicę temp znaków w centrum słów pojawiających się w bieżącej grupie liter.
Każda iteracja używa następnie RegExp bieżącej grupy liter do iteracji po całym centrum słów, używając drugiej zamiany fn.
2. zastąp fn losowo splata tablicę temp, usuwając losowy znak i zwracając go.
Próbny:
Uruchom go w JSFiddle: https://jsfiddle.net/CookieJon/bnpznb7r/
źródło
\pL(\pL+)\pL
raczej niż\B(\w+)\B
wykluczać cyfry i podkreślenia.b=>[...].map(...)&&b
zapisuje kolejny bajt. Nie jestem też pewien, czy twojei
jest konieczne.t.replace(/[A-Za-z]([a-z]+)(?=[a-z])/g,(w,b)=>...w[0]+b...)
.C,
453, 356369 bajtówUngolf z komentarzami
źródło
Python 3.6,
349340 bajtówWcięte za pomocą zakładek. Funkcja nosi nazwę
A
. Nie używa brutalnej siły, czas działania jest deterministyczny, jak poprosił OP.źródło
Mathematica 232 bajty
Podstawową ideą jest permutacja podzbiorów odpowiadających 4 odrębnym grupom znaków. Prawdopodobnie pole do poprawy.
źródło
C,
306282 bajtówWypróbuj online
Nie golfowany:
źródło
JavaScript (ES6),
380327311294 bajtów(
298282265 bajtów z wyłączeniem reguł)Dzięki @Shaggy za przydatne wskazówki!
Funkcja f przyjmuje ciąg dowolnego rodzaju (pojedyncze słowo, wiele słów, wiele słów ze znakami - co interpretuje jako podział na słowa), a
tablicaciąg „reguł” o dowolnej długości oddzielonych przecinkami.Taki zestaw reguł byłby w przypadku twojego pytania
["aneusvrowxmcz", "bhkfdl", "gqpy", "it"]
"aneusvrowxmcz,bhkfdl,gqpy,it"
Niektóre litery nie mieszają się, nawet jeśli mogłyby, ponieważ w swoim pytaniu stwierdziłeś, że litery „mogą wymieniać spacje”. Jeśli źle go zinterpretowałem, mogę zmienić kod, aby zawsze mieszał litery zgodne z regułami.
Wiem, że to ogromna ilość bajtów i nie będzie w stanie konkurować z językami golfa, ale i tak chciałem spróbować, mam nadzieję, że ci się spodoba :)
Kod nieglikalny czytelny dla człowieka:
źródło
var
s elet
s. 02) O ile nie jest to funkcja rekurencyjna, nie trzeba dołączać deklaracji zmiennej (f=
) do liczby bajtów. 03) Użyj curry, gdy funkcja ma 2 parametry (b=>d=>
zamiast(b,d)=>
) i wywołaj swoją funkcję za pomocąf(b)(d)
. 04) Maszi
flagę, więc nie musisz uwzględniaćA-Z
w wyrażeniu regularnym. 05) Możesz użyćindexOf
lubsearch
na łańcuchu, bez dzielenia go na tablicę.Clojure,
326322324 bajtyAktualizacja 1: zastąpiona
(map(fn[[k v]]...)...)
przez(for[[k v]...]...)
Aktualizacja 2: naprawiono wyrażenia regularne, używając
\pL
zamiast\w
itp.Nie mogę się doczekać, aby zobaczyć coś krótszego. Wcześniejsza wersja bez golfa z kilkoma przykładowymi uruchomieniami:
źródło
\pL+
i\PL+
zamiast\w+
i\W+
wykluczyć cyfry i podkreślenia.Perl 6 ,
241195 bajtówZawiera +1 bajt dla
-p
przełącznika wiersza poleceń.Nie golfowany:
źródło
(\pL)(\pL+)(\pL)
raczej niż(\w)(\w+)(\w)
wykluczać cyfry i podkreślenia.\pL
zawiera wiele znaków spoza dozwolonego zakresu liter łacińskich AZ. Zaktualizowałem swój kod, aby dokładniej odzwierciedlał wymagania.\pL
jest napisane<:L>
w Perlu 6.C #,
438394380374 bajtówZaoszczędź 10 bajtów dzięki @ MartinEnder ♦.
Irytujące,
CaptureCollection
nie wdrażaIEnumerable<T>
i dlatego.Cast<Capture>()
jest potrzebny. Mam nadzieję, że mogę połączyć zapytanie Linq iforeach
pętlę.Jestem pewien, że jest wiele rzeczy do gry w golfa, ale zajęło mi to wystarczająco dużo czasu, aby uruchomić to ...
Wypróbuj online!
Sformatowana / Pełna wersja:
źródło