Qualche tempo fa ho acquistato un nuovo portafoglio in grado di contenere 8 carte (4 su entrambi i lati). Tuttavia, mi sembra di avere molte più carte di così e devo fare delle scelte su quali voglio portare con me. Alcune carte che uso più spesso di altre, ma le carte che preferisco portare con me non sono necessariamente quelle che utilizzo di più.
La sfida
Data una pila di carte, restituisci il layout del mio portafoglio nel miglior modo possibile con le mie preferenze e restrizioni. Il layout dovrebbe essere il seguente:
__ __ (row 1)
__ __ (row 2)
__ __ (row 3)
__ __ (row 4)
Attualmente poso le seguenti carte - le pile saranno sempre costituite da una selezione tra queste:
- 1 carta d'identità ( ID )
- 1 patente di guida ( DL )
- 2 carte di credito ( CC )
- 5 carte di debito ( DC )
- 1 carta di trasporto pubblico ( PC )
- 1 tessera di accesso alla palestra ( GC )
- 9 tessere associative da magazzini e magazzini casuali ( MC )
Ho alcune preferenze e restrizioni:
- Carte ordinate per priorità: ID, DL, CC, DC, PC, GC, MC
- Carte ordinate per frequenza d'uso: CC, DC, PC, GC, MC, ID, DL
- Per motivi di sicurezza, il numero totale di carte di debito e carte di credito nel mio portafoglio può essere al massimo 1 in più rispetto alla somma di tutte le altre carte che andranno nel mio portafoglio ( N DC + N CC ≤ N ID + N DL + N PC + N GC + N MC +1).
- Se presente, la mia carta d'identità e la patente di guida dovrebbero sempre rientrare nella riga 1. Ciò non significa che le altre carte non possano occupare punti nella riga 1.
- Le carte usate più frequentemente dalla pila devono sempre andare nella riga 4.
Regole
- No 2 carte possono occupare lo stesso posto.
- Le carte con priorità più alta sono sempre preferite rispetto a quelle con priorità più bassa, a meno che la restrizione DC / CC entri in gioco.
- ID / DL nella riga 1 sovrascrive la regola della frequenza: se viene fornito solo l'ID, andrà nella riga 1 e la riga 4 sarà vuota!
- La formattazione dell'input può essere eseguita nel modo che preferisci, purché l'ordine dello stack di input venga mantenuto. eg
ID,CC,PC,MC,MC,MC,DL
può anche essere fornito come eg1ID 1CC 1PC 3MC 1DL 0DC 0GC
oID CC PC MC MC MC DL
. La formattazione dell'output presenta alcune restrizioni: le righe devono iniziare tutte da una nuova riga, le colonne devono essere delimitate in qualche modo. I punti vuoti possono essere presentati come preferisci, purché non incasinino il layout 4x2.
Ci può essere più di una soluzione / ordine, dipende da te quale fornire come output.
- Puoi presumere che le carte dello stesso tipo saranno sempre raggruppate all'ingresso.
- Oltre a quanto sopra, si applicano le regole standard e le scappatoie da golf .
indennità
Ti è permesso rimuovere il 15% del tuo conto aggiuntivo se restituisci anche qualsiasi carta che non è stata inserita nel portafoglio. Stampa "Si adatta!" in caso di nessuna carta rimanente. Questo output aggiuntivo deve essere chiaramente separato dal layout di ritorno.
Esempi
Ingresso:
ID, DL, CC, GC, MC
2 possibili uscite:
ID DL DL ID
__ __ or __ MC
MC __ __ __
CC GC GC CC
optional: It fits!
Ingresso:
ID, CC, DC, PC, GC, MC, MC, MC, MC, MC
2 possibili uscite:
ID MC GC ID
MC MC or MC PC
PC GC MC MC
CC DC DC CC
optional: e.g. (MC, MC) or (2MC)
Ingresso:
DC, DC, CC, CC, GC, DL
2 possibili uscite:
DL __ GC DL
__ __ or DC __
GC DC __ __
CC CC CC CC
optional: e.g. (DC) or (1DC)
Ingresso:
CC, DC, DC, DC
2 possibili uscite:
__ __ __ __
__ __ or __ __
__ __ __ __
CC __ __ CC
optional: e.g. (DC, DC, DC) or (3DC)
Ingresso:
CC, CC, MC, MC, MC, MC, MC, MC, PC, DC, DC, DC, DC, DC, GC
2 possibili uscite:
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)
Ingresso:
MC, MC, MC, MC, MC, MC, MC
2 possibili uscite:
__ MC MC MC
MC MC or MC MC
MC MC MC __
MC MC MC MC
optional: It fits!
Ingresso:
ID, CC
2 possibili uscite:
ID __ __ ID
__ __ or __ __
__ __ __ __
CC __ CC __
optional: It fits!
Questo è code-golf , quindi vince il codice più breve (in byte).