Napisz wyrażenie regularne, które pasuje do danego ciągu składającego się z trzech nieujemnych liczb całkowitych oddzielonych spacją, jeśli i tylko wtedy, gdy ostatnia liczba całkowita jest sumą dwóch poprzednich. Odpowiedzi mogą dotyczyć liczb całkowitych dowolnego systemu liczbowego o podstawach od 2 do 10.
Przypadki testowe
Powinny one zawieść:
0 1 2
10 20 1000
Powinny one pasować:
10 20 30
28657 46368 75025
0 0 0
Zasady
Twoja odpowiedź powinna składać się z jednego wyrażenia regularnego, bez dodatkowego kodu (z wyjątkiem, opcjonalnie, listy modyfikatorów wyrażeń regularnych wymaganych do działania rozwiązania). Nie wolno używać funkcji smaku regularnego swojego języka, które pozwalają na wywołanie kodu w języku hostingowym (np. Modyfikator e Perla).
Podaj swój smak wyrażenia regularnego w swojej odpowiedzi.
To jest wyrażenie regularne, więc wygrywa najkrótszy wyrażenie regularne w bajtach. Jeśli twój język wymaga ograniczników (zwykle /.../) do oznaczania wyrażeń regularnych, nie licz samych ograniczników. Jeśli Twoje rozwiązanie wymaga modyfikatorów, dodaj jeden bajt na modyfikator.
Podziękowania dla Martina Endera i Jaytei za reguły gry w golfa.
Mam powód, by sądzić, że jest to możliwe w oparciu o rozwiązanie Martina Endera dotyczące wyszukiwania i zwiększania liczb całkowitych za pomocą wyrażenia regularnego .
źródło
/e
Modyfikator Perla 5 dotyczy tylko podstawień i nie jest jedynym sposobem uruchamiania zewnętrznego kodu. Również to całkowicie dyskwalifikuje Perl 6, ponieważ wyrażenie regularne jest tylko metodą z dodatkową składnią. (Powodem jest to, że sprawia, że wyrażenia regularne są łatwiejsze do odczytu i zapisu). W rezultacie wszystkie funkcje potrzebne w archaicznych wyrażeniach regularnych nie są potrzebne (lub włączone), jak właśnie wstawiłeś kod Perla 6. (co oznacza, że prawdopodobnie nie jest to możliwe, aby zrobić to wyzwanie, jeśli tylko ograniczać się do konkretnego kodu regex)/^(\d+)**3%' '$ <?{$0[2]==[+] $0[0,1]}>/
lub/^(\d+)' '(\d+)' '(\d+)$ <?{$2==$0+$1}>/
lub/^(\d+)' '(\d+){}" {$0+$1}"$/
Odpowiedzi:
Perl / PCRE: 2685 bajtów
Wypróbuj online!
Czekałem na trudne wyzwania po przerwie od regexu i po prostu natknąłem się na tego doozy. Weryfikacja dodania (za pomocą Perla / PCRE) to coś, o czym myślałem wcześniej, ale natychmiast odrzucono ją jako niemożliwą lub przekraczającą moje możliwości. Jednak wziąłem teraz kolejny crack i jestem bardzo podekscytowany, że tak naprawdę to zrobiłem!
Tak naprawdę nie grałem w golfa, oprócz pisania krótkich algorytmów i ogólnej techniki dopasowywania. Jestem bardzo szczęśliwy, że to zrobiłem: D
Jeśli ludzie są zainteresowani, mogę dodać komentarze i wyjaśnić, jak to działa.
Edycja: Napisałem na swoim blogu szczegółowy post z wyjaśnieniami i komentarzami :). Ciesz się: http://www.drregex.com/2018/09/a-regex-i-submitted-to-reddit-climbed.html
źródło
Aromat .NET,
139111106 + 1 = 107 bajtówPotrzebuje
RightToLeft
modyfikatorar
. Wprowadź dane binarne.Wypróbuj online! (Korzystanie z siatkówki .)
Tak dla grup bilansujących. Wyjaśnię to później ...
Wersja dziesiętna,
340243 + 1 = 244 bajtyWypróbuj online!
źródło
.NET, 96 bajtów
Flaga:
r
Wypróbuj online!
Wersja dziesiętna, 238 bajtów
Flaga:
r
Wypróbuj online!
Podobna do odpowiedzi Martina.
źródło