Wygeneruj 100 klas Java Tuple


37

Napisz skrypt zapisujący na standardowym wyjściu lub w ekwiwalencie Twojego języka 100 wierszy (prawidłowego) kodu Java, który zaczyna się od:

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

Ostatnia linia powinna zaczynać się od class Tuple100.

To jest , więc wygrywa najkrótszy kod w bajtach!


6
Akceptuję wyzwanie! W rzeczywistości zamierzam to zrobić w Javie!
Ashwin Gupta

Czy mogę napisać funkcję, czy musi to być pełny program?
Ashwin Gupta

3
Jestem nowy na stronie, więc poprosiłem o skrypt, ale słyszałem, że zwyczajowo zezwala się na funkcje, i to ma wiele sensu w Javie, aby tego uniknąć, public static void main(String[] args)więc zdecydowanie daj funkcję, jeśli chcesz.
Ray Toal

1
Świetny! Dziękuję Ray!
Ashwin Gupta

Nie jest to wystarczająco małe, ale myślę, że jest to idealne miejsce do dzielenia się moim ngeneratorem -tuple napisanym w Javie: github.com/kenzierocks/Tuplocity . Generuje w pełni ogólne krotki!
Octavia Togami,

Odpowiedzi:


8

Jolf, 42 bajty

Czy dostaję punkty bonusowe za pokonanie Jelly z najlepszym wynikiem w historii? Zawiera materiały niedrukowalne, więc możesz spróbować tutaj online . Zastąpiłem te niedrukowalne odpowiednim indeksem alt dla czytelności.

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

Wyjaśnienie

‼Μ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
Przypuszczam. Czy na tej stronie właściwe jest zmienianie zaakceptowanej odpowiedzi, jeśli nowy wynik pojawi się później?
Ray Toal

6
@RayToal Tak, jest to właściwe, a nawet sugeruje to zrobić.
Conor O'Brien

Jakie jest to kodowanie znaków? Wiem, że języki gry w golfa często używają własnego kodowania, ale nie widzę, jakiego kodowania mógłby użyć Jolf. Zdaję sobie sprawę, że to jest stare.
rekurencyjny

@recursive Grecki ISO-8859-7, ten: en.wikipedia.org/wiki/ISO/IEC_8859-7
Conor O'Brien

23

vim 56 54 naciśnięcia klawiszy

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

Ponieważ V jest wstecznie kompatybilny, możesz wypróbować online!

To idealne zadanie dla vima! Mogę zagrać w golfa trochę później. Zauważ też, że <c-a>oznacza to Control-A i liczy się jako jedno naciśnięcie klawisza.

Wyjaśnienie:

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
Jeśli liczyć Control-A jako jednego naciśnięcia klawisza, można zastąpić yyprzez Y.
patrz

1
@ Patrz Haha, właśnie zdałem sobie sprawę z tego samego i zredagowałem to tuż przed tym, jak zobaczyłem twój komentarz. Wielkie umysły myślą podobnie!
DJMcMayhem

Wygląda na to class Tuple101, że class Tuple100tak nie będzie , jak zadaje pytanie.
numbermaniac

1
@numbermaniac Prosty błąd off-by-one. Dzięki za zwrócenie na to uwagi! Naprawiono teraz :)
DJMcMayhem

10

Galaretka, 44 bajty

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

Moja pierwsza galaretka odpowiedź. Wypróbuj online!


Czy robię to źle, czy to po prostu generuje gigantyczną listę zamiast łańcucha?
Denker

@DenkerAffe Wygląda na to, że teraz działa! Wystąpił tymczasowy błąd w Jelly. (Poza tym link był do starej wersji mojego rozwiązania, więc zaktualizowałem ją.)
Lynn

Fajnie ... na razie jest o 9 bajtów krótszy niż rozwiązanie CJam!
Ray Toal,

8

Pyth, 53 50 48 bajtów

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

Wypróbuj online!

Prosta iteracja poza zakresem (1100) i budowanie odpowiedniego ciągu znaków z zapakowanego ciągu poprzez jego sformatowanie.

Wyjaśnienie

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

VS100 # Iterate over range (1100)
     %. "} SüÆðQ´Ó3Ô«% & a´4UçõÛ "# Rozpakuj ciąg i sformatuj go
                              [# Lista do formatowania argumentów
                               N # Numer krotki
                                j UN # Dołącz numery obiektów ...
                                 ", _" # ... na separatorze ", _"

Rozpakowany ciąg to class Tuple%i {public Object _%s;}


Dwa s[pola golfowe: użyj zamiast nich wszystkich +. [tworzy dowolną listę długości i skonkatenuje ją. Ponadto, ponieważ chcesz [1, 2, ... 100], nie [0, 1, .. 99]korzystaj VS100, i nie będziesz też potrzebować h.
isaacg

@isaacg Dzięki, nie wiedziałem o S-tricku! :) Siedziałem już na pozbyciu się wszystkiego ++++, wiedziałem, że jest lepszy sposób.
Denker

Nie ma za co. Nawiasem mówiąc, wydajesz się, że dodałeś "niepotrzebnie końcowe .
isaacg

1
@isaacg Czy jest jakiś powód, j<str><int>nie U?
lirtosiast

1
Nie, nie bardzo. Zrobi.
isaacg

7

CoffeeScript, 86 84 bajtów

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

Zobacz rozwiązanie online


Witamy w PPCG! Po prostu, aby poinformować Cię, że zmiany, które poprawiają odpowiedzi, są zwykle marszczone (i powinny zostać odrzucone, jeśli trafią do kolejki recenzji). Dlatego bardziej prawdopodobne jest, że ludzie będą komentować sugestie, abyś mógł je przejrzeć samodzielnie. :) (Co do faktycznych wskazówek, myślę, że nie potrzebujesz ani miejsca przed forani po nim in.)
Martin Ender

Czy console.log"działa (Nie znam scenariusza kawowego, to ogólna sztuczka.
Addison Crump

Nie, jak w, usuwanie przestrzeni. : PI wiem, że istnieje, po prostu nie wiem, czy to jest poprawna składnia.
Addison Crump

@VoteToClose Próbowałem tego wcześniej (używając transpilatora na żywo na coffeescript.org i to nie działało).
Martin Ender

@VoteToClose Oh przepraszam, nie widziałem tego. Nie. W jakiś sposób przestrzeń jest wymagana przez gramatykę, ale nie jest do końca jasne, dlaczego (jeszcze). Na przykład odstępy mają duże znaczenie w CoffeeScript, x? y:zsą zupełnie inne niż x ? y:z. Możesz powiedzieć, console.log?"hello"ale nie console.log"hello". Znaczące białe znaki. Czasami miło, czasem dziwnie.
Ray Toal,

7

Java, 160 , 125 bajtów

Dzięki @DenkerAffe, @Denham Coote i @Mathias Ettinger za ulepszenia.

Java Java Writing (bo ktoś musiał!)

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

I wersja bez golfa

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

2
Witamy w Programowaniu Puzzle i Code Golf! O ile wyzwanie nie stanowi inaczej, możesz zawsze korzystać z funkcji zamiast pełnych programów. Dlatego powinieneś użyć Java8-lambda (która zwraca wynik) tutaj, aby ocalić wszystkie public static void main...rzeczy.
Denker

4
Witamy w PPCG. Ta odpowiedź zawiera dodatkowy przecinek na końcu deklaracji obiektu ...class Tuple1 {public Object _0,;} class Tuple2 {public Object _0,_1,;}
Denham Coote

3
Możesz zapisać kolejne 3 bajty, zwiększając licznik pętli w sysout (++ i) zamiast (i + 1) i usuwając i++z konfiguracji pętli for
Denham Coote

Powinieneś zacząć swój String s = "_0", abyś mógł s += ",_" + ii zapisał bajt. Rozwiąże również problem ze śpiączką końcową. Będziesz musiał uruchomić pętlę for od 1mniejszej niż 101i będziesz mógł usunąć dodatkowe 4 bajty, konwertując (i+1)tylko komunikat wyjściowy na i. Oczywiście, trzeba wydrukować przed inkrementacji s.
409_Conflict

Dzięki, zrobiłem te wszystkie rzeczy i na pewno będę miał ochotę na java8-lambda.
SoloKix,

6

Oracle SQL 9.2, 138 137 bajtów

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

@ Peter Dzięki za wskazanie błędu 0/1.

Kwerenda wykorzystuje zapytanie hierarchiczne CONNECT BY CLAUSE do wygenerowania 100 wierszy.

Pseudokolumna LEVEL zawiera numer każdego wiersza.

SYS_CONNECT_BY_PATH konkatenuje pierwszy parametr, numer wiersza każdego wiersza i używa drugiego parametru jako separatora.


dodaj wyjaśnienie
Eumel

Clever :) To zaczyna się od Object _1zamiast Object _0, więc zajmie to kolejne dwa bajty ( -1). Jednakże, _może być dodawany do char z SYS_CONNECT_BY_PATHzamiast złączenie, zmniejszając ją o dwa bajty te znowu:REPLACE('class Tuple'||LEVEL||' {public Object'||SYS_CONNECT_BY_PATH(LEVEL-1,',_')||';}','t,_','t _')
Peter Lang

6

Partia, 128 bajtów

@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

Edycja: Zapisano 10 bajtów dzięki @Bob. Zapisano 1 bajt dzięki @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ.


3
Zawsze bardzo się cieszę, widząc partię kodu golfa, a zamiast @ wszędzie można przekierować dane wyjściowe w celu dołączenia do pliku o nazwie x i użyć go jako danych wyjściowych
Dennis van Gils

@DennisvanGils Niestety polecenia odbijają się echem na standardowym wyjściu.
Neil

Wyeliminowano enabledelayedexpansiondla 117 bajtów: gist.github.com/Elusive138/4cea555114a979954dcb - jeśli nie przeszkadza ci zamknięcie okna konsoli, możesz zapisać dwa kolejne, usuwając /bargument z exit.
Bob

@Neil lol dobrze, więc po prostu próbowałem go uruchomić i teraz rozumiem, co zrobiłeś. Bardzo mądry.
Ashwin Gupta

Na początku użyj@echo off
Elliot A.


5

PowerShell - 65 bajtów

(Poprawiony w odpowiedzi na komentarz)

Cały kredyt dla TimmyD

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

Po co głosować? (Uwaga: to mój pierwszy post, a nie wspaniałe powitanie?)
bulletprooffool,


4

R - 199 132 123 118 bajtów

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

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

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

Wersja 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
Witamy w Programowaniu Puzzle i Code Golf! Ponieważ są to zawody w golfa kodowym, będziesz chciał, aby Twój kod był jak najkrótszy. Możesz zacząć od skrócenia nazw zmiennych do jednego znaku, usunięcia białych znaków i użycia =zamiast przypisania <-.
Alex A.

144 bajty: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.

Nie ma problemu. :) Ponadto nie musisz śledzić swoich wersji w treści postu, ponieważ historia zmian jest dostępna za pośrednictwem linku „edytowano X minut temu”.
Alex A.

(chociaż może warto podać jakieś wskazówki, w podsumowaniach edycji lub w poście, co zmieniłeś w każdej wersji, aby inni mogli dowiedzieć się z procesu weryfikacji)
quintopia

4

Rubinowy, 71 bajtów

100.times{|i|puts"class Tuple#{i+1} {public Object _#{[*0..i]*',_'};}"}

2
TIL [*0..i]*',_'wow
Ray Toal

4

Java, 103 bajty

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

Mój pierwszy raz tutaj. Cześć! Wybrałem wyrażenie lambda Java8 (inaczej anonimowa funkcja).

Wersja bez golfa

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

Aby faktycznie tego użyć, jak zwykle w Javie 8, musisz przypisać ją do zmiennej odpowiedniego (lub rzutować) odpowiedniego interfejsu funkcjonalnego, a następnie wywołać jej metodę; ale technicznie rzecz biorąc, funkcja jest tylko samym wyrażeniem lambda, więc liczę tylko to.

Wymaga również parametru wejściowego, który oszczędza mi kilka bajtów, ponieważ mogę nadużywać go jako zmiennej lokalnej bez konieczności określania jego typu. Nie jestem pewien, czy uważa się to za oszustwo, ale wydaje mi się, że jest to zgodne z regułami: widziałem tylko, że ludzie twierdzą, że publikowanie funkcji jest dozwolone, a nie jak należy ją wywoływać. :) I tak naprawdę nie odczytuje parametru, więc funkcja jest nadal samodzielna; możesz przekazać dowolny ciąg znaków, a nawet zerowy, i nadal będzie generować poprawny wynik.

A oto jak go użyć:

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

Stosowanie:

f()

Nie golfowany:

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

dawni:

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

W twojej python2 ostatnia linia wydaje się niekompletna: print f(3) daje: 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 Ostatnia linia jest wynikiem. Jest drukowany tylko wtedy, gdy uruchamiasz go interaktywnie.
pacholik


2

Groovy, 74 znaki

„join ()” jest nie do pobicia ... Nowe rozwiązanie, dzięki @yariash

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

Stare rozwiązanie, 78 znaków:

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

2
Możesz użyć 100.times{}zamiast (1..100).each{}.
Krzysztof Atłasik

@yariash Dzięki za podpowiedź!
t0r0X

1

Julia, 77 bajtów

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

1

Lua, 128 106 bajtów

Nadal próbuję znaleźć sposób na bezpośrednią pracę na wartości drukowanej, a nie na łańcuchu.

Edycja: Częściowo go znalazłem! Nadal potrzebuję łańcucha dla części „_0, _1 ...”, ale już jest lepiej :).

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

Stare rozwiązanie 128 bajtów

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

Bez golfa

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 bajtów

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

To nie jest najkrótsza rzecz na świecie, po prostu uczestniczę.

edit1: zmniejsz o 2 bajty, usuwając 0,najpierwrange

edit2: Niepotrzebnie przesylałem intna strzamiast używać tylko %i... Do 105.


Witamy, dobry początek! Jeśli jesteś zainteresowany, spróbuj range(i)zamiast range(0,i)lub ponieważ używałeś go rangedwukrotnie, spróbuj r=rangewcześniej, a następnie odwołaj się do każdego wywołania za pomocą just r(jak w innych rozwiązaniach Python).
Ray Toal

Ugh, zapomniałem rangezaczyna domyślnie od 0. Jednak r=range;zmniejszenie o 2 bajty, dodając na początku dokładnie taką samą liczbę znaków, próbowałem tego! : D
Issak

Ten sam komentarz, co ja zrobiłem Dairowi : ',_'.join(map(str,range(i)))jest tutaj o 7 bajtów krótszy.
409_Conflict

1

Mathematica, 130 bajtów

{"class Tuple",ToString[#]," {public Object ",StringReplace[ToString[#-1&/@Range@#],{" "|"{" ->"_","}"->";}\n"}]}&/@Range[100]<>""

Wskazówka: \nmożna zastąpić dosłownie znakiem nowej linii.
LegionMammal978

1

Scala, 85 bajtów

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

1

Java, 116

(tylko dla funkcji drukowania - według niektórych komentarzy jest to zgodne z regułami)

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 bajtów

<?php for($i=0;$i<100;$i++){$m.=$i==0?'_'.$i:',_'.$i;echo 'class Tuple'.($i+1).' {public Object '.$m.';}<br/>';}

Możesz zaoszczędzić kilka bajtów, przełączając echo na podwójne cudzysłowy tam, gdzie to możliwe:<?php for($i=0;$i<100;$i++){$m.=$i==0?"_$i":",_$i";echo 'class Tuple'.($i+1)." {public Object $m;}\n";}
Samsquanch

1
@Samsquanch Ponadto, zamiast echo 'class Tuple'.($i+1)." {public Object $m;}\n";można użyć echo'class Tuple',$i+1," {public Object $m;}\n";, który wynosi 3 bajty krótszy. Ponadto, zgodnie z meta, możesz usunąć <?phpi założyć, że twój kod zostanie wykonany za pomocą php -r "code". Możesz także zrobić for(;++$i<101;)echo"class Tuple$i {public Object ",$m=($m?"$m,":'')."_$i",";}\n";dla 80 bajtów (musisz zastąpić \nprawdziwą nową linią). Wypróbuj tutaj: ideone.com/oOzKtP
Ismael Miguel

1

Poważnie, 55 bajtów

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

Hexdump (odwracalny z 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

Wypróbuj online!

Tak, ta nowa linia powinna tam być.

Objaśnienie (nowa linia zastąpiona przez \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 bajty

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

?Powinny być dosłowne bajt 0x95. Przetestuj online!

Japt ma:

  • zwięzła składnia, która pomoże skrócić kod.
  • kompresja ciągów, aby jeszcze bardziej ją skrócić.
  • wiele błędów, które powodują, że chcesz wyrzucić komputer za okno.

Nie mogę nawet użyć średnika w ciągu, ponieważ funkcja, w której jest zawinięty, chce zwrócić wszystko po średniku. Powinien to być tylko 46 bajtów:

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

Ale niestety tak nie jest. Zobaczę, czy uda mi się naprawić te błędy w ciągu następnych kilku godzin.

Jak to działa

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 przez ~ 18 miesięcy! Nawiasem Xmówiąc, musisz zwiększyć pierwszy .
Shaggy

1

JavaScript, 112 110 bajtów

2 bajty wyłączone dzięki @ CᴏɴᴏʀO'Bʀɪᴇɴ .

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

Nie golfowany:

_=>                                         // 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
Myślę, że można zastąpić ${i+1}z ${i++}i zamienić ${[...Array(i++)]z ${[...Array(i)].
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ. Dzięki, zaktualizowałem++i
usunąłem

1

Groovy, 97 bajtów

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

Wypróbuj online!


1
Możesz użyć 100. razy {} zamiast (1..100) .each {}, co oszczędza 4 bajty.
Krzysztof Atłasik

Można również pominąć nawiasy w join ( join','), przestrzeń usunięcia po println i wymienić .collect{}z*.with{}
Krzysztof Atłasik

1

Python 2, 96 bajtów

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

Dzięki @DenkerAffe za sugestię użycia lambda.

Dzięki @MathiasEttinger za joinpomysł.


2
Możesz zagrać w golfa do 111 bajtów, jeśli użyjesz lambda w funkcji call-call zamiast definiowania funkcji:reduce(lambda x,y:'%s,_%s'%(x,y), r(i))
Denker

1
Lub użyj ',_'.join(map(str,r(i)))do usunięcia dodatkowych 14 bajtów (lub 15, ponieważ zostawiłeś dodatkowe miejsce reduce).
409_Conflict

1

C ++, 164 159 157 bajtów (155 tylko jako funkcja)

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

To jest pełny program. Możesz zapisać 2 bajty tylko w formie funkcjonalnej, jeśli zastąpisz int main()je void f().

Uruchom kod w Ideone

Niegolfowany, w tym ekspansja makr

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

Witamy w Programowaniu Puzzle i Code Golf! Ładna pierwsza odpowiedź! O ile wyzwanie nie stanowi inaczej, zawsze możesz używać funkcji zamiast pełnych programów, dzięki czemu możesz zaoszczędzić kilka bajtów. Nadal musisz dołączyć iostream tho, ponieważ jest on potrzebny do wyjścia.
Denker

Możesz także chcieć zrobić to j=1w swojej pętli for, a więc nie masz if(j).
Ethiraric

@Ethiraric Ale oczywiście! Jak niechlujnie ze mnie. Wydaje mi się, że zbytnio skupiłem się na pomyśle „pamiętaj, aby pominąć dodawanie w pierwszym wierszu” i ostatecznie napisałem to zbyt dosłownie.
sendaran

@sendaran Lub nawet może for(int j=0;++j<=i;)zaoszczędzić jeszcze jeden bajt.
Ethiraric

@Ethiraric Zrobił to i zgolił dodatkowy bajt poprzez wyodrębnienie deklaracji zmiennych, co umożliwiło kolejne puste wyrażenie.
sendaran
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.