Introdução
Eu quero encontrar a substring com mais 1
's' em uma sequência de 0
's 1
' e 's.
Entrada
Seu programa possui duas entradas , a sequência e o comprimento da substring.
A sequência é qualquer número de 0
'se 1
':
01001010101101111011101001010100010101101010101010101101101010010110110110
O comprimento da substring é qualquer número inteiro diferente de zero positivo:
5
Resultado
Seu programa deve gerar o índice inicial da primeira substring do comprimento especificado que contém mais 1
. Com a entrada acima, a saída é:
10
O primeiro caractere na sequência começa em um índice de 0
.
Pontuação
O código mais curto vence!
Regras
- Seu programa sempre deve gerar o índice correto para quaisquer entradas válidas.
- Você pode escolher seu método de entrada / saída em qualquer resposta com pontuação positiva nas opções padrão . Especifique o método escolhido na sua resposta.
1
, você produzirá a primeira substring encontrada. Você identifica as substrings com o índice do primeiro caractere nessa substring. Isso ajuda?Respostas:
Dyalog APL, 11
Experimente aqui. Uso:
Explicação
Essa é uma função diádica (que significa binária) que pega o comprimento da substring da esquerda e a sequência da direita. Sua estrutura é a seguinte:
Explicação por explosão:
Como exemplo, vamos dar
4
e0 1 1 0 1 1 1 0
como entradas. Primeiro aplicamos a função+/
a eles e obtemos2 3 3 3 3
. Então,+
e⌈/
aplicado a essa matriz, fornece-se e3
e é2 3 3 3 3 ⍳ 3
avaliado como2
, uma3
vez que ocorre primeiro como o segundo elemento. Subtraímos1
e obtemos1
como resultado final.fonte
m
, ondem
está máximo.Ruby, 42
Recebe entrada chamando-o, por exemplo
f['01001010101101111011101001010100010101101010101010101101101010010110110110',5]
Isso compara substrings usando seu valor ASCII total e retorna o índice do máximo. Não tenho certeza se
max_by
a especificação do Ruby é exigida para ser estável, mas parece estar na implementação em C.fonte
Python 2, 56
Aceita uma matriz de números inteiros, depois o comprimento.
fonte
[int(s) for s in "010010...0"]
f(ss, 999)
retornará 0 (em vez de Nenhum). Você pode consertar isso? Isso viola indiscutivelmente regra 1.ss
?None
nunca é uma saída desejada, pois a resposta é um número inteiro.Lote - 222
Lote é obviamente a linguagem perfeita para esse tipo de operação.
Sem golfe / dissecado:
Configuração inicial. A variável
s
é a string de entrada el
será o comprimento da string de entrada, menos o comprimento da sub-string (inicializado em negativo%2
onde%2
é o comprimento especificado da sub-string).Obtenha o comprimento da entrada como
l
, usando uma solução pura de comprimento de cadeia de lotes - isso manipula a variável ques
contém a cadeia de entrada e, em seguida, a definimos novamente.O valor de
x
é usado para verificar qual sub-string tem o maior número de 1s. Inicie um loop de 0 ao comprimento da string, menos o comprimento da sub-string (variávell
). Obter a sub-string a partir do ponto atual no loop (%%a
),c
é definido como a string de entrada iniciando em%%a
e recebendo%2
os caracteres (o comprimento especificado da sub-string). Se qualquer0
s for removidoc
, o valor dec
é comparado ax
- ou seja,111
é um número maior do que o de11
modo que podemos usar a 'string' para fazer uma comparação maior que a.y
é então definido para o local atual na string - que é finalmente gerada.Usando OPs exemplo -
fonte
C # (Regex), 196
O regex real não é tão longo, mas todos os fluffs necessários para um programa C # compilar o dobro do tamanho do código.
A regex real, configurando o comprimento para 5:
(?=((?<o>1)|0){5})
: Olhe para a frente para ler 5 caracteres sem consumir e coloque tudo1
na "pilha"o
.(?=[10]{5})(?!((?<-o>1)|0){5})
: Em uma posição com 5 caracteres à frente, não há item suficiente na "pilha"o
para sair, ou seja, a substring tem estritamente mais1
que o que temos na posição atual.(?!.+(?=[10]{5})(?!((?<-o>1)|0){5}))
: Uma posição como descrita acima não pode ser encontrada para o restante da string, ou seja, toda posição tem um número menor ou igual a1
's.Obter o primeiro resultado fornece a resposta, uma vez que todas as subseqüências à frente têm subseqüências com mais
1
's, e verificamos se qualquer índice maior que o índice atual tem um número menor ou igual a1
' s.(E eu aprendo algo legal: a "pilha" é restaurada no retorno).
fonte
Pyth , 12
Isso define uma função
g
, que requer uma lista de números e um número como entrada. Por exemploVocê pode testá-lo aqui: Pyth Compiler / Executor
Explicação:
Alternativo:
fonte
ho/<>zNQ\0Uz
Infelizmente, contar com uma sequência não converte automaticamente o que você está procurando em uma sequência :(J,
1514 caracteresfonte
Matlab (42)
Vamos
s
denotar a string en
o comprimento da substring. O resultado ér
.Calcule a convolução de
s
com uma sequência den
unidades e encontre o máximo. A convolução é feita facilmente comconv
, e amax
função retorna a posição do primeiro máximo. É necessário subtrair1
para o índice resultante, porque a indexação do Matlab começa às1
, não0
.Golfe:
fonte
Haskell,
6462 bytesUso:
fonte
n#l=...
p
. Além disso, acho que0
é redundante (embora os parênteses não sejam, e você pode precisar de um espaço em vez disso0
).JavaScript (ES6) 73
Uma função retornando o valor solicitado. O loop for varre a sequência de entrada mantendo um total em execução, salvando a posição do valor máximo.
Ungolfed
Teste no console do FireFox / FireBug
Resultado
10
fonte
x
er
. Isso deve reduzir 4 bytes, sendo o comprimento final de 69 bytes. Além disso, você provavelmente poderá substituir&&
por&
. Mas legal com o~~
truque!t > x
. Você precisa iniciar o r: tryF("00000")
. E && é necessário para emular eif
(x=t, r=i-n+1)
set
era menor ou igual ax
. Esse é um bom uso da avaliação preguiçosa! Eu gostaria que pudesse ser cortado em algum lugar, mas acho que você fez todo o trabalho.PHP (96)
for($a=$b=$c=0;(($d=@substr_count($s,1,$a,$n))>$c&&($b=$a)&&($c=$d))||$a++<strlen($s););echo $b;
http://3v4l.org/J4vqa
variáveis
$s
e$n
deve ser definido na linha de comando para a cadeia de caracteres de pesquisa e o comprimento da substring, respectivamente.Isso também funcionaria em qualquer linguagem C, com funções apropriadas para
substr_count()
estrlen()
.fonte
Mathematica,
3836Exemplo:
Resultado:
fonte
C # (Linq), 148 bytes
Formatado:
Recebe entrada como parâmetros de método.
O que faz:
fonte
Scala - 70 bytes
Mas, com nomes de funções, desde que zipWithIndex , acho que Scala não é a melhor opção para código de golfe.
fonte
C,
245185Formatado:
Uso:
fonte
CJam,
2521 bytesTeste aqui.
Recebe entrada como um número inteiro para o comprimento da substring e uma matriz de zeros e uns como a sequência:
Explicação
O resultado é impresso automaticamente no final do programa.
Observe também que estou considerando fatias que começam mais perto do final do que o comprimento de substring desejado, mas tudo bem, porque são substrings da última substring válida e, portanto, nunca terão mais
1
s do que a última substring válida.fonte
Java 329 bytes
ia implantar um .matches (regex), mas teria sido quase idêntico às soluções python acima, então tentei uma janela deslizante. novo aqui, então se alguém tiver alguma dica, fique feliz em ouvi-la.
}
fonte
i
na terceira linha. A maior parte do espaço em branco pode ser removida. UseSystem.out.print(
(nenhuma nova linha é necessária). Em vez deInteger.valueOf(
, você pode usarnew Integer(
.