สร้างคลาส Java Tuple 100 คลาส


37

เขียนสคริปต์ที่เขียนไปยังเอาต์พุตมาตรฐานหรือโค้ด Java ที่เทียบเท่า (100) บรรทัดของภาษาของคุณที่ขึ้นต้นด้วย:

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

class Tuple100บรรทัดสุดท้ายควรเริ่มต้นด้วย

นี่คือดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ!


6
ฉันยอมรับการท้าทาย! ในความเป็นจริงฉันจะทำเช่นนี้ใน Java!
Ashwin Gupta

ฉันสามารถเขียนฟังก์ชั่นหรือต้องเป็นโปรแกรมเต็มรูปแบบได้หรือไม่
Ashwin Gupta

3
ฉันยังใหม่กับไซต์ที่ขอสคริปต์ แต่ฉันได้ยินมาว่ามันเป็นธรรมเนียมในการอนุญาตฟังก์ชั่นและนั่นก็สมเหตุสมผลสำหรับ Java เพื่อหลีกเลี่ยงการpublic static void main(String[] args)ให้ฟังก์ชั่นแน่นอนถ้าคุณชอบ
Ray Toal

1
ที่ดี! ขอบคุณเรย์!
Ashwin Gupta

มันไม่ได้ทุกที่ใกล้พอที่เล็ก ๆ แต่ผมคิดว่านี่เป็นสถานที่ที่สมบูรณ์แบบที่จะแบ่งปันของฉันnกำเนิด -tuple ผมเขียนใน Java: github.com/kenzierocks/Tuplocity มันสร้างสิ่งอันดับทั่วไปอย่างสมบูรณ์!
Octavia Togami

คำตอบ:


8

Jolf, 42 ไบต์

ฉันจะได้รับคะแนนโบนัสสำหรับการตีเยลลี่ด้วยคะแนนที่ดีที่สุดตลอดกาลหรือไม่? มี unprintables ดังนั้นคุณอาจต้องการที่จะลองมันออนไลน์ได้ที่นี่ ฉันแทนที่ unprintables ด้วยดัชนี alt ตามลำดับเพื่อความสะดวกในการอ่าน

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

คำอธิบาย

‼Μ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
ฉันคิดว่า มันเหมาะสมกับไซต์นี้ที่จะเปลี่ยนคำตอบที่ยอมรับหรือไม่ถ้ามีคะแนนใหม่เข้ามาในภายหลัง
Ray Toal

6
@ RayToal ใช่มันถูกต้องและแนะนำให้ทำด้วยซ้ำ
Conor O'Brien

การเข้ารหัสอักขระสำหรับสิ่งนี้คืออะไร ฉันรู้ว่าภาษากอล์ฟมักใช้การเข้ารหัสของตัวเองบ่อยครั้ง แต่ฉันไม่เห็นว่าการเข้ารหัสแบบไหนที่จะใช้ jolf ฉันรู้ว่านี่เก่า
เรียกซ้ำ

@recursive กรีก ISO-8859-7 อันนี้: en.wikipedia.org/wiki/ISO/IEC_8859-7
Conor O'Brien

23

เป็นกลุ่ม56 54 การกดแป้น

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

เนื่องจาก V เข้ากันได้ย้อนหลังคุณสามารถลองออนไลน์ได้!

นี่เป็นงานที่สมบูรณ์แบบสำหรับกลุ่ม! ฉันอาจตีกอล์ฟเพิ่มอีกนิดในภายหลัง นอกจากนี้โปรดทราบว่า<c-a>หมายถึง Control-A และนับเป็นหนึ่งการกดแป้น

คำอธิบาย:

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
ถ้าคุณนับควบคุม-A เป็นหนึ่งในการกดแป้นพิมพ์คุณสามารถใช้แทนโดยyy Y
seequ

1
@Seeq Haha ฉันเพิ่งรู้สิ่งเดียวกันและแก้ไขมันก่อนที่ฉันจะเห็นความคิดเห็นของคุณ จิตใจดีคิดเหมือนกัน!
DJMcMayhem

ดูเหมือนว่าจะเป็นclass Tuple101เช่นนี้ไม่ใช่class Tuple100คำถามที่ถาม
numbermaniac

1
@numbermaniac ข้อผิดพลาด off-by-one ง่าย ขอบคุณสำหรับการชี้ให้เห็น! แก้ไขแล้วตอนนี้ :)
DJMcMayhem

10

เยลลี่ขนาด 44 ไบต์

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

คำตอบเยลลี่แรกของฉัน ลองออนไลน์!


ฉันทำผิดหรือแค่ส่งรายการยักษ์แทนที่จะเป็นสตริง?
Denker

@DenkerAffe ดูเหมือนว่าจะทำงานตอนนี้! มีข้อผิดพลาดชั่วคราวในเยลลี่ (ลิงก์นี้เป็นโซลูชันเวอร์ชันเก่าของฉันด้วยดังนั้นฉันจึงอัปเดต)
ลินน์

เยี่ยมมาก ... ตอนนี้มันสั้นกว่าโซลูชั่น CJam ถึง 9 ไบต์!
Ray Toal

8

Pyth, 53 50 48 ไบต์

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

ลองออนไลน์!

การวนซ้ำแบบตรงไปตรงมาในช่วง (1,100) และการสร้างสตริงการกัดกร่อนจากสตริงที่บรรจุจนถึงการจัดรูปแบบ

คำอธิบาย

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

VS100 # ซ้ำตามช่วง (1,100)
     %. "} SüÆðQ´Ó3Ô «% & a´4UçõÛ" # คลายสตริงและจัดรูปแบบ
                              [# รายการสำหรับการจัดรูปแบบอาร์กิวเมนต์
                               N # จำนวน Tuple
                                j UN # เข้าร่วมหมายเลขวัตถุ ...
                                 ", _" # ... บนตัวคั่น ", _"

สตริงที่คลายการแพคคือ class Tuple%i {public Object _%s;}


สองโรงแรมพร้อมสนามกอล์ฟ: ใช้แทนทุกคนs[ สร้างรายการความยาวโดยพลการและต่อเข้าด้วยกัน นอกจากนี้ตั้งแต่คุณต้องการไม่ได้ใช้และคุณจะไม่จำเป็นต้องใช้อย่างใดอย่างหนึ่ง +[s[1, 2, ... 100][0, 1, .. 99]VS100h
isaacg

@isaacg ขอบคุณไม่ทราบเกี่ยวกับSเคล็ดลับ! :) ได้นั่งกำจัดทุกสิ่งไป++++แล้วฉันรู้ว่ามีวิธีที่ดีกว่า
Denker

คุณยินดีต้อนรับ โดยวิธีการที่คุณดูเหมือนจะมีการต่อท้ายที่"ไม่จำเป็น
isaacg

1
@isaacg มีเหตุผลใด ๆj<str><int>ไม่ได้U?
lirtosiast

1
ไม่ไม่ได้จริงๆ จะทำ.
isaacg

7

CoffeeScript, 86 84 ไบต์

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

ดูวิธีแก้ปัญหาออนไลน์


ยินดีต้อนรับสู่ PPCG! เพียงเพื่อแจ้งให้คุณทราบว่าการแก้ไขที่ปรับปรุงคำตอบมักขมวดคิ้ว (และควรถูกปฏิเสธหากพวกเขาลงเอยด้วยคิวการตรวจสอบ) ดังนั้นมีโอกาสมากขึ้นที่ผู้คนจะแสดงความคิดเห็นพร้อมข้อเสนอแนะเพื่อให้คุณสามารถตรวจสอบได้ด้วยตนเอง :) (สำหรับคำแนะนำจริง ๆ ฉันคิดว่าคุณไม่ต้องการพื้นที่ด้านหน้าforหรือหลังin)
Martin Ender

ไม่console.log"ทำงานหรือไม่ (ไม่รู้สคริปต์กาแฟนั่นเป็นกลอุบายทั่วไป
Addison Crump

ไม่เช่นนั้นจะเป็นการลบพื้นที่ : PI รู้ว่ามีอยู่ฉันไม่ทราบว่าเป็นไวยากรณ์ที่ถูกต้องหรือไม่
Addison Crump

@VoteToClose ฉันลองก่อนหน้านี้ (ใช้ transpiler สดบน coffeescript.org และมันไม่ทำงาน)
Martin Ender

@VoteToClose โอ้ขอโทษที่ไม่เห็น ไม่ต้องใช้พื้นที่ในไวยากรณ์ แต่ก็ไม่ชัดเจนสำหรับฉันว่าทำไม (ถึง) เว้นวรรคเรื่องมากใน CoffeeScript ตัวอย่างเช่น, สมบูรณ์แตกต่างจากx? y:z x ? y:zคุณสามารถพูดได้แต่ไม่console.log?"hello" console.log"hello"ช่องว่างที่สำคัญ บางครั้งก็ดีบางครั้งก็แปลก
Ray Toal

7

Java, 160 , 125 Bytes

ขอขอบคุณ @DenkerAffe @Denham Coote และ @Mathias Ettinger สำหรับการปรับปรุง

การเขียน Java java (เพราะมีคนต้อง!)

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

และเวอร์ชั่นที่ยังไม่ตีกอล์ฟ

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

2
ยินดีต้อนรับสู่การเขียนโปรแกรมปริศนา & รหัสกอล์ฟ! คุณสามารถใช้ฟังก์ชั่นแทนโปรแกรมเต็มรูปแบบได้เว้นแต่จะระบุไว้เป็นอย่างอื่น ดังนั้นคุณควรใช้ Java8-lambda (ซึ่งส่งคืนผลลัพธ์) ที่นี่เพื่อช่วยคุณประหยัดทุกpublic static void main...อย่าง
Denker

4
ยินดีต้อนรับสู่ PPCG คำตอบนี้รวมถึงเครื่องหมายจุลภาคพิเศษในตอนท้ายของการประกาศวัตถุ ...class Tuple1 {public Object _0,;} class Tuple2 {public Object _0,_1,;}
Denham Coote

3
คุณสามารถบันทึกเพิ่มอีก 3 ไบต์โดยการเพิ่มตัวนับลูปใน sysout (++ i) แทน (i + 1) และลบออกi++จากการตั้งค่าลูป
Denham Coote

คุณควรเริ่มต้นของคุณString s = "_0"เพื่อให้คุณสามารถs += ",_" + iและบันทึกไบต์ นอกจากนี้ยังจะแก้ปัญหาด้วยการต่อท้ายอาการโคม่า คุณจะต้องเริ่มต้นสำหรับวงไปจาก1น้อยกว่า101และจะสามารถที่จะเอาเป็นพิเศษ 4 ไบต์โดยการแปลงในข้อความของคุณออกไปเท่านั้น(i+1) iเห็นได้ชัดว่าคุณจะต้องพิมพ์ก่อนsที่เพิ่มขึ้น
409_Conflict

ขอขอบคุณทำสิ่งเหล่านี้ทั้งหมดแล้วและฉันจะไปดูที่ java8-lambda อย่างแน่นอน
SoloKix

6

Oracle SQL 9.2 138 137 ไบต์

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

@ Peter ขอบคุณสำหรับการชี้ความผิดพลาด 0/1

แบบสอบถามใช้การเชื่อมต่อตาม CLAUSE ของแบบสอบถามแบบลำดับชั้นเพื่อสร้าง 100 แถว

pseudocolumn LEVEL มีหมายเลขแถวของแต่ละแถว

SYS_CONNECT_BY_PATH ทำการต่อพารามิเตอร์แรกหมายเลขแถวของแต่ละแถวและใช้พารามิเตอร์ตัวที่สองเป็นตัวคั่น


โปรดเพิ่มคำอธิบายบางอย่าง
Eumel

Clever :) สิ่งนี้เริ่มต้นด้วยObject _1แทนที่จะเป็นObject _0ดังนั้นจะใช้อีกสองไบต์ ( -1) อย่างไรก็ตาม_สามารถเพิ่มลงใน char ของSYS_CONNECT_BY_PATHแทนที่จะเชื่อมต่อกันลดลงสอง bytes เหล่านั้นอีกครั้ง:REPLACE('class Tuple'||LEVEL||' {public Object'||SYS_CONNECT_BY_PATH(LEVEL-1,',_')||';}','t,_','t _')
Peter Lang

6

แบตช์ 128 ไบต์

@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

แก้ไข: บันทึก 10 ไบต์ด้วย @Bob บันทึก 1 ไบต์ขอบคุณ @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ


3
ฉันมีความสุขเสมอที่ได้เห็นแบทช์กอล์ฟโค้ดแทนที่จะใช้ @ ทุกที่คุณสามารถเปลี่ยนเส้นทางเอาต์พุตเพื่อผนวกไปยังไฟล์ชื่อ x และใช้เป็นเอาต์พุต
Dennis van Gils

@DennisvanGils คำสั่ง Sadly ได้รับการสะท้อนไปยังเอาต์พุตมาตรฐาน
Neil

กำจัดenabledelayedexpansion117 ไบต์: gist.github.com/Elusive138/4cea555114a979954dcb - ถ้าคุณไม่ทราบหน้าต่างคอนโซลปิดคุณสามารถบันทึกอีกสองคนโดยการเอาหาเรื่องจาก/b exit
Bob

@ Neil ฮ่า ๆ โอเคดังนั้นฉันแค่ลองใช้มันและตอนนี้ฉันรู้ว่าสิ่งที่คุณทำ ฉลาดมาก.
Ashwin Gupta

ที่จุดเริ่มต้นใช้งาน@echo off
Elliot A.


5

Powershell - 65 ไบต์

(แก้ไขเพื่อตอบสนองต่อความคิดเห็น)

เครดิตทั้งหมดให้กับ TimmyD

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

ทำไมถึงลงคะแนน? (โปรดทราบว่านี่เป็นครั้งแรกที่ฉันโพสต์ไม่ได้รับการต้อนรับที่ดี?)
bulletprooffool


4

R - 199 132 123 118 ไบต์

รุ่น 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"))

เวอร์ชัน 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"))

เวอร์ชัน 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")

รุ่น 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
ยินดีต้อนรับสู่การเขียนโปรแกรมปริศนา & รหัสกอล์ฟ! เนื่องจากนี่เป็นการแข่งขันกอล์ฟรหัสคุณจะต้องทำให้รหัสของคุณสั้นที่สุด คุณสามารถเริ่มต้นโดยการตัดทอนชื่อตัวแปรตัวเดียวในแต่ละลบช่องว่างและการใช้สำหรับการกำหนดมากกว่า= <-
Alex A.

144 ไบต์: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.

ไม่มีปัญหา. :) นอกจากนี้คุณไม่จำเป็นต้องติดตามเวอร์ชันของคุณในเนื้อหาโพสต์เนื่องจากสามารถแก้ไขประวัติการแก้ไขได้ผ่านลิงก์ที่ระบุว่า "แก้ไข X นาทีที่แล้ว"
Alex A.

(แม้ว่าอาจจะเป็นการดีที่จะให้สิ่งบ่งชี้บางอย่างไม่ว่าจะเป็นในบทสรุปการแก้ไขหรือโพสต์สิ่งที่คุณเปลี่ยนแปลงไปในแต่ละการแก้ไขเพื่อให้ผู้อื่นสามารถเรียนรู้จากกระบวนการแก้ไขของคุณ)
quintopia


4

Java, 103 ไบต์

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

ครั้งแรกของฉันที่นี่ สวัสดี! ฉันไปเพื่อการแสดงออกแลมบ์ดา Java8 (aka ฟังก์ชั่นที่ไม่ระบุชื่อ)

เวอร์ชันที่ไม่ดี

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

ในการใช้งานสิ่งนี้ตามปกติใน Java8 คุณต้องกำหนดให้กับตัวแปร (หรือส่งไปยัง) ส่วนต่อประสานการทำงานที่เหมาะสมจากนั้นเรียกใช้วิธีการ แต่ในทางเทคนิคแล้วฟังก์ชั่นนี้เป็นเพียงการแสดงออกแลมบ์ดาเท่านั้นดังนั้นฉันจึงนับเท่านั้น

นอกจากนี้ยังต้องใช้พารามิเตอร์อินพุตซึ่งช่วยให้ฉันประหยัดได้ไม่กี่ไบต์เนื่องจากฉันสามารถใช้มันเป็นตัวแปรโลคอลโดยไม่ต้องระบุประเภทของมัน ฉันไม่แน่ใจว่ามันเป็นการโกงหรือไม่ แต่สำหรับฉันแล้วดูเหมือนว่าจะอยู่ในกฎ: ฉันเห็นเพียงคนที่ระบุว่าอนุญาตให้โพสต์ฟังก์ชันได้ไม่ใช่วิธีการเรียกใช้ฟังก์ชันนั้น :) และมันไม่ได้อ่านพารามิเตอร์ดังนั้นฟังก์ชั่นยังคงอยู่ในตัวเอง คุณสามารถส่งผ่านสตริงใด ๆ หรือแม้แต่โมฆะและมันจะยังคงผลิตผลลัพธ์ที่ถูกต้อง

และนี่คือวิธีการใช้งาน:

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

การใช้งาน:

f()

Ungolfed:

def javatuple(n=99):
    if n == 0:
        s = "class Tuple%d {public Object _0"
    else:
        s = javatuple(n-1) + ',_' + str(n)
    print(s%(n+1) + ';}')
    return s

formers:

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

ใน python2 ของคุณให้ตอบบรรทัดสุดท้ายดูเหมือนว่าจะไม่สมบูรณ์: print f(3) ให้: 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 บรรทัดสุดท้ายเป็นผลลัพธ์ มันจะถูกพิมพ์เฉพาะเมื่อคุณเรียกใช้โต้ตอบ
pacholik


2

Groovy, 74 ตัวอักษร

"join ()" ไม่สามารถเอาชนะได้ ... โซลูชั่นใหม่ขอบคุณ @yariash

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

โซลูชันเก่า 78 ตัวอักษร:

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

2
คุณสามารถใช้แทน100.times{} (1..100).each{}
Krzysztof Atłasik

@ yariash ขอบคุณสำหรับคำใบ้!
t0r0X


1

Lua, 128 106 Bytes

ฉันยังคงพยายามหาวิธีการทำงานกับค่าที่พิมพ์โดยตรงและไม่ได้อยู่ในสตริง

แก้ไข: พบบางส่วน! ฉันยังต้องการสตริงสำหรับส่วน "_0, _1 ... " แต่มันก็ดีกว่า :)

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

โซลูชัน 128 ไบต์เก่า

s="class Tuple1 {public Object _0;}"print(s)for i=1,99 do s=s:sub(1,s:find";"-1):gsub("e%d+","e"..i+1)..",_"..i..";}"print(s)end

Ungolfed

s=""
for i=0,99
do
  s=(s..",_"..i)              -- concatenate s with ",_i"
      :gsub("^,",s)           -- remove the leading "," for ",_0"
  -- then print the concatenated string
  print(("class Tuple"..(i+1).." {public Object ")..s..";}")
end

1

Python 3, 111 109 105 ไบต์

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

ไม่ใช่สิ่งที่สั้นที่สุดในโลกฉันแค่เข้าร่วม

แก้ไข 1: ลดลง 2 ไบต์โดยลบ0,ในครั้งแรกrange

แก้ไข 2: ฉันกำลังส่งintไปที่โดยไม่จำเป็นstrแทนที่จะใช้%i... ลงไปที่ 105


ยินดีต้อนรับเริ่มต้นดี! หากสนใจลองใช้range(i)แทนrange(0,i)หรือตั้งแต่ที่คุณใช้rangeสองครั้งให้ลองr=rangeก่อนแล้วจึงอ้างอิงแต่ละการโทรด้วยเพียงr(เช่นเดียวกับโซลูชัน Python อื่น ๆ )
Ray Toal

อืมฉันลืมrangeเริ่มต้นที่ 0 โดยค่าเริ่มต้น อย่างไรก็ตาม 2 ไบต์ที่เพิ่มลงr=range;ในผลลัพธ์เริ่มต้นนั้นมีจำนวนอักขระเท่ากันทั้งหมดฉันได้ลองแล้ว! : D
Issak

ความคิดเห็นเดียวกันกว่าที่ฉันได้Dair : ',_'.join(map(str,range(i)))คือ 7 ไบต์สั้นที่นี่
409_Conflict

1

Mathematica, 130 ไบต์

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

คำแนะนำ: \nสามารถถูกแทนที่ด้วยอักขระบรรทัดใหม่ตามตัวอักษร
LegionMammal978


1

Java, 116

(สำหรับฟังก์ชั่นการพิมพ์เท่านั้น - ตามความเห็นบางอย่างนี่เป็นไปตามกฎ)

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 ไบต์

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

คุณสามารถบันทึกไม่กี่ไบต์โดยสลับ echo เป็นสองเท่าของราคาที่เป็นไปได้:<?php for($i=0;$i<100;$i++){$m.=$i==0?"_$i":",_$i";echo 'class Tuple'.($i+1)." {public Object $m;}\n";}
Samsquanch

1
@Samsquanch นอกจากนี้แทนที่จะใช้echo 'class Tuple'.($i+1)." {public Object $m;}\n";คุณสามารถใช้echo'class Tuple',$i+1," {public Object $m;}\n";ซึ่งสั้นกว่า 3 ไบต์ นอกจากนี้ตามที่เมตาคุณสามารถลบและคิดว่ารหัสของคุณจะได้รับการดำเนินการด้วย<?php php -r "code"นอกจากนี้คุณสามารถทำfor(;++$i<101;)echo"class Tuple$i {public Object ",$m=($m?"$m,":'')."_$i",";}\n";80 ไบต์ (คุณต้องแทนที่\nด้วยขึ้นบรรทัดใหม่จริง) ลองที่นี่: ideone.com/oOzKtP
Ismael Miguel

1

อย่างจริงจัง 55 ไบต์

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

Hexdump (ย้อนกลับได้ด้วย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

ลองออนไลน์!

ใช่บรรทัดใหม่นั้นควรจะอยู่ที่นั่น

คำอธิบาย (ขึ้นบรรทัดใหม่แทนที่ด้วย\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 ไบต์

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

?ควรจะเป็น 0x95 ไบต์ตัวอักษร ทดสอบออนไลน์!

Japt มี:

  • ไวยากรณ์ที่กระชับเพื่อช่วยให้รหัสของคุณสั้นลง
  • การบีบอัดสตริงเพื่อช่วยย่อให้สั้นยิ่งขึ้น
  • ข้อบกพร่องมากมายที่ทำให้คุณต้องการทิ้งคอมพิวเตอร์ของคุณออกไปนอกหน้าต่าง

ฉันไม่สามารถใช้เครื่องหมายอัฒภาคในสตริงได้เนื่องจากฟังก์ชันที่ล้อมรอบต้องการส่งคืนทุกสิ่งหลังจากอัฒภาค นี่ควรเป็น 46 ไบต์เท่านั้น:

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

แต่อนิจจามันไม่ใช่ ฉันจะดูว่าฉันสามารถแก้ไขข้อบกพร่องเหล่านี้ในอีกไม่กี่ชั่วโมงข้างหน้า

มันทำงานอย่างไร

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 โดย ~ 18 เดือน! คุณต้องเพิ่มขึ้นก่อนXโดยวิธี
Shaggy

1

Javascript, 112 110 bytes

2 ไบต์ปิดขอบคุณ@ CᴏɴᴏʀO'Bʀɪᴇɴ

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

Ungolfed:

_=>                                         // anonymous function
    [...Array(100)].map((x,i)=>             // 100 times [0..99]
        `class Tuple${++i} {public Object   // Tuple index + 1
            ${[...Array(i)].map(            // (index + 1) times
                (y,j)=>'_'+j                // _+j with j in [0..index]
            )}                              // Array without join prints comma in between
        ;}`                                 // as literal string
    ).join`\n`                              // display array line by line

1
ฉันคิดว่าคุณสามารถแทนที่${i+1}ด้วย${i++}และแทนที่ด้วย${[...Array(i++)] ${[...Array(i)]
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ ขอขอบคุณฉันได้อัปเดตด้วย++i
ลบ

1

Groovy, 97 ไบต์

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

ลองออนไลน์!


1
คุณสามารถใช้ 100.times {} แทน (1..100) .each {} ซึ่งบันทึกได้ 4 ไบต์
Krzysztof Atłasik

คุณสามารถละเว้นวงเล็บปีกกาในการเข้าร่วม ( join','), ลบช่องว่างหลังจาก println และแทนที่.collect{}ด้วย*.with{}
Krzysztof Atłasik

1

Python 2, 96 ไบต์

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

@DenkerAffe lambdaขอบคุณสำหรับคำแนะนำในการใช้

ขอบคุณ @MathiasEttinger สำหรับjoinความคิด


2
คุณสามารถเล่นกอล์ฟนี้ได้ถึง 111 ไบต์หากคุณใช้แลมบ์ดาในการลดการโทรแทนการกำหนดฟังก์ชั่นนี้:reduce(lambda x,y:'%s,_%s'%(x,y), r(i))
Denker

1
หรือใช้',_'.join(map(str,r(i)))สำหรับการลบเพิ่มเติม 14 ไบต์ (หรือ 15 เนื่องจากคุณเว้นที่ว่างไว้ในreduce)
409_Conflict

1

C ++ 164 159 157 ไบต์ (155 เป็นฟังก์ชันเท่านั้น)

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

นี่เป็นโปรแกรมเต็ม คุณสามารถบันทึก 2 ไบต์ในฟังก์ชั่นในรูปแบบเฉพาะถ้าคุณแทนที่ด้วยint main()void f()

เรียกใช้รหัสใน Ideone

Ungolfed รวมถึงการขยายมาโคร

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

ยินดีต้อนรับสู่การเขียนโปรแกรมปริศนา & รหัสกอล์ฟ! คำตอบแรกที่ดี! หากไม่ได้ระบุไว้เป็นอย่างอื่นในการท้าทายคุณสามารถใช้ฟังก์ชั่นแทนโปรแกรมเต็มรูปแบบได้ตลอดเวลาดังนั้นคุณสามารถบันทึกได้สองสามไบต์โดยทำเช่นนั้น คุณยังต้องรวม iostream tho เนื่องจากจำเป็นสำหรับเอาต์พุต
Denker

นอกจากนี้คุณอาจต้องการที่จะทำในของคุณสำหรับวงจึงไม่ได้มีj=1 if(j)
Ethiraric

@Ethiraric แต่แน่นอน! ช่างเลอะเทอะกันแค่ไหน ฉันเดาว่าฉันให้ความสำคัญกับความคิดเกินไป "อย่าลืมข้ามสิ่งที่เพิ่มเติมในบรรทัดแรก" และจบลงด้วยการเขียนที่แท้จริงเกินไป
sendaran

@sendaran หรืออาจfor(int j=0;++j<=i;)จะประหยัดอีกหนึ่งไบต์
Ethiraric

@Ethiraric ทำเช่นนั้นและลบไบต์พิเศษออกโดยแยกการประกาศตัวแปรซึ่งเปิดใช้งานนิพจน์ว่างอื่น
sendaran
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.