Étant donné une chaîne 2D en entrée, sous la forme d'une chaîne avec des sauts de ligne ou une liste de lignes, sortez les coordonnées (x, y)
de tous les hachages ( #
) de la liste. L'entrée ne contiendra que des hachages et des espaces. (et les sauts de ligne, si vous choisissez de prendre l'entrée comme une chaîne 2D)
S'il n'y a pas de hachage, vous pouvez tout afficher.
La sortie doit être sans ambiguïté quant à quels numéros sont associés à quels.
Exemple:
##
Devrait produire:
(0,0), (1,0)
Cela suppose une indexation basée sur 0, en partant du coin supérieur gauche. Vous pouvez commencer à partir de n'importe quel coin, utiliser une indexation basée sur 0 ou 1, et / ou produire en y
premier. (par exemple dans le formulaire y,x
).
Plus de cas de test (encore une fois, tous utilisant l' (x, y)
indexation en haut à gauche basée sur 0 ):
#
#####
#
(4, 0), (0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (0, 2)
# ###
### #
(0, 0), (2, 0), (3, 0), (4, 0), (0, 1), (1, 1), (2, 1), (4, 1)
Notez que ces cas de test sont tous listés par lignes, pas en suivant le chemin.
Vous pouvez supposer que les hachages formeront une trace continue, c'est-à-dire # #
ne seront jamais l'entrée. (probablement pas d'importance, mais au cas où quelqu'un voudrait regex cela)
Vous pouvez également sortir les coordonnées dans n'importe quel ordre, c'est-à-dire des colonnes verticales, des lignes horizontales ou simplement une liste non triée.
Réponses:
Glissement , 2 + 1 = 3 octets
+1 octet pour le
p
drapeau. Code:Explication:
Le
p
-flag renvoie la position de chaque occurrence des éléments suivants:Essayez-le ici!
la source
Grime , 5 octets
Essayez-le en ligne! Le format de sortie est un peu génial, mais OP a déclaré qu'il était valide.
Explication
Grime est mon langage de correspondance de motifs 2D. La partie après
`
est le motif , dans ce cas un carré 1 × 1 contenant un#
caractère. Grime recherchera une correspondance dans la grille d'entrée et imprime la première qu'il trouve par défaut. La partie précédente`
contient des options, dans ce cas signifiant que toutes les correspondances (a
) doivent être imprimées, ainsi que leurs positions et tailles (p
).la source
MATL ,
7 65 octetsIl s'agit d'une indexation basée sur 1 avec
(1,1)
dans le coin supérieur gauche.Explication:
Merci @DJMcMayhem et @LuisMendo pour chaque -1 octet!
Essayez-le en ligne!
la source
ooH#fh
pour enregistrer un octet. (convertir en entiers, mod2) Puisque l'espace est pair (mod 2 == 0, faux) et#
est impair (mod 1 == 1, véridique)Python , 67 octets
Ceci est en fait juste un golf de ma réponse Stack Overflow sur un sujet similaire.
Essayez-le en ligne!
Les boucles à travers la liste 2D, enregistrant les caractères de hachage, et renvoie le résultat. Nous enregistrons un octet en utilisant
char > '!'
plutôt quechar == '#'
, car l'entrée ne sera composée que de hachages et d'espaces, et donc hashes (0x23
) sera les seuls caractères plus grands que les points d'exclamation (0x21
).la source
JavaScript (ES6),
7067 octetsAffiche une liste de coordonnées séparées par des sauts de ligne et des espaces, par exemple
Vous pouvez devenir beaucoup plus court avec un format de sortie étrange:
Cette sorties
pour le deuxième cas de test. Il est toujours clair quels numéros sont associés à quels ...
la source
J , 12 octets
Essayez-le en ligne!
Explication
la source
Gelée , 8 octets
Essayez-le en ligne!
Étant donné un tableau 2D de caractères (= une liste de chaînes):
la source
Dyalog APL 16.0, 5 caractères = 9 octets ou 6 caractères = 8 octets
Donne la liste des paires (y, x) en haut à gauche.
⍸
où⎕
contribution=
équivaut à'#'
ce personnage** Il est possible d'enregistrer un caractère au prix d'un octet en le remplaçant
'#'
par⍕#
(formater l'espace de noms racine)TryAPL en ligne! Notez que cela
⍸
a été émulé aveci
car TryAPL exécute la version 14.0.la source
⍸
n'est pas inclus dans la version à un octet. Voir le lien "octets".JavaScript (Firefox 30-57), 61 octets
Renvoie les coordonnées basées sur 1. Commutateur
[y, x]
et[x, y]
commande faciles. Non golfé:la source
Vim, 37 octets
Puisque V est principalement rétrocompatible, vous pouvez l' essayer en ligne!
Une solution regex simple, où il remplace chaque «#» par l'emplacement dans lequel il a été trouvé (indexation sur une base). J'étais un peu inquiet en écrivant ceci que l'emplacement changerait après avoir remplacé le premier sur une ligne, mais cela ne semble pas être un problème. TBH Je suis agréablement choqué par la simplicité de cette solution.
Malheureusement, vimscript est très verbeux, donc la plupart des octets proviennent de la séparation des résultats, ce qui est toujours lisible. Sinon, on pourrait faire
Mais cela crée une sortie assez difficile à interpréter. De plus, cela ne fonctionnera que si la grille est toujours 9x9 ou plus petite.
C'est une solution vraiment amusante car elle montre chaque paire de coordonnées à l'emplacement du hachage qu'elle représente. Par exemple, l'entrée
les sorties
Bien sûr, si nous utilisions V, nous pourrions supprimer la nouvelle ligne de fin et compresser l'expression régulière. Alors ça pourrait être simplement
(32 octets)
Mais puisque c'est exactement la même approche et toujours douloureusement verbeux, il ne semble pas utile d'utiliser un langage de golf.
la source
Haskell, 53 octets
L'entrée est considérée comme une liste de chaînes. La sortie est une liste de
(x,y)
paires (0 indexées), par exemplela source
Lua, 141 octets
Il est 2h30 du matin, je suis au lit, sur mon téléphone. Pourquoi est-ce que je fais cela?
la source
Mathematica, 12 octets
Forme d'opérateur de
Position
. Suppose un tableau 2D de caractères. 1 indexé à partir de l'entrée en haut à gauche. Affiche une liste de coordonnées dans le formulaire{row,column}
.la source
char[]
, qui est en fait un moyen courant de stocker des chaînes dans des langages basés sur C. De plus, cette description de tâche mentionne spécifiquement "soit comme une chaîne avec des sauts de ligne ou une liste de lignes", et ne mentionne pas la liste de listes de caractères ou la matrice 2D de caractères.PHP, 69 octets
Utilise l'indexation basée sur 1 en partant du coin supérieur gauche.
Utilisez comme:
Sortira:
la source
C, 113 octets
Sorties des cas de test:
Essayez-le en ligne!
la source
RBX.Lua, 131 octets
Doit supposer que l'entrée est valide (Z est l'axe plat, les espaces blancs sont des
White
tuiles, les hachages peuvent être de toute autre couleur, la partie supérieure gauche est située à0, 0, 0
) et toutes les parties font partie du même modèleM
, et le modèle est par ailleurs vide.Exemple d'entrée / sortie:
la source
Perl 6 , 25 octets (22 caractères)
Prend l'entrée comme une liste de lignes.
Produit une liste par ligne, chacune contenant (y, x) des tuples pour les coordonnées.
Essayez-le en ligne!
Comment ça marche
la source
Groovy,
8068 octetsExemple d'entrée:
Exemple de sortie:
la source
Ruby , 24 + 1 = 25 octets
+1 octet pour le
-n
drapeau. Les coordonnées sont basées sur 1, un nombre par ligne.Essayez-le en ligne!
la source
C, 80 octets
Nécessite une entrée sous forme de tableau de caractères délimité par des sauts de ligne, imprime la sortie à l'écran.
Non golfé et utilisation:
la source
x,y;f(char*s){for(x=y=0;*s;*s++==10?++y,x=0:++x)*s==35&&printf("%d,%d ",x,y);}