Crie um programa que calcule o peso limite de uma string. O vencedor é o programa com o menor peso de hamming.
Regras:
- O peso de Hamming para um caractere ASCII é definido como o número total de bits definido
1
em sua representação binária. - Suponha que a codificação de entrada seja ASCII de 7 bits, transmitida por qualquer mecanismo de entrada normal para seu idioma (por exemplo, stdin, args, etc.)
- Envie o resultado, como um número, para stdout ou qualquer mecanismo de saída padrão / normal que seu idioma utilize.
- Não é preciso dizer, mas você deve ser capaz de executar o programa, na vida real, para que seja uma solução válida.
- Winner é a solução cujo código tem o menor peso de hamming.
Desculpe, não há soluções em branco para este!Ok, você pode codificar em espaço em branco agora que resolvi as regras :)
Exemplos por caractere:
char | binary | weight
-----+----------+-------
a | 01100001 | 3
x | 01111000 | 4
? | 00111111 | 6
\x00 | 00000000 | 0
\x7F | 01111111 | 7
code-golf
binary
number-theory
Polinomial
fonte
fonte
0x20
/ ASCII 32 como referência, o peso do zumbido éhello world
10 e não 11?hello world
11? Apenas 10 caracteres são diferentes de um espaço. Além disso - o peso de Hamming de um programa parece ter apenas o seu comprimento, excluindo espaços. Não é tão diferente do código normal de golfe.~
Eo
.Respostas:
J (33)
Um menor que 34!
Fortemente inspirado por esta resposta , mas com um peso menor do que um.
fonte
J, peso 34
Uso - coloque a sequência a ser medida entre aspas no final:
Como alternativa, recebendo informações do teclado (peso 54):
fonte
J , 39
Esta é uma função que aceita um argumento. (Ou substitua
]
pela string diretamente; como observa Gareth, isso reduz o custo para 34.)fonte
Python, 189
fonte
print(sum(bin(ord(A)).count('1')for A in input()))
, tem uma pontuação de 180.QBasic,
322311286264Tipo da ferramenta certa para o trabalho, ainda é péssimo, é claro.
fonte
Unário 0
Todos vocês sabiam que estava chegando. Primeiro o programa BrainFuck:
Eu adicionei novas linhas para torná-lo "legível", mas tem um peso de Hamming de 4066. Ele funciona obtendo repetidamente o quociente / restante de uma string de entrada e somando todos os restantes. Obviamente, se você executá-lo por conta própria, obtém: 226 (4066% 256) (tecnicamente \ xe2) tão claramente que se decide como vencedor.
Agora nós o convertemos para Unary e obtemos
Usamos uma implementação unária com caracteres NULL \ x00 para '0' e boom, prejudicando o peso de 0.
Pergunta de bônus : Para quais caracteres ASCII
c
você pode executar este programa em uma sequência que consiste emN
repetições e faz com que ele produza esse caractere. (Por exemplo, uma cadeia de 32 espaços dá um espaço). Quais valores doN
trabalho (um número infinito deles funcionará ou nenhum funcionará).fonte
main(){ bignum Unarynum = 0; int c; while(EOF!=(c=readchar())){ Unarynum++; } return Unarynum; }
Não importa o que você escolhe como seu caractere Unário (contanto que não seja EOF).C, peso
322263256O peso do hamming conta?
Utilizado principalmente técnicas de golfe padrão.
Um único loop calcula o peso (deslocando para a direita e adicionando até zero) e varre a string (avança o ponteiro quando o zero é atingido).
Supondo que
D
seja inicializado como 2 (parâmetro único).Otimizações específicas de peso de Hamming:
1.
ABDH
, com peso 2 cada, usadas para nomes.2.
*++H
preferido sobreH[1]
.fonte
main(D,H,A)char*A,**H;{for(A=*++H;*A;A+=!(*A/=2))if(*A%2)printf("@");}
@
era um dígito no sistema unário. Eu pensei que ele só usa0
..0
. Mas se você quiser ir por esse caminho,printf("@"+*a%2)
é mais curto.Golfscript
847258(obrigado a Howard e Peter Taylor pela ajuda)
Entrada: a sequência de entrada deve estar na pilha (passada como argumento da linha de comando ou simplesmente colocada na pilha).
Caso você o execute na linha de comando, certifique-se de usá-lo
echo -n
; caso contrário, a nova linha à direita também será contada.Saída: imprime o valor do peso hamming no console
O programa pode ser testado aqui .
fonte
BASE
vez debase
. Atualização: Apenas marcada,BASE
não funciona. Boa solução :) #TEST
/test
comment :) Mas isso não funciona.{...}2*
aplicando2base~
em primeiro lugar. Se marcar até 72.;
antes da string que substitui por stdin, de modo que isso(;
é desnecessário. Em seguida, a observação de Howard recebe-lo para baixo para 65.Perl, 80 (22 caracteres)
Feito e feito:
Ou aqui está uma versão alternativa com um peso de 77 (21 caracteres):
Mas não gosto muito dessa versão, porque sua saída omite a nova linha final.
Para calcular o peso, estou assumindo que estou contando caracteres da maneira usual (excluindo o
perl -e
/-E
, mas incluindo outros caracteres de opção). Se, por algum motivo, as pessoas reclamarem disso, o melhor que posso fazer sem opções é 90 (26 caracteres):Uso da amostra:
Estrondo.
fonte
Pitão - 15
Exoneração de responsabilidade: Esta resposta não é elegível para ganhar, pois Pyth é mais jovem que esse desafio.
Usa
.B
para representação binária e conta o número de"1"
's.Recebe entrada em uma string para economizar em
z
versusQ
.Experimente online aqui .
fonte
Scala 231
Código Selestesting:
com modificação de autoteste.
fonte
@
espaço, que você não usa) têm pelo menos peso 2.Java, peso
931774499454Acho que esta é a única resposta no momento com um peso acima de 300.
Espera entrada como um argumento de linha de comando.
fonte
GNU
sed -r
, 467 + 1(+1 para uso de
-r
- ou deve ser +4?)Saídas como um valor unário por linha de origem; para converter para um total decimal, redirecione a saída para
| tr -d "\n" | wc -c
. Conta todos os caracteres ASCII imprimíveis (32-126), mais o avanço de linha (10).É difícil evitar listar todos os caracteres, mas podemos reduzir isso observando que as letras minúsculas têm um peso de Hamming mais uma que as letras maiúsculas correspondentes. Preferimos nova linha (escore 2) ao ponto e vírgula (escore 5) como separador de declaração; preferimos
@
(pontuação 1) ou!
(pontuação 2) a/
(pontuação 5) como delimitador de padrões.Nota - para obter os conjuntos corretos de caracteres, criei esta tabela a partir da tabela
man ascii
, classificada por peso. Basta adicionar as pontuações à direita e abaixo para obter o peso total de cada personagem:Isso pode ser útil para outras pessoas.
fonte
Julia 262
268A versão modificada utiliza a útil função 'count_ones' para economizar 6 (262)
Versão antiga, sem a função de contagem única incorporada (268)
Usa argumento de linha de comando para entrada.
fonte
CJam 52 ou 48
Se a entrada ainda não estiver na pilha (52)
Se a entrada estiver na pilha (48)
Por exemplo
fonte
Julia, HW 199
Com
ou inserindo diretamente a string:
A versão ungolfed (HW 411) tem a seguinte aparência:
E, por diversão, aqui está uma versão otimizada (Hamming Weight 231 ) da opinião da bakerg sobre o problema:
com
fonte
HPPPL (Linguagem de programação HP Prime), 74
A calculadora gráfica HP Prime possui uma função hamdist () integrada. O peso de hamming de cada caractere é o mesmo que a distância de hamming de 0.
ASC (string) cria uma matriz dos valores ASCII de cada caractere em uma string.
hamdist (valor, 0) calcula a distância de hamming de 0 para cada valor ASCII
sum () resume todos os valores.
Cálculo do peso hamming do seu próprio código-fonte:
fonte
05AB1E , peso 17 (4 bytes )
Experimente online ou verifique mais alguns casos de teste .
Explicação:
fonte
Perl 6 , 102
Experimente online!
Enquanto isso não é código de golfe, a solução mais curta também parece ter o menor peso de hamming ...
fonte