( Inspirado por este desafio .)
Digamos que temos uma string ABBCBA
. Podemos dizer que há um aumento entre A
e B
, a B
seguir A
; podemos dizer que há uma corrida entre B
e B
, para nada muda; e finalmente podemos dizer que há uma queda entre C
e B
. Podemos desenhar um gráfico como este:
A B B C B A
Rising: o o
Continuing: o
Falling: o o
Sem os rótulos e minimizando o espaço em branco:
o o
o
oo
Esta é a saída esperada para entrada ABBCBA
.
Você pode usar qualquer caractere que não seja de espaço em branco para substituir o
na saída. Além disso, cada coluna pode opcionalmente ter um espaço extra entre elas, assim:
o o
o
o o
A entrada consistirá em pelo menos três caracteres. A sequência será composta inteiramente por letras maiúsculas, mas você poderá usar letras minúsculas.
Casos de teste
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 consecutivos ou a saída precisa ser compacta?Respostas:
Gelatina , 11 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
Mathematica,
93836864 bytes(usa
0
, nãoO
)Explicação
Obtém a posição no alfabeto de cada caractere da entrada.
Toma a diferença entre cada elemento consecutivo e recebe o sinal (
-1
para negativo / decrescente,0
para 0 / contínuo,1
positivo / crescente)Insere a
0
em uma lista de doisNull
s, na primeira posição se estiver subindo, no meio se continuar e na terceira posição se estiver caindo.Formata a saída.
Se a saída puder parecer diferente da da pergunta, o código acima poderá ser reduzido para 41 bytes:
... que cria algo parecido com isto (para "ABBCBA"):
fonte
MATL ,
15, 14 bytesExperimente online!
Explicação:
Dizem que uma imagem vale mais que mil palavras, então aqui está um intérprete beta online que mostra o valor no topo da pilha ao vivo à medida que é atualizado. Observe que ele ainda está na versão beta, portanto, pode ser necessário executar várias vezes.
Então, primeiro, chamamos
dZS
.d
nos dá a diferença entre cada elemento consecutivo eZS
nos fornece o sinal (-1, 0 ou 1) de cada elemento. Portanto, com 'HELLOWORLD' como entrada, após o primeiro passo, teremos:Agora, usamos apenas
q
para diminuir isso e obter:E então duas vezes duplicamos a parte superior da pilha e incrementamos a matriz (
tQ
). Depois disso, teremosAgora, todos os '0's são onde queremos gerar um caractere. Então, juntamos essas três matrizes em uma matriz (
v
) e a negamos logicamente (~
). Em seguida, multiplicamos cada valor na matriz pelo valor ASCII de 'O', (79*
) e o exibimos como uma sequência comc
.fonte
Haskell, 63 bytes
Retorna uma lista de três strings, representando as linhas de saída. Não contém mensagens subliminares.
dianne salvou três bytes usando
do
notação emax
não uma compreensão de lista elast
.fonte
['o'|b e y]
...CJam , 19 bytes
Usa em
0
vez deo
.Experimente online!
Explicação
fonte
Python 2,
7671 bytesAgradeço ao @xnor por me notificar que é permitido retornar uma lista de strings.
Teste em Ideone .
fonte
lambda
.JavaScript (ES6),
9695898782 bytes2 bytes salvos usando em
0
vez deo
, como sugerido por Conor O'Brien26 bytes salvos graças a ETHproductionsfonte
'o'
por0
alguma ajuda?s=>[1,0,-1].map(k=>[...s].map(c=>(r=p?(c>p)-(c<p)-k&&' ':'',p=c,r),p=0).join``).join`\n`
iria funcionar, economizando 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
você também economizará vários bytes[...s].map().join()
.Perl, 47 bytes
Inclui +1 para
-p
Dê entrada no STDIN:
bumpy.pl
:fonte
MATL,
1614 bytesExperimente online!
Isso surgiu de uma discussão sobre a resposta do DJMCMahem . Embora essa resposta tenha
dois caracteres como mesmo tamanho, o método é um pouco diferente, portanto pode ser de interesse independente.Agradecemos a Luis Mendo por uma sugestão de salvar 2 bytes (ver comentários)
Explicação:
'dZS' obtém um vetor em que cada entrada é o sinal das diferenças entre caracteres sucessivos, então 'qq_' diminui cada entrada em dois e vira o sinal; agora, se o caractere aumentar, será 1, se permanecer o mesmo 2, e se diminuir 3. Por exemplo,
Em seguida, 't' faz uma cópia do vetor anterior na pilha e, em seguida, 'n:' coloca o vetor [1,2,3,4, ...] na pilha também. Então '79' coloca o valor 79 na pilha. O valor 79 é escolhido porque é o número do caractere unicode 'o', que será a nossa saída mais tarde. (Obrigado a Luis Mendo pela idéia de colocar o valor 79 aqui em vez de mais tarde)
Nesse ponto, temos precisamente os índices de linha, índices de coluna e valor diferente de zero de uma matriz esparsa que tem o valor 79 onde quer que desejemos o caractere de saída e 0 onde quer que deseje produzir espaço em branco. Retiramos esses três itens da pilha e criamos essa matriz esparsa com o comando de matriz esparsa do MATL 'Z?'. Isso é,
Tudo o que resta é converter a matriz de números em caracteres unicode, o que é feito pelo comando 'c'. Os 79 se tornam 'o' e os 0 se tornam espaços:
A matriz resultante de caracteres é exibida implicitamente.
fonte
PHP, 95 bytes
1.Crie uma matriz de strings com o índice -1 a 1 alternativo
$b=array_fill(-1,3," ");
2. Preencha as cordas dependentes do operador da nave espacial e a posição da entrada
3.Output juntar a matriz com uma nova linha
Primeira maneira 111 bytes
Use o operador de nave espacial operador de
<=>
nave espacialfonte
~õ
é um atalho útil para"\n"
. Não, sério!" "
, o que pode ser~ß
. Exemplo. Você deseja definir a codificação do navegador como Latin-1 ao visualizá-las.JavaScript (ES6), 81 bytes
Escrito do zero, embora tenha sido fortemente inspirado pela resposta de @ Arnauld . Usa recursão para calcular o conteúdo de cada linha.
fonte
Ruby,
6664 bytesVeja-o em eval.in: https://eval.in/649503
fonte
Java 7,
158156 bytes2 bytes salvos graças a @Frozn .
Casos não testados e de teste:
Experimente aqui.
Saída:
fonte
a,b,c=b=a=""
seria mais curto.Clora (20 bytes)
<IN?o ;=IN?o ;>IN?o
Explicação:
Existem 3 programas Clora, um para cada linha de saída.
Primeiro programa,
<IN?o
Verifique se o caractere de entrada atual
I
é menor<
que o próximo caractereN
. Salve o resultado em um sinalizador global. Verifique o resultado do sinalizador?
e, se for verdadeiro, produzao
, ou então um espaço em branco (sim, existe um espaço em branco lá.Todos os outros programas seguem a mesma regra e são separados por
;
, todo programa é executado e recebe a entrada como argumento.Você pode testá-lo sozinho, incluindo clora.js e executá-lo com
fonte
Pitão, 21 bytes
Um programa que recebe a entrada de uma sequência não citada em STDIN e imprime o resultado.
Isso usa uma idéia semelhante à resposta CJam do @ MartinEnder .
Experimente online ou Verifique todos os casos de teste .
Como funciona
fonte
PHP 7,
818077 bytesNota: usa codificação Windows-1252
Execute assim:
Explicação
Itera sobre linhas (numeradas
1
,0
,-1
). Em seguida, itera sobre a sequência de entrada para cada linha. Quando o resultado da comparação da nave espacial for igual ao número da linha, emita umo
, caso contrário, faça a saída de um espaço. Após cada linha, imprima uma nova linha.Tweaks
$x
é-1
, o que podemos encontrar por negação binária (resultado0
). Salva um byte comparado à adição1
(ou 2 com pré-incremento).$argn
fonte
-d error_reporting=30709
à sua contagem de bytes.2>/dev/null
, mas que vai se livrar de erros de todos, inclusive fatalIf you get warnings, set the default value with ...
. Por favor, desculpe meu pedantério; Eu não decodifiquei esse valor.Lua
326303 bytes tl = 0 s = io.read () o1, o2, o3 = "", "", "" t = {} para i = 1, # s faça t [i] = s: sub (i , i) tl = tl + 1 final para v = 1, tl-1 faz se t [v] t [v + 1] então o1 = o1 .. "" o2 = o2 .. "" o3 = o3 .. " o "impressão final final (o1 .." \ n ".. o2 .." \ n ".. o3)Uma versão não destruída
fonte
t1 = 0
,? parat1=0
? E lugares semelhantes.R, 114 bytes
Uma resposta R não concorrente.
Explicação
#
se as diferenças forem>0
,==0
ou<0
.fonte