Écrivez un programme ou une fonction qui ne prend aucune entrée mais imprime ou retourne une représentation textuelle constante d'un rectangle composé des 12 pentominos distincts :
Le rectangle peut avoir n'importe quelle dimension et être dans n'importe quelle orientation, mais les 12 pentominos doivent être utilisés exactement une fois, donc il aura la zone 60. Chaque pentomino différent doit être composé d'un caractère ASCII imprimable différent (vous n'avez pas besoin d'utiliser le lettres d'en haut).
Par exemple, si vous avez choisi de sortir cette solution de rectangle pentomino 20 × 3:
La sortie de votre programme pourrait ressembler à ceci:
00.@@@ccccF111//=---
0...@@c))FFF1//8===-
00.ttttt)))F1/8888=-
Alternativement, vous pourriez trouver plus facile de jouer au golf avec cette solution 6 × 10:
000111
203331
203431
22 444
2 46
57 666
57769!
58779!
58899!
5889!!
N'importe quelle solution rectangle suffira, votre programme n'a besoin que d'en imprimer une. (Une nouvelle ligne de fin dans la sortie est très bien.)
Ce grand site Web propose de nombreuses solutions pour différentes dimensions de rectangle et il vaut probablement la peine de les parcourir pour vous assurer que votre solution est aussi courte que possible. C'est le code-golf, la réponse la plus courte en octets l'emporte.
la source
Réponses:
Pyth, 37 octets
Manifestation
Utilise une approche très simple: utilisez des octets hexadécimaux comme nombres. Convertissez en un nombre hexadécimal, la base 256 l'encode. Cela donne la chaîne magique ci-dessus. Pour décoder, utilisez la fonction de décodeur de base 256 de Pyth, convertissez-la en hexadécimal, divisez-la en 4 morceaux et rejoignez-vous sur des nouvelles lignes.
la source
CJam (44 octets)
Donné au format xxd car il contient des caractères de contrôle (y compris un onglet brut, qui joue vraiment mal avec MarkDown):
qui décode quelque chose le long des lignes de
Démo en ligne légèrement non golfée qui ne contient pas de caractères de contrôle et joue donc bien avec les fonctions de la bibliothèque de décodage d'URI du navigateur.
Le principe de base est que, comme aucune pièce ne couvre plus de 5 lignes, nous pouvons coder un décalage à partir d'une fonction linéaire du numéro de ligne (en base 5, en fait, bien que je n'aie pas essayé de déterminer si ce serait toujours le cas ).
la source
Bash + utilitaires Linux courants, 50
Pour recréer cela à partir de la base64 codée:
Puisqu'il y a 12 pentominos, leurs couleurs sont facilement encodées en nybbles hexadécimaux.
Production:
la source
J, 49 octets
Vous pouvez choisir les lettres de manière à ce que les incréments maximaux entre les lettres verticalement adjacentes soient 2. Nous utilisons ce fait pour coder les incréments verticaux en base3. Après cela, nous créons les sommes en cours et ajoutons un décalage pour obtenir les codes ASCII des lettres.
Certainement golfable. (Je n'ai pas encore trouvé de moyen d'entrer des nombres en base36 à précision étendue, mais le simple base36 devrait économiser 3 octets à lui seul.)
Production:
Essayez-le en ligne ici.
la source
3#i.5
qui est0 0 0 1 1 1 ... 4 4 4
), cela peut fonctionner mais ne sera probablement pas plus court (du moins la façon dont j'ai essayé).Microscript II , 66 octets
Commençons par la réponse simple.
Hourra, impression implicite.
la source
Rubis
Rév 3, 55 octets
Pour développer davantage l'idée de Randomra, considérons le tableau des sorties et des différences ci-dessous. La table des différences peut être compressée comme précédemment et développée en multipliant par 65 = binaire 1000001 et en appliquant un masque 11001100110011. Cependant, Ruby ne fonctionne pas de manière prévisible avec des caractères 8 bits (il a tendance à les interpréter comme Unicode.)
Étonnamment, la dernière colonne est entièrement uniforme. Pour cette raison, en compression, nous pouvons effectuer un changement de droits sur les données. Cela garantit que tous les codes sont ASCII 7 bits. En expansion, nous multiplions simplement par 65 * 2 = 130 au lieu de 65.
La première colonne est également entièrement uniforme. Par conséquent, nous pouvons ajouter 1 à chaque élément (32 à chaque octet) si nécessaire, pour éviter tout caractère de contrôle. Le 1 indésirable est supprimé en utilisant le masque 10001100110011 = 9011 au lieu de 11001100110011.
Bien que j'utilise 15 octets pour la table, je n'utilise vraiment que 6 bits de chaque octet, soit un total de 90 bits. Il n'y a en fait que 36 valeurs possibles pour chaque octet, soit 2,21E23 au total. Cela rentrerait dans 77 bits d'entropie.
Rev 2, 58 octets, en utilisant l'approche incrémentale de Randomra
Enfin, quelque chose de plus court que la solution naïve. L'approche incrémentale de Randomra, avec la méthode bytepacking de Rev 1.
Rev 1, 72 octets, version golfée de rev 0
Certaines modifications ont été apportées à la ligne de base pour permettre une réorganisation du code pour des raisons de golf, mais elles sont toujours plus longues que la solution naïve.
Les décalages sont codés dans chaque caractère de la chaîne magique au format base 4
BAC
, c'est-à-dire avec les 1 représentant le symbole de droite, les 16 représentant le symbole du milieu et le symbole de gauche chausse-pied en position de 4. Pour les extraire, le code ascii est multiplié par 65 (binaire 1000001) pour donnerBACBAC
, puis il est andé avec 819 (binaire 1100110011) pour donner.A.B.C
.Certains des codes ascii ont le 7e bit défini, c'est-à-dire qu'ils sont 64 supérieurs à la valeur requise, pour éviter les caractères de contrôle. Du fait que ce bit est supprimé par le masque 819, ceci est sans conséquence, sauf lorsque la valeur de
C
est 3, ce qui provoque un report. Cela doit être corrigé en un seul endroit (au lieu deg
nous devons l'utiliserc
.)Rev 0, version non golfée
Production
Explication
De la solution suivante, je soustrais la ligne de base, donnant le décalage que je stocke en tant que données. La ligne de base est régénérée sous la forme d'un nombre hexadécimal dans le code par
i/2*273
(273 décimal = 111 hex.)la source
3
dans tout le tableau (juste près du bas), donc je pense qu'en augmentant la ligne de base d'un peu plus de 0,5 à chaque ligne, il peut être possible d'utiliser la base 3. N'hésitez pas à essayer. (Pour des raisons de golf, il semble que je vais devoir changer légèrement la ligne de base, ce qui me donne un peu plus de 3, et malheureusement, il semble que cela va durer 1 octet de plus que la solution naïve de Ruby.)Foo, 66 octets
la source