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 :)
fonte
Respostas:
Pyth,
2119 bytesRecebe entrada no formato
N\nB\nS
. Experimente on-line: demonstração ou equipamento de testeExplicação
fonte
Pitão,
2921 bytesImplementação realmente direta.
Recebe entrada no stdin no seguinte formato:
fonte
00
paraN=0
.Mathematica, 101 bytes
Usa alguns
Through
truques para aplicar as funções de teto e piso. Apenas ignore os erros.fonte
CJam, 24 bytes
Teste aqui. Toma entrada como
"N" S B
.Explicação
fonte
"0" 1 9
emitido00
. Eu tentei jogar golfeq~:B;{:~Bb,2/z:,Bfbs}*
:, mas também inválido porque, em vez disso, ele emitiu uma string vazia.i
no final iria cuidar00
. Você pode recuperar o byte substituindo2/:I-I]
por)\]2f/
.JavaScript ( ES6 ) 78
79Função recursiva. Execute o snippet para testar (apenas Firefox)
Editar 1 byte salvo thx @DocMax
fonte
m&&s
porm*s
.ECMAScript 6, 90 bytes
Definir uma função recursiva usando uma variável não é um estilo muito bom, mas é o código mais curto que eu poderia criar no ECMAScript 6.
Acertar a caixa do canto
"00" => "0"
desperdiça três bytes (ems(n)
vez de simplesmenteN
).Para testá-lo, você pode usar REPL de Babel : copiar / colar o código e impressão resultados exemplo de invocação assim:
console.log(f(9, "27", 2))
.fonte
Lisp comum - 113 caracteres
Ungolfed
~vR
diretiva de formato gera um número inteiro na basev
, ondev
é fornecida como argumento paraformat
.parse-integer
aceita um:radix
argumento para converter de uma base especificada.#1=
e#1#
(respectivamente atribuir e usar) são variáveis de leitor que permitem compartilhar sub-expressões comuns. Quando expandidos, eles fornecem o seguinte código:fonte
Pip , 27 bytes
Toma base, número inteiro e número de repetições como argumentos da linha de comando. O algoritmo é direto, mas usa alguns recursos interessantes da linguagem:
O tipo escalar de Pip, que representa números e seqüências de caracteres, é útil aqui, assim como as operações por item nas listas; infelizmente, parênteses e os operadores de dois caracteres
FB
,TB
e//
negar qualquer vantagem.Solução alternativa, sem a atribuição intermediária, mas ainda com 27 bytes:
fonte
C, 245 bytes
Isso não vai ganhar nada , mas foi divertido de fazer!
fonte
PHP ,
115112 bytesExperimente online!
Ungolfed:
Resultado
fonte
Japonês , 17 bytes
Experimente online!
Recebe entradas na ordem S, N, B com N como uma lista de singleton . Aceitar N sem uma lista de singleton custa 2 bytes .
Explicação:
fonte
Quarto (gforth) , 105 bytes
Experimente online!
Explicação
Altera a base para B e, em seguida, em um loop que executa S vezes:
Imprime a string quando terminar e define a base de volta para 10 (para que possamos executar várias vezes seguidas)
Código Explicação
fonte