Hola usuario de nuestra página, tenemos la respuesta a lo que buscabas, desplázate y la obtendrás un poco más abajo.
Solución:
Shell + coreutils, 6
Esta respuesta deja de ser válida si se utiliza una codificación que no sea UTF-8.
wc -mc
Salida de prueba:
$ printf '%s' "(~R∊R∘.×R)/R←1↓ιR" | ./count.sh
17 27
$
En caso de que el formato de salida se aplique estrictamente (solo un espacio separando los dos números enteros), entonces podemos hacer esto:
Shell + coreutils, 12
echo`wc -mc`
Gracias a @immibis por sugerir quitar el espacio después de la echo
. Me tomó un tiempo darme cuenta de eso: el shell expandirá esto a echo
y las pestañas por defecto están en $IFS
por lo que son separadores de fichas perfectamente legales en el comando resultante.
guion de golf, 14 12 bytes
.,p64/2^,,
Pruébelo en línea en Web GolfScript.
Ocurrencia
GolfScript no tiene ni idea de qué es Unicode; todas las cadenas (entrada, salida, internas) están compuestas por bytes. Si bien eso puede ser bastante molesto, es perfecto para este desafío.
UTF-8 codifica caracteres ASCII y no ASCII de manera diferente:
-
Todos los puntos de código por debajo de 128 se codifican como
0xxxxxxx
. -
Todos los demás puntos de código se codifican como
11xxxxxx 10xxxxxx ... 10xxxxxx
.
Esto significa que la codificación de cada carácter Unicode contiene un único 0xxxxxxx
byte o un solo 11xxxxxx
byte (y 0 a 5 10xxxxxx
bytes).
Al dividir todos los bytes de la entrada por 64giramos 0xxxxxxx
dentro 0 o 1, 11xxxxxx
dentro 3y 10xxxxxx
dentro 2. Todo lo que queda es contar los bytes cuyo cociente no es 2.
Código
(implicit) Read all input and push it on the stack.
. Push a copy of the input.
, Compute its length (in bytes).
p Print the length.
, Filter; for each byte in the original input:
64/ Divide the byte by 64.
2^ XOR the quotient with 2.
If the return is non-zero, keep the byte.
, Count the kept bytes.
(implicit) Print the integer on the stack.
Pitón, 42 40 bytes
lambda i:[len(i),len(i.encode('utf-8'))]
Gracias a Alex A. por los dos bytes de descuento.
Sencillo, hace lo que dice. con argumento i
imprime la longitud de i
entonces la longitud de i
en UTF-8. Tenga en cuenta que para aceptar la entrada de varias líneas, el argumento de la función debe estar entre comillas triples: '''
.
EDITAR: no funcionó para la entrada de varias líneas, así que en su lugar lo convertí en una función.
Algunos casos de prueba (separados por saltos de línea en blanco):
f("Hello, World!")
13 13
f('''
friends = ['john', 'pat', 'gary', 'michael']
for i, name in enumerate(friends):
print "iteration iteration is name".format(iteration=i, name=name)
''')
156 156
f("(~R∊R∘.×R)/R←1↓ιR")
17 27
Sección de Reseñas y Valoraciones
Si para ti ha sido de utilidad nuestro post, nos gustaría que lo compartas con el resto entusiastas de la programación y nos ayudes a extender este contenido.