O paradoxo de Banach-Tarski afirma que, dada uma bola no espaço tridimensional, você pode decompor a bola em um número finito de subconjuntos de pontos. Esses conjuntos de pontos separados podem ser remontados para produzir duas cópias da bola inicial. Você teria, teoricamente, duas bolas idênticas.
O processo de remontagem consiste apenas em mover os subconjuntos de pontos mencionados acima e girá-los, sem alterar sua forma espacial. Isso pode ser feito com apenas cinco subconjuntos separados.
Conjuntos disjuntos não têm elementos comuns por definição. Onde A
e B
existem quaisquer subconjuntos de dois pontos da bola inicial, os elementos comuns entre A
e B
é um conjunto vazio. Isso é mostrado na seguinte equação.
Para os conjuntos disjuntos abaixo, os membros comuns formam um conjunto vazio.
O desafio
Escreva um programa que possa receber uma "bola" ASCII de entrada e gerar uma "bola" duplicada.
Entrada
Aqui está um exemplo de bola de entrada:
##########
###@%$*.&.%%!###
##!$,%&?,?*?.*@!##
##&**!,$%$@@?@*@&&##
#@&$?@!%$*%,.?@?.@&@,#
#,..,.$&*?!$$@%%,**&&#
##.!?@*.%?!*&$!%&?##
##!&?$?&.!,?!&!%##
###,@$*&@*,%*###
##########
Cada esfera é delineada por sinais de libra ( #
) e encheu-se com qualquer um dos caracteres teses: .,?*&$@!%
. Cada entrada será de 22 x 10 caracteres (largura por altura).
Criando uma duplicata
Primeiro, cada ponto dentro da bola recebe um ponto numerado com base em seu índice em .,?*&$@!%
. Aqui está o exemplo acima, uma vez numerado:
##########
###7964151998###
##86295323431478##
##5448269677374755##
#75637896492137317572#
#21121654386679924455#
##1837419384568953##
##85363518238589##
###2764574294###
##########
Então, cada ponto é deslocado um (nove vai para um):
##########
###8175262119###
##97316434542589##
##6559371788485866##
#86748917513248428683#
#32232765497781135566#
##2948521495679164##
##96474629349691##
###3875685315###
##########
Finalmente, cada novo valor de ponto é convertido novamente em seu caractere correspondente:
##########
###!.@&,$,..%###
##%@?.$*?*&*,&!%##
##$&&%?@.@!!*!&!$$##
#!$@*!%.@&.?,*!*,!$!?#
#?,,?,@$&*%@@!..?&&$$#
##,%*!&,.*%&$@%.$*##
##%$*@*$,%?*%$%.##
###?!@&$!&?.&###
##########
Resultado
Essas duas bolas são produzidas lado a lado, nesta forma (separadas por quatro espaços nos equadores):
########## ##########
###@%$*.&.%%!### ###!.@&,$,..%###
##!$,%&?,?*?.*@!## ##%@?.$*?*&*,&!%##
##&**!,$%$@@?@*@&&## ##$&&%?@.@!!*!&!$$##
#@&$?@!%$*%,.?@?.@&@,# #!$@*!%.@&.?,*!*,!$!?#
#,..,.$&*?!$$@%%,**&&# #?,,?,@$&*%@@!..?&&$$#
##.!?@*.%?!*&$!%&?## ##,%*!&,.*%&$@%.$*##
##!&?$?&.!,?!&!%## ##%$*@*$,%?*%$%.##
###,@$*&@*,%*### ###?!@&$!&?.&###
########## ##########
Nota: A alteração dos valores dos pontos e dos caracteres posteriores é simbólica das rotações realizadas para remontar os subconjuntos de pontos (agrupamentos de caracteres).
Respostas:
Pitão, 21 bytes
Experimente online: Demonstração
Finalmente, um caso de uso para
.r
.Explicação
O loop infinito é interrompido quando não há mais entrada disponível.
fonte
Ruby, 65
Funciona muito bem quando a entrada é obtida de um arquivo em vez de stdin:
Por outro lado, se você gosta de digitar bolas para stdin manualmente e deseja a saída no final, tente esta versão de 67 bytes:
fonte
Matlab, 120
O Matlab não é o melhor idioma para lidar com strings.
\n
é sempre considerado como dois caracteres, o que é bastante irritante, e você não pode simplesmente criar uma matriz a partir de uma string com quebra de linha (quebra de linha?), você deve fazê-lo manualmente. Pelo menos eu não precisava me preocupar com o tamanho / estofamento, pois cada linha tem exatamente o mesmo comprimento.Exemplo de entrada:
Exemplo de saída:
PS: Se eu puder assumir a entrada desta maneira:
Eu só preciso de 88 caracteres:
fonte
Ruby, 102
Basicamente, é só chamar
tr
a entradafonte
sed (39 bytes)
fonte
CJam, 28 bytes
Experimente online
Explicação:
fonte
Python 3.5,
968988 bytesPython 3.3,
1039695 bytesExplicação
Python 3.3 e 3.5 são listados separadamente porque a maneira como as
input()
novas linhas no IDLE foram alteradas. Isso aconteceu para salvar 8 bytes, o que é legal.Nota sobre a execução: use IDLE.Se você usa um terminal, a solução para 3.3 é a mesma que 3.5, mas ambos intercalam a entrada com a saída.
Invertei a sequência de símbolos
s
para tirar proveito da indexação negativa do Python. Então, para cada linha na entrada, eu a produzo, dois espaços e a linha com cada símbolo substituída pelo símbolo anterior. O motivo de eu colocar apenas dois espaços é que usei em,
vez de+
, o que adiciona um espaço à saída impressa. Isso (,' ',
) me salvou um byte+' '*4+
.Obrigado ao xsot por me salvar
78 bytes. Mudeis.find
paras.rfind
permitir que eu colocasse os espaços e os hashess
, removendo assim a necessidade de fazer uma verificaçãoy in s
. Além disso, um espaço foi salvo. EDIT: mudou de volta para,s.find
porque a presença do##
now me permite,+1
sem me preocupar com um erro de índice fora dos limites.fonte
input()
mudou? Não encontro diferenças entre a documentação 3.4 e 3.5 .Retina ,
4539 bytesPara executar o código de um único arquivo, use o
-s
sinalizadorO primeiro estágio duplica cada linha, separada por
" ; "
, para obterO segundo estágio afeta apenas os caracteres encontrados nas correspondências de
;.*
, ou seja, apenas a segunda metade de cada linha. Esses caracteres são transliterados através da seguinte correspondênciaOnde os 9 primeiros pares "incrementam" os caracteres na bola e o último par transforma o ponto e vírgula em outro espaço.
fonte
Python 2, 77 bytes
fonte
Perl, 59 bytes
Código de 56 bytes mais 3 bytes,
-p
pois isso precisa ser salvo em um arquivo.Exemplo de uso:
fonte
05AB1E (herdado) , 21 bytes
Usa a versão herdada de 05AB1E, porque era possível usar o filtro
ʒ
com implícitoy
como foreach para imprimir, enquanto que com a nova versão o real para cada loopv
explícito com explícitoy
deve ser usado, com 1 byte a mais.Experimente online.
Explicação:
Aqui uma versão que também funciona na nova versão do 05AB1E (crédito para @Grimy ):
05AB1E , 21 bytes
Experimente online.
Explicação:
fonte
TFD?4ú".,?*&$@!%"DÀ‡,
(a entrada é garantida em exatamente 10 linhas).₂j
uma boa alternativa (embora com o mesmo byte)4ú
, já que a largura é garantida em 26 caracteres. :)