La paradoja de Banach-Tarski establece que, dada una pelota en un espacio tridimensional, puede descomponer la pelota en un número finito de subconjuntos de puntos. Estos conjuntos de puntos disjuntos se pueden volver a montar para producir dos copias de la bola inicial. Entonces, teóricamente, tendrías dos bolas idénticas.
El proceso de reensamblaje consiste en mover solo los subconjuntos de puntos antes mencionados y rotarlos, sin cambiar su forma espacial. Esto se puede hacer con tan solo cinco subconjuntos disjuntos.
Los conjuntos disjuntos no tienen elementos comunes por definición. Donde A
y B
son dos subconjuntos de puntos de la bola inicial, los elementos comunes entre A
y B
es un conjunto vacío. Esto se muestra en la siguiente ecuación.
Para los conjuntos disjuntos a continuación, los miembros comunes forman un conjunto vacío.
El reto
Escriba un programa que pueda tomar una "bola" ASCII de entrada y generar una "bola" duplicada.
Entrada
Aquí hay un ejemplo de bola de entrada:
##########
###@%$*.&.%%!###
##!$,%&?,?*?.*@!##
##&**!,$%$@@?@*@&&##
#@&$?@!%$*%,.?@?.@&@,#
#,..,.$&*?!$$@%%,**&&#
##.!?@*.%?!*&$!%&?##
##!&?$?&.!,?!&!%##
###,@$*&@*,%*###
##########
Cada esfera se describe por signos de número ( #
) y se llena con cualquiera de las tesis caracteres: .,?*&$@!%
. Cada entrada tendrá 22x10 caracteres (ancho por alto).
Crear un duplicado
Primero, cada punto dentro de la pelota recibe un punto numerado basado en su índice .,?*&$@!%
. Aquí está el ejemplo anterior, una vez numerado:
##########
###7964151998###
##86295323431478##
##5448269677374755##
#75637896492137317572#
#21121654386679924455#
##1837419384568953##
##85363518238589##
###2764574294###
##########
Luego, cada punto se desplaza uno hacia arriba (nueve va a uno):
##########
###8175262119###
##97316434542589##
##6559371788485866##
#86748917513248428683#
#32232765497781135566#
##2948521495679164##
##96474629349691##
###3875685315###
##########
Finalmente, cada nuevo valor de punto se convierte nuevamente a su carácter correspondiente:
##########
###!.@&,$,..%###
##%@?.$*?*&*,&!%##
##$&&%?@.@!!*!&!$$##
#!$@*!%.@&.?,*!*,!$!?#
#?,,?,@$&*%@@!..?&&$$#
##,%*!&,.*%&$@%.$*##
##%$*@*$,%?*%$%.##
###?!@&$!&?.&###
##########
Salida
Estas dos bolas se emiten de lado a lado, en esta forma (separadas por cuatro espacios en los ecuadores):
########## ##########
###@%$*.&.%%!### ###!.@&,$,..%###
##!$,%&?,?*?.*@!## ##%@?.$*?*&*,&!%##
##&**!,$%$@@?@*@&&## ##$&&%?@.@!!*!&!$$##
#@&$?@!%$*%,.?@?.@&@,# #!$@*!%.@&.?,*!*,!$!?#
#,..,.$&*?!$$@%%,**&&# #?,,?,@$&*%@@!..?&&$$#
##.!?@*.%?!*&$!%&?## ##,%*!&,.*%&$@%.$*##
##!&?$?&.!,?!&!%## ##%$*@*$,%?*%$%.##
###,@$*&@*,%*### ###?!@&$!&?.&###
########## ##########
Nota: Cambiar los valores de los puntos y los caracteres posteriores es simbólico de las rotaciones realizadas para reensamblar los subconjuntos de puntos (agrupaciones de caracteres).
Respuestas:
Pyth, 21 bytes
Pruébalo en línea: demostración
Finalmente un caso de uso para
.r
.Explicación
El bucle infinito se rompe, cuando no hay más entradas disponibles.
fuente
Rubí, 65
Funciona muy bien cuando la entrada se toma de un archivo en lugar de stdin:
Por otro lado, si te gusta escribir bolas para stdin manualmente, y quieres la salida al final, prueba esta versión de 67 bytes:
fuente
Matlab, 120
Matlab no es el mejor lenguaje para manejar cadenas.
\n
siempre se considera como dos caracteres, lo cual es bastante molesto, y no puede simplemente hacer una matriz a partir de una cadena de línea interrumpida (¿línea rota?), tiene que hacerlo manualmente. Al menos no tuve que preocuparme por el tamaño / relleno ya que cada línea tiene exactamente la misma longitud.Entrada de ejemplo:
Salida de ejemplo:
PD: si puedo asumir la entrada de esta manera:
Solo necesito 88 caracteres:
fuente
Ruby, 102
Básicamente, solo está llamando
tr
a la entradafuente
sed (39 bytes)
fuente
CJam, 28 bytes
Pruébalo en línea
Explicación:
fuente
Python 3.5,
968988 bytesPython 3.3,
1039695 bytesExplicación
Python 3.3 y 3.5 se enumeran por separado porque la forma
input()
maneja las nuevas líneas en IDLE cambió. Esto sucedió para ahorrar 8 bytes, lo cual es genial.Nota sobre la ejecución: use IDLE.Si usa un terminal, entonces la solución para 3.3 es la misma que 3.5, pero ambas intercalan la entrada con la salida.
Invertí la cadena del símbolo
s
para aprovechar la indexación negativa de Python. Luego, para cada línea en la entrada, la saco, dos espacios, y la línea con cada símbolo reemplazado por su símbolo anterior. La razón por la que solo puse dos espacios es que usé en,
lugar de+
, lo que agrega un espacio a la salida impresa. Esto (,' ',
) me ahorró un byte+' '*4+
.Gracias a xsot por salvarme
78 bytes. Cambiés.find
as.rfind
para permitirme colocar los espacios y los hashess
, eliminando así la necesidad de hacer una verificacióny in s
. Además, se guardó un espacio. EDITAR: cambió de nuevo as.find
porque la presencia de##
ahora me permite+1
sin preocuparme por un error de índice fuera de límites.fuente
input()
cambió? No puedo encontrar ninguna diferencia entre la documentación 3.4 y 3.5 .Retina ,
4539 bytesPara ejecutar el código desde un solo archivo, use el
-s
bandera.La primera etapa duplica cada línea, separada por
" ; "
, para obtenerLuego, la segunda etapa solo afecta a los caracteres que se encuentran en coincidencias de
;.*
, es decir, solo la segunda mitad de cada línea. Esos caracteres se transliteran a través de la siguiente correspondenciaDonde los primeros 9 pares "incrementan" los caracteres en la bola y el último par convierte el punto y coma en otro espacio.
fuente
Python 2, 77 bytes
fuente
Perl, 59 bytes
Código de 56 bytes más 3 bytes
-p
ya que esto debe guardarse en un archivo.Ejemplo de uso:
fuente
05AB1E (heredado) , 21 bytes
Utiliza la versión heredada de 05AB1E, porque fue posible usar el filtro
ʒ
con implícitoy
como foreach para imprimir, mientras que con la nueva versión el bucle real para cada buclev
explícitoy
debe usar el , que es 1 byte más largo.Pruébalo en línea.
Explicación:
Aquí una versión que también funciona en la nueva versión de 05AB1E (crédito a @Grimy ):
05AB1E , 21 bytes
Pruébalo en línea.
Explicación:
fuente
TFD?4ú".,?*&$@!%"DÀ‡,
(la entrada está garantizada para ser exactamente 10 líneas).₂j
es una buena alternativa (aunque el mismo byte)4ú
, ya que el ancho está garantizado en 26 caracteres. :)