introduction
La carte de Baker est un système dynamique important qui présente un comportement chaotique. C'est une fonction du carré unitaire à elle-même définie intuitivement comme suit.
- Coupez le carré verticalement en deux, ce qui donne deux rectangles de taille
0.5×1
. - Empilez la moitié droite en haut à gauche, ce qui donne un rectangle de taille
0.5×2
- Compressez le rectangle en un
1×1
carré.
Dans ce défi, vous allez implémenter une version discrète de cette transformation.
Entrée et sortie
Votre entrée est un tableau 2D de caractères ASCII imprimables et des espaces de taille 2m×2n
pour certains m, n > 0
. Votre sortie est un tableau similaire obtenu comme suit, en utilisant le 6×4
tableau
ABCDEF
GHIJKL
MNOPQR
STUVWX
par exemple. Tout d'abord, empilez la moitié droite du tableau en haut de la moitié gauche:
DEF
JKL
PQR
VWX
ABC
GHI
MNO
STU
Ensuite, divisez les colonnes en paires de caractères et tournez indépendamment chaque paire de 90 degrés dans le sens des aiguilles d'une montre, en "compressant" le grand rectangle à sa forme d'origine:
JDKELF
VPWQXR
GAHBIC
SMTNUO
Il s'agit de la sortie correcte pour le tableau ci-dessus.
Règles
Les formats d'entrée et de sortie sont flexibles. Vous pouvez utiliser des chaînes délimitées par des sauts de ligne, des listes de chaînes ou des tableaux 2D de caractères. Cependant, l'entrée et la sortie doivent avoir exactement le même format: vous devez pouvoir répéter votre soumission un nombre arbitraire de fois sur n'importe quelle entrée valide.
Vous pouvez écrire soit un programme complet soit une fonction. Le nombre d'octets le plus bas gagne et les failles standard sont interdites.
Cas de test
Input:
12
34
Output:
42
31
Input:
Hell
! o
d -
lroW
Output:
lol
o W-
!H e
ldr
Input:
ABCDEF
GHIJKL
MNOPQR
STUVWX
Output:
JDKELF
VPWQXR
GAHBIC
SMTNUO
Input:
*___ ___ o
o|__) |__) *
*| | o
o __ __ *
*| | _ o
o|__ |__| *
Output:
|_____) *o
|_ _ *o
||_ __| *o
o*|_____)
o* |_ _
o*||_ _
c2k
au lieu deck/lk2
.c2k
divise la chaîne en deux parties égales.Julia, 136 octets
Une implémentation très simple. Pas une entrée particulièrement compétitive, mais c'était amusant!
Cela crée une fonction lambda qui accepte un tableau à 2 dimensions en entrée et renvoie un tableau à 2 dimensions transformé.
Non golfé + explication:
Pour l'appeler, donnez un nom à la fonction, par exemple
f=A->(...)
.Exemple de sortie:
Et preuve qu'il peut être enchaîné arbitrairement:
Les suggestions sont les bienvenues comme toujours, et je me ferai un plaisir de vous fournir d'autres explications.
la source
CJam,
2524 octetsImplémentation simple des spécifications. Explication:
Essayez-le en ligne ici
la source
JavaScript (ES6), 104
141Edit En examinant la spécification, j'ai trouvé que le nombre de lignes doit être pair (j'ai manqué cela auparavant). Il n'est donc pas trop compliqué de trouver la position source correcte pour chaque caractère en sortie en une seule étape.
Tester dans la console Firefox / FireBug
Production
la source
J,
4539 octetsJ a une fonction de pavage (coupe
;.
) qui aide beaucoup.la source
Haskell,
128127 octetsUtilisation:
f ["12", "34"]
->["42","31"]
Comment ça fonctionne:
Edit: @Zgarb a trouvé un octet à enregistrer.
la source
g x=x
pour le cas de liste vide.GNU sed -r, 179 octets
Le score inclut +1 pour l'
-r
arg à sed.Il m'a fallu un certain temps pour comprendre comment procéder
sed
, mais je pense que je l'ai maintenant:Notez que tous les espaces ci-dessus doivent être des tabcaractères simples . Les commentaires ne sont pas inclus dans le score de golf.
Notez également que cela utilise largement les
:
caractères marqueurs. Si le flux d'entrée contient:
, un comportement indéfini s'ensuivra. Ceci peut être atténué en remplaçant tous:
par un caractère non imprimable (par exemple BEL) sans frais pour le score de golf.L'entrée et la sortie sont une liste de chaînes séparées par des tabulations:
la source
J,
3332 caractèresUn verbe monadique.
Explication
Commençons par définir
Y
comme étant notre exemple d'entrée.La première partie (
-:@#@{. (}. ,. {.) |:
) se diviseY
en deux et ajoute puis se termine:Dans la deuxième partie (
_2 |.\"1
), nous divisons cela en paires de deux et les inversons:Enfin (
0 2 ,.@|:
), nous transposons la matrice au besoin et éliminons l'axe de fuite:L'expression entière avec un espace inséré:
Et comme verbe explicite:
la source