Crie saída duas vezes o comprimento do código


85

O desafio

Escreva um programa completo que grave duas vezes mais bytes na saída padrão do que o tamanho do programa.

Regras

  • O programa deve gravar caracteres ASCII na saída padrão.

  • O conteúdo da saída não importa.

  • A saída, medida em bytes, deve ter exatamente o dobro do tamanho do programa, também medida em bytes, a menos que você cumpra o bônus.

  • Qualquer nova linha à direita é incluída na contagem de bytes da saída.

Bônus

Seu programa pode opcionalmente pegar um número n, como entrada. Nesse caso, a saída deve ser exatamente n * program lengthbytes. Você pode assumir que n sempre será um número inteiro positivo. Se nenhuma entrada for fornecida, o npadrão será 2.

Se você fizer isso, poderá subtrair 25 bytes da sua pontuação.

O programa mais curto vence.

Restrições

  • Sem brechas padrão.

  • O programa deve ter pelo menos 1 byte de comprimento.

  • Não é necessário adicionar espaço em branco desnecessário ao código-fonte para alterar seu comprimento. Da mesma forma, os comentários não contam.

  • A menos que você cumpra o bônus, o programa não deve aceitar nenhuma entrada. Se você cumprir o bônus, o número inteiro deverá ser a única entrada.

A pontuação mais baixa (tamanho do programa em bytes - bônus) vence.

A resposta mais curta para cada idioma vence para esse idioma .

Classificação

Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma.

Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:

# Language Name, N bytes

onde Nestá o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:

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

Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:

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

Você também pode transformar o nome do idioma em um link que será exibido no snippet do placar de líderes:

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


1
Para o bônus, a saída precisa ser exatamente n * program lengthbytes ou isso é mínimo?
— Xnor

2
Tem que ser exato
— Daniel M.

3
Parece que o snippet de código precisa ser modificado para lidar com pontuações negativas.
— El'endia Starman 02/10/2015

40
Um bônus de -25 é basicamente obrigatório para alguns idiomas, pois permite obter uma pontuação negativa. No futuro, sugiro usar um bônus em porcentagem ou apenas fazer do bônus a pergunta se você realmente deseja respostas. Ou simplesmente não tem um bônus.
— Xnor

4
Para "nenhuma entrada é fornecida", assumimos que a cadeia vazia é passada? Não vejo como alguém lida com o usuário nunca digitando uma entrada e o programa apenas esperando.
— Xnor

Respostas:


138

HQ9 + , 2 bytes

QQ

saídas

QQQQ

Eu acho que não é proibido aqui.


14
Pode não ser proibido, mas não é muito inter ... espere, como conseguiu oito votos positivos?
— John Dvorak

58
@JanDvorak Por mais que eu não goste do HQ9 +, isso para mim é um uso criativo. Esse uso provavelmente não estava previsto quando o HQ9 + foi criado, o que é mais do que se pode dizer da maioria dos outros programas do Hq9 +. +1 de mim.
— Digital Trauma

13
Eu nem sabia que Q imprime "o código fonte do programa". Eu pensei que apenas imprimia um Q. Bem feito para identificar a diferença crucial!
— Timwi

7
@ LegionMammal978 Tecnicamente, esse é um desafio constante de saída, o que significa que linguagens que não são de programação são permitidas.
— a spaghetto

3
Isso tem 120 votos. 1.200 representantes para digitar QQem um intérprete.
— Stan Strum 23/09

95

Shakespeare, 768

Sim, Shakespeare não é um idioma de golfe. Produz 1.536 espaços.

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

Ok, eu vou jogar golfe. Observe que o acima exposto não é compilado em nenhuma implementação existente de Shakespeare porque eu a escrevi minuciosamente à mão (mas estou preparado para defender sua correção.)

O abaixo é traduzido para C com um aviso no spl-1.2.1 e gera 512 espaços:

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.

15
Vou marcar com +1 se você realmente jogar isso.
— lirtosiast

1
Que tipo de artesanato é esse? Eu nem sabia que tal coisa existia ...
— Malavos

10
uau, você jogou golfe. Santos paraísos.
— Malavos

2
@Malavos Eu estava apenas brincando sobre a maneira como você grafada bruxaria, desculpe - tanto o que e que são, provavelmente, ok
— gato

2
Não, peço seu perdão se parecesse ofensivo ou defensivo. Eu estava apenas fazendo uma referência ao Futurama! :) Em uma nota séria, ainda estou surpreso com esta resposta. Precisamos de mais pessoas no site.
— Malavos

69

Lembre-se, 17 bytes

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

16 NOOPs. Em seguida, o depurador !é chamado e despeja a memória no console. A memória está vazia, mas o cabeçalho tem 34 bytes:

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

Experimente aqui .


13
Esta é uma das respostas mais legais da IMO.
— cat

67

Mathematica REPL, 1 byte

#

Imprime #1.


14
A pergunta diz "escrever um programa completo"; este é apenas um trecho REPL.
— usar o seguinte

60

CJam, -17 bytes

r2e|i8,*

O código fonte tem 8 bytes de comprimento e se qualifica para o bônus de -25 bytes .

Experimente online no intérprete CJam .

Como 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.

4
Porcaria. Bem feito.
— The_Basset_Hound

1
Como são bytes negativos?
— Nick T

3
@NickT 8 bytes (código fonte) - 25 bytes (bônus).
— Dennis

16
Você pode salvar vários milhões de cópias se ficar sem espaço em disco.
— Robert Fraser

Não, eu acho metadados tornaria positiva
— CalculatorFeline

47

Python 2.6, 10

print`-.1`

Imprime -0.10000000000000001, que é de 20 caracteres.

Observe que a sequência repr mostra mais precisão. print-.1apenas fornece -.1e print.1/3fornece 0.0333333333333apenas 13 dígitos de precisão.


5
Isso não funciona mais no Python 2.7 ou 3.1.
— Anders Kaseorg

@AndersKaseorg Então repl.it está errado, então?
— mbomb007

2
@ mbomb007 Aparentemente. O GitHub sugere que essa não é a única coisa errada. Ideone concorda com o CPython.
— Anders Kaseorg

O mesmo comentário da sua outra resposta: isso não imprime uma nova linha à direita, fornecendo 21 bytes de saída?
— Martin Ender

1
Você quer dizer print`+.1`?
— mbomb007

46

Semente , 10 bytes

4 56111240

Isso é compilado no programa Befunge (encontrado pela força bruta)

9k.@

que produz os seguintes 20 bytes quando executado (testado no CCBI, observe o espaço à direita):

0 0 0 0 0 0 0 0 0 0 

Por não estar familiarizado com o Befunge 98, tive que verificar as especificações algumas vezes para este:

  • k parece bastante danificado para mim, executando mais uma vez do que o pretendido, devido à passagem do IP para a instrução repetida
  • As pilhas do Befunge 98 têm zeros infinitos na parte inferior
  • . saídas como um número, seguido por um espaço

18
.... eu .... apenas .... não posso.
— Daniel M.

44

R, 3 2 bytes

Código

!0           # NOT FALSE

Saídas

TRUE

Uau, finalmente R, finalmente.

Parece que {}também funciona, geraNULL

Bônus 33 16 bytes:

Código

rep(1,number*16)

Saídas

# 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

2
Espero que o uso do nome "número" para a variável não seja equivalente a "adicionar espaço em branco desnecessário ao código-fonte"
— #

26

Matlab, 7 5 bytes

2 bytes a menos graças ao @flawr!

123;3

Resultado:

insira a descrição da imagem aqui

A saída contém , portanto, 10 bytes.newline ans = newline newline 3 newline


1
Vamos esperar ninguém tem format compactcomo padrão :)
— Sanchises

2
@sanchises :-) Sim, isso depende de como as preferências do Matlab foram definidas. Mas format looseé a preferência padrão
— Luis Mendo

2
Que tal 123;4? É três bytes mais curtos =)
— flawr 30/03/16

@flawr Boa ideia! Publique você mesmo!
— Luis Mendo

Não, de forma demasiada inspirado por sua resposta =)
— flawr

25

JavaScript, 2 bytes!

Ainda menor que a solução de 3 bytes:

!0

Retorna trueapós a execução.


2
Você deve observar que isso só funciona em um ambiente REPL
— Cyoce

21

Python 2, 11

print`id`*1

Imprima a representação de sequência do built-in id, que é 22 caracteres:

<built-in function id>

O *1é obter o código para 11 caracteres. Você também poderia fazer print id;00.

Alternativas mais chatas 11 são:

print'1'*22
print 9**21

Eu fui brincar com números complexos, mas, infelizmente, print.8/-9jé um caractere curto
— SP3000

Eles não imprimem uma nova linha à direita, elevando a contagem de bytes da saída para 23?
— Martin Ender

1
@ MartinBüttner Essa regra foi editada mais tarde, mas alterá-la para print id,;1suficiente para suprimir a nova linha à direita. Também não adiciona um espaço à direita.
— Xnor

@xnor print 9**21não funciona. São 21 caracteres. print 9**23funciona embora
— Koishore Roy 13/04

18

dc, 10 - 25 = -15

2?A*Ar^1-n

Toma uma linha em branco para "sem entrada".

Calcula 10 ^ (10 * n) - 1, onde n é a entrada ou 2 se a entrada estiver vazia. Imprime uma sequência de 9s do comprimento necessário.

  • 2 pressione 2 para a pilha, caso a entrada esteja vazia
  • ? enviar entrada para a pilha
  • Apressione 10 para a pilha (dc tem atalhos A- Fpara 10 - 15)
  • * pop duas vezes e multiplique (multiplique a entrada por 10)
  • A empurre 10 para a pilha
  • r dois elementos da pilha superior reversa
  • ^ exponenciada 10 ^ (10 * entrada)
  • 1- subtrair 1 do topo da pilha
  • n imprima sem nova linha.

caramba, isso é tão inteligente. E com sorte com o comprimento do código lá :) Mas talvez você deva adicionar uma pequena explicação para os não iniciados. E acho que a nova linha conta, então você provavelmente deve usar em nvez de p.
— Daniero 3/10

17

TI-Basic, 3 bytes

1ᴇ5

Imprime 100000.


Na verdade, acho que a nova linha contaria, então você pode fazer 0por 1 byte.
— lirtosiast

1
Que tal ᴇ3? E @lirtosiast, já que o TI-Basic não tem novas linhas, sou cético quanto a isso.
— Jakob

16

Brainfuck, 14 bytes

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

Este é um pequeno exercício matemático. Vamos denotar o número de +caracteres no código por ae o número de .caracteres por b.

O código gera a*bbytes, com valores de abaixo a 1(estes são bytes não ASCII, mas parece OK de acordo com as especificações). O comprimento do código é a+b+3. Então nós temos

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

Tentando valores diferentes para ae b, vemos que o mínimo para a+b+3é alcançado para

a = 4       or       a = 7
b = 7                b = 4

Um programador veterano do cérebro vai descobrir a +[[>....]-<<+]opção.
— orthoplex

@orthoplex Quando li o seu comentário, imediatamente enviei um programa e um programador: brainfucker
— Poke

15

gs2 , -18 bytes

CP437 :W↕0!↨.2

Despejo hexagonal: 57 12 30 21 17 2e 32

Wlê números de STDIN em uma lista. ↕0anexa um 2 à lista e !extrai o primeiro elemento. Então ↨.(a lista [0,1,2,3,4,5,6]) é repetida ( 2) várias vezes.

Isso é muito semelhante à resposta CJam de Dennis - o gs2 apenas combina re iem um byte.

Nota : Eu tive que corrigir um erro na gs2implementação para que isso funcionasse: anteriormente, cada programa tinha uma nova linha oculta anexada à sua saída, o que era totalmente involuntário. Ele só veio à tona depois que tentei resolver esse programa (o idioma foi desenvolvido para o golfe anárquico, que ignora novas linhas em todos os problemas), e eu só instalei uma correção para dominar agora, fique à vontade para responder a essa pergunta com um pouco de sal.


1
Primeira resposta GS2 que vi que não possui caracteres de naipe de cartas!
— Cyoce

14

Perl 5, 16 bytes - 25 = -9

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

Esta é uma abordagem ímpar para o problema.

Execute com o -pargumento da linha de comandos.

Eu vi uma resposta Perl abaixo que usava uma variável especial para imprimir mais texto - e, assim, reduzir sua contagem de bytes. Então, eu usei uma variável especial muito mais detalhada. Imprime 8 caracteres com um nome de variável de 2 caracteres. Assim, com uma contagem de bytes de 16 (preenchida com um caractere de espaço em branco para torná-lo 16), ela imprime 2 * $], onde $]a versão do Perl é impressa como 5.xxxxxx, dependendo da sua versão do Perl. Sem entrada, ele a imprime quatro vezes, igual 8*4ou 32, que é o dobro da contagem de bytes do código.

Eu amo Perl.


Eu acho que isso falha para entrada vazia. De acordo com as regras, se nenhuma entrada for fornecida, o múltiplo deve usar como padrão 2. #
— Alex A.

@AlexA. Porra, eu senti falta disso. Novo no código de golfe. Edite a entrada, mas minha resposta tem muitos caracteres agora, porque não tenho idéia de como fazer isso de forma mais criativa em perl :(
— Codefun64

2
Olá, mais algumas dicas que podem ajudá-lo aqui, por padrão em um script de programa, pope shifttrabalhar @ARGV(em um subtrabalho @_), para que você possa fazer algo como $n=pop||2baixar o primeiro bloco de código e ter ;}no final , que quase sempre pode ser apenas }para salvar outro. Algo que pode ajudá-lo a economizar mais caracteres é o operador de repetição de string x, considere print 1x20ou algo nesse sentido ... :) Espero que ajude!
— Dom Hastings

@DomHastings Man, obrigado! Eu o reduzi para 2 bytes no total por causa de sua ajuda :) Muito obrigado por suas sugestões.
— Codefun64

1
Eu acho que você pode reduzi-lo a isso print"n"x(21*pop||42). Execute na linha de comando comperl -e'print"n"x(21*pop||42)' 3 | wc -c
— hmatt1

14

Pitão , 10 9-25 = -16

-1 por Dennis

**N9?zvz2

Imprime [entrada] * 9 caracteres de aspas ou 2 * 9 se a entrada estiver vazia.

isaacg tem uma resposta mais curta aqui

Pitão , 1 byte

T

Imprime 10. É uma variável incorporada que inicializa em 10.


Seria útil se .x funcionasse com erros. Existe uma justificativa para o motivo?
— Lsd #

2
Meu melhor palpite é que Qfaz com que Pyth avalie a entrada antes que o código real seja executado. **N9.xvz2funciona como esperado, mas não é mais curto que **N9?zvz2.
— Dennis

2
Qualquer nova linha à direita é incluída na contagem de bytes da saída. Tsaídas 10e uma nova linha. Use d, é um espaço que recebe uma nova linha acrescentada
— Stan Strum

9

Macarrão 0.0.2 , 23 caracteres

print tobase pow 32 9 2

Imprime 32 9 em binário, o que resulta convenientemente com 46 caracteres (é 1000000000000000000000000000000000000000000000), sem uma nova linha à direita.


9

JavaScript, 4 bytes

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

Eu acho que essa é a solução JS mais curta possível sem o ES6: P


Qual versão do NodeJS você possui? Isso não funciona com o meu.
— Dennis

1
Isso também funciona no console do Firefox.
— N

1
A nova linha à direita deve ser incluída no comprimento da saída.
— Lirtosiast

O Node.js v0.10.40não imprime nada, porque não há comando de impressão. Você tem uma versão diferente do Node.js ou isso funciona apenas em um shell que imprime a avaliação de uma linha? (nesse caso, não acho que essa resposta seja válida).
— Nateowami 7/10

4 bytes? Por favor, faça isso como o tamanho correto.
— Star OS

9

C, 27 25

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

• Obrigado @Titus por interromper 2 bytes


E para a minha solução não concorrente de 16 bytes em C, acesse aqui: https://codegolf.stackexchange.com/a/111330/16513

^ Eu digo não concorrente porque o código de erro pode depender do seu compilador. Observe também que estou usando o GCC nessa solução. Também não tenho certeza se ele infringe a regra 1 ou não, acho que provavelmente o fez.


1
Eu não acho que isso conta como um programa C válido, mas main(){printf("%0.XXf",0);}funciona.
— Wefwefa3

2
@Zereges Não, C possui a regra "declaração implícita" que geralmente permite que você use coisas sem o devido #include. O compilador emitirá um aviso e, às vezes, trava, mas geralmente funciona .
— Anatolyg

1
@ AlbertRenshaw Além disso, não acho que funcione aqui .
— Zereges

1
Observe que 27 * 2! = 38. #
— mbomb007 5/05

1
@Zereges. Este código não exibe comportamento indefinido. Os recursos "declaração implícita" e "tipo de retorno implícito" foram descontinuados nos padrões recentes, mas seu uso ainda é permitido e os resultados são bem definidos. Há circunstâncias em que o uso desses recursos causa comportamento indefinido, mas esse código não os envolve.
— Pedro #

7

V , 2 bytes

4é

Isso gera

ÿÿÿÿ

Experimente online!

Explicação

Esta é uma resposta realmente hacky, e funciona abusando dos elementos internos do V. Essencialmente, como ele funciona ÿé um comando em V que indica que o programa acabou, e todos os comandos pendentes devem ser concluídos. Caso contrário, alguns finais implícitos não funcionariam e a interpretação seria interrompida com mais frequência. Este comando é enviado automaticamente várias vezes no final do programa e, na maioria das vezes, não afeta a saída.

éé um comando que insere um único caractere. No entanto, ele faz isso pegando um byte bruto, para que não interprete ÿcomo "final", interpreta como "esse é o caractere que você precisa inserir". 4éfaz com que ele insira esse caractere 4 vezes em vez de um.


7

bash, 11 bytes

Aqui está um uso agradavelmente irônico de uma ferramenta de compactação de dados :) ...

gzip -f<<<2

Aqui está um dump hexadecimal da saída (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....

Isso gera 22 bytes de "ASCII estendido" (por exemplo, 8 bits por caractere). Isso parece atender à definição de ASCII do OP se você ler os comentários no post da pergunta.
— Wossname

No TIO , tenho 16, mas na minha máquina Linux, tenho 34 #
— Stan Strum

@ StanStrum, não sei o que é o TIO, mas os 34 no Linux são estranhos. Talvez você tenha gzip alias para usar diferentes opções ao normal?
— Wossname 23/09

Não sei se é esse o caso, mas isso parece estranho. Vou tentar em alguns LiveCDs para ver se eu estraguei tudo com um dos meus programas @Wossname
— Stan Strum

1
Eu não sou esse cara, e não vou tirar proveito do meu recém-ganho tyvm de 129 representantes. Vou ver se eu posso fazer uma versão que funciona em minha instalação do Linux
— Stan Strum

6

dc, 19 - 25 = -6

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

Pega um número (2 é enviado para a pilha como backup) e o multiplica por 19. Imprime a 1(sem nova linha) e diminui o número. Loops enquanto o número for maior que 0.


6

C ++, 80 bytes

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

observe que o caractere de nova linha possui dois caracteres. (se você não quiser, altere i <20 para i <= 19 para voltar à mesma contagem de bytes.)

Saída de amostra (sempre será alterada)

0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C

mesmo endereço de memória de 8 caracteres 20 vezes.


Algumas dicas de golfe: um forloop é mais curto que um whileloop e permite que você largue o aparelho, é um pouco mais barato de usar cstdioe apenas printfuma corda, e você não precisa retornar nada.
— Lucas

Você pode reduzir sua abordagem para 63 bytes: #include<iostream> int main(){for(int i=10;--i;)std::cout<<&i;}Mas já existe uma resposta mais curta com uma abordagem ligeiramente diferente.
— movatica

6

CJam, -9

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

Explicação

  • q_,

Lê toda a entrada e a pressiona, depois pressiona o comprimento.

  • {i}{;2}?

Se o comprimento da entrada estiver acima de zero, converta-o em um número inteiro. Caso contrário, pop a entrada e pressione 2.

  • G*

Empurra 16 (o comprimento do programa) e depois multiplica por 2 se não houver entrada ou pela entrada.

  • 'X*

Empurra X e multiplica pelo topo da pilha.


@ThomasKwa Whoops. Atualizando em um segundo.
— #

A vírgula não é necessária; no entanto, você pode evitar o "se" completamente se fizer uma lógica "ou": q2e|ifornecerá o número desejado
— aditsu

Além disso, você pode usar S em vez de 'X, o único problema é que a saída não estará visível até você selecioná-la (bem, se você a executar offline e redirecionar para um arquivo, não há problema)
— aditsu

Deixa pra lá, acabei de ver a resposta de Dennis agora: p
— aditsu 03/10/2015

Mesmo com o condicional, você pode reduzir isso. Você não precisa calcular o comprimento, pois uma sequência vazia já é falsa. Você também não precisa retirar a string vazia da pilha, pois ela não contribui para a saída. O que também permite que você evite as chaves para o ramo else. Eu vim com isso antes Olhei para qualquer uma das respostas: r_{i}2?SB**.
— Reto Koradi

6

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

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

teste aqui!

Obrigado Cole e Sp3000

Primeiro, verifique o comprimento da pilha, se for 0, coloque 2 na pilha. Multiplica por 21 (comprimento do código), emite a representação unicode desse número e a diminui em 1, faz um loop até 0. (você terá que inspecionar a saída para ver os caracteres, pois o navegador não os exibirá)


1
Sim, desculpe arruinar sua resposta (mas é mais curta que a minha, se isso faz você se sentir melhor). Edit: whoops clicam em enter muito cedo, sua entrada como está agora não é válida de acordo com a regra "Você pode assumir que n sempre será um número inteiro positivo. Se nenhuma entrada for fornecida, n deve ter como padrão 2." Também acho que pode imprimir muitos caracteres (vai de 14 a 0, que são 15 caracteres pela minha contagem, não 14). Se eu estiver correto, l0=?2f6+*vcomo a primeira linha e 1-::0=?;o>a segunda devem corrigir.
— cole

Hm, não sei o que você quer dizer. De qualquer forma, não deve imprimir 0. Colocar um 2 como saída inicial da pilha (EDIT: coisas que não consigo colar) que, pelo menos usando esse contador de caracteres , são 28 caracteres.
— Torcido 03/10/2015

Eu entendo o que você está dizendo agora. Interpretei "Seu programa pode, opcionalmente, pegar um número, n, como entrada", o que significa que, se a entrada for 2. Vou editar a resposta, obrigado! (também posso poupar algum usando uma corda em vez de números)
— torcado

É um prazer ajudar, especialmente se for> <>.
— cole

2
?!normalmente é melhor que0=?
— Sp3000 4/15

6

JavaScript (ES5), 68 bytes - 25 bônus = 43

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

(caso seu navegador não permita a execução do snippet por motivos de segurança, tente este violão http://jsfiddle.net/thePivottt/c3v20c9g/ )

Esse script funciona apenas em um navegador que segue pelo menos DOM3 (com Node.textContent) e ECMAScript 5 (ou talvez uma versão mais antiga). Eu tentei fazer é o mais padrão possível e compatível. Ele também pressupõe que o script esteja no primeiro scriptelemento do documento.

Na verdade, concatena várias cópias do próprio script, o que é bastante impressionante . Observe que a ferramenta de snippet no SE coloca espaço em branco extra em torno do script. Poderíamos ignorar esse espaço em branco, .trim()mas não acho necessário, considerando que o programa é perfeito sem a intromissão da SE. Salve este arquivo HTML5 se quiser vê-lo funcionar perfeitamente.

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

Esse script usa prompte alertporque console.lognão faz parte de nenhum padrão, mesmo que a maioria dos navegadores modernos o utilize. Se o número de repetições passadas não for um número válido ou estiver vazio, o padrão será 2. Se a entrada for um número decimal, o programa trava devido ao comprimento inválido da matriz.

O código usa alguns recursos interessantes do JavaScript:

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

    • Array(INT) cria uma matriz de células INT.

    • +prompt()pega uma entrada e a transforma em um número. Se passássemos a entrada como uma string, a Arrayfunção simplesmente a envolveria em uma matriz de um elemento.

    • +prompt()||2Retorna a entrada se for truthy , senão ele retorna 2.

    • Todo esse código cria uma matriz de N elementos vazios, em que N é mais um que a quantidade de repetições solicitadas.

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

    • O join(STRING)método da matriz cria uma string concatenando todas as células, colocando a STRING fornecida entre os valores. Neste programa, há N + 1 elementos vazios na matriz ou exatamente N pontos intermediários. O resultado será uma sequência contendo N vezes a STRING fornecida.

    • document.scripts[o]é o primeiro <script>elemento do documento.

    • As instâncias textContentof Noderetornam o texto inteiro encontrado dentro deles e em seus nós filhos, incluindo scripts.


Observe que se você usa ES6 str.repeate ainda gera o código em si, ele reduz a pontuação para 26, mas é um pouco chato: P
— Domino

Não sei de onde vieram esses 26, agora tenho 33. Provavelmente deveria dormir um pouco.
— Domino

Observe que algumas configurações do navegador podem impedir o uso de prompt em um trecho. Talvez você precise salvá-lo para executá-lo.
— Domino

6

JavaScript ES6, 33 - 25 = 8

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

Experimente online!


Não consigo fazer esse código rodar no console. Está certo? "SyntaxError não capturado: token inesperado =>"
— Malavos

@Malavos, você precisa de um navegador compatível com es6, como o Firefox mais recente. O Chrome não suporta argumentos padrão depois
— DankMemes 5/15

Estou usando o UCBrowser, mas está certo! É baseado em cromo e lagartixa de qualquer maneira. Tentei todas as noites, obtive "0000000000000000000000000000000000000000000000000000000000000000000000". Agradável! Você poderia explicar seu código para mim? Eu sou um novato.
— Malavos

2
@Malavos O codificado 33é, na verdade, o comprimento do código. Ele cria uma nova matriz com comprimento, 33*aonde aé o parâmetro de entrada padrão 2, conforme o OP, preenche e retorna uma sequência de caracteres unida.
— DankMemes

2
Criando seu array com um elemento extra, você pode preencher com a junção Arrary(1+a*<length>)ejoin`0`
— Shaun H #:

5

Julia, 42 bytes - 25 = 17

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

Isso lê uma linha de STDIN usando readline(). Se estiver vazio, ou seja, nenhuma entrada foi fornecida, então n é definido como a entrada convertida em um número inteiro. Caso contrário, n é 2. Em seguida, imprimir 42 n @ s para STDOUT.


5

Perl, 18-25 = -7

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

A variável especial $=, aka $FORMAT_LINES_PER_PAGE, inicia sua vida útil 60e, portanto, só precisa ser duplicada pela metade do número de bytes necessário.


1
Eu tive uma resposta muito semelhante a: print$=x9x(pop||2)legal!
— Dom Hastings
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.