Tạo 100 lớp Java Tuple


37

Viết một tập lệnh ghi vào đầu ra tiêu chuẩn hoặc 100 dòng mã Java (hợp lệ) tương đương với ngôn ngữ của bạn bắt đầu bằng:

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

Dòng cuối cùng nên bắt đầu bằng class Tuple100.

Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!


6
Tôi chấp nhận thách thức! Thực tế, tôi sẽ làm điều này trong Java!
Ashwin Gupta

Tôi có thể viết một hàm hoặc nó phải là một chương trình đầy đủ?
Ashwin Gupta

3
Tôi mới đến trang web nên đã yêu cầu một tập lệnh, nhưng tôi đã nghe thấy thông lệ cho phép các hàm và điều đó rất có ý nghĩa đối với Java, để tránh public static void main(String[] args)nên chắc chắn cung cấp một hàm nếu bạn muốn.
Ray Toal

1
Tuyệt quá! Cảm ơn Ray!
Ashwin Gupta

Nó không phải là bất cứ nơi nào đủ nhỏ, nhưng tôi nghĩ đây là một nơi hoàn hảo để chia sẻ ntrình tạo -tuple của tôi, tôi đã viết bằng Java: github.com/kenzierocks/Tuplocity . Nó tạo ra bộ dữ liệu hoàn toàn chung chung!
Octavia Togami

Câu trả lời:


8

Jolf, 42 byte

Tôi có nhận được điểm thưởng khi đánh bại Jelly với số điểm tốt nhất chưa từng có? Chứa không thể in được, vì vậy bạn có thể muốn thử trực tuyến tại đây . Tôi đã thay thế các unprintables bằng chỉ số alt tương ứng của chúng để dễ đọc.

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

Giải trình

‼Μ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
Tôi giả sử. Có đúng trên trang web này để thay đổi câu trả lời được chấp nhận nếu một điểm mới đến sau?
Ray Toal

6
@RayToal Vâng, nó là phù hợp và thậm chí đề nghị làm như vậy.
Conor O'Brien

Mã hóa ký tự cho cái này là gì? Tôi biết các ngôn ngữ chơi gôn thường xuyên sử dụng mã hóa của riêng họ, nhưng tôi không thể biết jolf mã hóa nào có thể sử dụng. Tôi nhận ra điều này là cũ.
đệ quy

@recursive Hy Lạp ISO-8859-7, cái này: en.wikipedia.org/wiki/ISO/IEC_8859-7
Conor O'Brien

23

vim 56 54 tổ hợp phím

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

Vì V tương thích ngược, bạn có thể dùng thử trực tuyến!

Đây là nhiệm vụ hoàn hảo cho vim! Tôi có thể đánh gôn thêm một chút nữa sau. Cũng lưu ý rằng điều đó <c-a>có nghĩa là Control-A và nó được tính là một lần nhấn phím.

Giải trình:

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
Nếu bạn tính Control-A là một tổ hợp phím, bạn có thể thay thế yybằng Y.
Seequ 3/2/2016

1
@Seeq Haha, tôi mới nhận ra điều tương tự và chỉnh sửa nó ngay trước khi tôi thấy bình luận của bạn. Tư tưởng lớn gặp nhau!
DJMcMayhem

Điều này dường như sẽ xảy ra class Tuple101, không phải class Tuple100như câu hỏi.
numbermaniac

1
@numbermaniac Lỗi đơn giản. Cảm ơn đã chỉ ra rằng! Đã sửa ngay :)
DJMcMayhem

10

Thạch, 44 byte

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

Câu trả lời Jelly đầu tiên của tôi. Hãy thử trực tuyến!


Tôi đang làm sai hay điều này chỉ xuất ra một danh sách khổng lồ thay vì một chuỗi?
Denker

@DenkerAffe Có vẻ như đang hoạt động! Có một lỗi tạm thời trong Jelly. (Ngoài ra, liên kết là một phiên bản cũ của giải pháp của tôi, vì vậy tôi đã cập nhật nó.)
Lynn

Thật tuyệt ... tính đến thời điểm hiện tại, nó ngắn hơn 9 byte so với giải pháp CJam!
Ray Toal

8

Pyth, 53 50 48 byte

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

Hãy thử trực tuyến!

Lặp lại đơn giản trên phạm vi (1.100) và xây dựng chuỗi corrosponding từ một chuỗi đóng gói thông qua định dạng nó.

Giải trình

VS100%. "} SüÆðQ HồiÓ3Ô«% & a nam4UçõÛ "[Nj", _ "UN

VS100 # Lặp lại trên phạm vi (1.100)
     %. "} SüÆðQ NgàyÓ3Ô«% & a Khăn4UçõÛ "# Giải nén chuỗi và định dạng chuỗi
                              [# Danh sách định dạng đối số
                               Số N # của Tuple
                                j UN # Tham gia số đối tượng ...
                                 ", _" # ... trên bộ tách biệt ", _"

Chuỗi đã giải nén là class Tuple%i {public Object _%s;}


Hai golf: Sử dụng s[thay vì tất cả những người +. [tạo một danh sách độ dài tùy ý và snối nó với nhau. Ngoài ra, vì bạn muốn [1, 2, ... 100], không [0, 1, .. 99], sử dụng VS100, và bạn sẽ không cần h.
isaacg

@isaacg Cảm ơn, không biết về S-trick! :) Đã ngồi trên để thoát khỏi tất cả ++++, tôi biết có một cách tốt hơn.
Denker

Không có gì. Nhân tiện, bạn dường như đã thêm một dấu vết "không cần thiết.
isaacg

1
@isaacg Có lý do j<str><int>nào không U?
lirtosiast

1
Không thật sự lắm. Sẽ làm.
isaacg

7

CoffeeScript, 86 84 byte

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

Xem giải pháp trực tuyến


Chào mừng đến với PPCG! Chỉ để cho bạn biết các chỉnh sửa cải thiện câu trả lời thường cau mày (và nên bị từ chối nếu chúng kết thúc trong hàng đánh giá). Vì vậy, nhiều khả năng mọi người sẽ bình luận với các đề xuất, vì vậy bạn có thể tự xem xét chúng. :) (Đối với những lời khuyên thực tế, tôi nghĩ rằng bạn không cần khoảng trống phía trước forcũng không phải cái sau in.)
Martin Ender

console.log"hoạt động không? (Không biết kịch bản cà phê, đó là một mánh khóe chung.
Addison Crump

Không, như trong, loại bỏ không gian. : PI biết nó tồn tại, tôi chỉ không biết đó là cú pháp hợp lệ.
Addison Crump

@VoteToC Đóng Tôi đã thử điều đó trước đó (sử dụng trình chuyển mã trực tiếp trên coffeescript.org và nó không hoạt động).
Martin Ender

@VoteToClose Oh xin lỗi đã không nhìn thấy điều đó. Không. Bằng cách nào đó, không gian được yêu cầu bởi ngữ pháp, nhưng nó không chính xác rõ ràng cho tôi tại sao (chưa). Chẳng hạn, khoảng cách rất quan trọng trong CoffeeScript, x? y:zhoàn toàn khác với x ? y:z. Bạn có thể nói console.log?"hello"nhưng không console.log"hello". Khoảng trắng đáng kể. Đôi khi tốt đẹp, đôi khi kỳ lạ.
Ray Toal

7

Java, 160 , 125 byte

Cảm ơn @DenkerAffe, @Denham Coote và @Mathias Ettinger vì những cải tiến.

Java viết java (vì ai đó đã phải!)

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

Và phiên bản không chơi gôn

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

2
Chào mừng bạn đến với Câu đố lập trình & Code Golf! Trừ khi có quy định khác trong thử thách, bạn có thể sử dụng các chức năng thay vì các chương trình đầy đủ. Vì vậy, bạn nên sử dụng Java8-lambda (trả về kết quả) ở đây để tiết kiệm cho bạn tất cả mọi public static void main...thứ.
Denker

4
Chào mừng đến với PPCG. Câu trả lời này bao gồm một dấu phẩy thừa ở cuối phần khai báo Đối tượng ...class Tuple1 {public Object _0,;} class Tuple2 {public Object _0,_1,;}
Denham Coote

3
Bạn có thể lưu thêm 3 byte bằng cách tăng bộ đếm vòng lặp của mình trong sysout (++ i) thay vì (i + 1) và xóa i++khỏi thiết lập vòng lặp for
Denham Coote

Bạn nên bắt đầu String s = "_0"để bạn có thể s += ",_" + ivà lưu một byte. Nó cũng sẽ giải quyết vấn đề với hôn mê kéo dài. Bạn sẽ cần bắt đầu vòng lặp for đi từ 1nhỏ hơn 101và sẽ có thể xóa thêm 4 byte bằng cách chuyển đổi (i+1)thông điệp đầu ra của bạn thành chỉ i. Rõ ràng, bạn sẽ cần in trước khi tăng s.
409_Conflict

Cảm ơn, đã thực hiện tất cả những điều này, và chắc chắn sẽ có một người thích ở java8-lambda.
SoloKix 6/2/2016

6

Oracle SQL 9.2, 138 137 byte

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

@Peter Cảm ơn bạn đã chỉ ra lỗi 0/1.

Truy vấn sử dụng CONNECT BY CLAUSE của truy vấn phân cấp để tạo 100 hàng.

Bút danh LEVEL chứa số hàng của mỗi hàng.

SYS_CONNECT_BY_PATH ghép tham số đầu tiên, số hàng, của mỗi hàng và sử dụng tham số thứ hai làm dấu phân cách.


vui lòng thêm một số lời giải thích
Eumel

Thông minh :) Điều này bắt đầu bằng Object _1thay vì Object _0, do đó sẽ mất thêm hai byte ( -1). Tuy nhiên, _có thể được thêm vào char SYS_CONNECT_BY_PATHthay vì nối, giảm nó bằng hai byte đó một lần nữa:REPLACE('class Tuple'||LEVEL||' {public Object'||SYS_CONNECT_BY_PATH(LEVEL-1,',_')||';}','t,_','t _')
Peter Lang

6

Mẻ, 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

Chỉnh sửa: Đã lưu 10 byte nhờ @Bob. Đã lưu 1 byte nhờ @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ.


3
Tôi luôn cảm thấy rất vui khi thấy lô trên mã golf, ngoài ra, thay vì sử dụng @ ở mọi nơi, bạn có thể chuyển hướng đầu ra để nối vào một tệp có tên x và sử dụng nó làm đầu ra
Dennis van Gils

@DennisvanGils Các lệnh đáng buồn được lặp lại với đầu ra tiêu chuẩn.
Neil

Đã loại bỏ enabledelayedexpansion117 byte: gist.github.com/Elusive138/4cea555114a979954dcb - nếu bạn không nhớ cửa sổ giao diện điều khiển đóng, bạn có thể lưu thêm hai bằng cách xóa /barg khỏi exit.
Bob

@Neil lol được rồi nên tôi mới thử chạy và bây giờ tôi nhận ra bạn đã làm gì. Rất thông minh.
Ashwin Gupta

Khi bắt đầu, sử dụng@echo off
Elliot A.


5

Powershell - 65 byte

(Sửa đổi để trả lời bình luận)

Tất cả tín dụng cho TimmyD

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

Tại sao bỏ phiếu xuống? (Xin lưu ý đây là bài đăng đầu tiên của tôi, không phải là một sự chào đón tuyệt vời?)
Bulletprooffool


4

R - 199 132 123 118 byte

Phiên bả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"))

Phiên bả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"))

Phiên bả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")

Phiên bả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)
}

3
Chào mừng bạn đến với Câu đố lập trình & Code Golf! Vì đây là một cuộc thi golf mã, bạn sẽ muốn làm cho mã của mình càng ngắn càng tốt. Bạn có thể bắt đầu bằng cách rút ngắn tên biến thành một ký tự, loại bỏ khoảng trắng và sử dụng =để gán thay vì <-.
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.

Không vấn đề gì. :) Ngoài ra, bạn không cần theo dõi các phiên bản của mình trong phần thân bài vì lịch sử sửa đổi có thể truy cập được thông qua liên kết có nội dung "đã chỉnh sửa X phút trước."
Alex A.

(mặc dù nó có thể là đáng giá để đưa ra một số dấu hiệu cho thấy, hoặc trong chỉnh sửa bản tóm tắt của bạn hoặc trong bài gì bạn đã thay đổi với mỗi phiên bản để người khác có thể học hỏi từ quá trình sửa đổi của bạn)
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);}

Lần đầu tiên của tôi ở đây. Chào bạn Tôi đã sử dụng biểu thức lambda Java8 (còn gọi là hàm ẩn danh).

Phiên bản ung dung

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

Để thực sự sử dụng điều này, như thường lệ trong Java8, bạn phải gán nó cho một biến (hoặc chuyển nó sang) một giao diện chức năng phù hợp và sau đó gọi phương thức của nó; nhưng về mặt kỹ thuật, hàm chỉ là biểu thức lambda, vì vậy tôi chỉ tính điều đó.

Nó cũng yêu cầu một tham số đầu vào, giúp tôi tiết kiệm một vài byte, vì tôi có thể lạm dụng nó như một biến cục bộ mà không phải chỉ định loại của nó. Tôi không chắc liệu điều đó có bị coi là gian lận hay không, nhưng đối với tôi nó dường như nằm trong quy tắc: Tôi chỉ thấy mọi người nói rằng việc đăng một chức năng được cho phép, chứ không phải làm thế nào chức năng đó cần được gọi. :) Và nó không thực sự đọc tham số, vì vậy hàm vẫn độc lập; bạn có thể truyền bất kỳ Chuỗi nào cho nó hoặc thậm chí là null và nó vẫn sẽ tạo ra đầu ra chính xác.

Và đây là cách sử dụng nó:

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

Con tră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

Tră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

Sử dụng:

f()

Ung dung:

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

định dạng:

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

Trong câu trả lời python2 của bạn, dòng cuối cùng dường như chưa hoàn chỉnh: print f(3) đưa ra: 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
ăn kiêng

@dieter Dòng cuối cùng là kết quả. Nó chỉ được in khi bạn chạy nó một cách tương tác.
pacholik


2

Groovy, 74 ký tự

"tham gia ()" là vô địch ... Giải pháp mới, nhờ @yariash

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

Giải pháp cũ, 78 ký tự:

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

2
Bạn có thể sử dụng 100.times{}thay vì (1..100).each{}.
Krzysztof Atłasik

@yariash Cảm ơn bạn đã gợi ý!
t0r0X

1

Julia, 77 byte

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

1

Lua, 128 106 byte

Tôi vẫn đang cố gắng tìm cách để trực tiếp làm việc trên một giá trị được in chứ không phải trên một chuỗi.

Chỉnh sửa: Một phần tìm thấy nó! Tôi vẫn cần một chuỗi cho phần "_0, _1 ...", nhưng nó đã tốt hơn :).

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

Giải pháp 128 byte cũ

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

Ung dung

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

Đó không phải là điều ngắn nhất trên thế giới, tôi chỉ tham gia.

chỉnh sửa1: giảm 2 byte bằng cách xóa 0,đầu tiênrange

edit2: Tôi đã không cần thiết đúc intđể strthay vì chỉ sử dụng %i... Xuống đến 105.


Chào mừng, khởi đầu tốt đẹp! Nếu quan tâm, hãy thử range(i)thay thế range(0,i)hoặc vì bạn đã sử dụng rangehai lần, hãy thử r=rangesớm sau đó tham khảo từng cuộc gọi chỉ bằng r(như trong các giải pháp Python khác).
Ray Toal

Ugh, tôi quên rangebắt đầu từ 0 theo mặc định. Tuy nhiên, giảm 2 byte, thêm r=range;vào đầu kết quả có cùng số lượng ký tự, tôi đã thử điều đó! : D
Issak

Nhận xét tương tự như tôi đã làm với Dair : ',_'.join(map(str,range(i)))ngắn hơn 7 byte ở đây.
409_Conflict

1

Toán học, 130 byte

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

Gợi ý: \ncó thể được thay thế bằng một ký tự dòng mới.
LegionMammal978

1

Scala, 85 byte

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

1

Java, 116

(chỉ dành cho chức năng in - theo một số ý kiến, điều này phù hợp với quy tắc)

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

Bạn có thể lưu một vài byte bằng cách chuyển echo sang dấu ngoặc kép nếu có thể:<?php for($i=0;$i<100;$i++){$m.=$i==0?"_$i":",_$i";echo 'class Tuple'.($i+1)." {public Object $m;}\n";}
Samsquanch 3/2/2016

1
@Samsquanch Ngoài ra, thay vì echo 'class Tuple'.($i+1)." {public Object $m;}\n";, bạn có thể sử dụng echo'class Tuple',$i+1," {public Object $m;}\n";, ngắn hơn 3 byte. Ngoài ra, theo meta, bạn có thể xóa <?phpvà giả sử rằng mã của bạn sẽ được thực thi php -r "code". Ngoài ra, bạn có thể thực hiện for(;++$i<101;)echo"class Tuple$i {public Object ",$m=($m?"$m,":'')."_$i",";}\n";với 80 byte (bạn cần thay thế \nbằng một dòng mới thực sự). Hãy thử tại đây: ideone.com/oOzKtP
Ismael Miguel

1

Nghiêm túc, 55 byte

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

Hexdump (đảo ngược với 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

Hãy thử trực tuyến!

Vâng, dòng mới đó được cho là ở đó.

Giải thích (dòng mới thay thế bằng \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} ·

Các ?nên là byte 0x95 chữ. Kiểm tra nó trực tuyến!

Japt có:

  • cú pháp súc tích để giúp rút ngắn mã của bạn.
  • nén chuỗi để giúp rút ngắn hơn nữa.
  • rất nhiều lỗi khiến bạn muốn ném máy tính ra khỏi cửa sổ.

Tôi thậm chí không thể sử dụng dấu chấm phẩy trong chuỗi vì hàm được bao bọc muốn trả về mọi thứ sau dấu chấm phẩy. Điều này chỉ nên là 46 byte:

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

Nhưng than ôi, nó không phải là. Tôi sẽ xem liệu tôi có thể sửa các lỗi này trong vài giờ tới không.

Làm thế nào nó hoạt động

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! Ninja đã ~ 18 tháng! Nhân tiện, bạn cần phải tăng đầu tiên X.
Xù xì

1

Javascript, 112 110 byte

Tắt 2 byte cảm ơn @ CᴏɴᴏʀO'Bʀɪᴇɴ .

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

Ung dung:

_=>                                         // 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
Tôi nghĩ bạn có thể thay thế ${i+1}bằng ${i++}và thay thế ${[...Array(i++)]bằng ${[...Array(i)].
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ. Cảm ơn, tôi đã cập nhật với++i
đã xóa

1

Groovy, 97 byte

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

Hãy thử trực tuyến!


1
Bạn có thể sử dụng 100.times {} thay vì (1..100) .each {}, giúp tiết kiệm 4 byte.
Krzysztof Atłasik

Bạn cũng có thể bỏ qua dấu ngoặc trong phép nối ( join','), xóa khoảng .collect{}*.with{}
trắng

1

Python 2, 96 byte

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

Cảm ơn @DenkerAffe cho gợi ý sử dụng lambda.

Cảm ơn @MathiasEttinger cho joiný tưởng.


2
Bạn có thể đánh golf xuống tới 111 byte nếu bạn sử dụng lambda trong lệnh gọi thay vì xác định hàm cho việc này:reduce(lambda x,y:'%s,_%s'%(x,y), r(i))
Denker

1
Hoặc sử dụng ',_'.join(map(str,r(i)))để loại bỏ thêm 14 byte (hoặc 15, vì bạn để lại một khoảng trống thừa trong reduce).
409_Conflict

1

C ++ 164 159 157 byte (chỉ 155 chức năng)

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

Đây là một chương trình đầy đủ. Bạn chỉ có thể lưu 2 byte ở dạng hàm nếu bạn thay thế int main()bằng void f().

Chạy mã trong Ideone

Ungolfed, bao gồm mở rộng vĩ mô

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

Chào mừng bạn đến với Câu đố lập trình & Code Golf! Câu trả lời đầu tiên tốt đẹp! Trừ khi có quy định khác trong thử thách, bạn luôn có thể sử dụng các hàm thay vì các chương trình đầy đủ, vì vậy bạn có thể lưu một vài byte bằng cách thực hiện điều đó. Bạn vẫn phải bao gồm iostream tho, vì nó cần cho đầu ra.
Denker

Bạn cũng có thể muốn làm j=1trong vòng lặp for của mình, do đó không có if(j).
Ethiraric

@Ethiraric Nhưng tất nhiên rồi! Làm thế nào cẩu thả của tôi. Tôi đoán rằng tôi đã quá tập trung vào ý tưởng "nhớ bỏ qua các bổ sung trên dòng đầu tiên" và cuối cùng đã viết nó theo đúng nghĩa đen.
sendaran

@sendaran Hoặc thậm chí có thể for(int j=0;++j<=i;)sẽ tiết kiệm thêm một byte.
Ethiraric

@Ethiraric Đã làm điều đó và loại bỏ một byte thừa bằng cách trích xuất các khai báo biến, cho phép một biểu thức trống khác.
sendaran
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.