¡Invierta una Quine!


11

Todos sabemos lo que es una quine . Un quine invertido es un programa no vacío que imprime el inverso de su código fuente sin leer su código fuente, y consiste únicamente en caracteres ASCII imprimibles (espacio a través ~).

Aquí, "inverso del código fuente" significa lo siguiente: la salida de su programa debe contener cada carácter ASCII imprimible (m - c) veces, donde c es el número de veces que dicho carácter aparece en su código, ym es el máximo Número de veces que se repite cualquier carácter en su código.

(En otras palabras: su código + su salida = permutación de m veces todos los imprimibles-ASCII).

Por ejemplo, si su programa es 12345, entonces m = 1 , y debería generar cualquier permutación de esta cadena:

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

Si su programa es AAB, entonces m = 2 , y debe generar cualquier permutación de:

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

Tenga en cuenta cómo faltan dos Asy una falta B.

Aunque un programa que contiene todos los caracteres ASCII imprimibles y no genera nada es una suma inversa válida (que satisface m = 1 ), dicha respuesta no sería muy competitiva, dada su longitud.

Debe escribir un programa que sea una línea invertida, como se describe en el párrafo anterior. Como se trata de , ganará el programa más corto en bytes. ¡Buena suerte!


1
Espacio, tabulación y nueva línea?
Stewie Griffin

11
Deberías resaltar duplicated for every repeated character in the source codeque marca la diferencia en el desafío
Rod

66
¿Podría dar un ejemplo del inverso donde se repiten varios caracteres (y varias veces)? Por ejemplo, 11234512345?
Giuseppe

44
¿Cómo es esto un duplicado? Relacionado, sí. Duplicado, no! Es mucho más difícil en idiomas donde tienes que tener caracteres duplicados. Tenga en cuenta que tampoco puede duplicar una cadena, ya que el número de caracteres que debe eliminar de cada cadena varía.
Stewie Griffin

1
@StewieGriffin VTC lo consideraría "poco claro" en lugar de "engañado" porque (casi) cada respuesta tiene un comentario que trata de averiguar qué duplicated for every repeated character in the source codesignifica o si la presentación es válida para ese criterio, porque el OP no ha abordado Algunas de las preguntas aquí.
Giuseppe

Respuestas:


7

Brain-Flak , 221 207 bytes

Incluye +1 para -A

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

Pruébalo en línea!

# 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
 >)}{}

Creo que solo debes eliminar [cinco veces, no todas. Tenga en cuenta que 2solo se elimina una vez en el ejemplo. Sin embargo, el desafío es un poco confuso.
Stewie Griffin

Interesante cómo esto es drásticamente más corto que la quine estándar. +1:)
James

2
Esto es realmente lamentable, y significativamente menos interesante que su respuesta, pero técnicamente, !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz {|} ~ ` obtendría una mejor puntuación: /
James

6

CJam , 17 bytes

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

Pruébalo en línea!

Huellas dactilares

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

Explicación

El objetivo era modificar la quine estándar.

{"_~"}_~

tal que no se repita ningún carácter en el programa. La razón de esto es que CJam tiene un operador diferente que podemos usar para eliminar caracteres del rango ASCII imprimible, pero no tiene en cuenta la cantidad de ocurrencias. Implementar eso a mano probablemente sería más largo, por lo que necesitaba asegurarme de que cada personaje aparezca solo una vez y no tengamos que preocuparnos por los sucesos.

{      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.
}_~


2

05AB1E , 95 61 60 bytes (no 58 b / c no me gusta)

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

Pruébalo en línea!

Respuesta anterior invalidada por "solo caracteres ASCII", muchos comandos no son válidos aquí.

Se imprime abcdefghijklmnopqrstuvwxyz012345678una vez ya que no hay caracteres duplicados.


Versión con BCDEFGHIKMNOPQRSTUVWXYZeliminado:

Trabajo en progreso ... Creo que ~ 60 bytes es lo más bajo posible sin caracteres no ASCII en 05AB1E ...

05AB1E , 58 bytes

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

Pruébalo en línea!

Imprime la salida x12 debido a los caracteres repetidos:

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

Tampoco termina correctamente, trabajando en eso ahora ...


Se han eliminado las respuestas antiguas no válidas (debido a caracteres no ASCII), consulte el historial de edición.


"Una quine invertida es un programa no vacío que imprime el inverso de su código fuente sin leer su código fuente, y consiste únicamente en caracteres imprimibles-ascii ". Estaba trabajando en una respuesta 05AB1E también, hasta que me di cuenta de esto.
KSmarts

1
@KSmarts corregido a un costo de 76 bytes.
Magic Octopus Urn

2
Típicamente, en un desafío de código de golf, uno esperaría que 05AB1E lo haga un poco mejor que " vencer a Java".
KSmarts

@KSmarts se encoge de hombros si no dejas que esolangs compita fácilmente por definición, mereces una respuesta sarcástica de esolang: P.
Urna mágica del pulpo

0

Java 8, 106 99 190 bytes

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

Probablemente pueda jugar golf quitando el espacio i {porque ya tiene un espacio
Okx

1
Creo que cada personaje debe aparecer la misma cantidad de veces para que esto sea válido
Roberto Graham

No estoy seguro si entiendo el desafío por completo, pero ¿no es class i{/*!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~*/}suficiente? Contiene todos los ASCII imprimibles en su código fuente y no muestra nada. La parte " duplicado para cada carácter se repite en el código fuente " se aplica a la salida, por lo que aunque sse duplica en classy *y /se duplican debido a /* */, dar salida a cuatro veces nada sigue siendo nada.
Kevin Cruijssen

Además, si estoy en lo cierto, también puedes interface Z{}//!"#$%&'()*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY[\]^_`bdghjklmopqsuvwxyz|~
jugarlo

0

Javascript (ES6), 103101 bytes

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

Solución anterior (103 bytes usando alert)

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

Solución antigua (no válida) (96 bytes)

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

Tiene dos //, lo que significa que debe generar los caracteres imprimibles, con uno /eliminado. (Creo)
Stewie Griffin

@StewieGriffin Corregido
Herman L
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.