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).
fonte
<
são encontrados. Isso é obrigatório?+@>#
? Eu costumava#
também.Respostas:
Ruby
-palF\|
,146142 bytesExperimente online!
Resposta Python do porto de Chas Brown . Não imprime novas linhas após a saída.
Como sempre, a versão Ruby 2.6 será 2 bytes mais curta com indexação de intervalo sem fim (
i[2..]
).fonte
R ,
287286273269 bytesExperimente online!
Código desenrolado e explicação:
fonte
Python 2 ,
215219209208 bytesExperimente online!
-4 porque
raw_input
é necessário.9 bytes graças à incorporação da ignorância ; 1 byte apenas do Ascii .
fonte
raw_input
. Corrija-me se eu estiver errado ..input([prompt])
Equivalente a eval (raw_input (prompt)). Esta função não captura erros do usuário. Se a entrada não for sintaticamente válida, um SyntaxError será gerado.C # (compilador interativo do Visual C #) , 305 bytes
Experimente online!
fonte
Perl 5
-MList::Util=shuffle -pF/\|/
,220217210183 bytesExperimente online!
fonte
Javascript,
292267 bytesJSFiddle
fonte