Le paradoxe de Banach – Tarski stipule que, étant donné une balle dans un espace tridimensionnel, vous pouvez décomposer la balle en un nombre fini de sous-ensembles de points. Ces ensembles de points disjoints peuvent ensuite être réassemblés pour produire deux copies de la balle initiale. Vous auriez alors, théoriquement, deux boules identiques.
Le processus de réassemblage consiste à déplacer uniquement les sous-ensembles de points susmentionnés et à les faire pivoter, sans modifier leur forme spatiale. Cela peut être fait avec seulement cinq sous-ensembles disjoints.
Les ensembles disjoints n'ont par définition aucun élément commun. Où A
et B
sont deux sous-ensembles de points de la balle initiale, les éléments communs entre A
et B
sont un ensemble vide. Ceci est illustré dans l'équation suivante.
Pour les ensembles disjoints ci-dessous, les membres communs forment un ensemble vide.
Le défi
Écrivez un programme qui peut prendre une "boule" ASCII en entrée et sortir une "boule" en double.
Contribution
Voici un exemple de boule d'entrée:
##########
###@%$*.&.%%!###
##!$,%&?,?*?.*@!##
##&**!,$%$@@?@*@&&##
#@&$?@!%$*%,.?@?.@&@,#
#,..,.$&*?!$$@%%,**&&#
##.!?@*.%?!*&$!%&?##
##!&?$?&.!,?!&!%##
###,@$*&@*,%*###
##########
Chaque sphère est décrite par le signe dièse ( #
) et rempli avec l' une des thèses caractères: .,?*&$@!%
. Chaque entrée sera de 22x10 caractères (largeur par hauteur).
Création d'un doublon
Tout d'abord, chaque point à l'intérieur de la balle reçoit un point numéroté en fonction de son index dans .,?*&$@!%
. Voici l'exemple ci-dessus, une fois numéroté:
##########
###7964151998###
##86295323431478##
##5448269677374755##
#75637896492137317572#
#21121654386679924455#
##1837419384568953##
##85363518238589##
###2764574294###
##########
Ensuite, chaque point est décalé d'un (neuf contre un):
##########
###8175262119###
##97316434542589##
##6559371788485866##
#86748917513248428683#
#32232765497781135566#
##2948521495679164##
##96474629349691##
###3875685315###
##########
Enfin, chaque nouvelle valeur de point est reconvertie en son caractère correspondant:
##########
###!.@&,$,..%###
##%@?.$*?*&*,&!%##
##$&&%?@.@!!*!&!$$##
#!$@*!%.@&.?,*!*,!$!?#
#?,,?,@$&*%@@!..?&&$$#
##,%*!&,.*%&$@%.$*##
##%$*@*$,%?*%$%.##
###?!@&$!&?.&###
##########
Production
Ces deux boules sont ensuite sorties côte à côte, sous cette forme (séparées par quatre espaces aux équateurs):
########## ##########
###@%$*.&.%%!### ###!.@&,$,..%###
##!$,%&?,?*?.*@!## ##%@?.$*?*&*,&!%##
##&**!,$%$@@?@*@&&## ##$&&%?@.@!!*!&!$$##
#@&$?@!%$*%,.?@?.@&@,# #!$@*!%.@&.?,*!*,!$!?#
#,..,.$&*?!$$@%%,**&&# #?,,?,@$&*%@@!..?&&$$#
##.!?@*.%?!*&$!%&?## ##,%*!&,.*%&$@%.$*##
##!&?$?&.!,?!&!%## ##%$*@*$,%?*%$%.##
###,@$*&@*,%*### ###?!@&$!&?.&###
########## ##########
Remarque: Le décalage des valeurs des points et des caractères ultérieurs est symbolique des rotations effectuées pour réassembler les sous-ensembles de points (regroupements de caractères).
Réponses:
Pyth, 21 octets
Essayez-le en ligne: Démonstration
Enfin un cas d'utilisation pour
.r
.Explication
La boucle infinie se casse, lorsqu'il n'y a plus d'entrée disponible.
la source
Rubis, 65
Fonctionne très bien lorsque l'entrée provient d'un fichier au lieu de stdin:
D'un autre côté, si vous aimez taper des boules pour stdin manuellement et que vous voulez la sortie à la fin, essayez cette version de 67 octets:
la source
Matlab, 120
Matlab n'est pas le meilleur langage pour gérer les chaînes.
\n
est toujours considéré comme deux caractères, ce qui est assez ennuyeux, et vous ne pouvez pas simplement créer une matrice à partir d'une chaîne à saut de ligne (ligne cassée?), vous devez le faire manuellement. Au moins, je n'ai pas eu à me soucier de la taille / du rembourrage car chaque ligne a exactement la même longueur.Exemple d'entrée:
Exemple de sortie:
PS: Si je peux assumer l'entrée de cette façon:
Je n'ai besoin que de 88 caractères:
la source
Rubis, 102
Fondamentalement, c'est juste appeler
tr
l'entréela source
sed (39 octets)
la source
CJam, 28 octets
Essayez-le en ligne
Explication:
la source
Python 3.5,
968988 octetsPython 3.3,
1039695 octetsExplication
Python 3.3 et 3.5 sont répertoriés séparément car la façon dont
input()
les nouvelles lignes sont traitées dans IDLE a changé. Cela s'est produit pour économiser 8 octets, ce qui est cool.Remarque sur l'exécution: utilisez IDLE. Si vous utilisez un terminal, alors la solution pour 3.3 est la même que 3.5, mais les deux entrelacent l'entrée avec la sortie.
J'ai inversé la chaîne de symboles
s
pour profiter de l'indexation négative de Python. Ensuite, pour chaque ligne de l'entrée, je la renvoie, deux espaces, et la ligne avec chaque symbole remplacé par son symbole précédent. La raison pour laquelle je ne mets que deux espaces est que j'ai utilisé à la,
place de+
, ce qui ajoute un espace à la sortie imprimée. Cela (,' ',
) m'a sauvé un octet+' '*4+
.Merci à xsot de m'avoir sauvé
78 octets. J'ai changés.find
pours.rfind
me permettre de mettre les espaces et les hachages dedanss
, supprimant ainsi la nécessité de vérifiery in s
. De plus, un espace a été économisé. EDIT: changé en arrières.find
car la présence de##
now me permet de ne pas me+1
soucier d'une erreur d'index hors limites.la source
input()
changé? Je ne trouve aucune différence entre la documentation 3.4 et 3.5 .Rétine ,
4539 octetsPour exécuter le code à partir d'un seul fichier, utilisez l'
-s
indicateur.La première étape duplique chaque ligne, séparée par
" ; "
, pour obtenirEnsuite, la deuxième étape n'affecte que les caractères qui se trouvent dans les correspondances de
;.*
, c'est-à-dire uniquement la seconde moitié de chaque ligne. Ces caractères sont ensuite translittérés via la correspondance suivanteLorsque les 9 premières paires "incrémentent" les personnages de la balle et la dernière paire transforme le point-virgule en un autre espace.
la source
Python 2, 77 octets
la source
Perl, 59 octets
Code de 56 octets plus 3 octets
-p
car il doit être enregistré dans un fichier.Exemple d'utilisation:
la source
05AB1E (hérité) , 21 octets
Utilise la version héritée de 05AB1E, car il était possible d'utiliser le filtre
ʒ
avec implicitey
comme foreach pour imprimer, alors qu'avec la nouvelle version, la boucle réelle pour chaquev
avec explicitey
devrait être utilisée, ce qui fait 1 octet de plus.Essayez-le en ligne.
Explication:
Voici une version qui fonctionne également dans la nouvelle version de 05AB1E (crédit à @Grimy ):
05AB1E , 21 octets
Essayez-le en ligne.
Explication:
la source
TFD?4ú".,?*&$@!%"DÀ‡,
(l'entrée est garantie à exactement 10 lignes).₂j
c'est une bonne alternative (bien que même octet) pour4ú
, car la largeur est garantie à 26 caractères. :)