여객기 좌석 할당


16

지난주 APL 레슨에서 영감을 얻었습니다 .

대문자 2D 좌석 배치도 및 1D 고객 목록이 제공된 경우 좌석 배치도 및 고객 목록을 반환하지만 다음과 같이 수정합니다 (점유 된 좌석 및 좌석 고객을 나타냅니다).

입력 승객 목록의 각 고유 문자에 대해 좌석 배치도에서 해당 문자의 수 (또는 충분하지 않은 경우 모두)가 왼쪽에서 오른쪽으로, 위에서 아래로 소문자로 입력됩니다.

좌석 배치도의 각 고유 문자에 대해 승객 목록에있는 해당 문자 중 다수 (또는 전체가 충분하지 않은 경우)가 왼쪽에서 오른쪽으로 소문자로 표시됩니다.

  1. 입력 시트지도는 집합 {에서 공간 및 대문자를 포함 F, B, P, E} 할 수있다 :
    1. 줄 바꿈으로 행으로 구분
    2. 문자열 목록
    3. 대문자 행렬
    4. 다른 유사한 형식으로
  2. 입력 고객 목록 만 세트에서 대문자를 포함 { F, B, P, E} 될 수있다 :
    1. 문자 목록
    2. 다른 유사한 형식으로
  3. 반환 된 좌석 배치도는 0 개 이상의 문자가 소문자로 접힌다는 점을 제외하고 입력 된 것과 동일해야합니다.
  4. 반품 된 고객 목록은 입력 한 것과 동일해야합니다. 단, 0 개 이상의 문자를 소문자로 접었다는 점이 다릅니다
  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

05AB1E , 22 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
시트 맵은 줄 바꿈이있는 단일 문자열로 입력 할 수 있습니다.
Nit

@ Nit : 아, 그것은 실제로 저를 구해야합니다. 감사합니다 :)
Emigna

5

파이썬 2 , 93 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

온라인으로 사용해보십시오!

입력을 두 개의 문자열로 취합니다. 두 개의 문자열을 인쇄합니다


저장되었습니다

  • Dead Possum 덕분에 -5 바이트
  • Lynn 덕분에 -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
Lynn

5

C (클랑) , 75 68 바이트

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

char *내용이 수정 된 좌석 (승객 및 승객) 2 명을 인계 합니다.

온라인으로 사용해보십시오!

파이썬보다 C에서 골프를 치는 데 익숙하지 않지만 재미도 있습니다!

누군가가 *r+=32,*i+=32부분 을 단축시키는 트릭에 대한 아이디어가 있다면 나는 감사 할 것입니다. -> 좀 더 많은 바이트를 제공하는 @Dave에게 감사드립니다!


1
i와 r이 같으므로 * r = * i + = 32를 사용할 수 있습니다. 또한 i를 제거하고 strchr 호출에서을 증가시켜 몇 문자를 더 줄일 수 있습니다.
Dave

고마워, 내가 할 수있을 때 업데이트합니다! 나는 s를 직접 사용하는 것에 대해 생각했지만 어떤 이유로 든 작동하지 않았으므로 다시 돌아올 것입니다.
etene


4

C (gcc) , 63 바이트

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

온라인으로 사용해보십시오!

기본 개념에 대한 etene의 많은 신용. 그의 답변 전략에 헤비 골프를 적용했습니다.


index()대신 추천strchr()
ceilingcat

좋은 개선. POSIX에서는 더 이상 사용되지 않으며 내 경험으로는 컴파일러가 덜 지원하기 때문에 여기에 포함시키지 않습니다. 또한 1 바이트 만 변경됩니다. (PS : 최근에 모든 제안에 감사드립니다 :) <xkcd.com/541>)
LambdaBeta

신용 주셔서 감사합니다! 이런 종류의 아웃 골프는 골프를 잘하는 법을 배우는 가장 좋아하는 방법입니다.
etene

마찬가지로, 최근 ceilingcat뿐만 아니라 다른 사람들이 작성한 게시물에 대한 의견 중 일부를 확인하는 것이 좋습니다. 나는 우리 모두가 서로에게서 배울 때 사랑합니다.
LambdaBeta



2

스칼라 , 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.