Este es mi mascota emoji, Billy:
-_-
A los emojis no les gusta estar bajo la lluvia, así que Billy está triste ... ¡Dibujémosle un paraguas para que se sienta mejor!
/\
/ \
/ \
-_-
¡Esto es bueno, está completamente cubierto por su paraguas! Aquí hay un ejemplo donde solo una parte de él está cubierto:
/\
/ \
/ \
-_-
En este caso, las secciones 2 y 3 de su cuerpo están expuestas a la lluvia.
Los paraguas vienen en muchas formas y tamaños, pero siempre están formados por una serie de barras ascendentes /
seguidas de una serie de barras descendentes \
. Por ejemplo, estos son todos los paraguas válidos:
/\
/ \
/ \
/\
/\
/ \
/ \
/ \
/ \
Y estos no son:
/ \
\/
\
/ \
/ \
0\
/ \
//\\
/ \
Debes determinar qué partes de mis emoji están expuestas a la lluvia.
Aclaraciones
Su programa (o función) tomará una cadena 2d como entrada. Esto puede ser en cualquier formato que sea más conveniente o natural para su idioma. Una matriz de cadenas, una matriz de matrices de caracteres, una cadena con nuevas líneas, etc.
Debes mostrar qué secciones de los emoji están expuestas a la lluvia. Esto puede ser indexado a cero o indexado a uno, siempre que lo deje claro. La salida puede estar en cualquier formato razonable. Si todo el emoji está protegido de la lluvia, no muestre nada (o una matriz vacía).
Se puede suponer que todas las entradas tendrán un paraguas válida, y el mismo emoji:
-_-
. El emoji siempre estará en la última línea de la entrada, sin embargo, puede haber varias líneas vacías entre el paraguas y el emoji.Todo lo que no sea parte del paraguas o el emoji será un
personaje espacial o una nueva línea.
La entrada se rellenará con espacios para que la longitud de cada línea sea la misma.
Se aplican las lagunas estándar, ¡y gana la respuesta más corta en bytes!
Prueba IO:
Todos los casos de muestra utilizarán una indexación.
/\
/ \
/ \
-_-
Outputs: []
----------------
/\
/ \
-_-
Outputs: [2, 3]
----------------
/\
-_-
Outputs: [1]
----------------
/\
/ \
/ \
/ \
/ \
/ \
-_-
Outputs: [1, 2, 3]
["_","-"]
.Respuestas:
05AB1E ,
181715 bytesCódigo:
Explicación:
Utiliza la codificación CP-1252 .Pruébalo en línea! (asegúrese de rellenar todas las líneas con espacios a la misma longitud ..
fuente
JavaScript (ES6), 95 bytes
La entrada debe ser una serie de cadenas, con cada línea rellenada con espacios para formar un cuadrado. La salida es una matriz de números indexados 1.
Explicación
fuente
JavaScript (ES6), 92 bytes
Acepta una matriz irregular de líneas y devuelve un resultado indexado 1. Explicación:
fuente
Java 8 lambda,
241218201191185184 (o 161) caracteresPorque ya sabes, también Java necesita emojis secos.
Devuelve
un ArrayListun HashSet a Stack que contiene las partes del emoji que están expuestas a la lluvia (la indexación comienza en 0). Todo sin envolver:Actualizaciones
Hice un poco de golf básico. Esto incluye unir las declaraciones, compararlas con los valores ascii para guardar algunos caracteres y acortar los bucles.
Gracias a @ user902383 por señalar mi error de volcado usando ArrayLists en lugar de solo Lists. Reemplacé las ArrayLists / Lists con HashSets / Sets que guarda algunos caracteres más. ¡También gracias por su consejo de usar un bucle foreach en el bucle interno! A través de ese cambio, puedo crear una variable para el índice de la última fila de la cuadrícula que lo acorta un poco más. ¡En total se han guardado 17 caracteres!
@KevinCruijssen sugirió eliminar los genéricos en la inicialización, fui un paso más allá: eliminar todos los genéricos. Esto ahorra otros 10 caracteres.
Volví del bucle foreach al bucle for. Esto hace posible omitir la comparación de la última línea, lo que a su vez me permite acortar la comparación de los valores ascii. En este contexto, solo '/', '\' y '_' tienen un valor ascii superior a 46. Si no verificamos la última línea, podemos usar a
> 46 check
en su lugar para verificar el valor real.Gracias nuevamente a @ user902383 por mostrarme que uso un lambda y puedo usar List + Stack en lugar de Set + HashSet para eliminar otro personaje.
Versión de retorno de cadena
@ user902383 señaló que en su lugar solo puedo crear una Cadena con los dígitos. Esto suena muy engañoso, pero otros parecen resolverlo de esta manera, así que aquí hay una versión más corta que usa un retorno de cadena:
Sin golf:
fuente
always program to an interface
, si usaList
enArrayList
su lugar puede guardar 5 bytes=new HashSet<>();
lo más probable es que se pueda jugar golf=new HashSet();
.<>
ahorra 2 bytes. :)Set(3)
HashSet(7)
contraList
(4) yStack
(5).V ,
2019 bytes (no competitivos)Versión alternativa y competitiva (21 bytes):
Pruébalo en línea!(Tenga en cuenta que tryitonline.net usa una versión ligeramente anterior de V. Para compensar esto, usa esta versión un poco más larga)
Explicación:
Esto solo produce el resultado correcto en 17 bytes. Sin embargo, también crea algunos espacios en blanco adicionales. No me importa, pero no quiero darme una ventaja injusta, así que agrego dos bytes:
fuente
JavaScript (ES6),
117112 bytesAcepta una matriz irregular de series de
cadenasde caracteres y devuelve resultados indexados a 0.Manifestación
fuente
Retina , 56 bytes
El recuento de bytes asume la codificación ISO 8859-1.
Pruébalo en línea!
Se trata de una sola etapa de sustitución, donde la expresión coincide con uno de los caracteres emoji, siempre que hay un personaje no-espacio (es decir, una
/
o\
) en algún lugar más arriba en la misma posición horizontal, y luego capturar el número de caracteres emoji hasta que punto. Esta coincidencia se reemplaza con la duración de la última captura, lo que nos da el índice de este personaje emoji sin protección. La expresión regular también contiene una|\D
para que coincida con todo lo demás que se reemplaza con nada, por lo que eliminamos todos los demás caracteres.fuente
/
o\
, salgo de ese grupo nuevamente mientras emparejo las cosas que lo preceden , y luego me aseguro de haber agotado completamente el grupo. Básicamente, esto garantiza que la posición horizontal del emoji y el carácter del techo coincidan.Pyth,
2723 bytes0 indexado.
Pruébalo en línea!
Explicación
Historia
27 bytes:
sM:#"^ *\d"0.T:R"-_-"s`M3.z
(¡ Pruébelo en línea! )fuente
Matlab, 43 bytes
Este código encuentra las posiciones de columna de caracteres no espaciales en la fila final de la entrada, suma el número de caracteres no espaciales en esas columnas y encuentra dónde solo hay uno de esos caracteres (¡el carácter del emoji, sin protección por paraguas!) . Este código solo devuelve resultados adecuados para paraguas bien formados (asume que cualquier carácter por encima de nuestro emoji es parte de un paraguas bien formado).
Aquí hay un poco de código de utilidad para escribir casos de prueba y verificar mi trabajo:
Correr
x = thrht(7)
daO
x = twht(0)
dafuente
APL, 31 bytes
Esto toma una matriz de caracteres como entrada.
Pruebas:
Explicación:
'-_-'⍷⍵
: en una matriz de ceros del tamaño de la entrada, marque la posición del comienzo de'-_-'
en la entrada con un 1.+\+\
: Ejecutar suma sobre filas. El primero se convierte0 0 0 1 0 0 ...
en0 0 0 1 1 1 ...
, el segundo luego se convierte en0 0 0 1 2 3 ...
.⍵∊'/\'
: marca todas las apariciones de '/' y '\' en la entrada con 1s.∨⌿
:or
sobre columnas. Esto marca con un 1 todas las posiciones en la última fila que están cubiertas por el paraguas.~
:not
porque necesitamos lo contrario(
...)/
...: Seleccione todas las columnas descubiertas de la matriz de suma corriente de antes,
: Obtenga una lista de todos los valores en la matriz resultante.(⍳3)∩
: Intersección entre eso y1 2 3
(esto elimina los 0 seleccionados o valores superiores, que serían espacios).fuente
Python 2,
114111 bytesUtiliza indexación basada en 0.
Pruébalo aquí .
fuente