Voici un schéma d'une prison utilisant des caractères ASCII:
+------------------------------+
| |
| X X |
| |
| D
D |
| |
| |
| X X X |
| |
+------------------------------+
Les murs sont constitués de caractères de conduite |
, de tirets -
et de piliers +
pour les angles et les intersections. Il y a aussi deux portes marquées de D
(qui seront toujours sur les murs gauche et droit). La prison est remplie de personnes effrayantes marquées avec X
.
L’objectif est de construire des murs pour satisfaire les besoins suivants:
- Chaque personne est en isolement cellulaire;
- Il y a un couloir courant entre les deux portes;
- Chaque cellule contient exactement une porte directement reliée au couloir principal;
- Tout l'espace de la prison est utilisé par les cellules et le couloir;
- Chaque cellule contient une personne (c'est-à-dire qu'il n'y a pas de cellules vides).
Le couloir est un chemin unique, ne divise pas et a toujours un caractère de large. Voici une solution pour la prison ci-dessus:
+---------+--------------------+
| | |
| X | X |
| | +--------+
+------D--+-----D-----+ D
D +---D--+
+----D--------+---D-----+ |
| | | |
| X | X |X |
| | | |
+-------------+---------+------+
Vous pouvez supposer que toute entrée de prison aura toujours une sortie valide. Voici quelques autres prisons d'entrée, avec les sorties possibles:
+------------------------------+
|X X X X X X X X X X X X X X X |
| |
D D
| |
| X |
+------------------------------+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+
|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X |
+D+D+D+D+D+D+D+D+D+D+D+D+D+D+D-+
D D
+----------------------D-------+
| X |
+------------------------------+
+-----------+
|X |
| |
| |
|X X|
| |
| X|
| |
D D
+-----------+
+-+-------+-+
|X| D |
| D +---+ | |
+-+ | | |
|X| | +---+X|
| | | | +-+
| D | | X|
+-+ | +-D---+
D | D
+---+-------+
+----------------+
|X X X X|
| |
D |
| |
|X X X |
| |
| |
| |
| X X D
| |
| |
+----------------+
+---+---+----+---+
|X | X | X | X|
+--D+--D+---D+--D+
D |
+---+---+------+ |
|X | X | X | |
+--D+--D+---D--+ |
| |
| +-----+------+-+
| | X | X | D
| +----D+---D--+ |
| |
+----------------+
Réponses:
Python 2 ,
2986288129492135207520711996 octetsEssayez-le en ligne!
Il y avait beaucoup de golf. pourtant, il peut encore y avoir place à amélioration. Ce morceau de code, cependant, résout tous les cas de test. Ne fonctionne pas très efficacement; pour les grandes prisons, l'architecte peut prendre son temps pour le comprendre.
Utilise un algorithme simple de recherche de chemin pour relier les portes et les prisonniers au couloir. Ensuite, il encapsule tous les prisonniers et leurs murs et pousse lesdits murs dans un espace vide jusqu'à ce qu'ils soient tous remplis. Enfin, l’aspect artistique ASCII est mis en œuvre.
Cela m'a pris plusieurs heures pour écrire. J'espère que cela fonctionne également sur d'autres prisons que les cas tests. (Vous ne pouvez pas tous les tester, pouvez-vous?)
la source
P
). Ce n'est pas un format IO autorisé. Vous devez utiliserinput()
ou définir une fonction.C,
37323642 octetsJe pourrais certainement jouer au golf un peu plus loin, mais c'est un très bon début. Au début, je ne savais pas que mon approche s'appelait alors criez à @Thepers de m'avoir donné un nom pour la recherche J'ai vraiment apprécié le défi que cette question offrait. :)
-63 octets des suggestions de @ Jonathan. J'ai également remplacé
char
partypedef char R
tous les littéraux de caractère inférieurs à 100 par leurs valeurs ASCII, soit un total de 90 octets.Une explication rapide de mon code.
Pour utiliser ce programme, transmettez la carte sous forme de chaîne contenant des caractères de nouvelle ligne ou séparant chaque niveau par un espace, comme dans l'exemple suivant.
code
la source
free(t);free(u);
à la fin de votre programme. Également'\0'
égal à0
, sauvegarde de 3 octets supplémentaires.typedef int Q;
et remplacez toutes les occurrences deint
avecQ
, vous pouvez enregistrer 44 octets supplémentaires.