Jestem pewien, że większość, jeśli nie wszyscy, spotkała się z tym w pewnym momencie:
Aoccdrnig do rscheearch w Cmabrigde Uinervtisy, to nie jest mttaer w waht orer lte w wrod, olny iprmoetnt tihng to taht the frist and lsat be at the rghit pclae. Rset może być toat msem i możesz siedzieć na nim wouthit porbelm. Tihs to bcuseae, huamn mnid deos nie raed ervey lteter by istlef, ale wrod jak wlohe.
Utwórz program, który wprowadza dowolną ilość tekstu. Do celów testowych użyj nieszyfrowanej wersji powyższego tekstu, znalezionej poniżej.
Program musi następnie losowo transponować litery każdego słowa o długości 4 lub więcej liter, z wyjątkiem pierwszej i ostatniej litery każdego słowa.
Wszystkie pozostałe formatowanie musi pozostać takie samo (wielkie litery i znaki interpunkcyjne itp.).
Testowanie tekstu:
Według naukowca z Cambridge University nie ma znaczenia, w jakiej kolejności są litery w słowie, jedyną ważną rzeczą jest to, że pierwsza i ostatnia litera są na właściwym miejscu. Reszta może być totalnym bałaganem i nadal możesz go przeczytać bez problemu. Wynika to z faktu, że ludzki umysł nie czyta każdej litery samodzielnie, ale słowo jako całość.
Jak zwykle jest to golf golfowy. Najkrótszy kod wygrywa.
rscheearch
przykładowym tekście.don't
pozostać na tej samej pozycji? Specyfikacja mówi,All other formatting must remain the same (capitalization and punctuation, etc.).
ale nie jestem pewien, jak to tutaj działa ...Odpowiedzi:
Ruby -
5048 znaków plus-p
parametr wiersza poleceń.Dzięki @primo za -2 znaki.
Test
źródło
\K
twierdzenia o zerowej szerokości? Ponadto, najbardziej wewnętrzne grupowanie jest niepotrzebne, używając$&
zamiast$1
.$&
wskazówkę :)codegolf
skrypcie[*$&.chars]
=>$&.chars
, oszczędzając 3 bajty.Python, 118
Python jest strasznie niezręczny dla takich rzeczy!
Premia
Próbowałem kilku innych rzeczy, które moim zdaniem byłyby sprytne, ale musisz zaimportować różne rzeczy, a wiele metod nie ma wartości zwracanych, ale trzeba je wywoływać osobno jako własną instrukcję. Najgorsze jest to, że musisz przekonwertować ciąg na listę, a następnie ponownie
join
umieścić go w łańcuchu.W każdym razie oto kilka rzeczy, które próbowałem:
Regex! Permutacje! Nie można losowo podzielić partycji listy ishuffle
zwracaNone
, tak!źródło
PHP 84 bajty
Używanie wyrażenia regularnego do przechwytywania słów o długości co najmniej
43 litery † i tasowanie wewnętrznych znaków. Ten kod obsługuje również dane wejściowe z wieloma wierszami.Jeśli wymagany jest tylko jeden wiersz danych wejściowych (jak w przykładzie), można go zmniejszyć do 68 bajtów
† Na środku jest tylko jedna litera, więc nie ma znaczenia, czy ją przetasujesz.
źródło
J (48)
Wyjaśnienie:
1!:1[3
: czytaj wszystkie dane wejściowe ze standardowego wejściarxapply
: zastosuj daną funkcję do części danych wejściowych, które pasują do wyrażenia regularnego({~?~@#)
: ciąg czasownika, który przetasowuje dane wejściowe:#
liczy długość, stosuje się to do obu stron,?
podając N odrębnych liczb od 0 do N,{
a następnie wybiera elementy przy tych indeksach z tablicy wejściowej.('\w(\w+)\w';,1)
: użyj tego wyrażenia regularnego, ale używaj tylko wartości z pierwszej grupy[1!:2&4
: wyślij niesformatowane wyjście na standardowe wyjście''[
: pomija sformatowane dane wyjściowe. Jest to konieczne, ponieważ w przeciwnym razie wyświetla tylko tę część wyjścia, która pasuje do linii terminala, a następnie kończy się na...
.źródło
Siatkówka , 10 bajtów
Wypróbuj online!
Hej, to stare wyzwanie zostało stworzone dla nowej Retiny!
Wyjaśnienie
\B\w+\B
dopasowuje grupy liter między granicami, to znaczy grupy liter, które nie rozpoczynają ani nie kończą słowa. Ponieważ wyrażenia regularne są zachłanne, dopasuje to wszystkie litery słowa oprócz pierwszej i ostatniej.V
jest etapem „odwrotnym”, który odwraca kolejność znaków w każdym dopasowaniu wyrażenia regularnego. Dzięki?
opcji to szyfruje je zamiast.źródło
APL 107
Niestety mój interpreter APL nie obsługuje wyrażeń regularnych, więc oto wersja domowa, w której tekst do zaszyfrowania jest przechowywany w zmiennej t:
Zasadniczo kod dzieli tekst na słowa oparte tylko na literach alfabetu, a następnie na litery między pierwszą a ostatnią literą tych słów. Litery te są następnie mieszane i cały ciąg znaków jest składany ponownie.
źródło
APL,
5849Wierzę, że to działa w IBM APL2 (nie mam IBM APL)
Jeśli nie, to w aplikacji Dyalog APL dodaj do przodu:
co dodaje 6 znaków
Zakłada się, że jedynymi znakami innymi niż słowa są spacja, przecinek i kropka.
źródło
VBA, 351
373/409Metoda alternatywna (większa):
Obie te metody zmieniają wartość zmiennej przekazywanej do
Sub
. to znaczywyświetli coś takiego:
Ponadto losowo interpunkcja między słowami jest losowa, więc może nie pasować do specyfikacji w 100%.
źródło
APL NARS 172 znaki
13 + 17 + 18 + 44 + 41 + 8 + 17 + 5 + 9 = 172; Ta funkcja g () ma dane wejściowe w postaci łańcucha; ma dane wyjściowe jako ciąg. Dodałem polecenie wejściowe, ponieważ nie wiem, jak wstawić \ w cudzysłowie. Skomentował
wynik
źródło
PHP 7.1, nie konkuruje, 80 bajtów
pobiera dane wejściowe z argumentów wiersza poleceń. Uruchom z
-nr
. (oczywiście przestanie działać po interpunkcji)źródło
PHP, 94 + 1 bajtów
+1 za
-R
flagęWprowadzanie rur przez
php -nR '<code>'
.Uwaga:
preg_replace_callback
przyszedł do PHP w wersji 4.0.5; zamknięcia zostały wprowadzone w php 5.3;więc wymaga to PHP 5.3 lub nowszego.
Niestety, dopasowanie jest zawsze wysyłane jako tablica, nawet jeśli nie ma pod wzorców,
dlatego nie mogę po prostu użyć
str_shuffle
jako wywołania zwrotnego, co pozwoliłoby zaoszczędzić 29 bajtów.źródło
JavaScript,
7667 bajtówdzięki Arnauldowi za -9 bajtów.
Wypróbuj online!
Nie golfił
źródło
/\B\w+\B/g
. (Ale jeśli chodzi o nagrodę, zwróć uwagę, że długość kodu nie jest ważna. )R 179
Używając funkcji, którą napisałem dla losowych liter w zadaniu tekstowym :
Wkład:
Rozwiązanie:
Wynik:
źródło
Pyth, 23 bajty
Nie konkuruje, ponieważ Pyth powstał po opublikowaniu tego wyzwania.
Wypróbuj online
źródło
Japt , 32 bajty
Wypróbuj online!
źródło
Java,
1557834 bajtów Dzięki @JoKing za wskazówki.Trochę za późno na zawody. Zapomniałem, że zacząłem od tego problemu.
Grał w golfa
Nie golfa
źródło
Sidef ,
8985 bajtówBlokowanie (anonimowe wywołanie):
Dane wyjściowe, gdy są używane jak
{ ... }('..')
:Nieco golfa
źródło