(Hoffentlich ist es immer noch Thanksgiving für dich)
Sie haben einen Truthahn für Ihr Thanksgiving-Abendessen, wissen aber nicht, wie Sie ihn gleichmäßig verteilen sollen. Das Problem ist, dass manche Menschen mehr essen als andere, daher müssen Sie eine Lösung finden
Eingang
Es gibt zwei Eingänge. Die erste wird eine ASCII-Kunst verschiedener Menschen sein.
o
o \|/
\|/ |
| |
/ \ / \
ASCII-Art Spezifikationen
Jede Person nimmt eine Breite von 3 Spalten ein. Jede Person ist durch eine einzelne Spalte von Leerzeichen getrennt. Die Spitze jeder Person ist eine o
. Unterhalb der o
durch Offset 1
und -1
in der x, \
und /
sind. Von der o
bis zur vorletzten Zeile in der Eingabe |
ist die Menge dieser pro Person ihre "Größe". Die einzigen Daten, die Sie von jeder Person extrahieren müssen, sind ihre "Größe".
Es wird immer mindestens eine Person geben. Jede Person hat immer mindestens 2 Körpergröße. Die maximale Höhe, die Ihr Programm verarbeiten sollte, beträgt mindestens 64.
Wenn Sie möchten, dass die mit Leerzeichen aufgefüllte Eingabe ein Rechteck bildet, geben Sie dies bitte in Ihrer Antwort an.
Der zweite Eingang ist der Truthahn. Der Truthahn ist nicht wirklich ein Truthahn, eher die NxM
Dimensionen eines Truthahns. Wenn der zweite Eingang ist 3x2
, hat der Truthahn Abmessungen von 3 * 2 mit einer Gesamtfläche von 6.
Ausgabe
Die Ausgabe kann eine Liste oder die nächstgelegene Alternative Ihrer Sprache sein (z. B. Array). Sie können auch eine Zeichenfolge ausgeben, deren Werte durch Leerzeichen getrennt sind.
Die Werte für jede Person sollten in der Reihenfolge ausgegeben werden, in der sie eingegeben wurden.
Herausforderung
Ihr Ziel ist es, den Bereich der Türkei unter den Menschen aufzuteilen.
Ein Beispielszenario:
Angenommen , es sind zwei Menschen, mit Höhen von 3
und 6
verbunden. Wenn es einen Truthahn von gibt 5x3
. Die Gesamtfläche des Truthahns, die verteilt werden muss, beträgt 15
.
Wie würden Sie es nun unter allen verteilen? Hier ist wie:
the_persons_height
TurkeyForAPerson = -------------------- * turkey_area
sum_of_all_heights
Das bedeutet, dass für die erste Person mit einer Höhe von 3
, werden sie bekommen 3/9*15
Truthahn, oder 5
, die zweite Person mit einer Höhe von 6
sie bekommen 6/9*15
oder 10
Truthahn.
Ausgabe
Die Ausgabe muss ausschließlich aus Ziffern bestehen, und es .
sei denn, Sie entscheiden sich für den Bonus. In diesem Fall darf es nur aus Ziffern, Leerzeichen ( ) und einem Schrägstrich (
/
) bestehen.
Vollständiges Beispiel
Eingang:
6x5
o
|
o \|/
\|/ |
| |
| |
/ \ / \
Ausgabe:
11.25 18.75
Boni
-20% Bonus: Sie geben einen Bruch aus (muss vereinfacht werden), es spielt keine Rolle, ob es sich um einen gemischten oder einen falschen Bruch handelt.
Wertung
Dies ist Code-Golf, also gewinnt der kürzeste Code in Bytes!
Antworten:
Pyth, 23 Bytes
Dies funktioniert in der Online-Version nicht, da
eval
hiermit die Größe des Truthahns bestimmt wird.Erläuterung:
quelle
LabVIEW, 67 Bytes
Ich zähle nach dem, was ich im Meta-Post vorgeschlagen habe, also ist es nicht behoben, aber ja, hier geht es weiter.
Eine mit Leerzeichen aufgefüllte Eingabe wird erwartet.
Ich zähle Köpfe und erhalte die Größe der Leute von der Linie, an der sich die Köpfe befinden.
quelle
Japt ,
4946 BytesJapt ist eine verkürzte Version von Ja vaScri pt . Dolmetscher
Ausgaben als Array. (Beachten Sie, dass Sie jede der beiden Eingaben in Anführungszeichen setzen müssen.)
Wie es funktioniert
quelle
MATLAB 109 * 80% = 87,2 Bytes
Dies ist also eine MATLAB-Funktion, die zwei Eingaben benötigt, die erste ist eine Zeichenfolge für die Truthahngröße (z. B.
'8x4'
und die zweite ist die Zeichenfolge, die die Personen enthält. Sie gibt eine Zeichenfolge zurück, die für jede Person falsche Brüche enthält.Dies hätte viel kleiner sein können, aber die neuen Zeilen wurden schwierig. MATLAB konnte leicht eine Zeichenfolge
;
als Trennzeichen für jede Zeile konvertieren , aber der Versuch, eine neue Zeile zu verwenden, erwies sich als schwierig und kostete 25 Zeichen:Die Größe der Leute zu bekommen ist eigentlich ganz einfach:
Dies dauert jede vierte Spalte beginnend mit der zweiten (das sind alle Spalten, in denen sich Körper von Menschen befinden) und konvertiert diese dann in ein Array mit Einsen, in denen Körperbits vorhanden sind, und Nullen, in denen keine vorhanden sind. Schließlich summiert es spaltenweise, was dazu führt, dass das Array
a
ein 1D-Array ist, das die Größe jeder Person enthält.Als nächstes extrahieren wir die Größe des Truthahns aus der Eingabezeichenfolge, die in der Form vorliegt
%dx%d
, dh eine Zahl, dann 'x', dann eine andere Zahl. Das resultierende Array von zwei Zahlen wird miteinander multipliziert, um die Putenfläche zu erhalten.Dies wird mit jeder Körpergröße multipliziert und auch durch die Gesamthöhe aller Menschen dividiert, um den Truthahnanteil für jede Person als Dezimalzahl zu erhalten.
Der letzte Schritt, um den Bonus zu qualifizieren - dieses Bit verlängert den Code um 6 Zeichen, aber der Bonus schlägt ~ 22 ab, es lohnt sich also.
rats()
ist eine nette Funktion, die eine Dezimalzahl in einen vereinfachten falschen Bruch umwandelt (genau auf 13 dp). Wenn Sie ein Array mit Dezimalzahlen eingeben (dh den Betrag für jede Person), wird eine einzelne Zeichenfolge zurückgegeben, die Brüche für jede Person enthält, die wiederum durch Leerzeichen getrennt sind.Zugegeben, die Ausgabe von
rats()
fügt mehr als ein Leerzeichen hinzu, aber die Frage sagt nicht, dass dies nicht möglich ist - nur, dass die Zeichenfolge nur die Ziffern '' und '/' enthalten darf.Dies ist die Ausgabe des Beispiels (von mir hinzugefügte Anführungszeichen, um zu verhindern, dass Leerzeichen entfernt werden, nicht in der tatsächlichen Ausgabe):
Anwendungsbeispiel:
Ausgabe:
Es funktioniert auch (wenn auch mit Warnungen) auf dem Online- Octave- Interpreter. Sie können es hier versuchen . Der Link führt zu einem Arbeitsbereich, dessen
f
Funktion bereits in einer Datei definiert ist. Sie sollten also in der Lage sein, die obige Beispielverwendung an der Eingabeaufforderung einzugeben.quelle
Pyth - 25 Bytes
Kann definitiv ein paar Bytes davon Golf spielen. Ziemlich unkomplizierter Ansatz.
Probieren Sie es hier online aus .
quelle
Haskell 119 Bytes
Anwendungsbeispiel:
"6x5" # " o \n | \n o \\|/\n\\|/ | \n | | \n | | \n/ \\ / \\\n"
->[11.25,18.75]
.quelle
JavaScript (ES6), 131 Byte
Gibt ein Array von Teilen zurück.
Erläuterung
Prüfung
Code-Snippet anzeigen
quelle
Python 99 Bytes
Eingang:
' o \n | \n o \\|/\n\\|/ | \n | | \n | | \n/ \\ / \\','6*5'
Ausgabe:
['11.25', '18.75']
quelle