Créer une sortie deux fois plus longue que le code

85

Le défi

Ecrivez un programme complet qui écrit deux fois plus d'octets sur la sortie standard que la longueur du programme.

Règles

  • Le programme doit écrire des caractères ASCII sur la sortie standard.

  • Le contenu de la sortie n'a pas d'importance.

  • La sortie, mesurée en octets, doit correspondre exactement au double de la longueur du programme, également mesurée en octets, à moins que vous ne remplissiez le bonus.

  • Tout retour à la ligne est inclus dans le nombre d'octets de la sortie.

Prime

Votre programme peut éventuellement prendre un numéro n, en entrée. Si c'est le cas, la sortie doit être exactement en n * program lengthoctets. Vous pouvez supposer que n sera toujours un entier positif. Si aucune entrée n'est fournie, la nvaleur par défaut doit être 2.

Si vous faites cela, vous pouvez soustraire 25 octets de votre score.

Le programme le plus court gagne.

Restrictions

  • Aucune échappatoire standard.

  • Le programme doit avoir au moins 1 octet de long.

  • Pas d’ajout d’espaces inutiles au code source pour changer sa longueur. De même, les commentaires ne comptent pas.

  • Sauf si vous remplissez le bonus, le programme ne doit accepter aucune entrée. Si vous remplissez le bonus, l'entier doit être la seule entrée.

Le score le plus bas (longueur du programme en octets - bonus) gagne.

La réponse la plus courte pour chaque langue gagne pour cette langue .

Classements

Voici un extrait de pile permettant de générer à la fois un classement régulier et un aperçu des gagnants par langue.

Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:

# Language Name, N bytes

Nest la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:

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

Si vous souhaitez inclure plusieurs numéros dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier séparément les pénalités d'indicateur d'interprétation), assurez-vous que le score réel est le dernier numéro de l'en-tête:

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

Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:

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

Daniel M.
la source
1
Pour le bonus, la sortie doit-elle être exactement en n * program lengthoctets ou est-ce un minimum?
xnor
2
Cela doit être exact
Daniel M.
3
On dirait que l'extrait de code doit être modifié pour gérer les scores négatifs.
El'endia Starman
40
Un bonus de -25 est fondamentalement obligatoire pour certaines langues, car cela leur permet d'obtenir un score négatif. À l'avenir, je suggérerais d'utiliser un bonus en pourcentage, ou simplement de faire de ce bonus la question si vous voulez vraiment obtenir des réponses. Ou simplement, ne pas avoir de bonus.
xnor
4
Pour "aucune entrée n'est fournie", supposons-nous que la chaîne vide est passée? Je ne vois pas comment on traiterait avec l'utilisateur qui ne tape jamais une entrée et le programme qui attend.
xnor

Réponses:

138

HQ9 + , 2 octets

QQ

les sorties

QQQQ

Je pense que ce n'est pas interdit ici.

randomra
la source
14
Ce n'est peut-être pas interdit, mais ce n'est pas très inter ... attendez, comment est-il arrivé à huit votes positifs?
John Dvorak
58
@ JanDvorak Bien que je n'aime pas le HQ9 +, c'est pour moi une utilisation créative. Cet usage n’était probablement pas envisagé lors de la création de HQ9 +, ce qui est plus que l’on ne peut en dire autant de la plupart des autres programmes Hq9 +. +1 de moi.
Digital Trauma,
13
Je ne savais même pas que Q imprimait «le code source du programme». Je pensais que cela venait d’imprimer un Q. Bien fait pour avoir repéré la différence cruciale!
Timwi
7
@ LegionMammal978 Techniquement, il s'agit d'un défi de sortie constant, ce qui signifie que les langages sans programmation sont autorisés.
un spaghetto
3
Cela a 120 votes. 1200 représentants pour la saisie QQdans un interprète.
Stan Strum
95

Shakespeare, 768

Oui, Shakespeare n'est pas une langue de golf. Sortie 1 536 espaces.

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.

Edit: 256

Ok, je vais vraiment jouer au golf. Notez que ce qui précède ne compile aucune implémentation Shakespeare existante car je l’ai écrite péniblement à la main (mais je suis prêt à défendre son exactitude.)

Ce qui suit se traduit en C avec un avertissement dans spl-1.2.1 et génère 512 espaces:

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
la source
15
Je vais +1 si vous jouez réellement au golf.
lirtosiast
1
Quel genre de whitchcraft est-ce? Je ne savais même pas
qu'une
10
woah, vous avez joué au golf. Saints paradis.
Malavos
2
@Malavos Je plaisantais à propos de la façon dont vous avez mal orthographié la sorcellerie, désolé - les deux et ceux qui sont probablement corrects
Cat
2
Non, je demande votre pardon si je parais offensif ou défensif. Je faisais simplement référence à Futurama! :) Sur une note sérieuse, je suis toujours surpris par cette réponse. Nous avons besoin de plus de ceux sur le site.
Malavos
69

Rappel, 17 octets

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

16 NOOP. Ensuite, le débogueur !est appelé et vide la mémoire sur la console. La mémoire est vide, mais l'en-tête a une longueur de 34 octets:

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

Essayez-le ici .

mınxomaτ
la source
13
C’est l’une des réponses les plus froides à l’OMI.
Chat
67

Mathematica REPL, 1 octet

#

Impressions #1.

Alephalpha
la source
14
La question dit "écris un programme complet"; ceci est juste un extrait de REPL.
LegionMammal978
60

CJam, -17 octets

r2e|i8,*

Le code source a une longueur de 8 octets et permet de bénéficier du bonus de -25 octets .

Essayez-le en ligne dans l' interprète CJam .

Comment ça fonctionne

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
la source
4
Merde. Bien joué.
The_Basset_Hound
1
Comment sont les octets négatifs?
Nick T
3
@ NickT 8 octets (code source) - 25 octets (bonus).
Dennis
16
Vous pouvez enregistrer plusieurs millions de copies si vous manquez d'espace disque.
Robert Fraser
Non, je pense que les métadonnées le rendraient positif
CalculatorFeline
47

Python 2.6, 10

print`-.1`

Prints -0.10000000000000001, qui est 20 caractères.

Notez que la chaîne repr est plus précise. print-.1donne juste -.1, et print.1/3donne 0.0333333333333pour seulement 13 chiffres de précision.

Xnor
la source
5
Cela ne fonctionne plus dans Python 2.7 ou 3.1.
Anders Kaseorg
@ AndersKaseorg Donc, repl.it est faux, alors?
mbomb007
2
@ mbomb007 Apparemment. GitHub suggère que ce n'est pas la seule chose qui cloche. Ideone est d'accord avec CPython.
Anders Kaseorg
Même commentaire que pour votre autre réponse: Ceci n'imprime-t-il pas une nouvelle ligne, donnant 21 octets de sortie?
Martin Ender
1
Tu veux dire print`+.1`?
mbomb007
46

Graine , 10 octets

4 56111240

Ceci compile au programme Befunge (trouvé par force brute)

9k.@

qui produit les 20 octets suivants lors de l’exécution (testé dans CCBI, notez l’espace de fin):

0 0 0 0 0 0 0 0 0 0 

Ne connaissant pas Befunge 98, j’ai dû revérifier la spécification à quelques reprises pour celle-ci:

  • k semble assez cassé pour moi, exécutant une fois de plus que prévu en raison de l'IP se déplaçant dans l'instruction répétée
  • Les piles de Befunge 98 ont des zéros infinis en bas
  • . les sorties sous forme de nombre, suivies d'un espace
Sp3000
la source
18
.... je ... juste ... ne peux pas.
Daniel M.
44

R, 3 2 octets

Code

!0           # NOT FALSE

Les sorties

TRUE

Wow, enfin R, enfin.

Il semble que le {}travail aussi, il produitNULL

Bonus 33 16 octets:

Code

rep(1,number*16)

Les sorties

# 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
la source
2
J'espère que l'utilisation du nom "numéro" pour la variable n'équivaut pas à "ajouter des espaces inutiles au code source"
Mutador
26

Matlab, 7 5 octets

2 octets en moins grâce à @flawr!

123;3

Sortie:

entrez la description de l'image ici

La sortie contient donc 10 octets.newline ans = newline newline 3 newline

Luis Mendo
la source
1
Espérons que personne n'a format compactle défaut :)
Sanchises
2
@sanchises :-) Oui, cela dépend de la manière dont les préférences de Matlab ont été définies. Mais format loosec'est la préférence par défaut
Luis Mendo
2
Que diriez- 123;4vous Est-ce que trois octets sont plus courts =)
flawr
@flawr Bonne idée! Postez-le vous-même!
Luis Mendo
Nope, beaucoup trop inspiré par votre réponse =)
mardi
25

JavaScript, 2 octets!

Même plus court que la solution à 3 octets:

!0

Retourne trueaprès avoir couru.

Unihédron
la source
2
Notez que cela ne fonctionne que dans un environnement REPL
Cyoce
21

Python 2, 11

print`id`*1

Affiche la représentation sous forme de chaîne de la fonction intégrée id, qui comporte 22 caractères:

<built-in function id>

Le *1est d'obtenir le code à 11 caractères. Vous pourriez aussi faire print id;00.

Les 11 alternatives les plus ennuyeuses sont:

print'1'*22
print 9**21
Xnor
la source
J'ai joué avec des nombres complexes, mais malheureusement, print.8/-9jil manque un caractère
Sp3000
Celles-ci n'impriment-elles pas de fin de ligne, ce qui porte à 23 le nombre d'octets de la sortie?
Martin Ender
1
@ MartinBüttner Cette règle a été modifiée ultérieurement, mais sa modification en print id,;1suffira à supprimer le retour à la ligne final. Il n'ajoute pas d'espace de fuite non plus.
xnor
@xnor print 9**21ne fonctionne pas. C'est 21 caractères. print 9**23fonctionne bien
Koishore Roy
18

dc, 10 - 25 = -15

2?A*Ar^1-n

Prend une ligne vide pour "pas d'entrée".

Calcule 10 ^ (10 * n) - 1, où n est l'entrée ou 2 si l'entrée est vide. Imprime une chaîne de 9s de la longueur requise.

  • 2 pousse 2 sur la pile si l'entrée est vide
  • ? pousser l'entrée vers la pile
  • Apoussez 10 dans la pile (dc a des raccourcis A- Fpour 10-15)
  • * pop deux fois et multiplier (multiplier l'entrée par 10)
  • A poussez 10 à la pile
  • r inverser deux éléments de pile
  • ^ Exponentiate 10 ^ (10 * input)
  • 1- soustraire 1 du haut de la pile
  • n imprimer sans saut de ligne.
Trauma numérique
la source
dang, c'est tellement intelligent. Et heureusement avec la longueur du code ici :) Mais peut-être devriez-vous ajouter une petite explication pour les non-initiés. Et je pense que newline compte, alors vous devriez probablement utiliser à la nplace de p.
daniero
17

TI-Basic, 3 octets

1ᴇ5

Impressions 100000.

Deusovi
la source
En fait, je pense que la nouvelle ligne compterait, vous pouvez donc le faire 0pour 1 octet.
lirtosiast
1
Que diriez- ᴇ3vous Et @lirtosiast, comme TI-Basic n’a pas de nouvelle ligne, je suis sceptique à ce sujet.
Jakob
16

Brainfuck, 14 octets

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

C'est un petit exercice mathématique. Notons le nombre de +caractères dans le code par a, et le nombre de .caractères par b.

Le code génère des a*boctets, avec des valeurs allant de abas à 1(ce sont des octets non-ASCII, mais cela semble correct selon la spécification). La longueur du code est a+b+3. Nous avons donc

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

En essayant différentes valeurs pour aet b, on voit que le minimum pour a+b+3est atteint pour

a = 4       or       a = 7
b = 7                b = 4
anatolyg
la source
Un programmeur de brainfuck vétéran repèrera l' +[[>....]-<<+]option.
orthoplex
@orthoplex Quand j'ai lu votre commentaire, j'ai tout de suite pensé à un brainfuck et à un programmeur: brainfucker
Poke
15

GS2 , -18 octets

CP437 :W↕0!↨.2

Décharge Hex: 57 12 30 21 17 2e 32

Wlit les numéros de STDIN dans une liste. ↕0ajoute un 2 à la liste et !extrait le premier élément. Ensuite, ↨.la liste [0,1,2,3,4,5,6]est répétée 2plusieurs fois.

Ceci est très similaire à la réponse CJam de Dennis - gs2 combine simplement ret idans un octet.

Remarque : pour que cela fonctionne, il a fallu corriger un bogue dans l' gs2implémentation: auparavant, chaque programme était associé à une nouvelle ligne masquée, ce qui était totalement involontaire. Il n’est apparu qu’après que j’ai essayé de résoudre ce programme (le langage était conçu pour l’anarchie golfique, qui ignore les retours à la ligne dans tous les problèmes), et j’ai seulement poussé un correctif à maîtriser tout à l’heure, alors n'hésitez pas à prendre cette réponse avec un grain de sel.

Lynn
la source
1
Première réponse GS2 que j'ai vue qui ne comporte aucun caractère de combinaison de cartes!
Cyoce
14

Perl 5, 16 octets - 25 = -9

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

C'est une approche bizarre du problème.

Exécuter avec l' -pargument de ligne de commande.

J'ai vu une réponse Perl ci-dessous qui utilisait une variable spéciale pour imprimer plus de texte - et donc raccourcir leur nombre d'octets. J'ai donc utilisé une variable spéciale beaucoup plus verbeuse. Il imprime 8 caractères avec un nom de variable à 2 caractères. Ainsi, avec un nombre d'octets de 16 (complété d'un caractère d'espacement pour en faire 16), il imprime 2 * $], où $]est la version de Perl imprimée en tant que 5.xxxxxx, en fonction de votre version de Perl. Sans entrée, il l’imprime quatre fois, égal à 8*4ou 32, ce qui est le double du nombre d’octets du code.

J'aime Perl.

Codefun64
la source
Je pense que cela échoue pour une entrée vide. Selon les règles, si aucune entrée n'est fournie, le multiple doit par défaut être 2.
Alex A.
@Alexa. Zut, j'ai raté ça. Nouveau pour le code de golf. Modifier entrants, mais ma réponse a beaucoup de caractères maintenant parce que je ne sais pas comment faire cela de manière plus créative en perl :(
Codefun64
2
Hé là, quelques conseils supplémentaires qui pourraient vous aider ici, par défaut dans un script de programme, popet shifttravaillez sur @ARGV(dans un subtravail sur eux @_) afin que vous puissiez faire quelque chose comme $n=pop||2pour obtenir le premier bloc de code, et vous avez ;}à la fin , qui peut presque toujours être juste }pour sauver un autre. Quelque chose qui pourrait vous aider à économiser plus de caractères est l'opérateur de répétition de chaîne x, pensez-y print 1x20ou quelque chose du genre ... :) J'espère que ça vous aidera!
Dom Hastings
@DomHastings Man, merci! Je l'ai eu à 2 octets au total à cause de votre aide :) Merci beaucoup pour vos suggestions.
Codefun64
1
Je pense que vous pouvez abréger cela print"n"x(21*pop||42). Exécuter en ligne de commande avecperl -e'print"n"x(21*pop||42)' 3 | wc -c
hmatt1
14

Pyth , 10 9 - 25 = -16

-1 de Dennis

**N9?zvz2

Imprime [entrée] * 9 caractères de citation ou 2 * 9 si la saisie est vide.

isaacg a une réponse plus courte ici

Pyth , 1 octet

T

Impressions 10. C'est une variable intégrée qui initialise à 10.

lirtosiast
la source
Il serait utile que .x fonctionne avec des erreurs. Y a-t-il une justification à cela?
lirtosiast
2
Ma meilleure Qhypothèse est que Pyth évalue l'entrée avant que le code réel ne soit exécuté. **N9.xvz2fonctionne comme prévu, mais pas plus court que **N9?zvz2.
Dennis
2
Tout retour à la ligne est inclus dans le nombre d'octets de la sortie. Tsorties 10et une nouvelle ligne. Utilisez d, c'est un espace qui reçoit une nouvelle ligne ajoutée
Stan Strum
9

Macaroni 0.0.2 , 23 caractères

print tobase pow 32 9 2

Imprime 32 9 en binaire, ce qui s'avère être pratique: il comporte 46 caractères (c'est 1000000000000000000000000000000000000000000000), sans nouvelle ligne.

Poignée de porte
la source
9

JavaScript, 4 octets

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

Je pense que c'est la solution JS la plus courte possible sans ES6: P

Unihédron
la source
Quelle version de NodeJS avez-vous? Cela ne fonctionne pas avec le mien.
Dennis
1
Cela fonctionne également sur la console Firefox.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
1
Le retour à la ligne final doit être inclus dans la longueur de sortie.
lirtosiast
Node.js v0.10.40n'imprime rien du tout car il n'y a pas de commande d'impression. Avez-vous une version différente de Node.js ou cela ne fonctionne-t-il que dans un shell qui affiche l'évaluation d'une ligne? (Dans ce cas, je ne pense pas que cette réponse serait valide).
Nateowami
4 octets? S'il vous plaît faire cela réellement, la taille correcte.
Star OS
9

C, 27 25

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

Merci @ Titus pour avoir supprimé 2 octets


Et pour ma solution non concurrente de 16 octets en C, allez ici: https://codegolf.stackexchange.com/a/111330/16513

^ Je dis non compétitif car le code d'erreur pourrait éventuellement dépendre de votre compilateur. Notez également que j'utilise GCC dans cette solution. De plus, je ne suis pas sûr que cela enfreigne la règle 1 ou non, je pense que c'est probablement le cas, alors je suis allé de l'avant et l'ai qualifié de non compétitif

Albert Renshaw
la source
1
Je ne pense pas que cela compte comme un programme C valide mais main(){printf("%0.XXf",0);}fonctionne.
wefwefa3
2
@Zereges Non, C possède la règle de "déclaration implicite" qui vous permet généralement d'utiliser des éléments sans les corrects #include. Le compilateur émettra un avertissement et cela plantera parfois, mais cela fonctionnera généralement .
Anatolyg
1
@ AlbertRenshaw En outre, je ne pense pas que cela fonctionne ici .
Zereges
1
Notez que 27 * 2! = 38.
mbomb007
1
@Zereges. Ce code ne présente pas de comportement indéfini. Les fonctionnalités "déclaration implicite" et "type de retour implicite" sont obsolètes dans les normes récentes, mais leur utilisation est toujours autorisée et les résultats sont bien définis. Un comportement dans certaines circonstances entraîne un comportement non défini, mais ce code ne les implique pas.
Peter
7

V , 2 octets

Cette sortie

ÿÿÿÿ

Essayez-le en ligne!

Explication

C’est une réponse vraiment bidon, et cela fonctionne en abusant des éléments internes de V. En gros, son fonctionnement est qu’il ÿs’agit d’une commande en V qui signale que le programme est terminé et que toute commande en attente doit être exécutée. Sinon, certaines fins implicites ne fonctionneraient pas et l'interprétation se bloquerait plus souvent. Cette commande est automatiquement envoyée plusieurs fois à la fin du programme et la plupart du temps n’a aucun effet sur la sortie.

éest une commande qui insère un seul caractère. Cependant, il le fait en saisissant un octet brut, de sorte qu'il ne soit pas interprété ÿcomme "fin", mais par "c'est le caractère que vous devez insérer". fait qu'il insère ce caractère 4 fois au lieu d'une.

DJMcMayhem
la source
7

bash, 11 octets

Voici un usage agréablement ironique d'un outil de compression de données :) ...

gzip -f<<<2

Voici un vidage hexadécimal de la sortie (22 octets) ...

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
la source
Ceci sort 22 octets "ASCII étendu" (par exemple 8 bits par caractère). Cela semble correspondre à la définition de l'ASCII donnée par le PO si vous lisez les commentaires dans le message Question.
Wossname
Sur TIO, j'ai 16 ans, mais sur ma machine Linux, j'en ai 34
Stan Strum
@StanStrum, je ne sais pas ce que TIO est, mais ce 34 sous Linux est étrange. Peut-être avez-vous alias gzip pour utiliser différents commutateurs à normal?
Wossname
Je ne sais pas si c'est le cas, mais cela semble étrange. Je vais l'essayer sur certains LiveCD pour voir si je me suis trompé avec l'un de mes programmes @Wossname
Stan Strum
1
Je ne suis pas ce type, et je ne profiterai pas de mon 129 représentants nouvellement gagné. Je verrai si je peux créer une version qui fonctionne sur mon installation Linux
Stan Strum
6

dc, 19 - 25 = -6

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

Prend un nombre (2 est placé dans la pile en tant que sauvegarde) et le multiplie par 19. Imprime un 1(sans nouvelle ligne) et décrémente le nombre. Boucle pendant que le nombre est supérieur à 0.

Daniero
la source
6

C ++, 80 octets

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

notez que le caractère de nouvelle ligne est composé de deux caractères. (Si vous ne le souhaitez pas, changez i <20 en i <= 19 pour revenir au même nombre d'octets.)

Exemple de sortie (changera à chaque fois)

0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C

même adresse mémoire 8 caractères 20 fois.

Liam
la source
Quelques astuces pour jouer au golf: une forboucle est plus courte qu’une whileboucle et vous permet de laisser tomber les bretelles, c’est un peu moins cher à utiliser cstdioet juste printfune ficelle, et vous n’avez pas besoin de retourner quoi que ce soit.
Luc
Vous pouvez supprimer votre approche à 63 octets: #include<iostream> int main(){for(int i=10;--i;)std::cout<<&i;}Mais il existe déjà une réponse plus courte avec une approche légèrement différente.
movatica
6

CJam, -9

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

Explication

  • q_,

Lit l'intégralité de l'entrée et la pousse, puis la longueur.

  • {i}{;2}?

Si la longueur de l'entrée est supérieure à zéro, convertissez-la en un entier. Sinon, ouvrez l'entrée et appuyez sur 2.

  • G*

Pousse 16 (la longueur du programme), puis le multiplie par 2 s’il n’ya pas d’entrée ou par l’entrée.

  • 'X*

Pousse X et le multiplie par le haut de la pile.

The_Basset_Hound
la source
@ThomasKwa Whoops. Mise à jour dans une seconde.
The_Basset_Hound
La virgule n'est pas nécessaire, mais vous pouvez éviter le "si" si vous faites un "ou" logique: vous q2e|iobtiendrez le nombre que vous souhaitez
aditsu
Vous pouvez aussi utiliser S au lieu de 'X, le seul problème est que la sortie ne sera visible que si vous la sélectionnez (eh bien, si vous l'exécutez hors ligne et que vous redirigez vers un fichier, ce n'est pas un problème)
aditsu
Euh .. tant pis, je viens de voir la réponse de Dennis maintenant: p
aditsu
Même avec le conditionnel, vous pouvez raccourcir cela. Vous n'avez pas besoin de calculer la longueur, car une chaîne vide est déjà falsey. Vous n'avez également pas besoin de supprimer la chaîne vide de la pile, car elle ne contribue pas à la sortie. Ce qui permet également d'éviter les accolades pour la branche else. Je suis venu avec avant que je regardais à l' une des réponses: r_{i}2?SB**.
Reto Koradi
6

> <> , 19 + 2 (indicateur -v) - 25 = -4 octets

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

testez-le ici!

Merci Cole et Sp3000

Vérifie d'abord la longueur de la pile, si c'est 0, mettez 2 sur la pile. Multiplie-le par 21 (longueur du code), puis affiche la représentation unicode de ce nombre et le décrémente de 1, boucle jusqu'à 0. (vous devrez inspecter la sortie pour voir les caractères, car le navigateur ne les affichera pas)

torcado
la source
1
Oui, désolé de gâcher votre réponse (mais elle est plus courte que la mienne, si cela vous fait vous sentir mieux). Edit: whoops hit enter trop tôt, votre entrée telle qu'elle est actuellement n'est pas valide selon la règle "Vous pouvez supposer que n sera toujours un entier positif. Si aucune entrée n'est fournie, n doit par défaut être 2." Je pense aussi que cela pourrait imprimer un trop grand nombre de caractères (cela passe de 14 à 0, ce qui correspond à 15 caractères de mon compte et non à 14). Si je ne me trompe pas, l0=?2f6+*vla première ligne et 1-::0=?;o>la seconde devraient être correctes.
Cole
Hm, je ne sais pas ce que vous voulez dire. Il ne faut pas imprimer 0 dans tous les cas. Mettre un 2 comme sortie initiale de la pile (EDIT: ce que je ne peux pas coller), ce qui, avec ce compteur de caractères au moins , est de 28 caractères.
Torcado
Je comprends ce que vous dites maintenant. J'ai interprété "Votre programme peut éventuellement prendre un nombre, n, en tant qu'entrée", ce qui signifie que si l'entrée est 2. Je vais éditer la réponse, merci! (Je peux aussi en économiser en utilisant une chaîne au lieu de chiffres)
torcado
Heureux de vous aider, surtout si c'est> <>.
Cole
2
?!est généralement mieux que0=?
Sp3000
6

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

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

(au cas où votre navigateur ne permettrait pas à l'extrait de fonctionner pour des raisons de sécurité, essayez ce violon http://jsfiddle.net/thePivottt/c3v20c9g/ )

Ce script ne fonctionne que dans un navigateur suivant au moins DOM3 (avec Node.textContent) et ECMAScript 5 (ou peut-être une version plus ancienne). J'ai essayé de le rendre conforme aux normes et aussi compatible que possible. Il suppose également que le script est dans le premier scriptélément du document.

En fait, il concatène plusieurs copies du script lui-même, ce qui est vraiment génial . Notez que l'outil de fragment sur SE crée un espace supplémentaire autour du script. Nous pourrions ignorer cet espace .trim()mais je ne le trouve pas nécessaire étant donné que le programme est parfait sans l'ingérence de SE. Sauvegardez simplement ce fichier HTML5 si vous voulez le voir fonctionner parfaitement.

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

Ce script utilise promptet alertparce que console.logne fait pas partie d'une norme, même si la plupart des navigateurs modernes utilisent. Si le nombre de répétitions passées n'est pas valide ou s'il est vide, la valeur par défaut est 2. Si l'entrée est un nombre décimal, le programme se bloque en raison de la longueur du tableau non valide.

Le code utilise quelques fonctionnalités intéressantes de JavaScript:

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

    • Array(INT) crée un tableau de cellules INT.

    • +prompt()prend une entrée et la transforme en un nombre. Si nous passions l'entrée sous forme de chaîne, la Arrayfonction l'envelopperait simplement dans un tableau à un élément.

    • +prompt()||2retourne l'entrée si c'est vrai , sinon ça retourne 2.

    • Tout ce code crée un tableau de N éléments vides, où N est égal à un de plus que le nombre de répétitions demandées.

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

    • La join(STRING)méthode du tableau crée une chaîne en concaténant toutes les cellules, en plaçant la chaîne fournie entre les valeurs. Dans ce programme, il y a N + 1 éléments vides dans le tableau, ou exactement N entre les taches. Le résultat sera une chaîne contenant N fois la chaîne fournie.

    • document.scripts[o]est le premier <script>élément du document.

    • Les instances de textContentof Noderenvoient tout le texte trouvé à l'intérieur d'elles et de leurs nœuds enfants, scripts compris.

Domino
la source
Notez que si vous utilisez le code ES6 tout en générant str.repeatle code lui-même, le score est ramené à 26, mais c'est un peu trop ennuyeux: P
Domino
Euh, je ne sais pas d'où viennent ces 26 ans, maintenant j'en ai 33. Je devrais probablement dormir un peu.
Domino
Notez que certains paramètres du navigateur peuvent empêcher l'utilisation d'invite sur un extrait de code. Vous devrez peut-être le sauvegarder pour l'exécuter.
Domino
6

JavaScript ES6, 33 - 25 = 8

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

Essayez-le en ligne!

DankMemes
la source
Je n'arrive pas à faire tourner ce code sur console. Est ce bien? "Uncaught SyntaxError: Jeton inattendu =>"
Malavos
@ Malavos, vous avez besoin d’un navigateur compatible es6, tel que le dernier Firefox. Chrome ne prend pas en charge les arguments par défaut
DankMemes
J'utilise UCBrowser, mais c'est vrai! C'est basé sur le chrome et le gecko de toute façon. Je l'ai essayé la nuit, j'ai obtenu "000000000000000000000000000000000000000000000000000000000000000000". Agréable! Pourriez-vous expliquer votre code pour moi? Je suis un débutant.
Malavos
2
@ Malavos Le code en dur 33est en réalité la longueur du code. Il crée un nouveau tableau de longueur 33*aale paramètre d'entrée est défini par défaut sur 2 conformément au PO, le remplit et renvoie une chaîne jointe.
DankMemes
2
En créant votre tableau avec un élément supplémentaire, vous pouvez remplir avec la jointure Arrary(1+a*<length>)etjoin`0`
Shaun H
5

Julia, 42 octets - 25 = 17

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

Ceci lit une ligne de STDIN en utilisant readline(). Si elle est vide, c'est-à-dire qu'aucune entrée n'a été fournie, n est défini comme étant l'entrée convertie en entier. Dans le cas contraire n est 2. Nous imprimons alors 42 n @ s à STDOUT.

Alex A.
la source
5

Perl, 18 - 25 = -7

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

La variable spéciale $=, à savoir $FORMAT_LINES_PER_PAGE, commence sa vie comme 60, et n'a donc besoin d'être dupliquée que la moitié du nombre d'octets nécessaire.

primo
la source
1
J'ai eu une réponse très similaire de: print$=x9x(pop||2)sympa!
Dom Hastings