Publication sandbox (supprimée)
Les anciennes formations de l'armée romaine sont très célèbres dans le monde entier. Dans ces formations, des légionnaires romains regroupés sous une forme géométrique (généralement un rectangle) protégeant les flancs et la partie supérieure de celui-ci à l'aide de leurs boucliers. Les légionnaires aux positions intérieures couvraient la partie supérieure en plaçant leur bouclier au-dessus de leur tête, les légionnaires sur les flancs portaient 2 boucliers ou plus: un pour protéger la partie supérieure et un ou plusieurs boucliers pour protéger les flancs (si quelqu'un était dans le coin) il avait 3 boucliers, si quelqu'un était seul dans une formation, il avait 5 boucliers Oui, je sais qu'il est impossible pour un humain de porter 5 boucliers, mais ils l'ont fait d'une manière ou d'une autre ). En utilisant cette formation, tous les légionnaires romains se protégeaient et étaient l'adversaire le plus dur à l'époque.
L'histoire raconte qu'il y avait un général romain qui a déclaré que la meilleure forme de formation était le carré (même nombre de légionnaires en rangées et en colonnes). Le problème était de savoir combien de formations (et la taille) il devrait diviser son armée afin de:
- Ne laissez aucun légionnaire hors d'une formation (bien qu'il ait admis une formation de légionnaire unique)
- Réduisez la quantité de boucliers requis
Le général, après avoir fait quelques calculs et calculs, il a compris que la meilleure façon d'accomplir ces 2 conditions est de commencer avec le plus grand carré possible, puis de répéter jusqu'à ce qu'il ne reste plus de légionnaires .
Exemple:
Si 35 légionnaires de son armée, la formation consistait à
- Une place des légionnaires 5x5 (c'est la plus grande place possible).
Avec les légionnaires restants (10)
- Un carré 3x3
Avec les légionnaires restants (1)
- Un carré 1x1.
À la fin, cela ressemblera à ceci:
5x5
* * * * * 3x3
* * * * * * * * 1x1
* * * * * * * * *
* * * * * * * *
* * * * *
Les légionnaires en position intérieure couvraient la partie supérieure en plaçant leur bouclier au-dessus de leurs têtes . Ils n'avaient besoin que d'un bouclier.
* * * * *
* 1 1 1 * * * *
* 1 1 1 * * 1 * *
* 1 1 1 * * * *
* * * * *
Les légionnaires aux flancs portaient 2
* 2 2 2 *
2 1 1 1 2 * 2 *
2 1 1 1 2 2 1 2 *
2 1 1 1 2 * 2 *
* 2 2 2 *
Si quelqu'un était dans le coin, il avait 3 boucliers
3 2 2 2 3
2 1 1 1 2 3 2 3
2 1 1 1 2 2 1 2 *
2 1 1 1 2 3 2 3
3 2 2 2 3
Si quelqu'un était seul dans une formation, il avait 5 boucliers
3 2 2 2 3
2 1 1 1 2 3 2 3
2 1 1 1 2 2 1 2 5
2 1 1 1 2 3 2 3
3 2 2 2 3
Cette formation a nécessité un total de 71 boucliers.
Défi
- Calculez la quantité de boucliers nécessaires pour un nombre X de légionnaires
Contribution
- Nombre de légionnaires dans l'armée
Sortie
- Quantité de boucliers nécessaires.
Cas de test
35 => 71
20 => 44
10 => 26
32 => 72
- Les règles de code-golf standard s'appliquent
Amazon.com : Best-selling Nipple Shield Carrying Case, Perfect...
donc je suppose que je ne le saurai jamais vraiment. Portaient-ils en fait 5 boucliers - ou était-ce pour que la question fonctionne: P?Réponses:
Python 2 ,
605048 octetsEssayez-le en ligne!
Nouveau au golf de code, mais en lui donnant mon meilleur swing!
Méthode:
Additionnez
n^2 + 4n
oùn
est chacun des plus grands nombres carrés qui additionnent à l'entrée.Modifier 1
Réduit à 50 octets grâce à @Jonathan Frech!
Modifier 2
Passé
int(s**.5)
às**.5//1
économiser 2 octets grâce à @ovsla source
n*n
c'est plus court quen**2
de vous faire économiser deux octets; plus que je ne peux pas dire puisque je n'écris pas de python ...int(s**.5)
peut être raccourcis**.5//1
.//
est la division du plancher dans Python 2 et 3. est3**.5//1
évaluée1.0
dans les deux versions.R ,
5150 octetsEssayez-le en ligne!
Un carré de longueur latérale doit avoir exactement des écrans y 2 + 4 y . Nous réduisons par le plus grand carré inférieur ou égal à x jusqu'à ce que x soit nul, accumulant le nombre de boucliers au fur et à mesure.y y2+4y x x
Preuve:
la source
JavaScript (ES7), 34 octets
Essayez-le en ligne!
Comment?
La formule vaut pour , comme .s 1 = 5w=1 s1=5
la source
Gelée , 13 octets
Essayez-le en ligne!
-1 merci à Jonathan Allan .
la source
Julia 0,6 , 36 octets
Essayez-le en ligne!
Utilise la même méthode que la réponse R de @ Giuseppe, bien que ma méthode pour y arriver impliquait une réflexion moins significative et une inspection visuelle plus juste: le carré intérieur de 1s a des dimensions par , ce qui a boucliers. Autour de cela, il y a 4 murs de soldats chacun, chacun avec 2 boucliers - ce qui ajoute boucliers. Enfin, il y a quatre 3 aux quatre coins, ce qui ajoute 12 boucliers.n2+4n (n−2) (n−2) (n−2)2 n−2 4∗(n−2)∗2
Non golfé:
(Cela peut également être fait en 35 octets avec
n>0?(s=isqrt(n))*s+4s+f(n-s*s):0
, mais j'ai écrit cela pour Julia 0.7 voulait éviter les nouveaux avertissements de dépréciation (les espaces exigeant sont?
et:
).)la source
Stax , 15 octets
Exécuter et déboguer
la source
Brachylog , 26 octets
Essayez-le en ligne!
la source
Retina 0.8.2 , 28 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Convertissez en décimal.
Faites correspondre les nombres impairs. Le premier passage dans le groupe
\1
n'existe pas encore, donc seul\G1
peut correspondre, ce qui correspond à 1. Les correspondances suivantes ne peuvent pas correspondre\G1
car\G
seules les correspondances au début du match, donc à la place nous devons faire correspondre ce11\1
qui est 2 de plus que le match précédent. Nous faisons correspondre autant de nombres impairs que possible, et la correspondance totale est donc un nombre carré, tandis que la dernière capture est inférieure à deux fois son côté.Ajoutez les protections latérales à chaque match.n2 2n−1 n2+4n=n2+2+2(2n−1)
$&
est et est alors que nous avons besoin de .$1
Additionnez et convertissez en décimal.
la source
05AB1E , 17 octets
Essayez-le en ligne ou vérifiez tous les cas de test .
Contournement parce que
ΔDtïÐns4*+Šn-}O
( 15 octets ) ne semble pas fonctionner. Essayez-le en ligne en mode débogage pour voir ce que je veux dire. Je m'attendrais à ce qu'il passe de[45,'35',25]
à[45,10]
après l'-
itération suivante et suivanteΔ
, mais apparemment, il efface la pile à l'exception de la dernière valeur et devient[10]
, ce qui entraîne 0 à la fin .. Je ne sais pas si c'est un comportement prévu ou un bogue .. (EDIT: C'est prévu, voir en bas.)Explication:
Utilise également où est la largeur d'une boucle comme la plupart des autres réponses.ww2+4w w
EDIT: Apparemment, le comportement que j'ai décrit ci-dessus
Δ
est destiné. Voici deux alternatives de 17 octets fournies par @ Mr.Xcoder qui utilisentΔ
en mettant des valeurs dans le global_array (avec^
) et en les récupérant ensuite (avec¯
):Essayez-le en ligne ou vérifiez tous les cas de test .
Essayez-le en ligne ou vérifiez tous les cas de test .
la source
dc , 25 octets
Essayez-le en ligne!
Calcule les boucliers comme
sum(n^2)
(le nombre d'origine) plus4*sum(n)
en poussant une copie de chaque longueur de côté carré dans le registre de pile aua
fur et à mesure, puis en ajoutant toutes les valeurs du registrea
comme la récursion "se déroule".la source
Husk , 17 octets
Essayez-le en ligne!
Alternative
Essayez-le en ligne!
la source
APL (Dyalog Unicode) ,
3130 octetsEssayez-le en ligne!
-1 octet grâce à @jslip
la source
Rubis , 45 octets
Essayez-le en ligne!
la source
PHP , 67 octets
Pour l'exécuter:
Exemple:
Ou essayez-le en ligne!
En utilisant l'
-R
option, cette version fait 60 octets :Exemple:
(sous Linux, remplacer
"
par'
)Remarque: Ceci utilise la grande formule de réponse d'Arnauld , je n'ai pas pu trouver quelque chose de plus court que cela.
la source
Pyth , 19 octets
Une fonction récursive, qui devrait être appelée en utilisant
y
(voir le lien).Essayez-le ici!
Pyth , 21 octets
L'historique des révisions est assez drôle, mais assurez-vous de le visiter si vous voulez une version beaucoup plus rapide :)
Essayez-le ici!
Explication
la source
Swift 4 ,
111 99 8478 octetsEssayez-le en ligne!
Cette sensation lors de l'implémentation manuelle de la racine carrée entière est beaucoup plus courte que celle intégrée ...
Non golfé et expliqué
la source