Inspirado pela lição da APL da semana passada .
Dado um mapa de assentos 2D em maiúsculas e uma lista 1D de clientes, retorne o mapa de assentos e a lista de clientes, mas modificado da seguinte forma (para indicar assentos ocupados e clientes sentados):
Para cada letra exclusiva na lista de passageiros de entrada, minúscula que muitas (ou todas, se não houver o suficiente) dessa letra no mapa de assentos, indo da esquerda para a direita, de cima para baixo.
Para cada letra exclusiva no mapa de assentos, minúscula que muitas (ou todas, se não houver o suficiente) dessa carta na lista de passageiros, indo da esquerda para a direita.
- O mapa de assentos de entrada contém apenas espaços e letras maiúsculas do conjunto {
F
,B
,P
,E
}, e pode ser:- separados em linhas por quebras de linha
- uma lista de strings
- uma matriz de caracteres maiúsculos
- em qualquer outro formato comparável
- A lista de clientes de entrada contém apenas letras maiúsculas do conjunto {
F
,B
,P
,E
} e pode ser:- uma linha
- uma lista de caracteres
- em qualquer outro formato comparável
- O mapa de assentos retornado deve ser idêntico ao mapa de entrada, exceto que zero ou mais letras foram dobradas para minúsculas
- A lista de clientes retornados deve ser idêntica à da entrada, exceto que zero ou mais letras foram dobradas para minúsculas
- Espaço em branco à esquerda e à direita é permitido
Exemplos (edições reduzidas das aeronaves da United)
ERJ145
Entrada do mapa de assentos:
P
E
E PP
E EE
E EE
E EE
E EE
P PP
E EE
E EE
E EE
Entrada da lista de passageiros:
FFEEEEEEEEEEEEEEEE
Saída do mapa de assentos:
P
e
e PP
e ee
e ee
e ee
e ee
P PP
e eE
E EE
E EE
Saída da lista de passageiros:
FFeeeeeeeeeeeeeeee
CRJ700
Entrada do mapa de assentos:
F FF
F FF
PP PP
PP PP
PP PP
EE EE
PP PP
EE EE
EE EE
EE EE
Entrada da lista de clientes:
FFFFFFFFPPEEEEEEEEEEEEEEEEEEEEE
Saída do mapa de assentos:
f ff
f ff
pp PP
PP PP
PP PP
ee ee
PP PP
ee ee
ee ee
ee ee
Saída da lista de clientes:
ffffffFFppeeeeeeeeeeeeeeeeEEEEE
B757
Entrada do mapa de assentos:
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
Entrada da lista de passageiros:
FEEEEEEEEFEEEFEEEEEEEEFEEFFEEFEFFFEE
Saída do mapa de assentos:
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
Saída da lista de passageiros:
feeeeeeeefeeefeeeeeeeefeeffeefefffee
B767
Entrada do mapa de assentos:
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
Entrada da lista de passageiros:
PPFEFEEEEEEEBBEEFFPEBPEBBEEFEEEFEEEEEEFPEEEPB
Saída do mapa de assentos:
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
Saída da lista de passageiros:
ppfefeeeeeeebbeeffpebpebbeefeeefeeeeeeFpeeepb
Respostas:
05AB1E ,
221615 bytesEconomizou 6 bytes graças ao Nit, notando que o mapa de assentos poderia ser usado como uma string.
Experimente online!
Explicação
fonte
Python 2 ,
938984838278 bytesExperimente online!
Aceita entrada como duas strings. Imprime duas strings
Salvou
fonte
s,p=[x.replace(c,c.lower(),c in s)for x in[s,p]]
para 84 bytesl=input()
for c in l[1]:l=[x.replace(c,c.lower(),c in l[0])for x in l]
print l
C (clang) ,
7568 bytesLeva dois
char *
(assentos e passageiros) cujo conteúdo é modificado no local.Experimente online!
Estou menos acostumado a jogar golfe em C do que em Python, mas isso também é divertido!
Se alguém tiver uma idéia de um truque para encurtar a-> Obrigado ao @Dave por me ajudar a jogar mais alguns bytes!*r+=32,*i+=32
parte, ficaria grato.fonte
C (gcc) , 63 bytes
Experimente online!
Muito crédito ao eteno pelo conceito básico. Apenas aplicou o golfe pesado à estratégia de sua resposta.
fonte
index()
vez destrchr()
C (gcc) , 64 bytes
Tomando emprestado a resposta de @ etene, removi o
if
com o?:
operador terciário e reutilizei o ponteiro de passageiro como seu próprio índice.Experimente online!
fonte
Geléia , 19 bytes
Experimente online!
fonte
Scala , 104 bytes
Experimente online!
Recebe 2 seq de caracteres na entrada e retorna 2 seq de caracteres.
Explicação:
fonte
Retina , 36 bytes
Experimente online! Supõe que a lista de clientes seja a última linha da entrada. Explicação: Localiza pares de caracteres maiúsculos e minúsculos correspondentes
$l
, evitando assim os caracteres intermediários.fonte
APL (Dyalog Classic) ,
2927 bytesExperimente online!
fonte
Perl 5
-pF
, 48 bytesExperimente online!
A primeira linha de entrada é a lista de passageiros. Todas as linhas subseqüentes são o mapa de assentos. A saída é a mesma.
fonte