¡Emite tu puntaje!


54

Desafío:

El concepto es bastante simple: ¡escriba un programa completo para generar su propio puntaje de golf de código!

La salida solo debe ser el recuento de bytes de su programa y un final bytes.

PERO ESPERE ..... hay una restricción:

  • Su código fuente no puede incluir ninguno de los dígitos de su recuento de bytes
  • Así que si su puntuación es 186 bytes, su programa no puede contener los caracteres 1, 6o8

Salida de ejemplo:

315 bytes
27 Bytes
49 BYTES

Reglas Adicionales:

  • Los caracteres innecesarios, los espacios y las nuevas líneas están prohibidos en el código fuente, sin embargo, los espacios finales y las nuevas líneas son perfectamente aceptables en la salida
  • Debe haber un solo espacio entre el número y bytesen la salida
  • Las letras no distinguen entre mayúsculas y minúsculas
  • Sin autoinspección o lectura del código fuente
  • las lagunas estándar no están permitidas

  • esto es , así que

¡El código más corto en bytes gana!


66
¿Necesita esto la etiqueta quine , o puede el código autoinspeccionarse?
Adám

3
@Dat, dado el formato de la palabra bytes, sospecho que la intención es que el recuento incluya los bytes necesarios para imprimir el texto:bytes
Jeff Schaller

2
¿Son aceptables los espacios iniciales en la salida?
rafa11111

3
Si mi código tiene 1 byte de longitud, ¿debería generar 1 byteso 1 byte? (tenga en cuenta que ya hay 41 respuestas, aunque no creo que ninguna se vea afectada)
Erik the Outgolfer

1
@JoKing bueno, no mencioné las mayúsculas y minúsculas en las reglas, pero si de alguna manera el uso de letras mayúsculas hace que su puntaje sea más bajo, entonces, por supuesto, me encantaría ver qué se le ocurrió. Yo digo ¡adelante!
X1M4L

Respuestas:


41

JavaScript, 19 bytes

Octal fue inventado para servir a dos propósitos:

  • establecer permisos de archivo en Linux
  • respondiendo a este desafío

alert(023+' bytes')

Pruébalo en línea!


¿Cuenta esto como un programa completo?
ericw31415

1
@ ericw31415 Este es un programa de navegador , como se define en esta meta respuesta .
Arnauld

55
¡+1 porque finalmente me aclara por qué octal no es completamente inútil!
sergiol

34

Perl 5 , 16 bytes

Hay muchas otras formas de llegar, 16pero esta es mía.

say afpbytes^PPP

Pruébalo en línea!


1
¿Como funciona esto?
caird coinheringaahing

99
@cairdcoinheringaahing En Perl, puede omitir las comillas en las cadenas si parecen literales y no entran en conflicto con una palabra clave (y está en desuso pero no nos importa el golf), operadores binarios & | ^y ~también se pueden aplicar a cadenas y trabajar en ellas como en una lista de valores ASCII (si y solo si ambos lados son cadenas). For |y ^funciona como si la cadena shorte se extendiera con \0. Después de eso, es un ejercicio simple para encontrar combinaciones de letras que sean xor a la salida deseada,
Ton Hospel

26

7 , 23 caracteres, 9 bytes

54340045141332401057403

Pruébalo en línea!

Este es un desafío bastante difícil en un lenguaje que consiste completamente en dígitos, pero lo logré ...

Esto es solo 9 bytes en la codificación de 7. (Estrictamente hablando, son 8⅜ bytes (23 × ⅜ - ¼ porque se pueden omitir los dos últimos 1 bits finales), pero por primera vez, el requisito de PPCG de redondear a un número entero de bytes es realmente una ventaja porque significa que los bits extra de 1 son necesarios y, por lo tanto, no están prohibidos por la pregunta).

00000000: b1c0 2530 b6a0 22f8 1f                   ..%0.."..

El principal desafío de escribir este programa en 7 fue jugar golf a menos de 10 bytes (como escribir 7 sin usar 0o 1es bastante difícil). Esto usa la misma estructura que el programa estándar "Hello world":

5434004514133240105 7 403
5434004514133240105 comandos 0-5 agregar literales al espacio de datos
                   7      comenzar una nueva sección de espacio de datos
                    403 otro literal agregado al espacio de datos
                         {implícito: evalúa la última sección como comandos}
                    4     intercambie las secciones primera y segunda con una sección vacía entre
                      6    reconstruya los comandos que crearían la   salida de la primera sección
                       3 (+ algunos otros efectos que no nos interesan)

En otras palabras, comenzamos creando dos secciones del espacio de datos; tenemos dos literales, cada uno de los cuales empuja una secuencia de comandos allí. La segunda sección (se empujan al estilo de pila, por lo que primero se empuja = último pop) es una secuencia de comandos bastante arbitraria, pero se empuja usando la secuencia de comandos 5434004514133240105(produciendo así la secuencia de datos 5434664574733246765; cuando discuto 7 en texto, normalmente uso una fuente normal para un comando que empuja un literal y negrita para el correspondiente literal resultante). La primera sección se empuja usando la secuencia de comandos 403, produciendo 463. Luego, la primera sección se copia nuevamente al programa (un comportamiento implícito de 7).

El 463ahora está compuesto por comandos (en negrita) que hacen algo de inmediato, en lugar de comandos (sin negrita) que solo empujan literales. 4reorganiza las secciones para obtener nuestro "literal de cadena" en la primera sección. Luego 0realiza la operación por la que 7 es más conocido: tomar una sección de espacio de datos y reconstruir la secuencia de comandos que es más probable que la haya creado. En el caso en el que la secuencia de comandos original de todo 0- 5, esto es 100% exacto (como era de esperar, ya que esas órdenes puramente empujan los datos y por lo tanto dejan evidencia obvia de lo que hicieron), y así obtenemos la secuencia original 5434004514133240105de vuelta. Finalmente, lo 3imprime.

Entonces, lo que queda por ver aquí es la codificación de la cadena. Esto tiene su propio lenguaje específico de dominio:

5434004514133240105
5                    change encoding: 6 bits per character
 43                  select character set: digits and common symbols
   40                '9'
     04              space
       51            select character set: uppercase letters
         4133240105  'B' 'Y' 'T' 'E' 'S'

(No hay un "conjunto de caracteres selectos: letras minúsculas" en el conjunto de caracteres "dígitos y símbolos comunes"; primero debe usar un conjunto de caracteres diferente, por lo que necesitaba usar mayúsculas para jugar al golf lo suficientemente corto como para caber debajo de los 10 límite de bytes)


15

Lienzo , 8 bytes.

8 bytes+

Pruébalo aquí!

Una solución más interesante de 20 bytes:

bytecount.innerText#

Pruébalo aquí!


3
OK, eso es bastante inteligente.
Adám

Tenga en cuenta que una de las restricciones es "Su código fuente no puede incluir ninguno de los dígitos de su recuento de bytes", por lo que la primera solución no es válida en este caso =)
Cyclonecode

1
@Cyclonecode Sin embargo, ese "8" no es un ASCII 8 normal: es un carácter 8 de ancho completo en esta versión unicode del código, aunque en realidad es el byte 0xD5, que no está relacionado con ningún 8s
dzaima



8

PHP anterior a 7.2 , 13 bytes

Asume la configuración predeterminada (advertencias E_NOTICE deshabilitadas) y la versión de PHP anterior a 7.2.

Necesita ser decodificado con xxd -r

00000000: 3c3f 3d7e cecc df9d 868b 9a8c 3b         <?=~........;

O si prefieres Base64

PD89fs7M352Gi5qMOw==

Pruébalo en línea!


6

Stax , 5 bytes

╗↑╞ô╝

Ejecutar y depurarlo

Desempaquetado, se ve así. El modo fuente empaquetado hace que este tipo de trivial y sin interés.

5p     print 5 with no line break
`5l@   print the compressed string " bytes"

Si no desea utilizar el modo fuente empaquetado, 6^p`5l@funciona para 7 bytes.


1
He rechazado esta respuesta, porque creo que usar el modo empaquetado, aunque es una forma inteligente de guardar bytes, parece una trampa (que no lo es) en el peor de los casos, y poco creativo en el mejor de los casos. En lugar de ir a una ola de votos negativos de todas las respuestas de fuente restringida de Stax , dejaré este voto negativo para cubrir todas esas respuestas similares.
caird coinheringaahing

1
Ciertamente estoy de acuerdo en que no es creativo. Pero creo que la culpa radica en el concepto restricted-source, no en el lenguaje. Esta es en realidad la forma más directa de producir "5 bytes"usando Stax.
recursivo el

Estoy de acuerdo en que hay un problema con el desafío (de ahí por qué he downvoted es ), pero todavía me gusta esta respuesta. Sin embargo, no lo elimine (solo precaución preventiva), no tiene nada de malo .
caird coinheringaahing

6

R , 16 bytes

cat(4*4,"bytes")

Pruébalo en línea!


¿No es 17 por tu espacio perdido?
PmanAce

@PmanAce "La salida solo debe ser el recuento de bytes de su programa y un seguimiento bytes". El programa tiene 16 bytes.
Giuseppe

catpor defecto agrega un espacio entre sus entradas.
Giuseppe

object.sizesalidas en el formato correcto (con bytesincluido por defecto). Era un fastidio, la más corta que pude encontrar es 17: object.size(0)-39. TIO
Robin Ryder

1
Al parecer, en la versión de Hadley, un vector de longitud 1 es de longitud 48, por lo que debe existir una versión de R en la que funciona el código de 16 bytes: object.size(0)/3.
Robin Ryder



5

Bash, 21 bytes

"Leer su propio código fuente" claramente no es el ganador aquí, pero nadie más envió uno, así que qué diablos.

echo `wc -c<$0` bytes

Pruébalo en línea!


5

Retina , 15 bytes


 bytes
*>w`..+

Este programa cuenta el número de subcadenas con al menos dos caracteres en la cadena "bytes", y luego imprime este recuento y la cadena misma.

Pruébalo en línea!


5

PHP + HTML, 16 bytes

&#49;&#54; bytes

Sí, esto se está acercando bastante al abuso de lagunas, pero sentí que era necesario publicarlo. Y el uso de PHP significa que esta respuesta técnicamente está escrita en un lenguaje de programación completo de Turing. Por supuesto, cualquier otro lenguaje de plantillas HTML similar funcionaría igual de bien.

Demostración en vivo (sin PHP):

&#49;&#54; bytes


¡Golpéame! Y el ; Por lo general, se puede omitir!
wedstrom

Ahh, pero sería 14/15 bytes
wedstrom




4

Octava , 23 bytes

printf('%i bytes',9+14)

Pruébalo en línea!

Y esto:

disp(['','67$f}xiw'-4])

Pruébalo en línea!


Las primeras respuestas parecen estar bien, pero ... ¿cómo funciona la segunda? oO
rafa11111

2
@ rafa11111 Restando 4de (los códigos ASCII de) '67$f}xiw'da los códigos ASCII de '23 bytes'. Luego, la concatenación con la cadena vacía '' convierte los códigos ASCII en caracteres
Luis Mendo

2
@Luis Mendo ¡Muy inteligente! ¡Gracias por aclararlo!
rafa11111

4

Petit Computer BASIC, 11 bytes

?9+2,"bytes

El uso de una coma en una declaración de impresión moverá el cursor al siguiente múltiplo del tamaño de la pestaña actual. En SmileBASIC, eso es 4 por defecto, por lo que esto generaría 11 bytes(2 espacios) pero PTC BASIC usó 3 en su lugar, por lo que la salida tiene el espaciado correcto.


4

APL (Dyalog Unicode) , 12 bytes

Programa completo que imprime implícitamente en STDOUT.

'bytes',⍨3×4

Pruébalo en línea!

,⍨ Se agrega la cadena al resultado de la multiplicación. La visualización predeterminada de APL de datos de tipo mixto coloca un espacio entre un número y el texto posterior.


Puedo estar equivocado, pero ¿no tienes un 2 en tu conteo de bytes y programa? Sin embargo
fyrepenguin

@fyrepenguin Heh, tienes razón, por supuesto. Que tonto de mi parte.
Adám

4

Brain-Flak , 100 BYTES

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

Pruébalo en línea!

Emite la bytesparte en mayúsculas. Alguien familiarizado con Brain-Flak podría estar realmente confundido con todo ((<>))al principio, pero tenga la seguridad de que solo están allí para abusar de la altura de la pila nilad ( []) y ninguno de los 0s que producen están impresos.



4

Espacio en blanco , 112 bytes

Solo porque nadie lo ha hecho todavía:

   			    
	
 	   
   	 	  		
   	   	 	
   	 	 	  
   	 		  	
   	    	 
   	     

  
	
   
 
	  

 


   




Pruébalo en línea!

Imprime "BYTES" en mayúsculas, ya que las letras mayúsculas tienen códigos ASCII binarios más cortos. Los comandos en el programa, en mi propia notación visible compuesta, son:

Push 112
PrintNum
Push 0
Push 0x53
Push 0x45
Push 0x54
Push 0x59
Push 0x42
Push 0x20
Label _
PrintChr
Dup
JumpZ S
Jump _
Label S
End

Ah, no noté que ya había una respuesta de espacios en blanco. Aquí hay una respuesta más corta ( 104 bytes ). . Eliminará el mío nuevamente. Aquí es lo mismo con resaltado y explicación adicionales.
Kevin Cruijssen

Oh mmm Supongo que el texto es lo suficientemente corto como para que implementar el bucle realmente duela más que simplemente repetir PrintChar. (Y sé, que siempre se puede caer en la final NNN, pero me gusta mucho no tener errores.)
aschepler

4

Java 5 o 6, 44 bytes (programa completo)

enum A{A;{System.out.print(0x2C+" bytes");}}

Sin enlace TIO, porque Java 5/6 es antiguo. En Java 5/6 era posible tener una enumeración con código en lugar del mainmétodo obligatorio , lo que lo hacía más corto para los desafíos completos del programa.

También se pueden java.lang.NoSuchMethodError: main\nException in thread "main"agregar errores con STDERR después de imprimir en STDOUT, lo cual está bien según el meta (pero si el desafío hubiera rechazado errores adicionales a STDERR, System.exit(0);se pueden agregar (y los números octales deben actualizarse) para evitar el error.

Sugerido por @ OlivierGrégoire (y su sugerencia relevante de Java ).

Java 8+, 74 bytes (programa completo)

interface M{static void main(String[]a){System.out.print(0112+" bytes");}}

Pruébalo en línea.

Java 8+, 16 15 bytes (función lambda)

v->0xF+" bytes"

-1 byte gracias a @ OliverGégoire .

Pruébalo en línea.


2
Técnicamente no es un programa completo :)
OOBalance

@OOBalance Oops ... de alguna manera leí eso, gracias por la corrección. Ahí va mi puntaje .. XD
Kevin Cruijssen

1
37*2contiene a 7, por lo que no es válido. Sin embargo, su solución alternativa está bien.
OOBalance

1
v->0xE+"bytes"o v->0xF+" bytes". No se puede probar pero debería funcionar de todos modos. Nada dice que la puntuación y los "bytes" deben estar separados.
Olivier Grégoire

1
@ OlivierGrégoire Lo sé, lo sé. ;) Cuando publiqué el programa completo, dudaba en responderlo como enumeración pensando en su respuesta de consejo . ¿Conoces algún compilador en línea que todavía lo soporte? Prefiero tener un enlace con el código de prueba para mis respuestas ...
Kevin Cruijssen


4

Applescript, 15 bytes

Sí, voy para allá

9+6&”bytes”

1
Pero ...Your source code can not include any of the digits from your byte count
nicael

@nicael Dang, tienes razón. Un segundo entonces ...
DonielF

Corríjame si me equivoco, pero no es un carácter multibyte (3 bytes en Unicode si no recuerdo mal ), ¿entonces esto es más de 11 bytes?
caird coinheringaahing

@cairdcoinheringaahing ... Dispara. Tienes razón: "es de 2 bytes, subiendo esto a 15.
DonielF

¿esto todavía no imprime 11?
Destructible Lemon



3

Lote, 32 bytes

@@echo %COMSPEC:~-10,-010% bytes

COMSPECes generalmente %WINDIR%\system32\cmd.exeasí que extraigo la subcadena de 10 a 8 caracteres desde el final. Versión antigua de autorreferencia de 16 bytes:

@echo %~z0 bytes

Afortunadamente, el recuento de bytes no era un múltiplo de 10.


@manatwork OK, no lo había visto, aquí hay una nueva versión.
Neil

3

JavaScript, 16 15 bytes

x=>0xf+' bytes'

_=>5*3+' bytes'
Neil

@Neil Tanto el código como el conteo de bytes contiene un 5en ese caso ..
Kevin Cruijssen

@KevinCruijssen Bah, no puedo creer que haya pasado por alto eso.
Neil

Las presentaciones deben ser programas completos "¡ escriba un programa completo para generar su propio puntaje de golf de código!"
Kritixi Lithos
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.