¡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!

X1M4L
fuente
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!

Arnauld
fuente
¿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!

Ton Hospel
fuente
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)

ais523
fuente
15

Lienzo , 8 bytes.

8 bytes+

Pruébalo aquí!

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

bytecount.innerText#

Pruébalo aquí!

dzaima
fuente
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
12

brainfuck , 53 BYTES

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

Pruébalo en línea!

Otra presentación con mayúscula bytes. Encontrado con la ayuda del excelente ayudante BF-crunch de primo.

Jo King
fuente
11

PHP, 14 bytes

<?=7*2?> bytes
Código ciclónico
fuente
8
¿Qué hay de poner la bytesparte fuera de la ?>? Pruébalo en línea!
Jo King
@JoKing great 3 less bytes :)
Cyclonecode
1
Solo para su información, probablemente sea mejor que divida su respuesta en varias respuestas si cubre más de un idioma.
Conor O'Brien
@ ConorO'Brien - Oki lo hará
Cyclonecode
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!

Konrad Borowski
fuente
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.

recursivo
fuente
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!

Giuseppe
fuente
¿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

Python 3 , 25 24 18 bytes

print(6*3,'bytes')

Pruébalo en línea!

NieDzejkob
fuente
1
Pero "4" está en "24". Tal vez "33-9"?
recursivo el
@recursive 3*8debería estar bien, sin embargo
Kevin Cruijssen
@ whoops recurrentes, lo arregló: P
NieDzejkob
5

05AB1E , 6 bytes

₂¤“ÿ¡Ï

Pruébalo en línea!


₂      # [26]        | Pushes 26 (many other alternatives).
 ¤     # [2, 6]      | Split out tail.
  “ÿ¡Ï # ['6 bytes'] | ÿ = "Interpolate top of stack.", ¡Ï = "bytes" (compressed)

Alternativas para ₂¤incluir: 5>, ₁¤,

Urna de pulpo mágico
fuente
55
Lástima que esto no funcione.
Urna mágica de pulpo
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!

thegreatemu
fuente
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!

León
fuente
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

Ilmari Karonen
fuente
¡Golpéame! Y el ; Por lo general, se puede omitir!
wedstrom
Ahh, pero sería 14/15 bytes
wedstrom
4

dc , 14 11 bytes

[ bytes]Bnn

Pruébalo en línea!

-3 bytes por @Cows quack

NieDzejkob
fuente
[ bytes]Bnnafeita algunos bytes
Kritixi Lithos
@Cowsquack gracias!
NieDzejkob
@cowsquack duckies van MOO, supongo: P?
Magic Octopus Urn
@MagicOctopusUrn Ducks, ¿qué son los patos? : P
Kritixi Lithos
4

MATL , 13 bytes

'57$f}xiw'4-c

Pruébalo en línea!

Esto empuja la cadena '57 $ f} xiw 'y resta 4, para obtener 13 bytes. Esto se convierte en caracteres usando c.

Stewie Griffin
fuente
6EV' bytes'hes 12 (estaba a punto de publicarlo)
Giuseppe
1
aunque es el mismo enfoque aburrido: P
Giuseppe
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!

Stewie Griffin
fuente
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.

12Me21
fuente
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.

Adán
fuente
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.

Jo King
fuente
4

Haskell , 26 bytes

main=putStr$"\50\54 bytes"

Pruébalo en línea!


29 bytes

main=putStr$pred<$>"3:!czuft"

Pruébalo en línea!

Laikoni
fuente
Los espacios en blanco innecesarios ahora están prohibidos, pero puede usar un $en su lugar.
Ørjan Johansen
@ ØrjanJohansen Gracias por señalar.
Laikoni
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
aschepler
fuente
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.

Kevin Cruijssen
fuente
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”
DonielF
fuente
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.

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

JavaScript, 16 15 bytes

x=>0xf+' bytes'
Yair Rand
fuente
_=>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