var QUESTION_ID=188988;
var OVERRIDE_USER=53748;
var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;function answersUrl(d){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+d+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(d,e){return"https://api.stackexchange.com/2.2/answers/"+e.join(";")+"/comments?page="+d+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(d){answers.push.apply(answers,d.items),answers_hash=[],answer_ids=[],d.items.forEach(function(e){e.comments=[];var f=+e.share_link.match(/\d+/);answer_ids.push(f),answers_hash[f]=e}),d.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(d){d.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),d.has_more?getComments():more_answers?getAnswers():process()}})}getAnswers();var SCORE_REG=function(){var d=String.raw`h\d`,e=String.raw`\-?\d+\.?\d*`,f=String.raw`[^\n<>]*`,g=String.raw`<s>${f}</s>|<strike>${f}</strike>|<del>${f}</del>`,h=String.raw`[^\n\d<>]*`,j=String.raw`<[^\n<>]+>`;return new RegExp(String.raw`<${d}>`+String.raw`\s*([^\n,]*[^\s,]),.*?`+String.raw`(${e})`+String.raw`(?=`+String.raw`${h}`+String.raw`(?:(?:${g}|${j})${h})*`+String.raw`</${d}>`+String.raw`)`)}(),OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(d){return d.owner.display_name}function process(){var d=[];answers.forEach(function(n){var o=n.body;n.comments.forEach(function(q){OVERRIDE_REG.test(q.body)&&(o="<h1>"+q.body.replace(OVERRIDE_REG,"")+"</h1>")});var p=o.match(SCORE_REG);p&&d.push({user:getAuthorName(n),size:+p[2],language:p[1],link:n.share_link})}),d.sort(function(n,o){var p=n.size,q=o.size;return p-q});var e={},f=1,g=null,h=1;d.forEach(function(n){n.size!=g&&(h=f),g=n.size,++f;var o=jQuery("#answer-template").html();o=o.replace("{{PLACE}}",h+".").replace("{{NAME}}",n.user).replace("{{LANGUAGE}}",n.language).replace("{{SIZE}}",n.size).replace("{{LINK}}",n.link),o=jQuery(o),jQuery("#answers").append(o);var p=n.language;p=jQuery("<i>"+n.language+"</i>").text().toLowerCase(),e[p]=e[p]||{lang:n.language,user:n.user,size:n.size,link:n.link,uniq:p}});var j=[];for(var k in e)e.hasOwnProperty(k)&&j.push(e[k]);j.sort(function(n,o){return n.uniq>o.uniq?1:n.uniq<o.uniq?-1:0});for(var l=0;l<j.length;++l){var m=jQuery("#language-template").html(),k=j[l];m=m.replace("{{LANGUAGE}}",k.lang).replace("{{NAME}}",k.user).replace("{{SIZE}}",k.size).replace("{{LINK}}",k.link),m=jQuery(m),jQuery("#languages").append(m)}}
body{text-align:left!important}#answer-list{padding:10px;float:left}#language-list{padding:10px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/codegolf/primary.css?v=f52df912b654"> <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><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><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table>
void foo(char *c, size_t len)
é legal tomar um buffer de entrada / saída e um comprimento e não ter nenhum valor de retorno, apenas um efeito colateral no objeto para o qual ele tem um ponteiro.Respostas:
Malbolge , 20775 e 2334 bytes
Provavelmente eu não bati em ninguém, mas foi incrivelmente divertido de fazer.
Experimente online!
Se o desafio não precisou ser interrompido em algum momento (por exemplo, eof), torna-se bastante trivial, com 2334 bytes :
Experimente online!
Explicação
Me pediram para explicar como o programa funciona. Vou escolher o segundo, pois é muito mais fácil explicá-lo do que o primeiro, mas a maneira como esses dois trabalhos são realmente semelhantes.
Vamos começar com a descriptografia do código. Como alguém nos comentários fez isso antes de começar a trabalhar na explicação, eu realmente recomendo que você dê uma olhada.
Isso não facilita a leitura do programa, mas antes de avançarmos diretamente para o código, vamos revisar o básico do Malbolge.
A máquina virtual é baseado em Trits ( tri insignificante dígitos s ). Cada palavra de máquina tem dez trits de largura, variando de 0 a 2222222222t (= 59048d). Cada posição de memória contém uma palavra de máquina; os endereços também possuem uma palavra de máquina. Os dados e o código compartilham o mesmo espaço de memória.
Existem três registradores, cada um contendo uma palavra de máquina, inicialmente 0: o registro de código C, que é um ponteiro para a instrução que está prestes a ser executada, o registro de dados D usado para manipulação de dados e o acumulador A também usado por vários instruções para manipular dados.
Se a instrução a executar não estiver no intervalo 33-126, a execução será interrompida (o intérprete de referência trava nesse caso devido a um erro). Caso contrário, para determinar a instrução real a ser executada, o valor apontado pelo registro C é adicionado ao próprio registro C e o resultado dividido por 94, levando o restante.
Aqui está uma tabela de todas as instruções possíveis.
Agora, como o código é mais compreensível e é realmente possível dizer o que está acontecendo lá, podemos pular para a idéia geral do que está acontecendo lá.
Sem nenhum salto, a programação do Malbolge é praticamente trivial. Porém, quando os saltos são usados, é necessário descriptografar a tarefa antes de executar este código novamente. Toda vez que uma instrução é executada, ela fica logo após criptografada, para que não se comporte da mesma maneira que antes.
Para ilustrar a solução alternativa, vejamos o programa normalizado para gatos de Malbolge:
Como você pode ver, na segunda linha, temos
/
e<
instruções para lidar com coisas de E / S. Utilizando o fato de que oC
registro é o ponteiro da instrução, podemos modificá-lo usando ai
instrução, criando efetivamente um ramo. Antes que a ramificação aconteça, precisamos descriptografar instruções que, a poucos ciclos de distância, leem e gravam a saída de e para o TTY, combinadas com um salto. Como não há uma maneira real de armazenar constantes de forma eficaz, precisamos incorporar muitas instruções não relacionadas e usar seu valor para calcular outras constantes necessárias (utilizando o fato de Malbolge não separar programas e dados)Nota: Partes desta resposta foram retiradas da página wiki da Esolang Malbolge licenciada sob CC0 - link .
Possivelmente, você pode conferir minha outra resposta com Seed
fonte
brainfuck , 6 bytes
Experimente online!
Pela primeira vez, uma resposta realmente competitiva no cérebro. :-) Apenas lê da entrada padrão (
,
) e depois faz um loop enquanto o caractere lido não é zero ([
), escrevendo o caractere lido duas vezes (..
) e finalmente lendo um novo caractere (,
) antes de voltar ao início do loop (]
)Resposta alternativa de 6 bytes:
Experimente online!
fonte
Semente ,
60133942388438653848 bytesExperimente online!
fonte
Geléia , 1 byte
Programa completo.
Experimente online!
fonte
Ḥ
ż`F
), enquanto o meu não posso acreditar)Linguagem de programação de Shakespeare ,
139129109106 bytes-3 bytes graças a Jo King
Experimente online!
Vomita avisos e termina com um erro. Lide com isso.
fonte
Haskell ,
151413 bytesExperimente online!
ou de forma legível:
Explicação: As listas são a
Monad
em Haskell, e o uso do operador de ligação>>=
é aconcatMap
, executando uma função que pega um elemento e retorna uma lista em cada elemento da lista e concatenando as listas resultantes em uma grande lista.Agora só temos de construir uma função que, dado um valor, retorna uma lista de que o valor duas vezes, que é realizado por
(<$"dd")
, que pode ser lido como "Take a lista['d','d']
e substituir todos os elementos com o argumento desta função. A"dd"
poderia ser qualquer expressão que resulte em uma lista de exatamente dois elementos, mas esse é o mais curto possível.fonte
<$
era algo que eu nunca teria pensado05AB1E , 2 bytes
Ok eu desisto. Não consigo encontrar um byter para resolver isso. Cargas de 2 bytes, no entanto ..
Experimente
ø˜
online ou ExperimenteøS
online .Experimente
ζ˜
online ou ExperimenteζS
online .Experimente
€D
online ou Experimente€Â
online .Experimente
.ι
online.Experimente
ºS
online.Experimente
·S
online ou ExperimentexS
online .Experimente
+S
online.E / S como uma lista de caracteres.
Explicação:
O único programa que funciona da mesma maneira nas duas versões do 05AB1E. :)
Esta versão basicamente funciona da mesma forma que a acima para a nova versão. Na versão antiga, você precisaria
‚
primeiro de um par explícito e depois poderia zipar / transpor isso. Apenasζ
em uma lista 1D haverá um não operacional na versão herdada do 05AB1E.Na nova versão do 05AB1E, ele mantém todos os valores na pilha na lista resultante ao fazer um mapa. Considerando que, com a versão herdada do 05AB1E, ele manteria apenas o valor máximo. É por isso que eles só funcionam na nova versão.
Esse builtin ainda não estava presente na versão herdada do 05AB1E.
Na versão herdada de 05AB1E, o espelho horizontal embutido seria em
∞
vez deº
. No entanto,∞S
não funciona na versão herdada, porque converteria implicitamente a lista em uma sequência delimitada por uma nova linha antes de espelhá-la completamente ( tente aqui ), após oS
que também incluiria essas novas linhas.Double é a abreviação de
2*
. Na nova versão do 05AB1E, construída no Elixir, isso funciona apenas em valores numéricos. A versão herdada do 05AB1E foi criada em Python, no entanto,2*
funciona de maneira semelhante e repete o personagem.Novamente, como a versão herdada do 05AB1E foi criada em Python,
"a"+"a"
resulta em"aa"
, enquanto a+
não pode ser usada para anexar strings na nova versão. (PS: Existe um apêndice para strings que funciona nas duas versões, o que é«
, mas ao fornecer dois argumentos de lista, os concatenará juntos em vez de mesclar cada string nos mesmos índices do programa acima ( tente aqui ).)fonte
ζ˜
para o 05AB1E moderno.ø˜
, então não me incomodei em adicioná-lo também. Eu adicionei (assim comoøS
/ζS
/xS
).Esquema da pirâmide ,
229 218213 bytesExperimente online!
Definitivamente, isso pode ser mais curto. A entrada é obtida por meio de argumentos da linha de comando. Isso equivale basicamente a:
Com algumas ressalvas, como a impressão realmente sendo manipulada na condição do loop e no corpo do loop.
Alternativa 215 byter:
Experimente online!
fonte
set
pode ser deslocado para cima e deixado sem interferir em nada. Experimente online!Geléia , 1 byte
Um programa completo imprimindo o resultado.
Experimente online!
Quão?
Usa um recurso de
bug...O átomo "duplo" de Jelly,
Ḥ
é implementado com o Python*
e vetoriza, enquanto as listas de caracteres de Jelly (suas únicas "strings") são implementadas como listas de strings de Python, que geralmente têm apenas um caractere - ou seja, até percebermos que em Python'blah'*2='blahblah'
...fonte
ḤṾV
$ echo -n "Ḥ" | hexdump -C
<newline>00000000 e1 b8 a4 |...|
af
,Ḥ
é apenas uma representação visual do que byte, consulte o Jelly code-page (também ligado no cabeçalho do post).Geléia, 1 byte
Experimente online!
Perdoe minha inexperiência, estou apenas começando com Jelly. O que eu acredito que está acontecendo é que definimos uma cadeia diádica, que trata um único argumento como o esquerdo e o direito. Nesse caso, a cadeia consiste em "zip; intercalar x e y", intercalando a sequência de entrada consigo mesma.
Alguém já postou uma solução de geléia de 1 byte, então espero que não seja uma má educação postar a minha.
fonte
Pitão,
3425 bytesExperimente online! Outro que retorna uma string em vez de uma lista de caracteres:
Experimente online!
fonte
lambda i:sum(zip(i,i),())
deve fazer por -9.for i in input():print(i,end=i)
lambda i:''.join(c*2 for c in i)
32 bytes, mas retorna uma string e não uma listalambda i:''.join(c*2for c in i)
PowerShell ,
292321 bytes-6 bytes graças a Andrei Odegov
-2 bytes graças a mazzy
Experimente online!
Recebe entrada por meio de splatting, tornando-o essencialmente uma matriz de caracteres
fonte
Conjunto 8088, IBM PC DOS,
1610 bytesxxd
Despejo de bytes montadoListagem desmontada:
Executável autônomo do PC DOS. Entrada de
STDIN
, saída para o console.Entrada interativa do console:
Entrada por tubo:
Resposta original de 16 bytes :
xxd
Despejo de bytes montadoListagem desmontada:
Executável autônomo do PC DOS. Entrada via linha de comando, saída para o console.
fonte
LODSW
colocar o espaço inicial (20H
)81H
noAH
qual, é claro, atrapalhará oLOOP
que está emCH
... Que chatice.sed ,
108 bytesExperimente online!
Graças a @manatwork por -2 bytes.
fonte
s/./&&/g
.JavaScript (Node.js) , 22 bytes
Recebe a entrada como uma matriz de caracteres.
Experimente online!
JavaScript (ES6), 26 bytes
Recebe a entrada como uma sequência.
Experimente online!
Versão alternativa sugerida por @PabloLozano:
Experimente online!
Fazer isso da maneira recursiva também é o mesmo:
Experimente online!
fonte
s=>s.replace(/./gs,c=>c+c)
para que.
também corresponda às novas linhasjoin('')
deve cuidar disso. Pensando bem, isso pode estar aumentando a saída de uma maneira não padrão, para que não seja válido.["aa","bb","cc"]
é uma lista de cadeias, no entanto, nem uma cadeia nem uma lista de caracteres em si. Adicionar uma junção ou achatá-la a uma lista de caracteres é válido, mas teria que ser contado na contagem de bytes.Haskell , 8 bytes
Experimente online!
Qualquer sequência de dois caracteres funciona no lugar de
"x2"
.fonte
Braquilog , 2 bytes
Experimente online!
Explicação
fonte
Befunge-98 (PyFunge) , 6 bytes
Experimente online!
fonte
C (gcc) , 40 bytes
Experimente online!
Assume que
t
é um buffer grande o suficiente para armazenar a saída.Provavelmente não está em conformidade com o padrão, mas funciona no TIO.
fonte
J ,
63 bytes-3 bytes graças a Richard Donovan
Experimente online!
K (oK) ,
84 bytes-4 bytes graças a ngn!
Experimente online!
fonte
{2}#
APL (dzaima / APL) , SBCS de 2 bytes
Função de prefixo tácito anônimo.
Experimente online!
⌿
é "replicar" :-)fonte
Haskell , 15 bytes
Aqui
(:)<*>pure
pega um argumento e retorna uma lista que contém esse argumento duas vezes. Em seguida,>>=
mapeia essa função sobre cada entrada da lista de entrada (que é uma string no nosso caso) e nivela o resultado (uma lista de listas) de volta para uma lista.Experimente online!
fonte
Ferrugem ,
8346 bytesExperimente online!
Eu não gosto disso, mas não é trapaça .
fonte
Labirinto , 12 bytes
Experimente online!
Acabei de descobrir esse idioma, então essa resposta pode ser melhorada notavelmente ...
fonte
","
vez de"",
), eu consegui onze agora - poderia haver dez ou melhor?Stax , 2 bytes
Execute e depure-o em staxlang.xyz!
Cópia de. Fecho eclair. Impressão implícita.
fonte
Retina , 4 bytes
Experimente online!
Corresponde à string vazia (ou seja, a posição antes / depois de cada caractere) e insere a string entre esta e a correspondência anterior (que é sempre exatamente o caractere anterior; exceto a primeira correspondência em que não faz nada).
fonte
Java 8, 27 bytes
Experimente online.
Os 31 bytes antigos respondem antes que as regras sejam alteradas:
NOTA: A sugestão de @EmbodimentOfIgnorance (em
\n|.
vez de(?s).
foi revertida, pois falha se a entrada contiver\r
. Obrigado por relatar a @ OlivierGrégoire .Experimente online.
Explicação:
Explicação Regex:
fonte
(?s).
pode ser substituído por\n|.
\n|.
versão não funciona corretamente com a entrada"\r"
. A(?s).
versão funciona corretamente com\r
, no entanto.\n
é imprimível, mas não faz parte do intervalo imprimível ASCII.Pitão , 2 bytes
Experimente online!
.i
deixa duas cópias da entrada juntas. A entrada está implícita; portanto, uma versão 'completa' deste programa seria.iQQ
, ondeQ
está a entrada do programa.fonte
MarioLANG ,
23 2017 bytesExperimente online!
Ao contrário do brainfuck, MarioLANG retorna -1 no EOF, portanto, devemos aumentar o valor lido antes de compará-lo com zero e depois diminuir antes de imprimi-lo. Esta é provavelmente a resposta mais curta possível no MarioLANG.
fonte
Brain-Flak , 48 bytes
Experimente online!
Este código possui duas seções principais. O primeiro apenas inverte a string:
O segundo é quase idêntico, inverte a corda e dobra os caracteres no lugar
A razão pela qual precisamos reverter as coisas é que precisamos tocar em todos os elementos das strings para obter a saída. Como o Brain-Flak usa um modelo de pilha, tocar em cada personagem significa abrir todos os elementos e pressioná-los. Devido à maneira FIFO de uma pilha, isso significa que toda vez que isso é feito, você reverte a string. O problema de reversão não está presente no Brain-Flueue abaixo.
Conduta cerebral , 28 bytes
Experimente online!
Como as filas são as primeiras a sair, tudo o que precisamos fazer no Brain-Flueue é percorrer toda a cadeia, duplicando todos os caracteres no lugar. No entanto, isso dificulta a iteração em toda a pilha. No Brain-Flak, poderíamos simplesmente ir até a altura da pilha ser zero, no entanto, com uma fila, pressionar algo o coloca no fundo da fila, essencialmente perdendo-o. Em vez disso, usamos a segunda fila para acompanhar o número de operações que precisamos. Isso faz com que o loop principal se pareça com:
Com o conteúdo sendo escasso
Apenas por diversão, essas duas respostas podem ficar muito menores se não houver bytes nulos na entrada (valor ASCII zero)
Flak cerebral , 26 bytes
Experimente online!
Conduta cerebral , 14 bytes
Experimente online!
fonte