var QUESTION_ID=86647,OVERRIDE_USER=48934;function answersUrl(e){return"http://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"http://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}
<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:
V ,
1514 bytesExperimente online!
Uma solução bastante direta. O desafio perfeito para o V!
Explicação:
Convenientemente, com base em como a recursão funciona, isso será executado uma vez para cada sinal de intercalação.
fonte
Queijo Cheddar,
777267 bytesSem regex!
Eu amo essa resposta, pois é uma demonstração maravilhosa das habilidades do Cheddar. Principalmente graças à função de substituição adicionada por Conor. O PR para dev nunca foi feito, portanto a função de substituição existe apenas neste ramo (atualização: eu fiz o PR e agora ele está no último ramo beta com o qual você pode instalar
npm install -g cheddar-lang
)Eu encontrei uma maneira de jogar golfe, mas infelizmente uma supervisão resulta nisso quando os comprimentos dos itens não são os mesmos:
Eu poderia ter salvo muitos bytes usando regex e, na verdade, acabei de criar regex para o Cheddar ... o único problema é que não há funções de regex: /
Explicação
Para entender melhor. É isso que
.lines
retorna para1^2
o
.turn
com rodar isto:para dentro:
Outro exemplo que tornará mais claro:
torna-se:
Por que formatar?
O que
%-2s
está fazendo é bem simples.%
especifica que estamos iniciando um "formato" ou que uma variável será inserida nessa sequência neste momento.-
significa colocar a corda com o botão direito e2
é o comprimento máximo. Por padrão, ele preenche os espaços.s
apenas especifica que é uma string. Para ver o que faz:fonte
turn
método para cordas?Perl, 21 + 1 = 22 bytes
Corra com a
-p
bandeira. Substitua♥
por umESC
byte bruto (0x1b
) e↓
por uma guia vertical (0x0b
).A guia vertical é idéia de Martin Ender. Ele salvou dois bytes! Obrigado.
fonte
JavaScript (ES6),
5655 bytesRegexps para o resgate, é claro. O primeiro substitui todos os caracteres por espaços, a menos que encontre um sinal de intercalação; nesse caso, ele exclui o sinal de intercalação e mantém o caracter após. (É garantido que esses caracteres existam.) O segundo é o óbvio para substituir cada sinal de intercalação e seu caractere a seguir por um espaço.
Edit: Salvo 1 byte, graças a @Lynn, que criou uma maneira de reutilizar a sequência de substituição para a segunda substituição, permitindo que a substituição seja mapeada sobre uma matriz de regexps.
fonte
s=>[/.(\^(.))?/g,/\^.(())/g].map(r=>s.replace(r,' $2'))
é um byte mais curto.Python 3,
15710198858374 bytesEssa solução monitora se o caractere anterior era
^
e decide se deve enviar para a primeira ou segunda linha com base nisso.Saídas como uma matriz de
['firstline', 'secondline']
.Guardado
1315 bytes graças a @LeakyNun!Guardado 7 bytes graças a @Joffan!
fonte
a=['','']
concatenar' '
ec
entrar diretamente ema[l]
ea[~l]
?Python 2, 73 bytes
Sem regex. Lembra se o caractere anterior era
^
e coloque o caractere atual na linha superior ou inferior com base nisso, e um espaço no outro.fonte
Pitão, 17 bytes
Retorna uma matriz de 2 strings. Anexe um
j
ingresso a eles com uma nova linha.Experimente online .
fonte
MATL , 18 bytes
Experimente online!
fonte
Ruby, 47 + 1 (
-n
sinalizador) = 48 bytesExecute-o assim:
ruby -ne 'puts$_.gsub(/\^(.)|./){$1||" "},gsub(/\^./," ")'
fonte
$_=$_.gsub(/\^(.)|./){$1||" "}+gsub(/\^./," ")
e em-p
vez de-n
.+$/
significa que ele não salvará bytes.puts
lança a nova linha para você automaticamente quando,
está presente entre argumentos.ruby -p ... <<< 'input'
mas concordo, se está faltando a nova linha, não é bom! Na verdade, eu poderia ter uma nova linha anexada nos meus testes mais cedo ... Mas estava no trabalho, então não posso verificar!gets
inclui a nova linha à direita na maioria das vezes, mas se você inserir um arquivo que não contém a nova linha à direita, ela não aparecerá e a saída estará errada. . Teste seu código com oruby -p ... inputfile
Ruby, pois o redirecionagets
para o arquivo se for um argumento de linha de comando.Python (2),
766867 bytes-5 Bytes graças a @LeakyNun
-3 Bytes graças a @ KevinLau-notKenny
-1 Byte graças a @ValueInk
-0 bytes graças a @DrGreenEggsandIronMan
Essa função Lambda anônima toma a string de entrada como seu único argumento e retorna as duas linhas de saída separadas por uma nova linha. Para chamá-lo, dê um nome escrevendo "f =" antes dele.
Regex bastante simples: a primeira parte substitui o seguinte por um espaço: qualquer caractere e um
sinal deintercalação decenouraou apenas um caractere, mas somente se não houver intercalação antes deles. A segunda parte substitui qualquer sinal de intercalação na cadeia de caracteres e o caractere após um espaço.fonte
from re import*
lambda i,s=re.sub:[s("(?<!\^).\^?"," ",i),s("\^."," ",i)]
por -1 byteConvexo, 24 bytes
Experimente online!
fonte
Retina, 16 bytes
Um porto da minha resposta Perl, apontado por Martin Ender. Substitua
♥
por umESC
byte bruto (0x1b
) e↓
por uma guia vertical (0x0b
).fonte
shell + TeX + catdvi,
5143 bytesUsa
tex
para digitar algumas belas matemáticas e depois usacatdvi
para fazer uma representação de texto. O comando head remove o lixo eletrônico (numeração de página, linhas novas à direita) que estiver presente.Edit: Por que a coisa longa e adequada e redireciona para
/dev/null
quando você pode ignorar os efeitos colaterais e gravar em um único arquivo de letra?Exemplo
Entrada:
abc^d+ef^g + hijk^l - M^NO^P (Ag^+)
Saída TeX (cortada para a equação): Saída final:
Pressupostos: inicie no diretório vazio (ou especificamente um diretório sem nome que termina em "i"). Entrada é um argumento único para o script de shell. A entrada não é uma sequência vazia.
Alguém me diz se isso é abuso de regras, especialmente
catdvi
.fonte
Haskell,
745655 bytesRetorna um par de strings. Exemplo de uso:
unzip.g $ "abc^d+e:qf^g + hijk^l - M^NO^P: (Ag^+)"
->(" d g l N P + ","abc +e:qf + hijk - M O : (Ag )")
g
faz uma lista de pares, onde o primeiro elemento é o caractere na linha superior e o segundo elemento é o caractere na linha inferior.unzip
transforma em um par de listas.Edit: @xnor sugeriu
unzip
que economiza 18 bytes. A @Laikoni encontrou mais um byte para economizar. Obrigado!fonte
j=unzip.g
?g[]=[]
porg x=x
para salvar um byte.Perl, 35 bytes
Código de 34 bytes + 1 para
-p
Uso
Nota: É exatamente o mesmo que a resposta da Value Ink , que espiei depois. Removerá se necessário, pois isso realmente não adiciona à solução Ruby.
fonte
Java 8 lambda,
132128112 caracteresA versão ungolfed é assim:
Saída como uma matriz, simplesmente verificando se existe um sinal de intercalação e, se houver, o próximo caractere será colocado na linha superior, caso contrário, haverá um espaço.
Atualizações
Caracteres substituídos por seus valores ascii para salvar 4 caracteres.
Agradecemos a @LeakyLun por apontar para usar uma matriz de caracteres como entrada.
Também obrigado a @KevinCruijssen por mudar
int
parachar
para salvar mais alguns caracteres.fonte
char[]
e usarfor(char c:i)
para ver se a contagem de bytes pode ser reduzida.i->{String[]r={"",""};for(char j=0,c;j<i.length;j++){c=i[j];r[0]+=c==94?i[++j]:32;r[1]+=c==94?32:c;}return r;}
with"abc^d+ef^g + hijk^l - M^NO^P (Ag^+)".toCharArray()
como entrada. ( Ideone dessas mudanças. )Coco ,
122 11496 bytesEdit:
826 bytes abaixo com a ajuda de Leaky Nun.Então, como eu aprendi hoje, o python tem um operador condicional ternário, ou de fato dois deles:
<true_expr> if <condition> else <false_expr>
e o<condition> and <true_expr> or <false_expr>
último vem com um caractere a menos.Uma versão em conformidade com python pode ser ideonada .
Primeira tentativa:
Ligando com
f("abc^d+ef^g + hijk^l - M^NO^P (Ag^+)")
impressõesAlguém já tentou jogar golfe no coco? Ele enriquece o python com conceitos de programação mais funcionais, como a correspondência de padrões e a concatenação de funções (com
..
) usadas acima. Como esta é minha primeira tentativa de coco, qualquer dica seria apreciada.Definitivamente, isso pode ser reduzido, pois qualquer código python válido também é válido coco e respostas mais curtas foram publicadas, no entanto, tentei encontrar uma solução puramente funcional.
fonte
x and y or z
) para substituir ocase
.s[0]=="^"
vez dematch['^',c]+r in l
match['^',c]+r
pors[0]=="^"
, entãoc
er
não estamos mais vinculados. Como isso ajudaria?s[1]
para substituirc
es[2:]
substituirr
.Dyalog APL, 34 bytes
Retorna um vetor de dois elementos com as duas linhas
Execução da amostra (a parte superior na frente é formatar o vetor de dois el. Para consumo humano):
fonte
PowerShell v2 +,
8883 bytesUm pouco mais do que os outros, mas mostra um pouco de magia do PowerShell e uma lógica um pouco diferente.
Essencialmente, o mesmo conceito que o Python responde - iteramos a entrada caractere por caractere, lembramos se o anterior era um sinal de intercalação (
$c
) e colocamos o caractere atual no local apropriado. No entanto, a lógica e o método para determinar onde a saída é manipulada de maneira um pouco diferente e sem uma tupla ou variáveis separadas - testamos se o caractere anterior era um sinal de intercalação e, se for o caso, transmitimos o caractere para o pipeline e concatenamos um espaço no$b
. Caso contrário, verificamos se o caractere atual é um sinal de intercalaçãoelseif($_-94)
e, desde que não seja, concatenamos o caractere atual$b
e produzimos um espaço para o pipeline. Finalmente, definimos se o caractere atual é um sinal de intercalação para a próxima rodada.Reunimos esses caracteres do pipeline juntos em parênteses, os encapsulamos em um
-join
que os transforma em uma string e deixamos isso junto com$b
o pipeline. A saída no final está implícita com uma nova linha entre elas.Para comparação, aqui está uma porta direta da resposta Python do @ xnor , em 85 bytes :
fonte
Gema,
4241 caracteresO gema processa a entrada como fluxo, portanto, você deve resolvê-la em uma única passagem: a primeira linha é gravada imediatamente como processada, a segunda linha é coletada na variável $ s e, em seguida, a saída é finalizada.
Exemplo de execução:
fonte
Goma de canela, 21 bytes
Não concorrente. Experimente online.
Explicação
Eu não sou muito jogador de regex, então provavelmente há uma maneira melhor de fazer isso.
A cadeia de caracteres descompacta para:
(observe o espaço à direita)
O primeiro
S
estágio recebe entrada e usa um lookbehind negativo para substituir todos os caracteres, exceto os sinais de intercalação por nenhum cursor anterior, por um espaço e, em seguida, exclui todos os sinais de intercalação. Em seguida, ele envia imediatamente a sequência de entrada modificada com uma nova linha e remove esseS
estágio. Como o STDIN agora está esgotado e o estágio anterior não forneceu nenhuma entrada, o próximoS
estágio recebe a última linha do STDIN novamente e substitui todos os pontos de intercalação seguidos por qualquer caractere por um espaço e gera esse resultado.No código psledo Perl:
fonte
J ,
2827 bytesExperimente online!
Deve haver uma maneira melhor ...
fonte