Créer une fonction ou un programme qui rend une grille aussi proche que possible d'un carré
- Vous recevrez un entier N en entrée, des nombres entiers (1,2,3,25, etc.)
- La sortie doit être une grille rectangulaire parfaite de N lettres aussi proche que possible d'un carré
- Le carré (wannabe) doit être composé de l'une des lettres O ou X spécifiées par l'utilisateur
Points :
- Codé en dur à seulement O ou X: +1
- Un paramètre (0/1, vrai / faux, quelque chose de similaire) pour faire pivoter la sortie (comme avec 5 ou 8): -10
- Concevez le carré (utilisez à la fois O et X dans une sorte de motif): -5
Un modèle est considéré comme valide s'il contient les deux types de caractères (où l'axe x / y> = 3) et le modèle reste le même lorsqu'il est inversé horizontalement ou verticalement (l'échange de X avec Os est autorisé)
Exemples
INPUT: 4 INPUT: 5 INPUT: 8 INPUT: 9
OO OOOOO XXXX XOX
OO XXXX OXO
or rotated 90deg XOX
Exemples non autorisés (pas la même longueur de ligne ou de colonnes)
BAD RESULT: 5a BAD RESULT: 5b BAD RESULT: 8
OOO OO OOO
OO OO OOO
O OO
Si possible, veuillez fournir un exemple en ligne.
"xo"[i]
au lieu dei
? Cela ne semble pas valoir le coup. En général, toutes vos récompenses semblent plutôt faibles.Réponses:
CJam, 16 (31 - 10 - 5)
Cela prend deux entiers sont entrés, le premier étant
0
ou1
pour la direction et le second étant le nombre deO
ouX
dans la grille.Il imprime un autre
O
etX
.Ceci est juste le corps de la fonction, pour l'essayer, ajoutez-le
l~
devant le code comme:et donner une entrée comme
pour obtenir une sortie comme
ou entrez comme
pour
Essayez-le en ligne ici
Comment ça fonctionne:
Exemple d'exécution:
la source
APL (36 - 5 - 10 = 21)
L'argument de gauche est la rotation, l'argument de droite est la taille. Il utilise également un modèle simple (il alterne simplement «X» et «O»).
Explication:
∆←,⍳2/⍵
: Générer toutes les paires possibles de nombres d'1
à⍵
et de stocker dans∆
.∆←∆[⍋|-/¨∆
...]
: trier∆
par ordre croissant dans la différence absolue des deux nombres de chaque paire et stocker le résultat dans∆
.⊃∆/⍨⍵=×/¨∆
: pour chaque paire, multipliez les nombres ensemble. Sélectionnez uniquement les paires qui se multiplient⍵
et prenez la première qui correspond (qui est la «plus carrée» en raison du tri).⍺⌽
: faire pivoter la liste des longueurs (qui comporte 2 éléments) de⍺
.'OX'⍴⍨
: créez une matrice de cette taille et remplissez-la d'alternanceO
etX
.la source
Haskell, 59 caractères
la source
CJam,
252221 (31 - 10)Il s'agit d'un corps de fonction. Si vous voulez un programme complet, ajoutez-le
riri
à l'avant. Si vous souhaitez l'utiliser comme bloc de code, entourez-le{}
. Testez-le sur cjam.aditsu.net .Il prend l'entrée comme deux arguments entiers: le commutateur pour savoir si le rectangle est vertical (toute valeur non nulle) ou horizontal (zéro), et le nombre de
O
s à utiliser.Explication
la source
JavaScript (E6) 84 (83 + 1) ou 101 (116-10-5)
Motif + rotation (paramètre f, 0 ou 1) - bonus 15
Aucun modèle, aucune rotation - pénalité 1
Test dans la console FireFox / FireBug
la source
Python,
7975 (pas de bonus)Les bonus semblent difficiles, voici donc une fonction Python assez simple:
la source
f(8)
m'a donné une colonne de 8O
s, ce qui est incorrect.>
endroit où il aurait dû y en avoir un<
. C'est réparé maintenant. Merci pour la note!Rubis, 74
Explication
Integer
.n
(l'entrée) est divisible par chaque entier de 1 àn
.n
).String#*
méthode (trop concise) pour "dessiner" le carré.la source
APL (Dyalog Unicode) , 30 - 15 = 15 octets SBCS
Infixe anonyme lambda. Prend N comme argument de droite et param comme argument de gauche. Les rectangles auront soit des rayures de X et O, soit seront quadrillés.
Essayez-le en ligne!
{
…}
"Dfn";⍺
est l'argument gauche (param),⍵
est l'argument droit ( N ):⍳⍵
ɩ ndices 1… N∘.×⍨
table de multiplication de cette⍵=
masque où N est égal à celui⍸
ɩ ndices de vraies valeurs dans le masquec←
stocker cela dansc
(pour c etidates)≢
compter les candidats.5×
une moitié multipliée par celle⌈
plafond (arrondi)⊃∘c
choisir cet élémentc
⍴∘'XO'
utiliser cela pour remodeler cycliquement "XO"⍉⍣⍺
transposer si paramla source
05AB1E (legacy) , score: 7 (22 octets - 15 bonus)
Essayez-le en ligne ou vérifiez d'autres cas de test .
Prend d'abord les entrées
N
, puis le booléen (0
/1
) s'il doit tourner ou non.Utilise la version héritée Python de 05AB1E car zip avec une liste de chaînes aplatit et joint implicitement les caractères, contrairement à la nouvelle version de réécriture Elixir de 05AB1E.
Explication:
la source
GolfScript 26 (41 - 10 - 5)
Attend que deux paramètres soient sur la pile:
0
pour normal ou1
pour transposén
valeurLe motif est que la planche est pleine de
X
s et le coin supérieur gauche est unO
. Inutile de dire que ce motif est maintenu lors de la transposition de la planche.Démo: régulière , transposée
la source
Mathematica, 71 caractères
la source
Petit ordinateur BASIC, 72 octets
la source
J , 32 octets - 15 = 17 octets
Essayez-le en ligne!
La rotation est contrôlée par un drapeau 0/1 pris comme argument de gauche
la source
Retina 0.8.2 , 66 octets + 1 octet de pénalité = 67
Essayez-le en ligne! Explication:
Convertissez l'entrée en une chaîne de
X
s.La première passe de la capture externe correspond au début de la chaîne tandis que lors des passes suivantes, la valeur précédente de la capture interne est mise en correspondance. La capture intérieure est ensuite incrémentée et mise en correspondance. Le résultat est que la quantité de chaîne consommée par la capture externe est le carré de la capture interne, qui ne peut donc pas dépasser la racine carrée de l'entrée. Pendant ce temps, la répétition suivante garantit que la capture intérieure est un facteur de la longueur de la chaîne.
Enregistrez le facteur découvert et calculez l'autre diviseur en ajoutant le nombre de répétitions suivantes.
Réorganisez les facteurs dans un rectangle.
la source
Fusain , 33 octets - 10 - 5 = 18
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Entrée
N
.Prenez la plage
0
..N
, ne gardez que les nombres dont les carrés ne sont pas inférieurs àN
et divisezN
, et prenez le minimum de ces nombres.Utilisez le facteur découvert pour produire un rectangle de la largeur et de la hauteur appropriées à l'aide d'un motif de damier. (Cela devrait être
UOη÷θηXO¶OX
pour une économie d'un octet, mais c'est un bug en ce moment.)Si la deuxième entrée est différente de zéro, faites pivoter la sortie. (Si la deuxième entrée doit être
0
ou2
est acceptable, cela peut être⟲N
pour une économie de 1 octet.)la source