Twoim wyzwaniem jest hasło do łańcucha! Co to jest hasło, pytasz?
Weź ciąg jako dane wejściowe. Ten ciąg będzie zawierać tylko wielkie litery, małe litery, cyfry i spacje.
Musisz zastąpić wszystkie spacje znakami podkreślenia i przenieść wszystkie liczby na koniec łańcucha w kolejności, w jakiej pojawiają się od lewej do prawej. Następnie, dla każdej litery w ciągu, losowo zmień ją na wielkie lub małe litery.
Przykłady (wielkość znaków powinna się zmieniać za każdym razem):
Input
Hello world
Output
HElLo_wORld
Input
pa55 w0rd
Output
pA_Wrd550
Input
14 35
Output
_1435
Input
0971
Output
0971
Input
[space]
Output
_
Najkrótszy kod w bajtach wygrywa!
Ten, kto pyta w sprawie bezpieczeństwa informacji SE, czy jest to dobry algorytm haszujący, wygrywa! - Nie martw się, panowie SE, żartuję.
Odpowiedzi:
Pyth, 15 bajtów
Demonstracja
źródło
Labirynt , 76 bajtów
Kolejna współpraca z @ MartinBüttner i po bardziej szalonej stronie spektrum Labiryntu - po raz pierwszy mamy wszystkie cztery
^>v<
w jednym programie. Wypróbuj online!Wyjaśnienie
Ogólny algorytm działający w pętli wygląda następująco:
Aby zachować zwięzłe wyjaśnienie, oto z grubsza, w jaki sposób każda część programu odpowiada powyższemu pseudokodowi:
Oto interesujące części.
Zdobywanie losowości w Labiryncie
Jest tylko jeden sposób na uzyskanie losowości w Labiryncie, i wtedy, gdy IP próbuje iść naprzód, ale 1) nie ma ścieżki do przodu ani do tyłu i 2) są ścieżki dostępne po lewej i prawej stronie. W takim przypadku adres IP losowo wybiera między lewą a prawą trasą.
Jest to możliwe tylko przy użyciu
^>v<
operatorów, któren
przesuwają wiersz / kolumnęn
o 1. Na przykład program ( Wypróbuj online! )wyprowadza losowo 1 lub 2, ponieważ
v
przesuwa kolumnę z przesunięciem 0 (tj. kolumna, w której IP jest włączony) o 1, dającAdres IP jest skierowany w prawo i próbuje iść do przodu (górna część stosu wynosi zero), ale nie może. Nie może się również poruszać do tyłu, więc losowo wybiera między lewą a prawą.
Sztuczki golfowe
Program rozpoczyna się od pierwszego znaku w kolejności odczytu, który faktycznie jest krokiem 6. Jednak wyskakiwanie z pustego stosu Labiryntu daje 0, więc występują kroki 10 i 14, przesuwając zero na stos pomocniczy, który jest efektywny brak op.
Główny stos jest praktycznie pusty po każdej iteracji, co pozwala nam sprawdzać układ kodu za pomocą
>
i<
na ukrytych zerach na dole.>
Owija się wokół dolny wiersz tak, że porusza IP z prawym dolnym rogu do dolnego lewego, i<
przesunięcia powrót wiersz. IP następnie szczęśliwie przesuwa się w górę lewej kolumny, aby kontynuować pętlę.Cyfry w labiryncie pop
n
i push10*n + <digit>
. Ponadto znaki są pobierane modulo 256 przed wysłaniem. Połączenie tych dwóch razem daje nam wynik 95 (podkreślenie), wykonując`33
do 32 (spacja), co działa, ponieważ-3233 % 256 = 95
. Mimo że istnieją inne sposoby przekształcenia 32 w 95 (;95
najłatwiejsze), praca z liczbą ujemną pozwala nam nieco skompresować kod za pomocą skrętów w lewo.źródło
05AB1E ,
222120 bajtówKod:
Wykorzystuje kodowanie CP-1252 .
Wypróbuj online!
źródło
CJam , 25 bajtów
Wypróbuj online!
Wyjaśnienie
Tłumaczenie mojej odpowiedzi MATL.
źródło
CJam, 23 bajty
Sprawdź to tutaj.
Wyjaśnienie
źródło
Python, 107 bajtów
Ulepszenie pozostałych dwóch odpowiedzi w języku Python, ponieważ:
[...,'_'][c<'!']
jest używany zamiasts.replace(' ','_')
ichoice(c+c.swapcase())
jest używany zamiastchoice([c.upper(),c.lower()])
źródło
JavaScript (ES6),
114101 bajtów47 bajtów tylko w celu losowego przydzielenia wielkości znaku ...
Edycja: Oszczędność 13 bajtów dzięki @ edc65.
źródło
f=s=>s.replace(/./g,x=>x>'9'?x[`to${Math.random()<.5?"Low":"Upp"}erCase`]():x>' '?(s+=x,''):'_',s='')+s
MATL , 27 bajtów
Wypróbuj online!
źródło
Python 3,
128 122118 znakówDzięki xnor za golenie 6 bajtów.
źródło
lambda x:''.join(choice([i.upper(),i.lower()])for i in sorted(x.replace(' ','_'),key=str.isnumeric))
Perl 6,
777561 bajtówS///
jest jaks///
, ale nie zmienia się$_
w miejscuźródło
Pyth, 17 bajtów
Wypróbuj tutaj!
Wyjaśnienie
źródło
Mathematica, 86 bajtów
Dzięki Sp3000 za oszczędność 1 bajtu.
Ahhh, przetwarzanie znaków Mathematica ... czyż nie jest cudowne. Jest to nienazwana funkcja, która pobiera i zwraca ciąg znaków.
Ze względu na cały cukier syntaktyczny kolejność czytania jest nieco śmieszna:
Podziel łańcuch na znaki, w przeciwnym razie nie będziemy w stanie nic z nim zrobić.
Sortuje cyfry do końca. Zawinięcie funkcji testowej w listę sprawia, że sortowanie jest stabilne.
Mapuje funkcję lewej ręki nad każdym znakiem na liście.
Wybiera losową funkcję zmiany wielkości liter dla bieżącego znaku.
Stosuje go do bieżącej postaci.
Zastępuje spacje podkreśleniami.
Na koniec łączy wszystkie znaki z powrotem w ciąg.
źródło
PowerShell, 113 bajtów
PowerShell oznacza okropny język golfa. Podziel na tablicę znaków i zastąp spacje znakami podkreślenia. Weź każdą postać i proces. Zbierz liczby do zmiennej $ d do późniejszego wyjścia. Każda inna postać jest losowo przekształcana na wielkie lub małe litery, wywołując wyrażenie za pomocą
'char'.ToLower()
lub'char'.ToUpper()
. Jeśli jakieś cyfry zostały zebrane, dołącz je na końcu.źródło
$_-in0..9
i-in
operatora wprowadzonego w PowerShell v3 zamiast wyrażenia regularnego-match
.Julia,
888778 bajtówJest to anonimowa funkcja, która przyjmuje ciąg i zwraca ciąg. Aby go wywołać, przypisz go do zmiennej.
Najpierw dzielimy ciąg wejściowy na tablicę jego znaków i sortujemy tablicę według tego, czy każdy znak jest cyfrą. Utrzymuje to porządek w tekście i cyfrach, ale wypycha cyfry do końca. Następnie dla każdego znaku w tablicy sprawdzamy, czy jest to spacja. Jeśli tak, zamień na podkreślenie, w przeciwnym razie losowo wybierz jeden z znaków
ucfirst
lublcfirst
zastosuj do znaku, przekształcając go odpowiednio na wielkie lub małe litery. Połącz tablicę w ciąg i gotowe!Wypróbuj tutaj
Zaoszczędź 9 bajtów dzięki Sp3000!
źródło
Perl,
5148 bajtówObejmuje +2 za
-lp
Uruchom z wejściem na STDIN:
passwordify.pl
:źródło
Współczynnik, 154 bajtów
lub 222 z importem
kernel splitting sequences ascii combinators.random regexp
Nie jestem zbyt dobry w golfa i nie jestem pewien, czy wybrałem tutaj najlepsze podejście, ale pomyślałem, że spróbuję
źródło
Rubinowy, 84 bajtów
Funkcja anonimowa. Usunięcie spacji wcześniej
c.downcase
z jakiegoś powodu powoduje błąd składniowy i nie jestem pewien, dlaczego.źródło
Lua, 125 bajtów
Kiedy obiekt spełnia funkcje, możesz robić ładne rzeczy, nawet w lua! Nie sądzę, żebym mógł to pograć w golfa, to już jest dość duży bałagan i już cieszę się, że pokonałem większość odpowiedzi na pytania w języku Python: D.
Bez golfa i wyjaśnienia
źródło
Poważnie, 25 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
IPOS - niekonkurujący, 14 bajtów
Tak, dodałem wbudowane do tego wyzwania, ale nie są one specjalnie ukierunkowane na ten problem.
Działa to z wersją 0.1 interpretera .
Przykładowy przebieg
Wyjaśnienie
źródło
PHP, 368 bajtów
Nieskluczony kod:
źródło
Python 2, 179 bajtów
Prawdopodobnie jest tu dużo miejsca na ulepszenia, które wypracuję później.
źródło
AWK, 128 bajtów
srand()
Jest potrzebne, aby dać nam różnych liczb losowych za każdym razem, gdy jest uruchamiany.Aby działało to poprawnie z wejściem wieloliniowym, musielibyśmy umieścić coś takiego
A=N=""
przedfor
pętlą.źródło
Python 3.5 - 118 bajtów:
Jak widać, używam w zasadzie funkcji modułu losowego,
choice
aby wybrać funkcję losową (.upper () lub .lower ()) dla każdej litery w posortowanej wersji podanego ciągu, w którym wszystkie cyfry przechodzą do koniec. Ponadto każda spacja jest zastępowana podkreśleniem w posortowanym ciągu.źródło
PHP,
164158 znaków / bajtówJest to lepsze niż w innych golfach PHP , ponieważ:
Scenariusz
Przykład
źródło
> <> , 73 bajty
Nic szalonego tutaj, to:
_
po napotkaniuMożesz spróbować tutaj !
źródło
Python 3, 151 bajtów
źródło