100 Java Tuple sınıfı oluşturun


37

Standart çıktıya yazdığınız bir komut dosyasını veya dilinizin eşdeğer, ile başlayan 100 satır (geçerli) Java kodunu yazın:

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

Son satır ile başlamalı class Tuple100.

Bu , yani bayttaki en kısa kod kazanır!


6
Meydan okumayı kabul ediyorum! Aslında, bunu Java'da yapacağım!
Ashwin Gupta

Bir fonksiyon yazabilir miyim yoksa tam bir program mı olmalı?
Ashwin Gupta

3
Sitede yeniyim, bu yüzden bir betik istendi, ancak fonksiyonlara izin public static void main(String[] args)vermenin geleneksel olduğunu ve Java'nın bunun için kesinlikle bir işlev vermesini önlemek için çok anlamlı olduğunu duydum .
Ray Toal,

1
Harika! Teşekkürler Ray!
Ashwin Gupta

Yeterince küçük değil, ama burası nJava ile yazdığım -tuple jeneratörümü paylaşmak için mükemmel bir yer olduğunu düşünüyorum : github.com/kenzierocks/Tuplocity . Tamamen jenerik tuples üretir!
Octavia Togami,

Yanıtlar:


8

Jolf, 42 bayt

Jelly'i şimdiye kadarki en iyi skorla yenmek için bonus puan kazanıyor muyum? Yazdırılamaz, bu yüzden burada çevrimiçi denemek isteyebilirsiniz . Yazdırılamayanları okunabilirlik için kendi alt indeksleriyle değiştirdim.

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

açıklama

‼Μ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
Sanırım. Yeni bir skor daha sonra gelirse, bu sitede kabul edilen cevabı değiştirmek uygun mudur?
Ray Toal

6
@ RayToal Evet, uygun ve hatta bunu yapması önerildi.
Conor O'Brien,

Bunun için karakter kodlaması nedir? Golf dillerinin sıklıkla kendi kodlamasını kullandığını biliyorum, ancak hangi kodlamanın jolf kullandığını göremiyorum. Bunun eski olduğunu anladım.
Özyinelemeli

@ recursive Yunan ISO-8859-7, bu bir: en.wikipedia.org/wiki/ISO/IEC_8859-7
Conor O'Brien

23

vim 56 54 tuş vuruşlarını

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

V geriye dönük olarak uyumlu olduğundan, çevrimiçi olarak deneyebilirsiniz!

Bu vim için mükemmel bir görev! Biraz sonra daha golf oynarım. Ayrıca <c-a>, Kontrol-A anlamına geldiğini ve bir tuş vuruşu olarak sayıldığını unutmayın .

Açıklama:

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
Bir tuş olarak Kontrol-A sayarsak, sen yerine olabilir yytarafından Y.
16'da 21

1
@Seeq Haha, Ben de aynı şeyi fark ettim ve yorumunuzu görmeden hemen önce düzeltdim. Büyük beyinler aynı şekilde düşünüyor!
DJMcMayhem

Bu , soru sorduğu gibi class Tuple101değil class Tuple100gibi olacak .
numbermaniac

1
@ sayı_maniac Basit kapalı bir hata. Bunu işaret ettiğin için teşekkürler! Şimdi düzeltildi :)
DJMcMayhem

10

Jöle, 44 bayt

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

İlk Jelly cevabım. Çevrimiçi deneyin!


Yanlış mı yapıyorum yoksa bu sadece bir dize yerine dev bir liste çıktı mı?
Denker

@DenkerAffe Şimdi çalışıyor gibi görünüyor! Jelly’de geçici bir hata vardı. (Ayrıca, bağlantı çözümümün eski bir versiyonuydu, bu yüzden güncelledim.)
Lynn

Güzel ... şu an itibariyle CJam çözümünden 9 byte daha kısa!
Ray Toal,

8

Pyth, 53 50 48 bayt

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

Çevrimiçi deneyin!

Aralık boyunca basit yineleme (1.100) ve uygun dize paketlenmiş bir dizgeden biçimlendirme yoluyla oluşturma.

açıklama

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

VS100 # Aralık boyunca tekrar eder (1.100)
     %. "} SüQ´´3Ô«% & a´4UçõÛ "# Dizeyi açın ve biçimlendirin
                              [# Bağımsız değişkenleri biçimlendirme listesi
                               N # Tuple Sayısı
                                j UN # Nesne numaralarına katılın ...
                                 ", _" # ... seperatörde ", _"

Ambalajsız dize class Tuple%i {public Object _%s;}


İki golf: s[Bunların yerine kullanın +. [isteğe bağlı bir uzunluk listesi yapar ve sbirleştirir. Ayrıca, istediğinden [1, 2, ... 100], [0, 1, .. 99]kullanmayacağından VS100ve ikisine de ihtiyacın olmayacak h.
isaacg

@isaacg Teşekkürler, -trick hakkında bilmiyordum S! :) Zaten hepsinden kurtulmak için oturuyordum, daha ++++iyi bir yol olduğunu biliyordum.
Denker

Rica ederim. Bu arada, "gereksiz yere bir iz eklemiş gibisin.
isaacg,

1
@ isaacg Herhangi bir sebep j<str><int>yok Umu?
lirtosiast,

1
Hayır gerçek değil. Yapacağım.
isaacg,

7

CoffeeScript, 86 84 bayt

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

Çözümü çevrimiçi olarak görüntüleyin


PPCG'ye Hoşgeldiniz! Sadece size cevapları iyileştiren düzenlemelerin genellikle kaşlarını çattığını bildirmek için (ve inceleme kuyruğunda sona ererse reddedilmesi gerekir). Dolayısıyla, insanların önerileri ile yorum yapma olasılığı daha yüksektir, bu nedenle bunları kendiniz inceleyebilirsiniz. :) (Gerçek ipuçlarına gelince, önündeki forveya sonrasındaki boşluğa ihtiyacınız olmadığını düşünüyorum in.)
Martin Ender

Çalışıyor console.log"mu (Kahve senaryosunu bilmiyorum, bu genel bir hiledir.
Addison Crump

Hayır, olduğu gibi, boşluğu kaldırmak. : PI var olduğunu biliyorum, bunun geçerli bir sözdizimi olup olmadığını bilmiyorum.
Addison Crump,

@VoteToClose Bunu daha önce denedim (coffeescript.org üzerindeki live transpiler kullanarak ve çalışmadı).
Martin Ender

@VoteToClose Oh üzgünüm bunu görmedim. Hayır. Her nasılsa, dilbilgisi için alan gerekli, ama neden (henüz) tam olarak belli değil. Boşluk, CoffeeScript'te çok önemlidir, örneğin, x? y:ztamamen farklıdır x ? y:z. Söyleyebilirsiniz console.log?"hello"ama değil console.log"hello". Önemli boşluk. Bazen güzel bazen garip.
Ray Toal

7

Java, 160 , 125 Bayt

İyileştirmeler için @DenkerAffe, @Denham Coote ve @Mathias Ettinger'a teşekkürler.

Java yazma java (çünkü biri zorunda!)

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

Ve un-golfed versiyonu

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

2
Programlama Bulmacaları ve Kod Golf'üne Hoş Geldiniz! Zorlukta aksi belirtilmediği sürece, tam programlar yerine fonksiyonları kullanabilirsiniz. Bu yüzden, size her şeyi kurtarmak için bir Java8-lambda (sonucu döndürür) kullanmalısınız public static void main....
Denker

4
PPCG'ye Hoşgeldiniz. Bu cevap, Nesne bildirimlerinin sonunda fazladan bir virgül içerir ...class Tuple1 {public Object _0,;} class Tuple2 {public Object _0,_1,;}
Denham Coote

3
Döngü sayacınızı (i + 1) yerine sysout'ta (++ i) artırarak i++ve for loop ayarından kaldırarak daha fazla 3 bayt kaydedebilirsiniz
Denham Coote

Başlamalı ve String s = "_0"böylelikle s += ",_" + ibir byte tasarruf etmelisiniz Ayrıca takip eden komada problemi çözecektir. For döngüsünden 1daha küçük bir süreye başlamanız gerekecek 101ve fazladan bir 4 baytı çıkartarak (i+1)çıktı iletinizi yalnızca 'a dönüştürerek başlamanız gerekecektir i. Açıkçası, yazdırmak gerekir önce artan s.
409_Conflict

Teşekkürler, tüm bunları yaptım ve kesinlikle java8-lambda'da bir hayranı olacağım.
SoloKix

6

Oracle SQL 9.2, 138 137 Bayt

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

@Peter 0/1 hatasını işaret ettiğiniz için teşekkür ederiz.

Sorgu, 100 satır oluşturmak için CONNECT BY CLAUSE hiyerarşik sorgusunu kullanır.

LEVEL sözde sütunu her satırın satır numarasını içerir.

SYS_CONNECT_BY_PATH, her bir satırın ilk parametresini, satır numarasını birleştirir ve ayırıcı olarak ikinci parametreyi kullanır.


lütfen bir açıklama ekleyiniz
Eumel

Zeki :) Bu, Object _1onun yerine başlar Object _0, böylece başka bir iki bayt ( -1) alacaktır . Bununla birlikte, _kutu SYS_CONNECT_BY_PATHbirleştirmek yerine karaktere eklenebilir , tekrar bu iki bayt azaltılabilir:REPLACE('class Tuple'||LEVEL||' {public Object'||SYS_CONNECT_BY_PATH(LEVEL-1,',_')||';}','t,_','t _')
Peter Lang

6

Toplu iş, 128 bayt

@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

Düzenleme: @Bob sayesinde 10 bayt kaydedildi. @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ sayesinde 1 byte kaydedildi.


3
Kod golf'ünde toplu iş gördüğüm için her zaman çok mutlu oluyorum, ayrıca, her yerde @ kullanmak yerine, çıktıyı x adlı bir dosyaya eklemek için yönlendirebilir ve çıktı olarak kullanabilirsiniz
Dennis van Gils

@DennisvanGils Ne yazık ki komutlar standart çıktıya yankılanıyor.
Neil

Elendi enabledelayedexpansion117 bayt için: gist.github.com/Elusive138/4cea555114a979954dcb - Eğer kaldırarak iki tane daha kaydedebilirsiniz kapanış konsol penceresi sakıncası yoksa /bgelen arg exit.
Bob

@ Neil lol tamam ben sadece çalışan çalıştı ve şimdi ne yaptığını anlıyorum. Çok zeki.
Ashwin Gupta

Başlangıçta, kullanın@echo off
Elliot A.


5

Powershell - 65 bayt

(Yoruma cevap olarak değiştirildi)

TimmyD'ye tüm kredi

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

Neden oy kullanmıyorsun? (Lütfen bu benim ilk gönderim, harika bir karşılama değil mi?)
bulletprooffool


4

R - 199 132 123 118 bayt

4. versiyon

p=paste0;for(i in 1:10)cat(p("class Tuple",i," {public Object ",toString(sapply(0:(i-1),function(x)p("_",x))),";}\n"))

Sürüm 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"))

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

Versiyon 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
Programlama Bulmacaları ve Kod Golf'üne Hoş Geldiniz! Bu bir kod golf yarışması olduğundan, kodunuzu mümkün olduğu kadar kısa yapmak istersiniz. Değişken isimlerini her biri tek bir karaktere kısaltarak, boşlukları kaldırarak ve =yerine atama için kullanmaya başlayabilirsiniz <-.
Alex A. 17

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

Sorun değil. :) Ayrıca, revizyon geçmişine "X dakika önce düzenlenen" yazan bir bağlantıyla erişilebildiğinden, posta gövdesindeki sürümlerinizi takip etmeniz gerekmez.
Alex A. 19

(düzenleme özetlerinizde veya gönderimde bazı revizyonların yapılmasının bazı belirtiler göstermesi faydalı olabilir, ancak diğer revizyon işlemlerinden öğrenebilecekleriniz için her revizyonda nelerin değiştiğini göreceksiniz)
quintopia 19

4

Ruby, 71 bayt

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

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

4

Java, 103 bayt

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

Buradaki ilk seferim. Merhaba! Bir Java8 lambda ifadesi (yani anonim bir işlev) için gittim.

Ungolfed versiyonu

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

Bunu aslında kullanmak için, her zamanki gibi Java8'de, uygun bir işlevsel arabirim değişkenine atamanız (ya da ona kullanacağınız) ve ardından yöntemini çağırmanız gerekir; ancak teknik olarak, işlev yalnızca lambda ifadesinin kendisidir, bu yüzden yalnızca bunu sayıyorum.

Ayrıca türünü belirtmek zorunda kalmadan yerel değişken olarak kötüye kullanabildiğim için bana birkaç bayt kazandıran bir giriş parametresi gerektirir. Hile olarak kabul edilip edilmediğinden emin değilim, ancak bana kurallar dahilinde gözüküyor: İnsanlara sadece bir işlevin gönderilmesine izin verildiğini, bu işlevin nasıl çağrılması gerektiğini belirtmediğini gördüm . :) Ve aslında parametreyi okumuyor, bu yüzden fonksiyon hala kendi kendine yetiyor; Herhangi bir String'i, hatta boş olanları aktarabilirsiniz ve yine de doğru çıktıyı üretecektir.

Ve işte nasıl kullanılacağı:

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

Kullanımı:

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

şekillendiricileri:

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 cevabınızda son satır eksik görünüyor: print f(3) verir: 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 Son satır bir sonuçtur. Yalnızca etkileşimli çalıştırdığınızda yazdırılır.
pacholik


2

Harika, 74 karakter

"join ()" rakipsiz ... @yariash sayesinde yeni çözüm

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

Eski çözüm, 78 karakter:

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

2
Sen kullanabilirsiniz 100.times{}yerine (1..100).each{}.
Krzysztof Atłasik

@yariash İpucu için teşekkürler!
t0r0X

1

Julia, 77 bayt

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

1

Lua, 128 106 Bayt

Hala bir dizide değil doğrudan basılı bir değer üzerinde çalışmanın bir yolunu bulmaya çalışıyorum.

Düzenleme: Kısmen buldu! Hala "_0, _1 ..." kısmı için bir dizgeye ihtiyacım var, ama zaten daha iyi :).

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

Eski 128 Bayt çözümü

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 bayt

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

Bu dünyadaki en kısa şey değil, sadece katılıyorum.

edit1: kaldırarak 2 bayt aşağı 0,ilkrange

edit2: Ben gereksiz yere döküm edildi intiçin stryerine kullanmanın %i... Aşağı 105'e.


Hoşgeldin, güzel başlangıç! İlgileniyorsanız, range(i)yerine range(0,i)veya rangeiki kez kullandığınızdan beri deneyin, daha önce deneyin ve r=rangeher çağrıyı sadece r(diğer Python çözümlerinde olduğu gibi) yapın.
Ray Toal

Ugh, rangevarsayılan olarak 0'da başladığını unuttum . 2 bayttan aşağı, ancak, r=range;başlangıçtaki sonuçlara tamamen aynı karakter sayımını ekleyerek bunu denedim! : D
Issak

Dair'e yaptığım yorumla aynı : ',_'.join(map(str,range(i)))7 bayt daha kısa.
409_Conflict

1

Mathematica, 130 Bayt

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

İpucu: \ndeğişmez bir yeni satır karakteriyle değiştirilebilir.
LegionMammal978

1

Scala, 85 Bayt

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

1

Java, 116

(yalnızca yazdırma işlevi için - bazı yorumlara göre, bu kurallara uygun)

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 bayt

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

<?php for($i=0;$i<100;$i++){$m.=$i==0?"_$i":",_$i";echo 'class Tuple'.($i+1)." {public Object $m;}\n";}
Echo'ları

1
@Samsquanch Ayrıca, yerine , 3 bayt daha kısa olan echo 'class Tuple'.($i+1)." {public Object $m;}\n";kullanabilirsiniz echo'class Tuple',$i+1," {public Object $m;}\n";. Ayrıca, <?phpmetaya göre, kodunuzu kaldırabilir ve kodunuzun çalıştırılacağını varsayabilirsiniz php -r "code". Ayrıca, for(;++$i<101;)echo"class Tuple$i {public Object ",$m=($m?"$m,":'')."_$i",";}\n";80 bayt için yapabilirsiniz ( \ngerçek bir yeni satır ile değiştirmeniz gerekir ). Burada deneyin: ideone.com/oOzKtP
Ismael Miguel

1

Cidden, 55 bayt

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

Hexdump (ile geri dönüşümlü 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

Çevrimiçi deneyin!

Evet, bu yeni hattın orada olması gerekiyordu.

Açıklama (newline ile değiştirilen \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 bayt

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

?Literal bayt 0x95 olmalıdır. Çevrimiçi test edin!

Japt'de:

  • kodunuzu kısaltmanıza yardımcı olacak özlü sözdizimi .
  • daha da kısaltmak için dize sıkıştırma .
  • bilgisayarınızı pencereden atmak istediğiniz birçok hata vardır .

Dizgede noktalı virgül bile kullanamıyorum, çünkü sarılı işlevi noktalı virgülten sonra her şeyi döndürmek istiyor. Bu sadece 46 bayt olmalıdır:

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

Ama ne yazık ki değil. Gelecek birkaç saat içinde bu hataları giderebilir miyim bakarım.

Nasıl çalışır

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! ~ 18 ay Ninjaed! Bu Xarada , ilkini arttırmalısın .
Shaggy

1

Javascript, 112 110 bayt

2 bayt kapalı @ 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
Ben değiştirmek düşünüyorum ${i+1}ile ${i++}ve değiştirme ${[...Array(i++)]ile ${[...Array(i)].
Conor O'Brien,

CᴏɴᴏʀO'Bʀɪᴇɴ @. Teşekkürler, ile güncellendi++i
kaldırıldı

1

Groovy, 97 bayt

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

Çevrimiçi deneyin!


1
4 bayt kaydeden (1..100) .each {} yerine 100.times {} kullanıcısını kullanabilirsiniz.
Krzysztof Atłasik

Ayrıca (birleştirme ayraçları çıkarabilseniz join',') println sonra kaldır alan ve yerini .collect{}ile*.with{}
Krzysztof Atłasik

1

Python 2, 96 Bayt

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

Kullanım öneriniz için @DenkerAffe teşekkürler lambda.

Fikir için @MathiasEttinger teşekkür ederiz join.


2
Bunun için bir işlev tanımlamak yerine azaltma çağrınızda bir lambda kullanırsanız bunu 111 bayta kadar golf edebilirsiniz:reduce(lambda x,y:'%s,_%s'%(x,y), r(i))
Denker

1
Veya ',_'.join(map(str,r(i)))fazladan 14 baytlık bir kaldırma işlemi için kullanın (veya içinde 15 fazla boşluk bıraktığınızdan 15 reduce).
409_Conflict

1

C ++ 164 159 157 bayt (yalnızca işlev olarak 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";}}

Bu tam bir programdır. Eğer değiştirirseniz sadece oluştururlar işlevinde 2 bayt kaydedebilirsiniz int main()ile void f().

Ideone'da kod çalıştır

Ungolfed, makro genişlemesi dahil

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

Programlama Bulmacaları ve Kod Golf'üne Hoş Geldiniz! Güzel ilk cevap! Mücadelede aksi belirtilmediği sürece, tam programlar yerine işlevleri her zaman kullanabilirsiniz, böylece bunu yaparak birkaç bayttan tasarruf edebilirsiniz. Çıktı için gerekli olduğundan, hala iostream tho'yi dahil etmek zorundasınız.
Denker,

Ayrıca j=1, sizin için döngü içinde yapmak isteyebilirsiniz , bu yüzden sahip değil if(j).
Ethiraric

@Ethiraric Ama elbette! Ne kadar özensiz benden. Sanırım "ilk satırdaki ekleri atlamayı unutma" fikrine odaklandım ve kelimenin tam anlamıyla yazmaya başladım.
sendaran

@sendaran Ya da for(int j=0;++j<=i;)bir bayt daha tasarruf edersiniz .
Ethiraric,

@Ethiraric Bunu yaptı ve başka bir boş ifade sağlayan değişken bildirimleri ayıklayarak fazladan bir bayt temizledi.
sendaran
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.