Générez des programmes qui impriment n fois leur longueur

16

Étant donné un entier non négatif n, votre solution doit générer un programme dans la langue de votre choix, dont la sortie a des nfois autant d'octets que le programme généré.

Règles

  • Vous devez spécifier la langue et l'encodage des programmes générés par votre solution, et vous ne pouvez pas choisir des langues ou des encodages différents pour les différentes entrées de votre solution. La langue de votre programme de sortie peut être identique ou non à la langue de votre solution.
  • Votre soumission doit uniquement gérer des entiers dans la plage de votre langue, mais veuillez ne pas abuser de cette règle.

Il s'agit de donc la soumission la plus courte en octets l'emporte.

Exemple

Supposons que n4. Ma solution génère alors f_8un programme qui, dans mon langage (imaginaire), produit j3 1s+/2]!mz. La sortie du programme a une longueur 3 et sa sortie a une longueur 3 * 4 = 12, donc la solution est correcte pour l'entrée 4.

Supposons plutôt que ce nsoit 1 et mes sorties de programme ffffpfpffp(10 octets). Le programme ffffpfpffpdans ma langue choisie devrait produire une sortie de 10 * 1 = 10 octets.

HyperNeutrino
la source
Pour le moment, c'est assez peu spécifié. Pourriez-vous donner quelques exemples?
DJMcMayhem
3
Je pense que je sais ce que nous sommes censés faire, mais chaque fois que je lis les spécifications, je deviens moins certain. produire du texte contenant n fois plus d'octets que le programme généré semble impliquer que nous devons produire un texte et un programme. Le jeu de caractères et la langue doivent être cohérents pour tous les entiers. De quel «jeu de caractères» s'agit-il?
Dennis
Peu importe, j'ai en fait mal compris, tout comme toutes les réponses sauf une.
Dennis
1
@Dennis Cela n'aide pas que le titre semble contredire le corps. Peut-être qu'un programme qui produit n fois sa longueur serait un meilleur titre, si je comprends bien le défi (je ne suis pas sûr de le faire)
Sisyphe
1
Pouvons-nous prendre nune chaîne?
Shaggy

Réponses:

7

JavaScript (ES6), 38 octets

n=>`(x="${n}")=>(x+1/7+1e9).repeat(x)`

Démo

Arnauld
la source
3

brainfuck , 348 octets

--[>+<++++++]>>--[>+<++++++]>++[-<+>]----[>+<----]>---[-<+>]----[>+<----]>-[-<+>]-[>+<---]>++++++[-<+>]-[>+<---]>++++++++[-<+>]--[>+<++++++]>+++[-<+>]<[<],[->.<]>>>>>.<<<.>>.<<<.>>>.<<<.>>>.<<<.>>...>>>.<<....<<.>>>.<<..<<.>>>..<<.......>>>>.<<<..<<.>.....>>>.<<.>>.>>.<<<<<.>>>>.<<.<<.>>.>.<<<.>>.<<<.>>...<<.>>>..>>.<<.>.<<<.>.<<.>>>.>>.<<<..>>>.

Essayez-le en ligne! Ou voir la version Ungolfed (c'est-à-dire avec quoi je devais travailler)


Avertissement

J'ai passé plus de temps à faire cela que je ne le pensais humainement possible. Je voudrais remercier ma copine de m'avoir permis de l'abandonner pour travailler là-dessus; ainsi que mon sauveur .

Comment ça marche même?

Aucune idée.

Comment ça marche?

Toutes les sorties ont un extrait de code de fin qui sont tous les mêmes:

[->+>+>+<<<]>>>>-[<<+>>-------]<<+-----[<[.-]>->[->+<<<+>>]>[-<+>]<<]

Divisons-le en trois parties appelées a,b,c

a : [->+>+>+<<<]>>>>               THE DUPLICATOR
b : -[<<+>>-------]<<+-----        THE ADJUSTER
c : [<[.-]>->[->+<<<+>>]>[-<+>]<<] THE PRINTER

L'entrée iest simplement collée sur le devant en unaire:

iabc

(par exemple; si l'entrée était 10, alors i = '++++++++++')

Duplicateur - Divise l'entrée en deux nombres identiques m, n, équivalents à l'entrée

L'ajusteur - Ajuste de ntelle sorte qu'il soit égal à la durée du programme

L'imprimante - Imprime m*nles caractères ASCII


Notez que l'entrée dans l'exemple est un newline, qui en tant que valeur ASCII de 10, l'entrée est donc 10. Si vous souhaitez tester d 'autres petits nombres, remplacez le ,par autant de numéros que +vous désirez.

Graviton
la source
2

Cheddar , 10 9 octets

(*)&" "*9

Un polyglotte Proton maladroit> _ <

Downgoat
la source
+1 pour Proton polyglot avec Cheddar pour montrer l'inspiration: D
HyperNeutrino
2

Haskell , 55 octets

f n=(++)<*>show$"main=putStr$[1.."++show n++"*2]>>'#':"

Essayez-le en ligne! Exemple d'utilisation: f 1donne le programme de 54 octets suivant:

main=putStr$[1..1*2]>>'#':"main=putStr$[1..1*2]>>'#':"

Essayez-le en ligne! qui produit la sortie de 54 octets suivante:

#main=putStr$[1..1*2]>>'#':#main=putStr$[1..1*2]>>'#':
Laikoni
la source
1

Python 3 -> HQ9 +, 11 octets

'Q'.__mul__

Il devait être fait

Essayez-le en ligne!

michi7x7
la source
Où puis-je tester HQ?
Titus
1
Eh bien, Qimprime simplement son propre code source. Vous pouvez le tester ici: hq9plus.alwaysdata.net . Cela ne devait jamais être une entrée sérieuse
michi7x7
Ça ne marche pas. Si j'entre 1, alors vous sortez Q, qui à son tour sort Q. Qa une longueur 1, mais votre code a une longueur 11.
NoOneIsHere
@NoOneIsHere 'dont la sortie a n fois plus d'octets que le programme sorti.' (pas le programme soumis)
michi7x7
1
@NoOneIsHere ce n'est pas le cas: almnet.de/esolang/hq9plus.php (La spécification de langue indique uniquement "Imprime tout le texte du fichier de code source")
michi7x7
1

Java 8, 175 174 octets

interface M{static void main(String[]a){System.out.printf("interface M{static void main(String[]a){int i=(88+%s)*%s;for(;i-->0;System.out.print(0));}}",a[0].length(),a[0]);}}

Exemples:

n=1sorties :

interface M{static void main(String[]a){int i=(88+1)*1;for(;i-->0;System.out.print(0));}}

(longueur = 89) qui génère 89 zéros :

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

n=10sorties :

interface M{static void main(String[]a){int i=(88+2)*10;for(;i-->0;System.out.print(0));}}

(longueur = 90) qui génère 900 zéros :

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

n=100sorties :

interface M{static void main(String[]a){int i=(88+3)*100;for(;i-->0;System.out.print(0));}}

(longueur = 91) qui génère 9100 zéros :

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Explication:

interface M{                                // Class:
  static void main(String[]a){              //  Mandatory main method
    System.out.printf("interface M{static void main(String[]a){
                                            //   Print a new program with:
      int i=(88+%s)*%s;                     //    Integer containing (88*A)+B
      for(;i-->0;System.out.print(0));}}",  //    And print that many zeroes
        a[0].length(),                      //     Where A is the length of the number
                                            //     (0-9 = 1; 10-99 = 2; 100-999 = 3; etc.)
        a[0]);}}                            //     and B is the number itself
Kevin Cruijssen
la source
0

RProgN 2 , 7 5 octets

«•.* 

Avec un espace de fuite

Expliqué

«•.* 
«    # Yield a function from the remaining string.
 •.  # Append a space and stringify, which builds the original program (Because stringifying a function removes noops, which spaces are)
   * # Repeat the implicit input times.

Essayez-le en ligne!

ATaco
la source
0

CJam, 8 13 octets

q_,S\" 8+*S*"

Essayez-le en ligne

Le programme généré génère des espaces, donc c'est un peu difficile à dire.

geokavel
la source
Je pense que c'est la seule réponse qui interprète la partie sur la sortie d'un programme qui sort correctement un texte, mais le rapport est désactivé si l'entrée a plus d'un chiffre.
Dennis
Oh ouais, duh. ,,
geokavel
0

Ly , 29 octets

"\"9>("&onu")[<&s&ol>1-]<;"&o

Essayez-le en ligne! (ne fonctionne pas actuellement en raison d'un bogue de prétraitement) Tout va bien!

LyricLy
la source
0

Python → TECO, 20 octets

La réponse est en Python tandis que le code généré est en TECO. Le Python est une fonction renvoyant n fois VV12345\VVrépétées . Voir ici pour une explication du TECO.

'VV12345\VV'.__mul__
feersum
la source
0

PHP, 47 + 1 octets

<?="<?=str_pad(_,",strlen($argn)+18,"*$argn);";

imprime un trait de soulignement suivi d'espaces.
Exécuter en tant que tuyau avec -F; exécuter le programme en sortie avec -fou -F.

Cela échouerait pour une entrée de plus de 64 chiffres,
ce qui est beaucoup plus élevé que PHP_INT_MAX(pour le moment).

Cependant, il échoue pour une entrée supérieure à PHP_INT_MAX-18 ... est-il toujours admissible?

Titus
la source
@HyperNeutrino: cela échouera pour une entrée supérieure à PHP_INT_MAX-18. Est-ce que cela disqualifie?
Titus
Non, je dirai que ça va :)
HyperNeutrino
0

PHP → Python 2, 40 + 1 octets

print "A"*<?=13+strlen($argn),"*",$argn;

imprime un programme Python qui imprime des As répétés . Exécuter en tant que tuyau avec -F.

Titus
la source
0

Lot → Charbon de bois, 22 octets

Je ne sais pas quel encodage je devrais utiliser, car ce sont des octets. Voici les octets interprétés comme Windows-1252:

@set/p=Á%1ñªÉñ«Ìñ¹<nul

Les mêmes octets que le PC-850:

@set/p=┴%1±¬╔±½╠±╣<nul

Les mêmes octets dans la page de codes de Charcoal:

@set/p=A%1θ×Iθ⁺Lθ⁹<nul

The resulting Charcoal program is Plus(Length(Cast(n)), 9) bytes long:

A       Assign
 %1      (String representation of n)
   θ      To variable q
        Implicitly print a number of `-`s equal to:
×        Product of:
 Iθ       Cast of q to integer
 ⁺        Sum of:
  Lθ       Length of q
  ⁹        Integer constant 9
Neil
la source
0

JavaScript (ES8), 43 41 39 bytes

n=>`f=_=>"".padEnd(${n}*(88+f).length)`

Test it

The output of the generated function is a string of spaces which are replaced with *s in this Snippet.

g=
n=>`f=_=>"".padEnd(${n}*(88+f).length)`

o.innerText=(h=n=>`Function: ${x=g(n)}\nLength:   ${x.length}\nOutput:   "${x=eval(x)().replace(/./g,"*")}"\nLength:   `+x.length)(i.value=10);oninput=_=>o.innerText=h(+i.value)
<input id=i type=number><pre id=o>

Shaggy
la source
0

R, 46 bytes

function(n)sprintf("cat(rep('a',%d*23),'')",n)

Try it online!

Anonymous function that returns the string

cat(rep('a',n*23),'')

Which prints a (that's a followed by a space) 23 times n times. I needed the '' because otherwise cat wouldn't print the last space character.

Giuseppe
la source
0

C, 94 bytes

main(int c,char**a){if(c>1){c=atoi(a[1]);if(c>0&&c<0xFFFFFF){c*=94;while(c--)printf("r");}}}

this would be 94 bytes include the last \n that stadard C says it should be written. return as 'r' characters as the (lenght of the program) * (argument of the program) if the program argument not exist or it is <=0 or it is >0xFFFFF print nothing example

C:\>nameProg.exe 1
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
RosLuP
la source
0

MATLAB (63 bytes)

a=@(n)['repmat(''a'',1,',num2str(n*(15+numel(num2str(n)))),')']

For example:

>> a(5)

ans =

repmat('a',1,80)

and:

>> repmat('a',1,80)

ans =

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
PieCot
la source