Biorąc pod uwagę ciąg wejściowy, znajdź najdłuższy ciągły podciąg, który nie ma żadnego znaku dwa razy lub więcej. Jeśli istnieje wiele takich podciągów, możesz je wypisać. Jeśli chcesz, możesz założyć, że dane wejściowe mieszczą się w drukowanym zakresie ASCII.
Punktacja
Odpowiedzi zostaną najpierw uszeregowane według długości ich najdłuższego niepowtarzającego się podciągu, a następnie według ich całkowitej długości. Niższe wyniki będą lepsze dla obu kryteriów. W zależności od języka prawdopodobnie będzie to wyglądać jak wyzwanie dla golfa z ograniczeniami źródłowymi.
Banalność
W niektórych językach osiągnięcie wyniku 1, x (lenguage) lub 2, x (Brain-flak i inne Turing Tepitits) jest dość łatwe, jednak istnieją inne języki, w których zminimalizowanie najdłuższego nie powtarzającego się podciągu jest wyzwaniem. Świetnie się bawiłem, zdobywając 2 punkty w Haskell, więc zachęcam do szukania języków, w których to zadanie jest fajne.
Przypadki testowe
"Good morning, Green orb!" -> "ing, Gre"
"fffffffffff" -> "f"
"oiiiiioiiii" -> "io", "oi"
"1234567890" -> "1234567890"
"11122324455" -> "324"
Zgłoszenie punktacji
Możesz oceniać swoje programy za pomocą następującego fragmentu:
źródło
11122324455
Jonathan Allan zdał sobie sprawę, że moja pierwsza wersja nie obsługiwała go poprawnie.11122
pojawia się później324
, ale zostaje deduplikowany12
.Odpowiedzi:
C, wynik 2,
747720662 bajtówDziała co najmniej na 32-bitowym MinGW (z wyłączonymi optymalizacjami). Nie używa jednego słowa kluczowego.
Działa najwyraźniej na TIO z gcc i clang: Wypróbuj online! (Dzięki @Dennis!)
Zadzwoń z:
Wydajność:
Kod z nieco bardziej czytelnym formatowaniem:
Można to wykorzystać do wygenerowania odpowiedniego odstępu, aby przejść do formatowania z wynikiem 2: Wypróbuj online!
C, wynik 3, 309 bajtów
Wypróbuj online!
źródło
Haskell , wynik 2,
492...307224212209207 bajtówWypróbuj online!
Grał w golfa dosłownie setki bajtów dzięki WW i Ørjanowi Johansenowi !
Wyjaśnienie
Funkcja
(??)
pobiera znakc
i ciąg znakóws
i zwraca najdłuższy prefikss
, który nie zawierac
. Niegolfowany i niezoptymalizowany pod kątem wyniku:Funkcja
ss
używa(??)
do znalezienia najdłuższego prefiksu unikatowych znaków danego łańcucha:(##)
jest funkcją, która pobiera dwa ciągi i zwraca dłuższą. Porównanie długości polega na powtarzaniu łańcuchax
tak często, jakx
długo (x>>y
) i nay
długości (y>>x
) oraz sprawdzaniu, który z powstałych łańcuchów jest leksykograficznie większy.Na koniec
ff
powtarza się nad łańcuchem wejściowym, generuje najdłuższy przedrostek zss
, rekurencyjnie określa najdłuższy, nie powtarzający się podłańcuch ogona łańcucha i zwraca dłuższy z dwóch za pomocą(##)
:źródło
@
trick actually costs 2 bytes over just making?
two chars: 207Lua, score 3, 274 bytes
Note: Lua 5.2 or Lua 5.3 is required
Usage:
Main idea: interleave everything with spaces, insert
" "
(two spaces) to split long identifiersUngolfed code:
Actual program (after removing all pairs of spaces):
BTW, the JS snippet for calculating the score fails on my code.
źródło
Retina 0.8.2, 37 bytes, score 9
Try it online! The direct translation of this answer to Retina 1 saves a byte by using
N
instead ofO#
. However, if you naïvely golf the Retina 1 answer down to 28 bytes, its score actually rises to 10! Explanation:Generate all suffixes of the input.
For each suffix, take the prefix up to the first duplicated character.
Sort the remaining strings in reverse order of length (i.e. longest first).
Take the longest.
źródło
Jelly, score 2, 14 bytes
Thanks to @JonathanAllan for score -1, +7 bytes and for noticing a bug.
Try it online!
How it works
źródło
Clean, score
75, 276 bytesTry it online! Thanks to @Οurous for showing me that it is possible to call ABC machine code directly from within Clean. This allows to get rid of the previous bottle-neck
import
which set the minimal score to 7, but needs the keywordcode
which sets the minimal score to 5 for this approach.An ungolfed and not score-optimized version of the above code can be found here: Try it online!
Previous version with score 7,
158154130 bytesTry it online!
With the
import
the score cannot go below 7. Without the import one would need to implement equality on strings or chars without any library functions which isprobably notpossible, as can be seen in the new version above.źródło
A code block with raw ABC instructions, which can be used for primitive functions like integer addition, for linking with C, bypassing the type system... welcome down the rabbit hole!
(from cloogle) certainly sounds inviting. I'll look into it tomorrow, thanks for the suggestion!-IL
flag, since nothing is being imported.Python 3, score 4, 155 bytes
This defines a function
l
.Thanks to @xnor for pointing out that strings of length 3 don't raise the score, saving 32 bytes.
Try it online!
źródło
Brachylog, score 2, 19 bytes
Try it online!
Just a boring old "space everything out" answer. At least I learnt that metapredicates can be spaced away from the predicates and still work (and the (parametric) subscripts and superscripts can't).
s ᶠ
- find all substrings of the given stringl ᵒ
- order them by their length (ascending by default)≠ ˢ
- select those that have all distinct elementst
- get the tail (last element) of that - the one with the biggest lengthźródło
Pyth, 11 bytes, score 4
-4 score thanks to Dennis
Try it online!
źródło
Husk, score 2, 10 bytes
Try it online!
Explanation
The program is equivalent to this:
The built-in
Ë
evaluates≠
on all ordered pairs of its argumentx
, and returnslength(x)+1
if every result is truthy, otherwise0
. When we maximize this, we find the longest string that has no repeated characters.In the submission, I just insert the identity function
I
between each function, twice. SinceIË
is the same asË
,I≠
is the same as≠
and so on, this does not change the semantics. The only danger is that a higher order function could decide to use one of theI
s as its argument, but luckily that leads to a type error in our program, so it doesn't happen.źródło
Clojure, score 4
Oh man this was painful!
N
implementsnext
,R
isreduce
,C
iscount
,J
isconj
(works only for vectors) andI
isiterate
.apply str
is there twice because otherwise "aaaa" input wouldn't return a string but a vector[\a]
. Luckily I got to useapply
andassoc
, I didn't know you could assoc one index beyond a vector's last element :oźródło
Jelly, score 5, 10 bytes
Try it online!
źródło
ẆµQQ ⁼ µ Ðf µ Ṫ
(probably added too many spaces now, but it's just an example. I'll leave optimizing byte-count versus spaces up to you).Python 3, score 4, 317 bytes
Try it online!
Unexeced code:
lambda a
containsmbda
which has score 5, and a function needsreturn
which apparently can't beexec
ed (so takes a score of at least 5 foreturn
), so a full program was necessary. It's probably possible to golf down the unexeced code size quite a bit, but I can't see a quick clear improvement.źródło
Alice, 40 bytes
(Trailing newline)
Try it online!
The instruction pointer moves diagonally in ordinal mode, so only every other character is executed.
źródło
Perl 6, score:
15 108, length:46 5562 bytesTest it
Test it
Test it
Expanded:
źródło
Java 8, score
9 (384 B)7 (401 B)Initial version. Will go down from here. Score is 9 due to"ubstring "
, sosubstring
will be the first part to replace." length"
, which I probably won't be able to reduce further.. I doubt it is possible to drop the four uses oflength
. If it is possible," eturn"
(6) might lower the score by 1 as final improvement, but I guess this is it (except maybe a small reduce in byte-count..)Try it online.
źródło
Haskell, score 7
-4 thanks to Laikoni.
Try it online!
źródło
f s=snd$maximum[(0<$i,i)|i<-tails=<<inits s,nub i==i]
saves a byte and two on the score.Mathematica, score
119Shaving a couple of bytes off of the longest nonrepeating string by obscuring the function's name:
źródło
Kotlin, score:
11109 bytes, length:227246245 bytesThe longest is
ubstring
, which is 9 charsIt is called like this:
źródło
roupingBy
and{
?roupingBy
(which is 9 chars) buteachCount
(with trailing space).roupingBy
has a trailing space (visible in the markdown, but the renderer seems to strip it)Pyth, score 3 (
1814 bytes)Try it online!
The longest non-repeating substrings is
.:
.źródło
e f {I T .:
.05AB1E, 22 bytes | Score: 2
-1 score + 7 bytes thanks to HeebyJeeby
Try it online!
05AB1E, 15 bytes | Score: 3
Try it online!
05AB1E, 8 bytes | Score: 8
Try it online!
05AB1E can actually do something rather cheap... adding whitespace into 05AB1E does nothing.
If there is a rule against this, I can also use
´
and like 7 other chars.źródło