Парадокс Банаха – Тарского гласит, что, имея шар в трехмерном пространстве, вы можете разложить шар на конечное число точечных подмножеств. Эти непересекающиеся наборы точек могут затем быть повторно собраны, чтобы произвести две копии исходного шара. Тогда теоретически у вас будет два одинаковых шара.
Процесс повторной сборки состоит только в перемещении вышеупомянутых точечных подмножеств и их вращении без изменения их пространственной формы. Это можно сделать всего с пятью непересекающимися подмножествами.
Непересекающиеся множества не имеют общих элементов по определению. Где A
и B
- любые два точечных подмножества исходного шара, общие элементы между A
и B
являются пустым множеством. Это показано в следующем уравнении.
Для непересекающихся множеств ниже общие члены образуют пустое множество.
Соревнование
Напишите программу, которая может принимать входной ASCII-код «ball» и выводить дубликат «ball».
вход
Вот пример ввода мяча:
##########
###@%$*.&.%%!###
##!$,%&?,?*?.*@!##
##&**!,$%$@@?@*@&&##
#@&$?@!%$*%,.?@?.@&@,#
#,..,.$&*?!$$@%%,**&&#
##.!?@*.%?!*&$!%&?##
##!&?$?&.!,?!&!%##
###,@$*&@*,%*###
##########
Каждая сфера очерчена знаками фунта ( #
) и заполнена любой из тезисов символов: .,?*&$@!%
. Каждый ввод будет 22x10 символов (ширина по высоте).
Создание дубликата
Во-первых, каждой точке внутри шара присваивается пронумерованная точка на основе индекса в .,?*&$@!%
. Вот приведенный выше пример, когда-то пронумерованный:
##########
###7964151998###
##86295323431478##
##5448269677374755##
#75637896492137317572#
#21121654386679924455#
##1837419384568953##
##85363518238589##
###2764574294###
##########
Затем каждая точка сдвигается на одну единицу (девять переходит в одну):
##########
###8175262119###
##97316434542589##
##6559371788485866##
#86748917513248428683#
#32232765497781135566#
##2948521495679164##
##96474629349691##
###3875685315###
##########
Наконец, каждое новое значение точки преобразуется обратно в соответствующий ему символ:
##########
###!.@&,$,..%###
##%@?.$*?*&*,&!%##
##$&&%?@.@!!*!&!$$##
#!$@*!%.@&.?,*!*,!$!?#
#?,,?,@$&*%@@!..?&&$$#
##,%*!&,.*%&$@%.$*##
##%$*@*$,%?*%$%.##
###?!@&$!&?.&###
##########
Выход
Затем эти два шара выводятся бок о бок в этой форме (разделенной четырьмя пробелами на экваторах):
########## ##########
###@%$*.&.%%!### ###!.@&,$,..%###
##!$,%&?,?*?.*@!## ##%@?.$*?*&*,&!%##
##&**!,$%$@@?@*@&&## ##$&&%?@.@!!*!&!$$##
#@&$?@!%$*%,.?@?.@&@,# #!$@*!%.@&.?,*!*,!$!?#
#,..,.$&*?!$$@%%,**&&# #?,,?,@$&*%@@!..?&&$$#
##.!?@*.%?!*&$!%&?## ##,%*!&,.*%&$@%.$*##
##!&?$?&.!,?!&!%## ##%$*@*$,%?*%$%.##
###,@$*&@*,%*### ###?!@&$!&?.&###
########## ##########
Примечание. Сдвиг значений точек и более поздних символов является символом поворотов, выполняемых для повторной сборки подмножеств точек (группировок символов).
Ответы:
Pyth, 21 байт
Попробуйте онлайн: демонстрация
Наконец, вариант использования для
.r
.объяснение
Бесконечный цикл прерывается, когда больше нет доступных входных данных.
источник
Руби, 65
Прекрасно работает, когда ввод берется из файла вместо стандартного ввода:
С другой стороны, если вам нравится вводить шарики в stdin вручную, и вы хотите получить вывод в конце, попробуйте эту 67-байтовую версию:
источник
Матлаб, 120
Matlab - не самый лучший язык для обработки строк.
\n
всегда рассматривается как два символа, что довольно раздражает, и вы не можете просто сделать матрицу из строки с переносом строки (line-break?), вы должны сделать это вручную. По крайней мере, мне не нужно было заботиться о размере / заполнении, поскольку каждая строка имеет одинаковую длину.Пример ввода:
Пример вывода:
PS: если я могу предположить, что вход так:
Мне нужно всего 88 символов:
источник
Руби, 102
В основном, это просто вызов
tr
на входеисточник
sed (39 байт)
источник
CJam, 28 байт
Попробуйте онлайн
Объяснение:
источник
Python 3.5,
968988 байтPython 3.3,
1039695 байтобъяснение
Python 3.3 и 3.5 перечислены отдельно, потому что способ
input()
обрабатывает символы новой строки в IDLE изменился . Это произошло, чтобы сохранить 8 байтов, что круто.Примечание по выполнению: используйте IDLE. Если вы используете терминал, то решение для 3.3 такое же, как 3.5, но оба чередуют вход с выходом.
Я перевернул строку символов,
s
чтобы воспользоваться отрицательной индексацией Python. Затем для каждой строки на входе я вывожу ее двумя пробелами, и строка с каждым символом заменяется предыдущим символом. Причина, по которой я поставил только два пробела, заключается в том, что я использовал,
вместо+
, что добавляет пробел к выводу на печать. Это (,' ',
) спасло мне байт+' '*4+
.Спасибо xsot за спасение мне
78 байт. Я изменилs.find
на,s.rfind
чтобы разрешить мне вставлять пробелы и хэшиs
, тем самым устраняя необходимость проверкиy in s
. Плюс, место было сэкономлено. РЕДАКТИРОВАТЬ: изменил обратно,s.find
потому что наличие##
сейчас позволяет мне,+1
не беспокоясь об ошибке индекса за пределами границ.источник
input()
изменилось? Я не могу найти никаких различий между документацией 3.4 и 3.5 .Retina ,
4539 байтЧтобы запустить код из одного файла, используйте
-s
флаг.Первый этап дублирует каждую строку, разделенную
" ; "
, чтобы получитьТогда второй этап влияет только на символы, которые встречаются в совпадениях
;.*
, то есть только на вторую половину каждой строки. Эти символы затем транслитерируются через следующую корреспонденциюГде первые 9 пар «увеличивают» символы в шаре, а последняя пара превращает точку с запятой в другой пробел.
источник
Python 2, 77 байт
источник
Perl, 59 байт
56-байтовый код плюс 3 байта,
-p
поскольку это необходимо сохранить в файл.Пример использования:
источник
05AB1E (наследие) , 21 байт
Использует унаследованную версию 05AB1E, потому что можно было использовать фильтр
ʒ
с неявнымy
в качестве foreach для печати, тогда как в новой версии действительный цикл for-eachv
с явнымy
, что на 1 байт длиннее.Попробуйте онлайн.
Объяснение:
Вот версия, которая также работает в новой версии 05AB1E (кредит @Grimy ):
05AB1E , 21 байт
Попробуйте онлайн.
Объяснение:
источник
TFD?4ú".,?*&$@!%"DÀ‡,
(ввод гарантированно будет ровно 10 строк).₂j
это хорошая (хотя и тот же байт) альтернатива для4ú
, так как ширина гарантированно будет 26 символов. :)