Święty Mikołaj potrzebuje pomocy w określeniu, ilu elfów będzie potrzebował, aby pomóc mu dostarczyć prezenty do każdego domu.
Węgiel jest znacznie cięższy niż prezenty, więc Święty będzie potrzebował trzech elfów na każdą niegrzeczną osobę w domu. Potrzebne są tylko dwa elfy, aby pomóc Mikołajowi nosić prezenty.
Na mapie Świętego Mikołaja dom jest reprezentowany przez *
, a każdy dom jest podzielony przez +
.
Po obu stronach domu będzie liczba - ta po lewej reprezentująca liczbę niegrzecznych ludzi w domu, a ta po prawej reprezentująca liczbę miłych ludzi w domu. Jeśli po jednej stronie nie ma numeru, jest interpretowane jako 0.
Święty Mikołaj nie odwiedza tych, którzy nie są w świątecznym nastroju (nawet nie zasługują na węgiel), więc czasami dom może nie mieć numeru po obu stronach. W tym przypadku Święty Mikołaj nie potrzebuje pomocy od elfów
Na przykład jedna z map Świętego Mikołaja może wyglądać tak
1*3+2*2+1*+*2
W pierwszym domu jest 1 niegrzeczny i 3 miłych, Mikołaj będzie potrzebował dziewięciu elfów. W drugim są 2 niegrzeczne i 2 ładne, Mikołaj będzie potrzebował dziesięciu elfów. W trzecim domu jest 1 niegrzeczny i 0 fajnych, Święty będzie potrzebował trzech elfów, aw ostatnim domu jest 0 niegrzecznych i 2 fajnych, Święty będzie potrzebował czterech elfów.
Jest to jednak zbyt uproszczona wersja jednej z map Świętego Mikołaja. Zwykle mapy Świętego Mikołaja mają wiele linii i mają kwadratowy kształt, aby lepiej pasowały do jego listy. Normalna mapa może wyglądać \n
mniej więcej tak (a na końcu każdej linii)
1*2+*+*4+1*
2*4+3*+1*6+*
*+*+4*2+1*1
*4+*3+1*+2*3
3*10+2*+*5+*
Na tej mapie Święty potrzebuje ((1 + 0 + 0 + 1 + 2 + 3 + 1 + 0 + 0 + 0 + 4 + 1 + 0 + 0 + 1 + 2 + 3 + 2 + 0 + 0) * 3) + ((2 + 0 + 4 + 0 + 4 + 0 + 6 + 0 + 0 + 0 + 2 + 1 + 4 + 3 + 0 + 3 + 10 + 0 + 5 + 0) * 2)
= 151 elfów
Wyzwanie
Pomóż Mikołajowi ustalić, ilu elfów musi dostarczyć towary do każdego domu!
Domy
- Dom jest reprezentowany przez
*
- Domy są podzielone według
+
- Liczba po lewej stronie domu symbolizuje liczbę niegrzecznych ludzi (brak liczby oznacza 0)
- Liczba po prawej stronie symbolizuje liczbę miłych ludzi (brak liczby oznacza 0)
- Na
\n
wejściu mogą znajdować się znaki nowej linii ( ), które również należy traktować jako podział
Elfy
- Święty Mikołaj potrzebuje pomocy trzech elfów dla niegrzecznych ludzi (węgiel jest znacznie cięższy niż prezenty)
- Święty Mikołaj potrzebuje pomocy od dwóch elfów dla miłych ludzi
- Jeśli po obu stronach nie będzie numeru, Mikołaj nie odwiedzi tego domu i dlatego nie potrzebuje żadnych elfów
Co robić
Wydrukuj liczbę elfów, których potrzebuje Święty Mikołaj, aby pomóc mu dostarczyć prezenty do domów. Ponieważ wszystko, co Mikołaj musi wiedzieć, to ile elfów ma przynieść, wystarczy wydrukować tylko dodatkową liczbę elfów, której potrzebuje na liście domów
Przypadki testowe
1*1 => 5
1*2 => 7
2*1 => 8
1* => 3
*1 => 2
* => 0
1*1+1*1 => 10
1*2+2*1 => 15
1*+*1 => 5
1*1+*+1*1 => 10
*+*+*+* => 0
Zasady
- Dane wejściowe mogą być pobierane jako argument funkcji lub STDIN lub równoważny
- Dane wyjściowe mogą być albo wartością zwracaną przez funkcję, albo drukowane do STDOUT lub równoważne
- Wejście będzie zawierać tylko liczby,
+
,*
, i nowe linie\n
- Wynik powinien być tylko całkowitą liczbą elfów, których Święty Mikołaj potrzebuje pomocy, aby dostarczyć w Boże Narodzenie
- Standardowe luki zastosowanie
Punktacja
Sanie Świętego Mikołaja są pełne prezentów, co daje mu mniej miejsca na uruchomienie kodu, więc potrzebuje najkrótszego kodu, jaki może dostać (nie martw się, jeśli to nie ma sensu. Jeśli kwestionujesz logikę Świętego Mikołaja, trafisz na niegrzeczną listę ). Ze względu na PRAWIDŁOWE rozumowanie Świętego Mikołaja wygrywa najkrótsze przesłanie w bajtach!
Tabela liderów
To jest fragment kodu, który generuje zarówno tabelę wyników, jak i przegląd zwycięzców według języka.
Aby mieć pewność, że Twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown
## Language Name, N bytes
Gdzie N jest rozmiarem twojego przesłania w bajtach
Jeśli chcesz dołączyć wiele liczb do nagłówka (na przykład przekreślając stare wyniki lub włączając flagi w liczbie bajtów), po prostu upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku
## Language Name, <s>K</s> X + 2 = N bytes
max(naughty) + max(nice)
elfów na całą trasę? Myślałem, że ma przy sobie grupę elfów, ale może masz na ten temat poufne informacje i muszę w tym roku przyjrzeć się bliżej. :)hello-world.c
. Elfy robotnicze są chętnie przydzielane do celów, jak powiedział Jojodmo (jestem pewien, że znam Jojodmo, to on musi być naszym sysadmem), a następnie używają oddzwaniania, aby powiadomić, kiedy nadszedł czas, aby ponownie założyć sanie lub kiedy dziecko je zobaczyło.Odpowiedzi:
Pyth, 21 bajtów
Przykład wieloliniowy
Jednowierszowy pakiet testowy
źródło
JavaScript (ES6), 52 bajty
Wyjaśnienie
Konwertuje dane wejściowe na prawidłową instrukcję JavaScript. Zastępuje wszystkie
*
z.0*3+
, a wszystkie inne (nie-cyfrowy), z symboli.0*2+
. Na przykład8*9+*10
staje się8.0*3+9.0*2+.0*3+10
. Na koniec dołącza.0*2
się do końca dla ostatniej miłej liczby. Działa to, ponieważn.0
=n
i.0
=0
.Test
Pokaż fragment kodu
źródło
.0
pomysł.Flex + C,
11290 bajtówPierwsza postać to spacja. Połącz z:
Czyta ze STDIN, pisze do STDOUT. Wejście jest zakończone przez EOF (Ctrl + D w konsoli).
źródło
Mathematica, 70 bajtów
Używa
StringExtract
do wyodrębnienia poszczególnych liczb.źródło
CJam, 23 bajty
Sprawdź to tutaj.
Wyjaśnienie
źródło
Poważnie,
3830 bajtówHex Dump:
Ta nowa wersja psuje interpretera online, ale działa dobrze lokalnie. Oto przykładowy przebieg:
Wyjaśnienie:
Stara wersja:
Hex Dump:
Wypróbuj online
Wyjaśnienie:
Może to być krótsze, gdybym po prostu przekształcił każdą linię osobno i zsumował je wszystkie na końcu. Zajmę się tym później.
źródło
PowerShell, 52 bajty
Korzystanie odmianę user81655 „s
.0
trikWersja bez golfa
Przykład użycia
źródło
Swift 2,
283211 bajtówMożna to przetestować tutaj w SwiftStub
Bez golfa
źródło
Python 3,
141114112 bajtówPrzyjmuje wejścia wieloliniowe w ten sposób
c("1*2+*+*4+1*\n2*4+3*+1*6+*\n*+*+4*2+1*1\n*4+*3+1*+2*3\n3*10+2*+*5+*")
Nie golfowany:
źródło
Jestem bardzo spóźniony, ale i tak chciałem spróbować.
Rubin ,
8455 bajtówZnalazłem to pytanie ponownie po tylu latach i zastanawiałem się nad nową odpowiedzią, zanim zdałem sobie sprawę, że już na nie odpowiedziałem. Ups! Tak czy inaczej, oto drastycznie poprawiona odpowiedź.
Wypróbuj online!
Stara 84-bajtowa odpowiedź z pierwszej odpowiedzi 2 lata temu:
Wypróbuj online!
źródło
Python 3 , 96 bajtów
Wypróbuj online!
101 bajtów bez wyrażenia regularnego
Wypróbuj online!
źródło