Cree un programa que calcule el peso de una cadena. El ganador es el programa con el menor peso de hamming.
Reglas:
- El peso de Hamming para un carácter ASCII se define como el número total de bits establecido
1
en su representación binaria. - Suponga que la codificación de entrada es ASCII de 7 bits, se pasa a través de cualquier mecanismo de entrada que sea normal para su idioma (por ejemplo, stdin, args, etc.)
- Envíe el resultado, como un número, a stdout o cualquier mecanismo de salida predeterminado / normal que utilice su idioma.
- Debería ser evidente, pero debe ser capaz de ejecutar el programa, en la vida real, para que sea una solución válida.
- Winner es la solución cuyo código tiene el menor peso de hamming.
Lo sentimos, no hay soluciones en espacios en blanco para este!Ok, puedes codificar en espacios en blanco ahora que he resuelto las reglas :)
Ejemplos por personaje:
char | binary | weight
-----+----------+-------
a | 01100001 | 3
x | 01111000 | 4
? | 00111111 | 6
\x00 | 00000000 | 0
\x7F | 01111111 | 7
code-golf
binary
number-theory
Polinomio
fuente
fuente
0x20
/ ASCII 32 como referencia, ¿no es el zumbido dehello world
10 en lugar de 11?hello world
11? Solo 10 caracteres son diferentes de un espacio. Además, el peso de Hamming de un programa parece ser solo su longitud, excluyendo espacios. No es tan diferente del código normal de golf.~
Yo
.Respuestas:
J (33)
¡Uno más bajo que 34!
Muy inspirado por esta respuesta , pero con un peso de uno más bajo.
fuente
J, peso 34
Uso: coloque la cadena que se medirá entre comillas al final:
Alternativamente, tomando la entrada del teclado (peso 54):
fuente
J , 39
Esta es una función que toma un argumento. (O reemplace
]
con la cadena directamente; como señala Gareth, eso reduce el costo a 34).fuente
Pitón, 189
fuente
print(sum(bin(ord(A)).count('1')for A in input()))
, tiene una puntuación de 180.QBasic,
322311286264El tipo de herramienta adecuada para el trabajo, todavía apesta, por supuesto.
fuente
Unario 0
Todos sabían que se acercaba. Primero el programa BrainFuck:
Agregué nuevas líneas para que sea "legible", pero tiene un peso de Hamming de 4066. Funciona al obtener repetidamente el cociente / restos de una cadena de entrada y sumar todos los restos. Por supuesto, si lo ejecuta en sí mismo, obtiene: 226 (4066% 256) (técnicamente \ xe2) tan claramente que se declara ganador.
Ahora lo convertimos a Unary y obtenemos
Utilizamos una implementación unaria con caracteres NULL \ x00 para '0' y boom, con un peso de 0.
Pregunta adicional : ¿Para qué caracteres ASCII
c
puede ejecutar este programa en una cadena que consiste enN
repeticiones y hacer que emita ese carácter? (Por ejemplo, una cadena de 32 espacios da un espacio). Qué valores deN
trabajo (un número infinito de ellos funcionará o ninguno lo hará).fuente
main(){ bignum Unarynum = 0; int c; while(EOF!=(c=readchar())){ Unarynum++; } return Unarynum; }
no importa en absoluto lo que elijas ser tu personaje Unary (siempre que no sea EOF).C, peso
322263256¿Cuenta el peso de hamming del peso de hamming?
Utilizado principalmente técnicas de golf estándar.
Un solo bucle calcula el peso (desplazando a la derecha y sumando hasta cero) y escanea la cadena (avanza el puntero cuando llega a cero).
Suponiendo que
D
se inicializa a 2 (parámetro único).Optimizaciones específicas del peso de Hamming:
1.
ABDH
, con un peso de 2 cada uno, utilizado para los nombres.2.
*++H
preferido sobreH[1]
.fuente
main(D,H,A)char*A,**H;{for(A=*++H;*A;A+=!(*A/=2))if(*A%2)printf("@");}
@
había un dígito en el sistema unario. Pensé que sólo utiliza0
..0
. Pero si quieres ir de esta manera,printf("@"+*a%2)
es más corto.Golfscript
847258(gracias a Howard y Peter Taylor por su ayuda)
Entrada: la cadena de entrada debe estar en la pila (pasada como argumento de línea de comando, o simplemente colocada en la pila).
En caso de que lo ejecute desde la línea de comando, asegúrese de usarlo
echo -n
; de lo contrario, la nueva línea final también se contará.Salida: imprime el valor del peso de hamming en la consola
El programa se puede probar aquí .
fuente
BASE
lugar debase
. Actualización: Acabo de marcar,BASE
no funciona. Buena solución :)TEST
/test
comentario :) Pero no funciona.{...}2*
aplicando2base~
en primer lugar. Obtiene un puntaje de 72.;
antes de la cadena que sustituye por stdin, por lo que(;
es innecesario. Luego, la observación de Howard lo reduce a 65.Perl, 80 (22 caracteres)
Hecho y hecho:
O aquí hay una versión alternativa con un peso de 77 (21 caracteres):
Sin embargo, no me gusta mucho esa versión porque su salida omite la nueva línea final.
Para calcular el peso, supongo que estoy contando caracteres de la manera habitual (excluyendo
perl -e
/-E
, pero incluyendo otros caracteres de opción). Si por alguna razón la gente se queja de esto, lo mejor que puedo hacer sin opciones es 90 (26 caracteres):Uso de la muestra:
Auge.
fuente
Pyth - 15
Descargo de responsabilidad: esta respuesta no es elegible para ganar ya que Pyth es más joven que este desafío.
Utiliza
.B
para la representación binaria y cuenta el número de"1"
's.Toma entrada en una cadena para guardar en
z
versusQ
.Pruébelo en línea aquí .
fuente
Scala 231
Código de autocomprobación:
con modificación de autocomprobación.
fuente
@
espacio, que no usa) tienen un peso de 2 al menos.Java, peso
931774499454Creo que esta es la única respuesta en este momento con un peso de más de 300.
Espera entrada como argumento de línea de comando.
fuente
ÑU
sed -r
, 467 + 1(+1 para uso de
-r
- ¿o debería ser +4?)Salidas como un valor unario por línea de origen; para convertir a un total decimal, redirija la salida a
| tr -d "\n" | wc -c
. Cuenta todos los caracteres ASCII imprimibles (32-126), más el salto de línea (10).Es difícil evitar enumerar todos los caracteres, pero podemos reducir esto observando que las letras minúsculas tienen un peso de Hamming de uno más que las letras mayúsculas correspondientes. Preferimos nueva línea (puntaje 2) sobre punto y coma (puntaje 5) como separador de enunciados; preferimos
@
(puntaje 1) o!
(puntaje 2) sobre/
(puntaje 5) como delimitador de patrón.Nota: para obtener los conjuntos de caracteres correctos, creé esta tabla a partir de la una
man ascii
, ordenada por peso. Simplemente agregue los puntajes correctos e inferiores para obtener el peso total de cada personaje:Esto podría resultar útil para otros.
fuente
Julia 262
268La versión modificada utiliza la práctica función 'count_ones' para ahorrar 6 (262)
Versión antigua que no utiliza una función de conteo integrada (268)
Utiliza el argumento de la línea de comando para la entrada.
fuente
CJam 52 o 48
Si la entrada aún no está en la pila (52)
Si la entrada está en la pila (48)
Por ejemplo
fuente
Julia, HW 199
Con
o insertando directamente la cadena:
La versión sin golf (HW 411) se ve así:
Y por diversión, aquí hay una versión optimizada (Hamming Weight 231 ) del enfoque de Bakerg sobre el problema:
con
fuente
HPPPL (lenguaje de programación HP Prime), 74
La calculadora gráfica HP Prime tiene una función incorporada hamdist (). El peso de hamming de cada personaje es el mismo que la distancia de hamming desde 0.
ASC (cadena) crea una matriz de los valores ASCII de cada carácter en una cadena.
hamdist (valor, 0) calcula la distancia de hamming desde 0 para cada valor ASCII
sum () resume todos los valores.
Cálculo del peso de hamming de su propio código fuente:
fuente
05AB1E , peso 17 (4 bytes )
Pruébalo en línea o verifique algunos casos de prueba más .
Explicación:
fuente
Perl 6 , 102
Pruébalo en línea!
Si bien este no es el código de golf, la solución más corta también parece tener el menor peso de hamming ...
fuente