Hasilkan 100 kelas Java Tuple


37

Tulis skrip yang menulis ke output standar, atau setara dengan bahasa Anda, 100 baris kode Java (valid) yang dimulai dengan:

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

Baris terakhir harus dimulai dengan class Tuple100.

Ini adalah , jadi kode terpendek dalam byte menang!


6
Saya menerima tantangan! Sebenarnya, saya akan melakukan ini di Jawa!
Ashwin Gupta

Bisakah saya menulis fungsi atau harus program penuh?
Ashwin Gupta

3
Saya masih baru di situs ini, jadi saya minta skrip, tapi saya sudah mendengar bahwa itu adalah kebiasaan untuk mengizinkan fungsi, dan itu masuk akal bagi Java, untuk menghindari public static void main(String[] args)jadi pasti berikan fungsi jika Anda mau.
Ray Toal

1
Besar! Ray terima kasih!
Ashwin Gupta

Tidak cukup kecil, tapi saya pikir ini adalah tempat yang tepat untuk berbagi ngenerator -tuple saya yang saya tulis di Jawa: github.com/kenzierocks/Tuplocity . Ini menghasilkan tupel sepenuhnya generik!
Octavia Togami

Jawaban:


8

Jolf, 42 byte

Apakah saya mendapatkan poin bonus untuk mengalahkan Jelly dengan skor terbaik yang pernah ada? Berisi yang tidak diinginkan, jadi Anda mungkin ingin mencobanya secara online di sini . Saya mengganti yang tidak dicetak dengan indeks alt masing-masing untuk dibaca.

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

Penjelasan

‼Μ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
Saya seharusnya. Apakah pantas di situs ini untuk mengubah jawaban yang diterima jika skor baru masuk nanti?
Ray Toal

6
@ RayToal Ya, sudah sepantasnya dan bahkan disarankan untuk melakukannya.
Conor O'Brien

Untuk apa pengkodean karakter ini? Saya tahu bahasa golf sering menggunakan encoding mereka sendiri, tetapi saya tidak bisa melihat mana yang bisa digunakan oleh encoding jolf. Saya menyadari ini sudah tua.
rekursif

@recursive Bahasa Yunani ISO-8859-7, yang ini: en.wikipedia.org/wiki/ISO/IEC_8859-7
Conor O'Brien

23

vim 56 54 penekanan tombol

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

Karena V kompatibel dari belakang, Anda dapat mencobanya secara online!

Ini adalah tugas yang sempurna untuk vim! Saya mungkin golf sedikit lebih lama. Perhatikan juga bahwa itu <c-a>berarti Control-A, dan itu dihitung sebagai satu keystroke.

Penjelasan:

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
Jika Anda menghitung Control-A sebagai satu penekanan tombol, Anda bisa menggantinya yydengan Y.
seequ

1
@Seeq Haha, saya baru menyadari hal yang sama dan mengeditnya tepat sebelum saya melihat komentar Anda. Pemikir hebat berfikir yang sama!
DJMcMayhem

Sepertinya ini akan terjadi class Tuple101, bukan class Tuple100seperti pertanyaannya.
numbermaniac

1
@numbermaniac Kesalahan sederhana satu per satu. Terima kasih telah menunjukkan itu! Diperbaiki sekarang :)
DJMcMayhem

10

Jelly, 44 byte

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

Jawaban Jelly pertamaku. Cobalah online!


Apakah saya salah atau apakah ini hanya menghasilkan daftar raksasa, bukan string?
Denker

@DenkerAffe Tampaknya sudah berfungsi sekarang! Ada bug sementara di Jelly. (Juga, tautannya adalah versi lama dari solusi saya, jadi saya telah memperbaruinya.)
Lynn

Bagus ... sampai sekarang ini 9 byte lebih pendek dari solusi CJam!
Ray Toal

8

Pyth, 53 50 48 byte

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

Cobalah online!

Iterasi langsung lebih dari rentang (1.100) dan membangun string yang sesuai dari string yang dikemas melalui memformatnya.

Penjelasan

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

VS100 # Iterate over range (1.100)
     %. "} SüÆðQ´Ó3Ô«% & a´4UçõÛ "# Buka kemasan string dan format itu
                              [# Daftar untuk memformat argumen
                               N # Jumlah Tuple
                                j UN # Gabung nomor Objek ...
                                 ", _" # ... di pemisah ", _"

String yang belum dibuka adalah class Tuple%i {public Object _%s;}


Dua golf: Gunakan s[alih-alih semua itu +. [membuat daftar panjang yang sewenang-wenang, dan smenggabungkannya. Juga, karena Anda ingin [1, 2, ... 100], bukan [0, 1, .. 99], gunakan VS100, dan Anda tidak akan membutuhkan keduanya h.
isaacg

@isaacg Terima kasih, tidak tahu tentang Strik-! :) Sudah duduk untuk menyingkirkan semua ++++, saya tahu ada cara yang lebih baik.
Denker

Sama-sama. Ngomong-ngomong, Anda sepertinya menambahkan trailing secara "tidak perlu.
isaacg

1
@isaacg Apakah ada alasan j<str><int>tidak U?
lirtosiast

1
Tidak terlalu. Akan melakukan.
isaacg

7

CoffeeScript, 86 84 byte

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

Lihat solusinya secara online


Selamat datang di PPCG! Hanya untuk memberi tahu Anda bahwa pengeditan yang meningkatkan jawaban umumnya tidak disukai (dan harus ditolak jika berakhir di antrian peninjauan). Jadi, kemungkinan besar orang akan berkomentar dengan saran, sehingga Anda dapat memeriksanya sendiri. :) (Adapun tips yang sebenarnya saya pikir Anda tidak perlu ruang di depan foratau yang setelah in.)
Martin Ender

Apakah console.log"bekerja? (Tidak tahu skrip kopi, itu tipuan umum.
Addison Crump

Tidak, seperti pada, menghapus ruang. : PI tahu itu ada, saya hanya tidak tahu apakah itu sintaks yang valid.
Addison Crump

@VoteToClose Saya sudah mencoba sebelumnya (menggunakan live transpiler di coffeescript.org dan tidak berhasil).
Martin Ender

@VoteToTutup Oh maaf tidak melihat itu. Tidak. Bagaimanapun ruang dibutuhkan oleh tata bahasa, tetapi tidak jelas bagi saya mengapa (belum). Penempatan banyak hal dalam CoffeeScript, misalnya, x? y:zsama sekali berbeda dari x ? y:z. Bisa dibilang console.log?"hello"tidak console.log"hello". Ruang putih yang signifikan. Terkadang menyenangkan, terkadang aneh.
Ray Toal

7

Java, 160 , 125 Bytes

Terima kasih kepada @DenkerAffe, @Denham Coote dan @Mathias Ettinger untuk peningkatannya.

Java menulis java (karena seseorang harus!)

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

Dan versi un-golf

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

2
Selamat Datang di Programming Puzzles & Code Golf! Kecuali dinyatakan sebaliknya dalam tantangan, Anda dapat selalu menggunakan fungsi alih-alih program penuh. Jadi Anda harus menggunakan Java8-lambda (yang mengembalikan hasilnya) di sini untuk menghemat semua public static void main...barang.
Denker

4
Selamat datang di PPCG. Jawaban ini termasuk koma tambahan di akhir deklarasi Object ...class Tuple1 {public Object _0,;} class Tuple2 {public Object _0,_1,;}
Denham Coote

3
Anda dapat menyimpan 3 byte lebih lanjut dengan menambahkan penghitung lingkaran Anda di sysout (++ i) alih-alih (i +1) dan menghapus i++dari pengaturan loop
Denham Coote

Anda harus memulai String s = "_0"sehingga Anda bisa s += ",_" + idan menyimpan satu byte. Ini juga akan menyelesaikan masalah dengan koma yang tertinggal. Anda harus memulai perulangan for dari 1kurang dari 101dan akan dapat menghapus tambahan 4 byte dengan mengonversi (i+1)pesan keluaran Anda menjadi hanya i. Jelas, Anda harus mencetak sebelum menambah s.
409_Konflik

Terima kasih, telah melakukan semua hal ini, dan saya pasti akan melihat 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 Terima kasih telah menunjukkan kesalahan 0/1.

Kueri menggunakan CONNECT BY CLAUSE dari permintaan hierarkis untuk menghasilkan 100 baris.

Pseudocolumn LEVEL berisi nomor baris setiap baris.

SYS_CONNECT_BY_PATH menggabungkan parameter pertama, nomor baris, setiap baris, dan menggunakan parameter kedua sebagai pemisah.


tolong tambahkan beberapa penjelasan
Eumel

Pintar :) Ini dimulai dengan Object _1alih - alih Object _0, sehingga akan memakan waktu dua byte ( -1). Namun, _dapat ditambahkan ke char SYS_CONNECT_BY_PATHdaripada concatenating, menguranginya dengan dua byte lagi:REPLACE('class Tuple'||LEVEL||' {public Object'||SYS_CONNECT_BY_PATH(LEVEL-1,',_')||';}','t,_','t _')
Peter Lang

6

Batch, 128 byte

@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

Sunting: Disimpan 10 byte berkat @Bob. Disimpan 1 byte berkat @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ.


3
Saya selalu sangat senang melihat batch pada kode golf, juga, alih-alih menggunakan @ di mana-mana, Anda bisa mengarahkan output untuk menambahkan file bernama x dan menggunakannya sebagai output
Dennis van Gils

@DennisvanGils Perintah-perintah Sedihnya digaungkan ke output standar.
Neil

Dieliminasi enabledelayedexpansionuntuk 117 byte: gist.github.com/Elusive138/4cea555114a979954dcb - jika Anda tidak keberatan menutup jendela konsol, Anda dapat menyimpan dua lagi dengan menghapus /bargumen dari exit.
Bob

@Neil lol oke jadi saya baru saja mencoba menjalankannya dan sekarang saya menyadari apa yang Anda lakukan. Sangat pintar.
Ashwin Gupta

Pada awalnya, gunakan@echo off
Elliot A.


5

Powershell - 65 byte

(Diubah sebagai tanggapan terhadap komentar)

Semua kredit untuk TimmyD

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

Mengapa memilih? (Harap dicatat, ini adalah posting pertama saya, bukan sambutan yang bagus?)
bulletprooffool


4

R - 199 132 123 118 byte

Versi 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 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 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 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
Selamat Datang di Programming Puzzles & Code Golf! Karena ini adalah kompetisi golf kode, Anda harus membuat kode sesingkat mungkin. Anda bisa mulai dengan memendekkan masing-masing nama variabel menjadi satu karakter, menghapus spasi, dan menggunakan =untuk tugas alih-alih <-.
Alex A.

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

Tidak masalah. :) Juga, Anda tidak perlu melacak versi Anda di badan pos karena riwayat revisi dapat diakses melalui tautan yang mengatakan "diedit X menit yang lalu."
Alex A.

(walaupun mungkin bermanfaat untuk memberikan beberapa indikasi, baik dalam ringkasan edit Anda atau di pos apa yang Anda ubah dengan setiap revisi sehingga orang lain dapat belajar dari proses revisi Anda)
quintopia

4

Ruby, 71 byte

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

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

4

Java, 103 byte

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

Pertama kali saya di sini. Hai yang disana! Saya menggunakan ekspresi lambda Java8 (alias fungsi anonim).

Versi tidak disatukan

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

Untuk benar-benar menggunakan ini, seperti biasa di Java8, Anda harus menetapkannya ke variabel (atau melemparkannya ke) antarmuka fungsional yang sesuai dan kemudian memanggil metodenya; tetapi secara teknis, fungsinya hanya ekspresi lambda itu sendiri, jadi saya hanya menghitung itu.

Ini juga memerlukan parameter input, yang menyelamatkan saya beberapa byte, karena saya dapat menyalahgunakannya sebagai variabel lokal tanpa harus menentukan jenisnya. Saya tidak yakin apakah itu dianggap curang, tetapi bagi saya tampaknya itu sesuai dengan aturan: Saya hanya melihat orang menyatakan bahwa memposting fungsi diperbolehkan, bukan bagaimana fungsi itu perlu dipanggil. :) Dan itu tidak benar-benar membaca parameter, jadi fungsinya masih mandiri; Anda dapat meneruskan String apa pun ke sana, atau bahkan nol, dan masih akan menghasilkan output yang benar.

Dan inilah cara menggunakannya:

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

Pemakaian:

f()

Tidak Disatukan:

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

pembentuk:

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

Dalam jawaban python2 Anda, baris terakhir sepertinya tidak lengkap: print f(3) beri: 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 Baris terakhir adalah hasilnya. Ini dicetak hanya ketika Anda menjalankannya secara interaktif.
pacholik


2

Groovy, 74 karakter

"join ()" tidak terkalahkan ... Solusi baru, terima kasih kepada @yariash

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

Solusi lama, 78 karakter:

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

2
Anda bisa menggunakan 100.times{}bukan (1..100).each{}.
Krzysztof Atłasik

@yariash Terima kasih atas petunjuknya!
t0r0X

1

Julia, 77 byte

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

1

Lua, 128 106 Bytes

Saya masih mencoba menemukan cara untuk langsung bekerja pada nilai yang dicetak, dan bukan pada string.

Sunting: Ditemukan sebagian! Saya masih membutuhkan string untuk bagian "_0, _1 ...", tetapi sudah lebih baik :).

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

Solusi 128 Bytes lama

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

Tidak disatukan

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 byte

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

Itu bukan hal terpendek di dunia, saya hanya berpartisipasi.

sunting1: turun 2 byte dengan menghapus 0,dulurange

edit2: Saya tidak perlu pengecoran intuntuk strbukan hanya menggunakan %i... Down to 105.


Selamat datang, awal yang bagus! Jika tertarik, coba range(i)di tempat range(0,i)atau karena Anda menggunakan rangedua kali, coba r=rangelebih awal kemudian referensi setiap panggilan dengan adil r(seperti dalam solusi Python lainnya).
Ray Toal

Ugh, saya lupa rangemulai 0 secara default. Turun 2 byte, bagaimanapun, menambahkan r=range;hasil awal dalam jumlah karakter yang persis sama, saya sudah mencobanya! : D
Issak

Komentar yang sama dari yang saya lakukan pada Dair : ',_'.join(map(str,range(i)))lebih pendek 7 byte di sini.
409_Konflik

1

Mathematica, 130 Bytes

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

Petunjuk: \ndapat diganti dengan karakter baris baru literal.
LegionMammal978

1

Scala, 85 Bytes

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

1

Jawa, 116

(hanya untuk fungsi pencetakan - menurut beberapa komentar, ini sesuai dengan aturan)

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 byte

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

Anda dapat menyimpan beberapa byte dengan mengganti gema menjadi tanda kutip ganda jika memungkinkan:<?php for($i=0;$i<100;$i++){$m.=$i==0?"_$i":",_$i";echo 'class Tuple'.($i+1)." {public Object $m;}\n";}
Samsquanch

1
@Samsquanch Juga, alih-alih echo 'class Tuple'.($i+1)." {public Object $m;}\n";, Anda dapat menggunakan echo'class Tuple',$i+1," {public Object $m;}\n";, yang lebih pendek 3 byte. Juga, sesuai dengan meta, Anda dapat menghapus <?phpdan menganggap bahwa kode Anda akan dieksekusi dengan php -r "code". Juga, Anda dapat melakukannya for(;++$i<101;)echo"class Tuple$i {public Object ",$m=($m?"$m,":'')."_$i",";}\n";untuk 80 byte (Anda harus mengganti \ndengan baris baru yang sebenarnya). Cobalah di sini: ideone.com/oOzKtP
Ismael Miguel

1

Serius, 55 byte

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

Hexdump (dapat dibalik dengan 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

Cobalah online!

Ya, baris baru itu seharusnya ada di sana.

Penjelasan (baris baru diganti dengan \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 byte

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

The ?harus menjadi literal byte 0x95. Uji secara online!

Japt memiliki:

  • sintaksis singkat untuk membantu mempersingkat kode Anda.
  • kompresi string untuk membantu mempersingkat lebih jauh.
  • banyak bug yang membuat Anda ingin membuang komputer Anda keluar jendela.

Saya bahkan tidak bisa menggunakan titik koma di dalam string karena fungsi yang dibungkus ingin mengembalikan semuanya setelah titik koma. Ini seharusnya hanya 46 byte:

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

Tapi sayang sekali, tidak. Saya akan melihat apakah saya dapat memperbaiki bug ini selama beberapa jam ke depan.

Bagaimana itu bekerja

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 oleh ~ 18 bulan! Anda harus menambahkan yang pertama X.
Shaggy

1

Javascript, 112 110 byte

2 byte mati terima kasih @ CᴏɴᴏʀO'Bʀɪᴇɴ .

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

Tidak Disatukan:

_=>                                         // 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
Saya pikir Anda dapat mengganti ${i+1}dengan ${i++}dan mengganti ${[...Array(i++)]dengan ${[...Array(i)].
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ. Terima kasih, saya telah memperbarui dengan++i
dihapus

1

Groovy, 97 byte

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

Cobalah online!


1
Anda dapat menggunakan 100.times {} alih-alih (1..100) .each {}, yang menghemat 4 byte.
Krzysztof Atłasik

Anda juga dapat menghilangkan tanda kurung pada join ( join','), menghapus spasi setelah println, dan menggantinya .collect{}dengan*.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))))

Terima kasih @DenkerAffe untuk saran penggunaan lambda.

Terima kasih @MathiasEttinger untuk joinidenya.


2
Anda dapat mengurangi ini hingga 111 byte jika Anda menggunakan lambda dalam panggilan-dikurangi alih-alih mendefinisikan fungsi untuk ini:reduce(lambda x,y:'%s,_%s'%(x,y), r(i))
Denker

1
Atau gunakan ',_'.join(map(str,r(i)))untuk menghapus 14 byte tambahan (atau 15, karena Anda meninggalkan ruang ekstra di Anda reduce).
409_Konflik

1

C ++, 164 159 157 byte (155 sebagai fungsi saja)

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

Ini adalah program lengkap. Anda dapat menyimpan 2 byte dalam bentuk fungsi saja jika Anda mengganti int main()dengan void f().

Jalankan kode di Ideone

Tidak digabungkan, termasuk ekspansi makro

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

Selamat Datang di Programming Puzzles & Code Golf! Jawaban pertama yang bagus! Kecuali dinyatakan sebaliknya dalam tantangan, Anda selalu dapat menggunakan fungsi alih-alih program penuh, sehingga Anda dapat menyimpan beberapa byte dengan melakukan itu. Anda masih harus memasukkan iostream tho, karena itu diperlukan untuk output.
Denker

Anda mungkin juga ingin melakukannya j=1di for for loop Anda, sehingga tidak memiliki if(j).
Ethiraric

@Ethiraric Tapi tentu saja! Bagaimana saya ceroboh. Saya kira saya terlalu fokus pada ide "ingat untuk melewatkan penambahan pada baris pertama" dan akhirnya menulis itu juga secara harfiah.
sendaran

@sendaran Atau bahkan mungkin for(int j=0;++j<=i;)akan menghemat satu byte lagi.
Ethiraric

@Ethiraric Melakukan itu dan memotong byte tambahan dengan mengekstraksi deklarasi variabel, yang memungkinkan ekspresi kosong lainnya.
sendaran
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.