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 length
octets. Vous pouvez supposer que n sera toujours un entier positif. Si aucune entrée n'est fournie, la n
valeur 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
où N
est 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
la source
n * program length
octets ou est-ce un minimum?Réponses:
HQ9 + , 2 octets
les sorties
Je pense que ce n'est pas interdit ici.
la source
QQ
dans un interprète.Shakespeare, 768
Oui, Shakespeare n'est pas une langue de golf. Sortie 1 536 espaces.
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:
la source
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:Essayez-le ici .
la source
Mathematica REPL, 1 octet
Impressions
#1
.la source
CJam, -17 octets
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
la source
Python 2.6, 10
Prints
-0.10000000000000001
, qui est 20 caractères.Notez que la chaîne repr est plus précise.
print-.1
donne juste-.1
, etprint.1/3
donne0.0333333333333
pour seulement 13 chiffres de précision.la source
print`+.1`
?Graine , 10 octets
Ceci compile au programme Befunge (trouvé par force brute)
qui produit les 20 octets suivants lors de l’exécution (testé dans CCBI, notez l’espace de fin):
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 sorties sous forme de nombre, suivies d'un espacela source
R,
32 octetsCode
Les sorties
Wow, enfin R, enfin.
Il semble que le
{}
travail aussi, il produitNULL
Bonus
3316 octets:Code
Les sorties
la source
Matlab,
75 octets2 octets en moins grâce à @flawr!
Sortie:
La sortie contient donc 10 octets.
newline
ans =
newline
newline
3
newline
la source
format compact
le défaut :)format loose
c'est la préférence par défaut123;4
vous Est-ce que trois octets sont plus courts =)JavaScript, 2 octets!
Même plus court que la solution à 3 octets:
Retourne
true
après avoir couru.la source
Python 2, 11
Affiche la représentation sous forme de chaîne de la fonction intégrée
id
, qui comporte 22 caractères:Le
*1
est d'obtenir le code à 11 caractères. Vous pourriez aussi faireprint id;00
.Les 11 alternatives les plus ennuyeuses sont:
la source
print.8/-9j
il manque un caractèreprint id,;1
suffira à supprimer le retour à la ligne final. Il n'ajoute pas d'espace de fuite non plus.print 9**21
ne fonctionne pas. C'est 21 caractères.print 9**23
fonctionne biendc, 10 - 25 = -15
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
9
s de la longueur requise.2
pousse 2 sur la pile si l'entrée est vide?
pousser l'entrée vers la pileA
poussez 10 dans la pile (dc a des raccourcisA
-F
pour 10-15)*
pop deux fois et multiplier (multiplier l'entrée par 10)A
poussez 10 à la piler
inverser deux éléments de pile^
Exponentiate 10 ^ (10 * input)1-
soustraire 1 du haut de la pilen
imprimer sans saut de ligne.la source
n
place dep
.TI-Basic, 3 octets
Impressions
100000
.la source
0
pour 1 octet.ᴇ3
vous Et @lirtosiast, comme TI-Basic n’a pas de nouvelle ligne, je suis sceptique à ce sujet.Brainfuck, 14 octets
C'est un petit exercice mathématique. Notons le nombre de
+
caractères dans le code para
, et le nombre de.
caractères parb
.Le code génère des
a*b
octets, avec des valeurs allant dea
bas à1
(ce sont des octets non-ASCII, mais cela semble correct selon la spécification). La longueur du code esta+b+3
. Nous avons doncEn essayant différentes valeurs pour
a
etb
, on voit que le minimum poura+b+3
est atteint pourla source
+[[>....]-<<+]
option.GS2 , -18 octets
CP437 :
W↕0!↨.2
Décharge Hex:
57 12 30 21 17 2e 32
W
lit les numéros de STDIN dans une liste.↕0
ajoute un 2 à la liste et!
extrait le premier élément. Ensuite,↨.
la liste[0,1,2,3,4,5,6]
est répétée2
plusieurs fois.Ceci est très similaire à la réponse CJam de Dennis - gs2 combine simplement
r
eti
dans un octet.Remarque : pour que cela fonctionne, il a fallu corriger un bogue dans l'
gs2
implé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.la source
Perl 5, 16 octets - 25 = -9
C'est une approche bizarre du problème.
Exécuter avec l'
-p
argument 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 que5.xxxxxx
, en fonction de votre version de Perl. Sans entrée, il l’imprime quatre fois, égal à8*4
ou32
, ce qui est le double du nombre d’octets du code.J'aime Perl.
la source
pop
etshift
travaillez sur@ARGV
(dans unsub
travail sur eux@_
) afin que vous puissiez faire quelque chose comme$n=pop||2
pour 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înex
, pensez-yprint 1x20
ou quelque chose du genre ... :) J'espère que ça vous aidera!print"n"x(21*pop||42)
. Exécuter en ligne de commande avecperl -e'print"n"x(21*pop||42)' 3 | wc -c
Pyth ,
109 - 25 = -16-1 de Dennis
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
Impressions
10
. C'est une variable intégrée qui initialise à 10.la source
Q
hypothèse est que Pyth évalue l'entrée avant que le code réel ne soit exécuté.**N9.xvz2
fonctionne comme prévu, mais pas plus court que**N9?zvz2
.T
sorties10
et une nouvelle ligne. Utilisezd
, c'est un espace qui reçoit une nouvelle ligne ajoutéeMacaroni 0.0.2 , 23 caractères
Imprime 32 9 en binaire, ce qui s'avère être pratique: il comporte 46 caractères (c'est
1000000000000000000000000000000000000000000000
), sans nouvelle ligne.la source
JavaScript, 4 octets
Je pense que c'est la solution JS la plus courte possible sans ES6: P
la source
v0.10.40
n'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).C,
2725• 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
la source
main(){printf("%0.XXf",0);}
fonctionne.#include
. Le compilateur émettra un avertissement et cela plantera parfois, mais cela fonctionnera généralement .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".4é
fait qu'il insère ce caractère 4 fois au lieu d'une.la source
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) ...
la source
dc, 19 - 25 = -6
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.la source
C ++, 80 octets
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)
même adresse mémoire 8 caractères 20 fois.
la source
for
boucle est plus courte qu’unewhile
boucle et vous permet de laisser tomber les bretelles, c’est un peu moins cher à utilisercstdio
et justeprintf
une ficelle, et vous n’avez pas besoin de retourner quoi que ce soit.#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.CJam, -9
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.
la source
q2e|i
obtiendrez le nombre que vous souhaitezr_{i}2?SB**
.> <> , 19 + 2 (indicateur -v) - 25 = -4 octets
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)
la source
l0=?2f6+*v
la première ligne et1-::0=?;o>
la seconde devraient être correctes.?!
est généralement mieux que0=?
JavaScript (ES5), 68 octets - 25 bonus = 43
(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 premierscript
é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.Ce script utilise
prompt
etalert
parce queconsole.log
ne 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, laArray
fonction l'envelopperait simplement dans un tableau à un élément.+prompt()||2
retourne 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
textContent
ofNode
renvoient tout le texte trouvé à l'intérieur d'elles et de leurs nœuds enfants, scripts compris.la source
str.repeat
le code lui-même, le score est ramené à 26, mais c'est un peu trop ennuyeux: PJavaScript ES6, 33 - 25 = 8
Essayez-le en ligne!
la source
33
est en réalité la longueur du code. Il crée un nouveau tableau de longueur33*a
oùa
le 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.Arrary(1+a*<length>)
etjoin`0`
Julia, 42 octets - 25 = 17
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.la source
Perl, 18 - 25 = -7
La variable spéciale
$=
, à savoir$FORMAT_LINES_PER_PAGE
, commence sa vie comme60
, et n'a donc besoin d'être dupliquée que la moitié du nombre d'octets nécessaire.la source
print$=x9x(pop||2)
sympa!