Computadores vivem por binários. Todos os programadores sabem binário.
Mas as 2**x
bases são frequentemente negligenciadas como não práticas, enquanto mantêm belas relações com o binário.
Para mostrar um exemplo de uma relação tão bonita, 19 será meu testemunho.
19 10011 103 23 13 j
19 é decimal, incluído para maior clareza.
10011 é 19 em binário.
103, na base 4 é feita a partir do binário desta maneira:
- log2 (4) == 2, vamos lembrar dois.
- Almofada 10011 para que ela tenha um múltiplo de 2 comprimento -> 010011
Pegue os dígitos 2 por 2 da esquerda para a direita e trate-os como números binários de 2 dígitos:
- 01 -> 1
- 00 -> 0
- 11 -> 3
Feito , 10011 na base-4 é 103.
Para a base 8, faça o mesmo, mas 3 por 3, como log2 (8) = 3.
- Pad 010011
- 010 -> 2
011 -> 3
23, Feito .
Para a base 16, faça o mesmo, mas 4 por 4, como log2 (16) = 4.
- Pad 00010011
- 0001 -> 1
0011 -> 3
13, Feito .
Tarefa
Dado um número máximo como entrada, você deve gerar uma tabela
base-ten-i base-two-i base-four-i base-eight-i base-sixteen-i base-thirtytwo-i
para i que vai de 0 a n inclusive. Os números binários são o epítome do mínimo absoluto necessário para funcionar, portanto, seu código deve ser o mais curto possível.
Restrições e bônus
Base-dez -> binário e binário -> Base-dez embutidos são considerados brechas como Base-a -> Base-b.
Se você gerar todas as
2**i
bases (para i> 2) usando as relações mencionadas acima, receberá um*0.6
bônus, mas as conversões básicas de base (escritas por você) serão permitidas.
Tabela de exemplo
> 32
0 0 0 0 0 0
1 1 1 1 1 1
2 10 2 2 2 2
3 11 3 3 3 3
4 100 10 4 4 4
5 101 11 5 5 5
6 110 12 6 6 6
7 111 13 7 7 7
8 1000 20 10 8 8
9 1001 21 11 9 9
10 1010 22 12 a a
11 1011 23 13 b b
12 1100 30 14 c c
13 1101 31 15 d d
14 1110 32 16 e e
15 1111 33 17 f f
16 10000 100 20 10 g
17 10001 101 21 11 h
18 10010 102 22 12 i
19 10011 103 23 13 j
20 10100 110 24 14 k
21 10101 111 25 15 l
22 10110 112 26 16 m
23 10111 113 27 17 n
24 11000 120 30 18 o
25 11001 121 31 19 p
26 11010 122 32 1a q
27 11011 123 33 1b r
28 11100 130 34 1c s
29 11101 131 35 1d t
30 11110 132 36 1e u
31 11111 133 37 1f v
32 100000 200 40 20 10
fonte
Respostas:
CJam, 54 * 0,6 = 32,4 bytes
Teste aqui.
Para referência, aqui está uma solução mais curta que não se qualifica para o bônus (em 39 bytes):
fonte
Pitão, 52 * 0,6 = 31,2 bytes
Teste on-line
Minha resposta sem bônus é 39 bytes
fonte
PHP,
232230233217 * 0,6 = 130,2sem chance de vencer as línguas do golfe, mas gostei do desafio.
$n=32;
ou substitua$n
por32
(ou qualquer outro número inteiro não negativo); ligar via cli$n
por$_GET[n]
(+ 6 / + 3.6) e ligue no navegadorou no cli com
php-cgi -f bases.php -n=32
<br>
ou adicione-a<pre>
para testar no navegadorRemova E_NOTICE de error_reporting (prepend
error_reporting(0);
) para suprimi-los.demolir:
edição principal:
74 bytes para corrigir os resultados decimais 0 após a renovaçãoversão sem bônus, 142 bytes
PHP vence Python?
Mesmo se eu adicionasse os 6 (3.6) bytes para tornar o snippet um programa, eu ainda venceria o Python (223 * 0,6 = 133,8 ou 148 sem bônus vs. 158). Surpreendente.
fonte
for
palavra - chave no loop for mais externo."\n"
-> quebra de linha física.Ruby, 80 bytes (versão sem bônus)
fonte
Python3 -
189, 167, 166150 bytesGuardou 16 bytes com a ajuda de @ LeakyNun !
Versão bônus -
296 * 0.6 = 177.6279 * 0.6 = 167.4 bytesVersão ligeiramente mais legível da versão bônus.
fonte
"0123456789abcdefghijklmnopqrstuv"
é menor do que a #from string import* digits+ascii_lowercase
digits+ascii_lowercase
: D. Obrigado!for i in range(int(input())+1):f=lambda n=i,b,c="0123456789abcdefghijklmnopqrstuv":n<b and c[n]or f(n//b,b)+c[n%b];print(i,f(2),f(4),f(8),f(16),f(32))
(uma linha)