Die sechs Haupt Besetzung der amerikanischen Sitcom Freunde alle einig , dass sie das gleiche Gehalt gezahlt würde während des gesamten Laufs der Reihe (nach Saison 2, zumindest). Das bedeutet aber nicht, dass sie alle die gleiche Sendezeit hatten oder dass sie alle auf dem Bildschirm die gleiche Menge miteinander interagierten.
In dieser Herausforderung schreibst du ein Programm, mit dem du herausfinden kannst, welche Friends- Freunde wirklich die besten waren.
Installieren
Betrachten Sie eine Episode oder Szene von Freunden und notieren Sie sich genau, wer bei jeder Kameraaufnahme wie lange auf dem Bildschirm ist.
Wir werden den Namen jedes Charakters abkürzen:
Dann listen wir für jede Kameraaufnahme (oder jedes Mal, wenn ein Charakter die Aufnahme betritt / verlässt) auf, wer auf dem Bildschirm war. Beispielsweise:
504 CRS
200 J
345 MP
980
2000 CJMPRS
Dies besagt, dass:
- 504 ms lang waren Chandler, Rachel und Ross auf dem Bildschirm.
- Dann war Joey für 200ms.
- Dann für 345ms waren Monica und Phoebe.
- Dann war für 980 ms keine der 6 Hauptfiguren auf dem Bildschirm.
- Dann waren es für 2 Sekunden alle.
(Dies ist nicht aus einem tatsächlichen Clip, ich habe es erfunden.)
Beachten Sie, dass Folgendes gleichwertig wäre:
504 CRS
1 J
199 J
345 MP
980
2000 CJMPRS
Um zu analysieren, welche Kombinationen von Zeichen die meiste Bildschirmzeit hatten, betrachten wir alle 64 möglichen Teilmengen der 6 Zeichen und addieren die Bildschirmzeit, die sie hatten. Wenn während einer Kameraaufnahme alle Personen in einer Untergruppe auf dem Bildschirm angezeigt werden , wird die Zeit für diese Kameraaufnahme zur Gesamtbildschirmzeit dieser Untergruppe addiert , auch wenn mehr Zeichen als nur die in der Untergruppe enthaltenen vorhanden sind.
Es gibt eine Ausnahme für die leere Untermenge - nur die Szenen ohne die 6 Hauptfiguren werden gezählt.
Die Analyse des obigen Beispiels wäre also:
980
2504 C
2200 J
2345 M
2345 P
2504 R
2504 S
2000 CJ
2000 CM
2000 CP
2504 CR
2504 CS
2000 JM
2000 JP
2000 JR
2000 JS
2345 MP
2000 MR
2000 MS
2000 PR
2000 PS
2504 RS
2000 CJM
2000 CJP
2000 CJR
2000 CJS
2000 CMP
2000 CMR
2000 CMS
2000 CPR
2000 CPS
2504 CRS
2000 JMP
2000 JMR
2000 JMS
2000 JPR
2000 JPS
2000 JRS
2000 MPR
2000 MPS
2000 MRS
2000 PRS
2000 CJMP
2000 CJMR
2000 CJMS
2000 CJPR
2000 CJPS
2000 CJRS
2000 CMPR
2000 CMPS
2000 CMRS
2000 CPRS
2000 JMPR
2000 JMPS
2000 JMRS
2000 JPRS
2000 MPRS
2000 CJMPR
2000 CJMPS
2000 CJMRS
2000 CJPRS
2000 CMPRS
2000 JMPRS
2000 CJMPRS
Wir können sehen, dass J
(nur Joey) 2200 ms Bildschirmzeit hatte, weil er 200 für sich und 2000 für alle hatte.
Herausforderung
Schreiben Sie ein Programm, das eine Zeichenfolge oder eine Textdatei wie z
504 CRS
200 J
345 MP
980
2000 CJMPRS
Dabei hat jede Zeile das Formular [time in ms] [characters on screen]
und gibt die Gesamtzeit aus, die jede der 64 Teilmengen der 6 Zeichen auf dem Bildschirm verbracht hat, wobei jede Zeile das Formular hat [total time in ms for subset] [characters in subset]
(genau wie oben).
Die Eingabe kann als Zeichenfolge für stdin, die Befehlszeile oder eine Funktion verwendet werden oder als Name einer Textdatei, die die Daten enthält.
- Die Millisekundenzahlen sind immer positive ganze Zahlen.
- Die Buchstaben werden immer in der Reihenfolge
CJMPRS
(alphabetisch) angezeigt. - Sie können optional davon ausgehen, dass ein Leerzeichen nachgestellt ist, wenn die Szene keine Zeichen enthält (z
980
. B. ). - Optional können Sie davon ausgehen, dass eine nachgestellte Zeile vorhanden ist.
- Der Eingang hat mindestens 1 Zeile und kann beliebig viele haben.
Die Ausgabe sollte gedruckt oder als 64-zeilige Zeichenfolge zurückgegeben oder in eine andere Textdatei geschrieben werden.
- Die Zeilen können in beliebiger Reihenfolge sein.
- Die Buchstaben müssen nicht in der
CJMPRS
Reihenfolge sein. - Subsets mit 0 ms Gesamtzeit tun müssen aufgeführt werden.
- Optional kann nach der leeren Gesamtsumme der Teilmenge ein Leerzeichen stehen.
- Optional kann eine nachgestellte Zeile eingefügt werden.
(Dieses Problem kann natürlich auf mehrere Zeichen verallgemeinert werden, aber wir bleiben bei den 6 CJMPRS
Friends- Zeichen.)
Der kürzeste Code in Bytes gewinnt.
Beachte, dass ich eigentlich Freunde mag und nicht denke, dass einige Charaktere wichtiger sind als die anderen. Die Statistik wäre allerdings interessant. ;)
quelle
Antworten:
Pyth, 37 Bytes
Probieren Sie es online aus: Demonstration
Erläuterung:
quelle
cM
die.*
Kartenerweiterung verwendet wird. Vielleicht sollte eine Ausnahme gemacht werden,c
da ich mir nicht vorstellen kann, dass jemand es so in einer Karte verwendenHaskell, 187 Bytes
f
ist eine Funktion, die die Eingabe als einzelne mehrzeilige Zeichenfolge verwendet und die mehrzeilige Ausgabe als einzelne Zeichenfolge zurückgibt. Wahrscheinlich gibt es hier noch viel zu golfen.quelle
SWI-Prolog, 381 Bytes
Dies wird voraussichtlich ausgeführt als:
Beachten Sie, dass Sie alle müssen möglicherweise ersetzen
`
zu"
und jeder"
zu ,'
wenn Sie eine alte Version von SWI-Prolog haben.Ich könnte mehr als 100 Bytes einsparen, wenn ich keinen String als Eingabe verwenden müsste.
quelle
Haskell,
150136 BytesAnwendungsbeispiel:
Anderer Ansatz als die Antwort von @ MtnViewMark : Suchen Sie für alle Kombinationen
c
der Zeichen die Zeilen der Eingabezeichenfolge, in denen der Unterschied zuc
und die Liste zu den Zeileny
leer sind ( beachten Sie den Sonderfall, in dem kein Zeichen auf dem Bildschirm angezeigt wird (z. B.980
) ->c
darf nicht leer sein oderc == y
). Extrahiere die Zahl und die Summe.quelle
CJam,
6758 BytesProbieren Sie es online im CJam-Interpreter aus .
quelle
Perl 5 (5.10+), 128 Bytes
2 Bytes pro Ausgabezeile.
use feature "say"
nicht in der Byteanzahl enthalten.Nicht golfen:
quelle
K 95
Nimmt eine Zeichenfolge wie
"504 CRS\n200 J\n345 MP\n980 \n2000 CJMPRS"
quelle