Das Banach-Tarski-Paradoxon besagt, dass Sie bei einer Kugel im dreidimensionalen Raum die Kugel in eine endliche Anzahl von Punkt-Teilmengen zerlegen können. Diese nicht zusammenhängenden Punktmengen können dann wieder zusammengesetzt werden, um zwei Kopien der ursprünglichen Kugel zu erzeugen. Sie hätten dann theoretisch zwei identische Bälle.
Der Vorgang des Zusammenbaus besteht darin, nur die oben genannten Punkt-Teilmengen zu verschieben und sie zu drehen, ohne ihre räumliche Form zu ändern. Dies kann mit nur fünf disjunkten Teilmengen erfolgen.
Disjunkte Mengen haben definitionsgemäß keine gemeinsamen Elemente. Wo A
und B
sind zwei beliebige Punkt-Teilmengen der ursprünglichen Kugel, die gemeinsamen Elemente zwischen A
und B
ist eine leere Menge. Dies wird in der folgenden Gleichung gezeigt.
Für die disjunkten Mengen unten bilden die gemeinsamen Mitglieder eine leere Menge.
Die Herausforderung
Schreiben Sie ein Programm, das eine Eingabe-ASCII- "Kugel" und eine doppelte "Kugel" ausgeben kann.
Eingang
Hier ist ein Beispiel für eine Eingabekugel:
##########
###@%$*.&.%%!###
##!$,%&?,?*?.*@!##
##&**!,$%$@@?@*@&&##
#@&$?@!%$*%,.?@?.@&@,#
#,..,.$&*?!$$@%%,**&&#
##.!?@*.%?!*&$!%&?##
##!&?$?&.!,?!&!%##
###,@$*&@*,%*###
##########
Jede Kugel wird durch Rauten umrissenen ( #
) und mit einem der These Zeichen gefüllt: .,?*&$@!%
. Jede Eingabe besteht aus 22x10 Zeichen (Breite nach Höhe).
Ein Duplikat erstellen
Zunächst erhält jeder Punkt innerhalb des Balls einen nummerierten Punkt basierend auf seinem Index in .,?*&$@!%
. Hier ist das obige Beispiel, einmal nummeriert:
##########
###7964151998###
##86295323431478##
##5448269677374755##
#75637896492137317572#
#21121654386679924455#
##1837419384568953##
##85363518238589##
###2764574294###
##########
Dann wird jeder Punkt um eins nach oben verschoben (neun geht zu eins):
##########
###8175262119###
##97316434542589##
##6559371788485866##
#86748917513248428683#
#32232765497781135566#
##2948521495679164##
##96474629349691##
###3875685315###
##########
Schließlich wird jeder neue Punktwert wieder in das entsprechende Zeichen umgewandelt:
##########
###!.@&,$,..%###
##%@?.$*?*&*,&!%##
##$&&%?@.@!!*!&!$$##
#!$@*!%.@&.?,*!*,!$!?#
#?,,?,@$&*%@@!..?&&$$#
##,%*!&,.*%&$@%.$*##
##%$*@*$,%?*%$%.##
###?!@&$!&?.&###
##########
Ausgabe
Diese beiden Bälle werden dann in dieser Form nebeneinander ausgegeben (durch vier Leerzeichen an den Äquatoren getrennt):
########## ##########
###@%$*.&.%%!### ###!.@&,$,..%###
##!$,%&?,?*?.*@!## ##%@?.$*?*&*,&!%##
##&**!,$%$@@?@*@&&## ##$&&%?@.@!!*!&!$$##
#@&$?@!%$*%,.?@?.@&@,# #!$@*!%.@&.?,*!*,!$!?#
#,..,.$&*?!$$@%%,**&&# #?,,?,@$&*%@@!..?&&$$#
##.!?@*.%?!*&$!%&?## ##,%*!&,.*%&$@%.$*##
##!&?$?&.!,?!&!%## ##%$*@*$,%?*%$%.##
###,@$*&@*,%*### ###?!@&$!&?.&###
########## ##########
Hinweis: Das Verschieben der Punktwerte und späterer Zeichen ist ein Symbol für die Rotationen, die ausgeführt werden, um die Punktteilmengen (Zeichengruppierungen) wieder zusammenzusetzen.