Alice est stagiaire dans une entreprise qui utilise Brainfuck comme langue principale pour le développement côté client et côté serveur. Alice vient d'écrire son premier code et elle est un peu nerveuse alors qu'elle se prépare pour sa première révision de code.
Alice veut que son code soit correctement formaté et joli, mais elle n'a pas le temps de lire le guide de style de code d'entreprise de 328 pages, alors elle a décidé de le formater comme un carré parfait . Hélas, la longueur du code peut être insuffisante pour former un carré, elle a donc décidé de laisser un espace rectangulaire au milieu. Les espaces doivent être parfaitement centrés et aussi proches du carré que possible.
Exemples
++++++ +++++ +++++ +++++ +++++ +++++
++++++ +++++ +++++ + ++ ++ ++ +++++
++++++ ++ ++ + + + ++ + +
++++++ +++++ +++++ +++++ ++ ++ +++++
++++++ +++++ +++++ +++++ +++++ +++++
Perfect OK Acceptable Unacceptable No way! Nope.
Écrivez un programme ou une fonction pour aider Alice. Étant donné le code d'Alice en tant que chaîne d'entrée, sortez le code correctement formaté comme décrit ci-dessous si possible. Si le formatage est impossible, sortez les emoji qui pleurent :~(
.
Il s'agit de code-golf donc les réponses sont notées en octets avec moins d'octets comme objectif.
Contraintes
- Votre programme ou fonction doit prendre une seule chaîne en entrée et produire une ou plusieurs lignes de texte (ou renvoyer une chaîne multi-lignes ou un tableau de chaînes, si vous implémentez une fonction).
- La chaîne d'entrée peut contenir tous les caractères ASCII, y compris les espaces blancs.
- Tous les espaces blancs en entrée doivent être ignorés. Ils ne doivent pas compter pour la longueur du code et ne doivent pas être utilisés en sortie.
- La chaîne d'entrée contient au moins un caractère non blanc.
- Le code formaté doit avoir les mêmes caractères non blancs dans le même ordre que dans le code d'entrée.
- Le code formaté doit être un carré parfait, c'est-à-dire que toutes les lignes doivent avoir la même longueur et le nombre de lignes doit être égal à la longueur des lignes.
- Le code formaté peut contenir un espace au milieu.
- Seuls les espaces (code ASCII 32) peuvent être utilisés dans l'espace.
- L'écart (s'il est présent) doit être rectangulaire.
- Chaque ligne de code formaté doit contenir au moins un caractère non blanc, c'est-à-dire que la largeur de l'espace doit être strictement inférieure à la largeur du carré (l'espace 5x1 est inacceptable pour le carré 5x5).
- L'écart doit être horizontal, c'est-à-dire que la largeur de l'espace doit être supérieure ou égale à la hauteur de l'espace.
- L'écart doit être parfaitement centré.
- Par conséquent, la largeur de l'espace et la parité de la hauteur doivent être identiques à la parité de la largeur carrée (par exemple, pour un espace carré de 5x5, il peut s'agir de 1x1, 3x1 ou 3x3).
- Si possible, émettez un carré sans aucun espace.
- En cas de solutions multiples, choisissez-en une avec un espace le plus proche du carré, c'est-à-dire que la différence entre la largeur et la hauteur de l'espace est minime (par exemple: l'espace 10x10 est plus préférable que 8x6 et 8x6 est plus préférable que 6x2).
- S'il y a toujours égalité, choisissez une solution avec une zone d'espace minimale (par exemple, l'espace 2x2 est plus préférable que 4x4).
- S'il est impossible de formater le code, sortez
:~(
. - La nouvelle ligne après la dernière ligne est facultative.
- [Nouveau] Vous pouvez sans risque supposer que tout caractère dont le code est inférieur à 33 est un espace blanc. J'espère que cela vous aidera pour le golf.
Les tests
Input Output Code length Comment
+++++++++ +++ 9 Alice is lucky,
+++ her code perfectly fits a square.
+++
++++++++ +++ 8 Though code length isn't enough for a square,
+ + a small gap fixes it.
+++
++++++ :~( 6 No luck, code cannot be formatted.
Hello, Hell 12 Input may contain any ASCII characters,
World! o , but whitespaces in input should be ignored.
W o
rld!
+++++ + +++++ +++++ 22 Gap is not required to be a square,
+++++ + +++++ +++++ it can be a rectangle.
+ +
+++++
+++++
+++ + +++ ++++++++ 28 There exists another solution:
+++ + +++ + + 6x6 square with 4x2 gap,
+++ + +++ + + but in Alice's opinion square gap
+++ + +++ + + makes code more readable.
+ +
+ +
+ +
++++++++
Tests délicats
This must be Thism 24 7x7 with 5x5 gap looks good,
5x5 with 1x1 ustbe but 5x5 with 1x1 gap is better,
gap. 5x 5w because gap area is smaller.
ith1x
1gap.
+++ +++ +++ :~( 18 In case you tried 5x5 square
+++ +++ +++ with 7x1 gap ;)
Ressources
Pour économiser de l'espace, vous pouvez trouver des exemples de code et des cas de test supplémentaires sur tio.run
[Nouveau] Vous pouvez consulter le tableau des solutions acceptées pour les entrées jusqu'à 100 caractères . J'ai inversé la largeur et la hauteur car cela semble plus intuitif.
Inspiré par: un carré de texte
Changements
Ajout de 2 tests, correction d'un bug dans l'exemple de code.
Ajout d'un tableau de solutions jusqu'à 100, ajout d'une clarification des espaces blancs.