Dada una cadena 2D como entrada, ya sea como una cadena con nuevas líneas o una lista de líneas, genera las coordenadas (x, y)
de todos los hashes (#
) en la lista. La entrada solo contendrá hashes y espacios. (y nuevas líneas, si elige tomar la entrada como una cadena 2D)
Si no hay hashes, puede generar cualquier cosa.
La salida no debe ser ambigua en cuanto a qué números están emparejados con cuáles.
Ejemplo:
##
Debería dar salida:
(0,0), (1,0)
Eso supone una indexación basada en 0, comenzando desde la parte superior izquierda. Puede comenzar desde cualquier esquina, usar indexación basada en 0 o 1, y / o salida y
primero. (por ejemplo, en el formulario y,x
).
Más casos de prueba (de nuevo, todos usando (x, y)
indexación superior izquierda basada en 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)
Tenga en cuenta que todos estos casos de prueba se enumeran por filas, no siguiendo la ruta.
Puede suponer que los hashes formarán un rastro continuo, es decir # #
, nunca serán la entrada. (probablemente no importará, pero en caso de que alguien quiera expresar esto)
También puede generar las coordenadas en el orden que desee, es decir, columnas verticales, filas horizontales o simplemente una lista sin clasificar.
Respuestas:
Resbalón , 2 + 1 = 3 bytes
+1 byte para la
p
bandera. Código:Explicación:
La
p
bandera-devuelve la posición de cada ocurrencia de lo siguiente:Pruébalo aquí!
fuente
Grime , 5 bytes
Pruébalo en línea! El formato de salida es un poco raro, pero OP ha declarado que es válido.
Explicación
Grime es mi lenguaje de coincidencia de patrones 2D. La parte posterior
`
es el patrón , en este caso un cuadrado de 1 × 1 que contiene un carácter#
. Grime buscará una coincidencia en la cuadrícula de entrada e imprimirá la primera que encuentre por defecto. La parte anterior`
contiene opciones, en este caso significa que sea
deben imprimir todas las coincidencias ( ), junto con sus posiciones y tamaños (p
).fuente
MATL ,
7 65 bytesEsto está utilizando la indexación basada en 1 con
(1,1)
en la esquina superior izquierda.Explicación:
¡Gracias @DJMcMayhem y @LuisMendo por cada -1 byte!
Pruébalo en línea!
fuente
ooH#fh
para guardar un byte. (convertir a enteros, mod2) Dado que el espacio es par (mod 2 == 0, falso) y#
es impar (mod 1 == 1, verdadero)Python , 67 bytes
Esto es en realidad solo un golf de mi respuesta de Stack Overflow sobre un tema similar.
Pruébalo en línea!
Recorre la lista 2D, registra los caracteres hash y devuelve el resultado. Guardamos un byte usando en
char > '!'
lugar dechar == '#'
, porque la entrada solo consistirá en hashes y espacios, por lo que los hashes (0x23
) serán los únicos caracteres más grandes que los signos de exclamación (0x21
).fuente
JavaScript (ES6),
7067 bytesDa como resultado una lista de coordenadas separadas por líneas y espacios, por ejemplo
Puede acortarse mucho con un formato de salida extraño:
Esto salidas
para el segundo caso de prueba. Todavía está claro qué números están emparejados con qué ...
fuente
J , 12 bytes
Pruébalo en línea!
Explicación
fuente
Jalea , 8 bytes
Pruébalo en línea!
Dada una matriz 2D de caracteres (= una lista de cadenas):
fuente
Dyalog APL 16.0, 5 caracteres = 9 bytes o 6 caracteres = 8 bytes
Da una lista de pares (y, x) desde la parte superior izquierda.
⍸
dónde⎕
entrada=
es igual'#'
Este personaje** Es posible guardar un carácter a costa de un byte reemplazándolo
'#'
con⍕#
(formatear el espacio de nombres raíz)TryAPL en línea! Tenga en cuenta que
⍸
se ha emuladoi
porque TryAPL ejecuta la versión 14.0.fuente
⍸
no está incluido en la versión de un solo byte. Ver el enlace "bytes".JavaScript (Firefox 30-57), 61 bytes
Devuelve coordenadas basadas en 1. Fácilmente conmutable entre
[y, x]
y[x, y]
pedidos. Sin golf:fuente
Vim, 37 bytes
Como V es en su mayoría compatible con versiones anteriores, ¡puede probarlo en línea!
Una solución directa de expresiones regulares, donde reemplaza cada '#' con la ubicación en la que se encontró (indexación basada en uno). Mientras escribía esto, estaba un poco preocupado porque la ubicación cambiaría después de sustituir la primera en una línea, pero eso no parece ser un problema. TBH Estoy gratamente sorprendido por lo simple que terminó siendo esta solución.
Desafortunadamente, vimscript es muy detallado, por lo que la mayoría de los bytes provienen de la separación de los resultados para que todavía sea legible. De lo contrario, podríamos hacer
Pero esto crea resultados que son bastante difíciles de interpretar. Además, solo funcionará si la cuadrícula es siempre 9x9 o menor.
Esta es una solución realmente divertida porque muestra cada par de coordenadas en la ubicación del hash que representa. Por ejemplo, la entrada
salidas
Por supuesto, si estuviéramos usando V, podríamos eliminar la nueva línea final y comprimir la expresión regular. Entonces podría ser simplemente
(32 bytes)
Pero dado que este es exactamente el mismo enfoque y sigue siendo dolorosamente detallado, no parece que valga la pena usar un lenguaje de golf.
fuente
Haskell, 53 bytes
La entrada se toma como una lista de cadenas. La salida es una lista de
(x,y)
pares (0 indexados), p. Ej.fuente
Lua, 141 bytes
Son las 2:30 a.m., estoy en la cama, en mi teléfono. ¿Por qué estoy haciendo esto?
fuente
Mathematica, 12 bytes
Operador de forma
Position
. Asume una matriz 2D de caracteres. 1 indexado a partir de la entrada superior izquierda. Emite una lista de coordenadas en el formulario{row,column}
.fuente
char[]
, que en realidad es una forma común de almacenar cadenas en lenguajes basados en C. Además, esta descripción de la tarea menciona específicamente "ya sea como una cadena con nuevas líneas o una lista de líneas", y no menciona la lista de listas de caracteres o la matriz de caracteres 2D.PHP, 69 bytes
Utiliza indexación basada en 1 a partir de la esquina superior izquierda.
Usar como:
Saldrá:
fuente
C, 113 bytes
Salidas de casos de prueba:
Pruébalo en línea!
fuente
RBX.Lua, 131 bytes
Debe suponer que la entrada es válida (Z es el eje plano, los espacios en blanco son
White
mosaicos, los hash pueden ser de cualquier otro color, la parte superior izquierda se encuentra en0, 0, 0
) y todas las partes son parte del mismo modeloM
, y el modelo está vacío.Entrada / salida de muestra:
fuente
Perl 6 , 25 bytes (22 caracteres)
Toma la entrada como una lista de líneas.
Emite una lista por línea, cada una de las cuales contiene (y, x) tuplas para las coordenadas.
Pruébalo en línea!
Cómo funciona
fuente
Groovy,
8068 bytesEntrada de ejemplo:
Salida de ejemplo:
fuente
Rubí , 24 + 1 = 25 bytes
+1 byte para
-n
bandera. Las coordenadas están basadas en 1, un número por línea.Pruébalo en línea!
fuente
C, 80 bytes
Requiere entrada como matriz de caracteres delimitada por nueva línea, imprime la salida a la pantalla.
Sin golf y uso:
fuente
x,y;f(char*s){for(x=y=0;*s;*s++==10?++y,x=0:++x)*s==35&&printf("%d,%d ",x,y);}