( Inspirado por este desafío ).
Digamos que tenemos una cadena ABBCBA
. Podemos decir que hay un aumento entre A
y B
, para lo B
siguiente A
; podemos decir que hay una carrera entre B
y B
, porque nada cambia; y finalmente podemos decir que hay una caída entre C
y B
. Podemos dibujar un gráfico como este:
A B B C B A
Rising: o o
Continuing: o
Falling: o o
Sin las etiquetas y minimizando los espacios en blanco:
o o
o
oo
Esta es la salida esperada para la entrada ABBCBA
.
Puede usar cualquier carácter que no sea un espacio en blanco para reemplazar o
en la salida. Además, cada columna puede tener opcionalmente un espacio adicional entre ellas, de esta manera:
o o
o
o o
La entrada constará de al menos tres caracteres. La cadena consistirá completamente en letras mayúsculas, pero en su lugar puede usar letras minúsculas.
Casos de prueba
TEST CASE
LINE 1
LINE 2
LINE 3
HELLOWORLD
o oo o
o
o o oo
TESTCASE
oo o
o oo o
EXAMINATION
o o o o o
o o o o o
ZSILENTYOUTH
o ooo o
oo o o oo
ABC
oo
ABCBA
oo
oo
o
s consecutivo o la salida tiene que ser compacta?Respuestas:
Jalea , 11 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
Mathematica,
93836864 bytes(usos
0
, noO
)Explicación
Obtiene la posición en el alfabeto de cada carácter de la entrada.
Toma la diferencia entre cada elemento consecutivo y toma el signo (
-1
para negativo / descendente,0
para 0 / continuo,1
para positivo / ascendente)Inserta a
0
en una lista de dosNull
s, en la primera posición si sube, en el medio si continúa, y en la tercera posición si cae.Formatea la salida.
Si la salida pudiera verse diferente de la de la pregunta, el código anterior podría acortarse a 41 bytes:
... que crea algo como esto (para "ABBCBA"):
fuente
MATL ,
15, 14 bytesPruébalo en línea!
Explicación:
Dicen que una imagen vale más que mil palabras, así que aquí hay un intérprete beta en línea que le muestra el valor en la parte superior de la pila en vivo a medida que se actualiza. Tenga en cuenta que todavía está en beta, por lo que es posible que deba ejecutar varias veces.
Entonces, primero, llamamos
dZS
.d
nos da la diferencia entre cada elemento consecutivo yZS
nos da el signo (-1, 0 o 1) de cada elemento. Entonces, con 'HELLOWORLD' como entrada, después del primer paso tendremos:Ahora, solo usamos
q
para disminuir esto y obtener:Y luego dos veces duplicamos la parte superior de la pila e incrementamos la matriz (
tQ
).Ahora todos los '0' son donde queremos generar un carácter. Entonces, unimos estas tres matrices en una matriz (
v
), y lo negamos lógicamente (~
). Luego multiplicamos cada valor en la matriz por el valor ASCII de 'O', (79*
) y lo mostramos como una cadena conc
.fuente
Haskell, 63 bytes
Devuelve una lista de tres cadenas, que representan las líneas de salida. No contiene mensajes subliminales.
dianne ahorró tres bytes usando
do
notación y enmax
lugar de una lista de comprensión ylast
.fuente
['o'|b e y]
..CJam , 19 bytes
Usos en
0
lugar deo
.Pruébalo en línea!
Explicación
fuente
Python 2,
7671 bytesGracias a @xnor por notificarme que está permitido devolver una lista de cadenas.
Pruébalo en Ideone .
fuente
lambda
.JavaScript (ES6),
9695898782 bytes2 bytes guardados usando en
0
lugar deo
, como lo sugiere Conor O'Brien26 bytes guardados gracias a ETHproductionsfuente
'o'
con0
ayuda?s=>[1,0,-1].map(k=>[...s].map(c=>(r=p?(c>p)-(c<p)-k&&' ':'',p=c,r),p=0).join``).join`\n`
que funcionaría, ahorrando 2 bytes.s=>[1,0,-1].map(k=>[...s].map((c,i)=>(p=s[i-1])?(c>p)-(c<p)-k&&' ':'').join``).join`\n`
.s.replace
también te ahorrará varios bytes[...s].map().join()
.Perl, 47 bytes
Incluye +1 para
-p
Dar entrada en STDIN:
bumpy.pl
:fuente
MATL,
1614 BytesPruébalo en línea!
Esto surgió de una discusión sobre la respuesta de DJMCMahem . Aunque esta respuesta tiene
2 caracteres más dela misma longitud, el método es algo diferente por lo que puede ser de interés independiente.Gracias a Luis Mendo por su sugerencia de guardar 2 bytes (ver comentarios)
Explicación:
'dZS' obtiene un vector donde cada entrada es el signo de las diferencias entre los caracteres sucesivos, luego 'qq_' disminuye cada entrada en dos y voltea el signo, por lo que ahora si el carácter aumenta es 1, si permanece igual 2, y si disminuye 3. Por ejemplo,
Luego, 't' hace una copia del vector anterior en la pila, luego 'n:' coloca el vector [1,2,3,4, ...] también en la pila. Entonces '79' coloca el valor 79 en la pila. El valor 79 se elige porque es el número para el carácter unicode 'o', que será nuestro resultado más adelante. (Gracias a Luis Mendo por la idea de poner el valor 79 aquí en lugar de más tarde)
En este punto, tenemos precisamente los índices de fila, los índices de columna y el valor distinto de cero de una matriz dispersa que tiene el valor 79 donde queramos el carácter de salida, y 0 donde queramos espacios en blanco. Quitamos estos tres elementos de la pila y creamos esta matriz dispersa con el comando 'Z?' De matriz dispersa de MATL. Es decir,
Todo lo que queda es convertir la matriz de números a caracteres unicode, que se realiza mediante el comando 'c'. Los 79 se convierten en 'o', y los 0 se convierten en espacios:
La matriz de caracteres resultante se muestra implícitamente.
fuente
PHP, 95 bytes
1.Cree una matriz de cadenas con la alternativa de índice -1 a 1
$b=array_fill(-1,3," ");
2.Rellenar las cadenas que dependen del operador de la nave espacial y la posición de la entrada.
3.Salida únete a la matriz con una nueva línea
First Way 111 Bytes
Usar el operador de nave espacial operador de
<=>
nave espacialfuente
~õ
es un atajo útil para"\n"
. ¡No en serio!" "
, que puede ser~ß
. Ejemplo. Desea configurar la codificación de su navegador en Latin-1 cuando vea estos.JavaScript (ES6), 81 bytes
Escrito desde cero, aunque fue fuertemente inspirado por la respuesta de @ Arnauld . Utiliza la recursividad para calcular el contenido de cada fila.
fuente
Ruby,
6664 bytesVéalo en eval.in: https://eval.in/649503
fuente
Java 7,
158156bytes2 bytes guardados gracias a @Frozn .
Sin golf y casos de prueba:
Pruébalo aquí
Salida:
fuente
a,b,c=b=a=""
sería más corto.Clora (20 bytes)
<IN?o ;=IN?o ;>IN?o
Explicación:
Hay 3 programas Clora, uno para cada línea de salida.
Primer programa,
<IN?o
Verifique si el carácter de entrada actual
I
es más pequeño<
que el siguiente carácterN
. Guarde el resultado en una bandera global. Verifique el resultado del indicador?
y, si es verdadero, la salidao
, de lo contrario, un espacio en blanco (sí, hay un espacio en blanco allí.Todos los demás programas, siguen la misma regla y están separados por
;
, cada programa se ejecuta y recibe la entrada como argumento.Puede probarlo usted mismo, incluido clora.js y ejecutarlo con
fuente
Pyth, 21 bytes
Un programa que toma la entrada de una cadena sin comillas en STDIN e imprime el resultado.
Esto usa una idea similar a la respuesta CJam de @ MartinEnder .
Pruébelo en línea o verifique todos los casos de prueba .
Cómo funciona
fuente
PHP 7,
818077 bytesNota: utiliza la codificación de Windows-1252
Corre así:
Explicación
Itera sobre líneas (numeradas
1
,0
,-1
). Luego itera sobre la cadena de entrada para cada línea. Cuando el resultado de la comparación de la nave espacial es igual al número de línea, genera uno
, de lo contrario, genera un espacio. Después de cada línea, imprima una nueva línea.Ajustes
$x
sea-1
, lo que podemos encontrar por negación binaria (resultado0
). Guarda un byte en comparación con la suma1
(o 2 con pre-incremento).$argn
fuente
-d error_reporting=30709
a su conteo de bytes.2>/dev/null
, pero eso eliminará TODOS los errores, incluidos los fatalesIf you get warnings, set the default value with ...
. Por favor disculpe mi pedantery; No descifré ese valor.Lua
326303 bytes tl = 0 s = io.read () o1, o2, o3 = "", "", "" t = {} para i = 1, # s hacen t [i] = s: sub (i , i) tl = tl + 1 final para v = 1, tl-1 si t [v] t [v + 1] entonces o1 = o1 .. "" o2 = o2 .. "" o3 = o3 .. " o "end end print (o1 .." \ n ".. o2 .." \ n ".. o3)Una versión sin golf
fuente
t1 = 0
. at1=0
? Y lugares similares.R, 114 bytes
Una respuesta R no competitiva.
Explicación
#
si las diferencias son>0
,==0
o<0
.fuente