triplegolf: ¡no solo cuenta la longitud del código fuente!

15

El objetivo de este desafío es escribir un programa en el que la longitud de los tres siguientes sea exactamente la misma:

  • la longitud del código fuente
  • la longitud de la salida que imprime en la salida estándar
  • la longitud de las advertencias del compilador que genera con el compilador (sin modificar) de su elección

El ganador es el código más corto para cumplir con los tres criterios, y debe tener al menos 1 carácter.

Para condimentar las cosas, si la salida tiene menos de tres caracteres diferentes, se agrega una penalización de 5 puntos a la longitud de cada uno (por lo tanto, +10 si solo es un tipo, +5 para dos).

(Las líneas nuevas cuentan como 1 o 2 caracteres, usted elige, pero tiene que ser coherente a través de los tres criterios. Los espacios en blanco iniciales y finales se ignoran en todas las líneas en los tres criterios)

En caso de puntaje igual, el que imprime el resultado más interesante (en lugar de basura) es el ganador.

vsz
fuente
1
¿Qué es un "tipo de personaje"?
Peter Taylor
55
Además, ¿qué pasa si el compilador produce una salida sin advertencia (por ejemplo, "Compilación principal")? Además, ¿qué sucede si el nombre del archivo fuente aparece en los mensajes de advertencia (por ejemplo, "foo.c: 1: 1: ...")?
Joey Adams
3
Mi arma preferida es VBA, que realmente no tiene un compilador y no genera un archivo binario para ejecutar (como es el caso para algunos otros idiomas, creo). ¿Hay consideraciones para esto o simplemente estoy descalificado por defecto?
Gaffi
2
Me pregunto si es posible un triple quine en algún idioma.
Ry-
2
Para los idiomas interpretados, obtenemos una salida incluso cuando ocurre un error, en tal caso, ¿se aceptan esos errores o solo se aceptan advertencias?
l0n3sh4rk

Respuestas:

14

Bash, 23 caracteres

Error:

bash: /: Is a directory

Fuente:

echo       $0-$01234;/;

Salida:

/bin/bash-/bin/bash1234


Brainf * ck, 32 caracteres

Este código se ejecuta durante aproximadamente 3 segundos y se detiene y muestra el siguiente error y salida.

Error:

bff: out of memory (-2058691272)

Fuente:

+++++[......-]..+[>>>>>>>>>>>>-]

Salida: (Hexdump)

0505 0505 0505 0404 0404 0404 0303 0303
0303 0202 0202 0202 0101 0101 0101 0000


C, 35 caracteres

Advertencia:

b.c:1:30: warning: division by zero

Fuente y salida:

main(){system("cat "__FILE__)/0;;;}


PHP, 50 caracteres

Advertencia:

PHP Warning:  Division by zero in /tmp/3 on line 1

Fuente y salida:

<?php echo (0/0).''.file_get_contents(__FILE__);?>
l0n3sh4rk
fuente
1
El ejemplo bash es un error, no una advertencia.
Peter Taylor
¿Qué compilador está utilizando para la solución C?
breadbox
@breadbox gcc versión 4.7.0 20120505 (versión preliminar) (GCC)
l0n3sh4rk
8

C - 48 caracteres

main(i){while(++i<49)putchar(i);putchar('\z');}

Nota: incluye una nueva línea final (estilo Unix).

Salida de gcc a.clecturas:

a.c:1:41: warning: unknown escape sequence '\z'

El resultado a.outes principalmente caracteres que no se imprimen, así que esto es lo que parece después de conectar a través de hexdump:

00000000: 0203 0405 0607 0809 0A0B 0C0D 0E0F 1011  ................
00000010: 1213 1415 1617 1819 1A1B 1C1D 1E1F 2021  .............. !
00000020: 2223 2425 2627 2829 2A2B 2C2D 2E2F 307A  "#$%&'()*+,-./0z
caja de pan
fuente
Tengo entendido que los no imprimibles (¿espacio en blanco?) Están truncados, por lo que esto no contaría. Si eso funciona, puedo mejorar mi propia respuesta.
Gaffi
1
Los caracteres de control generalmente no se consideran espacios en blanco, excepto, por supuesto, para \ t, \ n, \ r, \ f y, a veces, \ v. Ninguno de estos está en la posición inicial o final, así que pensé que estaba a salvo.
breadbox
1
Creo que esto es perfectamente aceptable. No son espacios en blanco, y en cualquier caso esto no es ACM para ser tan estricto con los requisitos. La razón principal de esta "regla de espacios en blanco" fue que algunos IDE podrían formatear en gran medida la salida del compilador.
vsz
1
@copy, O main(i){i='\z';while(i-->74)putchar(i);}- pero reducir el tamaño del programa es en realidad contraproducente.
breadbox
1
Esta es mi respuesta favorita, sé que debería haber prohibido acceder al contenido del archivo (tal como lo hacen las
citas
5

JavaScript, 63 66

!function x(){console.log(x+'...');eval(Array(33).join('$'))}()

El resultado es:

function x(){console.log(x+'...');eval(Array(33).join('$'))}...

En Chrome, el error es:

ReferenceError: $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ is not defined
Ry-
fuente
3

Visual Basic .NET, 185

Gee, vbces bastante detallado con sus advertencias de compilación. De todos modos, el código es este:

Public Module Main
    Public Sub Main()
        Console.WriteLine(New String("a"c,185))
    End Sub

    Public Function A()
        'This is actually just padding.
        'Hi
    End Function
End Module

(Tenga en cuenta que se supone que son pestañas, no espacios).

La salida es esta:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Y la advertencia del compilador es esta:

warning BC42105: Function 'A' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.

    End Function
    ~~~~~~~~~~~~

(Esta vez, en realidad son cuatro espacios, no pestañas).

Ry-
fuente
3

Zsh , 20 bytes

<<<   $-$_$_$_$_$_
[

El problema al que nos enfrentamos aquí se menciona en un comentario anterior: Zsh imprime el nombre del programa además del número de línea antes de cada error. La solución aquí usa un nombre de archivo de un carácter para abusar de esto. Lo he envuelto en un script de ayuda para mostrar exactamente lo que imprime, y lo he usado wc -cen stderr, stdout y el archivo fuente.

Salida: 569Xcatcatcatcatcatseguido de una nueva línea
Errores: s:[:2: ']' expectedseguida de una nueva línea


EDITAR: solución alternativa de 20 bytes sin restricción de archivo:

<<<$-$-$-$-$_>&1 >&2

Pruébalo en línea!

Zsh , zsh -x, 10 bytes

<<<$_$_$_

-xLa bandera habilita xtrace. Esto nuevamente requiere un nombre de archivo de un solo carácter. Pruébalo en línea!

Zsh zsh -JNTwEDY , 12 bytes

<<<$->&1 >&2

-flagRespuesta más corta sin requisito de nombre de archivo. Establece más banderas e $-imprime todas. Pruébalo en línea!

Función Gamma
fuente
2

JavaScript (Firefox 54), 34 bytes

alert((f=function(x)1234)(56)+f+f)

Salidas:

1234function(x)1234function(x)1234

Y envía esta advertencia a la consola del navegador:

expression closures are deprecated

Parece que esta en mi copia de Firefox Developer Edition (54.0a2). También puede funcionar en otras versiones de Firefox.

ETHproducciones
fuente
2

Ruby, 48 caracteres.

IO=1;puts ?a*48;# let's make it 48 bytes long :)

Salidas

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Advierte

r.rb:1: warning: already initialized constant IO

(el archivo es r.rb, eliminé la ruta, si lo ejecuta desde irb, obtendrá (irb): 1: advertencia ...)

Existe el método de advertencia en Ruby, pero solo envía sus argumentos a $ stderr, haciendo que parezca menos una advertencia.

Redouane Red
fuente
1

Python, 57 bytes

Otros intérpretes pueden mostrar la advertencia de manera diferente. Esto solo se probó para funcionar en TIO.

from warnings import*
print("prt"*19)
warn("Warning...!")

Pruébalo en línea

Salida

prtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprt

Advertencia

.code.tio:3: UserWarning: Warning...!
  warn("Warning...!")

Tenga en cuenta que los espacios iniciales no se cuentan para el recuento de bytes. Si no se ignoraron los espacios iniciales, esto podría hacerse en 51 bytes.

mbomb007
fuente
1

Javascript (ES6), 32 30 bytes

Screen(console.log(Function));

huellas dactilares

ƒ Function() { [native code] }

en Chrome, y luego arroja

TypeError: Illegal constructor

Mi solución original de 32 bytes:

(x=y=>console.log(x+!0+10)||z)()

primero, impresiones

y=>console.log(x+!0+10)||ztrue10

Y arroja el error

ReferenceError: z is not defined
vrugtehagel
fuente
0

VBA, 39 bytes

No estoy seguro si esto califica, dada la restricción del compilador, pero:

Entrada: (en la ventana inmediata)

For i=1 To 39:a=a & Chr(i):Next:Print a

* La salida incluye caracteres que no se imprimen y que no se reproducen bien en esta ventana.

Gaffi
fuente
VBA no da ninguna advertencia del compilador, así que no creo que esto cuente como un ser válido
Taylor Scott,