Ponieważ zbliża się pierwszy weekend października, przygotujmy swój własny Oktoberfest!
tło
Ty i niektórzy inni programiści zostali zatrudnieni przez lokalnych kiełbas w Monachium w Niemczech. Faceci z kiełbasą dostarczają Oktoberfestowi wszystkich kiełbas, których potrzebuje gigantyczny Volksfest. Udało ci się podsłuchać, jak szef rozmawia z innymi pracownikami o tym, dlaczego ty i inni zostaliście zatrudnieni bez wcześniejszego doświadczenia związanego z kiełbasą. Zdajesz sobie sprawę, że zostałeś zatrudniony za nienaganną umiejętność programowania - a twój szef najwyraźniej chce, abyś napisał kod do analizatora kiełbas.
W tym roku faceci z kiełbasami postanowili zwiększyć różnorodność kiełbas na Oktoberfest - ale nie mają pojęcia, ile zaimportowali.
Wyzwanie
Musisz pomóc swojemu szefowi dowiedzieć się, ile kiełbasy faktycznie zaimportowali. Będziesz musiał zaprogramować analizator kiełbasy, który wyświetli rodzaj i liczbę każdej kiełbasy importowanej przez facetów z kiełbasy. Twój szef kupił na tę okazję specjalną stację dyskietek, która z uwagi na kiełbasę doprowadza ją do tego stdin
.
Wkład
Kilka kiełbas stdin
, każda kiełbasa oddzielona jedną spacją. Kiełbasy podawane są w następującym formacie:
Prinskorv (P)
¤
| |
| |
| |
¤
Salchichón (S)
l
| |
| |
| |
| |
l
Landjäger (L)
\ /
| |
| |
| |
| |
/ \
Kabanos (K)
.
|
|
|
|
|
.
Cotechino Modena (C)
___
| |
| |
| |
|___|
Rød pølse (R)
^
| |
| |
| |
| |
v
Wydajność
Wystąpienia danej kiełbasy wraz z identyfikatorem rodzaju kiełbasy, oddzielone spacją. Identyfikator to pierwsza litera w nazwie kiełbasy. Porządek nie jest ważny.
Dane wyjściowe są zapisywane stdout
, dozwolone są nowe znaki końcowe i spacje.
Przykłady
Wkład
^ ^ ^ ^ .
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
v v v v |
.
Wydajność
4R 1K
Wkład
\ / ___ l ¤ ¤
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | |___| | | ¤ ¤
/ \ l
Wydajność
1L 1C 1S 2P
Wkład
l ¤ l
| | | | | |
| | | | | |
| | | | | |
| | ¤ | |
l l
Wydajność
2S 1P
Programista z najkrótszym programem w bajtach otrzymuje wynagrodzenie od gości z kiełbasą (wygrywa)!
Ciekawostki o kiełbasach
Prinskorv
Prinskorv, co bezpośrednio przekłada się na „kiełbasę książęcą”, to mała szwedzka kiełbasa, często sprzedawana w ogniwach. Zwykle smażony na patelni i podawany z obfitą porcją musztardy.
Salchichón
Salchichón to hiszpańska kiełbasa letnia często przygotowywana z wieprzowiny, chociaż niektóre przepisy zawierają inne mięso, w tym wołowe, cielęce lub końskie. Mięso i tłuszcz siekamy na cienkie kawałki, doprawiamy solą, pieprzem, gałką muszkatołową, oregano i czosnkiem, a następnie wkładamy do grubych, naturalnych jelit wieprzowych.
Landjäger
Landjäger to kiełbasa częściowo suszona tradycyjnie wytwarzana w południowych Niemczech, Austrii, Szwajcarii i Alzacji. Jest popularny jako przekąska podczas aktywności takich jak wędrówki. Ma również historię żywności żołnierskiej, ponieważ utrzymuje się bez chłodzenia i jest dostarczana w porcjach z jednym posiłkiem.
Kabanos
Kabanos to polska długa cienka sucha kiełbasa z wieprzowiny lub koszernego indyka. Są dymne i mogą mieć miękką lub bardzo wytrawną konsystencję w zależności od świeżości. Kabanosy są często przyprawiane tylko pieprzem. W przeciwieństwie do innych mięs, kiełbasy te są zwykle spożywane same jako przystawka i, z wyjątkiem koszernych, często podawane z serem.
Cotechino Modena
Cotechino Modena lub Cotechino di Modena to świeża kiełbasa z wieprzowiny, tłuszczu i skórki wieprzowej, pochodząca z Modeny we Włoszech, gdzie ma status ChOG. Cotechino jest często podawane z soczewicą lub fasolą cannellini z sosem obok tłuczonych ziemniaków, szczególnie w okolicach Nowego Roku.
Rød pølse
Rød pølse (czerwona kiełbasa) to rodzaj jaskrawo czerwonej gotowanej kiełbasy wieprzowej bardzo popularnej w Danii. Ponieważ stoiska z hot dogami są w Danii wszechobecne, niektórzy uważają røde pølser za jedną z dań narodowych.
Wszystkie informacje o kiełbasach bezwstydnie skopiowane z Wikipedii
Odpowiedzi:
Pyth, 30 bajtów
Wypróbuj online: pakiet demonstracyjny lub testowy
Wyjaśnienie:
Jak wszyscy inni uczestnicy patrzę tylko na pierwszy wiersz danych wejściowych. Powiedzmy, że pierwszy wiersz danych wejściowych to
\ / ___ l ¤ ¤ ____
.Na początku dzielę spacje, co daje mi listę
Teraz chcemy przejechać
'/'
si''
si i posortować pozostałe rzeczy.Teraz mogę go zakodować na całej długości.
Jak się okazuje, kolejność (wartość ascii) tych znaków lub ciągu
'___'
można ładnie odwzorować na liczby[0, 1, 2, 3, 4, 5]
.Można to wykorzystać do mapowania ich bezpośrednio na litery
SKLCRP
.źródło
Pyth,
36343230 bajtówZapisany jeszcze inny 2 bajty dzięki ... zgadnij kto? :RE
Ignoruje wszystkie dane wejściowe oprócz pierwszego wiersza, usuwa wszystkie
/
s i spacje, tłumaczy je na identyfikatory docelowe, sortuje, używa kodowania długości przebiegu i wypisuje wynik.Demo na żywo.
Wersja 32-bajtowa
Demo na żywo.
Zaoszczędź kolejne 2 bajty dzięki @Jakube!
Wersja 34-bajtowa
Demo na żywo.
Zaoszczędź 2 bajty dzięki @Jakube!
Wersja 36-bajtowa
Demo na żywo.
źródło
hM-czd\\
to to samo co-hMfTczd\\
¤
dwa bajty.JavaScript (ES6), 105
To dość proste, ale i tak oto wyjaśnienie:
źródło
a=>(h=-1,[for(g of'¤l/._^')if(f=(a.split(g).length-1)/'222261'[++h])f+'PSLKCR'[h]].join` `)
Gdybym tylko mógł uprościć deklaracjęh
...CJam,
383533 bajtówSprawdź to tutaj.
Wyjaśnienie
Pierwszy wiersz każdego rodzaju kiełbasy jest unikalny, a ponieważ kiełbasy są wyrównane u góry, wystarczy policzyć odpowiednie znaki w tym pierwszym wierszu. Dwa rodzaje wymagają specjalnego traktowania:
\
i/
. Chcemy pozbyć się jednego z nich, a następnie policzyć drugiego tak jak wszystkie pozostałe postacie.C
od razu.Teraz rzeczywisty kod:
źródło
Mathematica 116
Niektóre bajty prawdopodobnie mogłyby się zgolić, ale nic nie zbliżało się do języków golfowych.
ImportString[#,"Table"][[1]]
zwraca listę rozdzielonych spacjami ciągów pojawiających się w górnym wierszu wejścia. Ciąg może zawierać dowolny element na liście,{"¤","l","/","___",".","^"}
w tym powtórzenia. Każdy element związany jest z unikalnym rodzajem kiełbasy.Tally
zlicza liczbę wyświetleń każdego takiego ciągu./.{"¤"->"P","l"->"S",...
zastępuje¤
sięP
,l
zeS
i tak dalej.Reverse
umieszcza każdą sumę przed elementem, z którym jest powiązana.Dwa
Row
s formatują wyjście.źródło
MATLAB, 113
Zakładając, że końcowe spacje są dozwolone(tak są), oto anonimowa funkcja MATLAB:I wyjaśnienie:
Wydaje się działać poprawnie. Nadal ma miejsce na końcu, ale teraz poprawnie obsługuje wszystkie kiełbasy.
źródło
Perl,
8477 bajtówKtoś prawdopodobnie mógłby się trochę zgolić ...
84 bajtów
77 bajtów
Awaria:
Weź pierwszy wiersz STDIN, transliteruj wartości na kody literowe, usuń dodatkowe śmieci.
d
Modyfikator nie powinno być naprawdę konieczne, ale wpadłem na dziwnych problemów na unicode¤
charakter bez niego.Użyj odwołania symbolicznego, aby utworzyć i / lub zwiększyć wartość zmiennej dla każdego znalezionego znaku.
Podziel zmienną C przez 3, z powodu potrójnego podkreślenia
Zapętlaj alfabet i drukuj jednolite litery zmiennych wraz z literą, jeśli mają wartość większą niż zero
Wynik testu: http://ideone.com/alpUlI
Edycja : Posiekaj 7 bajtów, przesyłając anonimową wartość zwrotną bezpośrednio do
split
.źródło
Perl, 172 bajty
Jeszcze więcej można odciąć od tej kiełbasy, ale oto przystawka na dziesięć.
Wersja bez golfa
Wyniki testów
źródło
Python 3, 120 bajtów
Jestem pewien, że możesz to skrócić, ale nie było jeszcze rozwiązania w języku Python, więc zaczynamy:
Wyjaśnienie
To dość proste, niektórzy mogą nawet powiedzieć, że są czytelne, ale i tak krótkie wyjaśnienie:
Odczytywany jest pierwszy wiersz wprowadzania, ponieważ każdą kiełbasę można określić na podstawie pierwszego wiersza.
Teraz
a={z:x.count(y)for y,z in zip('¤l/.^_','PSLKRC')}
jest słownikowe zrozumienie, które mapuje identyfikator każdego rodzaju kiełbasy (z
) na liczbę każdego rodzaju kiełbasy (x.count(y)
gdziey
jest znak definiujący kiełbasę).Następnie dzielimy liczbę kiełbas Cotechino Modena (C) przez 3 z powodu potrójnego podkreślenia.
Wreszcie możemy wydrukować wynik:
print(' '.join(str(a[x])+x for x in a if a[x]))
. Tworzy to liczbę wyjściową każdej kiełbasy pojedynczo, ale tylko wtedy, gdy ta kiełbasa była widoczna co najmniej raz (a[x]
nie jest równa zero => Prawda). Każdy ciąg zliczania jest połączony spacją i drukowany.źródło