Mój nauczyciel zawsze daje mi najbardziej skomplikowany zestaw zadań matematycznych do odrabiania zadań domowych. Jak: pg. 546: 17-19, 22, 26, pg. 548: 35-67 odd, 79, 80-86 even
. Chcę z góry wiedzieć, ile czasu mam poświęcić na pracę domową, ale nie chcę tego wszystkiego wymyślać. Dlatego Twoim zadaniem jest zaprogramowanie go dla mnie.
Dane techniczne
- Otrzymasz ciąg opisujący problemy, które muszę wykonać, takie jak args, stdio itp.
- Będą oddzielone przecinkami (ewentualnie
comma-space
oddzielone) - Obejmuje pojedyncze problemy w postaci tylko liczby (np.
79
) - I zakresy w formularzu
17-18
(znowu musisz poradzić sobie z opcjonalnymi spacjami) - Zakresy obejmują oba końce
- Zakresy będą opcjonalnie sufiksowane przez
odd
lubeven
, co musisz wziąć pod uwagę. - Zestaw zakresów / stron zostanie poprzedzony numerem strony w formularzu
pg. 545:
, ponownie zajmując opcjonalne spacje. Możesz bezpiecznie je zignorować, ponieważ musisz rozwiązać problemy na wszystkich stronach - Tekst może być pisany wielkimi lub małymi literami, ale nie będzie to jedno i drugie.
- Zwrot, standardowe wyjście itp. Liczba problemów, które muszę zrobić w przypadku pracy domowej.
- Ponieważ jest to golfowy kod, wygrywa najkrótszy kod w bajtach!
Przypadki testowe
pg. 546: 17-19, 22, 26, pg. 548: 35-67 odd, 79, 80-86 even -> 27
pg. 34: 1 -> 1
PG. 565: 2-5,PG.345:7 -> 5
pg. 343: 5,8,13 - 56 even,pg. 345: 34 - 78,80 -> 70
pg.492: 2-4 odd,7-9 even -> 2
code-golf
natural-language
Maltysen
źródło
źródło
2-4 odd
? Wydaje się, że powoduje pewne problemy w przypadku prostszych podejść.pg.492: 2-4 odd,7-9 even -> 2
22-26,25-30
?Odpowiedzi:
CJam,
6158514846434138 bajtówSprawdź przypadki testowe w interpretatorze CJam .
Jak to działa
źródło
Perl - 47 bajtów
Zmieniono, aby przekazać nowy przypadek testowy.
Oryginalny
Perl - 36 bajtów
Licząc shebang jako 4, dane wejściowe są pobierane ze standardowego wejścia.
Przykładowe użycie
Ostrzeżenia
W przypadku zakresów parzystych / nieparzystych oczekuje się, że co najmniej jeden z punktów końcowych odpowiada parzystości zakresu. Na przykład
11-19 odd
,11-20 odd
i10-19 odd
wszystkie będą traktowane jako prawidłowo 5, ale10-20 odd
będą na liczone jako 6.źródło
pg. 20: 13-15 even
? czypg. 20: 13-14 even
?*
jest jedną postacią krótszą niż&&
, co umożliwia łatwą poprawę:$\+=/\d+ ?-/*($'-$&>>/o|e/i)+1for@F}{
lc=~
.T^
część, ale jakoś tęskniłem, colc
zmieniło sprawę$'
. Przygotowanielc
do$'
byłoby nieco krótsze. To powinno nadal działać dla obu podejść:lc$'!~(T^lc$_%2)
lub($_%2x9^lc$')!~T
!~T
jest genialny, dzięki!Python 2,
259253249239 bajtówWypróbuj tutaj
Prawdopodobnie można to jeszcze bardziej pograć w golfa.
Edycja: Naprawiono błąd, który powodował, że mój nie działał
2-4 even
tak, jak się spodziewałem. Następnie dokonano korekty tej poprawki. Ta poprawka pozwoliła mi zaoszczędzić cztery bajty!Edycja: Teraz używa
input()
i +2 bajty dla dwóch znaków cudzysłowu, którymi użytkownik musi otaczać dane wejściowe.Mniej golfa (z komentarzami!: D):
Mam nadzieję, że te komentarze pomogą. Nadal nie jestem pewien, czy poprawnie wyjaśniłem tę ostatnią złożoną linię.
źródło
s=raw_input()
i usuwając wcięcia.Pyth,
43424442 bajtyWypróbuj online: Demonstracja lub Uprząż testowa
Myślę, że wciąż mogę posiekać jeden lub dwa bajty.
Wyjaśnienie
źródło
JavaScript (konsola Spidermonkey) - 139
Łatwiej jest przetestować w wierszu poleceń.
Nie golfowany:
źródło
[,from,to]
po prostu być[from,to]
?r.exec
, która zawiera cały dopasowany ciąg.Współczynnik - 488 bajtów:
źródło
Bash
344 315 306 294 262 252 242240Nie sądzę, że grałem w golfa tak często, jak to możliwe, ale nieźle jak na pierwsze zgłoszenie. Skomentowana wersja poniżej.
Uruchom przypadki testowe:
W zależności od tego, jak czytam reguły, można zapisać kolejne 4 bajty. Jeśli parzyste / nieparzyste jest zawsze małe,
${1,,}
można je zmienić na$1
źródło
JavaScript ( ES6 ), 149
Uruchom snippet w przeglądarce Firefox, aby przetestować
źródło
C ++
226224222Wiem, że jestem trochę spóźniony na przyjęcie, ale to wydawało mi się zabawnym problemem i niepokoiło mnie brak wpisów w językach C-rodziny.
Oto funkcja C ++, która nie używa wyrażeń regularnych ani podstawiania ciągów, po prostu prosta matematyka:
Nie golfowany :
Nie powiedziałem, że będzie czytelny, prawda? :) Operatorzy trójskładnikowi są piekłem. Starałem się jednak (w pewnym sensie) sformatować go, więc mam nadzieję, że przynajmniej trochę to pomoże.
Zastosowanie :
źródło
Python 2 - 163 bajty:
Wypróbuj tutaj
Dane wejściowe należy podać w cudzysłowie
Wyjaśnienie:
Ogólne podejście polega na przekonwertowaniu istniejących danych wejściowych na poprawny python, a następnie ich ocenieniu. Każda wartość oddzielona przecinkami jest konwertowana na tablicę, a następnie wszystkie są dodawane razem, a długość daje końcowy wynik.
Na przykład, z danymi wejściowymi
12-15 odd,19
, przed oceną podstawienie wyrażenia regularnego spowoduje:Aby dalej to rozbić:
15+1 if 15.0 else 12+1
Ten bit upewni się, że drugi argument range () jest poprawny, w zależności od tego, czy podany jest zakres, czy pojedyncza wartość (jeśli \ 3 jest puste, \ 3.0 zmieni wartość na false).if x%2!="oe".find("o")
W zależności od znalezionej wartości dwa znaki od ostatniej cyfry w zakresie ((?=.(.))
w wyrażeniu regularnym - patrz dwa znaki bez ich konsumowania), istnieją trzy możliwe wyniki:x%2!="oe".find("o")
ocenia nax % 2 != 0
(tylko dopasowane nieparzyste)x%2!="oe".find("e")
ocenia nax % 2 != 1
(tylko dopasowane)x%2!="oe".find("[")
ocenia nax % 2 != -1
(ten znak może składać się z wielu rzeczy, ponieważ dzieli go tylko o dwie znaki od ostatniej cyfry, ale będzie o lub e tylko wtedy, gdy zamierzone jest parzyste / parzyste)źródło