Inverta um Quine!

11

Todos sabemos o que é uma solução . Um quine invertido é um programa não vazio que imprime o inverso de seu código-fonte sem ler seu código-fonte e consiste apenas em caracteres ASCII imprimíveis (espaço através ~).

Aqui, “inverso do código fonte” significa o seguinte: a saída do seu programa deve conter cada caractere ASCII imprimível (m - c) vezes, em que c é o número de vezes que o caractere ocorre no código e m é o máximo número de vezes que um caractere é repetido no seu código.

(Em outras palavras: seu código + sua saída = permutação de m vezes todos os ASCII imprimíveis.)

Por exemplo, se o seu programa for 12345, então m = 1 , e você deve gerar qualquer permutação dessa string:

 !"#$%&'()*+,-./06789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Se o seu programa for AAB, então m = 2 , e você deverá gerar qualquer permutação de:

  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@BCCDDEEFFGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~

Observe como há dois se faltando Ae um faltando B.

Embora um programa que contenha todos os caracteres ASCII imprimíveis e não produza nada seja um quine inverso válido (satisfazendo m = 1 ), essa resposta não seria muito competitiva, dada a sua extensão.

Você deve escrever um programa que seja uma solução invertida, conforme descrito no parágrafo acima. Como esse é o , o programa mais curto em bytes será vencedor. Boa sorte!

Gryphon
fonte
1
Espaço, tabulação e nova linha?
Stewie Griffin
11
Você deve destacar o duplicated for every repeated character in the source codeque faz toda a diferença no desafio
Rod
6
Você poderia dar um exemplo do inverso em que vários caracteres são repetidos (e várias vezes)? Diga 11234512345,?
18717 Giuseppe #
4
Como isso é uma duplicata? Relacionado, sim. Duplicar, não! É muito mais difícil nos idiomas em que você precisa ter caracteres duplicados. Observe que você também não pode duplicar uma sequência, pois o número de caracteres que você deve remover de cada sequência está variando.
Stewie Griffin
1
@StewieGriffin Eu consideraria isso VTC como "pouco claro" e não "burro", porque (quase) todas as respostas têm um comentário tentando descobrir o que duplicated for every repeated character in the source codesignifica ou se a submissão é válida para esse critério, porque o OP não abordou um algumas das perguntas aqui.
18717 Giuseppe

Respostas:

7

Flak cerebral , 221 207 bytes

Inclui +1 para -A

(((((((()()()()){}){}()){}){})()){}{}){({}[()]<((((((()()()()){}){}){})<>[()()()])[()])((((()()()){})){}{})<>((()()()()){}){({}[()]<(({})())>)}{}({}()())<>{{({}<>[()]<(({})())><>)}{}<>(({}())()())<>}<>>)}{}

Experimente online!

# Push 206 (the number of times to duplicate the output)
(((((((()()()()){}){}()){}){})()){}{})

# For 0 to 206
{({}[()]<

    # Push 32 on this stack and 18, 28 and 29 to the other
    # 18, 28 and 29 are the distances between the sets of braces 
    ((((((()()()()){}){}){})<>[()()()])[()])((((()()()){})){}{})<>

    # For 0 to 8
    ((()()()()){}){({}[()]<

        # Push TOS, TOS + 1
        (({})())

    # end For 0 to 8
    >)}{}

    # Push TOS + 2 
    # skips '(' and ')'
    ({}()())

    # For each value on the off stack (18, 28, 28)
    <>{

        # For 0 to that number
        {({}<>[()]<

            # Push TOS, TOS + 1
            (({})())

        # End for 0 to that number
        ><>)}{}

        # Push TOS + 1, TOS + 3 (skips this set of braces)
        <>(({}())()())<>

    # End for each value on the off stack (18, 28, 28)
    }<>

 # End for 0 to 206
 >)}{}
Riley
fonte
Eu acho que você deve remover apenas [cinco vezes, nem sempre. Observe que isso 2é removido apenas uma vez no exemplo. O desafio é um pouco confuso.
Stewie Griffin
Interessante como isso é drasticamente mais curto que o padrão. +1:)
James
2
Isso é realmente manco e significativamente menos interessante do que a sua resposta, mas tecnicamente, !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz {|} ~ ` obteria uma pontuação melhor: /
James
6

CJam , 17 bytes

{s95c+'|,32>\-}_~

Experimente online!

Impressões

 !"#$%&()*./014678:;<=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^`abdefghijklmnopqrtuvwxyz

Explicação

O objetivo era modificar o padrão quine

{"_~"}_~

de modo que nenhum caractere seja repetido no programa. A razão para isso é que o CJam possui um operador diferente definido que podemos usar para remover caracteres do intervalo ASCII imprimível, mas isso não leva em consideração o número de ocorrências. Implementar isso manualmente provavelmente seria mais longo, então eu precisava garantir que todos os personagens aparecessem apenas uma vez e não precisássemos nos preocupar com as ocorrências.

{      e# Quine framework. Executes the block while leaving another copy of the
       e# block on the stack.
  s    e#   Stringify the block, giving us "{s95c+'|,32>\-}".
  95c  e#   Convert 95 to a character, which gives us '_' without repeating
       e#   it in the source code.
  +    e#   Append it to the string. We don't need to worry about '~', we'll just
       e#   leave it out of the printable ASCII range to begin with.
  '|,  e#   Get a character range from the null byte up to '{'. This omits "|}~",
       e#   but those are in the program anyway, it doesn't matter.
  32>  e#   Discard the unprintable characters.
  \-   e#   Subtract the source string from the printable ASCII range.
}_~
Martin Ender
fonte
3

Python 3 , 83 bytes

print(~2/8,6>9)#!"$%&'*+14:;<=?@ABCDEGHIJKLMNOPQRSTUVWXYZ[\]^_`bcdfghjkmoquvwxyz{|}

Experimente online!

Imprime -0.375 False.

Lynn
fonte
2

05AB1E , 95 61 60 bytes (não 58 b / c não gosto desse)

A?9L<J, !"'#$%&()*+-./:;=>@BCDEFGHIKMNOPQRSTUVWXYZ[\]^_`{|}~

Experimente online!

Resposta antiga invalidada por "apenas caracteres ASCII", muitos comandos não são válidos aqui.

Imprime abcdefghijklmnopqrstuvwxyz012345678uma vez, pois não há caracteres duplicados.


Versão BCDEFGHIKMNOPQRSTUVWXYZremovida:

Trabalho em andamento ... acho que ~ 60 bytes é o mais baixo possível sem caracteres não ASCII em 05AB1E ..

05AB1E , 58 bytes

T5+FA'uK?Au"ADLJFKST"SK?9L<5KJ?} !#$%&()*>-./:;=@[]^_`{|~\

Experimente online!

Imprime a saída x12 devido aos caracteres repetidos:

['""', '55', '???', 'AAA', 'FF', 'JJ', 'KKKK', 'LL', 'SS', 'TT', 'uu']

Também não termina corretamente, trabalhando nisso agora ...


Respostas antigas inválidas (devido a caracteres não ASCII) foram removidas, consulte o histórico de edições.

Urna de polvo mágico
fonte
"Um quine invertido é um programa não vazio que imprime o inverso de seu código-fonte sem ler seu código-fonte e consiste apenas em caracteres ascii imprimíveis ". Também estava trabalhando em uma resposta 05AB1E, até perceber isso.
KSmarts
1
O @KSmarts foi corrigido ao custo de 76 bytes.
Magic Octopus Urn
2
Normalmente, em um desafio de código-golfe, seria de esperar que o 05AB1E se saísse um pouco melhor do que "bate o Java".
KSmarts
O @KSmarts encolhe os ombros se você não permite que os esolangs competam facilmente por definição, você merece uma resposta sarcástica e sarcástica: P.
Magic Octopus Urn
0

Java 8, 106 99 190 bytes

class i {/*{}!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`claibdefghjkmnopqrtuvwxyz|~*/}
Roberto Graham
fonte
Provavelmente você pode jogar golfe removendo o espaço i {porque você já tem um espaço
Okx 18/10/17
1
Eu acredito que cada personagem deve ocorrer o mesmo número de vezes para que isso seja válido
Roberto Graham
Não sei se entendi completamente o desafio, mas não é o class i{/*!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~*/}suficiente? Ele contém todos os ASCII imprimíveis em seu código-fonte e não produz nada. A parte " duplicada para cada personagem repetido no código fonte " aplica-se para a saída, por isso mesmo que sé duplicado no classe *e /são duplicados devido a /* */, a saída de quatro vezes nada ainda não é nada.
18717 Kevin Kurtzssen em
Além disso, se eu sou realmente correta, você também pode golf-lo para: interface Z{}//!"#$%&'()*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY[\]^_`bdghjklmopqsuvwxyz|~( 97 bytes )
Kevin Cruijssen
0

Javascript (ES6), 103 101 bytes

_=>` !"#$%&'()*+,-.0123456789:;<?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^abcdefghijklmnopqrstuvwxyz{|}~`//_=>\\

Solução antiga (103 bytes usando alert)

alert;;alert`\ \!"#$%&'()*+,-./0123456789:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_bcdfghijkmnopqsuvwxyz{|}~`

Solução antiga (inválida) (96 bytes)

alert()// !"#$%&'*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bcdfghijkmnopqsuvwxyz{|}~
Herman L
fonte
Você tem dois //, o que significa que você deve imprimir os caracteres imprimíveis, com um /removido. (Eu acho)
Stewie Griffin
@StewieGriffin Fixed
Herman L