Générer 100 classes Java Tuple

37

Ecrivez un script qui écrit sur la sortie standard, ou l'équivalent dans votre langue, 100 lignes de code Java (valide) commençant par:

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

La dernière ligne devrait commencer par class Tuple100.

C'est du , donc le code le plus court en octets gagne!

Ray Toal
la source
6
J'accepte le défi! En fait, je vais le faire en Java!
Ashwin Gupta
Puis-je écrire une fonction ou doit-il s'agir d'un programme complet?
Ashwin Gupta
3
Je suis nouveau sur le site, donc on m'a demandé un script, mais j'ai entendu dire qu'il était d'usage d'autoriser les fonctions, et cela semble logique pour Java, afin d'éviter de public static void main(String[] args)donner une fonction si vous le souhaitez.
Ray Toal
1
Génial! Merci Ray!
Ashwin Gupta
Ce n'est pas assez petit, mais je pense que c'est un endroit idéal pour partager le ngénérateur que j'ai écrit en Java: github.com/kenzierocks/Tuplocity . Il génère des tuples entièrement génériques!
Octavia Togami

Réponses:

8

Jolf, 42 octets

Est-ce que je reçois des points bonus pour avoir battu Jelly avec le meilleur score? Contient des éléments non imprimables, vous pouvez donc essayer en ligne ici . J'ai remplacé les non imprimables par leur index alt respectif pour plus de lisibilité.

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

Explication

‼Μ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
la source
1
Je suppose. Est-il approprié sur ce site de changer la réponse acceptée si un nouveau score arrive plus tard?
Ray Toal
6
@RayToal Oui, c'est approprié et même suggéré de le faire.
Conor O'Brien
Quel est l'encodage des caractères pour cela? Je sais que les langues de golf utilisent fréquemment leur propre encodage, mais je ne vois pas quel encodage jolf pourrait utiliser. Je réalise que c'est vieux.
récursive
@recursive Le grec ISO-8859-7, celui-ci: en.wikipedia.org/wiki/ISO/IEC_8859-7
Conor O'Brien le
23

vim 56 54 frappes au clavier

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

Puisque V est rétrocompatible, vous pouvez l’ essayer en ligne!

C'est la tâche idéale pour vim! Je pourrais jouer au golf un peu plus tard. Notez également que cela <c-a>signifie Control-A, et cela compte comme une frappe.

Explication:

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
la source
1
Si vous comptez Control-A comme une frappe, vous pouvez remplacer yypar Y.
seequ
1
@Seeq Haha, je viens de réaliser la même chose et de la modifier juste avant de voir votre commentaire. Les grands esprits se rencontrent!
DJMcMayhem
Cela semble aller class Tuple101, pas class Tuple100comme le demande la question.
numbermaniac
1
@numbermaniac Simple erreur off-by-one. Merci d'avoir fait remarquer cela! Réparé maintenant :)
DJMcMayhem
10

Gelée, 44 octets

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

Ma première réponse de gelée. Essayez-le en ligne!

Lynn
la source
Est-ce que je me trompe ou est-ce que cela affiche simplement une liste géante au lieu d'une chaîne?
Denker
@ DenkerAffe Il semble fonctionner maintenant! Il y avait un bug temporaire dans Jelly. (En outre, le lien renvoyait à une ancienne version de ma solution, je l'ai donc mise à jour.)
Lynn
Nice ... à partir de maintenant, il est 9 octets plus court que la solution CJam!
Ray Toal
8

Pyth, 53 50 48 octets

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

Essayez-le en ligne!

Itération directe sur la plage (1 100) et construction de la chaîne corrospondante à partir d'une chaîne compactée en la formatant.

Explication

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

VS100 # Itérer sur la plage (1 100)
     %. "} SüÆðQ´Ó3Ô«% & a´4UçõÛ "# Décompressez la chaîne et formatez-la
                              [# Liste pour les arguments de formatage
                               N ° Numéro du tuple
                                j UN # Joindre des numéros d'objet ...
                                 ", _" # ... sur le séparateur ", _"

La chaîne déballée est class Tuple%i {public Object _%s;}

Denker
la source
Deux golfs: Utilisez s[au lieu de tous +. [fait une liste de longueur arbitraire et la sconcatène. De plus, puisque vous voulez [1, 2, ... 100], non [0, 1, .. 99], utilisez VS100, et vous n'aurez besoin de rien non plus h.
isaacg
@isaacg Merci, ne savait pas sur le S-trick! :) Était déjà assis sur se débarrasser de tout le ++++, je savais qu'il y a une meilleure façon.
Denker
Vous êtes les bienvenus. En passant, vous semblez avoir ajouté une traînée "inutile.
isaacg
1
@isaacg Y at-il une raison j<str><int>non U?
lirtosiast
1
Non, pas vraiment. Ça ira.
isaacg
7

CoffeeScript, 86 84 octets

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

Voir la solution en ligne

Ray Toal
la source
Bienvenue chez PPCG! Juste pour vous faire savoir que les modifications qui améliorent les réponses sont généralement mal vues (et devraient être rejetées si elles se retrouvent dans la file d'attente de révision). Il est donc plus probable que les gens commentent avec des suggestions afin que vous puissiez les examiner vous-même. :) (Pour ce qui est des conseils réels Je pense que vous avez besoin ni l'espace devant , forni celle d' après in.)
Martin Ender
Ça console.log"marche? (Je ne connais pas le scénario du café, c'est un truc général.
Addison Crump le
Non, comme dans, en supprimant l'espace. : PI sait que ça existe, je ne sais pas si c'est une syntaxe valide.
Addison Crump
@VoteToClose J'ai déjà essayé cela (en utilisant le transpiler en direct sur coffeescript.org et cela n'a pas fonctionné).
Martin Ender
@VoteToClose Oh désolé n'a pas vu ça. Non, d’une manière ou d’une autre, la grammaire a besoin d’espace, mais je ne comprends pas très bien pourquoi (encore). Questions d' espacement beaucoup en CoffeeScript, par exemple, x? y:zest tout à fait différent de x ? y:z. Vous pouvez dire console.log?"hello"mais pas console.log"hello". Espaces blancs significatifs. Parfois sympa, parfois bizarre.
Ray Toal
7

Java, 160 , 125 octets

Merci à @ DenkerAffe, @Denham Coote et @Mathias Ettinger pour les améliorations apportées.

Java écrit java (parce que quelqu'un devait le faire!)

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

Et la version non-golfée

void z(){
    String s = "_0";
    for(int i = 1 ;i < 101;){
        System.out.println("class Tuple" + (i++) + " {public Object "+ s + ";}");
        s += ",_" + i;
        }
    }
SoloKix
la source
2
Bienvenue dans Programming Puzzles & Code Golf! Sauf indication contraire dans le défi, vous pouvez toujours utiliser des fonctions au lieu de programmes complets. Donc, vous devriez utiliser un Java8-lambda (qui renvoie le résultat) ici pour vous sauver tout le public static void main...truc.
Denker
4
Bienvenue chez PPCG. Cette réponse inclut une virgule supplémentaire à la fin des déclarations d'objet ...class Tuple1 {public Object _0,;} class Tuple2 {public Object _0,_1,;}
Denham Coote
3
Vous pouvez économiser 3 octets supplémentaires en incrémentant votre compteur de boucles dans le sysout (++ i) au lieu de (i + 1) et en supprimant i++de la configuration de la boucle for
Denham Coote, le
Vous devriez commencer votre String s = "_0"afin que vous puissiez s += ",_" + iet enregistrer un octet. Cela résoudra également le problème du coma final. Vous devrez démarrer la boucle for de 1moins de 101et vous pourrez supprimer 4 octets supplémentaires en convertissant (i+1)uniquement le message de sortie i. De toute évidence, vous devrez imprimer avant d’ augmenter s.
409_Conflict
Merci, vous avez fait toutes ces choses et je vais certainement jeter un coup d'œil à java8-lambda.
SoloKix
6

Oracle SQL 9.2, 138 137 octets

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

@ Peter Merci d'avoir signalé l'erreur 0/1.

La requête utilise la requête CONNECT BY CLAUSE de la requête hiérarchique pour générer 100 lignes.

La pseudo-colonne LEVEL contient le numéro de ligne de chaque ligne.

SYS_CONNECT_BY_PATH concaténer le premier paramètre, le numéro de la ligne, de chaque ligne et utiliser le second paramètre comme séparateur.

Jeto
la source
s'il vous plaît ajouter quelques explications
Eumel
Clever :) Cela commence par Object _1au lieu de Object _0, cela prendra donc encore deux octets ( -1). Cependant, _on peut ajouter le caractère de SYS_CONNECT_BY_PATHau lieu de le concaténer, en le réduisant encore de deux octets:REPLACE('class Tuple'||LEVEL||' {public Object'||SYS_CONNECT_BY_PATH(LEVEL-1,',_')||';}','t,_','t _')
Peter Lang le
6

Lot, 128 octets

@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

Edit: 10 octets enregistrés grâce à @Bob. Sauvegardé 1 octet grâce à @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ.

Neil
la source
3
Je suis toujours très heureux de voir batch sur le code de golf. Au lieu d'utiliser @ partout, vous pouvez rediriger la sortie pour l'ajouter à un fichier appelé x et l'utiliser comme sortie
Dennis van Gils -
@DennisvanGils Malheureusement, les commandes sont renvoyées à la sortie standard.
Neil
Éliminé enabledelayedexpansionpour 117 octets: gist.github.com/Elusive138/4cea555114a979954dcb - si la fermeture de la fenêtre de la console ne vous gêne pas, vous pouvez en sauvegarder deux autres en supprimant l' /barg exit.
Bob
@Neil lol ok donc j'ai juste essayé de le lancer et maintenant je réalise ce que tu as fait. Très intelligent.
Ashwin Gupta
Au début, utilisez@echo off
Elliot A.
5

Retina , 80 79 octets

Le nombre d'octets suppose un codage ISO 8859-1.

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

Essayez-le en ligne!

Martin Ender
la source
5

Powershell - 65 octets

(Modifié en réponse au commentaire)

Tout crédit à TimmyD

1..100|%{"class Tuple$_ {public Object _$(0..($_-1)-Join",_");}"}
bulletprooffool
la source
Pourquoi le vote bas? (Veuillez noter que ceci est mon tout premier message, pas un très bon accueil?)
bulletprooffool
5

Perl 6 , 65 octets

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

R - 199 132 123 118 octets

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
la source
3
Bienvenue dans Programming Puzzles & Code Golf! Comme il s’agit d’une compétition de golf de code, vous voudrez que votre code soit aussi court que possible. Vous pouvez commencer par raccourcir les noms de variables en un seul caractère, en supprimant les espaces et en utilisant =pour l'affectation plutôt que <-.
Alex A.
144 octets: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.
Aucun problème. :) De plus, vous n'avez pas besoin de garder vos versions dans le corps du message, car l'historique des révisions est accessible via le lien "Edité il y a X minutes."
Alex A.
(Bien que cela puisse valoir la peine de donner quelques indications, soit dans vos résumés de montage, soit dans la publication, ce que vous avez changé avec chaque révision pour que d'autres puissent tirer des enseignements de votre processus de révision)
quintopia,
4

Ruby, 71 octets

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

Java, 103 octets

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

Ma première fois ici. Salut! Je suis allé pour une expression Java8 lambda (aka une fonction anonyme).

Version non-golfée

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

Pour pouvoir l'utiliser, comme d'habitude en Java8, vous devez l'affecter à une variable (ou la convertir en) d'une interface fonctionnelle appropriée, puis appeler sa méthode. mais techniquement, la fonction n'est que l'expression lambda elle-même, je ne compte donc que cela.

Il nécessite également un paramètre d'entrée, ce qui me permet d'économiser quelques octets, car je peux en abuser en tant que variable locale sans avoir à spécifier son type. Je ne sais pas si c'est considéré comme de la triche, mais pour moi, cela semble être dans les règles: j'ai seulement vu des personnes déclarer que poster une fonction est autorisée, pas comment cette fonction doit être appelée. :) Et comme le paramètre ne lit pas, la fonction est toujours autonome; vous pouvez lui passer n'importe quelle chaîne, voire même null, et il produira toujours la sortie correcte.

Et voici comment l'utiliser:

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); 
    }
}
Étoile de boule de feu
la source
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

Usage:

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

anciens:

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
la source
Dans votre réponse python2, la dernière ligne semble incomplète: print f(3) donne: 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 La dernière ligne est un résultat. Il est imprimé uniquement lorsque vous l'exécutez de manière interactive.
Pacholik
2

CJam, 53 octets

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

Essayez ici .

Lynn
la source
2

Groovy, 74 caractères

"join ()" est imbattable ... Nouvelle solution grâce à @yariash

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

Ancienne solution, 78 caractères:

(1..100).each{println"class Tuple$it {public Object _${(0..it-1).join',_'};}"}
t0r0X
la source
2
Vous pouvez utiliser 100.times{}au lieu de (1..100).each{}.
Krzysztof Atłasik -
@yariash Merci pour cette remarque!
t0r0X
1

Julia, 77 octets

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

Lua, 128 106 octets

J'essaie toujours de trouver un moyen de travailler directement sur une valeur imprimée et non sur une chaîne.

Edit: Partiellement trouvé! J'ai toujours besoin d'une chaîne pour la partie "_0, _1 ...", mais c'est déjà mieux :).

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

Ancienne solution de 128 octets

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
la source
1

Python 3, 111 109 105 octets

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

Ce n'est pas la chose la plus courte au monde, je ne fais que participer.

edit1: down 2 octets en supprimant 0,en premierrange

edit2: J'avais jeté inutilement intsur strplutôt que d'utiliser %i... Down to 105.

Issak
la source
Bienvenue, bon début! Si vous êtes intéressé, essayez range(i)à la place de range(0,i)ou puisque vous avez utilisé rangedeux fois, essayez plus r=rangetôt, puis référencez chaque appel avec juste r(comme dans les autres solutions Python).
Ray Toal
Ugh, j'ai oublié rangecommence à 0 par défaut. Down 2 octets, cependant, en ajoutant r=range;au début des résultats avec exactement le même nombre de caractères, j'ai déjà essayé! : D
Issak
Même commentaire que j'ai fait à Dair : ',_'.join(map(str,range(i)))c'est 7 octets plus court ici.
409_Conflict
1

Mathematica, 130 octets

{"class Tuple",ToString[#]," {public Object ",StringReplace[ToString[#-1&/@Range@#],{" "|"{" ->"_","}"->";}\n"}]}&/@Range[100]<>""
Un simmons
la source
Astuce: \npeut être remplacé par un caractère de nouvelle ligne littéral.
LegionMammal978
1

Scala, 85 octets

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

Java, 116

(pour la fonction impression uniquement - selon certains commentaires, cela est conforme aux règles)

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
la source
1

PHP, 112 octets

<?php for($i=0;$i<100;$i++){$m.=$i==0?'_'.$i:',_'.$i;echo 'class Tuple'.($i+1).' {public Object '.$m.';}<br/>';}
gumione
la source
Vous pouvez enregistrer quelques octets en passant écho à des guillemets doubles si possible:<?php for($i=0;$i<100;$i++){$m.=$i==0?"_$i":",_$i";echo 'class Tuple'.($i+1)." {public Object $m;}\n";}
Samsquanch
1
@Samsquanch Aussi, au lieu de echo 'class Tuple'.($i+1)." {public Object $m;}\n";, vous pouvez utiliser echo'class Tuple',$i+1," {public Object $m;}\n";, ce qui est 3 octets plus court. En outre, selon la méta, vous pouvez supprimer le <?phpet supposer que votre code sera exécuté avec php -r "code". En outre, vous pouvez faire for(;++$i<101;)echo"class Tuple$i {public Object ",$m=($m?"$m,":'')."_$i",";}\n";80 octets (vous devez remplacer le \npar une nouvelle ligne). Essayez-le ici: ideone.com/oOzKtP
Ismael Miguel
1

Sérieusement, 55 octets

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

Hexdump (réversible avec 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

Essayez-le en ligne!

Oui, cette nouvelle ligne est supposée être là.

Explication (nouvelle ligne remplacée par \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
la source
1

Japt, 52 octets

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

Le ?devrait être l'octet littéral 0x95. Testez-le en ligne!

Japt a:

  • syntaxe concise pour aider à raccourcir votre code.
  • compression des chaînes pour aider à le raccourcir encore plus.
  • beaucoup de bugs pour vous donner envie de jeter votre ordinateur par la fenêtre.

Je ne peux même pas utiliser un point-virgule dans la chaîne, car la fonction dans laquelle elle est enrobée veut tout renvoyer après le point-virgule. Cela ne devrait être que 46 octets:

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

Mais hélas, ce n'est pas le cas. Je verrai si je peux résoudre ces bugs dans les prochaines heures.

Comment ça marche

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
la source
Bah! Ninjaed par ~ 18 mois! Soit dit en passant, vous devez incrémenter le premier X.
Shaggy
1

Javascript, 112 110 octets

2 octets off merci @ 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
enlevé
la source
1
Je pense que vous pouvez remplacer ${i+1}par ${i++}et remplacer ${[...Array(i++)]par ${[...Array(i)].
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ. Merci, j'ai mis à jour avec++i
enlevé le
1

Groovy, 97 octets

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

Essayez-le en ligne!

Apostolos
la source
1
Vous pouvez utiliser 100. fois {} au lieu de (1..100) .each {}, ce qui économise 4 octets.
Krzysztof Atłasik -
Vous pouvez également omettre les accolades dans join ( join','), l' espace remove après println, et le remplacer .collect{}par*.with{}
Krzysztof Atłasik
1

Python 2, 96 octets

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

Merci @ DenkerAffe pour la suggestion d'utiliser lambda.

Merci @MathiasEttinger pour l' joinidée.

Dair
la source
2
Vous pouvez jouer au golf jusqu'à 111 octets si vous utilisez un lambda dans votre réduction-appel au lieu de définir une fonction pour cela:reduce(lambda x,y:'%s,_%s'%(x,y), r(i))
Denker
1
Ou utilisez-le ',_'.join(map(str,r(i)))pour supprimer 14 octets supplémentaires (ou 15, car vous avez laissé un espace supplémentaire dans votre reduce).
409_Conflict
1

C ++, 164 159 157 octets (155 seulement en fonction)

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

Ceci est un programme complet. Vous pouvez enregistrer 2 octets sous forme de fonction uniquement si vous remplacez int main()par void f().

Exécuter du code dans Ideone

Ungolfed, y compris l'expansion macro

#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
la source
Bienvenue dans Programming Puzzles & Code Golf! Belle première réponse! Sauf indication contraire dans le défi, vous pouvez toujours utiliser des fonctions plutôt que des programmes complets, ce qui vous permet de sauvegarder quelques octets. Vous devez toujours inclure iostream, car il en a besoin pour la sortie.
Denker
Vous pourriez aussi vouloir faire j=1dans votre boucle, donc ne pas avoir le if(j).
Ethiraric
@Ethiraric Mais bien sûr! Comment bâclé de moi. Je suppose que je me suis trop concentré sur l’idée de «ne pas oublier les ajouts en première ligne» et que j’ai fini par écrire cela trop littéralement.
Sendaran
@sendaran Ou peut-être même for(int j=0;++j<=i;)économiseriez-vous un octet de plus.
Ethiraric
@Ethiraric a fait cela et a supprimé un octet supplémentaire en extrayant des déclarations de variable, ce qui a permis une autre expression vide.
Sendaran