var QUESTION_ID=80196,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/80196/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}
<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>
/
e\
. Talvez para outra pergunta ...Respostas:
Caracóis , 19 bytes
As especificações para este podem ser implementadas o mais literalmente possível, sem necessidade de pensar.
fonte
udlr
defina a direção do caracol para cima / baixo / esquerda / direita.|
funciona como no regex regular e)
não precisa de um parêntese aberto correspondente. Portanto, o código se traduz diretamente em "Encontre umv<>^
e defina a direção de forma apropriada e tente encontrar um O nessa direção".,
é como o*
do regex.Retina,
565242383130 bytesGuardado 1 byte graças a @ MartinBüttner
Abusa das propriedades dos retângulos. Requer entrada para ter uma nova linha à direita.
Experimente online
Explicação
Isso funciona em três partes:
>
<
^
ev
isso ocorre porque a lógica para^
ev
é realmente a mesma, apenas os caracteres.Validando
<
Isto é simples:
Corresponde a um
O
, opcionalmente seguido por caracteres que não são de nova linha, depois um<
Validando
>
É o mesmo da maneira anterior, exceto o contrário. Primeiro a
>
é correspondido, então oO
Validando
^
ev
Foi difícil jogar golfe e a publicidade da entrada sempre era válida. Primeiro, combinamos se é
v
ou umO
:Se for um
^
, o primeiro caractere encontrado deve ser aO
. Portanto, isso corresponde ao primeiro caractere a ser correspondido. Em seguida, contamos a quantidade de.
s que segue até a nova linha:Em seguida, isso pode ser dividido em duas partes, abordarei a primeira:
Então, primeiro, correspondemos até o seguinte
O
, usando:Opcionalmente, isso corresponde a todos os
O
caracteres não até que umO
seja encontrado, se for bem-sucedido, continuará ... se não, o seguinte acontece ...Agora, ele tenta encontrar o
^
uso:^
é um caractere especial no regex, portanto, ele precisa ser escapado.[^^]
corresponde a todos os caracteres^
, exceto , isso funciona da mesma forma que acima, se for bem-sucedido, acontece o seguinte ...Portanto, agora, uma das opções acima correspondeu com êxito,
\1
verifica e verifica se o grupo de captura anterior(.*\n)
, esse grupo de captura armazenou a quantidade de.
s que havia após o antesv
ou oO
anterior; agora,\1
apenas verifica se a quantidade de pontos no mesmo.fonte
¶
em vez de\n
(Retina pode lidar com código-fonte em ISO 8859-1.)¶
era apenas \ n em substituições, obrigado pela dica!¶
todos os lugares, antes de fazer mais análises.Java (sem regex),
413412246242212211209198 bytesCompetir em desafios de golfe usando java tem menos sentido do que participar da corrida de Fórmula 1 em bicicleta, mas nem sempre estou pensando o que faz algum sentido.
Aqui está minha solução java extremamente longa Versão Golfed
e ungolfed
Parece que todo o meu conceito estava errado, aqui está a minha solução mais curta
e versão não destruída
EDITAR Eu reescrevi o código para procurar 'O', agora ele contém um loop único e é muito mais curto, e também usei a sugestão @Frozn para substituir alguns caracteres por seus valores ascii.
Como resultado, outros 30 bytes mordem a poeira.
Outra sugestão do @Frozn, e estamos alguns bytes mais próximos da solução Python
Outra reescrita solta um loop e combina duas instruções if
fonte
return
e(
salvar um byte. O espaço não é necessário quando seu valor de retorno está entre parênteses (ou aspas para Strings). Fonte das dicas de golfe de código Java.'O' = 79
,'>' = 62
,'<' = 60
,'^' = 94
. Para 'v' é 118, mas isso não reduz o código.MATL (sem regex),
26252422 bytesExperimente Online!
Versão modificada para todos os casos de teste
Explicação
fonte
J
'O'
, não número0
. O código ASCII para carta'O'
é79
CJam (sem regex), 25
Versões anteriores estavam erradas, isso terá que ser feito por enquanto:
Experimente online
Explicação:
Tentei algumas fórmulas matemáticas para distinguir entre "boas" e "más" e, para cada tipo de fórmula, tentei inserir vários números. Acabei com o
HbI%
acima exposto.cadeias "boas" para a grade original são "> O" e "O <" e fornecem o resultado 17
cadeias "boas" para a grade transposta são "vO" e "O ^" e dão o resultado 15 como
"ruins" seqüências de caracteres para ambas as grades são: ">", "<", "^", "v", "O", "", "O>", "Ov", "<O", "^ O" e fornecem os resultados 8, 6, 4, 10, 7, 0, 1, 3, 1, 3
fonte
Python 3 (sem regex), 184 bytes.
Viva para hackers de avaliação!
fonte
TSQL (sqlserver 2012) (sem regex), 358 bytes
Teve que usar funky linechange na declaração para forçar a versão online a executá-la (atribuir valores às variáveis de entrada não afeta o cálculo do comprimento)
Experimente online!
fonte
Pitão, 43 bytes
Demonstração ao vivo.
fonte
JavaScript (ES6), 78 bytes
Regexp, é claro. Acabou sendo semelhante em princípio à resposta Ruby.
fonte
Ruby,
715554 bytesSolução Regex, o que significa que provavelmente será facilmente derrotado por Retina ou Perl.
Retorna um número de índice (verdade) se houver uma correspondência.
Agora, com um truque semelhante à resposta do @Downgoat Retina, correspondendo às vigas para baixo e para cima ao mesmo tempo.
fonte
JavaScript (ES6) (sem regex), 126 bytes
Onde
\n
representa o caractere literal de nova linha.fonte
Clojure (sem regex), 293 bytes
Não parece ótimo. Solução simples, localizando o índice dos caracteres correspondentes e calculando se eles estão na mesma linha.
Você pode experimentá-lo aqui https://ideone.com/m4f2ra
fonte
Python (sem regex), 105 bytes
retorna Verdadeiro ou Falso
Primeiro, retira '.' e '\ n' das extremidades, para que os caracteres de interesse, '0 <> v ^', sejam o primeiro e o último caracteres.
'>O<vO^'.find(t[0]+t[-1])//3
- verifica se os caracteres são um arranjo potencialmente válido. Avalia como 0 para '> O' ou 'O <', para 1 para 'vO' ou 'O ^' e para -1 para qualquer outra coisa.'\n'in t
- verifica se os caracteres estão em linhas diferentes,len(t)%(s.find('\n')+1)!=1
- verifica se estão em colunas diferentes, e1
- é o padrãoO
not
inverte o resultado selecionado da lista, portanto areturn
expressão é equivalente a:fonte
Julia (sem regex), 98
Função operando em uma matriz de caracteres, normalizando por rotação, removendo linhas e colunas contendo apenas pontos pela indexação de intervalo e, finalmente, verificando a localização de 'O' levando em consideração se o restante b é um vetor de coluna ou linha usando multiplicação de matrizes.
Experimente online
fonte
Python 2 (sem regex), 268 bytes
Os valores de Truthy e Falsy retornados pela função são 1 e 0, respectivamente.
Ainda não tive a chance de jogar golfe. Sinceramente, não tenho muita esperança deste ...
Todas as sugestões serão muito apreciadas!
fonte
C # (sem regex), 282 bytes
Funciona como a versão java, mas transpilada e reduzida
Expandido (explicação incluída):
fonte
C (ANSI) (sem regex), 237 bytes
Expandido:
Acho que tomei uma abordagem decentemente diferente aqui em comparação com as implementações Java ou C #. Peguei coordenadas do 'O' e da flecha ((c, d) e (x, y)) e as comparei para ver se a flecha estava apontando na direção correta.
Retorna 0 se falso e 1 se verdadeiro
fonte
Grime v0.1 , 31 bytes
Não é uma solução muito interessante. Imprime
1
para instâncias0
verdadeiras e falsas. Experimente online!Explicação
Simplesmente procuramos no retângulo de entrada um padrão de tamanho mínimo (n × 1 ou 1 × n) que contenha o laser e o alvo na ordem correta. A
n`
bandeira faz com que o intérprete imprima o número de correspondências, das quais sempre haverá no máximo uma. O restante da linha consiste em quatro padrões separados por|
-characters, o que significa um OR lógico: um retângulo é correspondido se corresponder a um dos padrões. Os padrões funcionam da seguinte maneira:fonte