Airlinersitze zuweisen

16

Inspiriert von der APL-Lektion der letzten Woche .

Wenn Sie eine 2D-Sitzkarte in Großbuchstaben und eine 1D-Kundenliste haben, geben Sie die Sitzkarte und die Kundenliste zurück, die jedoch wie folgt geändert wurden (um belegte Sitze und sitzende Kunden anzugeben):

Schreiben Sie für jeden eindeutigen Buchstaben in der eingegebenen Passagierliste so viele (oder alle, falls nicht genug) Buchstaben in der Sitzübersicht von links nach rechts und von oben nach unten in Kleinbuchstaben.

Geben Sie für jeden eindeutigen Buchstaben in der Sitzübersicht in Kleinbuchstaben an, dass viele (oder alle, falls nicht genug vorhanden) Buchstaben in der Passagierliste von links nach rechts aufgeführt sind.

  1. Der Eingangssitzplan enthält nur Leerzeichen und Großbuchstaben aus der Menge { F, B, P, E}, und sein kann:
    1. durch Zeilenumbrüche in Zeilen getrennt
    2. eine Liste von Zeichenfolgen
    3. eine Matrix aus Großbuchstaben
    4. in jedem anderen vergleichbaren Format
  2. Die Eingangskundenliste enthält nur Großbuchstaben aus der Menge { F, B, P, E} und sein kann:
    1. ein Faden
    2. eine Liste von Zeichen
    3. in jedem anderen vergleichbaren Format
  3. Die Karte des zurückgegebenen Sitzplatzes muss mit der eingegebenen identisch sein, mit der Ausnahme, dass keine oder mehrere Buchstaben in Kleinbuchstaben gefaltet wurden
  4. Die zurückgegebene Kundenliste muss mit der eingegebenen identisch sein, mit der Ausnahme, dass keine oder mehrere Buchstaben in Kleinbuchstaben gefaltet wurden
  5. Führende und nachfolgende Leerzeichen sind zulässig

Beispiele (gekürzte Ausgaben von Uniteds Flugzeugen)

ERJ145

Sitzplaneingabe:

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

P  PP
E  EE
E  EE
E  EE

Passagierlisten-Eingabe:

FFEEEEEEEEEEEEEEEE

Sitzplanausgabe:

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

P  PP
e  eE
E  EE
E  EE

Passagierlistenausgabe:

FFeeeeeeeeeeeeeeee

CRJ700

Sitzplaneingabe:

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

PP  PP
EE  EE
EE  EE
EE  EE

Eingabe der Kundenliste:

FFFFFFFFPPEEEEEEEEEEEEEEEEEEEEE

Sitzplanausgabe:

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

PP  PP
ee  ee
ee  ee
ee  ee

Kundenlistenausgabe:

ffffffFFppeeeeeeeeeeeeeeeeEEEEE

B757

Sitzplaneingabe:

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     

Passagierlisten-Eingabe:

FEEEEEEEEFEEEFEEEEEEEEFEEFFEEFEFFFEE

Sitzplanausgabe:

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     

Passagierlistenausgabe:

feeeeeeeefeeefeeeeeeeefeeffeefefffee

B767

Sitzplaneingabe:

 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          

Passagierlisten-Eingabe:

PPFEFEEEEEEEBBEEFFPEBPEBBEEFEEEFEEEEEEFPEEEPB

Sitzplanausgabe:

 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          

Passagierlistenausgabe:

ppfefeeeeeeebbeeffpebpebbeefeeefeeeeeeFpeeepb
Adam
quelle
3
Für diejenigen, die sich wie ich fragen, was die Buchstaben bedeuten, ist hier ein Link zu einem relevanten Teil des Chats
JayCe

Antworten:

5

05AB1E , 22 16 15 Bytes

6 Bytes gespart, da Nit bemerkt hat, dass die Sitzübersicht als Zeichenfolge verwendet werden kann.

svDyå·Fyyl.;s]»

Probieren Sie es online!

Erläuterung

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
Emigna
quelle
1
Die Sitzübersicht kann als einzelne Zeichenfolge mit Zeilenumbrüchen eingegeben werden. Sparen Sie sich dann nicht ein oder zwei Bytes?
Nit
@Nit: Ah, es sollte mir tatsächlich einiges ersparen. Danke :)
Emigna
5

Python 2 , 93 89 84 83 82 78 Bytes

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

Probieren Sie es online!

Nimmt die Eingabe als zwei Zeichenfolgen. Druckt zwei Zeichenfolgen


Gerettet

  • -5 Bytes, dank Dead Possum
  • -4 Bytes, danke an Lynn
TFeld
quelle
1
s,p=[x.replace(c,c.lower(),c in s)for x in[s,p]]für 84 Bytes
Dead Possum
1
Ein volles Programm ist etwas kürzer: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 (Klirren) , 75 68 Bytes

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

Nimmt zwei char *(Sitze & Passagiere), deren Inhalt an Ort und Stelle geändert wird.

Probieren Sie es online!

Ich bin das Golfen in C weniger gewohnt als in Python, aber das macht auch Spaß!

Wenn jemand eine Idee für einen Trick hat, um den *r+=32,*i+=32Teil zu verkürzen, wäre ich dankbar. -> Danke an @Dave für die Hilfe beim Golfspielen!

Eten
quelle
1
Da i und r gleich sind, können Sie * r = * i + = 32 verwenden. Sie können auch ein paar Zeichen mehr entfernen, indem Sie i entfernen und s im strchr-Aufruf nachträglich erhöhen.
Dave
Vielen Dank, ich werde aktualisieren, wenn ich kann! Ich habe überlegt, s direkt zu verwenden, aber das hat aus irgendeinem Grund nicht funktioniert. Ich werde darauf zurückkommen.
Etene
59 Bytes
Ceilingcat
4

C (gcc) 63 Bytes

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

Probieren Sie es online!

Etene viel Dank für das Grundkonzept. Wendete gerade starkes Golfen auf die Strategie seiner Antwort an.

LambdaBeta
quelle
Schlagen Sie index()stattdessen vorstrchr()
ceilingcat
schöne verbesserung. Ich werde es hier nicht aufnehmen, da es in POSIX vollständig veraltet ist und meiner Erfahrung nach von Compilern weniger unterstützt wird. Plus es ist nur eine 1-Byte-Änderung. (PS: danke für all die vor kurzem gemachten Vorschläge :) <xkcd.com/541>)
LambdaBeta
Danke für die Gutschrift! Diese Art des Golfspiels ist meine Lieblingsmethode, um besser Golf spielen zu lernen.
Etene
Ebenso würde ich empfehlen, einige der Kommentare zu meinen Beiträgen von ceilingcat sowie andere in letzter Zeit zu lesen. Ich liebe es, wenn wir alle voneinander lernen.
LambdaBeta
3

C (gcc) , 64 Bytes

In Anlehnung an die Antwort von @ etene entfernte ich den Wert ifmit dem ?:tertiären Operator und verwendete den Passagierzeiger erneut als eigenen Index.

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

Probieren Sie es online!

ErikF
quelle
2

Scala , 104 Bytes

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

Probieren Sie es online!

Nimmt 2 Sek. Zeichen in die Eingabe und gibt 2 Sek. Zeichen zurück.

Erläuterung:

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
  )
Xavier Guihot
quelle
1
Willkommen bei PPCG!
Giuseppe
1

Netzhaut , 36 Bytes

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

Probieren Sie es online! Angenommen, die Kundenliste ist die letzte Zeile der Eingabe. Erläuterung: Sucht Paare übereinstimmender Großbuchstaben und setzt sie in Kleinbuchstaben, wobei $ldie Zwischenbuchstaben vermieden werden.

Neil
quelle
1

Perl 5 -pF , 48 Bytes

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

Probieren Sie es online!

Erste Eingabezeile ist die Passagierliste. Alle nachfolgenden Zeilen sind der Sitzplan. Die Ausgabe ist die gleiche.

Xcali
quelle