En tipografía, un contador es el área de una letra que está total o parcialmente encerrada por una forma de letra o un símbolo. Un contador cerrado es un contador que está completamente encerrado por una letra o símbolo. Debe escribir un programa toma una cadena como entrada e imprime el número total de contadores cerrados en el texto.
Tu aportación:
Puede ser una entrada de línea de comando, o de STDIN, pero debe especificar cuál.
Consistirá completamente en los caracteres ASCII imprimibles, lo que significa que todos los valores ASCII entre 32 y 126 inclusive. Esto incluye espacios. Más información.
Ahora, esto varía ligeramente entre las fuentes. Por ejemplo, la fuente en la que está leyendo esto considera que 'g' tiene un contador cerrado, mientras que la fuente de google tiene 'g' con dos contadores cerrados. Para que esto no sea un problema, aquí está el número oficial de contadores cerrados por personaje.
Todos los símbolos sin contadores cerrados:
!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~
Tenga en cuenta que esto incluye el espacio.
Aquí están todos los símbolos con un contador cerrado:
#0469@ADOPQRabdegopq
Y aquí están todos los símbolos con 2 contadores cerrados:
$%&8B
Y por último pero no menos importante, aquí hay algunas entradas y salidas de muestra.
Programming Puzzles and Code-Golf
debería imprimir 13
4 8 15 16 23 42
debería imprimir 5
All your base are belong to us
debería imprimir 12
Standard loopholes apply
debería imprimir 12
Shortest answer in bytes is the winner!
debería imprimir 8
g
tiene dos contadores cerrados. ¿Determinó los contadores en función de alguna fuente en particular?g
tiene 2. Ligeramente confuso de leer, pero no creo que sea diferente por ubicación.0
tiene 2 contadores cerrados en ciertas fuentes, especialmente muchas fuentes monoespaciales?Respuestas:
Pyth, 31 bytes
Demostración.
Tenga en cuenta que el código puede no mostrarse correctamente debido al uso de caracteres no ASCII. El código correcto está en el enlace.
Hice una tabla de búsqueda de la salida deseada para cada carácter de entrada, la giré 32 para hacer uso de la indexación modular de Pyth, pegué un 1 al principio, y lo interpreté como un número base 3, dando el número
2229617581140564569750295263480330834137283757
. Luego convertí este número a base 256 y lo convertí en una cadena, que es la cadena utilizada en la respuesta.fuente
Pitón 3, 63
Un enfoque directo. Itera sobre cada personaje con un contador cerrado, sumando el número de ocurrencias, haciéndolo dos veces para los personajes con dos contadores cerrados. Sería de la misma longitud escribir en su lugar
Python 3 es necesario para evitar
raw_input
.fuente
CJam,
41393734 bytes¡Gracias a @ jimmy23013 por jugar golf 3 bytes!
Pruébalo en línea.
Cómo funciona
fuente
"$%&8Badopq#0469@Rbeg"_A<eu+
.eu
yel
, pero nunca encontré eso. ¡Gracias!sed, 51
Con la ayuda de golf de @manatwork y @TobySpeight:
Entrada de STDIN. Con esta metapregunta en mente , el resultado es unario:
fuente
Perl, 41
41
caracteres +1 para la-p
bandera.Esto usa y /// para contar los caracteres.
fuente
GNU APL, 39 bytes
Pruébelo en línea en APL.js GNU .
Cómo funciona
fuente
JavaScript, 86
E / S a través de una ventana emergente. Ejecute el fragmento en cualquier navegador reciente
dpara probar.fuente
K,
54434237 bytes¡Corte 5 bytes gracias a @JohnE!
Versión antigua:
Original:
fuente
#&
interior de los parens podría ser tan fácil+/
, lo que significa que podría ir más allá+//"#0469@ADOPQRabdegopq$%&8B$%&8B"=\:
. Finalmente, no es necesario tener elf:
ya que la función se puede usar en forma tácita. ¡Eso te llevaría a 38!+//(30#"$%&8B#0469@ADOPQRabdegopq")=\:
. Esto puede ser lo mejor que podemos hacer.+//(30#"$%&8B#0469@ADOPQRabdegopq"=)'
C, 127 bytes
Muy claro. Versión sin golf:
Pruébalo aquí
Si los argumentos de la función no están permitidos, la
stdin
versión ocupa hasta 141 bytes:Tenga en cuenta que la versión anterior supone que la entrada tiene una longitud máxima de 98 caracteres.
Pruébalo aquí
Versión de argumentos de línea de comandos (143 bytes):
Pruébalo aquí
fuente
Python 2,
96907567 + 2 = 69 BytesNo se me ocurre otra forma de hacer esto ... es lo que habría pensado hasta que vi la solución de xnor. Publicaré lo que tenía de todos modos.
Gracias a FryAmTheEggman por guardar 6 bytes
Muy bien, ahora estoy feliz con esto.
Gracias a xnor por el truco de búsqueda, ahorrando 4 bytes.
Se agregaron dos bytes ya que la entrada debe estar entre comillas.
fuente
Java, 162
Bueno si tiene que ser un programa completo ... Es solo una línea que coincide con los caracteres y los reemplaza con una cadena más larga. Luego, devuelve la diferencia en longitud del original. Desafortunadamente, Java realmente no tiene nada para contar la cantidad de partidos.
Aquí está con saltos de línea:
fuente
Pyth - 35 bytes
Utiliza el método obvio de in first + * 2 in second. Gracias @FryTheEggman.
Pruébalo aquí en línea .
fuente
Javascript,
11495 bytesGracias a Ismael Miguel por ayudarme a jugar golf.
fuente
alert(prompt().replace(/[#046@ADOPQRabdegopq]/g,9).replace(/[$%&8B]/g,99).match(/9/g).length)
Ruby, 59 bytes
Entrada desde la línea de comando o stdin. Más corto hasta ahora utilizando un lenguaje no esotérico.
Actualización: chilemagic me ganó
fuente
Retina , 44 bytes
Da salida en unario.
Cada línea debe ir a su propio archivo o puede usar la
-s
bandera. P.ej:Los pares de líneas (patrón - pares sustitutos) realizan los siguientes pasos de sustitución:
1
's1
11
1
'sfuente
J, 43
Como una función:
46 bytes (línea de comando)
Como un programa de línea de comandos independiente:
Guarde la línea anterior como
counter2.ijs
y llame desde la línea de comando:fuente
f=:your_function_code
.Julia,
7774 bytesEsto lee el texto de STDIN e imprime el resultado en STDOUT.
Ungolfed + explicación:
Ejemplo:
fuente
rs , 56 bytes
Demo en vivo.
fuente
GNU APL, 37 caracteres
construya un vector de caracteres que contenga dos caracteres de dos contadores dos veces (30⍴)
compare cada carácter de entrada con cada carácter en el vector (∘. =)
resumir coincidencias desenredadas (+ /,)
fuente
Javascript
159, 130 bytesno minificado:
Con la ayuda de @ edc65:
fuente
~ -1 == 0
, puedes escribir en~x?
lugar de-1 != x?
. Verme respuesta para un ejemplo de uso.function c(b){return b.split('').reduce(function(t,a){return t+(~"$%&8B".indexOf(a)?2:~"#0469@ADOPQRabdegopq".indexOf(a)?1:0)},0)}
No es necesario tenermap
entoncesreduce
Haskell, 117
c es una función
c :: Int -> String -> Int
que toma un contador y una cadena y recorre la cadena letra por letra para verificar si la letra actual es miembro de la matriz de 1 punto o de la matriz de 2 puntos y se llama a sí misma para el resto de la cadena después de aumentar el contador la cantidad adecuada.Llamada con contador = 0 en ghci:
fuente
C #, 157
Sin golf:
Convirtiendo la cadena en una matriz de caracteres, luego viendo si cada carácter está en cualquiera de los contadores. Si está en el segundo, solo tengo que incrementar el contador nuevamente.
fuente
Erlang, 103 bytes
Este es un programa completo que se ejecuta usando escript. La primera línea del archivo debe estar en blanco (agregando 1 byte).
Ejecución de muestra:
fuente
C, 99 bytes
Explicación
Seguí jugando la respuesta de Cool Guy ; se hizo demasiado largo para ser un comentario. En lugar de
if
/else
, aproveché la!
conversión de un puntero a bool. También hiceo
includet
para poder agregar "está adentroo
" y "está adentrot
" para el número total de contadores.Código ampliado
La salida está en
num
, que debe borrarse antes de cada llamada.Programa de prueba y resultados
El código en sí contiene 37 contadores por su propia métrica.
fuente