Inspirado por isso . Há um número, dado como inteiro, sequência ou matriz de dígitos (sua escolha). Encontre a base na qual a representação do número terá mais "4" se retorne essa base.
Número Resultado 624 5 444 10 68 16
restrições:
- A base retornada não deve ser maior que a entrada.
- números menores ou iguais a abs (4) não devem ser considerados como entrada válida; portanto, retornos indefinidos são aceitáveis
[1,15,3,64,43]
para algum número na base80
. Você está apenas emitindo o número da base, para poder testar tecnicamente todas as bases de2
atén
.1
,2
e3
, que têm o mesmo número de "4" s (0) em cada base? Além disso, muitos números têm o mesmo número de "4" s em muitas bases (por exemplo,4
em qualquer base> 5,44
em qualquer base> 45,14
na base 9 ou em qualquer base> 15, etc.). A resposta correta deve ser a menor base com o maior número de "4" s?Respostas:
APL (
3119)Agora testa todas as bases possíveis.
Explicação:
⍳K←⎕
: leia a entrada do usuário, armazene em K. Faça uma lista de 1 a K, quais são as bases para tentar.{
...}¨
: para cada um deles, execute a seguinte funçãoK⊤⍨K⍴⍵
: codifica K nessa base, fornecendo uma lista de dígitos (como números) por base. Use dígitos K (uma superestimação grande, mas isso não importa, porque os não utilizados serão todos zero de qualquer maneira).4=
: veja quais são iguais a 4+/
: soma estes, agora sabemos quantos quatros por base⊃⍒
: forneça os índices da lista se eles foram classificados para baixo, para que o índice do maior fique à frente. Pegue o primeiro item desta lista.fonte
⍨
GolfScript, 30 caracteres
Funciona para qualquer base - teste o código online .
Comentário: Esta solução foi baseada na versão original da pergunta. Assim, ele pode retornar uma base maior que a entrada, por exemplo, para a entrada 4, ela retorna corretamente a base 5 - que não é mais válida pelas novas regras.
fonte
GolfScript (23 caracteres)
ou
ou
Observe que isso recebe informações de stdin: para uma comparação justa com a versão GolfScript de Howard, subtraia um caractere.
Howard ressalta que as regras foram alteradas e não é muito lógico que elas agora sejam excluídas
4
como uma entrada possível quando houver uma saída válida (qualquer número inteiro maior que 4). Para cobrir esse caso, são necessários 2 caracteres extras, que podem ser adicionados de todos os tipos:ou
sendo alguns dos mais óbvios.
fonte
Python 2.x, 77 caracteres
Funciona até a base 98 e números com no máximo 98 dígitos.
fonte
J, 38 caracteres
Uso:
fonte
VBA, 121
uso:
?k(num)
=k(A1)
fonte
For w=5To a
Mathematica 59
Código
Vamos dar um nome à função acima.
Explicação
Count[IntegerDigits[n,k],4]
: Conte o número de quatro na representação k base de n .Sort
as bases do menor para o máximo de 4s.Alguns números especiais
Agora vamos aplicar qual Base aos seguintes números especiais.
Se você converter cada número na base correspondente, verá o que há de especial neles.
fonte
n
lá. Além disso,MaximalBy
realmente ajuda, diminui-o para 49 bytes:MaximalBy[Range[a=#],a~IntegerDigits~#~Count~4&]&
(apenas ignore as mensagens dele tentando usar a base-1) #Japonês
-h
, 10 bytes444
na base10
é[4,4,4]
que contém o número e o dígito4
3 vezes, mas444
na base100
é[4,44]
que também contém o dígito4
3 vezes, mas apenas como um número uma vez. Dada a saída esperada no desafio para o444
caso de teste, acho que devemos contar o número 4:Tente
Mas se estão contando o dígito 4, então:
Tente
fonte
C - (114 caracteres)
Em toda a sua glória no golfe:
E um pouco não-destruído:
Apenas por diversão, aqui está a saída para os números
[0,127]
(essas são as maiores bases do próprio número de entrada).fonte
R -
148137 caracteres(tão longe do resto da competição, mas ainda assim)
Transforme basicamente a entrada da base 10 em todas as bases de 4 para n (usando a
%%
divisão módulo e número inteiro%/%
) e escolha o índice da primeira com mais 4s.fonte
J tradução da solução APL @marinus:
Apenas por interesse, aqui estão alguns valores:
Ele gera a menor base que fornece uma transformação quadrática. Para os últimos valores da tabela, as representações se parecem com "4n" (por exemplo, 31 na base 7 é "43").
fonte
Gelatina , 6 bytes
Experimente online!
Produz "todas" bases até N, o que fornece o máximo de 4. Se você deseja base máxima ou mínima, adicione
Ṁ
(max) ouṂ
(min), respectivamente.Como funciona
fonte
05AB1E ,
109 bytes-1 byte graças a @Cowabunghole .
Se várias bases tiverem a mesma quantidade de 4s, ela produzirá a menor (isto é
16
, resultará6
, mas12
também seria uma saída possível).Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Qƶà
comk>
? ou seja, encontrar o índice baseado em 0 do máximo e incrementá-lo?C # com Linq 273
ou
Certamente o número de variáveis pode ser reduzido e os if's podem ser convertidos em? S. Ah bem...
fonte
C # (
482~ 423 bytes)Primeira tentativa de uma solução 'golfed'. Eu usei basicamente o mesmo algoritmo que o VBA acima. Provavelmente eu poderia salvar alguns bytes incorporando a função de conversão ou reduzindo o nome. Como eu disse, essa é uma primeira tentativa, então, por favor, seja gentil.
Com espaço em branco:
fonte
namespace
é necessário. Todos os nomes devem ter um único caractere, incluindoProgram
ecBase
. E sim, você deve incorporarcBase
. Além disso, combine declaração e inicialização, ou sejaint c=0,m=0
,.int
parâmetro e retornaint
parâmetro, mesmo sem umMain
método, e chame o caractere de contar sua pontuação.Burlesco - 28 bytes
Experimente online.
fonte
k , 18 bytes
Experimente online!
fonte
Perl 6 , 44 bytes
Experimente online!
Bom e velho polymod .
fonte
Casca , 9 bytes
Experimente online!
fonte