Jimmy precisa da sua ajuda!

17

Parece que recentemente, houve muitos Jimmys caindo à morte, como pode ser visto aqui , e aqui onde você foi convidado a determinar se Jimmy cairia. É hora de acabar com essa loucura e tentar salvar Jimmy.

Jimmy tem três partes do corpo /, oe \dispostas como este

/o\

As plataformas são representadas por -. Jimmy cairá da plataforma se tiverem duas ou mais partes do corpo que não estão diretamente acima da plataforma.

Alguns exemplos:

   /o\
- -------

Jimmy vai equilibrar uma vez que todas as partes do corpo estão acima de -.

   /o\
    ------   ---

Jimmy vai equilibrar uma vez que duas partes do corpo estão acima de -s.

 /o\
-- ----  --

Jimmy se equilibrará mesmo estando divididos entre duas plataformas

  /o\
   -

Jimmy não estará equilibrado, pois duas partes do corpo não estão acima de uma plataforma.


Como o suprimento de minha plataforma está acabando, só tenho plataformas com um comprimento de 5 e é importante usar o mínimo possível.

Sua tarefa é pegar uma entrada do Jimmys e gerar uma série de plataformas que salvarão todos os Jimmys na entrada. Sua saída deve usar o menor número possível de plataformas, mas cada plataforma deve ter 5 -'de largura.

Observe que a regra da plataforma sendo 5 de -largura significa que cada plataforma deve ter um espaço entre elas. ----------não é válido na saída, pois será considerada uma plataforma de comprimento 10 e não duas plataformas de comprimento 5.

Casos de teste

/o\  /o\/o\    // input
----- -----    // output
/o\           /o\
-----       -----
/o\           /o\      // same input as above
-----          -----   // this is also valid output
    /o\ /o\
     -----

Aplicam-se regras padrão.

Este é o código-golfe, que a resposta mais curta ganhe!

Quinn
fonte
2
@Veskah, desde que todos os Jimmys sejam salvos usando o menor número possível de plataformas, a posição não importa, portanto haverá várias saídas válidas para cada entrada. Não há condição de quantos Jimmys haverá na entrada; uma sequência vazia seria uma entrada válida.
Quinn
3
O caso de teste 4 parece um rosto assustador #
Data expirada
2
Acompanhamento: coloque o maior número possível de Jimmys nas plataformas, de forma que não caiam.
val diz Reintegrar Monica
2
@val que é realmente uma das questões ligadas - Segui-se depois que um: P
Quinn
7
Eu posso ver tantos acompanhamentos de Jimmy no futuro.
connectyourcharger

Respostas:

2

Carvão , 17 15 bytes

W‹ⅈLθ«×⁵№o\§θⅈ→

Experimente online! Link é a versão detalhada do código. Explicação:

W‹ⅈLθ«

Repita enquanto a posição do cursor é menor que o comprimento da entrada.

×⁵№o\§θⅈ

Se o caractere nessa posição na entrada for um oou a \, imprima 5 -s.

Vá para o próximo personagem, garantindo assim pelo menos um espaço entre as plataformas.

A solução anterior de 17 bytes é IMHO mais "Carvão-y".

θ⸿Fθ«×⁵¬№ /⊟KD²↑→

Experimente online! Link é a versão detalhada do código. A saída inclui entrada, demonstrando assim a correção da solução. Explicação:

θ⸿

Imprima a entrada e vá para o início da próxima linha.

Fθ«

Passe por todos os caracteres da entrada para garantir que nenhum Jimmy seja esquecido.

×⁵¬№ /⊟KD²↑

Veja o caractere acima do cursor. Se não houver, ou se houver espaço ou /, não faça nada; caso contrário, imprima 5 -s.

Vá para o próximo personagem, garantindo assim pelo menos um espaço entre as plataformas.

Neil
fonte
7

Python 2 , 70 67 bytes

lambda s:S('/',' ',S("\S.{5}","----- ",s+' '*5))
import re;S=re.sub

Experimente online!

-3 bytes graças a Kevin Cruijssen & Neil

Não é a mais bonita, não sabe como lidar melhor com as sobras de barras ...

Infelizmente, não podemos substituir as duas extremidades de cada plataforma por espaços usando uma única re.subchamada, porque no caso de duas plataformas estarem separadas por um espaço, a diferença entre elas não pode ser correspondida mais de uma vez. Uma asserção lookahead / lookbehind não ajudará, porque qualquer coisa que corresponda a essas asserções não será substituída.

Usando uma única re.subreferência:

Python 3.8 (pré-lançamento) , 78 bytes

lambda s:[s:=re.sub(".[^/ -].{5}"," ----- ",s+"  ",1)for c in s][-1]
import re

Experimente online!

sete negativos
fonte
69 bytes substituindo primeiro oe, em /seguida, o [^ ].
Kevin Cruijssen 08/07/19
@ O golfe sugerido por Neil na minha resposta Retina também funciona para você: 67 bytes .
Kevin Cruijssen 08/07/19
4

JavaScript (ES6),  56 55  54 bytes

s=>[...s+1e4].map(c=>(s--?s:s=c>{}&&5)?'-':' ').join``

Experimente online!

Ou 47 bytes, se o retorno de uma matriz de caracteres for aceitável.

Arnauld
fonte
2

Python 3 , 158 164 160 bytes

a=input();r=""
for i,c in enumerate(a):
 try:r[i]
 except:
  if c in"/o":
   r+=(a[i+5<len(a)and i+5or len(a)-1]=="o"and" "or"")+"----- "
  else:r+=" "
print(r)

Experimente online!

Esta é a minha primeira resposta de código de golfe, e estou feliz que esteja em uma pergunta do Jimmy!

Explicação:

  • a=input();r="": Receba entrada e inicialize uma nova string r.

  • for i,c in enumerate(a):: Enumere sobre a entrada.

  • try:r[i] ... except:: Veja se r[i]existe - caso contrário, processe o exceptbloco.

  • if c in"/o":: Verifique se o personagem atual está nas duas primeiras partes do corpo de Jimmy.

  • r+=(a[i+5<len(a)and i+5or len(a)-1]=="o"and" "or"")+"----- ": Se sim, adicione um novo segmento. Adicione um espaço antes do nosso novo segmento se outro cabeçote Jimmy estiver presente em cinco caracteres.

  • else:r+=" ": Caso contrário, basta adicionar um espaço.

  • print(r): Imprima nosso resultado final.

conecte seu carregador
fonte
Bem perto, mas acho que isso realmente não funciona para todos os casos de teste. Ele deve usar o menor número possível de plataformas e seu último exemplo usa 2 quando isso poderia ser feito com 1
Quinn
@Quinn Shoot. Erre, não concorra até que eu conserte isso.
connectyourcharger
@connectyourcharger "não concorrente" não valida uma solução inválida. Eu recomendo excluí-lo se você não for corrigi-lo por algum tempo (por exemplo, nos próximos minutos).
Erik the Outgolfer
@ Quinn eu consertei agora.
connectyourcharger
@connectyourcharger Nice!
Quinn
2

Retina , 23 21 bytes

/

$
5* 
\S.{5}
5*- 

-2 bytes graças a @Neil .

Contém um espaço à direita na segunda, quarta e sexta linhas.

Porto da resposta do Python 2 do @negativeSeven , por isso não deixe de votar nele!

Experimente online.

Explicação:

Substitua tudo "/"por " ":

/
 

Anexar 5 espaços à direita:

$
5* 

Substitua todas as substrings de tamanho seis que não começam com um espaço por "----- ":

\S.{5}
5*- 
Kevin Cruijssen
fonte
Você pode usar em \Svez de [^ ]?
Neil
@ Neil Ah, é claro. Obrigado!
Kevin Cruijssen 08/07/19
1

Geléia , 35 bytes

;3x5¤;0;ṛṫ6ɗ
;⁶x5¤e€⁾o\œṡ1ç/$ÐLị⁾- 

Experimente online!

Um link monádico que recebe a entrada como uma sequência e retorna uma sequência Jelly com as plataformas.

Inspira-se na resposta de @ negativeseven .

Nick Kennedy
fonte
1

05AB1E , 25 24 bytes

ð5׫'/ð:DŒ6ùʒнðÊ}'-5×ð«:

Porto da resposta do Python 2 do @negativeSeven , por isso não deixe de votar nele!

Experimente online ou verifique todos os casos de teste .

Explicação:

ð5׫                      # Append 5 trailing spaces to the (implicit) input-string
    '/ð:                 '# Replace all "/" with a space
        D                 # Duplicate the string
         Œ                # Get all substrings of this
          6ù              # Only leave those of length 6
            ʒ   }         # Filter it further by:
             нðÊ          #  Only keep those which do NOT start with a space
                 '-5×ð«  '# Push a string of 5 "-" appended with a space: "----- "
                       :  # Replace in the initially duplicated string all substrings 
                          # remaining in the list with this "---- "
Kevin Cruijssen
fonte
1

Japonês , 23 22 bytes

Uma porta da solução JS da Arnauld que estou exausta demais para testar completamente. Se for inválido, um diamante pode ser excluído?

+L² £=U´?U:X>M©5)?'-:S

Tente

Shaggy
fonte