Assegna posti aereo di linea


16

Ispirato alla lezione APL della scorsa settimana .

Data una mappa dei posti 2D maiuscola e un elenco 1D di clienti, restituire la mappa dei posti e l'elenco dei clienti, ma modificati come segue (per indicare i posti occupati e i clienti seduti):

Per ogni lettera univoca nell'elenco passeggeri di input, minuscola che molte (o tutte, se non ce ne sono abbastanza) di quella lettera nella mappa dei posti, andando da sinistra a destra, dall'alto verso il basso.

Per ogni lettera univoca nella mappa dei posti, minuscola che molte (o tutte, se non ce ne sono abbastanza) di quella lettera nell'elenco passeggeri, andando da sinistra a destra.

  1. La mappa dei posti di input contiene solo spazi e lettere maiuscole dal set { F, B, P, E}, e può essere:
    1. separati in righe per interruzioni di riga
    2. un elenco di stringhe
    3. una matrice di caratteri maiuscoli
    4. in qualsiasi altro formato comparabile
  2. La lista dei clienti di input contiene solo lettere maiuscole dal set { F, B, P, E} e può essere:
    1. una stringa
    2. un elenco di personaggi
    3. in qualsiasi altro formato comparabile
  3. La mappa dei posti restituita deve essere identica a quella di input, tranne per il fatto che zero o più lettere sono state piegate in minuscolo
  4. L'elenco dei clienti restituiti deve essere identico a quello di input, tranne per il fatto che zero o più lettere sono state piegate in minuscolo
  5. Sono ammessi spazi iniziali e finali

Esempi (edizioni abbreviate del velivolo United)

ERJ145

Immissione della mappa dei posti:

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

P  PP
E  EE
E  EE
E  EE

Ingresso elenco passeggeri:

FFEEEEEEEEEEEEEEEE

Uscita mappa dei posti:

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

P  PP
e  eE
E  EE
E  EE

Uscita elenco passeggeri:

FFeeeeeeeeeeeeeeee

CRJ700

Immissione della mappa dei posti:

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

PP  PP
EE  EE
EE  EE
EE  EE

Inserimento elenco clienti:

FFFFFFFFPPEEEEEEEEEEEEEEEEEEEEE

Uscita mappa dei posti:

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

PP  PP
ee  ee
ee  ee
ee  ee

Uscita elenco clienti:

ffffffFFppeeeeeeeeeeeeeeeeEEEEE

B757

Immissione della mappa dei posti:

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     

Ingresso elenco passeggeri:

FEEEEEEEEFEEEFEEEEEEEEFEEFFEEFEFFFEE

Uscita mappa dei posti:

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     

Uscita elenco passeggeri:

feeeeeeeefeeefeeeeeeeefeeffeefefffee

B767

Immissione della mappa dei posti:

 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          

Ingresso elenco passeggeri:

PPFEFEEEEEEEBBEEFFPEBPEBBEEFEEEFEEEEEEFPEEEPB

Uscita mappa dei posti:

 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          

Uscita elenco passeggeri:

ppfefeeeeeeebbeeffpebpebbeefeeefeeeeeeFpeeepb

3
Per coloro che, come me, si chiedono cosa significano le lettere, ecco un link alla parte rilevante della chat
JayCe

Risposte:


5

05AB1E , 22 16 15 byte

Salvato 6 byte grazie a Nit notando che la mappa dei posti potrebbe essere presa come una stringa.

svDyå·Fyyl.;s]»

Provalo online!

Spiegazione

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
Il seatmap può essere inserito come una singola stringa con interruzioni di riga, non ti risparmierebbe un byte o due?
Nit

@Nit: Ah, dovrebbe davvero salvarmi un po '. Grazie :)
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

Provalo online!

Accetta input come due stringhe. Stampa due stringhe


Salvato

  • -5 byte, grazie a Dead Possum
  • -4 byte, grazie a Lynn

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

1
Un programma completo è un po 'più breve: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 (clang) , 75 68 byte

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

Prende due char *(posti e passeggeri) i cui contenuti sono modificati sul posto.

Provalo online!

Sono meno abituato a giocare a golf in C che in Python, ma è anche divertente!

Se qualcuno ha un'idea per un trucco per abbreviare la *r+=32,*i+=32parte, sarei grato. -> Grazie a @Dave per avermi aiutato a giocare a golf ancora qualche byte!


1
poiché i e r saranno gli stessi, puoi usare * r = * i + = 32. Puoi anche radere qualche altro carattere eliminando i e post-incrementando s nella chiamata strchr.
Dave,

Grazie, aggiornerò quando posso! Ho pensato di usare s direttamente, ma per qualche motivo non ha funzionato, tornerò su di esso.
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;}

Provalo online!

Un sacco di credito per etene per il concetto di base. Ho appena applicato il golf pesante alla strategia della sua risposta.


Suggerisci index()invece distrchr()
ceilingcat

bel miglioramento. Non lo includerò qui perché è completamente deprecato in POSIX e nella mia esperienza è meno supportato dai compilatori. Inoltre è solo una modifica di 1 byte. (PS: grazie per tutti i suggerimenti recentemente :) <xkcd.com/541>)
LambdaBeta

Grazie per il merito! Questo tipo di out-golf è il mio modo preferito di imparare a giocare a golf meglio.
etene,

Lo stesso, ti consiglio di dare un'occhiata ad alcuni dei commenti fatti sui miei post da ceilingcat e altri recentemente. Adoro quando tutti impariamo gli uni dagli altri.
LambdaBeta,

3

C (gcc) , 64 byte

Prendendo in prestito dalla risposta di @ ETENE, ho rimosso la ifcon l' ?:operatore terziaria e riutilizzato il puntatore del passeggero come il proprio indice.

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

Provalo online!



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

Provalo online!

Accetta 2 seq di caratteri in input e restituisce 2 seq di caratteri.

Spiegazione:

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
Benvenuti in PPCG!
Giuseppe

1

Retina , 36 byte

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

Provalo online! Presuppone che l'elenco dei clienti sia l'ultima riga dell'input. Spiegazione: trova coppie di caratteri maiuscoli corrispondenti e li mette in minuscolo usando $levitando così i caratteri intermedi.



1

Perl 5 -pF , 48 byte

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

Provalo online!

La prima riga di input è l'elenco dei passeggeri. Tutte le righe successive sono la mappa dei posti. L'output è lo stesso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.