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>
/
i\
. Może na inne pytanie ...Odpowiedzi:
Ślimaki , 19 bajtów
Specyfikację tego można wdrożyć tak dosłownie, jak to możliwe, bez potrzeby myślenia.
źródło
udlr
ustaw kierunek ślimaka w górę / dół / lewo / prawo.|
działa jak w regularnym wyrażeniu regularnym i)
nie potrzebuje pasującego otwartego nawiasu. Więc kod dość bezpośrednio tłumaczy się na „Znajdź jedenv<>^
i odpowiednio ustaw kierunek, a następnie spróbuj znaleźć O w tym kierunku”.,
jest podobne do*
wyrażenia regularnego.Retina,
565242383130 bajtówZapisano 1 bajt dzięki @ MartinBüttner
Nadużywa właściwości prostokątów. Wymaga wprowadzania, aby mieć końcowy znak nowej linii.
Wypróbuj online
Wyjaśnienie
Działa to w trzech częściach:
>
<
^
av
to dlatego, że logika^
iv
są naprawdę takie same, tylko postacie.Walidacja
<
To jest proste:
Odpowiada to
O
znakom opcjonalnie poprzedzającym znaki nie-nowej linii, a następnie a<
Walidacja
>
Jest to bardzo podobne do poprzedniego sposobu, z wyjątkiem sytuacji odwrotnej. Najpierw
>
dopasowywane jest a, a następnieO
Sprawdzanie poprawności
^
iv
To było trudne do gry w golfa i wymagało od reklamy, aby zawsze były aktualne. Po pierwsze, czy to pasuje
v
alboO
:Jeśli jest to
^
, pierwszą napotkaną postacią powinna byćO
. To pasuje do pierwszego pasującego znaku. Następnie zliczamy liczbę.
s następujących po nim do nowej linii:Następnie można podzielić na dwie części, omówię pierwszą:
Najpierw dopasowujemy do następujących
O
, używając:To opcjonalnie dopasowuje wszystkie
O
znaki inne niż doO
napotkania an , jeśli to się powiedzie, to będzie kontynuowane ... jeśli nie, to dzieje się ...Teraz próbuje znaleźć
^
użycie:^
jest znakiem specjalnym w wyrażeniu regularnym, dlatego należy go uciec.[^^]
pasuje do wszystkich znaków, z wyjątkiem^
tego, że działa tak samo jak powyżej, jeśli to się powiedzie, to dzieje się tak:Więc teraz jeden z powyższych został pomyślnie dopasowany,
\1
sprawdza i sprawdza, czy grupa przechwytywania z poprzedniej(.*\n)
, ta grupa przechwytywania zapisała ilość.
s po poprzedniejv
lubO
poprzedniej, więc teraz\1
po prostu sprawdza, czy ilość kropek w podobnie.źródło
¶
zamiast\n
(Retina może obsługiwać kod źródłowy w ISO 8859-1.)¶
\ n to tylko zamienniki, dzięki za wskazówkę!¶
wszędzie, przed dalszym analizowaniem.Java (bez wyrażenia regularnego),
413412246242212211209198 bajtówRywalizacja w golfa przy użyciu java ma mniej sensu niż udział w wyścigu Formuły 1 na rowerze, ale nie zawsze myślę, co ma jakiś sens.
Oto moje bardzo długie rozwiązanie Java Wersja w golfa
i nie golfił
Wygląda na to, że cała moja koncepcja była błędna, oto moje krótsze rozwiązanie
i wersja bez golfa
EDYCJA Przepisałem kod na szukanie „O”, teraz zawiera on jedną pętlę, jest znacznie krótszy, a także użyłem sugestii @Frozn, aby zastąpić niektóre znaki ich wartościami ascii.
W rezultacie kolejne 30 bajtów gryzie pył.
Kolejna sugestia @Frozn, a my jesteśmy kilka bajtów bliżej rozwiązania Python
Kolejne przepisanie upuść jedną pętlę i połącz dwie instrukcje if
źródło
return
i,(
aby zapisać bajt. Spacja nie jest konieczna, gdy zwracana wartość znajduje się w nawiasie (lub cudzysłowach dla ciągów). Źródło ze wskazówek Java dotyczących gry w golfa.'O' = 79
,'>' = 62
,'<' = 60
,'^' = 94
. Dla „v” jest to 118, ale to nie skraca kodu.MATL (bez wyrażenia regularnego),
26252422 bajtówWypróbuj online!
Zmodyfikowana wersja dla wszystkich przypadków testowych
Wyjaśnienie
źródło
J
'O'
, a nie liczba0
. Kod ASCII dla listu'O'
to79
CJam (bez wyrażenia regularnego), 25
Wcześniejsze wersje były niepoprawne, na razie trzeba to zrobić:
Wypróbuj online
Wyjaśnienie:
Wypróbowałem kilka formuł matematycznych służących do rozróżnienia „dobrych” i „złych” ciągów i dla każdego rodzaju formuły próbowałem podłączyć różne liczby. Skończyło się na
HbI%
powyższym.„dobre” ciągi dla oryginalnej siatki to „> O” i „O <” i dają wynik 17
„dobrych” ciągów dla transponowanej siatki to „vO” i „O ^” i dają wynik 15
„zły” ciągi dla obu siatek to: „>”, „<”, „^”, „v”, „O”, „”, „O>”, „Ov”, „<O”, „^ O” wyniki 8, 6, 4, 10, 7, 0, 1, 3, 1, 3
źródło
Python 3 (bez wyrażenia regularnego), 184 bajty.
Brawo dla ewidentnego hakowania!
źródło
TSQL (sqlserver 2012) (bez wyrażenia regularnego), 358 bajtów
Musiałem użyć funky zmiany linii w deklaracji, aby wymusić wykonanie wersji online (przypisanie wartości do zmiennych wejściowych i tak nie wpływa na obliczenie długości)
Wypróbuj online!
źródło
Pyth, 43 bajty
Demo na żywo.
źródło
JavaScript (ES6), 78 bajtów
Regexp oczywiście. Okazało się, że jest zasadniczo podobny do odpowiedzi Ruby.
źródło
Rubin,
715554 bajtówRozwiązanie Regex, co oznacza, że prawdopodobnie zostanie łatwo pobity przez Retinę lub Perla.
Zwraca numer indeksu (prawda), jeśli istnieje dopasowanie.
Teraz z podstępem podobnym do odpowiedzi @Downgoat Retina, dopasowując jednocześnie wiązki skierowane w dół i w górę.
źródło
JavaScript (ES6) (bez wyrażenia regularnego), 126 bajtów
Gdzie
\n
reprezentuje dosłowny znak nowej linii.źródło
Clojure (bez wyrażenia regularnego), 293 bajty
Nie czuje się świetnie. Proste rozwiązanie, znajdowanie indeksu odpowiednich znaków i obliczanie, czy są one w tej samej linii.
Możesz spróbować tutaj https://ideone.com/m4f2ra
źródło
Python (bez wyrażenia regularnego), 105 bajtów
zwraca True lub False
Najpierw paski ”. i „\ n” na końcach, tak aby interesujące znaki, „0 <> v ^”, były pierwszymi i ostatnimi znakami.
'>O<vO^'.find(t[0]+t[-1])//3
- sprawdza, czy znaki są potencjalnie poprawnym układem. Zwraca wartość 0 dla „> O” lub „O <”, do 1 dla „vO” lub „O ^” i do -1 dla dowolnej innej wartości.'\n'in t
- sprawdza, czy znaki znajdują się w różnych wierszach,len(t)%(s.find('\n')+1)!=1
- sprawdza, czy są w różnych kolumnach, i1
- jest wartością domyślnąW
not
odwraca wynik wybrany z listy, więcreturn
wyrażenie jest równoważne:źródło
Julia (bez wyrażenia regularnego), 98
Funkcja działająca na tablicy znaków, normalizująca się przez obrót, usuwająca wiersze i kolumny zawierające tylko kropki przez indeksowanie zakresu i wreszcie sprawdzająca lokalizację „O”, biorąc pod uwagę, czy reszta b jest wektorem kolumny lub wiersza przy użyciu mnożenia macierzy.
Wypróbuj online
źródło
Python 2 (bez wyrażenia regularnego), 268 bajtów
Wartości True i Falsy zwracane przez funkcję wynoszą odpowiednio 1 i 0.
Nie miałem jeszcze okazji grać w golfa. Szczerze mówiąc, nie mam nadziei na ten ...
Wszelkie sugestie będą mile widziane!
źródło
C # (bez regexu), 282 bajty
Działa podobnie jak wersja Java, ale jest transpilowana i redukowana
Rozszerzony (w zestawie Objaśnienie):
źródło
C (ANSI) (bez wyrażenia regularnego), 237 bajtów
Rozszerzony:
Myślę, że podjąłem tutaj całkiem inne podejście w porównaniu do implementacji Java lub C #. Mam współrzędne „O” i strzałki ((c, d) i (x, y)), a następnie porównałem je, aby zobaczyć, czy strzałka wskazuje właściwy kierunek.
Zwraca 0, jeśli fałsz i 1, jeśli prawda
źródło
Grime v0.1 , 31 bajtów
Niezbyt interesujące rozwiązanie. Odbitki
1
dla prawdziwych przypadków i0
dla fałszywych. Wypróbuj online!Wyjaśnienie
Po prostu szukamy prostokąta wejściowego w poszukiwaniu wzoru o minimalnym rozmiarze (n × 1 lub 1 × n), który zawiera laser i cel we właściwej kolejności.
n`
Flag sprawia interpreter wydrukować liczbę meczów, z których nie zawsze będzie co najwyżej jeden. Reszta linii składa się z czterech wzorów oddzielonych|
-znakami, co oznacza logiczne OR: prostokąt jest dopasowywany, jeśli pasuje do jednego ze wzorów. Wzory działają w następujący sposób:źródło