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>
/
et\
. Peut-être pour une autre question ...Réponses:
Escargots , 19 octets
La spécification pour celui-ci peut être implémentée aussi littéralement que possible, aucune réflexion requise.
la source
udlr
réglez la direction de l'escargot vers le haut / bas / gauche / droite.|
fonctionne comme dans les expressions régulières, et)
n'a pas besoin d'une parenthèse ouverte correspondante. Ainsi, le code se traduit assez directement par "Trouvez-en unv<>^
et définissez la direction de manière appropriée, puis essayez de trouver un O dans cette direction.",
c'est comme l'*
expression rationnelle.Rétine,
565242383130 octets1 octet enregistré grâce à @ MartinBüttner
Abuse les propriétés des rectangles. Nécessite une entrée pour avoir une nouvelle ligne de fin.
Essayez-le en ligne
Explication
Cela fonctionne en trois parties:
>
<
^
etv
c'est parce que la logique^
etv
sont vraiment les mêmes, juste les personnages.Valider
<
C'est simple:
Cela correspond à un
O
, éventuellement suivi de caractères non-newline, puis à un<
Valider
>
C'est à peu près la même chose que la méthode précédente, sauf l'inverse. D'abord, a
>
correspond, puisO
Validation
^
etv
Cela a été difficile à jouer au golf et a pris la publicité de l'entrée toujours valide. Tout d'abord, nous faisons correspondre si c'est
v
ou unO
:Si c'est un
^
, le premier caractère rencontré devrait être unO
. Donc, cela correspond au premier caractère à faire correspondre. Ensuite, nous comptons le nombre de.
s qui le suivent jusqu'à la nouvelle ligne:Ensuite, cela peut se diviser en deux parties, je couvrirai la première:
Donc, tout d'abord, nous faisons correspondre jusqu'à ce qui suit
O
, en utilisant:Cela correspond éventuellement à tous les non-
O
caractères jusqu'à ce qu'unO
soit rencontré, si cela réussit, alors cela continue ... sinon, alors ce qui suit se produit ...Maintenant, il essaie de trouver l'
^
utilisation:^
est un caractère spécial dans l'expression régulière, il doit donc être échappé.[^^]
correspond à tous les caractères sauf^
, cela fonctionne de la même manière que ci-dessus, si cela réussit, alors ce qui suit se produit ...Alors maintenant, l'un des éléments ci-dessus a réussi,
\1
vérifie et voit si le groupe de capture d'avant(.*\n)
, ce groupe de capture a stocké la quantité de.
s qu'il y avait après lev
ouO
depuis avant, alors maintenant\1
vérifie simplement si le nombre de points dans le même.la source
¶
au lieu de\n
(Retina peut gérer le code source dans ISO 8859-1.)¶
c'était seulement \ n en remplacement, merci pour le conseil!¶
partout, avant de procéder à une analyse supplémentaire.Java (pas d'expression régulière),
413412246242212211209198 198 octetsParticiper à des défis de golf en utilisant java a moins de sens que de participer à une course de Formule 1 à vélo, mais je ne pense pas toujours ce qui a du sens.
Voici ma solution java extrêmement longue version Golfed
et non golfé
On dirait que tout mon concept était faux, voici ma solution la plus courte
et version non golfée
EDIT J'ai réécrit le code pour rechercher 'O', maintenant il contient une boucle unique est beaucoup plus courte, et j'ai également utilisé la suggestion @Frozn pour remplacer certains des caractères par leurs valeurs ascii.
En conséquence, 30 octets supplémentaires mord la poussière.
Une autre suggestion de @Frozn, et nous nous rapprochons de quelques octets de la solution Python
Une autre réécriture supprime une boucle et combine deux instructions if
la source
return
et(
pour enregistrer un octet. L'espace n'est pas nécessaire lorsque votre valeur de retour est entre parenthèses (ou entre guillemets pour les chaînes). Source à partir des conseils Java de golf de code.'O' = 79
,'>' = 62
,'<' = 60
,'^' = 94
. Pour 'v' c'est 118 mais cela ne raccourcit pas le code.MATL (pas d'expression régulière),
26252422 octetsEssayez-le en ligne!
Version modifiée pour tous les cas de test
Explication
la source
J
'O'
, pas un chiffre0
. Le code ASCII pour la lettre'O'
est79
CJam (pas d'expression régulière), 25
Les versions antérieures étaient erronées, cela devra faire pour l'instant:
Essayez-le en ligne
Explication:
J'ai essayé quelques formules mathématiques pour faire la distinction entre les "bonnes" et les "mauvaises" chaînes, et pour chaque type de formule, j'ai essayé de brancher différents nombres. Je me suis retrouvé avec ce qui
HbI%
précède.les "bonnes" chaînes pour la grille d'origine sont "> O" et "O <" et elles donnent le résultat 17
"bonnes" chaînes pour la grille transposée sont "vO" et "O ^" et elles donnent le résultat 15
"mauvaises" les chaînes des deux grilles sont: ">", "<", "^", "v", "O", "", "O>", "Ov", "<O", "^ O" et elles donnent les résultats 8, 6, 4, 10, 7, 0, 1, 3, 1, 3
la source
Python 3 (pas d'expression régulière), 184 octets.
Hourra pour le piratage eval!
la source
TSQL (sqlserver 2012) (pas d'expression régulière), 358 octets
J'ai dû utiliser funky linechange dans la déclaration pour forcer la version en ligne à l'exécuter (l'attribution de valeurs aux variables d'entrée n'affecte pas le calcul de la longueur de toute façon)
Essayez-le en ligne!
la source
Pyth, 43 octets
Démo en direct.
la source
JavaScript (ES6), 78 octets
Regexp bien sûr. Il s'est avéré être similaire en principe à la réponse de Ruby.
la source
Rubis,
715554 octetsSolution Regex, ce qui signifie qu'elle sera probablement facilement battue par Retina ou Perl.
Renvoie un numéro d'index (véridique) en cas de correspondance.
Maintenant, avec une astuce similaire à la réponse @Downgoat Retina, correspondant aux faisceaux descendant et montant en même temps.
la source
JavaScript (ES6) (pas d'expression régulière), 126 octets
Où
\n
représente le caractère de nouvelle ligne littéral.la source
Clojure (pas d'expression régulière), 293 octets
Ne se sent pas bien. Solution simple, trouver l'index des caractères correspondants et calculer s'ils sont sur la même ligne.
Vous pouvez l'essayer ici https://ideone.com/m4f2ra
la source
Python (pas d'expression régulière), 105 octets
renvoie Vrai ou Faux
D'abord, dépouille '.' et '\ n' à partir des extrémités de sorte que les caractères d'intérêt, '0 <> v ^', soient les premier et dernier caractères.
'>O<vO^'.find(t[0]+t[-1])//3
- vérifie si les caractères sont un arrangement potentiellement valide. Évalue à 0 pour «> O» ou «O <», à 1 pour «vO» ou «O ^» et à -1 pour toute autre chose.'\n'in t
- vérifie si les caractères sont dans des lignes différentes,len(t)%(s.find('\n')+1)!=1
- vérifie s'ils sont dans des colonnes différentes, et1
- est la valeur par défautL'
not
inverse le résultat sélectionné dans la liste, donc l'return
expression est équivalente à:la source
Julia (pas d'expression régulière), 98
Fonction fonctionnant sur un tableau de caractères, normalisant par rotation, supprimant les lignes et les colonnes ne contenant que des points par indexation de plage et enfin vérifiant l'emplacement de `` O '' en tenant compte si le reste b est un vecteur de colonne ou de ligne utilisant la multiplication matricielle.
Essayez-le en ligne
la source
Python 2 (pas d'expression régulière), 268 octets
Les valeurs Truthy et Falsy renvoyées par la fonction sont respectivement 1 et 0.
Je n'ai pas encore eu l'occasion de jouer au golf. Honnêtement, je n'ai pas trop d'espoir pour celui-ci ...
Toutes les suggestions seraient grandement appréciées!
la source
C # (sans regex), 282 octets
Fonctionne comme la version java mais transposée et réduite
Développé (explication incluse):
la source
C (ANSI) (pas d'expression régulière), 237 octets
Étendu:
Je pense que j'ai adopté une approche décemment différente par rapport aux implémentations Java ou C #. J'ai obtenu les coordonnées du «O» et de la flèche ((c, d) et (x, y)), puis je les ai comparées pour voir si la flèche pointait dans la bonne direction.
Renvoie 0 si faux et 1 si vrai
la source
Grime v0.1 , 31 octets
Pas une solution très intéressante. Imprime
1
pour les instances véridiques et les0
fausses. Essayez-le en ligne!Explication
Nous recherchons simplement le rectangle d'entrée pour un motif de taille minimale (n × 1 ou 1 × n) qui contient le laser et la cible dans le bon ordre. Le
n`
drapeau fait que l'interprète imprime le nombre de correspondances, dont il y en aura toujours au plus une. Le reste de la ligne se compose de quatre motifs séparés par des|
caractères, ce qui signifie un OU logique: un rectangle est mis en correspondance s'il correspond à l'un des motifs. Les modèles fonctionnent comme suit:la source