Tarea
Su tarea es producir una cadena que contenga caracteres promedio de cadena. El primer carácter del resultado sería el carácter promedio del primer carácter (que es el primer carácter) y el promedio del segundo carácter de los dos primeros caracteres y así sucesivamente.
¿Qué es el personaje promedio?
Las cadenas son matrices de bytes. El carácter promedio de la cadena se puede encontrar calculando el promedio de los valores ASCII de los caracteres en la cadena y tomando el carácter ASCII correspondiente.
Por ejemplo, la cadena "Hello!"
se puede escribir como secuencia de bytes 72 101 108 108 111 33
. El promedio de los valores ascii es 533/6 = 88.833 ... y cuando se redondea al entero más cercano obtenemos 89, que es el código ascii para la letra cautiva Y
.
Reglas
- Puede suponer que la entrada contiene solo caracteres ASCII imprimibles
- La entrada se puede leer desde stdin o como argumentos de línea de comando o como argumentos de función
- La salida debe ser estándar. Si su programa es funcional, también puede devolver la cadena que de lo contrario imprimiría.
- Debe ser un programa o función completa, no un fragmento
- Se aplican lagunas estándar
- Los enteros se redondean por función
floor(x+0.5)
o función similar.
¿Cómo gano?
Este es el código de golf , por lo que la respuesta más corta (en bytes) en victorias.
Ejemplos
Hello!
→HW^adY
test
→tmop
42
→43
StackExchange
→Sdccd_ccccddd
Respuestas:
Brainfuck 106 bytes
Esta es mi primera participación en un código de golf, ¡sé gentil! Funciona, pero Brainfuck no puede manejar flotantes (no que yo sepa), por lo que el valor redondeado siempre es el inferior (podría arreglar mi algoritmo más adelante).
Además, el algoritmo promedia los valores 2 por 2, lo que significa que podría ser inexacto en algunos puntos. Y también necesito corregir un error que está imprimiendo un número al final de la salida.
fuente
Pyth, 16 bytes
Muy claro. Usar en
s+.5
lugar de redondear, porque por alguna razónround(0.5, 0)
es 0 en Python.fuente
0.5
redondeado debe ser1
.Q,
1512 bytes12 bytes como una expresión
o 15 bytes como una función
aprovecha
fuente
"c"$avgs"i"$
? No creo que una solución pueda ser mucho más sencilla que eso. :)"c"
a `c y"i"
a` i.CJam, 19 bytes
Pruébelo en línea en el intérprete de CJam .
fuente
Perl:
3130 caracteres(Código de 29 caracteres + opción de línea de comando de 1 carácter).
Ejecución de muestra:
fuente
C #
189135134106BytesSe puede ver aquí
Golfista por primera vez
fuente
K, 36 bytes
Uso:
_ci
y_ic
convertir ascii a caracteres y viceversa, respectivamente.{(+/x)%#x}
es un modismo clásico de K para calcular una media. Bastante sencillo en general.Editar: oh, leí mal la especificación. `0: es necesario para imprimir el resultado en stdout. Esperando aclaraciones sobre la entrada re. La pregunta de Dennis.
fuente
{[s]`0:`c${_.5+(+/u)%#u:x#s}'1+!#s}
.`0:`c$_.5+{(+/x)%#x}'1_|(-1_)\
`c$_.5+{(+\x)%+\~^x}`i$
para 24. Podría ser más corto (`c$`i${(+\x)%+\~^x}`i$
), pero su REPL ( johnearnest.github.io/ok/index.html ) no se redondea correctamente al pasar de float a int. Dudaría en llamar a esta solución ak desde entonces_ci
y_ic
no estoy en ninguna parte de la especificación K5 por lo que puedo decir, mientras0:
que no imprime en stdout sino que lee un archivo txt del disco._ci
y_ic
se reemplazan por completo en K5 con las formas similares`c$
. La solución original que publiqué es compatible con Kona, que se basa en K2 / K3. Generalmente trato de no publicar soluciones con oK específicamente porque la semántica todavía está cambiando y es parcialmente inexacta.`0:_ci_0.5+{(+\x)%1.+!#x}_ic
Mathematica, 75 bytes
fuente
Julia,
8581 bytesEsto crea una función sin nombre que acepta una cadena y crea un vector de sus puntos de código ASCII. Las medias se toman para cada grupo secuencial, se redondean a enteros, se convierten en caracteres, se unen en una cadena y se imprimen en STDOUT.
fuente
Ruby, 46
ideona .
Con disculpas, mi respuesta terminó siendo lo suficientemente diferente como para que valiera la pena publicarla.
$<.bytes
itera sobre cada byte en stdin, por lo que imprimimos el promedio móvil en cada ciclo. '% c' convierte un flotador en un personaje redondeando hacia abajo y tomando el ASCII, por lo que todo lo que tenemos que hacer es agregar 0.5 para que se redondee correctamente.$.
es una variable mágica que comienza inicializada en 0; se supone que almacena el recuento de líneas, pero dado que aquí queremos el recuento de bytes, simplemente lo incrementamos manualmente.fuente
Mathcad, 60 "bytes"
Mathcad es una aplicación matemática basada en hojas de trabajo 2D compuestas de "regiones", cada una de las cuales puede ser texto, una expresión matemática, un programa, un diagrama o un componente con guión.
Una instrucción matemática o de programación se selecciona de una barra de herramientas de paleta o se ingresa usando un atajo de teclado. Para fines de golf, se considera que una operación ("byte") es el número de operaciones de teclado necesarias para crear un nombre o expresión (por ejemplo, para establecer la variable a en 3, escribiríamos un: = 3. El operador de definición : = es una sola pulsación de tecla ":", al igual que ay 3 que dan un total de 3 "bytes". La programación para el operador requiere escribir ctl-shft- # (o un solo clic en la barra de herramientas de programación) así que de nuevo es equivalente a 1 byte
En Mathcad, el usuario ingresa comandos de lenguaje de programación utilizando métodos abreviados de teclado (o seleccionándolos de la barra de herramientas de programación) en lugar de escribirlos en texto. Por ejemplo, al escribir ctl-] se crea un operador de bucle while que tiene dos "marcadores de posición" para ingresar la condición y una sola línea del cuerpo, respectivamente. Escribir = al final de las expresiones de Mathcad hace que Mathcad evalúe la expresión.
(Cuente bytes) Al mirarlo desde una perspectiva de entrada del usuario y equiparar una operación de entrada de Mathcad (por lo general, hacer clic con el mouse en la barra de herramientas si no hay un acceso directo de kbd) a un carácter e interpretar esto como un byte. csort = 5 bytes, ya que se escribe char-by-char al igual que otros nombres de variables / funciones. El operador for es una construcción especial que ocupa 11 caracteres (incluidos 3 "marcadores de posición" en blanco y 3 espacios) pero se ingresa mediante ctl-shft- #, por lo tanto = 1 byte (similar a los tokens en algunos idiomas). Escribir '(cita) crea paréntesis equilibrados (generalmente), por lo que cuenta como 1 byte. Indexación v = 3 bytes (tipo v [k).
fuente
Python 3, 66 bytes
Si lo uso en
round()
lugar deint(.5+
etc., guarda un personaje, pero técnicamente no cumple con el desafío: lasround()
mitades de las rondas de Python al entero par más cercano, no hacia arriba. Sin embargo, funciona correctamente en todas las entradas de muestra.También me siento un poco sucio por no terminar la salida con una nueva línea, pero el desafío no requiere que ...
fuente
print(end=chr(int(...))
para guardar algunos bytesJavaScript (ES6), 75 bytes
No puedo creer que todavía no haya una respuesta JS con esta técnica ...
fuente
Pitón 2, 71
Con cada nuevo personaje, actualiza la suma de caracteres
s
y el número de caracteresi
para calcular y agregar el carácter promedio.fuente
print
. ¿Funcionará eso con Python 2? Olvidé ahora cómo suprimir las nuevas líneas en laprint
declaración ... la coma hace un espacio en cambio, ¿verdad?)print _,
para dejar un espacio en lugar de una nueva línea, pero no hay una buena manera de omitir el espacio. Buena decisión con elend
argumento de Python 3 , me había olvidado de eso.print'\b'+_,
Ruby 59
61Prueba: http://ideone.com/dT7orT
fuente
c+=1;(s/c)
→(s/c+=1)
ideone.com/H2tB9WJava, 100
Al igual que muchas otras respuestas aquí, estoy sumando y promediando en un bucle. Solo aquí para representar a Java :)
Mi código original es un 97, pero solo devuelve el modificado en
char[]
lugar de imprimirlo:Ahora, es lo suficientemente largo para que aparezcan barras de desplazamiento para mí, así que aquí hay una versión con algunos saltos de línea, solo porque:
fuente
test
es una matriz de caracteres, solo úselaf(test);
. Si es un objeto String, entonces lo usaríasf(test.toCharArray());
. Los literales de cadena también están bien así:f("Hello!".toCharArray());
toCharArray()
Yo estúpido, traté de violarlo con un poco de casting. Gracias.C, 62 bytes
(enlace ideone)
Los resultados son ligeramente diferentes de los ejemplos del OP, pero solo porque este código redondea 0.5 hacia abajo en lugar de hacia arriba. ¡Ya no!
fuente
R,
135127 BytesEsto se hizo largo muy rápido y realmente me equivoqué la primera vez :) Necesito leer las preguntas correctamente.
Prueba de funcionamiento
fuente
utf8ToInt
ayudará! Tengo un golf de 68 bytes de esto si quieres actualizarlo.Perl 5, 41 bytes
correr como
fuente
TSQL, 118 bytes
Caracteres que vuelven verticales
fuente
> <> , 30 bytes
&
registroPuede probarlo en el intérprete en línea, pero luego debe usar la siguiente versión, porque el intérprete en línea rellena el cuadro de código en un rectángulo y se aplica
?
a los espacios.fuente
05AB1E , 15 bytes [¿No compite?]
Pruébalo en línea!
fuente
D
y}
, y reemplazandos
cony
..p
es un 1byter ahora tambiénη
xDJapt , 13 bytes (no competidor)
¡Pruébalo en línea!
Cómo funciona
fuente
Japt , 11 bytes
Intentalo
fuente
PHP , 176 bytes
Ejemplo:
La solución más grande hasta ahora, pero creo que basada en php no puede ser mucho más corta. Se pueden guardar 2 bytes eliminando las nuevas líneas.
fuente
JavaScript ES7, 122 bytes
Casi todo está sucediendo en este momento
El resto es bucle / conversión de código de caracteres
Separar:
Si las funciones no están permitidas:
133 bytes
Fragmento de ES5:
fuente
Python 2, 106 bytes
No es lo suficientemente corto. Como es Python, es demasiado detallado, incluso puedes leer lo que hace buscando código. Pero está funcionando.
fuente
Matlab, 43
Usando una función anónima:
Ejemplos:
fuente
JavaScript ES6, 111 bytes
Esto es molestamente largo gracias, en parte, a las funciones
String.fromCharCode
ycharCodeAt
funciones largas de JavaScript . El fragmento de pila contiene código no comprobado, comentado y comprobable.fuente
Factor, 80 bytes
fuente