Un tableau Scrabble standard est une grille d'espaces de 15 × 15 pour placer des tuiles de lettres. La plupart des espaces sont vides, mais certains sont des scores de double mot (rose), des scores de triple mot (rouge), des scores de double lettre (bleu clair) et des scores de triple lettre (bleu). Il y a généralement une étoile au centre (qui compte comme un double score de mot).
Écrivez un programme ou une fonction qui génère une carte Scrabble standard et vide sous forme ASCII où:
.
représente un espace videD
représente un score de double motT
représente un score de mot tripled
représente un score en double lettret
représente un score de triple lettreX
représente l'étoile centrale
Autrement dit, votre sortie exacte doit être
T..d...T...d..T
.D...t...t...D.
..D...d.d...D..
d..D...d...D..d
....D.....D....
.t...t...t...t.
..d...d.d...d..
T..d...X...d..T
..d...d.d...d..
.t...t...t...t.
....D.....D....
d..D...d...D..d
..D...d.d...D..
.D...t...t...D.
T..d...T...d..T
éventuellement suivi d'une nouvelle ligne de fin.
Le code le plus court en octets gagne.
la source
X
et ne*
pas représenter l'étoile? : o*
est trop élevé et puissant.★
? : DRéponses:
MATL ,
595452 octetsEssayez-le en ligne!
Explication
Le code suit trois étapes principales:
Générez la matrice 8x8
Étendez-le à la matrice 15x15
Indexez la chaîne
'DtdTX.'
avec cette matrice pour produire le résultat souhaité.Étape 1
Maintenant, nous devons remplir les entrées hors diagonales non nulles. Nous ne remplirons que ceux en dessous de la diagonale, puis utiliserons la symétrie pour remplir les autres.
Pour remplir chaque valeur, nous utilisons une indexation linéaire (voir cette réponse , extrait de longueur 12). Cela signifie accéder à la matrice comme si elle n'avait qu'une seule dimension. Pour une matrice 8 × 8, chaque valeur de l'indice linéaire fait référence à une entrée comme suit:
Ainsi, ce qui suit affecte la valeur 4 à l'entrée en bas à gauche:
Le code de la valeur 3 est similaire. Dans ce cas, l'index est un vecteur, car nous devons remplir plusieurs entrées:
Et pour 2:
Nous avons maintenant la matrice
Pour remplir la moitié supérieure, nous exploitons la symétrie:
Étape 2
La pile contient maintenant la matrice 8 × 8 issue de l'étape 1. Pour étendre cette matrice, nous utilisons l'indexation, cette fois dans les deux dimensions.
Étape 3
La pile contient désormais la matrice 15 × 15 issue de l'étape 2.
la source
Rubis,
10397 octetsMerci à Mitch Schwartz pour une amélioration de 6 octets sur les itérations.
Une approche similaire mais significativement différente de ma réponse originale ci-dessous. Comme précédemment, nous utilisons le fait qu'une lettre doit être imprimée si
i%7-j%7
est égale à 0 ou 4. Mais ici, nous stockons cette différenced
et utilisons la formulei+j+d*d/3
pour donner un entier qui est unique (jusqu'à la symétrie) à ce carré coloré particulier. Ensuite, nous cherchons juste dans la chaîne magique.Juste pour le fun: version C de cette approche, 120 octets
Ruby,
115113 bytes2 octets économisés grâce à Value Ink.
Explication
L'origine est considérée comme le centre du plateau.
Une lettre doit être imprimée si les coordonnées x et y du carré ont des grandeurs identiques ou différentes de 4. Les seules exceptions se trouvent sur le bord extérieur de la planche, mais elles suivent le même modèle que la ligne / colonne centrale du , nous pouvons donc utiliser la même condition si nous prenons les coordonnées x et y modulo 7.
Le choix de la lettre affichée est basé sur les coordonnées de magnitude minimale. De cette façon, les doubles et triples en (1,5) et (2,6) suivent la même règle qu'en (1,1) et (2,2) et sont obtenus à partir de la chaîne de 7 caractères
"#{formula}dtDDDD"
Cela ne couvre pas toutes les variations pour les carrés de bord et de ligne médiane, donc le premier caractère de la chaîne est calculé à partir de la formule'XdTdT'[(i+j)/3]
.la source
(k=-7..7).map{|y|k.map{...
est 2 octets plus court que votre-7.upto(7)
technique double .a=(-7..7).map &:abs;a.map{|i|puts a.map{|j|(d=i%7-j%7)%4<1?'X d t DTDdDdDtT d'[i+j+d*d/3]:?.}*''}
brainfuck ,
598596590 octetsConseils de golf bienvenus.
Explication
Initialisez la bande sur [10 116 68 46 100 84 92], c'est-à-dire [nl t D. d T \]
>-[++++[<]>->+]<[>++++>+++++>+++>++<<<<-]>[>>>>+>+>+<<<<<<-]<++++++++++[>+>>>>+>-<<<<<<-]>>+>->>-->++
Chaque ligne ici imprime ensuite une ligne du tableau.
La ligne médiane diminue également
92 to 88 i.e. \ to X
Essayez-le en ligne!
la source
PowerShell v2 +, 147 octets
Profite de la façon dont la valeur par défaut
Write-Output
à la fin de l'exécution du programme gère les tableaux (c'est-à-dire qu'elle insère une nouvelle ligne entre les éléments). Cela pourrait être une meilleure façon de générer le milieu du tableau - j'y travaille toujours.La première ligne sort la ligne supérieure de la carte, la stockant également dans
$x
pour une utilisation ultérieure.La ligne suivante génère toutes les lignes de double mot en prenant la "moitié" gauche de chacune, en les mettant en miroir (l'
-join$_[6..0]
instruction) et en les stockant en tant qu'éléments dans un tableau$y
.La ligne suivante est la rangée du milieu, avec un
X
au milieu, grâce à-replace
.La ligne suivante sort
$y
dans l'ordre inverse, ce qui nous donne les lignes inférieures de Double-Word.La dernière ligne est juste de
$x
nouveau.la source
> <> (Poisson), 153 octets
Une façon horrible, horrible et inefficace de faire les choses. Actuellement à la recherche d'un moyen de le raccourcir en reflétant correctement à la fois horizontalement et verticalement.
Essayez-le en ligne! (Si vous ne voulez pas être là toute la journée, assurez-vous de régler la vitesse d'exécution au maximum ou d'exécuter sans l'animation.)
la source
C,
146145142138 octetsEssayez-le en ligne!
1 octet5 octets enregistrés grâce à Level River StCela exploite le motif diagonal de la carte pour l'encodage. En particulier, si nous prenons le quadrant supérieur gauche de la planche et alignons la diagonale, nous obtenons:
... beaucoup de colonnes s'alignent maintenant. Si nous encodons des colonnes dans une ligne de cette façon:
... alors le modèle de carte peut être réduit en une chaîne de 15 caractères:
T..12..0..12..0
; et nous avons simplement besoin des bons mappages pour chaque ligne.Dans cet esprit, voici une version étendue avec des commentaires:
la source
i,r,c;f()
va bien. 2.(i%16-7)%8
->i%16-7&7
3. Je pensec-48
->c%4
ça marche, n'est-ce pas?f()
faudrait donc un ajouti=0
à l'intérieur de la fonction pour ne rien enregistrer.%8
utilise les modules négatifs de l'implémentation pour mapper les valeurs% 16 0..15 à -7..7; mapperait&7
cela à 0..7,0..7). Mais, oui, 3 fonctionnera absolument ... sera mis à jour lorsque j'en aurai l'occasion.05AB1E ,
5753 octetsCode
Utilise l' encodage CP-1252 . Essayez-le en ligne!
Explication (obsolète)
Le
•4ç“–šã&$W§ñçvßÖŠ_æá_VFÛÞýi~7¾¬ÏXôc•5B
décompresse à ce nombre:Avec
4ÝJ".TdtD"‡
, nous translittérons ce qui suit dans ce grand nombre:Nous bifurquons la chaîne entière, laissant la chaîne et la chaîne inversées sur la pile et les joignons en
"X"
utilisantý
. Nous divisons la chaîne entière en morceaux de 15 en utilisant le15ô
code e et joignons le tableau entier par des sauts de ligne en utilisant»
.la source
û€û
devrait être un intégré;).Python 3, 138 octets
la source
list(map(A))
par[*map(A)]
, enregistre 3 octets (nécessite Python 3.5+).05AB1E ,
4944 octetsEssayez-le en ligne!
Expliqué:
Pousser:
1003000104000200004000303004000300004000020002000030003010030005
Diviser en morceaux de 8, palindromiser chacun.
Palindromisez à nouveau.
Remplacez les chiffres par des caractères.
Autre idée (quelqu'un essaie ceci en MATL)
Vu que TOUT est volontaire pour avoir une période entre les deux ...
Comptez le nombre de zéros entre chaque pièce:
131424334342233135 => w\F6ß¿
Prendre le compte des zéros:
23134312344343123 => ì:¼˜¾
Ensuite, vous les décryptez et les transposez ensemble.
Les utiliser dans 05AB1E (entraîne une augmentation de +5 octets):
05AB1E , 27 octets
Essayez-le ...
Entrée méta-golf:
05AB1E , 104 octets
Essayez!
Meta-golfed utilisant mon méta-golfeur pour l' art ASCII: https://tio.run/nexus/05ab1e#JY9NSgNBEIWvUo4/qAQxyfi30yAioiAiuBM6M9U9DT3doao7ccBFrhI3ooss3QguJniRXCR2x01RfK9479Xqtf2@XHy2H78/tw/L6aydq8VXr5sPsuX0LeP1jCwbJD3r54v3dp5mFGbZzWp1wXBPyLpE6@GRQj0C1spiCQJ4gjjSVgG@YBG8HiM4KpHAWbgiXYqmA1wF79ONrxCGa5nBOyCUQSEyCFuCi2LEklwNjGO0YAQpNA3cBTa6hsIF60kjd9Y@jAWhF9SAk1C5Gk1yiTSQ9g1MBKcKAp4q7RGuXWCMFlYioS3iKowBhf@9Kh2DNbEHGSIexhSZeDRIUcq4oTDxDS09aAsjZ3TRHGycb25tP@/s7@51e/386Pjk9OzwDw
la source
Javascript (ES6), 150 octets
Comment ça marche
La chaîne
"T2d3T3d2T.D3t3t3D3D3d.d3D2d2D3d3D2d4D5D5t3t3t3t3d3d.d3d2T2d3"
décrit la carte de son coin supérieur gauche au carré juste avant le «X», avec des carrés vides consécutifs codés en chiffres. lereplace()
fonction à la fois décompresse les cases vides et crée la chaîne miroirr
pour le bas de la carte. Ensuite, les deux parties sont assemblées et les retours chariot sont insérés tous les 15 caractères.Démo
la source
JavaScript (ES6), 221 octets
Depuis que j'ai pris la peine de créer cela, j'ai pensé que je le publierais de toute façon même s'il existe une solution clairement supérieure.
la source
C 234 octets
Voici la sortie:
la source
charbon , 33 octets (non compétitif)
Tout le mérite de cette réponse va à @DLosc .
Essayez-le en ligne!
Verbeux
Essayez-le en ligne!
la source
Haskell, 114 octets
g
dans une version non-pointfree estg x = x ++ (reverse (init x))
. Il est appliqué une fois par (demi) ligne et à nouveau sur le résultat.la source
sh + coreutils, 119 octets
Ceci est un fichier binaire. Montré comme hexdump:
Voici le formulaire base64 pour que vous puissiez le copier / coller:
la source
C
230228 octetsessayez-le sur ideone
Il s'agit d'une tentative d'amélioration de la version C d'origine publiée qui avait un quart de carte stocké dans un tableau C. Pas aussi court que je l'espérais. Cette version n'a qu'un huitième de la carte stockée.
Non golfé:
la source
GNU sed,
219205 octetsProfitant de la symétrie miroir de la planche, la seconde moitié est la première qui a été stockée dans l'ordre inverse dans l'espace de maintien.
la source