Generar 100 clases de Java Tuple

37

Escriba un script que escriba en la salida estándar, o el equivalente de su idioma, 100 líneas de código Java (válido) que comience con:

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 última línea debería comenzar con class Tuple100.

Este es el , por lo que gana el código más corto en bytes.

Ray Toal
fuente
66
¡Acepto el desafío! De hecho, ¡voy a hacer esto en Java!
Ashwin Gupta
¿Puedo escribir una función o tiene que ser un programa completo?
Ashwin Gupta
3
Soy nuevo en el sitio, así que solicité un script, pero he estado escuchando que es costumbre permitir funciones, y eso tiene mucho sentido para Java, para evitar public static void main(String[] args)dar definitivamente una función si lo desea.
Ray Toal
1
¡Excelente! Gracias Ray!
Ashwin Gupta
No es lo suficientemente pequeño, pero creo que este es un lugar perfecto para compartir mi ngenerador de tuplas que escribí en Java: github.com/kenzierocks/Tuplocity . ¡Genera tuplas totalmente genéricas!
Octavia Togami

Respuestas:

8

Jolf, 42 bytes

¿Recibo puntos de bonificación por vencer a Jelly con la mejor puntuación de la historia? Contiene elementos no imprimibles, por lo que puede probarlo en línea aquí . Reemplacé los no imprimibles con su respectivo índice alternativo para facilitar la lectura.

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

Explicación

‼Μ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
fuente
1
Supongo. ¿Es correcto en este sitio cambiar la respuesta aceptada si llega un nuevo puntaje más tarde?
Ray Toal
66
@RayToal Sí, es correcto e incluso sugerido hacerlo.
Conor O'Brien
¿Cuál es la codificación de caracteres para esto? Sé que los idiomas de golf frecuentemente usan su propia codificación, pero no puedo ver qué codificación podría estar usando Jolf. Me doy cuenta de que esto es viejo.
recursivo el
@recursive El griego ISO-8859-7, este: en.wikipedia.org/wiki/ISO/IEC_8859-7
Conor O'Brien
23

vim 56 54 pulsaciones de teclas

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

Como V es compatible con versiones anteriores, ¡puede probarlo en línea!

¡Esta es la tarea perfecta para vim! Podría jugarlo un poco más tarde. También tenga en cuenta que <c-a>significa Control-A, y cuenta como una pulsación de tecla.

Explicación:

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
fuente
1
Si cuenta Control-A como una pulsación de tecla, puede sustituir yypor Y.
seequ
1
@Seeq Jaja, me di cuenta de lo mismo y lo edité justo antes de ver tu comentario. ¡Grandes mentes piensan igual!
DJMcMayhem
Esto parece estar sucediendo class Tuple101, no class Tuple100como lo hace la pregunta.
numbermaniac
1
@numbermaniac Error simple off-by-one. ¡Gracias por señalar eso! Reparado ahora :)
DJMcMayhem
10

Jalea, 44 bytes

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

Mi primera respuesta de Jelly. Pruébalo en línea!

Lynn
fuente
¿Lo estoy haciendo mal o esto solo genera una lista gigante en lugar de una cadena?
Denker
@DenkerAffe ¡Parece estar funcionando ahora! Hubo un error temporal en Jelly. (Además, el enlace era a una versión anterior de mi solución, así que la actualicé).
Lynn
Agradable ... a partir de ahora es 9 bytes más corto que la solución CJam!
Ray Toal
8

Pyth, 53 50 48 bytes

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

Pruébalo en línea!

La iteración directa sobre el rango (1,100) y la construcción de la cadena de corrosión a partir de una cadena empaquetada a través del formateo.

Explicación

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

VS100 # Iterate sobre rango (1,100)
     %. "} SüÆðQ´Ó3Ô«% & a´4UçõÛ "# Desempaquete la cadena y formateela
                              [# Lista para formatear argumentos
                               N # Número de la tupla
                                j UN # Unir números de objeto ...
                                 ", _" # ... en el separador ", _"

La cadena desempaquetada es class Tuple%i {public Object _%s;}

Denker
fuente
Dos campos de golf: use en s[lugar de todos +. [hace una lista arbitraria de longitud y la sconcatena. Además, como quieres [1, 2, ... 100], no [0, 1, .. 99], utilizas VS100, y tampoco lo necesitarás h.
isaacg
@isaacg Gracias, no sabía sobre el Struco! :) Ya estaba dispuesto a deshacerme de todo ++++eso, sabía que había una mejor manera.
Denker
De nada. Por cierto, parece que has agregado un seguimiento "innecesariamente.
isaacg
1
@isaacg ¿Hay alguna razón j<str><int>no U?
lirtosiast
1
No en realidad no. Lo haré
isaacg
7

CoffeeScript, 86 84 bytes

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

Ver la solución en línea

Ray Toal
fuente
Bienvenido a PPCG! Solo para informarle que las ediciones que mejoran las respuestas generalmente están desaprobadas (y deben rechazarse si terminan en la cola de revisión). Por lo tanto, es más probable que las personas hagan comentarios con sugerencias, para que pueda revisarlas usted mismo. :) (En cuanto a los consejos reales, creo que no necesitas ni el espacio delante forni el siguiente in.)
Martin Ender
Funciona console.log"? (No sé guión de café, es un truco general.
Addison Crump
No, como en, quitar el espacio. : PI sé que existe, pero no sé si es una sintaxis válida.
Addison Crump
@VoteToClose Lo intenté antes (usando el transpilador en vivo en coffeescript.org y no funcionó).
Martin Ender
@VoteToClose Oh, lo siento, no vi eso. No. De alguna manera el espacio es requerido por la gramática, pero no está exactamente claro para mí por qué (todavía). El espacio importa mucho en CoffeeScript, por ejemplo, x? y:zes completamente diferente de x ? y:z. Puedes decir console.log?"hello"pero no console.log"hello". Espacio en blanco significativo. A veces agradable, a veces raro.
Ray Toal
7

Java, 160 , 125 bytes

Gracias a @DenkerAffe, @Denham Coote y @Mathias Ettinger por las mejoras.

Java escribiendo java (¡porque alguien tenía que hacerlo!)

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

Y la versión sin golf

void z(){
    String s = "_0";
    for(int i = 1 ;i < 101;){
        System.out.println("class Tuple" + (i++) + " {public Object "+ s + ";}");
        s += ",_" + i;
        }
    }
SoloKix
fuente
2
¡Bienvenido a Programming Puzzles & Code Golf! A menos que se indique lo contrario en el desafío, siempre puede usar funciones en lugar de programas completos. Por lo tanto, debe usar un Java8-lambda (que devuelve el resultado) aquí para guardar todas las public static void main...cosas.
Denker
44
Bienvenido a PPCG. Esta respuesta incluye una coma extra al final de las declaraciones de objetos ...class Tuple1 {public Object _0,;} class Tuple2 {public Object _0,_1,;}
Denham Coote
3
Puede guardar otros 3 bytes incrementando su contador de bucles en sysout (++ i) en lugar de (i + 1) y eliminando i++de la configuración del bucle for
Denham Coote
Debe comenzar su String s = "_0"para que pueda s += ",_" + iy guardar un byte. También resolverá el problema con el coma final. Tendrá que iniciar el bucle for pasando de 1menos a 101y podrá eliminar 4 bytes adicionales convirtiendo solo (i+1)en su mensaje de salida i. Obviamente, deberá imprimir antes de incrementar s.
409_Conflict
Gracias, he hecho todas estas cosas, y definitivamente voy a echar un vistazo a java8-lambda.
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 Gracias por señalar el error 0/1.

La consulta usa CONNECT BY CLAUSE de consulta jerárquica para generar 100 filas.

La pseudocolumna LEVEL contiene el número de fila de cada fila.

SYS_CONNECT_BY_PATH concatena el primer parámetro, el número de fila, de cada fila, y usa el segundo parámetro como separador.

Jeto
fuente
agregue alguna explicación
Eumel
Clever :) Esto comienza con en Object _1lugar de Object _0, por lo que tomará otros dos bytes ( -1). Sin embargo, _se puede agregar al carácter de en SYS_CONNECT_BY_PATHlugar de concatenar, reduciéndolo en dos de esos bytes nuevamente:REPLACE('class Tuple'||LEVEL||' {public Object'||SYS_CONNECT_BY_PATH(LEVEL-1,',_')||';}','t,_','t _')
Peter Lang
6

Lote, 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

Editar: guardado 10 bytes gracias a @Bob. Guardado 1 byte gracias a @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ.

Neil
fuente
3
Siempre me alegro mucho de ver el lote en el código de golf, también, en lugar de usar @ en todas partes, puede redirigir la salida para agregarla a un archivo llamado x y usarla como salida
Dennis van Gils
@DennisvanGils Lamentablemente, los comandos se repiten en la salida estándar.
Neil
Eliminado enabledelayedexpansionpor 117 bytes: gist.github.com/Elusive138/4cea555114a979954dcb : si no le importa que se cierre la ventana de la consola, puede guardar dos más eliminando el /bargumento de exit.
Bob
@Neil lol está bien, así que intenté ejecutarlo y ahora me doy cuenta de lo que hiciste. Muy inteligente.
Ashwin Gupta
Al principio, use@echo off
Elliot A.
5

Retina , 80 79 bytes

El recuento de bytes asume la codificación ISO 8859-1.

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

Pruébalo en línea!

Martin Ender
fuente
5

Powershell - 65 bytes

(Modificado en respuesta al comentario)

Todo el crédito a TimmyD

1..100|%{"class Tuple$_ {public Object _$(0..($_-1)-Join",_");}"}
a prueba de balas
fuente
¿Por qué el voto abajo? (Tenga en cuenta que esta es mi primera publicación, ¿no es una gran bienvenida?)
bulletprooffool
5

Perl 6 , 65 bytes

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

R - 199 132 123 118 bytes

Versión 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"))

Versión 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"))

Versión 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")

Versión 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
fuente
3
¡Bienvenido a Programming Puzzles & Code Golf! Como se trata de una competencia de código de golf, querrás que tu código sea lo más corto posible. Puede comenzar acortando los nombres de las variables a un solo carácter cada uno, eliminando espacios en blanco y utilizando =para la asignación en lugar de <-.
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.
No hay problema. :) Además, no necesita realizar un seguimiento de sus versiones en el cuerpo de la publicación, ya que se puede acceder al historial de revisiones a través del enlace que dice "editado hace X minutos".
Alex A.
(aunque puede ser útil para dar alguna indicación, ya sea en sus resúmenes de edición o en el puesto de lo que ha cambiado con cada revisión para que otros puedan aprender de su proceso de revisión)
quintopia
4

Ruby, 71 bytes

100.times{|i|puts"class Tuple#{i+1} {public Object _#{[*0..i]*',_'};}"}
daniero
fuente
2
TIL [*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);}

Mi primera vez aquí ¡Hola! Fui por una expresión lambda Java8 (también conocida como una función anónima).

Versión sin golf

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

Para usar esto realmente, como es habitual en Java8, debe asignarlo a una variable de (o convertirlo a) una interfaz funcional apropiada y luego llamar a su método; pero técnicamente, la función es solo la expresión lambda en sí misma, así que solo cuento eso.

También requiere un parámetro de entrada, lo que me ahorra un par de bytes, ya que puedo abusar de él como una variable local sin tener que especificar su tipo. No estoy seguro de si eso se considera trampa, pero para mí parece estar dentro de las reglas: solo vi que la gente dice que publicar una función está permitido, no cómo se debe invocar esa función. :) Y en realidad no lee el parámetro, por lo que la función sigue siendo autónoma; puede pasarle cualquier Cadena, o incluso nulo, y seguirá produciendo la salida correcta.

Y aquí está cómo usarlo:

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); 
    }
}
Bola De FuegoEstrella De Mar
fuente
3

Pitón 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

Pitón 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

Uso:

f()

Sin golf:

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

formadores:

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
fuente
En su respuesta de python2, la última línea parece estar incompleta: print f(3) da: 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 última línea es un resultado. Se imprime solo cuando lo ejecuta de forma interactiva.
pacholik
2

Groovy, 74 caracteres

"join ()" es inmejorable ... Nueva solución, gracias a @yariash

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

Solución anterior, 78 caracteres:

(1..100).each{println"class Tuple$it {public Object _${(0..it-1).join',_'};}"}
t0r0X
fuente
2
Puedes usar en 100.times{}lugar de (1..100).each{}.
Krzysztof Atłasik
@yariash Gracias por la pista!
t0r0X
1

Julia, 77 bytes

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

LUA, 128 106 Bytes

Todavía estoy tratando de encontrar una manera de trabajar directamente en un valor impreso, y no en una cadena.

Editar: ¡Lo encontré parcialmente! Todavía necesito una cadena para la parte "_0, _1 ...", pero ya es mejor :).

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

Solución antigua de 128 bytes

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

Sin golf

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

No es lo más corto del mundo, solo estoy participando.

edit1: abajo 2 bytes quitando 0,en primer lugarrange

edit2: Estaba lanzando innecesariamente inten strlugar de solo usar %i... Down to 105.

Issak
fuente
Bienvenido, buen comienzo! Si está interesado, intente range(i)en lugar de range(0,i)o como lo usó rangedos veces, intente r=rangetemprano y luego haga referencia a cada llamada con solo r(como en las otras soluciones de Python).
Ray Toal
Ugh, olvidé que rangecomienza en 0 por defecto. Sin embargo, hasta 2 bytes, agregando r=range;al principio los resultados en exactamente el mismo recuento de caracteres, ¡lo he intentado! : D
Issak
El mismo comentario que le hice a Dair : aquí ',_'.join(map(str,range(i)))es 7 bytes más corto.
409_Conflict
1

Mathematica, 130 Bytes

{"class Tuple",ToString[#]," {public Object ",StringReplace[ToString[#-1&/@Range@#],{" "|"{" ->"_","}"->";}\n"}]}&/@Range[100]<>""
Un simmons
fuente
Sugerencia: \nse puede reemplazar con un carácter de nueva línea literal.
LegionMammal978
1

Scala, 85 bytes

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

Java, 116

(solo para la función de impresión; de acuerdo con algunos comentarios, esto está en línea con las reglas)

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
fuente
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
fuente
Puede guardar algunos bytes cambiando eco a comillas dobles siempre que sea posible:<?php for($i=0;$i<100;$i++){$m.=$i==0?"_$i":",_$i";echo 'class Tuple'.($i+1)." {public Object $m;}\n";}
Samsquanch
1
@Samsquanch Además, en lugar de echo 'class Tuple'.($i+1)." {public Object $m;}\n";, puede usar echo'class Tuple',$i+1," {public Object $m;}\n";, que es 3 bytes más corto. Además, de acuerdo con el meta, puede eliminar el <?phpy asumir que su código se ejecutará con php -r "code". Además, puede hacerlo for(;++$i<101;)echo"class Tuple$i {public Object ",$m=($m?"$m,":'')."_$i",";}\n";por 80 bytes (necesita reemplazar el \ncon una nueva línea real). Pruébelo aquí: ideone.com/oOzKtP
Ismael Miguel
1

En serio, 55 bytes

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

Hexdump (reversible con 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

Pruébalo en línea!

Sí, se supone que esa nueva línea está allí.

Explicación (nueva línea reemplazada por \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
fuente
1

Japt, 52 bytes

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

El ?debería ser el byte literal 0x95. ¡Pruébelo en línea!

Japt tiene:

  • sintaxis concisa para ayudar a acortar su código.
  • compresión de cuerdas para ayudar a acortarlo aún más.
  • muchos errores para que quieras tirar tu computadora por la ventana.

Ni siquiera puedo usar un punto y coma en la cadena porque la función en la que está envuelta quiere devolver todo después del punto y coma. Esto solo debe ser de 46 bytes:

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

Pero, por desgracia, no lo es. Veré si puedo solucionar estos errores en las próximas dos horas.

Cómo funciona

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.
ETHproducciones
fuente
¡Bah! Ninjaed por ~ 18 meses! Necesitas incrementar el primero X, por cierto.
Shaggy
1

Javascript, 112 110 bytes

2 bytes de descuento gracias @ CᴏɴᴏʀO'Bʀɪᴇɴ .

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

Sin golf:

_=>                                         // 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
remoto
fuente
1
Creo que puedes reemplazar ${i+1}con ${i++}y reemplazar ${[...Array(i++)]con ${[...Array(i)].
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ. Gracias, he actualizado con++i
eliminado
1

Groovy, 97 bytes

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

Pruébalo en línea!

Apostolos
fuente
1
Puede usar 100.times {} en lugar de (1..100) .each {}, lo que ahorra 4 bytes.
Krzysztof Atłasik
También puede omitir llaves en join ( join','), eliminar espacio después de println y reemplazar .collect{}con*.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))))

Gracias @DenkerAffe por la sugerencia de usar lambda.

Gracias @MathiasEttinger por la joinidea.

Dair
fuente
2
Puede reducir esto a 111 bytes si usa un lambda en su llamada reducida en lugar de definir una función para esto:reduce(lambda x,y:'%s,_%s'%(x,y), r(i))
Denker
1
O use ',_'.join(map(str,r(i)))para una eliminación adicional de 14 bytes (o 15, ya que dejó un espacio adicional en su reduce).
409_Conflict
1

C ++, 164 159 157 bytes (155 como función solamente)

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

Este es un programa completo. Puede guardar 2 bytes en forma de función solo si lo reemplaza int main()con void f().

Ejecutar código en Ideone

Sin golf, incluida la expansión 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
fuente
¡Bienvenido a Programming Puzzles & Code Golf! Buena primera respuesta! A menos que se indique lo contrario en el desafío, siempre puede usar funciones en lugar de programas completos, por lo que puede guardar algunos bytes al hacerlo. Aún debe incluir iostream, ya que es necesario para la salida.
Denker
También es posible que desee hacer j=1en su bucle for, por lo tanto, no tener el if(j).
Ethiraric
@Ethiraric ¡Pero por supuesto! Qué descuidado de mi parte. Supongo que me concentré demasiado en la idea "recuerde omitir las adiciones en la primera línea" y terminé escribiendo eso demasiado literalmente.
sendaran
@sendaran O incluso podría for(int j=0;++j<=i;)ahorrar un byte más.
Ethiraric
@Ethiraric hizo eso y eliminó un byte extra extrayendo declaraciones de variables, lo que permitió otra expresión vacía.
sendaran