Vor einiger Zeit habe ich eine neue Brieftasche gekauft, die 8 Karten aufnehmen kann (4 auf beiden Seiten). Ich habe jedoch anscheinend viel mehr Karten als diese und ich muss entscheiden, welche ich mitnehmen möchte. Einige Karten benutze ich häufiger als andere, aber die Karten, die ich lieber bei mir habe, sind nicht unbedingt die, die ich am häufigsten benutze.
Die Herausforderung
Geben Sie bei einem Kartenstapel das Layout meiner Brieftasche gemäß meinen Vorlieben und Einschränkungen bestmöglich zurück. Das Layout sollte wie folgt aussehen:
__ __ (row 1)
__ __ (row 2)
__ __ (row 3)
__ __ (row 4)
Derzeit besitze ich folgende Karten - Stapel bestehen immer aus einer Auswahl aus diesen:
- 1 Personalausweis ( ID )
- 1 Führerschein ( DL )
- 2 Kreditkarten ( CC )
- 5 Debitkarten ( DC )
- 1 Karte für öffentliche Verkehrsmittel ( PC )
- 1 Zugangskarte für das Fitnessstudio ( GC )
- 9 Mitgliedskarten aus zufälligen Geschäften und Lagern ( MC )
Ich habe einige Vorlieben und Einschränkungen:
- Karten nach Priorität sortiert: ID, DL, CC, DC, PC, GC, MC
- Karten sortiert nach Nutzungshäufigkeit: CC, DC, PC, GC, MC, ID, DL
- Aus Sicherheitsgründen kann die Gesamtzahl der Debit- und Kreditkarten in meiner Brieftasche höchstens 1 mehr betragen als die Summe aller anderen Karten in meiner Brieftasche ( N DC + N CC ≤ N ID + N DL + N PC) + N GC + N MC +1).
- Falls vorhanden, sollten mein Personalausweis und mein Führerschein immer in Zeile 1 stehen. Dies bedeutet nicht, dass andere Karten möglicherweise keine Plätze in Zeile 1 belegen.
- Die am häufigsten verwendeten Karten aus dem Stapel sollten immer in Zeile 4 stehen.
Regeln
- Keine 2 Karten können den gleichen Platz einnehmen.
- Karten mit höherer Priorität werden immer Karten mit niedrigerer Priorität vorgezogen, es sei denn, die DC / CC-Beschränkung setzt ein.
- ID / DL in Zeile 1 setzt die Frequenzregel außer Kraft: Wenn nur ID angegeben wird, wird sie in Zeile 1 angezeigt und Zeile 4 ist leer!
- Die Eingabeformatierung kann beliebig erfolgen, solange die Reihenfolge des Eingabestapels beibehalten wird. zB
ID,CC,PC,MC,MC,MC,DL
kann auch als zB1ID 1CC 1PC 3MC 1DL 0DC 0GC
oder geliefert werdenID CC PC MC MC MC DL
. Die Ausgabeformatierung unterliegt einigen Einschränkungen: Zeilen müssen alle an einer neuen Zeile beginnen, Spalten müssen auf irgendeine Weise begrenzt werden. Leere Stellen können beliebig dargestellt werden, solange das 4x2-Layout nicht durcheinander gebracht wird.
Es kann mehr als eine Lösung / Bestellung geben. Es liegt an Ihnen, welche Sie als Ausgabe bereitstellen.
- Sie können davon ausgehen, dass Karten des gleichen Typs bei der Eingabe immer gruppiert werden.
- Abgesehen von den oben genannten Regeln gelten die Standard- Code-Golf- Regeln und Lücken.
Bonus
Sie dürfen 15% entfernen Ihres Bytecounts wenn Sie auch Karten zurückgeben, die nicht in der Brieftasche waren. Drucken "Es passt!" falls keine Karten übrig bleiben. Diese zusätzliche Ausgabe sollte klar vom Returend-Layout getrennt sein.
Beispiele
Eingang:
ID, DL, CC, GC, MC
2 mögliche Ausgänge:
ID DL DL ID
__ __ or __ MC
MC __ __ __
CC GC GC CC
optional: It fits!
Eingang:
ID, CC, DC, PC, GC, MC, MC, MC, MC, MC
2 mögliche Ausgänge:
ID MC GC ID
MC MC or MC PC
PC GC MC MC
CC DC DC CC
optional: e.g. (MC, MC) or (2MC)
Eingang:
DC, DC, CC, CC, GC, DL
2 mögliche Ausgänge:
DL __ GC DL
__ __ or DC __
GC DC __ __
CC CC CC CC
optional: e.g. (DC) or (1DC)
Eingang:
CC, DC, DC, DC
2 mögliche Ausgänge:
__ __ __ __
__ __ or __ __
__ __ __ __
CC __ __ CC
optional: e.g. (DC, DC, DC) or (3DC)
Eingang:
CC, CC, MC, MC, MC, MC, MC, MC, PC, DC, DC, DC, DC, DC, GC
2 mögliche Ausgänge:
MC MC MC DC
PC GC or DC GC
DC DC PC MC
CC CC CC CC
optional: e.g. (DC, DC, DC, MC, MC, MC, MC) or (3DC, 4MC)
Eingang:
MC, MC, MC, MC, MC, MC, MC
2 mögliche Ausgänge:
__ MC MC MC
MC MC or MC MC
MC MC MC __
MC MC MC MC
optional: It fits!
Eingang:
ID, CC
2 mögliche Ausgänge:
ID __ __ ID
__ __ or __ __
__ __ __ __
CC __ CC __
optional: It fits!
Dies ist Code-Golf , also gewinnt der kürzeste Code (in Bytes).
Antworten:
Java 10,
385384382 BytesObwohl es nicht allzu schwierig war, kann ich sehen, warum es unbeantwortet blieb. Insbesondere diese Regel in Bezug auf " N DC + N CC ≤ N ID + N DL + N PC + N GC + N MC + 1 " kostet im Moment ziemlich viele Bytes.
Und seit dieser Herausforderung sind ungefähr 2,5 Jahre vergangen wurde gepostet, OP könnte inzwischen sowieso eine andere Brieftasche haben ..; p
-1 Byte dank @Jakob .
Probieren Sie es online aus.
Erläuterung:
Java 10, 390,15 (459 Bytes - 15% Bonus)
Probieren Sie es online aus.
quelle
F
mit{"CC","DC","PC","GC","MC"}
.