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

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