Generieren Sie Programme, die das N-fache ihrer Länge drucken


16

Bei einer nichtnegativen Ganzzahl nmuss Ihre Lösung ein Programm in der von Ihnen gewählten Sprache ausgeben, dessen Ausgabe ndie gleiche Anzahl von Bytes aufweist wie das ausgegebene Programm.

Regeln

  • Sie müssen die Sprache und Codierung der Programme angeben, die Ihre Lösung ausgibt, und Sie dürfen für unterschiedliche Eingaben in Ihre Lösung keine unterschiedlichen Sprachen oder Codierungen auswählen. Die Sprache Ihres Ausgabeprogramms kann mit der Sprache Ihrer Lösung identisch sein oder nicht.
  • Ihre Eingabe muss nur Ganzzahlen in Ihrem Sprachbereich behandeln, aber bitte missbrauchen Sie diese Regel nicht.

Dies ist also gewinnt die kürzeste Einsendung in Bytes.

Beispiel

Angenommen, es nist 4. Meine Lösung gibt dann f_8ein Programm aus, das in meiner (imaginären) Sprache ausgibt j3 1s+/2]!mz. Die Programmausgabe hat die Länge 3 und die Ausgabe die Länge 3 * 4 = 12, daher ist die Lösung für Eingabe 4 korrekt.

Nehmen wir stattdessen an, das nist 1 und mein Programm gibt aus ffffpfpffp(10 Bytes). Das Programm ffffpfpffpin der von mir gewählten Sprache müsste eine Ausgabe von 10 * 1 = 10 Bytes erzeugen.


Im Moment ist dies ziemlich unterbestimmt. Können Sie einige Beispiele nennen?
DJMcMayhem

3
Ich glaube, ich weiß, was wir tun sollen, aber jedes Mal, wenn ich die Spezifikation lese, werde ich unsicherer. Einen Text ausgeben, der n-mal so viele Bytes wie das ausgegebene Programm enthält, scheint zu implizieren, dass wir einen Text und ein Programm ausgeben müssen. Der Zeichensatz und die Sprache müssen für alle ganzen Zahlen konsistent sein. Auf welchen "Zeichensatz" bezieht sich das?
Dennis

Aber egal, ich habe es falsch verstanden, und alle bis auf eine der Antworten auch.
Dennis

1
@Dennis Es hilft nicht, dass der Titel dem Körper zu widersprechen scheint. Vielleicht wäre es besser, ein Programm auszugeben, das das N-fache seiner Länge ausgibt , wenn ich die Herausforderung richtig verstehe (ich bin mir nicht sicher)
Sisyphus

1
Können wir nals String nehmen?
Shaggy

Antworten:


7

JavaScript (ES6), 38 Byte

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

Demo



3

Brainfuck , 348 Bytes

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

Probieren Sie es online! Oder schauen Sie sich die Ungolfed-Version an (dh mit was ich arbeiten musste)


Haftungsausschluss

Ich habe mehr Zeit damit verbracht, als ich für menschlich möglich hielt. Ich möchte meiner Freundin dafür danken, dass ich ihr erlaubt habe, daran zu arbeiten. ebenso gut wie mein Retter .

Wie funktioniert es überhaupt?

Keine Ahnung.

Wie funktioniert es

Alle Ausgaben haben einen nachfolgenden Codeausschnitt, der alle gleich ist:

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

Teilen wir es in drei Teile auf a,b,c

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

Die Eingabe iwird einfach unärgerlich nach vorne geklebt:

iabc

(zB wenn die Eingabe 10 war, dann i = '++++++++++')

Der Duplikator - Teilt die Eingabe in zwei identische Zahlen m, n, die der Eingabe entsprechen

Der Einsteller - Wird nso eingestellt, dass er der Länge des Programms entspricht

Der Drucker - Druckt m*nASCII-Zeichen


Beachten Sie, dass die Eingabe in dem Beispiel eine ist newline, die als ASCII-Wert von 10 daher die Eingabe ist 10. Wenn Sie andere kleine Zahlen testen möchten, ersetzen die ,mit jedoch viele +‚s die Sie wünschen.



2

Haskell , 55 Bytes

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

Probieren Sie es online! Anwendungsbeispiel: f 1Ergibt das folgende 54-Byte-Programm:

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

Probieren Sie es online! Dies erzeugt die folgende 54-Byte-Ausgabe:

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

1

Python 3 -> HQ9 +, 11 Bytes

'Q'.__mul__

Es musste getan werden

Probieren Sie es online!


Wo kann ich HQ testen?
Titus

1
Nun, Qdruckt einfach seinen eigenen Quellcode. Sie können dies hier testen: hq9plus.alwaysdata.net . Dies sollte nie ein ernstzunehmender Eintrag sein
michi7x7

Das geht nicht. Wenn ich eingebe 1, dann gibst du aus Q, was wiederum ausgibt Q. Qhat Länge 1, aber Ihr Code hat Länge 11.
NoOneIsHere

@NoOneIsHere 'dessen Ausgabe n-mal so viele Bytes hat wie das ausgegebene Programm.' (nicht das eingereichte Programm)
michi7x7

1
@NoOneIsHere das nicht: almnet.de/esolang/hq9plus.php (In der Sprachspezifikation steht nur "Druckt den gesamten Text der Quellcodedatei")
michi7x7

1

Java 8, 175 174 Bytes

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]);}}

Beispiele:

n=1Ausgänge :

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

(Länge = 89), die 89 Nullen ausgibt :

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

n=10Ausgänge :

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

(Länge = 90), die 900 Nullen ausgibt :

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

n=100Ausgänge :

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

(Länge = 91), die 9100 Nullen ausgibt :

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Erläuterung:

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

0

RProgN 2 , 7 5 Bytes

«•.* 

Mit einem Leerzeichen

Erklärt

«•.* 
«    # 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.

Probieren Sie es online!


0

CJam, 8 13 Bytes

q_,S\" 8+*S*"

Probieren Sie es online

Das generierte Programm gibt Leerzeichen aus, so dass es schwer zu sagen ist.


Ich denke, dies ist die einzige Antwort, die den Teil über die Ausgabe eines Programms interpretiert, das einen Text korrekt ausgibt, aber das Verhältnis ist aus, wenn die Eingabe mehr als eine Ziffer hat.
Dennis

Oh ja, duh.
Geokavel


0

Python → TECO, 20 Bytes

Die Antwort ist in Python, während sich der generierte Code in TECO befindet. Der Python ist eine Funktion, die n- mal VV12345\VVwiederholt wird. Sehen Sie hier für eine Erklärung der TECO.

'VV12345\VV'.__mul__

0

PHP, 47 + 1 Bytes

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

Gibt einen Unterstrich gefolgt von Leerzeichen aus.
Laufen Sie als Pipe mit -F; Ausgegebenes Programm mit -foder ausführen -F.

Dies würde bei Eingaben mit mehr als 64 Stellen fehlschlagen,
was weitaus höher ist alsPHP_INT_MAX (zu diesem Zeitpunkt) liegt.

Bei Eingaben größer als PHP_INT_MAX-18 schlägt der Vorgang jedoch fehl. Ist die Berechtigung noch vorhanden?


@HyperNeutrino: Dies schlägt bei Eingaben über PHP_INT_MAX-18 fehl . Disqualifiziert das?
Titus

Nein, ich werde sagen, dass das in Ordnung ist :)
HyperNeutrino

0

PHP → Python 2, 40 + 1 Bytes

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

druckt ein Python-Programm, das wiederholte As druckt . Als Rohr mit laufen lassen -F.


0

Stapel → Holzkohle, 22 Bytes

Ich bin nicht sicher, welche Codierung ich verwenden soll, da dies Bytes sind. Hier sind die als Windows-1252 interpretierten Bytes:

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

Die gleichen Bytes wie beim PC-850:

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

Dieselben Bytes in Charcoals Codepage:

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

Das resultierende Charcoal-Programm ist Plus(Length(Cast(n)), 9)bytes lang:

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


0

JavaScript (ES8), 43 41 39 Byte

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

Probier es aus

Die Ausgabe der generierten Funktion ist eine Folge von Leerzeichen, die *in diesem Snippet durch s ersetzt werden .

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>


0

R , 46 Bytes

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

Probieren Sie es online!

Anonyme Funktion, die die Zeichenfolge zurückgibt

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

Welche druckt a( agefolgt von einem Leerzeichen) 23 nMal. Ich brauchte das, ''weil sonst catdas letzte Leerzeichen nicht gedruckt würde.


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");}}}

Dies wären 94 Bytes einschließlich des letzten \ n, den der Standard C schreibt. Rückgabe als 'r' Zeichen als (Länge des Programms) * (Argument des Programms), wenn das Programmargument nicht existiert oder <= 0 ist oder> 0xFFFFF ist, kein Beispiel drucken

C:\>nameProg.exe 1
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

0

MATLAB (63 Bytes)

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

Beispielsweise:

>> a(5)

ans =

repmat('a',1,80)

und:

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

ans =

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.