Crear salida dos veces la longitud del código

85

El reto

Escriba un programa completo que escriba el doble de bytes en la salida estándar que la longitud del programa.

Reglas

  • El programa debe escribir caracteres ASCII en la salida estándar.

  • El contenido de la salida no importa.

  • La salida, medida en bytes, debe ser exactamente el doble de la longitud del programa, también medida en bytes, a menos que cumpla con la bonificación.

  • Cualquier nueva línea final se incluye en el recuento de bytes de salida.

Prima

Su programa opcionalmente puede tomar un número n, como entrada. Si es así, la salida debe ser exactamente n * program lengthbytes. Puede suponer que n siempre será un número entero positivo. Si no se proporciona ninguna entrada, ndebe tener un valor predeterminado de 2.

Si hace esto, puede restar 25 bytes de su puntaje.

El programa más corto gana.

Restricciones

  • No hay lagunas estándar.

  • El programa debe tener al menos 1 byte de longitud.

  • No agregar espacios en blanco innecesarios al código fuente para cambiar su longitud. Del mismo modo, los comentarios no cuentan.

  • A menos que cumpla con el bono, el programa no debe aceptar ninguna entrada. Si cumple con la bonificación, el entero debe ser la única entrada.

El puntaje más bajo (duración del programa en bytes - bonificación) gana.

La respuesta más corta para cada idioma gana para ese idioma .

Tablas de clasificación

Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.

Para asegurarse de que su respuesta se muestre, comience con un título, utilizando la siguiente plantilla de Markdown:

# Language Name, N bytes

¿Dónde Nestá el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:

# Perl, 43 + 2 (-p flag) = 45 bytes

También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

Daniel M.
fuente
1
Para la bonificación, ¿la salida tiene que ser exactamente n * program lengthbytes, o es un mínimo?
xnor
2
Tiene que ser exacto
Daniel M.
3
Parece que el fragmento de código debe modificarse para manejar puntajes negativos.
El'endia Starman
40
Una bonificación de -25 es básicamente obligatoria para algunos idiomas, ya que les permite obtener una puntuación negativa. En el futuro, sugeriría usar un bono porcentual, o simplemente hacer que el bono sea la pregunta si realmente desea respuestas. O simplemente no tienes un bono.
xnor
44
Para "no se proporciona ninguna entrada", ¿suponemos que se pasa la cadena vacía? No puedo ver cómo se trataría con el usuario que nunca escribe una entrada y el programa solo espera.
xnor

Respuestas:

138

HQ9 + , 2 bytes

QQ

salidas

QQQQ

Creo que no está prohibido aquí.

randomra
fuente
14
Puede que no esté prohibido, pero no es muy inter ... espera, ¿cómo obtuvo ocho votos a favor?
John Dvorak
58
@ JanDvorak Por mucho que no me guste HQ9 +, para mí es un uso creativo. Es muy probable que este uso no se haya previsto cuando se creó HQ9 +, que es más de lo que se puede decir de la mayoría de los otros programas Hq9 +. +1 de mi parte
Trauma digital
13
Ni siquiera sabía que Q imprime "el código fuente del programa". Pensé que acababa de imprimir una Q. ¡Bien hecho por detectar la diferencia crucial!
Timwi
77
@ LegionMammal978 Técnicamente, este es un desafío de salida constante, lo que significa que se permiten lenguajes que no son de programación.
un spaghetto
3
Esto tiene 120 votos. 1.200 repeticiones por escribir QQen un intérprete.
Stan Strum
95

Shakespeare, 768

Sí, Shakespeare no es un gran lenguaje de golf. Salidas 1,536 espacios.

Rosencrantz and Guildenstern: A Series of Tedious Events.

Rosencrantz, a count of extraordinary determination.
Guildenstern, a spacy character.

Act I: The Long Conversation

Scene I: A Tortured Friendship

[Enter Rosencrantz and Guildenstern]

Rosencrantz:
 You are a gentle, noble, valiant, loyal, loving companion.

Guildenstern:
 You are nothing!

Scene II: Asking the Hard Questions

Rosencrantz:
 Speak your mind.

Guildenstern:
 You are as fair as the sum of yourself and a daisy. Are you as
 daring as the sum of a big, bold, fiery, feisty, rough, rowdy,
 ham-fisted, hawk-eyed, broad-shouldered, bright-eyed lad and a
 large, yellow, vicious, hairy, wild, scary, long-tailed,
 sharp-clawed, small-eared lion?

Rosencrantz:
 If not, let us return to scene II.

Editar: 256

Bien, en realidad lo jugaré golf. Tenga en cuenta que lo anterior no se compila en ninguna implementación de Shakespeare existente porque lo escribí minuciosamente a mano (pero estoy preparado para defender su corrección).

Lo siguiente se traduce a C con una advertencia en spl-1.2.1, y genera 512 espacios:

Ummm.Ajax,1.Puck,2.Act I:I.Scene I:A.[Enter Ajax and Puck]Ajax:You old old old old old cow.Puck:You are zero!Scene II:B.Ajax:Speak thy mind.Puck:You are the sum of you and a red cat.Are you as big as the square of me?Ajax:If not, let us return to scene II.
Luke
fuente
15
Haré +1 si realmente juegas esto.
lirtosiast
1
¿Qué clase de brujería es esta? Ni siquiera sabía que tal cosa existía ...
Malavos
10
woah, lo jugaste golf. Santos paraísos.
Malavos
2
@Malavos Solo bromeaba sobre la forma en que escribiste mal la brujería, lo siento, tanto qué y cuáles probablemente estén bien
gato
2
No, le pido perdón si sonaba ofensivo o defensivo. ¡Estaba haciendo una referencia a Futurama! :) En una nota seria, todavía estoy sorprendido por esta respuesta. Necesitamos más de esos en el sitio.
Malavos
69

Retiro, 17 bytes

................!

16 NOOPs. Luego !se invoca el depurador y vuelca la memoria en la consola. La memoria está vacía, pero el encabezado tiene 34 bytes de longitud:

-- STATE DUMP --
----------------

Pruébalo aquí .

mınxomaτ
fuente
13
Esta es una de las mejores respuestas IMO.
gato
67

Mathematica REPL, 1 byte

#

Impresiones #1.

alephalpha
fuente
14
La pregunta dice "escribir un programa completo"; esto es solo un fragmento REPL.
LegionMammal978
60

CJam, -17 bytes

r2e|i8,*

El código fuente tiene 8 bytes de longitud y califica para la bonificación de -25 bytes .

Pruébelo en línea en el intérprete de CJam .

Cómo funciona

r         e# Read a token from STDIN.
 2        e# Push 2.
  e|      e# Logical OR; keep the token if it's not empty, 2 otherwise.
    i     e# Cast to integer.
     8,   e# Push [0 1 2 3 4 5 6 7].
       *  e# Repeat the array the corresponding number of times.
Dennis
fuente
44
Mierda. Bien hecho.
The_Basset_Hound
1
¿Cómo es negativo bytes?
Nick T
3
@NickT 8 bytes (código fuente) - 25 bytes (bonificación).
Dennis
16
Puede guardar varios millones de copias si se está quedando sin espacio en disco.
Robert Fraser
No, creo que los metadatos lo harían positivo
CalculatorFeline
47

Python 2.6, 10

print`-.1`

Impresiones -0.10000000000000001, que son 20 caracteres.

Tenga en cuenta que la cadena repr muestra más precisión. print-.1solo da -.1, y print.1/3da 0.0333333333333solo 13 dígitos de precisión.

xnor
fuente
55
Esto ya no funciona en Python 2.7 o 3.1.
Anders Kaseorg el
@AndersKaseorg Entonces repl.it está mal, entonces?
mbomb007
2
@ mbomb007 Aparentemente. GitHub sugiere que eso no es lo único que tiene de malo. Ideone está de acuerdo con CPython.
Anders Kaseorg
El mismo comentario que para su otra respuesta: ¿no imprime esto una nueva línea final, dando 21 bytes de salida?
Martin Ender
1
Quieres decir print`+.1`?
mbomb007
46

Semilla , 10 bytes

4 56111240

Esto compila al programa Befunge (encontrado por fuerza bruta)

9k.@

que produce los siguientes 20 bytes cuando se ejecuta (probado en CCBI, tenga en cuenta el espacio final):

0 0 0 0 0 0 0 0 0 0 

Al no estar familiarizado con Befunge 98, tuve que verificar la especificación varias veces para esta:

  • k me parece bastante roto, ejecutándose una vez más de lo previsto debido a que la IP se movió a la instrucción repetida
  • Las pilas de Befunge 98 tienen ceros infinitos en la parte inferior
  • . salidas como un número, seguido de un espacio
Sp3000
fuente
18
... yo ... solo ... no puedo.
Daniel M.
44

R, 3 2 bytes

Código

!0           # NOT FALSE

Salidas

TRUE

Wow, finalmente R, finalmente.

Parece que {}también funciona, da salidaNULL

Bono 33 16 bytes:

Código

rep(1,number*16)

Salidas

# if number is not defined
> rep(1,number*16)                     
> Error: object 'number' not found     # output is 32 (or 2*16) bytes long error

# if number is defined
> number = 3                            
> rep(1,number*16)                     # output is 16*number bytes long
> 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Mutador
fuente
2
Espero que usar el nombre "número" para la variable no sea equivalente a "agregar espacios en blanco innecesarios al código fuente"
Mutador
26

Matlab, 7 5 bytes

¡2 bytes menos gracias a @flawr!

123;3

Salida:

ingrese la descripción de la imagen aquí

La salida contiene , por lo tanto, 10 bytes.newline ans = newline newline 3 newline

Luis Mendo
fuente
1
Esperemos que nadie tenga format compactpor defecto :)
Sanchises
2
@sanchises :-) Sí, eso depende de cómo se hayan configurado las preferencias de Matlab. Pero format loosees la preferencia predeterminada
Luis Mendo el
2
¿Qué tal 123;4? Es tres bytes más corto =)
flawr
@flawr ¡Buena idea! ¡Publícalo tú mismo!
Luis Mendo
No, demasiado inspirado por tu respuesta =)
flawr
25

JavaScript, 2 bytes!

Incluso más corto que la solución de 3 bytes:

!0

Devuelve truedespués de correr.

Unihedron
fuente
2
Debe tener en cuenta que esto solo funciona en un entorno REPL
Cyoce
21

Pitón 2, 11

print`id`*1

Imprima la representación de cadena del incorporado id, que tiene 22 caracteres:

<built-in function id>

El *1es llevar el código a 11 caracteres. También podrías hacer print id;00.

Las alternativas 11 más aburridas son:

print'1'*22
print 9**21
xnor
fuente
He estado jugando con números complejos, pero desafortunadamente print.8/-9jes un char corto
Sp3000
¿No imprimen estos una nueva línea final, llevando el conteo de bytes de salida a 23?
Martin Ender
1
@ MartinBüttner Esa regla se editó más tarde, pero cambiarla a print id,;1suficiente para suprimir la nueva línea final. Tampoco agrega un espacio final.
xnor
@xnor print 9**21no funciona. Son 21 personajes. print 9**23funciona
Koishore Roy
18

dc, 10-25 = -15

2?A*Ar^1-n

Toma una línea en blanco para "sin entrada".

Calcula 10 ^ (10 * n) - 1, donde n es la entrada, o 2 si la entrada está vacía. Imprime una cadena de 9s de la longitud requerida.

  • 2 empuje 2 a la pila en caso de que la entrada esté vacía
  • ? empujar entrada a la pila
  • Aempuje 10 a la pila (dc tiene accesos directos A- Fpara 10-15)
  • * pop dos veces y multiplicar (multiplicar la entrada por 10)
  • A empuja 10 a la pila
  • r invertir los dos elementos superiores de la pila
  • ^ exponer 10 ^ (10 * entrada)
  • 1- restar 1 de la parte superior de la pila
  • n Imprimir sin nueva línea.
Trauma digital
fuente
Dang, eso es muy inteligente. Y afortunado con la longitud del código allí :) Pero tal vez debería agregar una pequeña explicación para los no iniciados. Y creo que la nueva línea cuenta, por lo que probablemente debería usarla en nlugar de p.
daniero
17

TI-Basic, 3 bytes

1ᴇ5

Impresiones 100000.

Deusovi
fuente
En realidad, creo que la nueva línea contaría, por lo que puede hacerlo 0por 1 byte.
lirtosiast
1
¿Qué tal ᴇ3? Y @lirtosiast, dado que TI-Basic no tiene nuevas líneas, soy escéptico al respecto.
Jakob
16

Brainfuck, 14 bytes

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

Este es un pequeño ejercicio matemático. Denotemos el número de +caracteres en el código por a, y el número de .caracteres por b.

El código genera a*bbytes, con valores de aabajo a 1(estos son bytes no ASCII, pero parece estar bien según la especificación). La longitud del código es a+b+3. Entonces tenemos

a*b = 2 * (a+b+3)

Al probar diferentes valores para ay b, vemos que a+b+3se alcanza el mínimo para

a = 4       or       a = 7
b = 7                b = 4
anatolyg
fuente
Un programador veterano de brainfuck detectará la +[[>....]-<<+]opción.
orthoplex
@orthoplex Cuando leí tu comentario, inmediatamente me acordé de brainfuck y programador: brainfucker
Poke
15

gs2 , -18 bytes

CP437 :W↕0!↨.2

Volcado hexadecimal: 57 12 30 21 17 2e 32

Wlee los números de STDIN en una lista. ↕0agrega un 2 a la lista y !extrae el primer elemento. Entonces ↨.(la lista [0,1,2,3,4,5,6]) se repite ( 2) esto muchas veces.

Esto es muy similar a la respuesta de Dennis en CJam: gs2 simplemente se combina ry forma iun byte.

Nota : Tuve que corregir un error en la gs2implementación para que esto funcionara: anteriormente, cada programa tenía una nueva línea oculta añadida a su salida, que era completamente involuntaria. Solo surgió después de que intenté resolver este programa (el lenguaje fue diseñado para el golf de anarquía, que ignora las nuevas líneas finales en todos los problemas), y solo presioné una solución para dominar en este momento, así que siéntete libre de tomar esta respuesta con un grano de sal.

Lynn
fuente
1
¡Primera respuesta de GS2 que he visto que no tiene ningún personaje de palo de cartas!
Cyoce
14

Perl 5, 16 bytes - 25 = -9

$_ =$]x($_*2||4)

Este es un enfoque extraño para el problema.

Ejecutar con el -pargumento de la línea de comando.

Vi una respuesta de Perl a continuación que usaba una variable especial para imprimir más texto, y así acortar su recuento de bytes. Entonces utilicé una variable especial mucho más detallada. Imprime 8 caracteres con un nombre de variable de 2 caracteres. Por lo tanto, con un recuento de bytes de 16 (rellenado con un carácter de espacio en blanco para que sea 16), imprime 2 * $], donde se imprime $]la versión de Perl 5.xxxxxx, según su versión de Perl. Sin entrada, lo imprime cuatro veces, igualando 8*4o 32, que es el doble del número de bytes del código.

Amo a Perl

Codefun64
fuente
Creo que esto falla para la entrada vacía. Según las reglas, si no se proporciona ninguna entrada, el múltiplo debería tener el valor predeterminado 2.
Alex A.
@AlexA. Maldición, me perdí eso. Nuevo en el código de golf. Editar entrante, pero mi respuesta tiene muchos caracteres ahora porque no tengo idea de cómo hacer esto de manera más creativa en perl :(
Codefun64
2
Hola, algunos consejos más que pueden ayudarte aquí, de forma predeterminada en un script de programa, popy shifttrabajar en @ARGV(en el subque trabajan @_) para que puedas hacer algo como $n=pop||2obtener el primer bloque de código, y tienes ;}al final , que casi siempre puede ser solo }para salvar a otro. Algo que podría ayudarlo a ahorrar más caracteres es el operador de repetición de cadena x, considere print 1x20o algo por el estilo ... :) ¡Espero que ayude!
Dom Hastings
@DomHastings Hombre, gracias! Lo reduje a 2 bytes en total debido a su ayuda :) Muchas gracias por sus sugerencias.
Codefun64
1
Creo que puedes acortarlo a esto print"n"x(21*pop||42). Ejecutar en la línea de comando conperl -e'print"n"x(21*pop||42)' 3 | wc -c
hmatt1
14

Pyth , 10 9-25 = -16

-1 por Dennis

**N9?zvz2

Imprime [entrada] * 9 caracteres de comillas, o 2 * 9 si la entrada está vacía.

isaacg tiene una respuesta más corta aquí

Pyth , 1 byte

T

Impresiones 10. Es una variable integrada que se inicializa a 10.

lirtosiast
fuente
Sería útil si .x funcionara con errores. ¿Hay una justificación de por qué no lo hace?
lirtosiast
2
Mi mejor conjetura es que Qhace que Pyth evalúe la entrada antes de que se ejecute el código real. **N9.xvz2funciona como se esperaba, pero no es más corto que **N9?zvz2.
Dennis
2
Cualquier nueva línea final se incluye en el recuento de bytes de salida. Tsalidas 10y una nueva línea. Uso d, es un espacio al que se agrega una nueva línea
Stan Strum el
9

Macarrones 0.0.2 , 23 caracteres

print tobase pow 32 9 2

Imprime 32 9 en binario, que resulta convenientemente tener 46 caracteres de largo (es 1000000000000000000000000000000000000000000000), sin una nueva línea final.

Pomo de la puerta
fuente
9

JavaScript, 4 bytes

~$ cat main.js
+1/0
~$ nodejs main.js
Infinity

Creo que esta es la solución JS más corta posible sin ES6: P

Unihedron
fuente
¿Qué versión de NodeJS tienes? Esto no funciona con el mío.
Dennis
1
Esto también funciona en la consola de Firefox.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
1
La nueva línea final debe incluirse en la longitud de salida.
lirtosiast
Node.js v0.10.40no imprime nada porque no hay un comando de impresión. ¿Tiene una versión diferente de Node.js o solo funciona en un shell que imprime la evaluación de una línea? (en cuyo caso no creo que esta respuesta sea válida).
Nateowami
¿4 bytes? Por favor, haga que esto sea del tamaño correcto.
Star OS
9

C, 27 25

main(){printf("%50f",0);}

Gracias @Titus por eliminar 2 bytes


Y para mi solución de 16 bytes no competitiva en C, vaya aquí: https://codegolf.stackexchange.com/a/111330/16513

^ Digo que no compite porque el código de error podría depender de su compilador. También tenga en cuenta que estoy usando GCC en esa solución. Además, no estoy seguro de si rompe la regla 1 o no, creo que probablemente lo hace, así que seguí adelante y lo etiqueté como no competidor

Albert Renshaw
fuente
1
No creo que eso cuente como un programa C válido pero main(){printf("%0.XXf",0);}funciona.
wefwefa3
2
@Zereges No, C tiene la regla de "declaración implícita" que generalmente le permite usar cosas sin la adecuada #include. El compilador emitirá una advertencia y, a veces, se bloqueará, pero generalmente funcionará .
anatolyg
1
@AlbertRenshaw Además, no creo que funcione aquí .
Zereges
1
Tenga en cuenta que 27 * 2! = 38.
mbomb007
1
@Zereges. Este código no exhibe un comportamiento indefinido. Las características de "declaración implícita" y "tipo de retorno implícito" están en desuso en estándares recientes, pero su uso aún está permitido y los resultados están bien definidos. Hay circunstancias en el uso de tales características que provocan un comportamiento indefinido, pero este código no las involucra.
Peter
7

V , 2 bytes

Esto salidas

ÿÿÿÿ

Pruébalo en línea!

Explicación

Esta es una respuesta realmente hacky, y funciona al abusar de las partes internas de V. Esencialmente, cómo funciona es que ÿes un comando en V que indica que el programa ha terminado, y todos los comandos pendientes deben completarse. De lo contrario, algunas terminaciones implícitas no funcionarían, y la interpretación se colgaría con más frecuencia. Este comando se envía automáticamente varias veces al final del programa, y ​​la mayoría de las veces no tiene ningún efecto en la salida.

ées un comando que inserta un solo carácter. Sin embargo, lo hace agarrando un byte sin procesar, por lo que no interpreta ÿcomo "final", lo interpreta como "este es el carácter que debe insertar". hace que inserte este personaje 4 veces en lugar de uno.

DJMcMayhem
fuente
7

bash, 11 bytes

Aquí hay un uso agradablemente irónico de una herramienta de compresión de datos :) ...

gzip -f<<<2

Aquí hay un volcado hexadecimal de la salida (22 bytes) ...

0000000: 1f 8b 08 00 e3 ce 32 59 00 03 33 e2 02 00 90 af  ......2Y..3.....
0000010: 7c 4c 02 00 00 00                                |L....
Wossname
fuente
Esto genera 22 bytes de "ASCII extendido" (por ejemplo, 8 bits por carácter). Esto parece cumplir con la definición de OP de ASCII si lee los comentarios en la publicación de la pregunta.
Wossname
En TIO obtuve 16, pero en mi máquina Linux, obtuve 34
Stan Strum
@StanStrum, no sé qué es TIO, pero ese 34 bajo Linux es extraño. ¿Quizás tienes un alias de gzip para usar diferentes interruptores a la normalidad?
Wossname
No sé si ese es el caso, pero eso parece extraño. Lo probaré en algunos LiveCD para ver si lo estropeé con uno de mis programas @Wossname
Stan Strum el
1
No soy ese tipo, y no aprovecharé mi nuevo tyvm de 129 repeticiones. Veré si puedo hacer una versión que funcione en mi instalación de Linux
Stan Strum el
6

dc, 19-25 = -6

2?19*[1n1-d0<l]dslx

Toma un número (se empuja 2 a la pila como respaldo) y lo multiplica por 19. Imprime un 1(sin nueva línea) y disminuye el número. Se repite mientras el número es mayor que 0.

daniero
fuente
6

C ++, 80 bytes

#include<iostream>
int main(){int i=0;while(i<20){std::cout<<&i;i++;}return 0;}

tenga en cuenta que el carácter de nueva línea es de dos caracteres. (si no desea que sea así, cambie i <20 a i <= 19 para volver al mismo número de bytes).

Salida de muestra (cambiará cada vez)

0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C

misma dirección de memoria de 8 caracteres 20 veces.

Liam
fuente
Algunas sugerencias de golf: un forbucle es más corto que un whilebucle y le permite soltar los frenos, es un poco más barato de usar cstdioy solo printfun cordel, y no necesita devolver nada.
Lucas
Puede despojar su enfoque a 63 bytes: #include<iostream> int main(){for(int i=10;--i;)std::cout<<&i;}Pero ya hay una respuesta más corta con un enfoque ligeramente diferente.
movatica
6

CJam, -9

q_,{i}{;2}?G*'X*

Explicación

  • q_,

Lee toda la entrada y la empuja, luego empuja la longitud.

  • {i}{;2}?

Si la longitud de la entrada es superior a cero, conviértala en un entero. De lo contrario, saque la entrada y presione 2.

  • G*

Empuja 16 (la longitud del programa), luego lo multiplica por 2 si no hay entrada, o por la entrada.

  • 'X*

Empuja X y lo multiplica por la parte superior de la pila.

The_Basset_Hound
fuente
@ThomasKwa Whoops. Actualizando en un segundo.
The_Basset_Hound
La coma no es necesaria, sin embargo, puede evitar el "si" por completo si hace una lógica "o": q2e|ile dará el número que desea
aditsu
También podría usar S en lugar de 'X, el único problema es que el resultado no será visible hasta que lo seleccione (bueno, si lo ejecuta fuera de línea y redirige a un archivo, no es un problema)
aditsu
Uh .. no importa, acabo de ver la respuesta de Dennis ahora: p
aditsu
Incluso con el condicional, puede acortar esto. No necesita calcular la longitud, ya que una cadena vacía ya es falsey. Tampoco es necesario sacar la cadena vacía de la pila, ya que no contribuye a la salida. Lo que también le permite evitar las llaves de la rama else. Se me ocurrió esto antes Miré a ninguna de las respuestas: r_{i}2?SB**.
Reto Koradi
6

> <> , 19 + 2 (indicador -v) - 25 = -4 bytes

l?!2f4+*v
-1o;!?::<

pruébalo aquí!

Gracias Cole y Sp3000

Primero verifica la longitud de la pila, si es 0 pon 2 en la pila. Lo multiplica por 21 (longitud del código), luego genera la representación unicode de ese número y lo disminuye por 1, realiza un bucle hasta 0. (tendrá que inspeccionar la salida para ver los caracteres, ya que el navegador no los mostrará)

torcado
fuente
1
Sí, lamento arruinar tu respuesta (pero es más corta que la mía, si eso te hace sentir mejor). Editar: whoops presionó enter demasiado pronto, su entrada tal como está ahora no es válida según la regla "Puede suponer que n siempre será un número entero positivo. Si no se proporciona ninguna entrada, n debe tener un valor predeterminado de 2". También creo que podría imprimir demasiados caracteres (va de 14 a 0, que son 15 caracteres según mi cuenta, no 14). Si estoy en lo correcto, l0=?2f6+*vcomo la primera línea y 1-::0=?;o>como la segunda deberían hacerlo bien.
cole
Hm, no estoy seguro de lo que quieres decir. No debería imprimir 0 en ningún caso. Poner un 2 como salida inicial de la pila (EDITAR: cosas que no puedo pegar) que, al menos usando este contador de caracteres, es de 28 caracteres.
torcado
Entiendo lo que estás diciendo ahora. Interpreté "Su programa puede tomar opcionalmente un número, n, como entrada", lo que significa que si la entrada fuera 2. Editaré la respuesta, ¡gracias! (también puedo guardar algunos usando una cadena en lugar de números)
torcado
Feliz de ayudar, especialmente si es> <>.
cole
2
?!es generalmente mejor que0=?
Sp3000
6

JavaScript (ES5), 68 bytes - 25 bonus = 43

alert(Array(1+(+prompt()||2)).join(document.scripts[0].textContent))

(en caso de que su navegador no permita que el fragmento se ejecute por razones de seguridad, pruebe este violín http://jsfiddle.net/thePivottt/c3v20c9g/ )

Este script solo funciona en un navegador que sigue al menos DOM3 (con Node.textContent) y ECMAScript 5 (o tal vez una versión anterior). Traté de hacer que sea lo más estándar y compatible posible. También supone que el script está en el primer scriptelemento del documento.

Realmente concatena múltiples copias del script en sí, lo cual es bastante impresionante . Tenga en cuenta que la herramienta de fragmentos en SE coloca espacios en blanco adicionales alrededor del script. Podríamos ignorar ese espacio en blanco, .trim()pero no lo considero necesario teniendo en cuenta que el programa es perfecto sin la intromisión de SE. Simplemente guarde este archivo HTML5 si desea ver que se ejecute perfectamente.

<!DOCTYPE html>
<html>
  <head>
    <title>Minimalist HTML5 page</title>
    <script>alert(Array(1+(+prompt()||2)).join(document.scripts[0].textContent))</script>
  </head>
</html>

Este script usa prompty alertporque console.logno es parte de ningún estándar, incluso si la mayoría de los navegadores modernos lo usan. Si el número de repeticiones pasadas no es un número válido o está vacío, el valor predeterminado es 2. Si la entrada es un número decimal, el programa se bloquea debido a la longitud inválida de la matriz.

El código usa algunas características interesantes de JavaScript:

  • Array(1+(+prompt()||2))

    • Array(INT) crea una matriz de celdas INT.

    • +prompt()toma una entrada y la convierte en un número. Si pasamos la entrada como una cadena, la Arrayfunción simplemente la envolvería en una matriz de un elemento.

    • +prompt()||2devuelve la entrada si es verdadera , de lo contrario devuelve 2.

    • Todo este código crea una matriz de N elementos vacíos, donde N es uno más que la cantidad de repeticiones pedidas.

  • .join(document.scripts[0].textContent)

    • El join(STRING)método de la matriz crea una cadena concatenando todas las celdas, colocando la cadena proporcionada entre los valores. En este programa, hay N + 1 elementos vacíos en la matriz, o exactamente N puntos intermedios. El resultado será una cadena que contiene N veces la cadena proporcionada.

    • document.scripts[o]Es el primer <script>elemento del documento.

    • El textContentde Nodecasos devuelve todo el texto se encuentra dentro de ellos y de sus nodos secundarios, incluyendo guiones.

dominó
fuente
Tenga en cuenta que si usa ES6 str.repeaty aún genera el código en sí mismo, el puntaje se reduce a 26, pero es un poco aburrido: P
Domino
Erm, no sé de dónde vino ese 26, ahora tengo 33. Probablemente debería dormir un poco.
Domino
Tenga en cuenta que algunas configuraciones del navegador pueden evitar el uso de prompt en un fragmento. Puede que tenga que guardarlo para ejecutarlo.
Domino
6

JavaScript ES6, 33-25 = 8

(a=2)=>Array(a*33).fill(0).join``

Pruébalo en línea!

DankMemes
fuente
Parece que no puedo hacer que este código se ejecute en la consola. ¿Es correcto? "Error de sintaxis no capturado: token inesperado =>"
Malavos
@Malavos necesita un navegador compatible con es6 como el último Firefox. Chrome no admite args predeterminados afaik
DankMemes
Estoy usando UCBrowser, ¡pero es cierto! De todos modos se basa en cromo y gecko. Lo probé todas las noches, obtuve "000000000000000000000000000000000000000000000000000000000000000000". ¡Agradable! ¿Podrías explicarme tu código? Soy un novato
Malavos
2
@Malavos El código rígido 33es en realidad la longitud del código. Crea una nueva matriz con longitud 33*adonde ael parámetro de entrada está predeterminado en 2 según el OP, lo llena y devuelve una cadena unida.
DankMemes
2
Al crear su matriz con un elemento adicional, puede llenar con la unión Arrary(1+a*<length>)yjoin`0`
Shaun H
5

Julia, 42 bytes - 25 = 17

print("@"^42((r=readline())>""?int(r):2))

Esto lee una línea de STDIN usando readline(). Si está vacío, es decir, no se ha proporcionado ninguna entrada, entonces n se define como la entrada convertida a un entero. De lo contrario n es 2. A continuación, imprimir 42 n @ s a STDOUT.

Alex A.
fuente
5

Perl, 18-25 = -7

print$=x(<>*9||18)

La variable especial $=, también conocida como $FORMAT_LINES_PER_PAGE, comienza su vida útil y 60, por lo tanto, solo necesita duplicarse la mitad de veces que la salida de bytes necesaria.

primo
fuente
1
Tuve una respuesta muy similar de: print$=x9x(pop||2)¡bien!
Dom Hastings