Desafio
Tenho certeza de que você leu o título e veio buscar seu representante, pensando nas coisas de seus filhos, mas pense novamente! Você precisa desafiar um ao outro no código mais curto para contar as ocorrências de uma string em outra. Por exemplo, dada a seguinte entrada:
aaaabbbbsssffhd
como uma string e a string
s
deve produzir
3
Regras
Pouco antes de você sorrir e dizer: "Ei, eu vou usar ----", leia isto:
- Não há uso de bibliotecas externas ou da API do seu idioma. Você precisa implementá-lo manualmente. O que significa que você não pode usar a função ou o método interno do seu idioma para contar ocorrências
- E / S sem arquivo
- Não há conexão com um servidor, site, etc.
- No caso de `ababa`, onde começa com` aba` e se você ler as últimas 3 letras, também é `aba`, você conta apenas uma *
Obrigado @ProgramFOX por isso (a última regra)!
* Dica : ao contar ocorrências, você pode remover as que contou para evitar desobedecer a esta regra
Eu acho que as duas últimas regras são apenas para dobradores de regras!
Critério vencedor
Como indicado anteriormente, o vencedor é o código com menos bytes usados. O vencedor será anunciado cinco dias depois (15 de junho de 2014)
Minha pequena resposta
Aqui está minha resposta em C ++, na qual assume que a li
variável contém a string para verificar ocorrências e l
é a string a procurar f
:
Ungolfed
int c = 0;
while (li.find(lf) != string::npos)
{
int p = li.find(lf);
int l = p + lf.length() - 1;
for (p = p; p <= l; p++)
{
li[p] = static_cast<char>(8);
}
++c;
}
Obviamente, para usar std::string
, você deve incluir o arquivo de cabeçalho da string!
Golfe
int c=0;while(li.find(lf)!=string::npos){int p=li.find(lf);int l=p+lf.length()-1;for(p=p;p<=l;p++){li[p]=static_cast<char>(8);}++c;}
Resultado
A variável c
será o valor de quantas vezes a cadeia foi encontrada
Aproveitar!
Vencedora
Após uma longa espera, a resposta @Dennis vence com apenas 3 bytes, escritos em GolfScript
ababa
eaba
, devemos produzir1
ou2
? O terceiroa
é o fim do primeiroaba
e o começo do segundoaba
.s
para correspondência? Se não: eu tenho uma solução J 5 caractere:+/a=b
Respostas:
GolfScript, 3 bytes
Assume que string e substring estão na pilha.
Experimente online.
Como funciona
fonte
golfscript <<< '127,32,-""+'
é mais rápido que abrir um navegador da web.[win key] jqt [return] a. [return]
é ainda mais rápido;)jqt
parece interessante. O que é isso?iPython QTConsole
)JavaScript 32
Nada realmente interessante aqui ...
split
O principal objetivo é criar uma matriz a partir de uma string usando o delimitador no argumento.fonte
split()
não faz parte da "API do seu idioma"?a.split(b).length-1
19. Talvez o @svidgen deva esclarecer a inicialização na pergunta.J (7)
No use of external libraries
Verifica!, or your language's API.
Verifica...? Não sei o que é uma API de linguagem.You have to implement it manually
Verifica!No file I/O
Verifica!No connecting with a server, website, et cetera
Verifica!Como funciona:
E.
éWindowedMatch
: a Refsheet J fornece're' E. 'reread'
como exemplo. Isso dá1 0 1 0 0 0
. Então, a única coisa que resta a fazer é simplesmente adicionar isso com+/
(basicamentesum
).Eu não acho que isso conta como uso
your language's built-in function or method for counting occurences
, mas isso é discutível.EDIT: Apenas para ficar claro:
fonte
ababa
->aba
era retornar 1?@Synthetica Absolutley go for it!
quando perguntei a ele, então acho que está tudo bem.C # - 73
fonte
aba
aparece duas vezes na Abeba:aba ba
ab aba
.ababa
, onde ele começa comaba
e se você ler os últimos 3 letras é tambémaba
, você só contar um *" << Nas regras ..Python 2.x -
49 2322 bytesIsso pressupõe que a entrada variável esteja correta. Ambas as strings podem ter qualquer comprimento.
@Avall encurtado.
Versão de 49 bytes, conta todas as instâncias da substring ('aba' está em 'ababa' duas vezes).
fonte
a='aa'
eb é o mesmo. Tudo bem?a='aba'; b='ababa'
caso.Powershell 32
Funciona assim:
Explicação: Utilizado
-split
para separar o primeiro argumento pelo segundo, retorna o tamanho da matriz resultante da divisão (menos 1)fonte
Applescript, 106 bytes
Applescript é uma linguagem divertida, mas boba, para jogar golfe.
Corra com
osascript
:fonte
C # - 66 bytes
fonte
C
130120Nota: provavelmente travará se chamado com argumentos incorretos.
Ungolfed (tipo):
Versão antiga com
strstr
estrlen
: 103fonte
Delphi XE3 (113)
Toma 2 strings, remove a substring da string e substratos novo comprimento do antigo, seguido por uma divisão do comprimento da substring.
Teste:
fonte
Lua (48)
Então, pensei em enviar outra resposta, desta vez em lua. É muito possível que isso possa ser melhorado muito, sou muito novo nisso.
fonte
Fortran 90: 101
O abuso padrão de digitação implícita funciona para qualquer matriz de tamanho
a
eb
, embora se deva esperar issolen(a) < len(b)
.Esta função deve ser
contain
editada dentro de um programa completo para funcionar.a
eb
são recebidos do stdin e podem ser inseridos na mesma linha (separados por vírgula ou espaço) ou em linhas diferentes. Compile viagfortran -o main main.f90
e execute como faria com qualquer outro programa compilado.Testes:
Eu poderia fazer o retorno acima 1 se adicionar 4 caracteres (
,k+1
) para odo
loopfonte
Mathematica
2623Funciona como o algoritmo de Dennis, mas mais elaborado:
Três chars raspados pelos szabólicos.
fonte
Length@StringCases[a,b]
é mais curto. Esse problema não está bem especificado, porque, se não podemos usarStringCount
, não está claro se alguma das outrasString*
funções internas também deve ser permitida ... todas elas são baseadas no mesmo código subjacente.StringCases
. Não estava claro para mim o que o OP significava pela API do idioma.Length@*StringCases
. Isso é mais curto do queLength@StringCases[##]&
se tivéssemos que escrever apenas uma função, mas na verdade não a aplicássemos ema
eb
.C ++ 225
fonte
Java (38)
(A pergunta não exigia um programa ou função completo.)
fonte
Cobra - 25
fonte
K / Kona 6
Onde
x
está a string ey
a substring.~
é o operador negate, com'
, é aplicado a todos os elementos emx
; ele retornará0
se não corresponder e1
se corresponder. Como é aplicado em elementos, o resultado dey~'x
é um vetor, o+/
seguida, soma o resultado, fornecendo o número total de ocorrências.Infelizmente, esse método exige que
y
haja apenas um caractere; caso contrário, compararemos uma cadeia de vários caracteres com uma única cadeia de caracteres, resultando em alength error
.fonte