introduction
Hier, j'ai vu un puzzle d'anniversaire . Félicitations!!
Cette semaine également, j'ai regardé un épisode de l'émission télévisée Bones où un cadavre a été retrouvé enterré sous un arbre. Pour calculer l'heure de la mort, ils ont compté les cernes des arbres.
Les cernes se forment parce que les arbres poussent plus lentement en hiver et plus rapidement en été. Ainsi, vous pouvez calculer l'âge de l'arbre en comptant les anneaux. Vous pouvez également voir des événements naturels comme les saisons pluvieuses ou sèches.
Défi
Étant donné un entier n >= 1
en entrée, écrivez un programme complet pour sortir les anneaux d'âge de l'arbre.
Parce que les anneaux peuvent changer de forme, utilisez trois caractères différents ('0', '*', '+') pour montrer les cycles climatiques.
Âge 1
0
2 ans
***
*0*
***
3 ans
+++++
+***+
+*0*+
+***+
+++++
4 ans
0000000
0+++++0
0+***+0
0+*0*+0
0+***+0
0+++++0
0000000
La taille de l'arbre est un carré de côtés 2*n - 1
Gagnant
Le code le plus court en octets gagne.
('0', '*', '+')
donc 5 ans est*
Réponses:
K5,
2730262522 octetsCette approche "enveloppe" itérativement un noyau (en commençant par
"0"
) sur les quatre côtés en utilisant un autre caractère ({4(|+y,)/x}
). La séquence des emballages saisonniers est déterminée par une3!
séquence modulo 3 ( ). C'est un peu compliqué de faire en sorte que le scénario de base soit parfaitement aligné.modifier:
Cette alternative construit le tableau rectangulaire entier à la fois à partir de la plage exclusive fournie (
!
) inversée et jointe à elle-même après avoir déposé un élément (t,1_|t:|
). Nous prenons ensuite le produit cartésien maximum (u|\:u:
), prenons l'ensemble de la matrice modulo 3 (3!
) et indexons dans le tableau de caractères.En action:
la source
BBC Basic, 93 octets
Les mots-clés abrégés aident beaucoup ici. À la ligne 2, j'utilise la
VDU
commande (équivalente aux Cputchar()
) pour imprimer chaque caractère. C'est beaucoup plus efficace queP.MID$("0*+",p MOD3+1,1)
.Ici, il fonctionne dans BeebEm3 sur un Mac:
la source
CJam, 25 octets
Testez-le ici.
Explication
la source
Matlab, 63 octets
Exemple:
la source
Python 2, 83 octets
Imprime ligne par ligne. Chaque ligne est coupée en trois parties:
Pour
n=4
:Nous générons la partie gauche en sens inverse
w
, clonons ses derniers2*i
temps de caractère , puis ajoutons la version originale sans le premier caractère.la source
Python 2, 83 octets
Si nous considérons l'arbre comme une grille de coordonnées, le symbole à
(i,j)
est déterminé parmax(abs(i),abs(j))%3
ou de manière équivalentemax(i,-i,j,-j)%3
. Pour chaque lignei
, nous joignons et imprimons les symboles de cette ligne.la source
R
deux fois, et c'est plus de 5 caractères, donc l'affectation l'emporte.Pyth, 23 octets
Essayez-le en ligne: Démonstration
Explication:
la source
MATLAB,
807873 octetsMerci Luis Mendo de m'avoir aidé à raser 5 octets!
Exemple
Non golfé et explication du code
Note mineure
bwdist
est une fonction qui fait partie de la boîte à outils de traitement d'image et ne peut être exécutée que dans MATLAB. Octave (IIRC) n'a pas encore étébwdist
implémenté, donc cela ne peut pas être exécuté dans Octave.la source
eye
et multipliez élément par élémentrot90
version 'ed' pour générer la matrice "seed":I=eye(2*input('')-1);a='0*+';a(mod(bwdist(I.*rot90(I),'chessboard'),3)+1)
Python 2, 134 octets
la source
Perl, 118 octets
Plus à faire, mais une version de base pour l'instant. Maintenant, avec une délicieuse adhérence aux spécifications supplémentaires.
Usage:
la source
Matlab 92
la source
Sed,
277252 caractères(Code de 251 caractères + option de ligne de commande de 1 caractère.)
Attend une entrée au format unaire .
Exemple d'exécution:
la source
JavaScript (ES6), 114
Utilisation de l'alerte pour la sortie - mauvaise police proportionnelle et le résultat est moche. Dans l'extrait de code ci-dessous, l'alerte est redirigée vers le corps coupé, ce qui donne un meilleur résultat. La nouvelle ligne à l'intérieur des backticks est significative et comptée.
Testez l'exécution de l'extrait dans Firefox.
la source
Test running the snippet in Firefox
mais évidemment je plaisantais, Chrome (pas de version de Chrome) n'est pas conforme à EcmaScritpt 6, il manque les=>
fonctions....
. Toujours loin d'ES6Ruby, 85 caractères
Exemple d'exécution:
la source
Moonscript - 104 octets
la source
C, 138 octets
Fonction
t
prenant un paramètre entier - l'âge.Non golfé (avec
main
fonction pour exécuter facilement celui ci-dessus):Le
stdlib.h
peut être nécessaire sur certains systèmes, car sans lui, le type de retour de la fonction non déclaréecalloc
serait par défautint
. Parce que ,int
etchar*
ne sont pas nécessairement de même taille, un pointeur non valide peut être écrit dansc
. Dans la plupart des systèmes 32 bitschar*
etint
ont la même taille, mais ce n'est pas le cas pour les systèmes 64 bits.la source