Desafío
Escriba un programa que, dada una cadena de x
10 caracteres de longitud y un carácter y
, muestre el número de veces que el carácter y
aparece en la cadena x
.
El programa más corto en bytes para hacerlo gana.
Ejemplo
Input: tttggloyoi, t
Output: 3
Input: onomatopoe, o
Output: 4
Respuestas:
Pyth, 3 bytes
Ejemplo de ejecución:
Por supuesto, el usuario podría ingresar más o menos de 10 letras en la primera entrada, pero no debemos preocuparnos por lo que sucede cuando el usuario viola la especificación.
fuente
/
solo cuenta el número de ocurrencias en la primera cadena de entrada de la segunda cadena de entrada.w
toma una línea de entrada.Pyth - 3 bytes
Una respuesta Pyth diferente, menos obvia, del mismo tamaño. Se pliega contando sobre la entrada.
Test Suite .
fuente
JavaScript, 32
fuente
Bash, 24 caracteres
Ejecución de muestra:
fuente
Retina , 12 bytes
Simplemente una expresión regular que coincide con un carácter que es igual al último carácter de la entrada (excepto a sí mismo). Cuando se le da una sola expresión regular, Retina simplemente devuelve el número de coincidencias.
fuente
Laberinto ,
32292724 bytesEsto lee primero el carácter único, seguido de la cadena en la que se debe contar, y supone que no hay bytes nulos en la cadena.
Explicación
El código comienza con
),}
, que establece la parte inferior de la pila en1
, lee el primer carácter y lo mueve a la pila auxiliar para su uso futuro. El1
será nuestro contador (el desplazamiento de 1 será cancelada más tarde y es necesario que el IP para tomar las vueltas necesarias).La IP ahora se moverá hacia abajo para leer el primer carácter de la cadena de búsqueda con
,
. El valor se niega con`
, nuevamente, para obtener el comportamiento de giro correcto. Mientras leemos caracteres de STDIN, la IP ahora seguirá este ciclo:{:}
realiza una copia del código de caracteres almacenado y lo+
agrega al valor actual. Si el resultado es0
( es decir, el personaje actual es el que estamos buscando), la IP se mueve hacia adelante:-
simplemente se deshace de él0
,)
incrementa el contador,{}
no funciona.Sin embargo, si el resultado posterior
+
no es cero, no queremos contar el carácter actual. Entonces, la IP toma un giro a la derecha en su lugar. Eso es un callejón sin salida, por lo que el código allí se ejecuta dos veces, una hacia adelante y otra hacia atrás. Es decir, el código real en este caso se convierte);___;)+-){}
.);
simplemente se deshace de esa diferencia que no es cero,___
empuja 3 ceros, pero;
descarta uno de ellos.)
incrementa uno de los dos ceros restantes, los+
suma en uno solo1
, lo-
resta del contador e)
incrementa el contador. En otras palabras, hemos creado un no-op muy elaborado.Cuando golpeamos EOF,
,
empuja-1
, que se`
convierte1
y la IP gira a la derecha.-
resta el1
del contador (cancelando el desplazamiento inicial).!
imprime el contador y@
finaliza el programa.fuente
Python 3, 29 bytes
Meh, esto fue fácil. Asume que la entrada es una cadena de diez letras.
fuente
f=lambda x,y:x.count(y)
sería más corto? (Lo siento si esto no funciona, estoy en el móvil y no puedo verificar)print input().count(input())
oa,b=input();print a.count(b)
con la misma cantidadMuñeco de nieve 1.0.2 , 16 caracteres
Sorprendentemente corto. Explicación:
fuente
C ++ Template-Metaprogramación,
160154116 bytesSolo por las risas.
¡Gracias a ex-bart por jugar golf!
Uso: El primer carácter en la instancia de plantilla es el personaje a buscar.
Cumple con clang -std = c ++ 11 -c -> el resultado está al comienzo del mensaje de error.
Cumple con gcc -std = c ++ 11 -c -> el resultado está en la parte inferior del mensaje de error.
Busque A < 3 , 't', '\ 000'> y A < 3 , 't', '\ x00'>
Versión de 154 bytes
Versión de 160 bytes:
fuente
((x==y)?1:0)
solo(x==y)
para ahorrar unos 6 bytes (creo).bool
deint
la conversión.enum
lugar destatic const
. Use en0
lugar de'\0'
terminar. Usar enint
lugar dechar
. Use una declaración ligeramente diferente para instanciar. Eliminar superflouos nueva línea.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;
. Comprobado con g ++ y clang.Bash + grep, 26 bytes
fuente
Javascript (ES6), 26 bytes
Esta solución rápida y fácil define una función anónima. Para usarlo, agregue una declaración de variable al principio. Pruébalo:
Mostrar fragmento de código
EDITAR: Oh, veo que ya hay una solución muy similar. Espero que esté bien.
fuente
Haskell, 21 bytes
fuente
C ++, 78 bytes
Llame así:
fuente
Elemento , 23 bytes
La nueva línea es parte del programa. En realidad lo estoy usando como un nombre de variable .
Básicamente, este programa funciona almacenando el carácter de destino en una variable, manteniendo la cadena actual en la parte superior de la pila y luego haciendo un bucle en el proceso "cortar, comparar y mover el resultado debajo", sumando los resultados al final.
La nueva línea como nombre de variable proviene del uso de la nueva línea al final de la entrada cortándola y almacenándola. La nueva línea en el código es donde leí.
La entrada es así:
La salida es así
fuente
Julia,
2625 bytesLa
findin
función devuelve los índices en el primer argumento en el que el segundo argumento se encuentra como un vector. La longitud del vector es el número de ocurrencias.Guardado un byte gracias a Glen O.
fuente
endof
te ahorrará un byte en lugar delength
.APL,
73 bytesEsto crea un tren de funciones. Funciona creando un vector de ceros y unos correspondientes a los índices en los que aparece el carácter en la cadena (
⍷
). El vector se suma (+/
).¡Guardado 4 bytes gracias a kirbyfan64sos y NBZ!
fuente
+/⍷
eso (no sé APL, así que podría estar equivocado).Perl,
2116 caracteres(Código de 13 caracteres + opción de línea de comando de 3 caracteres).
Ejecución de muestra:
fuente
<>
!-l
y asegurarse de que su entrada no tenga una nueva línea final:echo -en 'onomatopoe\no' | perl -pe '$_=eval"y/".<>."//"'
perl -pe '$_+=s/${\<>}//g'
+=
necesario?=
parece funcionar igual de bien (y aún debería funcionar cuando la entrada comienza con algunos dígitos).PHP,
3635 bytesUso:
llame al script con dos argumentos.
php script.php qwertzqwertz q
PHP, 23 bytes
Si registra Variables globales (solo posible en PHP 5.3 y versiones posteriores) puede guardar 12 bytes (gracias a Martijn )
Uso:
llame al script y declare variables globales
php script.php?a=qwertzqwertz&b=q
fuente
script.php?a=qwertzqwertz&b=q
, y hacer<?=substr_count($a,$b);
, 23 caracteresDyalog APL , 3 bytes
Es decir, "La suma de los bytes iguales". P.ej:
o solo
K no supera a APL esta vez.
Pruébalo en línea.
fuente
T-SQL,
9940 bytesSimplemente hace una diferencia entre la cadena de entrada y la cadena con el carácter eliminado. Toma información de la tabla t
Editar cambiado para eliminar un problema con los espacios de conteo y para tener en cuenta las entradas aceptables actuales para SQL. Gracias @BradC por todos los cambios y ahorros
fuente
SELECT LEN(s)-LEN(REPLACE(s,c,''))FROM t
, dondet
hay una tabla de entrada rellenada previamente con camposs
yc
.A B C D
esa que terminan en espacios (si se le pide que cuente espacios), ya queLEN
ignora los espacios finales.space
SELECT 11-LEN(REPLACE(s,c,'')+'x')FROM t
Octava / Matlab, 33 bytes
fuente
J, 5 bytes
Siento que J tendría una función incorporada para esto, pero no he podido encontrar una, tal vez uno de los usuarios activos de J puede iluminarme. Por lo tanto, esto primero se aplica
=
a las entradas, convirtiendo cada carácter en1
si es igual al solicitado o0
no. Luego+/
calcula la suma de esa lista.fuente
Archivo por lotes, 121 bytes
Porque soy masoquista ...
Advertencia: Asume que eso
_
no ocurre en la cadena de entrada. Si lo hace, entonces la variablee
debe ajustarse adecuadamente.Esto configura nuestra variable de contador
c
, y nuestra demarcación de fin de cadena como_
, antes de agregar eso a nuestra cadena de entrada%1
y establecer la cadena concatenada ent
. Luego, estamos ingresando al bucle:l
, establecemos una variable de caracteres temporala
para que sea el primer caráctert
, verificamos si coincide con nuestra segunda cadena de entrada%2
e incrementamosc
si es verdadero, luego recortamos el primer caráctert
. Nuestra condición de fin de ciclo se comparat
con nuestra demarcación de fin de cadena, y se repite si no. Nosotros entoncesecho
sacamos el valor de nuestro contador.Probablemente sería posible usar un
FOR
bucle en su lugar, pero eso requeriría habilitar DelayedExpansion , que creo que en realidad será más largo en bytes que esto. La verificación de eso se deja como ejercicio para el lector.fuente
CJam, 5 bytes
Explicación
fuente
PowerShell, 32 bytes
¡Un cuatro por uno! ¡Y todos tienen la misma longitud! :)
o
Alternativamente,
o
Los dos primeros estilos usan el operador en línea
-split
, mientras que los dos siguientes arrojan implícitamente el primer argumento como una cadena y usan el.Split()
operador basado en cadenas. En todos los casos, se devuelve una matriz, donde debemos disminuir Count por uno, ya que estamos recuperando un elemento de matriz más que las ocurrencias del segundo argumento.Este fue un poco divertido ...
fuente
Julia, 21 bytes
Tenga en cuenta que requiere que
c
sea un carácter, no una cadena de un solo carácter. Entonces lo usa comof("test me",'e')
(que devuelve 2) y nof("test me","e")
(que devuelve 0, porque'e'!="e"
).fuente
> <> (Pescado) , 30 bytes
Toma la cadena, luego el personaje para contar. La entrada no está separada (al menos en el intérprete en línea). Pruébelo en el intérprete en línea: http://fishlanguage.com Conté los bytes a mano, así que avíseme si me equivoco.
Explicación
En primer lugar,> <> es bidimensional y recorre una línea o columna hasta que golpea un
;
error. Esto significa que si continúa de izquierda a derecha (como lo hace al comienzo de un programa), se ajustará a la línea si llega al final y no se mueve o se le dice que detenga el programa. Algunos caracteres por línea se repetirán porque tienen diferentes funciones dependiendo de la dirección del puntero, y la cuarta línea tendrá caracteres en orden inverso porque el puntero se mueve de derecha a izquierda.A continuación se proporciona un resumen del programa. Mira las instrucciones enumeradas para> <> en esolangs para ver qué hace cada personaje individual.
Línea 1:
0&v
Línea 2:
=?\ilb
(comenzando donde la línea 1 mueve el puntero, es decir, el tercer carácter)
línea 3:
=?\:@=&+&l1
(a partir del tercer personaje)
Línea 4:
n&/;
(a partir del tercer personaje)
fuente
Ruby,
2220 bytesDemostración: http://ideone.com/MEeTd2
Esto
-1
se debe al hecho de quegets
recupera la entrada, más un carácter de nueva línea. RubyString#count
cuenta la cantidad de veces que cualquier carácter del argumento ocurre en la cadena.Por ejemplo, para la entrada [
test\n
,t\n
],t
ocurre dos veces y\n
ocurre una vez, y debe restarse.fuente
$><<
y reducir 4 bytes.p gets.count(gets)-1
Rubí, 18 bytes
Uso:
fuente
Japt , 2 bytes
Pruébalo en línea!
fuente