Lubię uczestniczyć w konkursach matematycznych prowadzonych przez Mu Alpha Theta, honorowe stowarzyszenie matematyczne w Stanach Zjednoczonych. Podczas zawodów przystępuję do testu wielokrotnego wyboru składającego się z 30 pytań. Istnieje pięć opcji na pytanie, oznaczonych od A do E.
Mój wynik testu wynosi cztery punkty za każdą poprawną odpowiedź, zero punktów za pytanie pozostawione puste i jeden punkt ujemny za każdą błędną odpowiedź.
Napisz program oceniający test zgodnie z powyższym systemem punktacji. Dane wejściowe powinny zawierać dwa elementy: klucz odpowiedzi i odpowiedzi. Pytania pozostawione puste należy wpisać jako puste miejsca. Pierwsze wejście musi zawierać tylko litery AE (lub ae, twój wybór) i można założyć, że na wejściu nie ma białych znaków. Drugie wejście musi zawierać tylko puste spacje i litery AE (lub ae). Dane wejściowe, które nie realizują testów na 30 pytań, muszą zostać wydrukowane Invalid test
jako dane wyjściowe.
Wyjście powinno być oceną lub Invalid test
.
Premia
Jeśli twój program wydrukuje cyfrę po prawej, cyfrę po lewej stronie jest pusta, a cyfra jest niepoprawna po końcowym wyniku jako (aR bB cW)
, usuń 20 bajtów.
Przykładowe dane wejściowe
CABBDCABECDBACDBEAACADDBBBEDDA //answer key
CABEDDABDC BACDBBAADE CBBEDDA //responses
Próbka wyjściowa
Bez premii
73
Premia
73 (20R 3B 7W)
Obowiązują standardowe zasady. Najkrótszy kod w bajtach wygrywa.
Invalid test
.Odpowiedzi:
Pyth,
5351Wypróbuj online
Sprawdzanie odbywa się poprzez sprawdzenie, czy całe wejście zawiera jakieś znaki, gdy wszystkie spacje i
a-e
są usunięte, oraz poprzez sprawdzenie, czy oba ciągi mają długość30
.Wynik obliczenia dokonuje skompresowanie dwie linie razem, a następnie przez odwzorowanie każdej pary do:
(letters are equal) ? 4 : -1
. Następnie po prostu sumując wartości i dodając liczbę spacji w drugiej linii z powrotem do wyniku.źródło
Poważnie , 86 bajtów
Pobiera dane jak
"CABBDCABECDBACDBEAACADDBBBEDDA", "CABEDDABDC BACDBBAADE CBBEDDA"
Wypróbuj online (będziesz musiał ręcznie wprowadzić dane, ponieważ permalinki nie lubią cytatów)
Pracuję teraz nad premią.Nie, dodanie premii kosztowałoby ponad 20 bajtów.Wiedziałem, że coś zapomniałem ...
Invalid Test
nie było drukowane w przypadku błędu. Mam nadzieję, że Dennis przestanie grać w golfa.źródło
JavaScript (ES6), 134 bajty
Edycja: Wymagania dotyczące pytań uległy zmianie. Ta odpowiedź pochodzi z sytuacji, gdy program musiał upewnić się, że każdy znak odpowiedzi to AE, każdy znak odpowiedzi to AE lub spacja i oba mają długość 30, w przeciwnym razie zwracają
Invalid test
.Wyjaśnienie
Test
źródło
CJam, 60 bajtów
Wypróbuj online w interpretatorze CJam .
źródło
JavaScript (Firefox 31+), 86 bajtów
Korzysta ze zrozumienia tablic zaproponowanego dla ES7. Dlatego wsparcie jest obecnie ograniczone do przeglądarki Firefox.
Z bonusem 106 bajtów (126-20)
Edycja: Wcześniej moje rozwiązanie sprawdzało tylko odpowiedź lub długość pytania, teraz sprawdza oba.
Pokaż fragment kodu
źródło
f=
na początku i powiedzieć, że generuje to funkcję lambda.(x,y)=>(r=i=0,[for(l of y)x[i++]==l?r+=4:r-=l!=' '],i!=30|i-x.length?'Invalid test':r)
Japt , 71 bajtów
Japt to skrócona wersja Ja vaScri pt . Interpretator
Dwa
.
s przy końcu powinny być niezadrukowane unicode U + 0017 + 0099 i U, odpowiednio.Jak to działa
Mam nadzieję, że istnieje krótszy sposób, aby upewnić się, że obie długości są równe 30. Sugestie mile widziane!
źródło
Haskell,
144138 bajtówByłoby około 50 bez walidacji. sniff .
Stosowanie:
"ABCDEABCDEABCDEABCDEABCDEABCDE" % "AAAAABBBBBCCCCCDDDDDEEEEEAAAAA"
źródło
!
można zdefiniować jakoall(`elem`l)s
oszczędzając 6 bajtów.g=all.flip elem
.C #,
162154148134 bajtówStosowanie
Test
http://csharppad.com/gist/15f7c9c3c8cfce471ff2
źródło
int s=0,i=0;for(;...
aby zapisać 3 bajty.Ruby, 81 znaków
Przykładowy przebieg:
źródło
Jawa,
183169 bajtówTo była niezła praktyka Java 8:
źródło
String.valueOf
dodając int do pustego ciągu (""+IntStream....
) - Wierzę też, że Java pozwala na brak zwarć, więc możesz usunąć jeden z nich&
i zapisać bajt .pieprzenie mózgu, 354 bajty
Wymaga interpretera, który pozwala przejść w lewo od komórki 0. Wyjście jest bajtem ze znakiem. Na przykład bajt
0x49
jest drukowany dla przykładowego wejścia i0xFF
jest drukowany dla wejścia z tym samym pierwszym wierszem, ale drugi wiersz zastąpiono „C” i 29 spacjami.Wynik zaczyna się od 0, a gdy czytany jest drugi wiersz danych wejściowych, wprowadza się do niego następujące zmiany:
Na koniec dodaje się 120. Jest to funkcjonalnie to samo, co zakładanie idealnego wyniku i stosowanie kar, zamiast rozpoczynania od 0.
Z komentarzami:
źródło
Python 3,
187 179 175 165 155151źródło
JavaScript ES7, 102
Jak zwykle bonus nie jest wart wysiłku.
Sprawdzanie nieprawidłowych spacji na pierwszym wejściu (jak dla mnie ma to sens) 112
źródło
(k,r,s=0)=>/^[A-E]{30}$/.test(k)&&/^[ A-E]{30}$/.test(r)?Object.keys(k).map(i=>k[i]==r[i]?s+=4:s-=r[i]!=' ').pop():'Invalid Test'
ma 129 bajtów.Python 2.7,
131, 116, 109, 139Próbowałem zrobić „krótkie” rozwiązanie Pythona ... Cóż, oto sugestie są mile widziane
Dodanie kilku dodatkowych znaków sprawia, że jest on znacznie bardziej czytelny ...
źródło
Prolog, 165 bajtów
Ponad połowa bajtów służy do sprawdzenia nieprawidłowych testów.
Kod:
Wyjaśniono:
Przykład:
Wypróbuj online tutaj
źródło
MATLAB,
9290 bajtówDzięki Tomowi Carpenterowi za pomoc w zmniejszeniu mojej odpowiedzi o 2 bajty!
Funkcję można wywołać, przypisując arkusz odpowiedzi do q, a przesłane odpowiedzi do a . na przykład:
Odpowiedź jest po prostu drukowana na ekranie. 8 bajtów można zapisać, jeśli można wydrukować ans = 73
źródło
numel(q)
jennz(q)
.C # 6.0 ->
(270-20 = 250)246-20 = 226 bajtówWersja do odczytu i bez golfa:
Naprawdę chciałem otrzymać bonus: D
źródło
i
wraz zs
poza pętlą for. Możesz użyćvar
do deklaracjia
, oszczędzając 1 bajt (hurra!). Nie potrzebujesz wielu nawiasów klamrowych{}
w kodzie, co zawsze jest dobrym sposobem na przycinanie bajtów, i zawsze warto spojrzeć na tabelę ASCII podczas porównywania znaków (możesz odrzucić bajtc[i]==' '
nieco używając nierówności). Powinieneś także rozważyć liczenie ciągów wstecz - w tym przypadku możesz zaoszczędzić co najmniej 1 bajt, nieco przechodząc do pętli for.Groovy 2.4.5, 107 bytes
Just a simple translation of the earlier Java answer.
źródło
C, 273 - 20 = 253 bytes
I've taken the bonus, even though it cost me 23 bytes just to print it. :-(
Explanation
Jest dwa razy więcej kodu do sprawdzenia pod kątem nieprawidłowych danych wejściowych niż do policzenia odpowiedzi - prawdziwe wyzwanie jest w
for
loop near the end. In fact here's a version that assumes the input is always valid, in 163-20 = 143 bytes:I taki, który przyjmuje to samo założenie i drukuje tylko wynik, w 133 bajtach:
źródło
SAS 9.4, 291-20 = 271 bytes(with bonus), or 231 bytes(without bonus)
Z premią:
Bez premii:
Sas tak naprawdę nie ma wejścia / wyjścia, więc trzeba zastąpić k = „..” kluczem, a r = „..” odpowiedzią. Dane wyjściowe są drukowane w dzienniku.
źródło