Voir aussi: Faites un geste sur un tableau de Go .
Tâche
Go est un jeu de plateau où deux joueurs (noir et blanc) placent des pierres aux intersections des lignes de la grille sur un tableau 19 × 19. Noir se déplace en premier - par exemple, à J4:
Dans ce défi, vous devez prendre une coordonnée de tableau Aller D4
comme entrée et générer une représentation ASCII d'un tableau avec le premier coup joué à un moment donné.
Notez qu'il n'y a pas de colonne I. Ceci est, historiquement, pour réduire la confusion avec J et L.
Cette sortie consiste en 19 lignes de 19 caractères chacune. La pointe avec la pierre est marquée O
. Des points vides sur la carte sont présentés comme .
, sauf pour les neuf points étoiles (à D4
, D10
, D16
, K4
, K10
, K16
, Q4
, Q10
et Q16
), qui sont marqués *
.
Par exemple, F5
en entrée, le résultat de votre réponse doit être:
...................
...................
...................
...*.....*.....*...
...................
...................
...................
...................
...................
...*.....*.....*...
...................
...................
...................
...................
.....O.............
...*.....*.....*...
...................
...................
...................
Et donné Q16
en entrée, votre sortie doit être:
...................
...................
...................
...*.....*.....O...
...................
...................
...................
...................
...................
...*.....*.....*...
...................
...................
...................
...................
...................
...*.....*.....*...
...................
...................
...................
Règles
Vous pouvez écrire une fonction qui prend la coordonnée en argument, ou un programme qui lit la coordonnée à partir de la ligne de commande
STDIN
.Vous pouvez choisir d’accepter les entrées en minuscule ou en majuscule, mais votre réponse ne doit pas nécessairement traiter les deux.
L'entrée est toujours une simple chaîne comme
a1
ouT19
, jamais une chaîne + nombre ou deux chaînes.Si vous écrivez un programme complet, votre réponse doit être imprimée
STDOUT
sous la forme d'une chaîne, suivie éventuellement d'une nouvelle ligne. Si votre réponse est une fonction, vous pouvez imprimer surSTDOUT
, ou renvoyer une chaîne, ou retourne un tableau / liste des chaînes (lignes), ou retourner un tableau à deux dimensions ou liste imbriquée de caractères.C'est du code-golf . La réponse la plus courte en octets gagne.
f("G", 14)
, correct?Réponses:
MATL , 33 octets
Essayez-le en ligne!
Explication
la source
C,
21219519318117113210398 98 octetsEnregistré 1 octet grâce à @FryAmTheEggman, 5 octets grâce à @orlp
Appelez
f()
avec la position à jouer (doit être en majuscule), et le résultat est imprimé.Essayez sur ideone .
la source
putchar(i%20?i^20*atoi(p+1)+64-*p+(*p>72)?i%6^4|i/20%6^3?46:42:79:10)
C (gcc),
132128109Ideone
Une fonction qui imprime le tableau sur STDOUT. Requiert que la coordonnée de la lettre soit capitale. L'impression dans une boucle semble être légèrement plus courte que la précédente approche par boucle imbriquée.
la source
MATLAB, 135 octets
Un premier essai, rien d’intelligent, juste pour voir à quel point les autres peuvent faire mieux:
Usage:
la source
a=input('');
); supprimer les nouvelles lignes; changer'*'
à42
et'0'
à48
; remplacerend
par19
; soustrayez la valeur logique directement à la place de laif
branche. En fait, vous pouvez remplacer les cinq dernières lignes parb(20-a(2),a(1)-64-(a(1)>8))=48
Ruby,
9391 octetsPrend une entrée sur la ligne de commande, par exemple
$ ruby script.rb Q16
.Testez-le sur repl.it (encapsulé dans un lambda car repl.it ne prend pas d'arguments en ligne de commande: https://repl.it/CkvT/1
Ungolfed
la source
$><<
au lieu deputs
. Pas sûr, cependant.Aller,
319286 octetsProbablement golfable arrêter un peu, je suis un débutant
la source
part
àp
?Ruby,
130128121 + 3 (-n
drapeau) = 124 octetsBasculé
-p
sur-n
carputs b
un octet est plus court que$_=b*$/
la source
Python,
148145136130121 121119116 Octets-3 octets grâce à @RootTwo
Fonction lambda anonyme, prend la forme "A1" (en lettres majuscules) et génère une liste de listes de caractères (len == 1 chaînes en Python)
la source
".*oo"[2*(j==ord(x[0])-(x[0]>"I")-65and int(x[1:])==i+1)+(i%6==j%6==3)]
au lieu de"o"if...else"*"if...else"."
(x>'I')
au lieu de(x[0]>'I')
sauvegarder 3 octets supplémentaires.> <> ,
9896 octetsNotez qu'il y a un
0x14
dans la première ligne après la première'
, et un0x19
entre le9
et le premier^
de la dernière ligne. Essayez-le en ligne!L'entrée est mappée de manière à
A-T
devenir1-19
(avec 0 une colonne imaginaire de "nouvelle ligne") et le nombre entier de lignes est décrémenté de 1. Le programme effectue une boucle de 379 à 0, choisissant un caractère dans la ligne du bas comme il se doit ( compensé par 15, pour tenir compte du fait que vous ne pouvez pas entrer de nouvelle ligne littérale dans la boîte à code). Les nouvelles lignes sont vérifiées viai % 20 == 0
, et les points étoiles sont vérifiés par((i%20-1)%6)*((i/20)%6) == 9
.la source
F #,
241 237 225 216 214211 octetsTricky one this one ... Je me demande si cela peut être raccourci.
Edit: corrigé un bogue, ajouté des numéros à certains endroits, effacé des numéros dans d’autres, avec le même nombre.
Peut-être essayer de mélanger les chiffres plus tard. Terminé.Edit2: enregistré plus d'octets en épelant l'un des conditionnels, compteur intuitivement.
Edit3: Correction d'un autre bug: devrait fonctionner maintenant pour les pièces du dernier rang et a réussi à sauvegarder deux octets pendant que j'y suis, d'une manière ou d'une autre.
Essayez-le en ligne
la source
Retina ,
134129122 octets11 octets grâce à Martin Ender et l'inspiration pour un de plus.
Essayez-le en ligne!
la source
Perl, 132 octets
-3 octets grâce à @Dom Hastings
Prend la saisie en ligne de commande. Besoins
-M5.010
courir. Par exemple :Je pense que cela pourrait être plus court, mais je ne pouvais pas comprendre comment ... s'il vous plaît laissez-moi savoir si vous le faites!
la source
@v=([(".")x18])x18;
pour initialiser la liste ... Il y a peut-être même un meilleur moyen que cela, mais je ne suis pas au terminal pour l'instant! Je pense que vous pouvez également remplacer l'@{...}
extension par des flèches de déréférencement:$v[$_]->[@t]
encore une fois non testé! J'espère aussi que ça ne vous dérange pas de suggérer des changements de code ...@v=([(".")x19])x19
ne fonctionne pas (je l'ai essayé avant btw), car il ne crée qu'un seul tableau et il copie 19 fois le ref, pas le tableau (au final, vous n'avez qu'une ligne dupliquée 19 fois). Remplacer@{..}
comme vous l'avez suggéré ne semble pas fonctionner non plus. J'imagine que c'est parce que je travaille sur une tranche et non sur un seul élément. Si vous avez d'autres suggestions, n'hésitez pas à les suggérer! :)eval
pour -3 si:@v=eval"[('*')x19],"x19;
. Et vous êtes 100% correct avec le paramètre arrayref ... Est-il possible d'utiliser un tableau 1D et de calculer l'index dans ce cas? Peut-être jouer avec cela plus tard!Lot,
322310308 octetsExplication: commence par demander la pierre sur stdin. Ensuite, définit les variables pour chaque colonne possible, afin qu’elle puisse évaluer le premier caractère de la pierre en tant que variable pour obtenir les
y
coordonnées. Soustrait 1 de lax
coordonnée car il est indexé 1 et nous voulons indexé 0 et calcule égalementz=y+1
car il en aura besoin plus tard. Ensuite, les bouclesr
de 18 à 0 pour chaque ligne. Prend la chaîne...*.....*.....*...
et extrait le caractère à lar
position e pour plus tard. Sur lax
rangée e, ley
caractère e est remplacé par uno
. Enfin, les.*
s sont remplacés par un.
plus du caractère précédemment extrait; c'est un non-op sur les rangées 4, 10 et 16, mais c'est le moyen le plus court pour y parvenir. (Je dois utiliser.*
car le remplacement*
est apparemment illégal dans le lot.)la source
PowerShell v2 +,
157152 octets(Je pense que j'ai rencontré une sorte de pépin étrange avec l'opérateur virgule, donc la construction de tableau est un peu plus longue qu'elle ne devrait l'être)
Prend l'entrée en tant que chaîne majuscule via
$args[0]
, la transforme en tableau de caractères, stocke la première lettre$x
et les autres lettres$y
. Cela divise efficacement l'entrée en lettre / chiffre.Nous construisons ensuite notre tableau multidimensionnel
$a
. Nous pré-remplissons un tableau de taille19
avec0
s en utilisant l'opérateur virgule. Nous effectuons ensuite une boucle0..18
pour rendre chaque élément$a[$_]
égal à un tableau de périodes, en utilisant à nouveau l'opérateur virgule. (NB - En théorie, cela devrait pouvoir être condensé$a=,(,'.'*19)*19
, mais cela ne semble pas fonctionner correctement avec la tâche d'indexation ... J'ai fini par avoir les colonnes entières réglées à*
)Ensuite, nous parcourons deux fois
3,9,15
pour définir les éléments correspondants*
. Nous y indexons ensuite au bon endroit pour poser la pierreO
. Pour ce faire, nous soustrayons65
de$x
(c'est-à-dire que l'ASCII "A" vaut 65 et que nous sommes indexés à zéro), et en soustrayons un autre à l'aide d'une conversion booléenne-int si$x
est plus grand que73
(c'est -à- dire que l'ASCII "I" ).Maintenant, notre sortie est inversée (la partie supérieure gauche le serait
A1
), nous devons donc inverser le tableau$a[18..0]
. Enfin, nous produisons chaque ligne-join
ensemble pour former une chaîne.la source
> <> , 124 octets
Utilise exactement la même approche que ma réponse en C. La saisie doit être une lettre majuscule suivie d'un nombre décimal.
Essayez-le en ligne!
Explication:
la source
JavaScript, 138 octets
Retourne un tableau de chaînes. Explication:
la source
join
. En outre, il place le o dans la mauvaise ligne et la mauvaise colonne pour D5 (premier cas de test).R,
169161 octetsAvec les retraits et les nouvelles lignes:
Usage:
la source
Lua, 187 octets
Je ne me sens pas trop mal avec 187 pour ce projet particulier. Lua est encore très maladroit pour le golf, mais je suis assez fier de pouvoir aller si loin.
la source
PHP,
280 268 263 261 255 218216 octetsMon premier golf.
Utilisation:
Enregistrer en tant que fichier PHP et appeler par
php filename.php coordinate
exemplephp go.php k13
la source