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>
/
und einfügen\
. Vielleicht für eine andere Frage ...Antworten:
Schnecken , 19 Bytes
Die Spezifikation für diese kann so wörtlich wie möglich implementiert werden, kein Denken erforderlich.
quelle
udlr
Stellen Sie die Richtung der Schnecke auf hoch / runter / links / rechts.|
Funktioniert wie bei regulären regulären Ausdrücken und)
benötigt keine passende offene Klammer. Der Code übersetzt sich also ziemlich direkt in "Suchen Sie eine vonv<>^
und stellen Sie die Richtung entsprechend ein, und versuchen Sie dann, ein O in dieser Richtung zu finden.",
die*
von Regex.Retina,
565242383130 Bytes1 Byte gespart dank @ MartinBüttner
Missbraucht Eigenschaften von Rechtecken. Erfordert die Eingabe einer nachgestellten Zeile.
Probieren Sie es online aus
Erläuterung
Dies funktioniert in drei Teilen:
>
<
^
undv
das liegt daran, dass die Logik für^
undv
wirklich die gleichen ist, nur die Charaktere.Validierung
<
Das ist ganz einfach:
Dies entspricht einem
O
, optional gefolgt von Nicht-Newline-Zeichen, dann einem<
Validierung
>
Dies ist ähnlich wie beim vorherigen Weg, nur anders herum. Zuerst
>
wird a abgeglichen, dann derO
Validierung
^
undv
Dies war schwierig zu golfen und es wurde dafür geworben, dass der Input immer gültig war. Erstens stimmen wir überein, ob es sich um Folgendes handelt
v
oder umO
:Wenn es ein ist
^
, sollte das erste Zeichen, das angetroffen wird, ein seinO
. Das stimmt also mit dem ersten Zeichen überein, das übereinstimmt. Als nächstes zählen wir die Anzahl von.
s, die ihm bis zur Newline folgen:Als nächstes kann dies in zwei Teile gehen, ich werde das erste behandeln:
Also stimmen wir zuerst mit Folgendem überein
O
:Dies stimmt optional mit allen Nicht-
O
Zeichen überein , bis ein gefundenO
wird. Wenn dies erfolgreich ist, wird es fortgesetzt. Wenn nicht, passiert Folgendes.Nun versucht es die
^
Verwendung zu finden :^
ist ein Sonderzeichen in Regex, daher muss es maskiert werden.[^^]
stimmt mit allen Zeichen überein, außer^
, dies funktioniert genauso wie oben, wenn dies erfolgreich ist, passiert Folgendes ...So , jetzt eine der oben hat erfolgreich angepasst, um die
\1
Kontrollen und sieht , wenn die Capture - Gruppe aus der Zeit vor(.*\n)
, diese Capture - Gruppe die Menge der gespeicherten.
s dort die nach entweder warenv
oderO
aus der Zeit vor, so dass jetzt\1
nur überprüft , ob die Menge von Punkten in der gleich.quelle
¶
anstelle von\n
(Retina kann Quellcode in ISO 8859-1 verarbeiten.)¶
nur an Ersatz, danke für den Tipp!¶
, bevor eine weitere Analyse durchgeführt wird.Java (kein regulärer Ausdruck),
413412246242212211209198 BytesMit Java an Golfherausforderungen teilzunehmen hat weniger Sinn als mit dem Fahrrad an einem Formel-1-Rennen teilzunehmen, aber ich denke nicht immer, was Sinn macht.
Hier ist meine extrem lange Java-Version der Golfed-Version
und ungolfed
Anscheinend war mein gesamtes Konzept falsch, hier ist meine kürzere Lösung
und ungolfed version
BEARBEITEN Ich habe den Code für die Suche nach 'O' umgeschrieben, jetzt enthält er eine einzelne Schleife, die viel kürzer ist, und ich habe den @Frozn-Vorschlag verwendet, um einige Zeichen durch ihre ASCII-Werte zu ersetzen.
Weitere 30 Bytes beißen den Staub.
Ein weiterer Vorschlag von @Frozn, und wir sind ein paar Bytes näher an der Python-Lösung
Bei einem weiteren Umschreiben wird eine Schleife gelöscht und zwei if-Anweisungen kombiniert
quelle
return
und entfernen(
, um ein Byte zu speichern. Das Leerzeichen ist nicht erforderlich, wenn der Rückgabewert in Klammern (oder Anführungszeichen für Zeichenfolgen) steht. Quelle aus den Java-Code-Golftipps.'O' = 79
,'>' = 62
,'<' = 60
,'^' = 94
. Für 'v' ist es 118, aber das verkürzt den Code nicht.MATL (kein regulärer Ausdruck),
26252422 ByteProbieren Sie es online!
Geänderte Version für alle Testfälle
Erläuterung
quelle
J
'O'
, keine Zahl0
. Der ASCII-Code für den Buchstaben'O'
lautet79
CJam (kein regulärer Ausdruck), 25
Frühere Versionen waren falsch, dies muss vorerst tun:
Probieren Sie es online aus
Erläuterung:
Ich habe ein paar mathematische Formeln ausprobiert, um zwischen "guten" und "schlechten" Zeichenfolgen zu unterscheiden, und für jede Art von Formel habe ich versucht, verschiedene Zahlen einzugeben. Ich endete mit dem
HbI%
oben genannten."gute" Zeichenfolgen für das ursprüngliche Raster sind "> O" und "O <" und ergeben das Ergebnis 17
"gute" Zeichenfolgen für das transponierte Raster sind "vO" und "O ^" und ergeben das Ergebnis 15
"schlecht" Zeichenfolgen für beide Gitter sind: ">", "<", "^", "v", "O", "", "O>", "Ov", "<O", "^ O" und sie geben die Ergebnisse 8, 6, 4, 10, 7, 0, 1, 3, 1, 3
quelle
Python 3 (kein regulärer Ausdruck), 184 Byte.
Hurra für eval hacking!
quelle
TSQL (SQL Server 2012) (kein regulärer Ausdruck), 358 Byte
Musste funky Linechange in der Deklaration verwenden, um die Ausführung der Online-Version zu erzwingen (das Zuweisen von Werten zu Eingabevariablen hat sowieso keinen Einfluss auf die Längenberechnung)
Probieren Sie es online!
quelle
Pyth, 43 Bytes
Live-Demo.
quelle
JavaScript (ES6), 78 Byte
Regexp natürlich. Hat sich im Prinzip als ähnlich erwiesen wie die Ruby-Antwort.
quelle
Ruby,
715554 BytesRegex-Lösung, was bedeutet, dass es wahrscheinlich leicht von Retina oder Perl geschlagen werden wird.
Gibt eine Indexnummer (wahr) zurück, wenn eine Übereinstimmung vorliegt.
Jetzt mit einem ähnlichen Trick wie @Downgoat Retina antworten und gleichzeitig für Down- und Up-Beams abgleichen.
quelle
JavaScript (ES6) (kein regulärer Ausdruck), 126 Byte
Wobei
\n
das wörtliche Zeilenumbruchzeichen darstellt.quelle
Clojure (kein regulärer Ausdruck), 293 Byte
Fühlt sich nicht gut an. Einfache Lösung: Finden des Index der entsprechenden Zeichen und Berechnen, ob sie sich in derselben Zeile befinden.
Sie können es hier versuchen https://ideone.com/m4f2ra
quelle
Python (kein regulärer Ausdruck), 105 Byte
gibt True oder False zurück
Zuerst Streifen '.' und '\ n' von den Enden, so dass die interessierenden Zeichen '0 <> v ^' das erste und letzte Zeichen sind.
'>O<vO^'.find(t[0]+t[-1])//3
- prüft, ob die Zeichen eine möglicherweise gültige Anordnung sind. Wertet 0 für '> O' oder 'O <', 1 für 'vO' oder 'O ^' und -1 für alles andere aus.'\n'in t
- prüft, ob sich die Zeichen in verschiedenen Zeilen befinden,len(t)%(s.find('\n')+1)!=1
- prüft, ob sie sich in verschiedenen Spalten befinden, und1
- ist die StandardeinstellungThe
not
inverts the result selected from the list, so thereturn
expression is equivalent to:quelle
Julia (no regex), 98
Function operating on an array of chars, normalizing by rotation, removing rows and columns containing only dots by range indexing and finally checking for location of 'O' taking into account if the remainder b is a column or row vector using matrix multiplication.
Try it online
quelle
Python 2 (no regex), 268 bytes
Truthy and Falsy values returned by the function are 1 and 0, respectively.
I haven't had a chance to golf yet. Honestly, I'm not too hopeful for this one...
Any suggestions would be greatly appreciated!
quelle
C# (No Regex), 282 bytes
Works like the java version but transpiled and reduced
Expanded (Explanation included):
quelle
C (ANSI) (No regex), 237 bytes
Expanded:
I think I took a decently different approach here compared to the Java or C# implementations. I got coordinates of the 'O' and arrow ((c,d) and (x,y)) and then compared them to see if the arrow was pointing in the correct direction.
Returns 0 if false and 1 if true
quelle
Grime v0.1, 31 bytes
Not a very interesting solution. Prints
1
for truthy instances, and0
for falsy ones. Try it online!Explanation
We simply search the input rectangle for a minimal-size (n×1 or 1×n) pattern that contains the laser and target in the correct order. The
n`
flag makes the interpreter print the number of matches, of which there will always be at most one. The rest of the line consists of four patterns separated by|
-characters, which means a logical OR: a rectangle is matched if it matches one of the patterns. The patterns work as follows:quelle