Generieren Sie 100 Java-Tupel-Klassen

37

Schreiben Sie ein Skript, das in die Standardausgabe oder in die entsprechende Sprache 100 Zeilen (gültigen) Java-Code schreibt, der mit Folgendem beginnt:

class Tuple1 {public Object _0;}
class Tuple2 {public Object _0,_1;}
class Tuple3 {public Object _0,_1,_2;}
class Tuple4 {public Object _0,_1,_2,_3;}
class Tuple5 {public Object _0,_1,_2,_3,_4;}
class Tuple6 {public Object _0,_1,_2,_3,_4,_5;}
class Tuple7 {public Object _0,_1,_2,_3,_4,_5,_6;}
class Tuple8 {public Object _0,_1,_2,_3,_4,_5,_6,_7;}
class Tuple9 {public Object _0,_1,_2,_3,_4,_5,_6,_7,_8;}
class Tuple10 {public Object _0,_1,_2,_3,_4,_5,_6,_7,_8,_9;}
class Tuple11 {public Object _0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10;}
class Tuple12 {public Object _0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11;}

Die letzte Zeile sollte mit beginnen class Tuple100.

Das ist , also gewinnt der kürzeste Code in Bytes!

Ray Toal
quelle
6
Ich nehme die Herausforderung an! Tatsächlich mache ich das in Java!
Ashwin Gupta
Kann ich eine Funktion schreiben oder muss es ein vollständiges Programm sein?
Ashwin Gupta
3
Ich bin neu auf der Site und habe nach einem Skript gefragt, aber ich habe gehört, dass es üblich ist, Funktionen zuzulassen, und das ist für Java sehr sinnvoll, um zu vermeiden, public static void main(String[] args)dass Sie auf jeden Fall eine Funktion geben, wenn Sie möchten.
Ray Toal
1
Groß! Vielen Dank Ray!
Ashwin Gupta
Es ist nicht annähernd klein genug, aber ich denke, dies ist der perfekte Ort, um meinen nTupel-Generator, den ich in Java geschrieben habe, mit anderen zu teilen : github.com/kenzierocks/Tuplocity . Es werden vollständig generische Tupel generiert!
Octavia Togami

Antworten:

8

Jolf, 42 Bytes

Bekomme ich Bonuspunkte, wenn ich Jelly mit der besten Punktzahl aller Zeiten besiege? Enthält nicht druckbare Dateien. Versuchen Sie es hier online . Ich habe die unprintables mit ihrem jeweiligen Alt-Index zur besseren Lesbarkeit ersetzt.

‼Μz~1d"Ξ/êί Tuple% {Ξ0î⌂ Ξ2Qμ_ %;}"HRzH",_

Erläuterung

‼Μz~1d"Ξ/êί Tuple% {Ξ0î⌂ Ξ2Qμ _%;}"HRzH",_
 Μz~1d                                     map the range 1..100 with the following function
      "                                    begin a string
       Ξ/êί                                short for "class"
            Tuple% {               H       string interpolate H (current number)
                    Ξ0î⌂ Ξ2Qμ              short for "public Object"
                              _%;}" RzH    string interpolate with a range from 1..H joined
                                       ",_  by the string ",_" (auto-closed quotes)
Conor O'Brien
quelle
1
Ich nehme an. Ist es auf dieser Website angebracht, die akzeptierte Antwort zu ändern, wenn später eine neue Punktzahl eingeht?
Ray Toal
6
@RayToal Ja, es ist richtig und wird sogar empfohlen, dies zu tun.
Conor O'Brien
Was ist die Zeichenkodierung dafür? Ich weiß, dass Golfsprachen häufig ihre eigene Codierung verwenden, aber ich kann nicht erkennen, welche Codierung Jolf verwenden könnte. Mir ist klar, dass das alt ist.
Rekursiv
@recursive Die griechische ISO-8859-7, diese: en.wikipedia.org/wiki/ISO/IEC_8859-7
Conor O'Brien
23

vim 56 54 tastenanschläge

iclass Tuple1 {public Object _0;}<esc>qyYp<C-a>$y2bPr,<C-a>q98@y

Da V abwärtskompatibel ist, können Sie es online ausprobieren!

Dies ist die perfekte Aufgabe für Vim! Ich könnte es später ein bisschen mehr Golf spielen. Beachten Sie auch, dass <c-a>dies Strg-A bedeutet und als ein Tastendruck zählt.

Erläuterung:

iclass Tuple1 {public Object _0;}<esc>         'Enter the starting text


qy                          'Start recording in register y
  Yp                        'Yank the current line, the print on the line below
     <C-a>                  'Increment the next digit to occur by one
          $                 'Move to the end of this line
           y2b              '(yank) 2 words (b)ack. This will grab '_0;'
              P             'Print the previously yanked word before the cursor.
               r,           '(r)eplace the char under the cursor with a comma.
                 <c-a>q     'Increment the current digit, then stop recording
                       99@y 'Playback macro 'y' 99 times.
DJMcMayhem
quelle
1
Wenn Sie Strg-A als einen Tastendruck zählen, können Sie yydurch ersetzen Y.
Siehe auch
1
@Seeq Haha, mir ist gerade dasselbe aufgefallen und ich habe es bearbeitet, bevor ich deinen Kommentar gesehen habe. Große Köpfe denken ähnlich!
DJMcMayhem
Dies scheint zu gehen class Tuple101, nicht class Tuple100wie die Frage fragt.
Numbermaniac
1
@numbermaniac Einfacher Fehler nach dem anderen. Vielen Dank für den Hinweis!
Behoben
10

Jelly, 44 Bytes

R’j“,_”
“¤>%,oỊȤʠ“ØụĊ5D³ṃṠɼQ»j;Ç;“;}¶”
ȷ2RÇ€

Meine erste Gelee Antwort. Probieren Sie es online!

Lynn
quelle
Mache ich es falsch oder gibt dies nur eine riesige Liste anstelle einer Zeichenfolge aus?
Denker
@DenkerAffe Es scheint jetzt zu funktionieren! Es gab einen vorübergehenden Fehler in Jelly. (Außerdem war der Link zu einer alten Version meiner Lösung, daher habe ich sie aktualisiert.)
Lynn
Schön ... ab sofort sind es 9 Bytes weniger als bei der CJam-Lösung!
Ray Toal
8

Pyth, 53 50 48 Bytes

VS100%." }SüÆðQ´Ó3Ô«%&a´4UçõÛ"[Nj",_"UN

Probieren Sie es online!

Einfache Iteration über den Bereich (1.100) und Erstellen der entsprechenden Zeichenfolge aus einer gepackten Zeichenfolge durch Formatieren.

Erläuterung

VS100%. "} SüÆðQ´Ó3Ô«% & a´4UçõÛ "[Nj", _ "UN

VS100 # Iterieren über Reichweite (1.100)
     %. "} SüÆðQ´Ó3Ô«% & a´4UçõÛ "# Entpacke den String und formatiere ihn
                              [# Liste zum Formatieren von Argumenten
                               N # Nummer des Tupels
                                j UN # Join Objektnummern ...
                                 ", _" # ... am Trennzeichen ", _"

Der entpackte String ist class Tuple%i {public Object _%s;}

Denker
quelle
Zwei Golfplätze: Verwenden Sie s[anstelle von allen diesen +. [erstellt eine Liste mit beliebiger Länge und sverkettet sie. Auch, da Sie wollen [1, 2, ... 100], nicht [0, 1, .. 99]verwenden VS100, und Sie werden auch nicht brauchen h.
isaacg
@isaacg Danke, wusste nichts über den S-trick! :) Habe schon drauf gesessen das alles loszuwerden ++++, ich wusste es gibt einen besseren Weg.
Denker
Bitte. Übrigens scheinen Sie "unnötigerweise ein Trailing hinzugefügt zu haben .
Isaacg
1
@isaacg Gibt es einen Grund, warum j<str><int>nicht U?
Lirtosiast
1
Nein nicht wirklich. Wird besorgt.
Isaacg
7

CoffeeScript, 86 84 Bytes

console.log "class Tuple#{i} {public Object _#{[0...i].join ',_'};}"for i in[1..100]

Sehen Sie sich die Lösung online an

Ray Toal
quelle
Willkommen bei PPCG! Nur um Sie wissen zu lassen, dass Änderungen, die die Antworten verbessern, im Allgemeinen verpönt sind (und zurückgewiesen werden sollten, wenn sie in der Überprüfungswarteschlange landen). Es ist also wahrscheinlicher, dass die Leute mit Vorschlägen kommentieren, sodass Sie sie selbst überprüfen können. :) (Was die tatsächlichen Tipps angeht, ich denke, Sie brauchen weder den Platz vor fornoch den nach in.)
Martin Ender
Does console.log"Arbeit? (Ich weiß nicht, Kaffee-Skript, das ist ein allgemeiner Trick.
Addison Crump
Nein, wie beim Entfernen des Leerzeichens. : PI weiß, dass es existiert, ich weiß nur nicht, ob das eine gültige Syntax ist.
Addison Crump
@VoteToClose Ich habe das früher versucht (mit dem Live-Transpiler auf coffeescript.org und es hat nicht funktioniert).
Martin Ender
@VoteToClose Oh, das habe ich leider nicht gesehen. Nein, irgendwie wird der Platz von der Grammatik benötigt, aber mir ist nicht genau klar, warum (noch). Der Abstand, auf den es in CoffeeScript ankommt, unterscheidet sich zum Beispiel grundlegend x? y:zvon x ? y:z. Das kann man console.log?"hello"aber nicht sagen console.log"hello". Signifikantes Leerzeichen. Mal schön, mal komisch.
Ray Toal
7

Java, 160 , 125 Bytes

Vielen Dank an @DenkerAffe, @Denham Coote und @Mathias Ettinger für die Verbesserungen.

Java Schreiben von Java (weil jemand musste!)

void z(){String s="_0";for(int i=1;i<101;){System.out.println("class Tuple"+(i++)+" {public Object "+s+";}");s+=",_"+i;}}

Und die Version ohne Golf

void z(){
    String s = "_0";
    for(int i = 1 ;i < 101;){
        System.out.println("class Tuple" + (i++) + " {public Object "+ s + ";}");
        s += ",_" + i;
        }
    }
SoloKix
quelle
2
Willkommen bei Programming Puzzles & Code Golf! Sofern in der Aufforderung nicht anders angegeben, können Sie immer Funktionen anstelle vollständiger Programme verwenden. Sie sollten hier also ein Java8-Lambda (das das Ergebnis zurückgibt) verwenden, um all das public static void main...Zeug zu sparen .
Denker
4
Willkommen bei PPCG. Diese Antwort enthält ein zusätzliches Komma am Ende der Objektdeklarationen ...class Tuple1 {public Object _0,;} class Tuple2 {public Object _0,_1,;}
Denham Coote
3
Sie können weitere 3 Bytes speichern, indem Sie Ihren Schleifenzähler im Sysout (++ i) anstelle von (i + 1) erhöhen und um i++
Denham Coote
Sie sollten Ihr starten, String s = "_0"damit Sie s += ",_" + iein Byte speichern können. Es wird auch das Problem mit dem nachfolgenden Koma lösen. Sie müssen die for-Schleife von starten1 auf weniger als gehen, 101und Sie müssen in der Lage sein, zusätzliche 4 Bytes zu entfernen, indem Sie das (i+1)in Ihrer Ausgabenachricht in nur konvertieren i. Offensichtlich müssen Sie vor dem Inkrementieren drucken s.
409_Conflict
Vielen Dank, habe all diese Dinge getan und werde definitiv einen Blick auf java8-lambda werfen.
SoloKix
6

Oracle SQL 9.2, 138 137 Bytes

SELECT REPLACE('class Tuple'||LEVEL||' {public Object'||SYS_CONNECT_BY_PATH(LEVEL-1,',_')||';}','t,','t ')FROM DUAL CONNECT BY LEVEL<101;

@ Peter Danke, dass du auf den Fehler 0/1 hingewiesen hast.

Die Abfrage verwendet die hierarchische Abfrage CONNECT BY CLAUSE, um 100 Zeilen zu generieren.

Die LEVEL-Pseudospalte enthält die Zeilennummer jeder Zeile.

SYS_CONNECT_BY_PATH verketten den ersten Parameter, die Zeilennummer jeder Zeile, und verwenden den zweiten Parameter als Trennzeichen.

Jeto
quelle
Bitte fügen Sie eine Erklärung hinzu
Eumel
Clever :) Dies beginnt mit Object _1anstatt Object _0, so dass noch zwei Bytes ( -1) benötigt werden. Das _kann jedoch zum Zeichen von hinzugefügt werden, SYS_CONNECT_BY_PATHanstatt es zu verketten, wodurch es wieder um zwei Bytes reduziert wird:REPLACE('class Tuple'||LEVEL||' {public Object'||SYS_CONNECT_BY_PATH(LEVEL-1,',_')||';}','t,_','t _')
Peter Lang
6

Batch, 128 Bytes

@set m=_0
@for /l %%t in (1,1,100)do @call:b %%t
@exit/b
:b
@echo class Tuple%1 {public Object %m%;}&set m=%m%,_%1

Bearbeiten: 10 Bytes dank @Bob gespeichert. 1 Byte dank @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ gespeichert.

Neil
quelle
3
Ich freue mich immer sehr, Batch-Code-Golf zu sehen. Anstatt @ überall zu verwenden, können Sie die Ausgabe umleiten, um sie an eine Datei mit dem Namen x anzuhängen und als Ausgabe zu verwenden
Dennis van Gils
@DennisvanGils Leider werden Befehle in der Standardausgabe wiedergegeben.
Neil
Ausgeschieden enabledelayedexpansionfür 117 Bytes: gist.github.com/Elusive138/4cea555114a979954dcb - wenn Sie nicht das Konsolenfenster dagegen Schließen Sie zwei weitere durch das Entfernen sparen können /bvon arg exit.
Bob
@Neil lol okay, ich habe es nur versucht und jetzt merke ich, was du getan hast. Sehr schlau.
Ashwin Gupta
Verwenden Sie zu Beginn@echo off
Elliot A.
5

Retina , 80 bis 79 Bytes

Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.

100$*1
1
class Tuple11$` {public Object 1$`}¶
1(?<= (1+))
_$1,
1(1)*
$#1
,}
;}

Probieren Sie es online!

Martin Ender
quelle
5

Powershell - 65 Bytes

(Geändert als Antwort auf einen Kommentar.)

Alle Kredite an TimmyD

1..100|%{"class Tuple$_ {public Object _$(0..($_-1)-Join",_");}"}
bulletprooffool
quelle
Warum ist die Abstimmung niedergeschlagen? (Bitte beachte, dass dies mein allererster Post ist, kein großartiger Empfang?)
bulletprooffool
5

Perl 6 , 65 Bytes

say "class Tuple$_ \{public Object _{join ',_',^$_};}" for 1..100
Brad Gilbert b2gills
quelle
4

R - 199 132 123 118 Bytes

Version 4

p=paste0;for(i in 1:10)cat(p("class Tuple",i," {public Object ",toString(sapply(0:(i-1),function(x)p("_",x))),";}\n"))

Version 3

p=paste0;for(i in 1:8)cat(p("class Tuple",i," {public Object ",p(sapply(0:(i-1),function(x)p("_",x)),collapse=","),";}\n"))

Version 2

p=paste0;for(i in 1:100)cat(p("class Tuple",i," {public Object ",p(sapply(0:(i-1),function(x)p("_",x)),collapse=","),";}"),sep="\n")

Version 1

for (i in 1:100){
  foo <- paste0("class Tuple", i, " {public Object ")
  for (j in 0:(i - 1)){
    foo <- if (j < (i - 1)) paste0(foo, "_", j, ",") else paste0(foo, "_", j, ";}")
  }
  print(foo)
}
Argenis García
quelle
3
Willkommen bei Programming Puzzles & Code Golf! Da dies ein Code-Golf-Wettbewerb ist, sollten Sie Ihren Code so kurz wie möglich halten. Sie könnten beginnen, indem Sie Variablennamen auf jeweils ein Zeichen kürzen, Leerzeichen entfernen und =für die Zuweisung verwenden, anstatt <-.
Alex A.
144 Bytes:for(i in 1:100){f=(p=paste0)("class Tuple",i," {public Object ");for(j in 0:(i-1))f=if(j<i-1)p(f,"_",j,",")else p(f,"_",j,";}");cat(f,sep="\n")}
Alex A.
Kein Problem. :) Außerdem müssen Sie Ihre Versionen nicht im Post-Body nachverfolgen, da der Revisionsverlauf über den Link "Bearbeitet vor X Minuten" zugänglich ist.
Alex A.
(obwohl es sich lohnen kann, in Ihren Bearbeitungszusammenfassungen oder im Beitrag einen Hinweis darauf zu geben, was Sie bei jeder Überarbeitung geändert haben, damit andere von Ihrem Überarbeitungsprozess lernen können)
quintopia
4

Ruby, 71 Bytes

100.times{|i|puts"class Tuple#{i+1} {public Object _#{[*0..i]*',_'};}"}
daniero
quelle
2
Bis [*0..i]*',_'wow
Ray Toal
4

Java, 103 Bytes

s->{s="_0";for(int i=0;i++<100;s+=",_"+i)System.out.printf("class Tuple%s {public Object %s;}\n",i,s);}

Mein erstes Mal hier. Hallo! Ich habe mich für einen Java8-Lambda-Ausdruck entschieden (auch bekannt als anonyme Funktion).

Ungolfed-Version

s -> {
    s = "_0";
    for (int i = 0; i++ < 100; s += ",_" + i)
        System.out.printf("class Tuple%s {public Object %s;}\n", i, s);
}

Um dies tatsächlich zu verwenden, müssen Sie es, wie in Java8 üblich, einer Variablen einer geeigneten funktionalen Schnittstelle zuweisen (oder in eine solche umwandeln) und dann ihre Methode aufrufen. aber technisch ist die Funktion nur der Lambda-Ausdruck selbst, also zähle ich nur das.

Außerdem ist ein Eingabeparameter erforderlich, der mir einige Bytes erspart, da ich ihn als lokale Variable missbrauchen kann, ohne seinen Typ angeben zu müssen. Ich bin mir nicht sicher, ob dies als Betrug angesehen wird, aber für mich scheint es innerhalb der Regeln zu liegen: Ich habe nur Leute gesehen, die sagten, dass das Posten einer Funktion erlaubt ist, nicht wie diese Funktion aufgerufen werden muss. :) Und es liest den Parameter nicht wirklich, so dass die Funktion immer noch in sich geschlossen ist; Sie können einen beliebigen String oder sogar null übergeben, und es wird immer noch die richtige Ausgabe erzeugt.

Und so benutzt man es:

import java.util.function.Consumer;

public class Main {
    public static void main(String[] args) {
        Consumer<?> r =
            s->{s="_0";for(int i=0;i++<100;s+=",_"+i)System.out.printf("class Tuple%s {public Object %s;}\n",i,s);}
        ;
        r.accept(null); 
    }
}
FireballStarfish
quelle
3

Python 2, 96

def f(n=99):s=n and f(n-1)+',_'+`n`or"class Tuple%d {public Object _0";print s%-~n+';}';return s

Python 3, 98

def f(n=99):s=n and f(n-1)+',_%d'%n or"class Tuple%d {public Object _0";print(s%-~n+';}');return s

Verwendung:

f()

Ungolfed:

def javatuple(n=99):
    if n == 0:
        s = "class Tuple%d {public Object _0"
    else:
        s = javatuple(n-1) + ',_' + str(n)
    print(s%(n+1) + ';}')
    return s

bildner:

103

r=range
for i in r(100):
 print"class Tuple%d {public Object _%s;}"%(i+1,',_'.join(`j`for j in r(i+1)))

108

def f(n=99):
 if n:f(n-1)
 print"class Tuple%d {public Object _%s;}"%(n+1,',_'.join(`i`for i in range(n+1)))
pacholik
quelle
In deiner python2 Antwort scheint die letzte Zeile unvollständig zu sein: print f(3) ergibt: class Tuple1 {public Object _0;} class Tuple2 {public Object _0,_1;} class Tuple3 {public Object _0,_1,_2;} class Tuple4 {public Object _0,_1,_2,_3;} class Tuple%d {public Object _0,_1,_2,_3
Dieter
@ Dieter Die letzte Zeile ist ein Ergebnis. Es wird nur gedruckt, wenn Sie es interaktiv ausführen.
Pacholik
2

CJam, 53 Bytes

100{)"class Tuple"\" {public Object _"1$,",_"*";}
"}/

Probieren Sie es hier aus .

Lynn
quelle
2

Groovig, 74 Zeichen

"join ()" ist unschlagbar ... Neue Lösung dank @yariash

100.times{println"class Tuple$it {public Object _${(0..it-1).join',_'};}"}

Alte Lösung, 78 Zeichen:

(1..100).each{println"class Tuple$it {public Object _${(0..it-1).join',_'};}"}
t0r0X
quelle
2
Sie können 100.times{}anstelle von verwenden (1..100).each{}.
Krzysztof Atłasik
@yariash Danke für den Hinweis!
t0r0X
1

Julia, 77 Bytes

for i=1:100;println("class Tuple$i {public Object _$(join(0:i-1,",_"));}")end
Ray Toal
quelle
1

Lua, 128 106 Bytes

Ich versuche immer noch, eine Möglichkeit zu finden, direkt an einem gedruckten Wert und nicht an einer Zeichenfolge zu arbeiten.

Edit: Teilweise gefunden! Ich brauche noch eine Zeichenfolge für den Teil "_0, _1 ...", aber es ist schon besser :).

s=""for i=0,99 do s=(s..",_"..i):gsub("^,",s)print(("class Tuple"..(i+1).." {public Object ")..s..";}")end

Alte 128-Byte-Lösung

s="class Tuple1 {public Object _0;}"print(s)for i=1,99 do s=s:sub(1,s:find";"-1):gsub("e%d+","e"..i+1)..",_"..i..";}"print(s)end

Ungolfed

s=""
for i=0,99
do
  s=(s..",_"..i)              -- concatenate s with ",_i"
      :gsub("^,",s)           -- remove the leading "," for ",_0"
  -- then print the concatenated string
  print(("class Tuple"..(i+1).." {public Object ")..s..";}")
end
Katenkyo
quelle
1

Python 3, 111 109 105 Bytes

[print('class Tuple%s {public Object %s;}'%(i,','.join('_%i'%j for j in range(i))))for i in range(1,101)]

Es ist nicht die kürzeste Sache der Welt, ich nehme nur teil.

edit1: 2 Bytes runter durch entfernen 0, zuerst in entferntrange

edit2: Ich habe unnötigerweise intauf gewirkt , stranstatt nur %i... Down to 105 zu verwenden.

Issak
quelle
Willkommen, schöner Start! Wenn Sie interessiert sind, versuchen Sie es range(i)anstelle von range(0,i)oder da Sie es rangezweimal verwendet haben, versuchen Sie es r=rangevorzeitig und verweisen Sie dann auf jeden Anruf mit nur r(wie in den anderen Python-Lösungen).
Ray Toal
Ugh, ich habe vergessen, rangestandardmäßig bei 0 zu beginnen. 2 Bytes weniger, aber das Hinzufügen r=range;am Anfang ergibt genau die gleiche Zeichenanzahl, das habe ich versucht! : D
Issak
Gleicher Kommentar wie bei Dair : ',_'.join(map(str,range(i)))Ist hier 7 Bytes kürzer.
409_Conflict
1

Mathematica, 130 Bytes

{"class Tuple",ToString[#]," {public Object ",StringReplace[ToString[#-1&/@Range@#],{" "|"{" ->"_","}"->";}\n"}]}&/@Range[100]<>""
Ein Simmons
quelle
Hinweis: \nKann durch ein wörtliches Zeilenumbruchzeichen ersetzt werden.
LegionMammal978
1

Scala, 85 Bytes

for(u<-1 to 100)println(s"class Tuple$u {public Object _${0 to u-1 mkString ",_"};}")
Jo Bain
quelle
1

Java, 116

(nur für die Druckfunktion - dies steht laut einigen Kommentaren im Einklang mit den Regeln)

import static java.lang.System.*;
public class T
{
    public static void main(String[] args)
    {
        T t = new T();
        t.p();
    }

    void p(){String s="_0";for(int i=0;i<100;){out.println("class Tuple"+ ++i+" {public Object "+ s + ";}");s+=",_"+i;}}
}
Marco13
quelle
1

PHP, 112 Bytes

<?php for($i=0;$i<100;$i++){$m.=$i==0?'_'.$i:',_'.$i;echo 'class Tuple'.($i+1).' {public Object '.$m.';}<br/>';}
gumione
quelle
Sie können ein paar Bytes sparen, indem Sie das Echo nach Möglichkeit in doppelte Anführungszeichen setzen:<?php for($i=0;$i<100;$i++){$m.=$i==0?"_$i":",_$i";echo 'class Tuple'.($i+1)." {public Object $m;}\n";}
Samsquanch
1
@Samsquanch Anstelle von echo 'class Tuple'.($i+1)." {public Object $m;}\n";kann auch verwendet werden echo'class Tuple',$i+1," {public Object $m;}\n";, was 3 Bytes kürzer ist. Außerdem können Sie laut Meta das entfernen <?phpund davon ausgehen, dass Ihr Code mit ausgeführt wird php -r "code". Sie können auch for(;++$i<101;)echo"class Tuple$i {public Object ",$m=($m?"$m,":'')."_$i",";}\n";für 80 Bytes tun (Sie müssen die \ndurch eine echte Newline ersetzen ). Versuchen Sie es hier: ideone.com/oOzKtP
Ismael Miguel
1

Im Ernst, 55 Bytes

2╤R`;r"$'_+"£M',j@k"c╙ò T╒α%d {pu▐V Object %s;}"⌡%`M'
j

Hexdump (umschaltbar mit xxd -r):

00000000: 32e2 95a4 5260 3b72 2224 275f 2b22 c2a3  2...R`;r"$'_+"..
00000010: 4d27 2c6a 406b 2263 e295 99c3 b220 54e2  M',j@k"c..... T.
00000020: 9592 ceb1 2564 207b 7075 e296 9056 204f  ....%d {pu...V O
00000030: 626a 6563 7420 2573 3b7d 22e2 8ca1 2560  bject %s;}"...%`
00000040: 4d27 0a6a                                M'.j

Probieren Sie es online!

Ja, diese Newline soll da sein.

Erklärung (Newline ersetzt durch \n):

2╤R`;r"$'_+"£M',j@k"c╙ò T╒α%d {pu▐V Object %s;}"⌡%`M'\nj
2╤R                                                       push range [1,100]
   `                                              `M      map:
    ;r                                                      push a, range(a)
      "$'_+"£M                                              map:
       $'_+                                                   stringify, prepend "_"
              ',j                                           join with commas
                 @k                                         swap and push stack as list
                   "c╙ò T╒α%d {pu▐V Object %s;}"⌡           decompress, result is
                                                              "class Tuple%d {public Object %s;}"
                                                 %          string format
                                                    '\nj  join with newlines
Mego
quelle
1

Japt, 52 Bytes

Lo £`cÓ? TÕà{X} \{puÞV Object {Xò ®'_+Z}&}` r&59d} ·

Das ? sollte das Literalbyte 0x95 sein. Online testen!

Japt hat:

  • Kurze Syntax zur Verkürzung des Codes.
  • String-Komprimierung , um es noch weiter zu verkürzen.
  • Viele Fehler , die Sie dazu bringen, Ihren Computer aus dem Fenster zu werfen.

Ich kann nicht einmal ein Semikolon in der Zeichenfolge verwenden, da die darin eingeschlossene Funktion alles nach dem Semikolon zurückgeben möchte. Dies sollte nur 46 Bytes sein:

Lo £`cÓ? TÕà{X} \{puÞV Object {Xò ®'_+Z};}`} ·

Aber leider ist es nicht. Ich werde sehen, ob ich diese Fehler in den nächsten Stunden beheben kann.

Wie es funktioniert

Lo £       }  // Generate the range [0..100), and map each item X in this range to:
`cÓ? TÕà{X}   //  "class Tuple" + X +
\{puÞV Object //  "{public Object" +
{Xò ®'_+Z}    //   Create the range [0..X] and map each item Z to "_" + Z.
              //   Upon stringification, this automatically inserts the commas.
&}`           //  + "&}"
r&59d         //  Replace the "&" with String.fromCharCode(59), or ";".
·             // Join the result with newlines.
ETHproductions
quelle
Bah! Ninjaed von ~ 18 Monaten! Sie müssen Xübrigens die erste erhöhen.
Shaggy
1

Javascript, 112 110 Bytes

2 Bytes weg danke @ CᴏɴᴏʀO'Bʀɪᴇɴ .

_=>[...Array(100)].map((x,i)=>`class Tuple${++i} {public Object ${[...Array(i)].map((y,j)=>'_'+j)};}`).join`
`

Ungolfed:

_=>                                         // anonymous function
    [...Array(100)].map((x,i)=>             // 100 times [0..99]
        `class Tuple${++i} {public Object   // Tuple index + 1
            ${[...Array(i)].map(            // (index + 1) times
                (y,j)=>'_'+j                // _+j with j in [0..index]
            )}                              // Array without join prints comma in between
        ;}`                                 // as literal string
    ).join`\n`                              // display array line by line
entfernt
quelle
1
Ich glaube , Sie können ersetzen ${i+1}mit ${i++}und ersetzen ${[...Array(i++)]mit ${[...Array(i)].
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ. Danke, ich habe mit aktualisiert++i
entfernt
1

Groovy, 97 Bytes

(1..100).each{println "class Tuple${it} {public Object ${(0..it-1).collect{"_$it"}.join(',')};}"}

Probieren Sie es online!

Apostolos
quelle
1
Sie können 100x {} anstelle von (1..100) .each {} verwenden, wodurch 4 Byte eingespart werden.
Krzysztof Atłasik
Sie können auch Klammern mitmachen (weglassen join','), entfernen Sie Leerzeichen nach println und ersetzen .collect{}mit*.with{}
Krzysztof Atłasik
1

Python 2, 96 Bytes

r=range
for i in r(1,101):print"class Tuple%d {public Object _%s;}"%(i,',_'.join(map(str,r(i))))

Vielen Dank an @DenkerAffe für den Vorschlag zur Verwendung lambda.

Danke @MathiasEttinger für die joinIdee.

Dair
quelle
2
Sie können dies auf 111 Bytes reduzieren, wenn Sie in Ihrem Reduce-Call ein Lambda verwenden, anstatt eine Funktion dafür zu definieren:reduce(lambda x,y:'%s,_%s'%(x,y), r(i))
Denker
1
Oder verwenden Sie diese Option, ',_'.join(map(str,r(i)))um zusätzliche 14 Byte zu entfernen (oder um 15 Byte zu entfernen, da Sie einen zusätzlichen Speicherplatz in Ihrer Datei belassen haben reduce).
409_Conflict
1

C ++, 164 159 157 Bytes (155 nur als Funktion)

#include <iostream>
#define o std::cout<<
int main(){int j,i=0;for(;i<100;++i){o"class Tuple"<<i+1<<" {public Object _0";for(j=0;++j<=i;)o",_"<<j;o";}\n";}}

Dies ist ein volles Programm. Sie können 2 Byte in Funktion speichern nur bilden , wenn Sie ersetzen int main()mit void f().

Führen Sie Code in Ideone aus

Ungolfed, einschließlich Makroexpansion

#include <iostream>
int main()
{
    int j,i=0;
    for(;i<100;++i)
    {
        std::cout << "class Tuple"<< i+1 <<" {public Object _0";
        for(j=0;++j<=i;)
            std::cout << ",_" << j;
        std::cout << ";}\n";
    }
}
sendaran
quelle
Willkommen bei Programming Puzzles & Code Golf! Schöne erste Antwort! Sofern in der Challenge nicht anders angegeben, können Sie immer Funktionen anstelle vollständiger Programme verwenden, sodass Sie auf diese Weise einige Bytes einsparen können. Sie müssen noch iostream einbinden, da es für die Ausgabe benötigt wird.
Denker
Vielleicht möchten Sie auch j=1in Ihrer for-Schleife arbeiten, ohne die if(j).
Ethiraric
@Ethiraric Aber natürlich! Wie schlampig von mir. Ich schätze, ich habe mich zu sehr auf die Idee konzentriert, dass man Ergänzungen in der ersten Zeile überspringen muss, und habe das am Ende zu wörtlich geschrieben.
Sendaran
@sendaran Oder vielleicht sogar noch for(int j=0;++j<=i;)ein weiteres Byte sparen.
Ethiraric
@Ethiraric Hat das getan und ein zusätzliches Byte durch Extrahieren von Variablendeklarationen entfernt, wodurch ein weiterer leerer Ausdruck aktiviert wurde.
Sendaran