旅客機の座席を割り当てる


16

先週のAPLレッスンに触発されました。

大文字の2D座席マップと1Dの顧客リストを指定して、座席マップと顧客リストを返しますが、次のように変更します(占有座席と座席のある顧客を示すため)。

入力乗客リスト内の一意の文字ごとに、座席マップ内のその文字の多く(または十分でない場合はすべて)を小文字にして、左から右、上から下に移動します。

座席表の一意の文字ごとに、乗客リストのその文字の多く(または十分でない場合はすべて)を小文字にして、左から右に移動します。

  1. 入力シートマップは、集合{からスペースと大文字が含まれFBPE}、とすることができます。
    1. 改行によって行に分割されます
    2. 文字列のリスト
    3. 大文字の行列
    4. 他の同等の形式で
  2. 入力された顧客リストは、集合{から大文字が含まれFBPE}であってもよいです。
    1. 文字列
    2. 文字のリスト
    3. 他の同等の形式で
  3. 返される座席マップは、0個以上の文字が小文字に折り畳まれていることを除いて、入力されたものと同一でなければなりません。
  4. 返される顧客リストは、ゼロ以上の文字が小文字に折り畳まれていることを除いて、入力リストと同一である必要があります
  5. 先頭と末尾の空白は許可されます

(ユナイテッドの航空機の短縮版)

ERJ145

座席表入力:

P    
E    
E  PP
E  EE
E  EE
E  EE
E  EE

P  PP
E  EE
E  EE
E  EE

乗客リストの入力:

FFEEEEEEEEEEEEEEEE

座席マップの出力:

P    
e    
e  PP
e  ee
e  ee
e  ee
e  ee

P  PP
e  eE
E  EE
E  EE

乗客リストの出力:

FFeeeeeeeeeeeeeeee

CRJ700

座席表入力:

F   FF
F   FF
PP  PP
PP  PP
PP  PP
EE  EE

PP  PP
EE  EE
EE  EE
EE  EE

顧客リストの入力:

FFFFFFFFPPEEEEEEEEEEEEEEEEEEEEE

座席マップの出力:

f   ff
f   ff
pp  PP
PP  PP
PP  PP
ee  ee

PP  PP
ee  ee
ee  ee
ee  ee

顧客リストの出力:

ffffffFFppeeeeeeeeeeeeeeeeEEEEE

B757

座席表入力:

F F  F F
F F  F F
F F  F F

PPP     
PPP  PPP
PPP  PPP
PPP  PPP
EEE  EEE
EEE  EEE
PPP  PPP
EEE  EEE
EEE  EEE
     EEE

EEE  EEE
EEE  EEE
EEE  EEE
EEE     

乗客リストの入力:

FEEEEEEEEFEEEFEEEEEEEEFEEFFEEFEFFFEE

座席マップの出力:

f f  f f
f f  f f
f f  F F

PPP     
PPP  PPP
PPP  PPP
PPP  PPP
eee  eee
eee  eee
PPP  PPP
eee  eee
eee  eee
     eeE

EEE  EEE
EEE  EEE
EEE  EEE
EEE     

乗客リストの出力:

feeeeeeeefeeefeeeeeeeefeeffeefefffee

B767

座席表入力:

 F   F   F           
 F   F   F           
BB  B B  BB          
BB  B B  BB          
BB  B B  BB          
PP       BB          
PP                   

PP  PPP  PP          
PP  PPP  PP          
PP  PPP  PP          
PP  PPP  PP          
PP  EEE  PP          
EE  EEE  EE          
EE  EEE  EE          
EE  EEE  EE          
EE  EEE  EE          
EE  EEE  EE          

乗客リストの入力:

PPFEFEEEEEEEBBEEFFPEBPEBBEEFEEEFEEEEEEFPEEEPB

座席マップの出力:

 f   f   f           
 f   f   f           
bb  b b  bb          
BB  B B  BB          
BB  B B  BB          
pp       BB          
pp                   

pp  PPP  PP          
PP  PPP  PP          
PP  PPP  PP          
PP  PPP  PP          
PP  eee  PP          
ee  eee  ee          
ee  eee  ee          
ee  eee  ee          
ee  EEE  EE          
EE  EEE  EE          

乗客リストの出力:

ppfefeeeeeeebbeeffpebpebbeefeeefeeeeeeFpeeepb

3
私のように、文字が何を意味するのか疑問に思う人のために、チャットの関連部分へ
-JayCe

回答:


5

05AB1E22 16 15バイト

Nitがシートマップを文字列として取得できることに気付いたおかげで、6バイト節約されました。

svDyå·Fyyl.;s]»

オンラインでお試しください!

説明

s                     # setup stack as <passengerlist>,<seatmap>,<passengerlist>
 v                    # for each passenger y
  Dyå                 # does a corresponding seat exist?
     ·F               # multiplied by 2 times do:
       yyl.;          # replace the first y with a lowercase y
            s         # and swap the seatmap and passengerlist on the stack
             ]        # end loops
              »       # join seatmap and passengerlist on newline and output

1
シートマップは、改行を含む単一の文字列として入力できます。1〜2バイト節約できませんか?
NIT

@Nit:ああ、それは確かに私を救うはずです。ありがとう:)
エミグナ

5

パイソン293の 89 84 83 82 78バイト

l=input()
for c in l[1]:l=[x.replace(c,c.lower(),c in l[0])for x in l]
print l

オンラインでお試しください!

入力を2つの文字列として受け取ります。2つの文字列を出力します


保存しました

  • -5バイト、Dead Possumのおかげ
  • リンのおかげで、-4バイト

1
s,p=[x.replace(c,c.lower(),c in s)for x in[s,p]]84バイト
デッドポッサム

1
完全なプログラムは少し短くなりますl=input() for c in l[1]:l=[x.replace(c,c.lower(),c in l[0])for x in l] print l
リン

5

C(clang)75 68バイト

f(char*s,char*p){char*r;while(*s){if(r=strchr(p,*s))*r=*s+=32;s++;}}

char *内容がインプレースで変更される2人(座席と乗客)を取ります。

オンラインでお試しください!

私はPythonよりもCでのゴルフに慣れていませんが、それも楽しいです!

誰かが*r+=32,*i+=32部分を短くするためのトリックのアイデアを持っているなら、私は感謝するでしょう。 ->数バイトのゴルフを手伝ってくれた@Daveに感謝します!


1
iとrは同じであるため、* r = * i + = 32を使用できます。iを削除し、strchr呼び出しでsをポストインクリメントすることで、さらにいくつかの文字を削除することもできます。
デイブ

ありがとう、私はできるときに更新します!sを直接使用することを考えましたが、それは何らかの理由で機能しませんでした。もう一度説明します。
エテン


4

C(gcc)、63バイト

f(x,y,z)char*x,*y,*z;{for(;*y;++y)if(z=strchr(x,*y))*z=*y+=32;}

オンラインでお試しください!

基本的な概念については、エテンの功績がたくさんあります。彼の答えの戦略に重いゴルフを適用しただけです。


提案するindex()代わりにstrchr()
ceilingcat

素晴らしい改善。POSIXでは完全に非推奨であり、私の経験ではコンパイラーによるサポートが少ないため、ここには含めません。さらに、わずか1バイトの変更。(PS:最近のすべての提案に感謝:) <xkcd.com/541>)
LambdaBeta

クレジットをありがとう!この種のアウトゴルフは、ゴルフをより良くする方法を学ぶ私のお気に入りの方法です。
エテン

同じように、最近投稿したシーリングキャットの投稿と、最近投稿したコメントのいくつかをチェックすることをお勧めします。私たち全員がお互いから学ぶことが大好きです。
ラムダベータ



2

Scala、104バイト

def f(l:Array[Char]*)=(l(0).map(? =>{val i=l(1)indexOf?;if(i>=0){l(1)(i)= ?toLower;l(1)(i)}else?}),l(1))

オンラインでお試しください!

入力で2 seqの文字を受け取り、2 seqの文字を返します。

説明:

def f(l: Array[Char]*) =          // input are varargs of Array[Char]; in our case 2 arrays. Arrays are chosen since mutable (the seatmap will be updated while the passenger list is mapped)
  (                               // we return a tuple with the 2 arrays of Chars
    l(0).map(                     // l(0) is the passenger list. We map (transform) each element of this list to lowercase or not and this is what's returned as 1st part of the tuple
      ? => {                      // ? is the current element of the passenger list being mapped (it's ? and not let's say m in order to be able to stick it next to functions)
        val i = l(1) indexOf ?   // i is the index (or -1) of the letter ? in the seat map
        if (i >= 0) {             // if index found
          l(1)(i) = ? toLower     // then we update the seatmap with the lower case version of this seat
          l(1)(i)                 // and the passenger list elmt is mapped to its lower case version (same as ?.toLower)
        }                         //
        else ?                    // if not found, the seatmap is not updated and the passenger list elmt stays in upper case
      }                           //
    ),                            // 
    l(1)                          // the updated seat map
  )

1
PPCGへようこそ!
ジュゼッペ



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.