Dada uma sequência como entrada, encontre a substring contígua mais longa que não possui nenhum caractere duas ou mais. Se houver várias dessas substrings, você também pode produzir. Você pode assumir que a entrada está no intervalo ASCII imprimível, se desejar.
Pontuação
As respostas serão classificadas primeiro pelo comprimento de sua própria substring não repetitiva mais longa e depois pelo comprimento total. Pontuações mais baixas serão melhores para ambos os critérios. Dependendo do idioma, isso provavelmente parecerá um desafio de código-golfe com restrição de origem.
Trivialidade
Em alguns idiomas, atingir uma pontuação de 1, x (linguagem) ou 2, x (quebra-cabeças e outros tarpits de turing) é bastante fácil, no entanto, existem outros idiomas nos quais minimizar o substring não repetitivo mais longo é um desafio. Eu me diverti muito ao obter uma pontuação de 2 em Haskell, então eu encorajo você a procurar idiomas nos quais essa tarefa é divertida.
Casos de teste
"Good morning, Green orb!" -> "ing, Gre"
"fffffffffff" -> "f"
"oiiiiioiiii" -> "io", "oi"
"1234567890" -> "1234567890"
"11122324455" -> "324"
Pontuação de envio
Você pode pontuar seus programas usando o seguinte snippet:
fonte
11122324455
Jonathan Allan percebeu que minha primeira revisão não a tratou corretamente.11122
ocorre depois324
, mas é deduplicado para12
.Respostas:
C, pontuação 2,
747720662 bytesFunciona pelo menos no MinGW de 32 bits (com otimizações desativadas). Não usa uma única palavra-chave.
Aparentemente, também funciona no TIO com gcc e clang: experimente online! (Obrigado @Dennis!)
Ligue para:
Saída:
O código com formatação um pouco mais legível:
E isso pode ser usado para gerar espaçamento adequado para obter a formatação com a pontuação 2: Experimente online!
C, pontuação 3, 309 bytes
Experimente online!
fonte
Haskell , score 2,
492...307224212209207 bytesExperimente online!
Jogou golfe literalmente centenas de bytes graças a WW e Ørjan Johansen !
Explicação
A função
(??)
pega um caracterec
e uma strings
e retorna o prefixo mais longos
que não contémc
. Sem jogar e não otimizado para pontuação:A função
ss
usa(??)
para encontrar o prefixo mais longo de caracteres exclusivos de uma determinada sequência:(##)
é uma função que pega duas strings e retorna a mais longa. A comparação de comprimento funciona repetindo a stringx
tantas vezes quantox
long (x>>y
) ey
long (y>>x
) e verificando qual das strings resultantes é lexicograficamente maior.Finalmente,
ff
recursa sobre a sequência de entrada, gera o prefixo mais longo comss
, determina recursivamente a substring não repetitiva mais longa da cauda da sequência e retorna o mais longo dos dois com(##)
:fonte
@
truque realmente custa 2 bytes sobre apenas fazer?
dois caracteres: 207Lua, pontuação 3, 274 bytes
Nota: Lua 5.2 ou Lua 5.3 é necessária
Uso:
Ideia principal: intercalar tudo com espaços, inserir
" "
(dois espaços) para dividir identificadores longosCódigo não destruído:
Programa atual (após remover todos os pares de espaços):
BTW, o snippet JS para calcular a pontuação falha no meu código.
fonte
Retina 0.8.2 , 37 bytes, pontuação 9
Experimente online! A tradução direta desta resposta na Retina 1 salva um byte usando em
N
vez deO#
. No entanto, se você jogar ingenuamente a resposta da Retina 1 até 28 bytes, sua pontuação na verdade aumenta para 10! Explicação:Gere todos os sufixos da entrada.
Para cada sufixo, use o prefixo até o primeiro caractere duplicado.
Ordene as seqüências restantes na ordem inversa do comprimento (ou seja, a mais longa primeiro).
Tome mais tempo.
fonte
Geléia , pontuação 2, 14 bytes
Agradecemos a @ JonathanAllan pela pontuação -1, +7 bytes e por perceber um erro.
Experimente online!
Como funciona
fonte
Limpo , pontuação
75, 276 bytesExperimente online! Obrigado a @ Οurous por me mostrar que é possível chamar o código de máquina ABC diretamente de dentro do Clean. Isso permite livrar-se do gargalo anterior
import
que define a pontuação mínima em 7, mas precisa da palavra-chavecode
que define a pontuação mínima em 5 para essa abordagem.Uma versão não codificada e não otimizada para pontuação do código acima pode ser encontrada aqui: Experimente online!
Versão anterior com pontuação 7,
158154130 bytesExperimente online!
Com a
import
pontuação, o score não pode ficar abaixo de 7. Sem a importação, seria necessário implementar a igualdade em strings ou chars sem nenhuma função da biblioteca queprovavelmente não sejapossível, como pode ser visto na nova versão acima.fonte
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!
( do cloogle ) certamente parece convidativo. Vou dar uma olhada amanhã, obrigado pela sugestão!-IL
sinalizador, pois nada está sendo importado.Python 3 , pontuação 4, 155 bytes
Isso define uma função
l
.Agradecemos a @xnor por apontar que cadeias de comprimento 3 não aumentam a pontuação, economizando 32 bytes.
Experimente online!
fonte
Brachylog , pontuação 2, 19 bytes
Experimente online!
Apenas uma velha e chata resposta "esvazie tudo". Pelo menos eu aprendi que os metapredicados podem ser afastados dos predicados e ainda funcionam (e os subscritos e parâmetros (paramétricos) não podem).
s ᶠ
- encontre todas as substrings da string especificadal ᵒ
- ordená-los de acordo com seu comprimento (crescente por padrão)≠ ˢ
- selecione aqueles que possuem todos os elementos distintost
- pegue a cauda (último elemento) disso - aquele com o maior comprimentofonte
Pitão , 11 bytes, pontuação 4
-4 pontos graças a Dennis
Experimente online!
fonte
Casca , pontuação 2, 10 bytes
Experimente online!
Explicação
O programa é equivalente a isso:
O interno
Ë
avalia≠
todos os pares ordenados de seu argumentox
e retornalength(x)+1
se todos os resultados forem verdadeiros, caso contrário0
. Quando maximizamos isso, encontramos a cadeia mais longa que não possui caracteres repetidos.Na submissão, apenas insiro a função de identidade
I
entre cada função, duas vezes. ComoIË
é o mesmo queË
,I≠
é o mesmo≠
e assim por diante, isso não altera a semântica. O único perigo é que uma função de ordem superior possa decidir usar um dosI
s como argumento, mas felizmente isso leva a um erro de tipo em nosso programa, para que isso não aconteça.fonte
Clojure, pontuação 4
Oh cara, isso foi doloroso!
N
implementanext
,R
éreduce
,C
écount
,J
éconj
(funciona apenas para vetores) eI
éiterate
.apply str
existe duas vezes porque, caso contrário, a entrada "aaaa" não retornaria uma string, mas um vetor[\a]
. Felizmente eu consegui usarapply
eassoc
, eu não sabia que você poderia associar um índice além do último elemento de um vetor:fonte
Geléia , pontuação 5, 10 bytes
Experimente online!
fonte
Ẇµ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.fonte
Alice, 40 bytes
(Trailing newline)
Try it online!
The instruction pointer moves diagonally in ordinal mode, so only every other character is executed.
fonte
Perl 6, score:
15 108, length:46 5562 bytesTest it
Test it
Test it
Expanded:
fonte
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.
fonte
Haskell, score 7
-4 thanks to Laikoni.
Try it online!
fonte
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:
fonte
Kotlin, score:
11109 bytes, length:227246245 bytesThe longest is
ubstring
, which is 9 charsIt is called like this:
fonte
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
.:
.fonte
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.fonte