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!


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)

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.

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!


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


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


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

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.


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ᴏʟғᴇʀ.


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

Powershell - 65 octets

(Modifié en réponse au commentaire)

Tout crédit à TimmyD

1..100|%{"class Tuple$_ {public Object _$(0..($_-1)-Join",_");}"}

Pourquoi le vote bas? (Veuillez noter que ceci est mon tout premier message, pas un très bon accueil?)
bulletprooffool


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

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]*',_'};}"}

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

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)))

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

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',_'};}"}

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

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

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.


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]<>""

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

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

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

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

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.

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

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!


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.


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.