Objetivo : Dado um número inteiro positivo n
:
- Se
n
for ímpar, imprima a lista den
números mais próximos0
em ordem crescente - Se
n
for par, imprima um valor Falsey.
Casos de teste :
5 -> [-2,-1,0,1,2]
4 -> false (or any Falsey value)
1 -> [0]
Implementação de referência
function update(){
var num = +document.getElementById("yield").value;
if(num){
var out = document.getElementById("output");
if(num % 2 == 1){
// base is balanced
var baseArr = [];
for(var i=0;i<num;i++){
baseArr.push(i-Math.floor(num/2));
}
out.innerHTML = baseArr.join(" ");
} else {
out.innerHTML = "false";
}
} else {
out.innerHTML = "<i>enter input</i>";
}
}
setInterval(update,1);
* {
font-family: "Constantia", "Consolas", monospace;
}
[type="number"] {
width: 10px;
width: 2em;
}
#output {
font-family: "Consolas", monospace;
}
Input: <input type="number" id="yield" value="3"> is <span id="output"><i>enter input</i></span>
code-golf
math
number
number-theory
Conor O'Brien
fonte
fonte
Respostas:
Pitão, 10 bytes
Experimente online.
Como funciona
fonte
APL,
161513 bytesObrigado a @Dennis por -2 bytes!
Este é um trem monádico que fornece uma matriz vazia para uma entrada uniforme. Abaixo está o diagrama:
Primeiro,
⊢×2|⊢
fornece aos tempos de entrada seu mod 2; isto é, as probabilidades se dão e os pares dão 0. Usamos⍳
para criar uma lista de números de 1 a isso (⍳0
fornece a matriz vazia) e depois subtraímos metade da entrada e do piso.fonte
Mathematica,
323024 bytesTruque de código de golfe: o último argumento para
And
não precisa ser um booleano.fonte
Floor
.Range[-a,a=...]
parece funcionar, economizando outro byte.OddQ@#&&Range@#-(#+1)/2&
PowerShell,
5052 bytesOof. Resposta bastante detalhada. Recebe entrada
$a
e define uma nova variável$b
como o "piso" de$a/2
. Gera um novo intervalo de números a partir(0-$b)
de$b
, em seguida,join
é o intervalo com espaços e o possui como o segundo elemento de uma matriz de dois elementos (o primeiro elemento é0
). Em seguida, usa$a%2
para indexar nessa matriz para saída.Versão alternativa usando fluxo if / else mais "tradicional", a 54 bytes:
Editar - Necessário adicionar alguma lógica para gerar um valor falsey se a entrada for uniforme
fonte
(0-$b)
para just-$b
. Além disso, basta multiplicar por*0
para gerar uma string nula (avalia como false no PowerShell). (ver: codegolf.stackexchange.com/a/63005/45925 )Haskell,
373631 bytesDesequilibrado é indicado pela lista vazia. Exemplo de uso:
g 7
->[-3,-2,-1,0,1,2,3]
.@xnor encontrado 5 bytes. Obrigado!
fonte
g n=[x|x<-[-div n 2..(n+1)/2],odd n]
é igualmente longo.g n=[1|odd n]>>[-div n 2..div n 2]
g n=[1|odd n]>>take n[-div n 2..]
também salva um caractere.JavaScript (ES6),
44434241 bytesriscado 44 ainda é regular 44;
Para entradas ímpares, retorna uma matriz inteira de comprimento
x
, centralizada em0
; para pares, retorna 0. Acho que é o mais curto possível. (Salvou alguns bytes graças a @ edc65 e @ ן nɟuɐɯɹɐ ן oɯ!)Alternativa ES6: (42 bytes, graças a @intrepidcoder)
Sugestões são bem-vindas!
fonte
x%2&&[for(y of...]
salva um byte.n=>Array(n&1&&n--).fill().map((x,i)=>i-n/2)
se devolver uma matriz vazia é permitidox=>x%2&&[for(y of Array(x--).keys())y-x/2]
é 42.Minkolang 0.10 , 18 bytes
Explicação
fonte
J, 12 bytes
Este é um verbo monádico que retorna
0
(falsy) para números pares. Experimente online com J.js .Execução de teste
Como funciona
fonte
DUP , 31 bytes
Try it here.
Lambda anônimo. Uso:
Explicação
fonte
Python 2,
3432 bytesNo momento, não tenho certeza se posso produzir o que quiser, se não estiver equilibrado; portanto, atualmente, isso retorna uma lista vazia no caso de uma base desequilibrável. É uma função lambda anônima, portanto, dê um nome para usá-la.
fonte
k%2*
, você pode evitar os parênteses.CJam,
1312 bytesEssa é uma função anônima que exibe um número inteiro da pilha e empurra uma matriz de dígitos (base ímpar) ou uma matriz vazia (base par) em troca. Experimente on-line no intérprete CJam .
Como funciona
fonte
O, 18
Demonstração ao vivo.
fonte
Vitsy,
2725 bytesAmanhã vou jogar golfe, mas preciso ir para a cama agora.
fonte
TeaScript , 16 bytes
18Bem simples. Os caracteres especiais são na verdade apenas "abreviações" para sequências de código mais longas.
Ainda não fiz permalinks, então você terá que copiar e colar no intérprete
Explicação
Esta resposta não é competitiva
fonte
F #, 38 bytes
O resultado falsey é uma lista vazia.
fonte
, 21 caracteres / 37 bytes
Try it here (Firefox only).
Aqui está uma resposta de 20 caracteres / 35 bytes (não concorrente, pois a resposta usa as alterações implementadas após a pergunta):
Try it here (Firefox only).
fonte
Japonês,
2119 bytesJapt é uma versão abreviada do Ja vaScri pt .
Para entradas ímpares, retorna uma matriz inteira de comprimento
x
, centralizada em0
; para par, retorna 0. Tradução JS aproximada:onde
x.range(y)
cria uma lista de números inteiros dex
paray
. Teste online!No Japão moderno, são apenas 11 bytes:
Experimente online!
fonte
R, 30 bytes
Grosso modo,
x:-x
retorna os números inteiros dex
para-x
, onde eu definix
como(1-n)/2
. Também uso o fator modulo-2n%%2
na definição dex
forçarx
a zero quandon
é par; nesse caso,0:0
retorna0
(falsey).fonte
Perl, 36 bytes
Sinto que isso pode ser reduzido:
O intervalo trata flutuadores como números inteiros; portanto, por exemplo, 5/2 = 2,5 é convertido silenciosamente em 2.
(Se a formatação não importar, remova
$,=$";
para um total de 30 bytes).fonte
PowerShell, 49 bytes
Números pares avaliados até
$false
porque fornecem uma saída de linha vazia.Os números ímpares emitem a string de referência exata. Você pode salvar mais 4 bytes (agora
45
) removendo o[]
da string de saída.Powershell, 36 bytes
Isso tem o mesmo resultado falsey, mas gera a lista de números separados por novas linhas:
fonte
Perl 6, 25 bytes
A expressão lambda mais curta que eu poderia criar que gera uma lista em vez de um intervalo é:
Teste:
Isso tira vantagem do fato de o Perl 6 tratar o número
0
como um valor falso. Se a saída tivesse que ser exatamente,False
você poderia substituir$_%2
por$_!%%2
.fonte
05AB1E , 8 bytes (não concorrente)
O idioma é posterior ao desafio e, portanto, não é competitivo. Código:
Experimente online!
Explicação:
Usa a codificação CP-1252 .
fonte
PHP, 50 bytes
programa, recebe informações de STDIN, imprime
_
lista delimitada ou0
.ou
A função aceita argumento, retorna matriz ou
0
.fonte
Java, 145 bytes
Explicação: Desculpe, eu sei que isso é realmente longo. Como não vi uma resposta para java, resolvi colocar uma. Informe-me se preciso escrever a função principal (não tenho certeza se essa é a política ou não). Basicamente, ele divide o número por dois e o multiplica por -1 para o limite inferior e, para o limite superior, apenas usa o número dividido por dois. Sou meio novo nesta página, então se não formatar nada certo, avise-me. Além disso, sei que as respostas podem ser abreviadas com funções lambda, mas não sei como usá-las e não tenho certeza se o Java as suporta.
Aqui está uma versão mais legível e com menos golfe:
fonte
return
produza via - o valor de retorno é uma forma legítima de produção - em vez de precisar usarSystem.out
, embora, nesse caso, parareturn
trabalhar, você precise armazenar parcialmente listas construídas em uma sequência). Java recente suporta lambdas e normalmente sai mais curto que uma definição de função "regular". (Além disso, por que o espaço em branco líder?)Ruby, 25 bytes
fonte
Ruby, 27 bytes
Cria uma função lambda anônima que retornará a matriz de
n
números mais próxima de 0 se n for ímpar e retornará nil (um valor de falsey em ruby).O Ruby arredonda sua divisão inteira para -in infinito, mas
0-n/2
é menor que-n/2+1
(já que o sinal de menos está lá de qualquer maneira) e, como agora o n é considerado positivo, o arredondamento funciona a meu favor.Versão antiga (28 bytes)
fonte