Chỉ định chỗ ngồi máy bay


16

Lấy cảm hứng từ bài học APL tuần trước .

Đưa ra một bản đồ ghế 2D viết hoa và danh sách khách hàng 1D, trả lại bản đồ chỗ ngồi và danh sách khách hàng nhưng được sửa đổi như sau (để chỉ ra chỗ ngồi bị chiếm dụng và khách hàng ngồi):

Đối với mỗi chữ cái duy nhất trong danh sách hành khách đầu vào, hãy viết thường nhiều chữ (hoặc tất cả, nếu không đủ) của chữ cái đó trong bản đồ chỗ ngồi, đi từ trái sang phải, từ trên xuống dưới.

Đối với mỗi chữ cái duy nhất trong bản đồ chỗ ngồi, chữ thường có nhiều (hoặc tất cả, nếu không đủ) của chữ cái đó trong danh sách hành khách, đi từ trái sang phải.

  1. Bản đồ chỗ ngồi đầu vào chỉ chứa dấu cách và chữ hoa từ tập { F, B, P, E}, và có thể là:
    1. ngăn cách thành hàng bởi các ngắt dòng
    2. một danh sách các chuỗi
    3. một ma trận các ký tự viết hoa
    4. trong bất kỳ định dạng so sánh khác
  2. Đầu vào danh sách khách hàng chỉ chứa chữ hoa từ tập { F, B, P, E} và có thể là:
    1. một chuỗi
    2. một danh sách các nhân vật
    3. trong bất kỳ định dạng so sánh khác
  3. Sơ đồ chỗ ngồi được trả lại phải giống hệt với sơ đồ đầu vào, ngoại trừ không có hoặc nhiều chữ cái được gấp lại thành chữ thường
  4. Danh sách khách hàng được trả lại phải giống hệt với danh sách đầu vào, ngoại trừ số 0 hoặc nhiều chữ cái đã được gấp lại thành chữ thường
  5. Khoảng trắng hàng đầu và dấu được cho phép

Ví dụ (phiên bản rút gọn của máy bay của United)

ERJ145

Sơ đồ chỗ ngồi:

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

P  PP
E  EE
E  EE
E  EE

Danh sách hành khách đầu vào:

FFEEEEEEEEEEEEEEEE

Bản đồ chỗ ngồi:

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

P  PP
e  eE
E  EE
E  EE

Danh sách hành khách đầu ra:

FFeeeeeeeeeeeeeeee

CRJ700

Sơ đồ chỗ ngồi:

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

PP  PP
EE  EE
EE  EE
EE  EE

Danh sách khách hàng đầu vào:

FFFFFFFFPPEEEEEEEEEEEEEEEEEEEEE

Bản đồ chỗ ngồi:

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

PP  PP
ee  ee
ee  ee
ee  ee

Danh sách khách hàng đầu ra:

ffffffFFppeeeeeeeeeeeeeeeeEEEEE

B57

Sơ đồ chỗ ngồi:

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     

Danh sách hành khách đầu vào:

FEEEEEEEEFEEEFEEEEEEEEFEEFFEEFEFFFEE

Bản đồ chỗ ngồi:

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     

Danh sách hành khách đầu ra:

feeeeeeeefeeefeeeeeeeefeeffeefefffee

B767

Sơ đồ chỗ ngồi:

 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          

Danh sách hành khách đầu vào:

PPFEFEEEEEEEBBEEFFPEBPEBBEEFEEEFEEEEEEFPEEEPB

Bản đồ chỗ ngồi:

 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          

Danh sách hành khách đầu ra:

ppfefeeeeeeebbeeffpebpebbeefeeefeeeeeeFpeeepb

3
Đối với những người, giống như tôi, tự hỏi những chữ cái này có nghĩa gì, đây là một liên kết đến phần trò chuyện có liên quan
JayCe

Câu trả lời:


5

05AB1E , 22 16 15 byte

Đã lưu 6 byte nhờ Nit nhận thấy rằng sơ đồ chỗ ngồi có thể được lấy dưới dạng chuỗi.

svDyå·Fyyl.;s]»

Hãy thử trực tuyến!

Giải trình

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
Sơ đồ chỗ ngồi có thể được nhập dưới dạng một chuỗi với các ngắt dòng, điều đó có giúp bạn tiết kiệm một hoặc hai byte không?
Nit

@Nit: Ah, nó thực sự sẽ giúp tôi tiết kiệm một số. Cảm ơn :)
Emigna

5

Python 2 , 93 89 84 83 82 78 byte

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

Hãy thử trực tuyến!

Lấy đầu vào là hai chuỗi. In hai chuỗi


Đã lưu

  • -5 byte, nhờ Dead Possum
  • -4 byte, nhờ Lynn

1
s,p=[x.replace(c,c.lower(),c in s)for x in[s,p]]cho 84 byte
Dead Possum

1
Một chương trình đầy đủ ngắn hơn một chút: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 (tiếng kêu) , 75 68 byte

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

Mất hai char *(ghế & hành khách) có nội dung được sửa đổi tại chỗ.

Hãy thử trực tuyến!

Tôi ít quen chơi golf ở C hơn Python, nhưng điều đó cũng rất vui!

Nếu bất cứ ai có ý tưởng cho một mẹo để rút ngắn *r+=32,*i+=32phần tôi sẽ biết ơn. -> Cảm ơn @Dave đã giúp tôi chơi thêm một số byte!


1
vì i và r sẽ giống nhau, bạn có thể sử dụng * r = * i + = 32. Bạn cũng có thể loại bỏ một vài ký tự bằng cách loại bỏ i và tăng sau s trong cuộc gọi strchr.
Dave

Cảm ơn bạn, tôi sẽ cập nhật khi tôi có thể! Tôi đã nghĩ về việc sử dụng trực tiếp nhưng điều đó không hiệu quả vì một số lý do, tôi sẽ quay lại với nó.
etene


4

C (gcc) , 63 byte

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

Hãy thử trực tuyến!

Rất nhiều tín dụng để etene cho các khái niệm cơ bản. Chỉ cần áp dụng golf nặng vào chiến lược câu trả lời của anh ấy.


Đề xuất index()thay vìstrchr()
trần

cải thiện tốt đẹp. Tôi sẽ không bao gồm nó ở đây vì nó không được hỗ trợ hoàn toàn trong POSIX và theo kinh nghiệm của tôi thì ít được trình biên dịch hỗ trợ. Thêm vào đó chỉ là thay đổi 1 byte. (PS: cảm ơn vì tất cả các đề xuất gần đây :) <xkcd.com/541>)
LambdaBeta

Cảm ơn tín dụng! Kiểu chơi gôn này là cách yêu thích của tôi để học cách chơi golf tốt hơn.
etene

Tương tự, tôi khuyên bạn nên kiểm tra một số ý kiến ​​được đưa ra trên các bài đăng của tôi bởi Barecat cũng như những người khác gần đây. Tôi yêu khi tất cả chúng ta học hỏi lẫn nhau.
LambdaBeta

3

C (gcc) , 64 byte

Mượn từ câu trả lời @ etene, tôi loại bỏ các ifvới các ?:nhà điều hành đại học và tái sử dụng con trỏ hành khách như chỉ số riêng của mình.

f(s,p,j)char*s,*p,*j;{for(;*p;p++)(j=strchr(s,*p))?*j=*p|=32:0;}

Hãy thử trực tuyến!



2

Scala , 104 byte

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))

Hãy thử trực tuyến!

Mất 2 seq ký tự trong đầu vào và trả về 2 seq ký tự.

Giải trình:

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
Chào mừng đến với PPCG!
Giuseppe

1

Võng mạc , 36 byte

+`(([A-Z])(.*¶)+.*?)(\2.*$)
$l$1$l$4

Hãy thử trực tuyến! Giả sử danh sách khách hàng là dòng cuối cùng của đầu vào. Giải thích: Tìm các cặp ký tự viết hoa phù hợp và viết thường chúng bằng cách sử dụng $ldo đó tránh các ký tự trung gian.



1

Perl 5 -pF , 48 byte

$\=join'',<>;say map$\=~s/$_/lc$_/e&&lc||$_,@F}{

Hãy thử trực tuyến!

Dòng đầu tiên là danh sách hành khách. Tất cả các dòng tiếp theo là bản đồ chỗ ngồi. Đầu ra là như nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.