กำหนดที่นั่งของสายการบิน


16

แรงบันดาลใจจากบทเรียน APL ของสัปดาห์ที่แล้ว

ให้แผนที่ที่นั่งแบบตัวพิมพ์ใหญ่ 2 มิติและรายชื่อลูกค้า 1D ส่งคืนแผนผังที่นั่งและรายชื่อลูกค้า แต่ได้แก้ไขดังต่อไปนี้ (เพื่อระบุที่นั่งว่างและลูกค้าที่นั่ง):

สำหรับตัวอักษรที่ไม่ซ้ำกันแต่ละตัวในรายการผู้โดยสารขาเข้าให้พิมพ์เล็กลงที่ตัวอักษรจำนวนมาก (หรือทั้งหมดหากมีไม่เพียงพอ) ในแผนผังที่นั่งจะเรียงจากซ้ายไปขวาบนลงล่าง

สำหรับตัวอักษรที่ไม่ซ้ำกันแต่ละตัวในแผนผังที่นั่งให้พิมพ์ตัวอักษรเล็ก ๆ (หรือทั้งหมดถ้ามีไม่เพียงพอ) ในรายชื่อผู้โดยสารโดยเรียงจากซ้ายไปขวา

  1. แผนที่การป้อนข้อมูลที่นั่งมีเพียงช่องว่างและตัวอักษรพิมพ์ใหญ่จากชุดที่ { F, B, P, E} และอาจจะเป็น:
    1. แยกออกเป็นแถวด้วยตัวแบ่งบรรทัด
    2. รายการของสตริง
    3. เมทริกซ์ของอักขระตัวพิมพ์ใหญ่
    4. ในรูปแบบอื่นที่เทียบเท่า
  2. รายชื่อลูกค้าอินพุตมีเพียงตัวอักษรพิมพ์ใหญ่จากชุดที่ { F, B, P, E} และอาจจะเป็น:
    1. สตริง
    2. รายการของตัวละคร
    3. ในรูปแบบอื่นที่เทียบเท่า
  3. แผนผังที่นั่งกลับต้องเหมือนกับอินพุตหนึ่งยกเว้นว่าตัวอักษรศูนย์หรือมากกว่านั้นถูกพับเป็นตัวพิมพ์เล็ก
  4. รายชื่อลูกค้าที่ส่งคืนจะต้องเหมือนกันกับหนึ่งอินพุตยกเว้นว่ามีการพับตัวอักษรศูนย์หรือมากกว่านั้นเป็นตัวพิมพ์เล็ก
  5. อนุญาตช่องว่างนำหน้าและต่อท้าย

ตัวอย่าง(ฉบับย่อของเครื่องบินของ United)

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 ไบต์

บันทึกแล้ว 6 ไบต์ขอบคุณที่Nitสังเกตเห็นว่าแผนผังที่นั่งสามารถใช้เป็นสตริงได้

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

Python 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

ลองออนไลน์!

รับอินพุตเป็นสองสตริง พิมพ์สองสตริง


ที่บันทึกไว้

  • -5 ไบต์ขอบคุณ Dead Possum
  • -4 ไบต์ขอบคุณ Lynn

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

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 *(ที่นั่ง & ผู้โดยสาร) ซึ่งเนื้อหาได้รับการแก้ไขในสถานที่

ลองออนไลน์!

ฉันไม่ค่อยชินกับการเล่นกอล์ฟใน C มากกว่าใน Python แต่ก็สนุกเช่นกัน!

หากใครมีความคิดสำหรับกลอุบายที่จะย่อ*r+=32,*i+=32ส่วนฉันจะขอบคุณ -> ขอบคุณ @Dave ที่ช่วยฉันเล่นกอล์ฟเพิ่มอีกไบต์!


1
เนื่องจาก i และ r จะเหมือนกันคุณสามารถใช้ * r = * i + = 32 นอกจากนี้คุณยังสามารถลบทิ้งตัวละครได้อีกสองสามตัวโดยกำจัด i และลบเครื่องหมาย s ในการเรียก strchr
เดฟ

ขอบคุณฉันจะอัปเดตเมื่อ l สามารถ! ฉันคิดถึงการใช้งานโดยตรง แต่ไม่ได้ผลด้วยเหตุผลบางอย่างฉันจะกลับไปใช้
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

3

C (gcc) , 64 ไบต์

การกู้ยืมเงินจากคำตอบของ @ etene ผมออกifกับ?:ผู้ประกอบการในระดับอุดมศึกษาและนำกลับมาใช้ตัวชี้ผู้โดยสารเป็นดัชนีของตัวเอง

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

ลองออนไลน์!



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!
Giuseppe

1

เรติน่า 36 ไบต์

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

ลองออนไลน์! ถือว่ารายชื่อลูกค้าเป็นบรรทัดสุดท้ายของอินพุต คำอธิบาย: ค้นหาคู่ของการจับคู่อักขระตัวพิมพ์ใหญ่และตัวพิมพ์เล็กโดยใช้$lดังนั้นจึงหลีกเลี่ยงอักขระกลาง



1

Perl 5 -pF , 48 ไบต์

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

ลองออนไลน์!

บรรทัดแรกของการป้อนข้อมูลคือรายการผู้โดยสาร บรรทัดต่อมาทั้งหมดคือแผนผังที่นั่ง เอาท์พุทเหมือนกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.