Desafio
Escreva um programa que, com uma sequência de x
10 caracteres e um caractere y
, produza o número de vezes que o caractere y
ocorre na sequência x
.
O programa mais curto em bytes para fazer isso vence.
Exemplo
Input: tttggloyoi, t
Output: 3
Input: onomatopoe, o
Output: 4
Respostas:
Pitão, 3 bytes
Exemplo de execução:
Obviamente, o usuário pode inserir mais ou menos de 10 letras na primeira entrada, mas não precisamos nos preocupar com o que acontece quando o usuário viola as especificações.
fonte
/
conta apenas o número de ocorrências na primeira sequência de entrada da segunda sequência de entrada.w
pega uma linha de entrada.Pitão - 3 bytes
Uma resposta Pyth diferente, menos óbvia, do mesmo tamanho. Dobra contando sobre a entrada.
Conjunto de Teste .
fonte
JavaScript, 32
fonte
Bash, 24 caracteres
Exemplo de execução:
fonte
Retina , 12 bytes
Simplesmente uma regex que corresponde a um caractere igual ao último caractere na entrada (exceto ele próprio). Quando recebe uma única regex, o Retina simplesmente retorna o número de correspondências.
fonte
Labirinto ,
32292724 bytesIsso lê o caractere único primeiro, seguido pela sequência na qual contar e assume que não há bytes nulos na sequência.
Explicação
O código começa com
),}
, que define a parte inferior da pilha1
, lê o primeiro caractere e o move para a pilha auxiliar para uso futuro. O1
contador será nosso (o deslocamento de 1 será cancelado posteriormente e é necessário que o IP faça as curvas necessárias).O IP agora será movido para baixo para ler o primeiro caractere da string de pesquisa
,
. O valor é negado com`
, novamente, para obter o comportamento correto de rotação. Enquanto estivermos lendo caracteres do STDIN, o IP agora segue este loop:{:}
faz uma cópia do código de caractere armazenado e o+
adiciona ao valor atual. Se o resultado for0
(ou seja, o personagem atual é o que estamos procurando), o IP avança:-
simplesmente se livra do0
,)
incrementa o contador,{}
é um não-op.No entanto, se o resultado depois
+
for diferente de zero, não queremos contar o caractere atual. Portanto, o IP vira à direita. Esse é um beco sem saída, para que o código seja executado duas vezes, uma para frente e outra para trás. Ou seja, o código real nesse caso se torna);___;)+-){}
.);
apenas se livra dessa diferença diferente de zero,___
pressiona 3 zeros, mas;
descarta um deles.)
incrementa um dos dois zeros restantes, os+
adiciona em um único1
,-
subtrai do contador e)
incrementa o contador. Em outras palavras, criamos um no-op muito elaborado.Quando atingimos o EOF,
,
empurra-1
, que`
se transforma1
e o IP vira à direita.-
subtrai o1
do contador (cancelando o deslocamento inicial).!
imprime o contador e@
finaliza o programa.fonte
Python 3, 29 bytes
Meh, isso foi fácil. Supõe que a entrada seja uma sequência de dez letras.
fonte
f=lambda x,y:x.count(y)
seria mais curto? (Desculpe se isso não funcionar, eu estou no celular e não pode verificar)print input().count(input())
oua,b=input();print a.count(b)
com a mesma quantidadeBoneco de neve 1.0.2 , 16 caracteres
Surpreendentemente curto. Explicação:
fonte
Metaprogramação de modelos em C ++,
160154116 bytesApenas pelas risadinhas.
Obrigado ao ex-bart por jogar golfe!
Uso: O primeiro caractere na instanciação do modelo é o caractere a ser pesquisado.
Conclua com clang -std = c ++ 11 -c -> o resultado está no início da mensagem de erro.
Conclua com gcc -std = c ++ 11 -c -> o resultado está na parte inferior da mensagem de erro.
Pesquise A < 3 , 't', '\ 000'> e A < 3 , 't', '\ x00'>
Versão de 154 bytes
Versão de 160 bytes:
fonte
((x==y)?1:0)
para(x==y)
economizar apenas 6 bytes (eu acho).bool
aint
conversão.enum
vez destatic const
. Use em0
vez de'\0'
para finalizar. Use emint
vez dechar
. Use uma declaração ligeiramente diferente para instanciar. Remova a nova linha superflouos.template<int w,int x,int y,int...s>class A{enum{a=A<w+(x==y),x,s...>::a};};A<0,'t','t','t','t','g','g','l','o','y','o','i',0>a;
. Verificado com g ++ e clang.Bash + grep, 26 bytes
fonte
Javascript (ES6), 26 bytes
Essa solução rápida e fácil define uma função anônima. Para usá-lo, adicione uma declaração de variável ao início. Experimente:
Mostrar snippet de código
EDIT: Ah, vejo que já existe uma solução muito semelhante. Espero que esteja tudo bem.
fonte
Haskell, 21 bytes
fonte
C ++, 78 bytes
Ligue assim:
fonte
Elemento , 23 bytes
A nova linha faz parte do programa. Na verdade, estou usando-o como um nome de variável .
Esse programa basicamente funciona armazenando o caractere de destino em uma variável, mantendo a string atual no topo da pilha e, em seguida, repetindo o processo "cortar, comparar e mover o resultado por baixo", somando os resultados no final.
A nova linha como um nome de variável vem do uso da nova linha no final da entrada, cortando-a e armazenando nela. A nova linha no código é onde eu li.
A entrada é assim:
A saída é assim
fonte
Julia,
2625 bytesA
findin
função retorna os índices no primeiro argumento no qual o segundo argumento é encontrado como um vetor. O comprimento do vetor é o número de ocorrências.Guardou um byte graças a Glen O.
fonte
endof
economizará um byte no lugar delength
.APL,
73 bytesIsso cria um trem de função. Ele funciona criando um vetor de zeros e aqueles correspondentes aos índices nos quais o caractere aparece na string (
⍷
). O vetor é então somado (+/
).Guardado 4 bytes graças a kirbyfan64sos e NBZ!
fonte
+/⍷
(eu não sei APL, então posso estar errado).Perl,
2116 caracteres(Código de 13 caracteres + opção de linha de comando de 3 caracteres.)
Exemplo de execução:
fonte
<>
!-l
e garantindo que sua entrada não tenha uma nova linha à direita:echo -en 'onomatopoe\no' | perl -pe '$_=eval"y/".<>."//"'
perl -pe '$_+=s/${\<>}//g'
+=
necessário?=
parece funcionar tão bem (e ainda deve funcionar quando a entrada começa com alguns dígitos).PHP,
3635 bytesUso:
chame o script com dois argumentos.
php script.php qwertzqwertz q
PHP, 23 bytes
Se você registrar Variáveis globais (somente possível no PHP 5.3 e abaixo), poderá salvar 12 bytes (graças a Martijn )
Uso:
chame o script e declare variáveis globais
php script.php?a=qwertzqwertz&b=q
fonte
script.php?a=qwertzqwertz&b=q
, e fazer<?=substr_count($a,$b);
, 23 caracteresDyalog APL , 3 bytes
Ou seja, "A soma dos bytes iguais". Por exemplo:
ou apenas
K não vence APL neste momento.
Experimente online.
fonte
T-SQL,
9940 bytesSimplesmente faz a diferença entre a string de entrada e a string com o caractere removido. Recebe informações da tabela t
A edição foi alterada para remover um problema na contagem de espaços e levar em consideração as entradas aceitáveis atuais para o SQL. Obrigado @BradC por todas as alterações e economias
fonte
SELECT LEN(s)-LEN(REPLACE(s,c,''))FROM t
, ondet
há uma tabela de entrada pré-preenchida com camposs
ec
.A B C D
essa que terminam em espaços (se você for solicitado a contar espaços), poisLEN
ignora os espaços finais.space
SELECT 11-LEN(REPLACE(s,c,'')+'x')FROM t
Oitava / Matlab, 33 bytes
fonte
J, 5 bytes
Sinto que J teria um built-in para isso, mas não consegui encontrar um - talvez um dos usuários ativos de J possa me esclarecer. Então, ao invés disso, isso se aplica primeiro
=
às entradas, transformando cada caractere1
se for igual ao solicitado ou0
não. Então+/
calcula a soma dessa lista.fonte
Arquivo em lote, 121 bytes
Porque eu sou masoquista ...
Aviso: Supõe que
_
isso não ocorra na sequência de entrada. Nesse caso, a variávele
precisa ser ajustada adequadamente.Isso configura nossa variável de contador
c
, e nossa demarcação de fim de sequência como_
, antes de anexá-la à nossa sequência de entrada%1
e definir a sequência concatenada comot
. Então, estamos entrando em loop:l
, definimos uma variável de caractere temporárioa
para ser o primeiro caracteret
, verifique se ela corresponde à nossa segunda string de entrada%2
e incrementoc
se true, e apare o primeiro caracteret
. Nossa condição de fim de loop ét
comparada à demarcação de fim de string e retorna, se não. Em seguida,echo
eliminamos o valor do nosso contador.Provavelmente seria possível usar um
FOR
loop, mas isso exigiria a ativação da DelayedExpansion , que eu acho que será mais longa em bytes do que isso. A verificação disso é deixada como um exercício para o leitor.fonte
CJam, 5 bytes
Explicação
fonte
PowerShell, 32 bytes
Um quatro por um! E eles são todos do mesmo comprimento! :)
ou
Alternativamente,
ou
Os dois primeiros estilos usam o operador inline
-split
, enquanto os dois segundos lançam implicitamente o primeiro argumento como uma String e usam o.Split()
operador baseado em string. Em todos os casos, uma matriz é retornada, onde devemos decrementar Count por um, pois estamos recebendo de volta mais um item da matriz do que as ocorrências do segundo argumento.Esse foi meio divertido ...
fonte
Julia, 21 bytes
Observe que exige que
c
seja um caractere, não uma sequência de caracteres únicos. Então você o usa comof("test me",'e')
(que retorna 2) e nãof("test me","e")
(que retorna 0, porque'e'!="e"
).fonte
> <> (Peixe) , 30 bytes
Pega a string e, em seguida, o caractere para contar. A entrada não está separada (pelo menos no intérprete online). Experimente no intérprete on-line: http://fishlanguage.com Eu contei os bytes manualmente, então, deixe-me saber se estou errado.
Explicação
Primeiro,> <> é bidimensional ee percorre uma linha ou coluna até encontrar um
;
erro. Isso significa que, se continuar da esquerda para a direita (como acontece no início de um programa), ele contornará a linha se chegar ao fim e não for movido ou instruído para interromper o programa. Alguns caracteres por linha serão repetidos porque têm funções diferentes, dependendo da direção do ponteiro, e a quarta linha terá caracteres na ordem inversa, porque o ponteiro se move da direita para a esquerda.Um resumo do programa é fornecido abaixo. Veja as instruções listadas para> <> nos esolangs para ver o que cada caractere individual faz.
Linha 1:
0&v
Linha 2:
=?\ilb
(começando onde a linha 1 move o ponteiro para, ou seja, o terceiro caractere)
linha 3:
=?\:@=&+&l1
(começando no terceiro caractere)
Linha 4:
n&/;
(começando no terceiro caractere)
fonte
Ruby,
2220 bytesDemonstração: http://ideone.com/MEeTd2
O
-1
é devido ao fato de quegets
recupera a entrada, além de um caractere de nova linha. RubyString#count
conta o número de vezes que qualquer caractere do argumento ocorre na string.Por exemplo, para a entrada [
test\n
,t\n
],t
ocorre duas vezes e\n
ocorre uma vez e precisa ser subtraído.fonte
$><<
e reduzir 4 bytes.p gets.count(gets)-1
Ruby, 18 bytes
Uso:
fonte
Japonês , 2 bytes
Experimente online!
fonte