Aquí hay un ejemplo de una entrada de monolitos . Hay 4 en este ejemplo.
_
| | _
| | _ | |
| | | | | | _
_| |_| |___| |____| |_
El primer monolito tiene 4 unidades de altura, el segundo es 2, el tercero es 3 y el último es 1.
La tarea
Su programa debería generar las alturas de los monolitos en orden de izquierda a derecha. El formato de salida puede estar en cualquier tipo de lista o matriz.
Notas
- La entrada se puede tomar como cualquier cadena dimensional, lista de cadenas o lista de caracteres.
- Este es el código de golf , por lo que gana los bytes más bajos .
- Debe suponer que los monolitos siempre tienen el mismo ancho y siempre están al menos a 1
_
distancia de otro. - Pueden venir en cualquier altura y en cualquier cantidad.
I / O
_
| | _
| | _ | |
| | | | | | _
_| |_| |___| |____| |_ >> [4,2,3,1]
_
| |
_ | |
| | _ | | _
_| |_| |__| |_| |_ >> [2,1,4,1]
_ _ _
| |_| |_| |_____ >> [1,1,1]
____________________ >> undefined behavior
_
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | >> [11]
_ _ _ _ _
_ | | _ | | _ | | _ | | _ | |
| |_| |_| |_| |_| |_| |_| |_| |_| |_| | >> [1,2,1,2,1,2,1,2,1,2]
[10]
No es tu monolito[11]
?Respuestas:
Jalea , (8?) 9 bytes
Un enlace monádico que acepta una lista de caracteres como se especifica y devuelve una lista de enteros.
Nota: 8 bytes si una lista de cadenas, una por línea, realmente tenía la intención de ser un formato de entrada permitido, simplemente elimine el
Ỵ
.Pruébalo en línea!
¿Cómo?
fuente
Jalea , 11 bytes
Pruébalo en línea!
fuente
JavaScript (ES6),
7978 bytes-1 byte gracias a @Shaggy
Toma la entrada como una matriz de cadenas.
Fragmento de prueba
fuente
a=>a.map((x,y)=>x.replace(/_/g,(_,z)=>c[z]=a.length-y-1),c=[])&&c.filter(n=>n)
replace
. ¡Gracias!C ++,
171169 bytesPruébalo en línea!
C ++ (GCC), 150 bytes
Gracias a @aschepler!
Pruébalo en línea!
fuente
f(auto s)
y especificar que toma cualquier contenedor de acceso aleatorio de contenedores de acceso aleatorio dechar
.05AB1E , 11 bytes
Pruébalo en línea!
ζ
ha sido reemplazado por.Bø
TIO ya que aún no se ha extraído allí.fuente
Dyalog APL, 29 bytes
Corre con
⎕IO←0
.Pruébalo en línea!
¿Cómo?
⌽⍵='_'
- dónde⍵
está'_'
, primero las líneas superiores×
- multiplicar por ...(⍳≢⍵)
- el rango de⍵
(indexado a cero)↑¨
- para cada línea, pad con ceros por ...(⌈/⍴¨⍵)
- la longitud máxima↑+/
- Sumar las filas con cremallera y aplanar0~⍨
- elimina cerosfuente
Python 2 , 75 bytes
Pruébalo en línea!
fuente
PowerShell, 133 bytes
Parece que no es muy competitivo; hace un reemplazo de expresiones regulares para convertir las torres en columnas de 1, hace una matriz de 0 de la longitud de la cadena de entrada, luego pasa a través de las líneas sumando los 1s.
Pruebas listas para correr:
fuente
Japt , 11 bytes
¡Pruébelo en línea!
Explicación
fuente
Retina ,
4838 bytesPruébalo en línea! El enlace incluye el primer ejemplo. Explicación: una línea tiene el prefijo que recogerá los resultados. Como cada columna se elimina repetidamente por turno, las que contienen un
_
nivel sobre el suelo tienen el número de líneas restantes en la columna contada. Finalmente, las líneas ahora en blanco se eliminan. Editar: guardado 10 bytes gracias a la inspiración de @FryAmTheEggman.fuente
_
s, lo que tiene mucho más sentido que intentar usar la|
s, ¡gracias!$.%`
, y la etapa final puede ser!`\d+
. Y si cambia la primera etapa a una búsqueda anticipada, no necesita hacer un bucle.Java 8,
133117116114 bytesToma la entrada como a (← guarda 16 bytes). -2 bytes a cambio de una salida menos legible gracias a @ OlivierGrégoire al cambiar a .
String[]
char[][]
print(l-j+",")
println(l-j)
Explicación:
Pruébalo aquí.
fuente
_
si se encuentra la tienda en la ubicación y luego hacer un pedido, ignorando la fila inferior, por supuesto. Podría ayudar a guardar bytes ...new[,]
lugar de la matriz irregular que está utilizando comonew[][]
. Si tiene eso en Java, podría ahorrarle algunos bytes.System.out.println(l-j);
se ve lo suficientemente lista para que me sobra 2 bytes. Además, en la explicación, olvidó cambiarlength()
alength
(sin incidencia en el recuento de bytes, ya que es correcto en el envío).Haskell
7574 bytesLa entrada se espera como una lista de cadenas (rowwise).
fuente
Ruby , 82 bytes
Toma en una lista de líneas.
Pruébalo en línea!
fuente
APL (Dyalog) , 14 bytes
con
⎕IO←0
Pruébalo en línea!
Este tren de funciones equivalente a
{((⍳≢⍵)+.×('_'=⊖⍵))~0}
fuente
MATL , 12 bytes
La entrada es una matriz de caracteres, con un
;
separador de filas.Pruébalo en línea! O verificar todos los casos de prueba .
fuente
C #,
150144137 bytesVersión completa / formateada:
fuente
Java 8 -
229 bytes213 bytesPruébalo en línea!
Sin golf:
Woo, primer post. Cualquier ayuda para mejorarlo sería genial.
Yo sé que puedo deshacerse de ese¡Lo sabía! Jugué con la idea de cambiar los tipos en el mapa de Integer a Long, pero creo que es un callejón sin salida.indexOf
escrito dos veces.Sé que ya existe una solución Java 8 mucho mejor , pero eso toma
char[][]
como entrada, lo que creo que es más fácil de trabajar en este caso que String.fuente
Map
pero unint[]
(¿tal vez inicializado ennew int[99]
?). No es necesario un espacio despuésString[] l
:String[]l
funciona igual y es más corto. Usar enprintln(l.length-i-1)
lugar deprintln(l.length-i-1+",")
. No inicialicej
: Sólo tiene que escribir:,j;
. Si usa unint[]
como se sugirió anteriormente, declare así:int m[]=new int[99],i=0,j;
y elimine la declaración delfor-loop
.import java.util.*;s->{Map m=new TreeMap();String[]a=s.split("\n");int l=a.length-1,j=-1,i=j;for(;++i<l;)for(s=a[i];(j=s.indexOf("_",j+1))>=0;m.put(j,i));for(Object o:m.values())System.out.println(l-(int)o);}
. No es necesario usar<Integer,Integer>
el mapa cuando puedes enviar contenidoint
;a.length-1
se usa dos veces, por lo que puede usar una variable para ello; Al poner todo dentro de los bucles for, puede deshacerse de todos los corchetes. Ah, y bienvenido a PPCG! :)MATL , 10 bytes
La entrada es una matriz de caracteres acolchada.
Pruébalo en línea!
fuente
Mathematica,
484739 bytesPruébalo en línea!
Function
que espera una matriz rectangular de caracteres. TomaMost
la matriz (todos menos la última fila),Reverse
s, luego toma elTranspose
*, luego encuentra todos losPosition
s en los que_
aparece el carácter. Las alturas relevantes son losLast
elementos de cada unoPosition
.*
es el3
carácter de uso privado de bytesU+F3C7
que representa\[Transpose]
en Mathematica. Tenga en cuenta que esto no funciona en matemáticas , por lo que solo usa el enlace TIOTranspose
.fuente
SOGL V0.12 , 9 bytes
Pruébalo aquí!
Toma la entrada como una matriz de matrices de cadenas (caracteres).
Explicación:
fuente
JavaScript (ES6),
10810488 bytesGuardado 16 bytes gracias a @JustinMariner
Entrada tomada como una matriz de cadenas
fuente
Array.map
, es un truco genial.exec
y guardar algunos bytes.exec
lo que coincidiría con la primera. En realidad, bloquea el editor de fragmentos de intercambio de pila si alinea la expresión regular. ¿A menos que me falte algo?CJam,
1514 bytes1 byte guardado gracias a @BusinessCat
Este es un bloque que toma una matriz de cadenas en la pila y genera una matriz.
Explicación:
fuente
Pip ,
1817 bytes15 bytes de código, +2 para
-rp
banderas.Toma información de stdin. Pruébalo en línea!
Explicación
fuente
Pyth ,
191514 bytes¡Pruébelo en línea! La entrada es una lista de líneas.
Explicaciones
fuente
Octava, 31 bytes
Toma una matriz 2D de caracteres como entrada.
¡Verifique todos los casos de prueba!
fuente
Perl 6 , 65 bytes
Pruébalo en línea!
m:exhaustive/^^(\N+)_([\N*\n]+:)/
busca en la cadena de entrada todos los guiones bajos y devuelve un objeto de coincidencia para cada uno, donde los primeros paréntesis de captura contienen la parte anterior de la línea en la que se encuentra el guión bajo, y los segundos paréntesis de captura contienen el resto de la cadena. El resto de la cadena debe contener al menos una nueva línea, por lo que no contamos los guiones bajos a nivel del suelo. La:exhaustive
bandera permite que estas coincidencias se superpongan..sort(*[0].chars)
ordena estos objetos de coincidencia por el número de caracteres en la parte de la línea que precede a cada subrayado. Esto los ordena de izquierda a derecha..map(+*[1].comb("\n"))
asigna cada objeto de coincidencia al número de caracteres de nueva línea en la parte de la cadena de entrada que sigue a cada subrayado, es decir, la altura. los\n
es un carácter de nueva línea real, que guarda un byte.fuente
PHP, 119 bytes
¡Analicemos esto! Nuestra entrada aquí es una matriz 2D de caracteres.
fuente
Toma una cuerda multilínea. El crédito para la configuración (encabezado y pie de página) va a @GarethPW
Python 2 , 29 bytes
Pruébalo en línea!
Esto simplemente dividirá la matriz por nueva línea y devolverá longitud-1.
fuente