Objetivo Dado um número inteiro N > 0
, os menores inteiros A
, B
e, C
de modo que:
- Todos
A
,B
eC
são estritamente maior queN
; 2
divideA
;3
divideB
;- e
4
divideC
.
Este é um código-golfe, então a resposta mais curta em bytes vence. Você pode usar um idioma criado / atualizado após esse desafio, mas é estritamente não competitivo.
Casos de teste
N => A, B, C
1 => 2, 3, 4
4 => 6, 6, 8
43 => 44, 45, 44
123 => 124, 126, 124
420 => 422, 423, 424
31415 => 31416, 31416, 31416
1081177 => 1081178, 1081179, 1081180
C B A
), se estiver claramente especificado na resposta?Respostas:
Gelatina , 8 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
Python 2, 32 bytes
Aritmética de bits para 2 e 4, aritmética modular para 3.
Encontrei quatro expressões de 7 bytes para o próximo múltiplo
k
acima,n
mas nenhum mais curto:Qualquer um fornece 34 bytes quando copia
k=2,3,4
e 33 bytes se combinados:Porém, 2 e 4 são potências de 2 que permitem que truques de bits zerem os últimos 1 ou 2 bytes.
Isso fornece 6 bytes (em vez de 7) para obter o próximo múltiplo, totalizando 32 bytes, superando o
for k in 2,3,4
.Infelizmente, a aparência promissora
n|1+1
en|3+1
a adição são feitas primeiro, portanto, incrementar a saída leva parênteses.fonte
n+k-n%k
.n&3+1
fazer a adição primeiro também?Julia, 16 bytes
Experimente online!
fonte
MATL,
15 109 bytesExperimente online!
Explicação:
fonte
5M
(área de transferência automática de entradas de função) em vez do segundo2:4
.MATL, 8 bytes
Usa o algoritmo de Denis Jelly, estou surpreso que seja do mesmo tamanho!
Experimente online ou verifique todos os casos de teste .
fonte
Matlab, 33 bytes
Outra abordagem ligeiramente diferente
fonte
05AB1E , 8 bytes
Código:
Experimente online! .
fonte
±D2xŸ%α
(2xŸ
é apenas uma alternativa para o seu3L>
; e duas outras alternativas de byte igual podem serƵ…S
ou4L¦
).Ruby, 27 bytes
Mapeia 2, 3 e 4 para o próximo múltiplo acima
n
.fonte
CJam, 15 bytes
Experimente online! ou verifique todos os casos de teste .
fonte
Pyke,
11 98 bytesExperimente aqui!
fonte
Mathematica, 21 bytes
Esta é uma função sem nome que recebe um único número inteiro como entrada e retorna uma lista dos múltiplos.
A
Ceiling
função usa um segundo parâmetro opcional que informa para arredondar para o próximo múltiplo do número fornecido. Felizmente, ele também encadeia automaticamente seu segundo argumento, para que possamos fornecer uma lista de valores e, por sua vez, obteremos múltiplos arredondados para todos eles.fonte
Oitava, 20 bytes
Exemplos:
Vale ressaltar que podemos fazer isso até 9 sem adicionar bytes extras:
Saída (2520 é o menor número positivo positivo igualmente divisível por todos os números de um dígito):
fonte
Haskell, 27 bytes
fonte
Labirinto , 19 bytes
Experimente online!
Isso gera os resultados na ordem
C, B, A
separada por alimentações de linha.Explicação
Como de costume, uma breve cartilha de labirinto:
Apesar das duas no-ops (
"
) que fazem o layout parecer um pouco inútil, estou muito feliz com esta solução, porque seu fluxo de controle é realmente bastante sutil.O IP começa no canto superior esquerdo à
:
direita. Ele chegará imediatamente a um beco sem saída?
e será girado, para que o programa realmente comece com esse trecho de código linear:Isso significa que agora temos três cópias
n
na pilha principal, mas é profundo4
. Isso é conveniente porque significa que podemos usar a profundidade da pilha para recuperar o multiplicador atual enquanto trabalhamos nas cópias da entrada.O IP agora entra em um loop 3x3 (no sentido horário). Observe que
#
, o que aumenta a profundidade da pilha, sempre gera um valor positivo, de modo que sabemos que o IP sempre girará para o leste neste momento.O corpo do loop é este:
Após o loop ter sido percorrido (até
!
) três vezes, todas as cópiasn
são usadas e o zero abaixo é revelado. Devido à parte"
inferior (que de outra forma parece bastante inútil), essa posição é uma junção. Isso significa que, com um zero no topo da pilha, o IP tenta seguir em frente (oeste), mas, como há um muro, ele faz uma curva de 180 graus e volta para o leste como se tivesse atingido um beco sem saída.Como resultado, o seguinte bit agora é executado:
fonte
Matlab, 50 bytes
fonte
2:4
vez de[2 3 4]
.Pitão,
1110 bytesSuíte de teste.
Obrigado ao Dennis por um byte!
fonte
JavaScript (ES6), 26 bytes
É interessante portar a resposta Ruby de @ KevinLau ou a resposta Python de @ xnor com o mesmo comprimento:
Eu tenho uma ligeira preferência pela porta da resposta Ruby, pois ela funciona até 2 53 -3, enquanto a porta da resposta Python funciona apenas até 2 31 -5.
fonte
)
->]
como eu penso #C,
50bytes 46Agradecimentos a Neil e nwellnhof por salvar 4 bytes!
Desapontadoramente longo. Eu sinto que há algum truque de mudança de bits aqui que eu não conheço, mas ainda não consigo encontrá-lo. Retorna um ponteiro para uma matriz que contém os três elementos. Programa completo:
fonte
n + i - n % i++
resulta em comportamento indefinido?s/a[i-2]/*a++/
para salvar dois bytes.f(a,n,i)int*a;{for(i=1;++i<5;)*a++=n+i-n%i;}
Reng, 40 bytes
1: init
i1+#i
define a entrada para1 + input
; isso ocorre porque devemos trabalhar com números estritamente maiores que a entrada.234
inicializa a fita com nossos valores de iteração e1ø
pula para o início da próxima linha.2a: loop
i(
coloca a entrada no STOS e cria2[
uma nova pilha com os 2 principais elementos.¤
duplica a pilha e,
modula. Se houver um restante,q!^
interrompa o ciclo para ir para (b). Caso contrário, estamos bem para imprimir.$
remove a coisa extra,]
fecha a pilha e aæ
imprime bem.l0wq!~
termina se a pilha não contiver zero membros.2b: esse outro loop
(1+)
adiciona 1 ao STOS e31j
salta para a parte do loop que não tira coisas da pilha. E lucro.Esse espaço em branco extra está realmente me incomodando. Pegue um GIF.
fonte
Retina,
624326 bytes17 bytes graças a @Martin Büttner .
(Observe a nova linha à direita.)
Experimente online!
Entrada em unário
1
, saída em unário em1
separado por novas linhas.Versão anterior de 43 bytes:
Experimente online!
Entrada em unário, saída em unário separado por ponto e vírgula (
;
).Versão anterior de 62 bytes:
Experimente online!
Entrada em unário, saída em unário separado por ponto e vírgula (
;
).fonte
Oitava,
272220 bytesMATLAB e oitava:
Melhor (as soluções são equivalentes, mas uma pode superar a outra quando jogar mais golfe), MATLAB e Octave:
Somente na oitava:
Tente aqui .
fonte
Referência 0.15 , 17 bytes
Experimente aqui!
Explicação
fonte
> <> , 31 bytes
Espera
N
estar presente na pilha no início do programa. Experimente online!fonte
Mathematica 28 bytes
{2, 3, 4}
{6, 6, 8}
{44, 45, 44}
{124, 126, 124}
{422, 423, 424}
{31416, 31416, 31416}
{1081178, 1081179, 1081180}
O caso geral produz uma resposta geral:
{2 + r - Mod [r, 2], 3 + r - Mod [r, 3], 4 + r - Mod [r, 4]}
fonte
R,
3026 bytes(Redução de 4 bytes graças a @Neil)
Isso (da mesma forma que o restante das respostas, eu acho) adiciona 2: 4 à entrada e reduz o restante depois de executar o módulo nos mesmos números.
fonte
N+2:4-N%%2:4
?UGL ,
51312524 bytesExperimente online!
Versão anterior de 25 bytes:
Experimente online!
Versão anterior de 31 bytes:
Experimente online!
Versão anterior de 51 bytes:
Experimente online!
fonte
Java
7057fonte
=
deint a = new Integer(z[0]);
Golfscript, 22 bytes
Experimente online!
Solução alternativa de 22 bytes:
Experimente online!
fonte
Na verdade, 22 bytes
Experimente online!
Curiosidade: 3 bugs no intérprete do Actually foram encontrados e corrigidos ao escrever este programa.
Fato não tão divertido: Esses 3 erros impediram que esta solução fosse muito mais curta.
Explicação:
fonte
J, 18 bytes
Experimente online!
fonte