Desafio
Sua tarefa nesta pergunta é escrever um programa ou uma função nomeada que recebe um número inteiro positivo n
(maior que 0) como entrada via STDIN, ARGV ou argumentos de função e gera uma matriz via STDOUT ou valor retornado pela função.
Parece bastante simples? Agora, aqui estão as regras
- A matriz conterá apenas números inteiros de
1
an
- Cada número inteiro de
1
an
deve ser repetidox
vezes ondex
é o valor de cada número inteiro.
Por exemplo:
Entrada:
5
Resultado:
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
A matriz pode ou não ser classificada.
Isso é código-golfe, então vencedor é o código mais curto em bytes.
Bônus
Multiplique sua pontuação 0.5
se não houver dois números inteiros adjacentes em sua matriz de saída.
Por exemplo n = 5
, uma dessas configurações seria
[5, 4, 5, 4, 3, 4, 5, 2, 5, 3, 1, 2, 3, 4, 5]
fonte
/⍨⍳n
Ruby (recursivo), 41 bytes * 0,5 = 20,5
Ou usando um lambda (conforme recomendado pelo histocrat e Ventero): 34 bytes * 0,5 = 17
(ligue usando
r[argument]
)fonte
n=->x,i=1{...n[x,i+1]...
) e mais alguns com[*i..n]
.r=->n,i=n{i>0?[*i..n]+r[n,i-1]:[]}
Pitão , 9 bytes * 0,5 = 4,5
Com a ajuda de @FryAmTheEggman
Experimente online.
Explicação
Onde
Q
está a entrada.fonte
Haskell, 31 caracteres = 15,5 pontos
27 caracteres sem o bônus
Batido por orgulhoso Haskeller
fonte
g n = [y|x<-[n,n-1..1],y<-[x..n]]
C, 22 = 44 bytes * 0,5
A função
h
aceita dois parâmetros. O primeiro é um nint
especificado . O segundo é um que é o buffer de saída.int*
Programa de teste
fonte
Pitão -
1510 * 0,5 = 5Experimente online.
Espera entrada no stdin. Algoritmo descoberto independentemente. Obrigado @ Sp3000 por me ajudar a colocar o último Q lá dentro: P Além disso, ironia? XD
Explicação:
fonte
CJam,
1215 bytes * 0,5 = 7,5Este é o programa completo STDIN para STDOUT. Concatena os sufixos crescentes do
1 ... n
intervalo, o que garante que dois números adjacentes não sejam idênticos.Teste aqui.
fonte
Python 2, 53 bytes * 0,5 = 26,5
Emprestado descaradamente a ideia do @Melmel
fonte
Haskell, 34 bytes * 0,5 = 17
Foi a primeira vez que usei Haskell para jogar golfe. Ligue com
g <number>
.fonte
Bash + coreutils, 28/2 = 14
Roubando descaradamente a idéia e o golfe de @ pgy :
Festança pura (sem coreutils), 30/2 = 15
Eval, inferno de fuga e expansão:
fonte
GolfScript (14 bytes * 0,5 = pontuação 7)
Demonstração online
Eu acho que isso provavelmente é semelhante a algumas respostas existentes, na medida em que cria a matriz
concat( [n], [n-1, n], [n-2, n-1, n], ..., [1, 2, ..., n] )
Infelizmente, não pude jogar mais o discutivelmente mais elegante:
que coloca a entrada
x
em uma matriz e depois se aplica duas vezes{,{x\-}/}%
, que mapeia cada elemento em uma matriz para uma contagem regressiva de muitos elementosx
.fonte
C # - 81 (161 bytes * 0,5)
Trabalho simples em C #, espero que receba o bônus de números sem neibouring. Lê um int a partir de stdin, grava uma matriz como o exemplo em stdout.
Mais legível:
Saída de exemplos:
fonte
System.Console
é estático, você não pode atribuí-lo a uma variável, mas no C # 6 ou o que for a seguir, você será capaz de fazerusing System.Console;
(using System;
não paga neste caso), não sabe como me sinto sobre esse recurso. afeta um monte de velhas questões de golfe para esta razão precisamente;)using C=System.Console
economiza 3 bytes e é provavelmente o que @MarkKnol significava (desculpe!), Negligência vergonhosa da minha parte.JavaScript, ES6, 41 bytes
Isso cria uma função
f
que pode ser chamada comof(6)
e retorna a matriz necessária.Isso usa uma abordagem recursiva, em que cada iteração cria uma matriz de
i
elementos todos com valori
e concatena uma matriz retornadaf(i-1)
com a condição de parada dei==0
.Funciona no Firefox mais recente.
fonte
Haskell, 14 = 28 bytes / 2
saída de exemplo:
24 bytes sem o bônus:
fonte
=<<
ajudar a evitar o espaço em branco? Eu sinto que poderia, mas ficaria surpreso se você ainda não tivesse considerado isso.=<<
eu precisaria de parênteses para o lambda>>=
?(
,[
,=
,,
, depois de todos os operadores e afinslet \x->y = (2+) in (x,y)
parece meio impossível.Haxe , 53 bytes
Trabalha com l (6); por causa da compreensão do array.
Teste online http://try.haxe.org/#741f9
fonte
vba, 76 * 0,5 = 38
fonte
For Z=1 To
em #For Z=1To
Next:Next
paraNext x,Z
R, 44 * 0,5 = 22
Um teste rápido
fonte
JavaScript, ES6, 66 bytes * 0,5 = 33
Construindo em abordagem recursiva do Optimizer , podemos criar execuções descendentes de comprimento decrescente, como
[4,3,2,1, 4,3,2, 4,3, 4]
.Em vez de criar sub-matrizes de mesmo valor
Array(i).fill(i)
, criamosundefined
sub-matrizes preenchidas com o comprimento apropriadoArray(n).fill()
e, em seguida, alteramos os valores para uma execução descendente usando.map((v,x)=>i-x)
. Além disso, definimos e recorremos a uma função internag
; a função externaf
existe apenas para armazenar o valor dei
while seg
repete.fonte
T-SQL, 176 * 0,5 = 88
Desde que você pareceu sentir falta do T-SQL @Optimizer, aqui está toda a sua glória detalhada :).
Algumas opções de função, uma escalar e uma função com valor de tabela embutida. A função Escalar usa os loops while para recuperar e retornar uma sequência de números, onde a função Valor da Tabela Inline usa um CTE recursivo para uma sequência e retorna uma tabela. É claro que isso nunca será competitivo, por isso não passei muito tempo jogando golfe.
Função com valor de tabela embutida, 176 * .5
Chamado da seguinte forma
Exemplo de SQLFiddle
Função Escalar, 220 * .5
Chamado da seguinte forma
Exemplo de SQLFiddle
fonte
Mathematica, 34 * 0,5 = 17
fonte
perl, 26 bytes
fonte
$n
.Unable to parse postcircumfix:sym<{ }>, couldn't find final '}' at line 3
. Tentei em ideone.com.JavaScript (legível), 131 bytes
Eu sou novo no Code Golf, então isso não é o melhor
JavaScript (menos legível), 87 bytes
Minificado usando jscompress.com
fonte
TECO, 25 bytes * 0,5 = 12,5
O exemplo acima mal bate a versão sem bônus em 13 bytes:
fonte
C #,
11499 * 0,5 = 49,5 bytes(Com uma pequena ajuda da resposta do VisualMelon) Editar: e o comentário de James Webster
Ungolfed:
Existe uma versão insegura que tirei descaradamente da resposta C do feersum, mas não tenho 100% de certeza de que ela se encaixa nas regras, pois você precisa alocar a memória antes de chamar o método.C # (não seguro), 82 * 0,5 = 41 bytes
Chamado da seguinte forma:
De acordo com a sugestão do VisualMelon (obrigado!), O código não seguro pode ser refeito com um código seguro, o que reduz ainda mais o tamanho! Ainda coloca a questão se a criação da matriz de resultados finais pode ser feita fora do método.
C #, 72 * 0,5 = 36 bytes
fonte
int[]
fora em linha retavoid A(int n,int[]p){int z=0,m=n,i;while(m-->0)for(i=m;i++<n;)p[z++]=i;}
- eu concordaria provavelmente é um pouco duvidoso, sobre as regras;)System.Runtime.InteropServices.Marshal.Copy(new IntPtr(stuff), stuffArray, 0, length);
?var a=new int[(int)((n/2f)*(n+1))];
Eu acho que leva-lo para baixo a 109(n*(n+1)/2)
Bash com seq, expr e xargs = 59/2 = 29,5
Salve-o e execute com o número como o primeiro argumento.
fonte
C #,
116115 + 33 = 148 bytesNão é o código mais curto, mas ... funciona de qualquer maneira: P
Requer isso na parte superior do arquivo (33 bytes):
Versão sem golfe:
fonte
J, 23 * 0,5 = 11,5
J, 11
fonte
23 * 0.5
is11.5
, not10.5
.-1
Bytef=.-[:;<@|.@i."0@>:@i.
:, igualando as pontuações!JavaScript (ES6) 29 (58 * 0,5)
Editar remover; thx @Optimizer
Teste no console do FireFox / FireBug
Resultado
Ungolfed
fonte
ECMAScript6, 67 * 0,5 = 33,5 bytes
Muito feliz com este ... É cerca de um quarto do tamanho do meu original.
f(4)
retorna:Resposta antiga:
This is my first shot at code golf...I still want to get that 0.5x bonus. Any suggestions are welcomed!
Called with f(n).
fonte
d
, (2)a=b=c=[]
in for declaration part, (3)c[a].map(e=>a)
(4)b.push(...c)
C#, 108 bytes * 0.5 = 54
Thanks to VisualMelon for doing the hard work! I thought I'd try to squeeze it down as much as possible.
(114 bytes * 0.5 = 57, if you insist on using .ToArray() to return int[])
fonte