Considere o processo de:
Tomando um número inteiro não negativo N.
eg27
.Divida-o em números inteiros
N - floor(N/2)
efloor(N/2)
(uma metade 'maior' e 'menor') e escreva-os nessa ordem.
por exemplo,27
torna-se14 13
.Removendo o espaço para unir os números inteiros em um novo inteiro muito maior.
por exemplo,14 13
torna-se1413
.Repita as etapas 2 e 3 algumas vezes o número desejado.
por exemplo1413
→707 706
→707706
→353853 353853
→353853353853
→ ...
Esse desafio é fazer exatamente isso, mas nem sempre na base 10.
Desafio
Escreva um programa que aceite três números, B, N e S:
B é um número inteiro de 2 a 10 que é a base de N (binário em decimal).
N é o número inteiro não negativo ao qual aplicar o processo de junção de divisão. Para facilitar a entrada do usuário, ela é fornecida como uma string na base B, não como um número inteiro.
S é um número inteiro não negativo que é o número de vezes para repetir o processo de divisão de junção.
A saída do programa é a representação de seqüência de caracteres de N na base B após os procedimentos de junção de divisão S.
Quando S é 0
, nenhuma divisão é feita, portanto a saída é sempre N.
Quando N é 0
, todas as divisões têm a forma 0 0
e são reduzidas para 0
novamente, portanto a saída é sempre 0
.
Exemplos
B = 10, N = 27, S = 1
→1413
B = 10, N = 27, S = 2
→707706
B = 9, N = 27, S = 1
→1413
B = 9, N = 27, S = 2
→652651
B = anything, N = anything, S = 0
→N
B = anything, N = 0, S = anything
→0
Tabela para todos os B com N = 1
para S = 0
para 7
:
B S=0 S=1 S=2 S=3 S=4 S=5 S=6 S=7
2 1 10 11 101 1110 111111 10000011111 10000100001000001111
3 1 10 21 1110 202201 101101101100 1201201201212012012011 212100212102121002121212100212102121002120
4 1 10 22 1111 223222 111311111311 2232222232322322222322 11131111131311311111311113111113131131111131
5 1 10 32 1413 432431 213441213440 104220331443104220331442 2433241322130211014044424332413221302110140443
6 1 10 33 1514 535535 245550245545 122553122553122553122552 4125434125434125434125441254341254341254341254
7 1 10 43 2221 11111110 40404044040403 2020202202020220202022020201 10101011010101101010110101011010101101010110101011010100
8 1 10 44 2222 11111111 44444454444444 2222222622222222222226222222 11111113111111111111131111111111111311111111111113111111
9 1 10 54 2726 13581357 62851746285173 3142536758708231425367587081 15212633743485606571782880411521263374348560657178288040
10 1 10 55 2827 14141413 70707077070706 3535353853535335353538535353 17676769267676676767692676771767676926767667676769267676
Tabela para todos os B com N aleatório para S = 0
para 3
:
B S=0 S=1 S=2 S=3
2 11011 11101101 11101111110110 11101111110111110111111011
3 2210 11021101 20102012010200 1001212100121210012121001211
4 1113 230223 112112112111 2302302302323023023022
5 101 2323 11341134 31430423143042
6 120 4040 20202020 1010101010101010
7 134 5252 24612461 1230456412304564
8 22 1111 445444 222622222622
9 4 22 1111 505505
10 92 4646 23232323 1161616211616161
Detalhes
- Aceite a entrada via stdin ou pela linha de comando. Saída para stdout.
- Em vez de um programa, você pode escrever uma função que use B, N e S e imprima o resultado normalmente ou o retorne (como uma string).
- B, N e S podem ser obtidos em qualquer ordem.
- Todas as entradas que produzem saídas cujos valores decimais estão abaixo de 2 32 devem funcionar.
- N é representado da maneira usual. ou seja, o dígito mais significativo primeiro e nenhum zeros à esquerda, exceto o próprio zero, que é escrito
0
. (A saída em00
vez de0
é inválida.) - O código mais curto em bytes vence.
Se você gosta dos meus desafios, considere dar lotes de blocos de construção de blocos! algum amor :)