Nadal należy unikać używania typowych słów jako haseł. Wyzwanie to dotyczy kodowania bardzo prosty program munges dana hasło ( M odify U ntil N ot G uessed E asily).
Wejście
Słowo, które jest ciągiem zapisanym w alfabecie abcdefghijklmnopqrstuvwxyz
. Nie ma znaczenia, czy litery są małe, czy wielkie.
Munging
- Zmień dowolną powtórzoną sekwencję tej samej litery na samą siebie poprzedzoną liczbą powtórzeń litery (
LLLL
z4L
) - Zmień pierwszy za
a
pomocą@
- Zmień pierwszy za
b
pomocą8
- Zmień pierwszy za
c
pomocą(
- Zmień pierwszy za
d
pomocą6
- Zmień pierwszy za
e
pomocą3
- Zmień pierwszy za
f
pomocą#
- Zmień pierwszy za
g
pomocą9
- Zmień pierwszy za
h
pomocą#
- Zmień pierwszy za
i
pomocą1
- Zmień drugi za
i
pomocą!
- Zmień pierwszy za
k
pomocą<
- Zmień pierwszy za
l
pomocą1
- Zmień drugi za
l
pomocąi
- Zmień pierwszy za
o
pomocą0
- Zmień pierwszy za
q
pomocą9
- Zmień pierwszy za
s
pomocą5
- Zmień drugi za
s
pomocą$
- Zmień pierwszy za
t
pomocą+
- Zmień pierwszy za
v
pomocą>
- Zmień drugi za
v
pomocą<
- Zmień pierwszy za
w
pomocąuu
- Zmień drugi za
w
pomocą2u
- Zmień pierwszy za
x
pomocą%
- Zmień pierwszy za
y
pomocą?
Zasada 1 musi być stosowana wymaganą liczbę razy, dopóki nie będzie można zastosować jej więcej. Następnie stosuje się resztę reguł.
Wyjście Wybite słowo
Przykłady
codegolf
->(0639o1#
programming
->pr09r@2m1ng
puzzles
->pu2z135
passwords
->p@25uu0r6$
wwww
->4uu
aaaaaaaaaaa
->11a
lllolllolll
->3103io3l
jjjmjjjj
->3jm4j
To jest golf golfowy , dlatego prosimy o jak najkrótszy program!
Nic w tym poście nie powinno być wykorzystywane jako pomysły na hasła lub jako część praktyk związanych z hasłami.
Odpowiedzi:
Java 8,
237321319280247241240237 bajtów+84 bajtów, ponieważ reguły dostaje zmian .. ( EDIT:. W końcu z powrotem do moich pierwszych 237 bajtów ) Wymiana
WWWW
ze222W
jest łatwy w Javie, ale4W
nie .. Jeśli tylko Java miał drogę do korzystania z regex capture-grupę czegoś. Uzyskanie długości"$1".length()
, zamiana samego dopasowania na"$1".replace(...)
, konwersja dopasowania na liczbę całkowitąnew Integer("$1")
lub użycie czegoś podobnego do Retina (tj.s.replaceAll("(?=(.)\\1)(\\1)+","$#2$1")
) Lub JavaScript (tj.s.replaceAll("(.)\\1+",m->m.length()+m.charAt(0))
) Byłoby moją pierwszą rzeczą, którą chciałbym zobaczyć w Javie w w przyszłości skorzystaj z codegolfing ..>.> Myślę, że po raz 10 nienawidzę, że Java nie może nic zrobić z dopasowaniem grupy przechwytywania ..-78 bajtów dzięki @ OlivierGrégoire .
I / O ma wielkie litery.
Wyjaśnienie:
Wypróbuj tutaj.
źródło
JavaScript (ES6), 147 bajtów
Przypadki testowe
Pokaż fragment kodu
Wyjaśnienie
Przebiega przez serię zamienników w ciągu wejściowym
s
w kolejności określonej przez wyzwanie. Każdy element w serii jest tablicą lub łańcuchem zawierającym dwa elementy, które są następnie rozkładane (...r
) i przekazywane dos.replace()
.źródło
05AB1E , 69 bajtów
-9 bajtów dzięki Emignie
Wypróbuj online!
źródło
'w„uu„2u‚â
4uu
γvygD≠×yÙ}J
Perl 5 , 152 + 1 (
-p
) = 153 bajtówWypróbuj online!
źródło
-p
jest używana jako argumentperl
w linii poleceń, które automatycznie odczytuje dane wejściowe zSTDIN
aprint
s zawartość$_
na końcu skryptu. TIO zezwala na tę opcję, a ponieważperl -pe<code>
jest o 1 bajt więcej niżperl -e<code>
liczony jako jeden dodatkowy bajt.~
odj~k
być!
zamiast tego? Obecnie zastąpiony drugim wystąpieniui
z~
zamiast!
.Prawdopodobnie nie najbardziej golfowy, ale to działa.
-6 bajtów dzięki ovs
-77 Bajtów dzięki NieDzejkob i Jonathan French
Python 3 ,
329323 bajtów246 bajtówWypróbuj online!
źródło
.lower()
jjjmjjjj
powinny generować,3jm4j
ale generować3jm3jj
. Edycja: 258 bajtów z tym problemem naprawionychSiatkówka ,
166124 bajtówWypróbuj online!Wyjaśnienie:
Zamień ciąg powtarzających się liter na długość i literę.
Dopasuj pierwsze wystąpienie liter
a
doy
oraz oznaczyć je zastępczy.Napraw pierwsze wystąpienie
w
.Napraw pierwsze wystąpienie wszystkich innych liter od
a
doy
i usuń symbole zastępcze.Oznaczyć (pierwotnie) Drugie wystąpienie liter
i
,l
,s
,v
, lubw
z zastępczy.Napraw drugie wystąpienie
w
.Napraw drugie wystąpienie pozostałych czterech liter.
źródło
Haskell ,
221218213 bajtówWypróbuj online!
Nadużywanie,
foldr
aby uruchomić ciąg przez sekwencję przekształceń ciągu do tyłu. Sekwencja „zaczyna się”, wr
której powtórzenie się liczy, zastępującspan
ogonem struny, gdy przestaje być równa główce. Jeśli pierwsza część nie jest pusta, jest to powtórzenie, więc drukujemy długość +1. Następnie przekreślamy argumentf
dla każdej zamiany znaków w (odwrotnej) kolejności. Zamienniki są kodowane jako pojedynczy ciąg znaków, przy czym pierwszy znak jest znakiem, który ma zostać zastąpiony, a reszta jako ciąg znaków (ponieważ w zastępuje wiele znaków), aby przejść na jego miejsce. Umieszczam te zakodowane ciągi w jednym dużym ciągu oddzielonym spacjami, abywords
mogę podzielić je na listę dla mnie.EDYCJA: Dzięki @Laikoni za uratowanie mnie 5 bajtów! To było sprytne zastosowanie
$
I didn't think of. I also didn't know that<-
trick.źródło
(p,q)<-span(==a)b
zamiastlet(p,q)=span(==a)b
ip>[]
zamiastp/=[]
.m
bezcelowym:($(f<$>words"w2u ... y?")++[r]).foldr($)
Wypróbuj online!Lua , 173 bajtów
Wypróbuj online!
Nie golfił i wyjaśnił:
źródło
C # (.NET Core),
317,289, 279 bajtówWypróbuj online!
Mam nadzieję, że ok może otrzymać tablicę char jako dane wejściowe, a nie ciąg znaków.
Nie golfowany :
źródło
C ++,
571495478444 bajty-127 bajtów dzięki Zacharýowi
"/a@/b8/c(/d6/e3/f#/g9/h#/i1//i!/k</l1//li/o0/q9/s5//s$/t+/v>/wuu//w2u/x%/y?/"
ciąg jest używany do transformacji z jednego znaku do innych. 1/
oznacza, że pierwszy „następny znak” należy zastąpić tym, co następuje/
po drugim, 2 oznacza, że drugi „następny znak” należy zastąpić tym, co następuje.Wypróbuj online
źródło
R,
224219 bytesTry it online!
Nasty, but the main part is the iterative substitution in the
Reduce
.sub
changes only the first occurrence of the match.Thanks to JayCe for pointing out a nice golf!
źródło
Perl 5, 123 bytes
122 bytes code + 1 for
-p
.Developed independently from @Xcali's answer, but using a very similar process.
Try it online!
źródło
Python 2,
220216194190188 bytesTry it online!
Python 3, 187 bytes
Try it online!
źródło
Pip,
103102 bytesTry it online!
Explanation
The code does three steps of transformation:
* We need to test whether
a@?m@0
is nil. It's not enough to test that it's truthy, since 0 is a legitimate index that is falsey. Pip doesn't have a short builtin way to test if a value is nil, but testing its length works well enough in this case: any number will have length at least 1 (truthy), and nil has length of nil (falsey).źródło