少し前に、8枚のカード(両面に4枚)を入れることができる新しい財布を購入しました。しかし、私はそれよりもはるかに多くのカードを持っているようであり、どのカードを携帯するかを選択する必要があります。一部のカードは他のカードよりも頻繁に使用しますが、持ち歩きたいカードは、必ずしも最も頻繁に使用するカードではありません。
チャレンジ
カードのスタックが与えられたら、私の好みと制限に対して可能な限り最良の方法で私の財布のレイアウトを返します。レイアウトは次のようになります。
__ __ (row 1)
__ __ (row 2)
__ __ (row 3)
__ __ (row 4)
現在私は以下のカードを持っています-スタックは常にこれらからの選択で構成されます:
- 1枚のIDカード(ID)
- 1運転免許証(DL)
- 2クレジットカード(CC)
- 5デビットカード(DC)
- 公共交通機関カード(PC)1枚
- ジムアクセスカード(GC)1枚
- ランダムストアおよび倉庫からの9枚の会員証(MC)
私はいくつかの好みと制限があります:
- 優先度でソートされたカード:ID、DL、CC、DC、PC、GC、MC
- 使用頻度でソートされたカード:CC、DC、PC、GC、MC、ID、DL
- 安全上の理由から、私の財布でデビットカードとクレジットカードの総数が(私の財布になります他のすべてのカードの合計よりも最大で1より可能N DC + N CC ≤ N ID + N DL + N PCを + N GC + N MC +1)。
- 存在する場合、私の身分証明書と運転免許証は常に行1に配置する必要があります。これは、他のカードが行1のスポットを占有しない可能性があることを意味しません。
- スタックから最も頻繁に使用されるカードは常に4行目に配置する必要があります。
ルール
- 同じ場所に2枚のカードを入れることはできません。
- DC / CCの制限が適用されない限り、優先度の高いカードは優先度の低いカードよりも常に優先されます。
- 行1のID / DLは頻度ルールを無効にします。IDのみが指定されている場合、ID / DLは行1に入り、行4は空になります。
- 入力スタックの順序が保持されている限り、入力フォーマットは任意の方法で行うことができます。eg
ID,CC,PC,MC,MC,MC,DL
はeg1ID 1CC 1PC 3MC 1DL 0DC 0GC
またはとしても提供されID CC PC MC MC MC DL
ます。 出力フォーマットにはいくつかの制限があります。行はすべて新しい行から開始し、列は何らかの方法で区切る必要があります。空のスポットは、4x2レイアウトを台無しにしない限り、好きなように表示できます。
複数のソリューション/オーダーが存在する可能性があります。どのソリューションを出力として提供するかはユーザー次第です。
- 同じタイプのカードは常に入力時にグループ化されると想定することができます。
- 上記とは別に、標準のコードゴルフ規則と抜け穴が適用されます。
ボーナス
ウォレットに入らなかったカードも返す場合は、バイトカウントの15%を削除できます。「それは合う!」と印刷する カードが残っていない場合。この追加の出力は、returendレイアウトから明確に分離する必要があります。
例
入力:
ID, DL, CC, GC, MC
2つの可能な出力:
ID DL DL ID
__ __ or __ MC
MC __ __ __
CC GC GC CC
optional: It fits!
入力:
ID, CC, DC, PC, GC, MC, MC, MC, MC, MC
2つの可能な出力:
ID MC GC ID
MC MC or MC PC
PC GC MC MC
CC DC DC CC
optional: e.g. (MC, MC) or (2MC)
入力:
DC, DC, CC, CC, GC, DL
2つの可能な出力:
DL __ GC DL
__ __ or DC __
GC DC __ __
CC CC CC CC
optional: e.g. (DC) or (1DC)
入力:
CC, DC, DC, DC
2つの可能な出力:
__ __ __ __
__ __ or __ __
__ __ __ __
CC __ __ CC
optional: e.g. (DC, DC, DC) or (3DC)
入力:
CC, CC, MC, MC, MC, MC, MC, MC, PC, DC, DC, DC, DC, DC, GC
2つの可能な出力:
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)
入力:
MC, MC, MC, MC, MC, MC, MC
2つの可能な出力:
__ MC MC MC
MC MC or MC MC
MC MC MC __
MC MC MC MC
optional: It fits!
入力:
ID, CC
2つの可能な出力:
ID __ __ ID
__ __ or __ __
__ __ __ __
CC __ CC __
optional: It fits!
これはcode-golfなので、最短のコード(バイト単位)が優先されます。