Introdução:
Lembro que quando eu era criança, pegava uma calculadora e continuava pressionando o +
botão, e via o quanto eu podia contar. Agora, gosto de programar e estou desenvolvendo para iOS.
Contar é uma habilidade fundamental para humanos e computadores. Sem ele, o resto da matemática não pode ser feito. Isso é feito simplesmente iniciando 1
e adicionando repetidamente 1
a ele.
O desafio:
Este é apenas um desafio simples. O que eu gostaria que o seu programa fizesse é imprimir do 1
que for Integer
necessário. No entanto, vou dar uma guinada nele, já que a contagem decimal é meio chata:
A contagem não pode estar na base 10, deve mostrar-se contando em binário.
Portanto, para contar até 5, usando números inteiros de 32 bits, ficaria assim:
0000 0000 0000 0000 0000 0000 0000 0001 ..... 1
0000 0000 0000 0000 0000 0000 0000 0010 ..... 2
0000 0000 0000 0000 0000 0000 0000 0011 ..... 3
0000 0000 0000 0000 0000 0000 0000 0100 ..... 4
0000 0000 0000 0000 0000 0000 0000 0101 ..... 5
É um computador. Eles sabem melhor o binário. Sua entrada pode ser um número inteiro de 32 ou 64 bits. É realmente com você. No entanto, se você usar números inteiros de 32 bits, sua saída deverá ser um número inteiro de 32 bits em binário e se você usar números inteiros de 64 bits, sua saída deverá ser números inteiros de 64 bits em binário .
Entrada de amostra:
um inteiro de 32 bits, 5
Saída de amostra:
0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 0010
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0100
0000 0000 0000 0000 0000 0000 0000 0101
Pontuação:
Sua pontuação é igual a quantos bytes seu código tiver. Como este é o Code Golf, a pontuação mais baixa vence.
Pontos bônus:
Se você mostrar, na saída, o número que está no número 10 base (por exemplo, 0000 0000 0000 0000 0000 0000 0000 0001
em binário é igual à base 10 1
), multiplique sua pontuação por 0.8
.
Se você agrupar 4 dígitos da saída, como eu fiz, multiplique sua pontuação por 0.8
(novamente). Isso não é necessário.
Não arredondar para cima nem para baixo. Sua pontuação é um número de ponto flutuante.
int
por exemplo)?Respostas:
APL, 10 caracteres
Outro em APL. Supõe
⎕IO←1
(o padrão). Sem pontos de bônus. Lê o número do dispositivo de entrada. Se o seu APL usar números inteiros de 64 bits em vez de números inteiros de 32 bits, substitua 64 por 32 conforme necessário.Observe que o APL converte de forma transparente em números de ponto flutuante quando o intervalo de um número inteiro é excedido. Portanto, é difícil dizer exatamente com qual tamanho inteiro o APL trabalha.
explicação
fonte
JavaScript ( ES6 ) 56,8 (71 * 0,8)
Versão de 32 bits, pois o JavaScript não suporta precisão de 64 bits (no máximo 53 bits usando dobras de ponto flutuante)
Sem agrupamento
Com agrupamento - pontuação 60,16 (94 * .64)
Teste em qualquer navegador (ES5)
fonte
Pitão, 18 * 0,8 * 0,8 = 11,52 bytes
Exemplo de saída:
fonte
Pitão, 19 * 0,8 * 0,8 = 12,16 bytes
Exemplo de saída para a entrada 5:
Demonstração.
fonte
Python 2, 48 * 0,8 = 38,4
Converte um número em binário, usa formatação de string para convertê-lo em binário com 32 dígitos e também imprime o número decimal do bônus. Usa um
exec
loop para incrementar do1
valor de entrada.fonte
OverflowError: repeated string is too long
. Não tenho certeza se isso é apenas um limite para minha máquina.CJam, 13,44 (21 × 0,64)
Experimente online.
fonte
APL, 23,68 (37 × 0,8 × 0,8)
fonte
KDB (Q), 50 * 0,8 * 0,8 = 32
Sinto-me um pouco triste com a minha submissão :( Deve haver uma maneira melhor de fazer isso!
Explicação
Teste
fonte
k){-1{" "/:,/'$:(0N 4#0b\:x),x}@'1+!x}
Lisp comum, 96,0
Ponto:
(* 150 .8 .8)
Exemplo
Chamando a função com 10:
Explicação
(format()"~39,'0b ~:*~d" #b101010101010)
dá:A cadeia intermediária (uma matriz) é modificada para colocar um caractere de espaço nos seguintes índices baseados em zero: 4 9 14 19 24 29 34. Em seguida, é impressa.
Observe que o
(format t"~39,'0,' ,4:b ~:*~d" #b101010101010)
formato aparentemente simples não faz o que queremos. Imprime:(o preenchimento não é agrupado por 4)
fonte
Ruby, 28 (35 * 0,8)
fonte
C, 97 * 0,8 * 0,8 = 62,08
Exemplo de saída para a entrada "5":
Eu poderia adicionar mais um caractere de espaço em branco para separar os números decimais dos números binários, mas tecnicamente o problema não exige isso, eu acho?EDIT: Obrigado, CL!fonte
x%-4-1
porx%-4-2
para adicionar o espaço entre o binário e o decimal sem custo adicional de bytes. (Isso também eliminaria o espaço extra no início de cada linha.)Oitava, 23 caracteres
Exemplo de saída para a entrada 5:
fonte
MatLab, 19 bytes
Não muito para este, o MatLab possui um conversor decimal para binário e imprime automaticamente o resultado.
fonte
Julia, 42 bytes
Isso é um pouco mais curto sem os bônus.
Isso cria uma função sem nome que pega um número inteiro e imprime a representação binária de cada número de 1 a n , cada esquerda preenchida com zeros a 64 caracteres.
Com bônus, 78 bytes * 0,8 * 0,8 = 49,92
Isso cria uma função sem nome que pega um número inteiro e imprime a representação binária como antes, desta vez dividida em grupos de 4 com o número na base 10 no final.
fonte
Lisp comum, pontuação: 64.0
100 bytes * 0,8 * 0,8
Estou muito feliz com minha pontuação, mas ainda sinto que deve haver uma possibilidade de simplificar um pouco meu código.
Resultado
Código
Explicação
Conforme descrito na resposta de coredump , a string de formato
gera números base2, mas parece não haver possibilidade de obter o agrupamento correto também. Portanto, eu coagir a string em uma lista e iterar sobre ela escolhendo grupos de 4 com esta string de formato:
"~ {~ a ~ a ~ a ~ a ~} ~ a ~%"
Depois de cada grupo de 4, há um espaço em branco e, após o último grupo, o número da base10 é impresso.
Sem agrupamento (60x0.8 => 48.0)
Isso usa ~: * para processar o argumento de formato (único) novamente.
fonte
PHP, 51,84 (81 × 0,8 × 0,8)
Versão de 32 bits, como o PHP é limitado a apenas 32 bits no Windows, independentemente de o sistema operacional ser de 64 bits.
Leva um argumento de linha de comando.
fonte
CoffeeScript, 60,8 (76 × 0,8)
Versão de 32 bits pelos motivos mencionados acima , conforme o CoffeeScript é compilado em JavaScript.
Com o agrupamento, ele se torna um pouco mais longo: 64,64 (101 × 0,8 × 0,8)
fonte
Haskell, 56 bytes
Uso:
Para 64 bits, substitua
32
por64
. Todos os outros números também funcionam.fonte
J, 20 bytes
Entrada e saída de amostra:
fonte
Swift: 98,56 (154 * 0,8 * 0,8)
fonte
Ruby, 64 bits
70 * 0,8 * 0,8 = 44,8 bytes (dividido, decimal)
51 * 0,8 = 40,8 bytes (decimal)
67 * 0,8 = 53,6 bytes (dividido)
44 bytes (sem bônus)
fonte
05AB1E ,
1311 bytes-2 bytes graças a @ Mr.Xcoder .
Saídas sem delimitador de espaço nem número de sequência.
Experimente online.
Explicação:
fonte
Lb32jsäð0:»
trabalha para 11 bytesj
prefix para que ele se torne o comprimento correto.