Golf um gerador de diagrama de Venn
Para comemorar adequadamente o 180º aniversário de John Venn , hoje sua tarefa será criar um programa que produza um diagrama de Venn !
Entrada:
Um número inteiro positivo N
que definirá o intervalo de números que aparece no diagrama (de zero a N
) e três conjuntos de números positivos.
Saída:
Um diagrama de Venn de 3 conjuntos mostrando todos os números inteiros de 0 a N
e os relacionamentos dos conjuntos, exibindo-os nas regiões apropriadas do diagrama, semelhantes a este .
Notas
- Use
stdin
(ou qualquer que seja o equivalente do seu idioma) para obter os valores. - Você pode definir o formato de entrada para os conjuntos e para
N
(Separado por vírgula, barra ou o que for melhor para você). - Os números que não aparecem em nenhum dos conjuntos, mas estão dentro do intervalo especificado, devem aparecer no diagrama, mas não dentro de nenhuma região.
- Os conjuntos não precisam ser nomeados.
- A saída pode ser um desenho ou ascii-art.
- O diagrama pode ter qualquer forma, desde que os limites sejam inequivocamente distinguíveis (se você escolher a arte ASCII, usar + (ou similar) para cruzar os limites é essencial, por exemplo).
- As regiões podem, mas não precisam ser sombreadas.
- Quaisquer funções internas ou bibliotecas de terceiros que geram diagramas de Venn não são permitidas.
- Aplicam-se brechas padrão .
Isso é código-golfe , então o código mais curto, em bytes, vence.
code-golf
graphical-output
set-theory
William Barbosa
fonte
fonte
Respostas:
Mathematica
343264UnGolfed
Assumindo que
10
foi entradam
e{{1,2,3,4,5,9},{1,2,3,6,8},{7,2,9}}
foi entrada parad
,Golfe 264
Fiquei surpreso que todo o cálculo pudesse ser realizado dentro da
Graphics
própria função. Com exceção das entradas, é uma linha.fonte
RandomSample
para escolher o local?Circles
, para que os discos cinza acabem. A maior parte da economia advém do fato de todos os membros de uma região estarem plotados no centro dessa região.Ruby,
654590566542505 bytesIsso foi divertido. Eu usei ASCII. Ainda não consegui testar todas as combinações possíveis; por isso, se você encontrar um caso de teste com falha, informe-me.
Espera a entrada em STDIN no seguinte formato
E então te recompensará com essa beleza
Eu não acho que posso me incomodar em adicionar uma versão não destruída. Veja a versão original no histórico de edições para obter uma versão um pouco mais legível.
Isso certamente poderia ser ainda mais aprimorado, tornando os limites definidos menos rígidos ou até mantendo-os fixos, como alguns gráficos, mas eu prefiro que pareça agradável e seja feito "corretamente", apesar de ser jogado.
fonte
BBC BASIC, 243 caracteres ASCII (tamanho do arquivo tokenizado 211 bytes)
Faça o download do emulador em http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Golfe
O BBC Basic é muito arbitrário sobre quais novas linhas / espaços em branco você pode eliminar. Além de remover novas linhas desnecessárias, há outro truque aqui que não está na versão não destruída: eu atribuo a janela de visualização (veja a explicação abaixo em comentários não destruídos) no final do ciclo de plotagem, não no começo. Isso significa que os elementos fora do conjunto são plotados no canto superior esquerdo e o cursor está preso em uma viewport no canto superior direito no final do programa. A razão para isso é eliminar o
VDU26
.Ungolfed
Cada conjunto de números é encerrado pelo usuário digitando o número N + 1 (uma escolha um pouco incomum, para evitar erros causados pela tentativa de escrever fora do intervalo de uma matriz.) Em seguida, passa de um modo de texto para um modo gráfico. e plota o diagrama de Venn.
Os dados de entrada são armazenados em uma matriz, uma célula para cada valor a ser exibido. Os dados são armazenados como um valor de 3 bits: 1 para o Set0 + 2 para o Set1 + 4 para o Set2, fornecendo um número no intervalo de 0 a 7. O BBC basic não tem operador de turno, portanto, o operador de energia é usado: em
2^i
vez de1<<i
em C por exemplo.Após plotar os círculos, um loop externo passa por cada uma das oito regiões, movendo-se para as coordenadas necessárias (conforme uma tabela de dados.) Um loop interno imprime todos os números nessa região (aqueles com o valor de 3 bits correspondente no array.)
Montagem de entrada e saída típicas (versão não destruída)
Na versão golfed, a posição dos números fora dos sets é trocada com o prompt de comando
>
.fonte
Javascript 1235
http://jsfiddle.net/44a4L/7/
Testado no google chrome v36.
A entrada é obtida nas variáveis upper, set1, set2 e set3.
Atualização: agora é dimensionado automaticamente, dependendo do tamanho da entrada.
Saída de amostra:
fonte
Python - 603
A entrada é N seguida pelos três conjuntos, separados por vírgulas (por exemplo
8, {1,2,4}, {2,3,4,5}, {4,6,8}
). Ele gera um conjunto na arte ACSII como o seguinte:fonte
HTML + JavaScript (E6)
752775Formato de entrada: max set1 set2 set3 (cada conjunto é uma lista de números separados por vírgula)
Exemplo: 10 1,2,3,4,5,9 1,2,3,6,8 7,2,9
Exemplo 2: 30 2,4,6,8,10,12,14,16,18,30 3,6,9,12,15,18,21,30 5,10,15,20,25,30
Todas as seções são dimensionadas automaticamente, graças à renderização em html.
Versão Javascript E5 Funciona no Chrome e MSIE 10 (talvez 9)
Não (tão) jogou golfe
fonte
Python 3-353
Mais alguém brincou com o Logo quando criança?
Amostra:
python3 turtletest.py 15 1,2,3,4,5,9,10,12 1,3,4,6,7,9 1,2,7,8,9
fonte
perl
388b346b488bIsso tem uma saída semelhante a outra entrada:
Teste de execução e saída:
fonte
T-SQL 2095
Supõe que @N é um int contendo N. Supõe que @A, @B e @C são tabelas que contêm os três conjuntos de números. Não tentei jogar golfe demais.
Versão menos golfe:
fonte