Corrija as Meeesesessessesseesseessedessed upp teeexexextext


38

Isso é inspirado no Monday Mini-Golf # 6: Meeesesessess upp teeexexextext

fundo

As produções da ETH têm dificuldade em inserir texto em sua página usual. Sempre que ele usar dígitos ou letras, o texto será menesessessessesseesseessessed. Sua tarefa é ajudá-lo a digitar para que o comportamento normal seja alcançado.

A transformação

A transformação afeta execuções de [0-9A-Za-z]caracteres alfanuméricos ( ) delimitados por caracteres não alfanuméricos. No exemplo a seguir, a primeira linha seria transformada na segunda (as outras linhas mostram o detalhamento da transformação)

An12num:
Annn1n12n12nn12nn12nun12nun12numn12num
A
 nn
   n1
     n12
        n12nn12n
                n12nun12nu
                          n12numn12num

Em particular, qualquer caractere alfanumérico após o primeiro de uma corrida será transformado em toda a corrida até agora, exceto o primeiro caractere . Além disso, se o caractere for uma letra (em oposição a um dígito), o caractere será transformado em duas vezes a execução.

Felizmente, o backspace excluirá o último caractere e também redefinirá o início da execução.

Tarefa

Desta vez, sua tarefa não é realizar a transformação. Em vez disso, dada uma sequência de entrada, você deve retornar um texto codificado que, se transformado, resultará na entrada. A saída deve ser o mais curta possível, \<char>contada como um único caractere.

O texto é codificado da seguinte forma:

\                   -> \\
backspace character -> \b
linefeed            -> \n

Você pode escrever um programa ou função, recebendo entrada via STDIN (ou alternativa mais próxima), argumento da linha de comando ou argumento da função e emitindo o resultado via STDOUT (ou alternativa mais próxima), valor de retorno da função ou parâmetro da função (saída).

Casos de teste

Cada caso de teste é de duas linhas, sendo a primeira entrada e a segunda saída.

Heeeeeelp me. It shouldn't be messed up.
Hee \blp\b me\b. It\b sh\bou\bld\bn't be\b me\bss\bed\b up\b.

alert("Hello, world!");
al\ber\bt("He\bll\bo, wo\brl\bd!");

1223234234523456
123456

6
Está bem definido, mas por que não há resposta?
Akangka

1
De alguma forma eu senti falta disso; bom spin-off! Talvez eu tente escrever uma resposta mais tarde.
ETHproductions

Isso me faz lembrar do tempo um amigo meu enviou texto através de UDP
TRGWII

1
Acho que seu caso de teste final precisa de uma correção. Você inclui o primeiro caractere ( 1sempre) nas execuções.
Leif Willerts

Sinceramente, não entendo o que devo fazer ... Desculpe. Você poderia adicionar algumas entradas e saídas e adicionar alguns exemplos com a explicação? Desculpe.
Yassin Hajaj

Respostas:


10

CJam, 207

{_,1>{:E1<_0{:I2$,+E=:C+:R1>C'9>)*+:P,E,<{EP#{L0}{PRI)1}?}{PE#L{R8cP,E,-*+}?0}?}g}&}:U;LqS+'a+{_'[,_el^A,s+&,V={+}{s\V!:V{L{:BU_aL?B,,1>Bf{_2$<U_{_W=8>S8c+*+\@>j+}{?;}?}+{,}$0=}j}|\}?}%s'\8cN++'\"\bn"f+er-2<

Experimente online

Explicação:

Quase esqueci de escrever isso: p

O problema é resolvido em várias etapas:

  • o texto é separado em séries de caracteres alfanuméricos (vamos chamá-las de palavras) e séries de caracteres não alfanuméricos (não-palavras)
  • as não palavras são impressas como estão e as palavras são fixas
  • a correção de uma palavra é feita recursivamente (com memorização): divida a palavra em 2 partes de todas as formas possíveis (incluindo a segunda parte vazia), tente descomprimir a primeira parte (veja abaixo), corrija a segunda parte e junte os resultados com um espaço -backspace, se necessário; pegue a menor solução secundária
  • desmembrar um pedaço significa encontrar uma sequência mínima de caracteres alfanuméricos, possivelmente seguidos por alguns retrocessos (mas sem retrocessos no meio) que, quando desarrumados, resultam no pedaço indicado; isso é feito com um algoritmo simples e ganancioso, indo da esquerda para a direita, construindo a cadeia não atendida e sua versão desarrumada em paralelo e determinando o próximo caractere necessário a cada etapa; alguns pedaços não podem ser removidos

1
Vaca sagrada ... esse é um programa do CJam! Bom trabalho.
ETHproductions
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.