Dadas duas listas que não contêm elementos duplicados a
e b
, encontre o cruzamento entre as duas listas e produza um diagrama de Venn ASCII-Art. O diagrama de Venn usará uma versão quadriculada dos círculos tradicionais para simplificar.
Exemplo
Dado:
a = [1, 11, 'Fox', 'Bear', 333, 'Bee']
b = ['1', 333, 'Bee', 'SchwiftyFive', 4]
Saída (a ordem é 100% arbitrária, desde que o diagrama de Venn esteja correto):
+-----+----+-------------+
|11 |333 |SchwiftyFive |
|Fox |Bee |4 |
|Bear |1 | |
+-----+----+-------------+
O programa pode considerar '1' == 1
ou '1' != 1
, até sua implementação. Você também pode optar por manipular tudo como strings e aceitar apenas a entrada de strings.
Dado:
a=[]
b=[1,2,3]
Saída (observe como as duas partes vazias ainda têm o espaço no teclado direito):
+-+-+--+
| | |1 |
| | |2 |
| | |3 |
+-+-+--+
Dado:
a=[1]
b=[1]
Resultado:
+-+--+-+
| |1 | |
+-+--+-+
Regras
- Os elementos do diagrama de Venn são alinhados à esquerda e preenchidos com a entrada de comprimento máximo mais 1.
- A ordem dos elementos nas subseções do diagrama de Venn é arbitrária.
- Os cantos do diagrama de Venn (onde se
|
encontram-
) devem ser representados por a+
. - Você tem a garantia de que
a.join(b).length() > 0
, se os dois estiverem vazios, poderá fazer o que for.- Você pode até imprimir uma foto de Abe Lincoln, não se importe.
- Isso é código-golfe , arte ascii e teoria dos conjuntos .
Bônus
O carvão vegetal processa caixas como essa naturalmente, mas toda a teoria dos conjuntos parte ... Não sei o quão bem isso é feito. Recompensa de +100 pelo envio mais curto de carvão antes que eu possa adicionar uma recompensa à pergunta (dois dias depois de ser feita).
fonte
'1' == 1
é um pouco demais de um estiramentoRespostas:
Python 2 ,
221210212 bytesExperimente online!
fonte
PHP> = 7.1, 287 bytes
Versão Online
Expandido
fonte
Carvão ,
1068987 bytes:Experimente online! Observe que o link é detalhado para fins explicativos, com a
-sl
opção que mostra o código de carvão nativo equivalente. Recebe a entrada como seqüências separadas por nova linha com uma linha em branco após cada conjunto.Editar: salvou 11 bytes graças a @ ASCII-only. A versão anterior realmente teve um bug quando a última palavra no primeiro conjunto não estava no segundo e também a primeira coluna foi a mais alta, que se manifestou como uma aparentemente incapacidade de otimizar temporariamente. Economizou 2 bytes otimizando dois comandos Mover (o deverbosifier agora faz isso automaticamente, mas o código resultante sempre foi válido, portanto a resposta ainda está competindo).
Edit: Eu não acho que
Multiprint
costumava trabalhar com saída de múltiplas linhas, mas atualmente o uso disso economizaria 6 bytes, mais 4 bytes, porque o atual Charcoal pré-inicializa au
variável na lista vazia: Experimente online!fonte
Multiprint
(P
)Map
existe (desculpe, irá documentar o mais cedo possível)Map
, isso me ajudou a otimizar a resposta um pouco mais. Finalmente, acho que o carvão às vezes permite que você use←
sem umM
que salvaria um byte aqui, ou isso é um bug?M
são intencionais (mas lembre-se sempre uma direção com uma variável depois é uma cópia direcional)Move
tente o melhor deverbosifying (agora também remove mais separadores desnecessários, para que você possa adicionar as vírgulas se desejar)