Tout hexagone ordinaire peut être carrelé de diamants, par exemple comme ça (volé à cette question ):
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
Nous considérerons ce qui précède comme un carrelage de taille 1 (puisque les côtés des diamants sont constitués d'un / ou \ chacun). Le même pavage de taille 2 ressemblerait à:
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
Votre tâche consiste à faire pivoter les carreaux de diamant d'un multiple de 60 degrés. Le pavage en losanges dans l'entrée peut être de n'importe quelle taille (et la taille n'est pas explicitement spécifiée dans l'entrée). Mais ce serait toujours un pavage valide, et tous les côtés de l'hexagone auraient la même longueur.
Voici les exemples ci-dessus tournés de 60 degrés dans le sens des aiguilles d'une montre:
______
/_/\_\_\
/\_\/_/\_\
/\/_/\_\/_/\
\/\_\/_/_/\/
\/_/\_\_\/
\_\/_/_/
____________
/ /\ \ \
/___/ \___\___\
/\ \ / /\ \
/ \___\/___/ \___\
/\ / /\ \ / /\
/ \/___/ \___\/___/ \
\ /\ \ / / /\ /
\/ \___\/___/___/ \/
\ / /\ \ \ /
\/___/ \___\___\/
\ \ / / /
\___\/___/___/
L'entrée est un entier non négatif et un pavage en losanges. Votre programme (ou fonction) doit le faire pivoter de l'entier * 60 degrés. Vous décidez de faire pivoter dans le sens horaire ou antihoraire, tant qu'il est cohérent. L'entrée et la sortie ne doivent pas avoir d'espaces de début ou de fin supplémentaires.
C'est du code-golf. Le code le plus court gagne.
Questions connexes:
la source
Réponses:
Pyth, 81 octets
Essayez-le en ligne
Tourne dans le sens antihoraire.
Chaque rotation de 60 ° est effectuée en utilisant l'algorithme suivant. Supposons que l'entrée soit un hexagone d'ordre k , donc elle a 2⋅ k + 1 lignes et 4⋅ k colonnes. Pour trouver le caractère pivoté à la ligne i de la colonne j , laissez
Ensuite, le caractère de sortie est
\
, si l'entrée a/
à la ligne ( u + 1) / 2 colonne ( v + 1) / 2; autre/
, si l'entrée a_
à la colonne u / 2 colonne v / 2 ou à la colonne u / 2 ( v + 2) / 2; autre_
, si l'entrée a la\
ligne ( u + 2) / 2 colonne v / 2 ou la ligne ( u + 1) / 2 colonne ( v - 1) / 2; autre(Nous ne comptons pas les caractères aux indices demi-entiers.)
la source
\
s, c'est juste les_
s que vous devez vérifier aux deux endroits.\
s, mais vous devrez peut-être tirer deux_
s pour chacun\
.JavaScript (ES6),
452356315 octetsOù
\n
représente le caractère de nouvelle ligne littéral. Edit: économisé 96 octets en réalisant que mon algorithme n'a pas besoin de connaître le nombre et la taille des diamants séparément, plus quelques golfs mineurs que j'ai ratés la première fois. Enregistré 41 octets en réorganisant le code afin que la destination soit toujours la même paire de caractères, plus un golf mineur que j'ai manqué lors de la conversion vers mon algorithme précédent.Afficher l'extrait de code
Explication: considère chaque paire de caractères de sortie, ce qui pourrait être
__
,/_
,_\
,/
ou\
, en vérifiant pour les caractères appropriés dans l'entrée qui mappent à ces caractères de sortie. Non golfé:la source