Da das erste Oktoberwochenende naht, lasst uns unser eigenes Oktoberfest veranstalten!
Hintergrund
Sie und einige andere Programmierer wurden von den örtlichen Wursthändlern in München engagiert. Die Wurstjungs versorgen das Oktoberfest mit allen Würsten, die das riesige Volksfest braucht. Sie können mithören, wie Ihr Chef mit den anderen Mitarbeitern darüber spricht, warum Sie und die anderen ohne Erfahrung im Zusammenhang mit Wurst eingestellt wurden. Sie stellen fest, dass Sie für Ihre tadellosen Programmierkenntnisse eingestellt wurden - und Ihr Chef möchte anscheinend, dass Sie einen Wurstanalysator codieren.
In diesem Jahr haben die Wurstbäuerinnen beschlossen, die Wurstvielfalt auf dem Oktoberfest zu erhöhen - aber sie haben keine Ahnung, wie viel sie importiert haben.
Herausforderung
Sie müssen Ihrem Chef helfen, herauszufinden, wie viel Wurst einer bestimmten Art er tatsächlich importiert hat. Sie müssen einen Wurstanalysator programmieren, der die Art und Anzahl jeder Wurst ausgibt, die die Wurstjungs importiert haben. Ihr Chef hat zu diesem Anlass ein spezielles Diskettenlaufwerk gekauft, auf das eine Wurst pfeift stdin
.
Eingang
Eine Anzahl von Würsten auf stdin
, wobei jede Wurst durch ein Leerzeichen getrennt ist. Würste werden in folgendem Format angeboten:
Prinskorv (P)
¤
| |
| |
| |
¤
Salchichón (S)
l
| |
| |
| |
| |
l
Landjäger (L)
\ /
| |
| |
| |
| |
/ \
Kabanos (K)
.
|
|
|
|
|
.
Cotechino Modena (C)
___
| |
| |
| |
|___|
Rød pølse (R)
^
| |
| |
| |
| |
v
Ausgabe
Das Vorkommen einer bestimmten Wurst zusammen mit einer Kennzeichnung, um welche Wurstart es sich handelt, getrennt durch ein Leerzeichen. Die Kennung ist der erste Buchstabe im Namen der Wurst. Ordnung ist nicht wichtig.
Die Ausgabe muss in stdout
Zeilenumbrüche und Leerzeichen erfolgen.
Beispiele
Eingang
^ ^ ^ ^ .
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
v v v v |
.
Ausgabe
4R 1K
Eingang
\ / ___ l ¤ ¤
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | |___| | | ¤ ¤
/ \ l
Ausgabe
1L 1C 1S 2P
Eingang
l ¤ l
| | | | | |
| | | | | |
| | | | | |
| | ¤ | |
l l
Ausgabe
2S 1P
Der Programmierer mit dem kürzesten Programm in Bytes wird von den Wurstleuten bezahlt (gewinnt)!
Wurst Trivia
Prinskorv
Prinskorv, was direkt mit "Prinzwurst" übersetzt wird, ist eine kleine schwedische Wurst, die oft in Gliedern verkauft wird. Normalerweise in einer Pfanne gebraten und mit einer großzügigen Portion Senf serviert.
Salchichón
Salchichón ist eine spanische Sommerwurst, die oft mit Schweinefleisch zubereitet wird. Einige Rezepte verwenden jedoch auch anderes Fleisch wie Ochsen, Kalb oder Pferd. Das Fleisch und das Fett werden in dünne Stücke geschnitten, mit Salz, Pfeffer, Muskat, Oregano und Knoblauch gewürzt und dann in dicken natürlichen Schweinefleischdarm eingelegt.
Landjäger
Landjäger ist eine halbgetrocknete Wurst, die traditionell in Süddeutschland, Österreich, der Schweiz und dem Elsass hergestellt wird. Es ist beliebt als Snack bei Aktivitäten wie Wandern. Es hat auch eine Geschichte als Soldatennahrung, weil es ohne Abkühlung hält und in einzelnen Mahlzeitportionen kommt.
Kabanos
Kabanos ist eine lange dünne polnische Trockenwurst aus Schweinefleisch oder koscherer Pute. Sie haben einen rauchigen Geschmack und können je nach Frische weich oder sehr trocken sein. Kabanosy werden oft nur mit Pfeffer gewürzt. Im Gegensatz zu anderen Fleischsorten werden diese Würste normalerweise als Vorspeise allein verzehrt und, außer wenn sie koscher sind, häufig mit Käse serviert.
Cotechino Modena
Cotechino Modena oder Cotechino di Modena ist eine frische Wurst aus Schweinefleisch, Backfett und Schwarte und stammt aus Modena, Italien, wo sie den Status einer ggA hat. Cotechino wird oft mit Linsen oder Cannellinibohnen mit einer Sauce neben Kartoffelpüree serviert, besonders zu Neujahr.
Rød pølse
Rød pølse (rote Wurst) ist eine in Dänemark sehr verbreitete Art hellroter, gekochter Schweinewurst. Da Hot-Dog-Stände in Dänemark allgegenwärtig sind, betrachten manche Leute Røde Pølser als eines der Nationalgerichte.
Alle Wurstinformationen schamlos aus Wikipedia kopiert
Antworten:
Pyth, 30 Bytes
Probieren Sie es online aus: Demo oder Test Suite
Erläuterung:
Wie alle anderen Teilnehmer schaue ich nur auf die erste Zeile der Eingabe. Angenommen, die erste Zeile der Eingabe ist
\ / ___ l ¤ ¤ ____
.Zuerst habe ich mich nach Leerzeichen aufgeteilt, was mir die Liste gibt
Jetzt wollen wir
'/'
s und''
s reiten und den Rest sortieren.Jetzt kann ich es in voller Länge codieren.
Wie sich herausstellt, kann die Reihenfolge (ASCII-Wert) dieser Zeichen oder der Zeichenfolge
'___'
den Zahlen gut zugeordnet werden[0, 1, 2, 3, 4, 5]
.Und dies kann verwendet werden, um sie direkt den Buchstaben zuzuordnen
SKLCRP
.quelle
Pyth,
36343230 BytesGespeichert noch eine weitere 2 Bytes dank ... guess who? : D
Ignoriert alle Eingaben mit Ausnahme der ersten Zeile, entfernt alle
/
s und Leerzeichen, übersetzt sie in die Ziel-IDs, sortiert sie, verwendet die Lauflängencodierung und druckt das Ergebnis.Live-Demo.
32-Byte-Version
Live-Demo.
2 weitere Bytes dank @Jakube gespart!
34-Byte-Version
Live-Demo.
2 Bytes gespart dank @Jakube!
36-Byte-Version
Live-Demo.
quelle
hM-czd\\
sind dasselbe wie-hMfTczd\\
¤
sind zwei Bytes.Javascript (ES6), 105
Es ist ziemlich einfach, aber hier ist trotzdem eine Erklärung:
quelle
a=>(h=-1,[for(g of'¤l/._^')if(f=(a.split(g).length-1)/'222261'[++h])f+'PSLKCR'[h]].join` `)
Wenn ich nur die Deklaration vonh
...CJam,
383533 BytesTeste es hier.
Erläuterung
Die erste Zeile jeder Wurstsorte ist ein Unikat. Da die Würste oben ausgerichtet sind, ist es ausreichend, die relevanten Zeichen in dieser ersten Zeile zu zählen. Zwei Arten erfordern eine besondere Behandlung:
\
und/
. Wir wollen einen von ihnen loswerden, dann können wir den anderen wie alle anderen Charaktere zählen.C
sofort.Nun zum eigentlichen Code:
quelle
Mathematica 116
Einige Bytes könnten sich wahrscheinlich abschneiden, aber nichts, was sich den Golfsprachen nähern könnte.
ImportString[#,"Table"][[1]]
Gibt eine Liste von durch Leerzeichen getrennten Zeichenfolgen zurück, die in der oberen Zeile der Eingabe angezeigt werden. Die Zeichenfolge kann ein beliebiges Element in der Liste enthalten{"¤","l","/","___",".","^"}
, einschließlich Wiederholungen. Jedes Element ist mit einer einzigartigen Wurstsorte verbunden.Tally
Zählt die Häufigkeit, mit der eine solche Zeichenfolge angezeigt wird./.{"¤"->"P","l"->"S",...
ersetzt¤
mitP
,l
mitS
und so weiter.Reverse
Platziert jede Zählung vor dem Element, dem sie zugeordnet ist.Die beiden
Row
s formatieren die Ausgabe.quelle
MATLAB, 113
Unter der Annahme, dassnachfolgendeLeerzeichen zulässig sind(ja, das sind sie), ist hier eine anonyme MATLAB-Funktion:Und eine Erklärung:
Scheint richtig zu funktionieren. Hat noch den nachgestellten Platz, behandelt aber jetzt alle Würste richtig.
quelle
Perl,
8477 BytesJemand könnte sich wahrscheinlich ein bisschen davon rasieren ...
84 Bytes
77 Bytes
Nervenzusammenbruch:
Nehmen Sie die erste Zeile von STDIN, übersetzen Sie die Werte in Buchstabencodes und löschen Sie zusätzlichen Müll. Der
d
Modifikator sollte eigentlich nicht nötig sein, aber ich bin auf seltsame Unicode-Probleme gestoßen¤
Charakter ohne ihn.Verwenden Sie eine symbolische Referenz, um für jedes gefundene Zeichen eine Variable zu erstellen und / oder zu erhöhen.
Teilen Sie die C-Variable durch 3, da der Unterstrich dreifach ist
Durchlaufen Sie das Alphabet und drucken Sie Großbuchstaben zusammen mit Buchstaben, wenn der Wert größer als Null ist
Testergebnis: http://ideone.com/alpUlI
Bearbeiten : Hacken Sie 7 Bytes, indem Sie den anonymen Rückgabewert direkt an den Transkriptor übergeben
split
.quelle
Perl, 172 Bytes
Daresay mehr kann noch von dieser Wurst geschnitten werden, aber hier ist eine Vorspeise für zehn.
Ungolfed-Version
Testergebnisse
quelle
Python 3, 120 Bytes
Ich bin mir ziemlich sicher, dass Sie dies verkürzen können, aber es gab noch keine Python-Lösung.
Erläuterung
Es ist ziemlich einfach, manche sagen vielleicht sogar lesbar, aber hier ist trotzdem eine kurze Erklärung:
Zuerst wird eine Eingabezeile gelesen, da jede Wurst nur aus der ersten Zeile bestimmt werden kann.
Jetzt
a={z:x.count(y)for y,z in zip('¤l/.^_','PSLKRC')}
gibt es ein Wörterbuchverständnis, das die Kennung jeder Wurstsorte (z
) der Zählung jeder Wurstsorte (x.count(y)
, woy
das die Wurst definierende Zeichen ist) .Wir dividieren dann die Anzahl der Cotechino Modena (C) Würste durch 3, da der dreifache Unterstrich vorliegt.
Schließlich drucken wir das Ergebnis aus:
print(' '.join(str(a[x])+x for x in a if a[x]))
. Dadurch wird die Ausgabezählung für jede Wursta[x]
einzeln erstellt , jedoch nur, wenn diese Wurst mindestens einmal gesehen wurde ( ungleich Null => Wahrheit). Jede Zählzeichenfolge wird durch ein Leerzeichen verbunden und ausgedruckt.quelle