Bardzo trudno zapamiętać moje hasło, więc wymyśliłem sposób na wygenerowanie hasła.
Generuję moje hasło ze słowa lub zdania, wykonując następujące kroki:
Zacznij od lewej do prawej
Znajdź liczbę każdej litery
Ułóż literę z jej liczbą w kolejności
Na końcu pojawią się litery o większej powtarzalności
Listy o tym samym powtórzeniu zostaną uporządkowane alfabetycznie
Liczby i litery specjalne będą ignorowane, w tym spacje (np. 9, 4, @, (, * itd. Są ignorowane)
Grupuj litery ignorując wielkość liter. W danych wyjściowych użyj przypadku ostatniego wystąpienia na wejściu
- Liczba liter może być dowolną liczbą, np. 5H17M345K
- Jeśli wejściowe są wszystkie cyfry lub litery specjalne, wówczas wyjściowy będzie pusty ciąg znaków, np. Wpisz „12 $ * 34 ^!” następnie wyślij „”
- gdy kolejność dla tego samego wystąpienia alfabetycznie nie ma znaczenia, np. 1a1B1c
Przykład:
Input: Kitkat Tango
(2k / 1i / 3T / 2a / 1n / 1g / 1o)
Output: 1g1i1n1o2a2k3T
Inny przykład:
Input: Database Partitions Task
(1D / 5a / 4T / 1b / 3s / 1e / 1P / 1r / 2i / 1o / 1n / 3s / 1k)
Output: 1b1D1e1k1n1o1P1r2i3s4T5a
Uwaga: litery z 1 powtórzeniem są na początku uporządkowane alfabetycznie, a następnie z większą liczbą powtórzeń
To jest code-golf , wygrywa najkrótszy kod.
code-golf
word-puzzle
asmgx
źródło
źródło
1.
dodać co najmniej 1 przypadek testowy, który zawiera więcej niż 9 wystąpień jednej lub więcej liter,2.
określ, że dane wyjściowe muszą być ciągiem (chociaż zdecydowanie zalecałbym, aby nie być tak ścisłym; nie dodaje niczego do wyzwania ),3.
określ, że musimy być w stanie obsłużyć dane wejściowe nie zawierające liter, i4.
wyjaśnij, czy musimy obsłużyć pusty ciąg znaków jako dane wejściowe.1
. Ponadto w przyszłości możesz rozważyć skorzystanie z naszej piaskownicy w celu rozwiązania takich problemów przed opublikowaniem wyzwania.Odpowiedzi:
Japt v2.0a0
-P
, 14 bajtówSpróbuj
źródło
05AB1E ,
191716 bajtówZaoszczędził 1 bajt dzięki Kevinowi Cruijssenowi
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
‚
(paruj z) na«
(konkat / scal), aby jedno z dwóchJ
s (złączeń) mogło zostać usunięte.J
środka? Edycja: Właściwie potrzebowałem ich jako pary w wersji 19-bajtowej i nie pomyślałem o zmianie, kiedy zrobiłem 17: PJ
zależności od odpowiedzi na to pytanieC # (interaktywny kompilator Visual C #) , 105 bajtów
Wypróbuj online!
Dzięki Dana za zmniejszenie jej do 105 bajtów z 138 bajtów.
źródło
.OrderBy(a=>a)
?Perl 6 ,
6663 bajtówWypróbuj online!
Wyjaśnienie
źródło
Siatkówka ,
67664139 bajtów-25 bajtów i drobna poprawka dzięki @Neil .
-2 bajty dzięki @Neil i @Shaggy razem.
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Usuń wszystko oprócz wielkich i małych liter:
tj.
Kitkat Tango 123!
→KitkatTango
Segregowanie poszczególne litery wielkości liter ( dzięki @MartinEnder na to ):
tzn
KitkatTango
→aagiKknottT
Uchwycić każdy kawałek wielkości liter wielokrotne sąsiednie litery:
tj
aagiKknottT
→ [aa
,g
,i
,Kk
,n
,o
,ttT
]Poprzedzić długość każdego meczu i tylko zachować ostatnią literę każdego fragmentu:
tj [
aa
,g
,i
,Kk
,n
,o
,ttT
] →2a1g1i2k1n1o3T
Posortuj liczby i grupy liter według liczb:
2a1g1i2k1n1o3T
→1g1i1n1o2a2k3T
Po czym wynik jest dorozumiany.
źródło
"aA" < "aa"
)\w
i.
”O`\w.
zostały użyte do wskazania, że sortujemy pary znaków. Nie jestem pewien, czy możemy posortować każdą parę znaków, ale sortuj ją tylko na podstawie pierwszej postaci. Ale cóż, sugestia Martina, aby posortować każdą postać na podstawie podstawienia (która jest małą odmianą meczu) działa jak urok. :)\P{L}
może działać, co oszczędza 2 bajty.Wolfram Language (Mathematica) ,
102969387 bajtówWypróbuj online!
źródło
Pyth,
272422 bajtówWypróbuj online tutaj .
Edycja: Golfowane 3 bajty, sortując według postaci przed grupą, poprzednia wersja:
sm+ldedo,lNr0eN.gr0kf}r0TGQ
Edycja 2: Grałem w golfa o kolejne 2 bajty, formatując dane wyjściowe przed złożeniem zamówienia, poprzednia wersja:
sm+ldedlD.gr0krD0f}r0TGQ
Edycja 3: Zmieniłem filtr, zmieniając filtr dzięki @FryAmTheEggman. Musiałem również naprawić błąd, gdy OP wyjaśnił, że pojedyncza litera może pojawić się więcej niż 9 razy, co dodało bajt z powrotem na: o (Poprzednia wersja:
srD0m+lded.gr0kf}r0TGQ
źródło
APL (Dyalog Extended) , 28 bajtów SBCS
Anonimowa ukryta funkcja prefiksu.
Wypróbuj online!
'\PL'
non-Letters⎕R
PCRE R eplaced z''
pustych strunach(
…)
Zastosuj następującą funkcję ukrytą:⌊
z małymi literami jako klawiszami…
⌸
zastosuj poniższą funkcję ukrytą do każdego klawisza i odpowiadającego mu zestawu wartości, a mianowicie⊢
argumentu:(
…)
Zastosuj następującą ukrytą funkcję⍤
do⊢
listy wartości:⊢/
ostatnia wartość…
,
Wstaw do tego następujące:⍕
stringification⍤
z≢
tally⊂
załącz (traktuj listę znaków jako pojedynczy ciąg)∊
ε nlist (Spłaszczenie) wersja posortowane rosnąco-tego⍤
∧
źródło
Perl 5,
746866 bajtów-6 bajtów zmienia się
-p
na-n
i używasay
zamiast$_=join"",
-2 bajtów dzięki Abigail używa\pL
zamiast[a-z]
TIO
59 bajtów, w przypadku gdy nie ma więcej niż 9 wystąpień każdego znaku
źródło
Python 2 , 116 bajtów
Wypróbuj online!
źródło
Database Partitions Task
nie jest równy1b1D1e1k1n1o1P1r2i3s4T5a
In the output, use the case of the last occurrence in the input
będziesz potrzebowaćrfind
zamiastfind
tego....] for
może jednak...]for
to zrównoważyć.Python 3 , 105 bajtów
Wypróbuj online!
-1 dzięki ArBo .
źródło
Haskell ,
114/113105 bajtów-9 bajtów dzięki Laikoni (przy użyciu listy i
(||)
zamiastfilter
zelem
& shorten,length
aby pozbyć się brzydkichzip
)!Wypróbuj online!
źródło
Czerwony ,
220196206 bajtówWypróbuj online!
Dzięki Shaggy za znalezienie błędu.
źródło
Galaretka , 15 bajtów
Pełny program wypisujący hasło zgodnie ze specyfikacją (jako monadyczny link daje listę list zawierających każdą liczbę całkowitą i znak).
Wypróbuj online!
źródło
Łuska , 15 bajtów
Żadnych problemów z importu przy użyciu łuskę, więc możemy skorzystać z różnych przydatnych funkcji, takich jak
groupOn
,sortOn
,toLower
itp:Wypróbuj online lub wypróbuj je wszystkie!
Wyjaśnienie
źródło
JavaScript (Node.js) , 127 bajtów
Wypróbuj online!
parseInt(numberAsString, radix)
spróbuje parsować liczbę całkowitą na początku łańcucha. Na przykładparseInt('120px', 10)
wyświetli 120. Gdy parsowanie nie powiodło się, zwracaNaN
zamiast tego. Łączymy'0'
z początkiem każdej postaci, aby ona powróciła0
wszelkie znaki inne niż cyfry. Za pomocą tego algorytmu możemy sortować te same litery razem i znaki inne niż alfa.sort
ijoin
,"Hello world!123"
by stać" !123deHllloorw"
. Dopasowanie do/([a-z])\1*/ig
zignoruje dowolny znak inny niż alfa i podzieli ciąg na części o takich samych literach. `.map
przekonwertować"aaa"
na"3a"
wymagane w pytaniu."3b"
byłby mniejszy niż"12a"
w bazie 36, tak jak się spodziewamy: najpierw porównuje liczby (n div 36
), a później porównuje literęn mod 36
).join
je razem.JavaScript (Node.js) , 146 bajtów
Wypróbuj online!
źródło
f=
. Pierwszy był krótszy. Ale dostaje 4 bajty więcej, ponieważ OP zapytał, że wyjście może być pustym ciągiem. I właśnie ich tam trzymałem ...Java 10,
223209301 bajtów+92 bajtów jako poprawka dla danych wejściowych zawierających więcej niż 9 pojedynczych liter. Zobaczę, czy mogę to jeszcze raz obniżyć, stosując inne podejście.
Wypróbuj online.
Wyjaśnienie:
źródło
Scala , 103 bajty
Wypróbuj online!
źródło
Swift 4.2.1 / Xcode 10.1 ,
105410501048370368364 bajtówWypróbuj online!
@KevinCruijssen również usunął niektóre spacje.
źródło
false
aby0>1
itrue
do1>0
. Wypróbuj online 1027 bajtów . Prawdopodobnie dużo więcej można zagrać w golfa, podobnie jak duplikat,if let v=$0.key.escaped(asASCII:0>1).lowercased().unicodeScalars.first?.value{return v<$1.key.value}else{return 0>1}
który masz, ale zostawię to komuś, kto tak naprawdę zna Swift.true
ifalse
z mojej odpowiedzi.=
przypisaniami: Wypróbuj online 364 bajty . Miłego pobytu! :)Węgiel drzewny , 30 bajtów
Wypróbuj online!Link jest do pełnej wersji kodu. Wyjaśnienie:
Przeprowadź alfabet małymi literami i znajdź najwyższą liczbę znaków w danych wejściowych pisanych małymi literami. Pętla powyżej domyślnego zakresu. (Pętla faktycznie przechodzi od
0
do,n-1
więc muszę zwiększać zmienną pętli przy każdym użyciu).Ponownie zapętlaj małe litery.
Jeśli liczba bieżącej litery jest równa wartości zewnętrznej pętli ...
Połącz bieżącą liczbę z ostatnim wystąpieniem bieżącej litery i niejawnie wydrukuj.
źródło
Galaretka , 14 bajtów
Wypróbuj online!
Pełny program
źródło
NodeJS, 299 bajtów, -6 bajtów dzięki @tsh
Nie tak piękna, ale działa!
JavaScript (ES8) (Firefox lub Chrome), 294 bajty, -1 bajt dzięki @tsh
Dzięki nowej
.flat
metodzie mogę zapisać 10 bajtów:Spróbuj tego online: https://repl.it/repls/ConcernedHorribleHypotheis
źródło
.replace
x 3 razy ->[R='replace]
i[R]
x 2 razy.charCodeAt(0)
->.charCodeAt()
(0
domyślnie)R ,
131129 bajtówWypróbuj online!
źródło
Julia 1.0 , 158 bajtów
Oryginalna wersja bez golfa z tą samą logiką:
Wypróbuj online!
źródło
Perl 6,
8682 bajtówźródło