Tarefa
- Pegue um único caractere Unicode como entrada.
- Saída de um programa no mesmo idioma que também obedece a esta especificação, mas que não contém o caractere de entrada.
- Se o seu programa for executado com a entrada a , e o programa de saída for executado com a entrada b , o programa que ele emitir será PERMITIDO para conter o caractere a . No entanto, b ainda não está autorizado a aparecer neste programa. Em outras palavras, apenas a entrada na encarnação mais recente do programa é proibida de aparecer.
- Independentemente do que o título possa dizer, aplicam-se regras padrão de quine.
O programa mais curto vence. O programa deve ter pelo menos um byte.
Exemplo
Se o programa for ABCD. (# é um comentário)
> slangi "ABCD"
A
EBCD # "FBCD" "JGGJ" "UGDKJGDJK" are all OK
> slangi "EBCD"
C
ABGD # "EBGD" "UIHDAIUTD" are all OK
> slangi "ABGD"
B
AFCD
> slangi "AFCD"
Z
ABCD
Onde slangi
está um intérprete para uma linguagem fictícia.
code-golf
restricted-source
quine
Akangka
fonte
fonte
e
.e
Gadsby.Respostas:
CJam,
45413835 bytesSe o caractere de entrada não for um dos caracteres
"$&)+,/:?HOX\_`el{}
, este programa imprimirá a seguinte versão ligeiramente modificada de si mesma. Experimente online!Caso contrário, o programa imprime a seguinte versão ofuscada da modificação. Experimente online!
Observe que alguns dos caracteres não são imprimíveis. Experimente online!
Como funciona
No primeiro programa de saída possível, evitamos
~
usá-lo no outro programa. Portanto, em vez de_~
, o programa modificado termina comOX$_?
, que funciona da seguinte maneira.Finalmente, no programa de saída restante,
agrupa todos esses caracteres em uma matriz, pressionando a sequência a seguir.
If-
subtrai 18 de cada código de caractere, pressionando a stringqual
~
avalia.fonte
JavaScript (ES6),
356340327308303263Agora, usando
Function`...```
o segundo programa:A função se comporta em um dos três programas possíveis:
O primeiro programa chama
eval
uma string literal contendo o código da função com cada caractere escapado como um valor octal.O segundo programa redireciona o navegador para um
javascript:
URL que contém o código da função com cada URL de caractere codificado. Esta é a única maneira que eu poderia pensar em avaliar o código sem usar parênteses. Ele também escapa as letras em 'eval'.O último programa é dolorosamente longo. Ele cria o código da função adicionando um (
+9-8
) de cada vez para obter o código de cada caractere. Isso é para evitar o uso dos dígitos octais.O programa correto é indexado pesquisando uma string cuidadosamente construída para o caractere de entrada:
Aqui está uma versão não testada e não testada. Pode não funcionar devido a novas linhas na fonte.
fonte
function f(){ ... };f()
pode ser(f=_=>{ ... })()
. Aqui está um exemplo: es6fiddle.net/iiz2nq0lf=(_=prompt())=>...;f()
. A entrada é armazenada como_
.Function`[code]`.call``;
trabalho para você, em vez de redirecionar? Aqui está um exemplo de trabalho: es6fiddle.net/ij023v49 (See No?evil()
Erm, eu quero dizer!eval()
...)this
objeto será essa sequência de modelo vazia. Ele se baseia noFunction
construtor, que permite criar uma função, em vez de executareval()
. A função terá o código contido no primeiro parâmetro. Eu uso muito para obter o realwindow
, usandoFunction('return this')()
. Como você não pode usar()
, eu abusei um pouco da gentileza do ES6 para tentar cuspir uma função utilizável que você pode executar sem()
. Para isso, você precisa do.call()
método, que chama a função com um novothis
objeto.