var QUESTION_ID=133109,OVERRIDE_USER=69148;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px} /* font fix */ body {font-family: Arial,"Helvetica Neue",Helvetica,sans-serif;} /* #language-list x-pos fix */ #answer-list {margin-right: 200px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Respostas:
Pitão , 2 bytes
Experimente online! Entrada implícita.
S
é um intervalo indexado a 1 es
é a soma.fonte
Casca , 1 byte
Experimente online!
Construídas em!
Σ
em Husk geralmente é usado para obter a soma de todos os elementos de uma lista, mas quando aplicado a um número, ele retorna exatamenten*(n+1)/2
.fonte
Σ
é um caractere unicode de dois bytes na minha máquina. Eu acho que você usa a página de código 1253? msdn.microsoft.com/pt-br/library/cc195055.aspxPiet , 161 bytes / 16 codels
Você pode interpretá-lo com este intérprete Piet ou fazer upload da imagem neste site e executá-la lá. Não tenho certeza sobre a contagem de bytes, se eu pudesse codificá-lo de maneira diferente para reduzir o tamanho.
Versão ampliada da imagem de origem:
Explicação
O
highlighted
texto mostra a pilha atual (crescendo da esquerda para a direita), assumindo que a entrada do usuário seja5
:Insira um número e empurre-o para a pilha
Duplique esse número na pilha
Empurre 1 (o tamanho da área vermelha escura) na pilha
Adicione os dois primeiros números
Multiplique os dois principais números
A área preta garante que o cursor se desloque para a direita até o codel verde claro. Essa transição coloca 2 (do tamanho de verde escuro) na pilha
Divida o segundo número na pilha pelo primeiro
Abre e gera o número superior (interpretado como número)
Ao inserir uma área branca, a transição é a
nop
, o preto intercepta nosso cursor. Isso termina a execução do programa.fonte
Flak cerebral , 16 bytes
Experimente online!
Essa é uma das poucas coisas nas quais o cérebro é realmente bom.
Como essa é uma das coisas mais simples que você pode fazer no cérebro e tem muita visibilidade, aqui está uma explicação detalhada :
fonte
Oásis , 3 bytes
Experimente online!
Como funciona
fonte
Mathematica, 9 bytes
Mathematica, 10 bytes
Mathematica, 11 bytes
Mathematica, 12 bytes
Mathematica, 14 bytes
(por @ user71546)
Mathematica, 15 bytes
Mathematica, 16 bytes
Mathematica, 17 bytes
(por @Not a tree)
Mathematica, 18 bytes
Mathematica, 19 bytes
Mathematica, 20 bytes
(por @Not a tree)
fonte
Array[Boole[#2>=#]
&,{#,#}]~Total~2
&JavaScript (ES6), 10 bytes
Exemplo
Mostrar snippet de código
fonte
n*-~n/2
também funciona, mas apenas paran < 2**31
linguagem de máquina x86_64 (Linux),
98 bytesPara experimentá-lo online! compile e execute o seguinte programa C.
Obrigado a @CodyGray e @Peter por -1.
fonte
shr
vez desar
tratar sua saída como não assinada (sem alteração no tamanho do código). (Detectado por @CodyGray e apontado em sua resposta de 7 bytesadd
+loop
).mul %edi
ouimul %edi
(cada 2B) em vez do formulário de dois operandos 3B. Ele derruba o EDX com o resultado da metade alta, mas tudo bem. O multi-operandoimul
foi introduzido mais tarde que o formulário de um operando e possui um código de operação de 2 bytes com um0F
byte de escape. Qualquer uma das três opções sempre produzirá o mesmo resultadoeax
, é apenas a metade alta que depende de assinado versus não assinado.Python 2 ,
2416 bytes-8 bytes graças a FryAmTheEggman.
Experimente online!
fonte
C # (.NET Core) , 10 bytes
Experimente online!
fonte
Java (OpenJDK 8) , 10 bytes
Experimente online!
fonte
Oitava ,
2219 bytesPorque operações aritméticas são chatas ...
Experimente online!
Explicação
Dado
n
, isso cria uma matrizn
×n
com todas as entradas iguais ao número e ; faz entradas abaixo do zero diagonal; e gera o número de valores diferentes de zero.fonte
@(n)sum(1:n)
sum
.Gelatina , 2 bytes
Experimente online!
Explicação
Soma de Gauss, 3 bytes
Explicação
fonte
APL, 3 bytes
Experimente online!
+/
- soma (redução+
),⍳
- intervalo.fonte
1+
1
então não especifiquei. sua posição comum aqui para especificar somente quando usar⎕IO←0
(e não incluídos na contagem de bytes)Haskell , 13 bytes
Este é o mais curto (eu
acho quepensei):Experimente online!
Direto,
1713 bytesObrigado @WheatWizard por
-4
bytes!Experimente online!
Direto sem ponto, 15 bytes
Obrigado @nimi pela ideia!
Experimente online!
Via sem ponto
sum
, 16 bytesExperimente online!
Recursivamente,
2218 bytesObrigado @maple_shaft pela ideia e @Laikoni por jogarem!
Experimente online!
Padrão
fold
, 19 bytesExperimente online!
fonte
Estrelado ,
2722 bytes5 bytes salvos graças ao @miles !
Experimente online!
Explicação
fonte
05AB1E , 2 bytes
Experimente online!
Como funciona
Soma de Gauss, 4 bytes
Experimente online!
Como funciona
fonte
ÝO
também funciona e significahello
.Java (OpenJDK 8) , 10 bytes
Experimente online!
Demorou um momento para jogar golfe
n->n*(n+1)/2
porque sou lento.Mas essa não é uma resposta Java real. Definitivamente, não é detalhado o suficiente.
Nada mal, mas podemos fazer melhor.
Eu amo Java.
fonte
Verifique , 5 bytes
O cheque não é nem um idioma de golfe, mas é melhor que o CJam!
Experimente online!
Explicação:
O número de entrada é colocado na pilha.
:
duplica para darn, n
. É então incrementado com)
, dandon, n+1
.*
multiplica os dois juntos e depois$
divide o resultado por 2.p
imprime o resultado e o programa termina.fonte
MATL , 2 bytes
Experimente online!
Smiley não feliz.
fonte
Táxi , 687 bytes
Experimente online!
Sem jogar golfe com comentários:
É 22,6% menos bytes de loop do que usar
x*(x+1)/2
fonte
Julia, 10 bytes
Experimente online!
11 bytes (funciona também em Julia 0.4)
Experimente online!
fonte
Brainfuck, 24 bytes.
A E / S é tratada como bytes.
Explicado
fonte
,,,, 6 bytes
Explicação
Se eu implementar intervalo em breve ...
fonte
Retina , 13 bytes
Experimente online! Explicação: O primeiro e o último estágio são apenas uma conversão decimal ary unária. O estágio intermediário substitui cada um
1
pelo número de1
s à esquerda e outro1
por1
ele mesmo, contando desde1
den
, soma os valores implicitamente.fonte
> <> , 7 + 3 = 10 bytes
Calcula n (n + 1) / 2 .
3 bytes adicionados ao sinalizador -v
Experimente online!
Ou se a entrada puder ser tomada como um código de caractere:
> <> , 9 bytes
Experimente online!
fonte
(n^2+n)/2
) também possui 7 bytes:::*+2,n
dc , 7 bytes
OU
OU
Experimente online!
fonte
PHP, 19 bytes
usando builtins, 29 bytes:
loop, 31 bytes:
fonte
for(;$argn;$s+=$argn--);echo$s;
Cubix ,
1210 bytesVersão inicial
Experimente online!
Explicação
Expandido para um cubo, o código fica assim:
O ponteiro de instrução (IP) começa no
I
, movendo-se para o leste. Ele continua se movendo para o leste até encontrar o/
espelho, que o reflete ao norte. Quando o IP alcança o topo do código, ele se aproxima do último.
na terceira linha, movendo-se para o sul. Depois, chega ao penúltimo.
na última linha, movendo-se para o norte. Em seguida, alcança o/
espelho novamente, o que o reflete a leste, apenas para o próximo/
a refletir novamente para o norte. Dessa vez, o IP passa para o penúltimo.
na terceira linha e, em seguida, o último.
na última linha.As instruções são executadas na seguinte ordem.
fonte
Código da máquina x86-64, 7 bytes
Os bytes acima definem uma função que aceita um único parâmetro
n
e retorna um valor que contém a soma de todos os números inteiros de 1 an
.Ele é gravado na convenção de chamada do Microsoft x64 , que passa o parâmetro no
ECX
registro. O valor de retorno é deixado emEAX
, como todas as convenções de chamada x86 / x86-64.Mnemônicos de montagem não destruídos:
Experimente online!
(A chamada de função C é anotada com um atributo que faz com que o GCC a chame usando a convenção de chamada da Microsoft que meu código de assembly usa. Se o TIO tivesse fornecido o MSVC, isso não seria necessário.)
Pelos padrões incomuns do código golf, você vê que essa abordagem de loop iterativo é preferível a abordagens que usam a fórmula matemática mais sã (
n(n+1) / 2
), mesmo sendo obviamente muito menos eficiente em termos de velocidade de execução.Usando a teoria dos números, a implementação do roofcat ainda pode ser ultrapassada em um byte. Cada uma dessas instruções é essencial, mas há uma codificação um pouco mais curta para
IMUL
que seja usadaEAX
implicitamente como um operando de destino (na verdade, ela usaEDX:EAX
, mas podemos simplesmente ignorar os 32 bits superiores do resultado). São apenas 2 bytes para codificar, abaixo dos 3.LEA
leva três bytes também, mas não há realmente nenhuma maneira de contornar isso, porque precisamos incrementar enquanto preservamos o valor original. Se fizéssemos umMOV
para fazer uma cópia,INC
estaríamos com 4 bytes. (Em x86-32, ondeINC
há apenas 1 byte, estaríamos com os mesmos 3 bytes queLEA
.)O deslocamento final à direita é necessário para dividir o resultado pela metade e é certamente mais compacto (e mais eficiente) do que uma multiplicação. No entanto, o código realmente deve estar sendo usado em
shr
vez desar
, já que está assumindo que o valor de entradan
, é um número inteiro não assinado . (Essa suposição é válida de acordo com as regras, é claro, mas se você souber que a entrada não está assinada, não deverá fazer um deslocamento aritmético assinado, pois o bit superior que está sendo definido em um grande valor não assinado causará o resultado estar incorreto.)Agora apenas 8 bytes (graças a Peter Cordes). Ainda assim, 8> 7.
fonte
imul ecx
oumul ecx
funcionaria e salvaria um byte na implementação em formato fechado. Não percebi isso imediatamente; Eu estava prestes a comentar que era ótimo tanto para o desempenho quanto para o tamanho do código antes de perceber que umeax
operando implícito estava correto.add
+loop
seria mais curto do queimul
enquanto olhava para a outra resposta. Handy que há uma convenção de chamada padrão que passa o primeiro argumento emecx