Sumário
Uma nova linguagem de manipulação de strings foi criada, usando apenas os caracteres $+#-!*|@>! Sua tarefa é implementar um intérprete para ele no menor número possível de bytes.
Entrada
Uma string, que é uma única linha desse idioma. Isso pode ser tomado de qualquer maneira razoável (stdin, parâmetro de função, argumento de linha de comando etc.) ou como uma variável predefinida. Se o programa solicitar entrada do usuário, aceite todas as entradas solicitadas pelo stdin e nada mais, veja abaixo. Você pode assumir que é um programa válido.
Resultado
Qualquer que seja o idioma, especificações abaixo. Você deve gerar uma string, de qualquer maneira razoável (stdout, saída da função etc.) ou um valor variável. Quando o idioma sai explicitamente, isso deve ir para stdout. As brechas padrão são proibidas.
Especificações de idioma
Processamento e sintaxe
A linguagem possui uma forma muito simples de processamento, pois apenas manipula as strings: começa com uma string vazia ( "") e muda a cada termo. Um termo é composto de uma ou duas partes: uma função (abaixo) seguida de possivelmente um parâmetro (abaixo), que edita seu comportamento. Os termos são separados por pipes ( |). Você pode supor que não será um programa vazio e nenhum termo estará vazio. Você deve gerar o valor no final do programa.
Funções
O idioma possui apenas 6 funções, como mostrado abaixo. Cada função aceita um ou zero parâmetros.
+concatenar strings (pega um parâmetro de string, concatena com o valor atual)!reverter a ordem de caracteres do valor atual (sem parâmetro)*repita a string (pega um parâmetro inteiro, repete o valor atual várias vezes)-remove todas as ocorrências de um valor (pega um parâmetro de string, remove todas as ocorrências dele do valor atual)$[pseudo-] embaralha aleatoriamente o valor atual (sem parâmetro)<gera o valor atual parastdout(sem parâmetros)
Valores
Estes são os valores que podem ser passados para funções, representados por regex que os corresponderia:
@[^|]*uma string literal, incluindo qualquer caractere que não seja pipes. Pode estar vazio.#[0-9]+um literal inteiro>a próxima linha destdin. Se usado com*, converta para número inteiro.
Casos de teste
╔════════════════════════╤═════════════╤══════════════╗
║code │input │output ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|!|+@hello|*> │13 │31hello31hello║
║ │2 │ ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|+@abcdefg|$ │hello │hcloeebafdlg ║
╟────────────────────────┼─────────────┼──────────────╢
║+@how areyou|-@o|-> │w │h areyu ║
╟────────────────────────┼─────────────┼──────────────╢
║+@out|<|*#3 │ │out ║
║ │ │outoutout ║
╟────────────────────────┼─────────────┼──────────────╢
║+> │what ever 345│what ever 345 ║
╟────────────────────────┼─────────────┼──────────────╢
║+@$pe<i@l|<|-@$pe<i@l|+>│A|$o $pe<!@| │$pe<i@l ║
║ │ │A|$o $pe<!@| ║
╟────────────────────────┼─────────────┼──────────────╢
║<|+>|!|< │input text | ║
║ │ │txet tupni ║
║ │ │txet tupni ║
╟────────────────────────┼─────────────┼──────────────╢
║+@># │ |># ║
╚════════════════════════╧═════════════╧══════════════╝
Observe que o caso de teste 2 é aleatório, portanto, qualquer permutação dos caracteres nele é válida. Além disso, as saídas na tabela são separadas por novas linhas, mas seu programa não precisa fazer o mesmo. O último valor em cada caso, a saída final.
Exemplo (intérprete de python)
Experimente online! IMO melhor se você executá-lo através do IDLE ou o que você usar. (Joguei até 424 bytes depois, mas tenho certeza de que você pode fazer melhor).
<são encontrados. Isso é obrigatório?
+@>#? Eu costumava #também.