Генерация 100 классов Java Tuple

37

Напишите скрипт, который записывает в стандартный вывод или эквивалентный вашему языку 100 строк (допустимого) кода Java, который начинается с:

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!
Эшвин Гупта
Могу ли я написать функцию или она должна быть полной программой?
Эшвин Гупта
3
Я новичок на сайте, поэтому попросил сценарий, но я слышал, что принято разрешать функции, и это имеет большой смысл для Java, чтобы избежать, public static void main(String[] args)безусловно, дать функцию, если хотите.
Рэй Тоал
1
Большой! Спасибо, Рэй!
Эшвин Гупта
Это не так уж мало, но я думаю, что это идеальное место, чтобы поделиться своим nгенератором -tuple, который я написал на Java: github.com/kenzierocks/Tuplocity . Он генерирует полностью общие кортежи!
Октавия Тогами

Ответы:

8

Джольф, 42 байта

Получу ли я бонусные баллы за избиение желе с лучшим результатом когда-либо? Содержит непечатные, поэтому вы можете попробовать это онлайн здесь . Я заменил непечатные надписи на соответствующие им индексы 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
Я предполагаю. Правильно ли на этом сайте изменить принятый ответ, если позже появится новая оценка?
Рэй Тоал
6
@RayToal Да, это правильно и даже предлагается сделать это.
Конор О'Брайен,
Какая кодировка символов для этого? Я знаю, что языки игры в гольф часто используют свою собственную кодировку, но я не понимаю, какую кодировку может использовать jolf. Я понимаю, что это старый.
рекурсивный
@recursive Греческий ISO-8859-7, этот: en.wikipedia.org/wiki/ISO/IEC_8859-7
Конор О'Брайен,
23

vim 56 54 нажатия клавиш

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

Поскольку V имеет обратную совместимость, вы можете попробовать это онлайн!

Это идеальное задание для vim! Я мог бы сыграть в гольф чуть позже. Также обратите внимание, что это <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.
DJMcMayhem
источник
1
Если вы считаете Control-A одним нажатием клавиши, вы можете заменить его yyна Y.
Seequ
1
@ Seee Haha, я только что понял то же самое и отредактировал это прямо перед тем, как я увидел твой комментарий. Великие умы думают одинаково!
DJMcMayhem
Кажется, это происходит class Tuple101, class Tuple100а не как вопрос.
Числовой маньяк
1
@numbermaniac Простая ошибка. Спасибо что подметил это! Исправлено сейчас :)
DJMcMayhem
10

Желе, 44 байта

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

Мой первый желе ответ. Попробуйте онлайн!

Линн
источник
Я делаю это неправильно или это просто выводит гигантский список вместо строки?
Денкер
@DenkerAffe Кажется, сейчас работает! В Желе была временная ошибка. (Кроме того, ссылка была на старую версию моего решения, поэтому я обновил ее.)
Линн
Хорошо ... на данный момент он на 9 байт короче, чем решение CJam!
Рэй Тоал
8

Pyth, 53 50 48 байтов

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

Попробуйте онлайн!

Простая итерация по диапазону (1100) и построение соответствующей строки из упакованной строки путем ее форматирования.

объяснение

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

VS100 # Итерация по диапазону (1100)
     %. "} SüÆðQ´Ó3Ô«% & a´4UçõÛ "# Распакуйте строку и отформатируйте ее
                              [# Список для форматирования аргументов
                               N # номер кортежа
                                j UN # Соединить номера объектов ...
                                 ", _" # ... на разделитель ", _"

Распакованная строка class Tuple%i {public Object _%s;}

Denker
источник
Два гольфа: используйте s[вместо всех этих +. [создает список произвольной длины и sобъединяет его. Кроме того, так как вы хотите [1, 2, ... 100], а не [0, 1, .. 99], используйте VS100, и вам тоже не понадобится h.
Исаак
@isaacg Спасибо, не знал про Sтрюк! :) Уже сидел на избавлении от всего ++++, я знал, что есть лучший способ.
Денкер
Пожалуйста. Кстати, вы, кажется, добавили трейлинг "без необходимости.
Исаак
1
@isaacg Есть ли причина, почему j<str><int>нет U?
lirtosiast
1
Нет, не совсем. Сделаю.
Исаак
7

CoffeeScript, 86 84 байта

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

Посмотреть решение онлайн

Рэй Тоал
источник
Добро пожаловать в PPCG! Просто чтобы вы знали, что правки, улучшающие ответы, обычно не одобряются (и должны быть отклонены, если они окажутся в очереди на проверку). Таким образом, более вероятно, что люди будут комментировать с предложениями, так что вы можете просмотреть их самостоятельно. :) (Что касается реальных советов, я думаю, что вам не нужно ни места перед, forни после in).
Мартин Эндер
Работает ли console.log"? (Не знаю сценарий кофе, это общий трюк.
Addison Crump
Нет, как в удалении места. Я знаю, что он существует, я просто не знаю, правильный ли это синтаксис.
Эддисон Крамп
@VoteToClose Я пробовал это раньше (используя живой транспортер на coffeescript.org, и это не сработало).
Мартин Эндер
@VoteToClose Ой извините, не видел этого. Нет. Как-то пространство требуется грамматикой, но мне не совсем понятно, почему (пока). Интервал очень важен, например, в CoffeeScript, x? y:zон полностью отличается от x ? y:z. Вы можете сказать, console.log?"hello"но нет console.log"hello". Значительные пробелы. Иногда приятно, иногда странно.
Рэй Тоал
7

Java, 160 , 125 байт

Спасибо @DenkerAffe, @Denham Coote и @Mathias Ettinger за улучшения.

Ява пишет 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;
        }
    }
SoloKix
источник
2
Добро пожаловать в Программирование Пазлов и Code Golf! Если в задании не указано иное, вы всегда можете использовать функции вместо полных программ. Таким образом, вы должны использовать Java8-лямбду (которая возвращает результат) здесь, чтобы сохранить вам все public static void main...вещи.
Денкер
4
Добро пожаловать в PPCG. Этот ответ включает дополнительную запятую в конце объявления объекта ...class Tuple1 {public Object _0,;} class Tuple2 {public Object _0,_1,;}
Denham Coote
3
Вы можете сохранить еще 3 байта, увеличив счетчик циклов в sysout (++ i) вместо (i + 1) и удалив i++из настройки цикла for
Denham Coote
Вы должны начать свой, String s = "_0"так что вы можете s += ",_" + iи сохранить байт. Это также решит проблему с вялой комой. Вам нужно будет запустить цикл for с 1меньшим, чем, 101и вы сможете удалить лишние 4 байта, преобразовав только (i+1)в ваше выходное сообщение i. Очевидно, вам нужно будет распечатать перед увеличением s.
409_конфликт
Спасибо, сделали все это, и я определенно собираюсь познакомиться с 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.

Запрос использует CONNECT BY CLAUSE иерархического запроса для генерации 100 строк.

Псевдостолбец LEVEL содержит номер строки каждой строки.

SYS_CONNECT_BY_PATH объединяет первый параметр, номер строки каждой строки и использует второй параметр в качестве разделителя.

школа для водителей
источник
пожалуйста, добавьте некоторые объяснения
Eumel
Умный :) Это начинается с Object _1вместо Object _0, так что потребуется еще два байта ( -1). Тем не менее, _можно добавить к символу SYS_CONNECT_BY_PATHвместо конкатенации, снова уменьшив его на два байта:REPLACE('class Tuple'||LEVEL||' {public Object'||SYS_CONNECT_BY_PATH(LEVEL-1,',_')||';}','t,_','t _')
Питер Лэнг,
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 и использовать его в качестве вывода
Деннис ван Гилс
@DennisvanGils К сожалению, команды выводятся на стандартный вывод.
Нил
Исключено enabledelayedexpansionна 117 байт: gist.github.com/Elusive138/4cea555114a979954dcb - если вы не возражаете против закрытия окна консоли, вы можете сохранить еще два, удалив /bаргумент из exit.
Боб
@ Нил, лол, ладно, я попробовал запустить его, и теперь я понимаю, что ты сделал. Очень умно.
Эшвин Гупта
В начале используйте@echo off
Эллиот А.
5

Powershell - 65 байт

(Исправлено в ответ на комментарий)

Все заслуги перед TimmyD

1..100|%{"class Tuple$_ {public Object _$(0..($_-1)-Join",_");}"}
bulletprooffool
источник
Почему голосование вниз? (Обратите внимание, что это мой первый пост, не очень хороший прием?)
bulletprooffool
5

Perl 6, 65 bytes

say "class Tuple$_ \{public Object _{join ',_',^$_};}" for 1..100
Brad Gilbert b2gills
источник
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
Добро пожаловать в Программирование Пазлов и Code Golf! Поскольку это соревнование по коду для игры в гольф, вы должны сделать свой код максимально коротким. Вы можете начать с сокращения имен переменных до одного символа, удаления пробелов и использования =вместо присваивания <-.
Алекс А.
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")}
Алекс А.
Нет проблем. :) Кроме того, вам не нужно отслеживать ваши версии в теле поста, так как история изменений доступна по ссылке с надписью «отредактировано X минут назад».
Алекс А.
(хотя может быть целесообразно указать в ваших сводках по редактированию или в посте некоторые сведения о том, что вы изменяли с каждой редакцией, чтобы другие могли извлечь уроки из процесса вашей редакции)
Quintopia
4

Рубин, 71 байт

100.times{|i|puts"class Tuple#{i+1} {public Object _#{[*0..i]*',_'};}"}
daniero
источник
2
TIL [*0..i]*',_'вау
Рэй Тоал
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 (анонимная функция).

Неуправляемая версия

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); 
    }
}
FireballStarfish
источник
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

формирователи:

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 последняя строка кажется неполной: give 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 Последняя строка - результат. Он печатается только в интерактивном режиме.
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',_'};}"}
t0r0X
источник
2
Вы можете использовать 100.times{}вместо (1..100).each{}.
Кшиштоф Атласик
@yariash Спасибо за подсказку!
t0r0X
1

Юлия, 77 байт

for i=1:100;println("class Tuple$i {public Object _$(join(0:i-1,",_"));}")end
Рэй Тоал
источник
1

Луа, 128 106 байт

Я все еще пытаюсь найти способ напрямую работать с печатным значением, а не со строкой.

Редактировать: Частично нашел это! Мне все еще нужна строка для части "_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
Katenkyo
источник
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)]

Это не самая короткая вещь в мире, я просто участвую.

edit1: вниз 2 байта, удаляя 0,в первую очередьrange

edit2: Я был излишне кастинг , intчтобы strвместо того , чтобы просто используя %i... вниз до 105.

Иссак
источник
Добро пожаловать, хорошее начало! Если интересно, попробуйте range(i)вместо range(0,i)или, так как вы использовали rangeдважды, попробуйте r=rangeпораньше, а затем обращайтесь к каждому вызову просто r(как в других решениях Python).
Рэй Тоал
Тьфу, я забыл, rangeначинается с 0 по умолчанию. Однако на 2 байта меньше, добавление r=range;в начале приводит к тому же количеству символов, что я пробовал! : D
Иссак
Тот же комментарий, что я сделал с Dair :',_'.join(map(str,range(i))) здесь на 7 байт короче.
409_конфликт
1

Mathematica, 130 байт

{"class Tuple",ToString[#]," {public Object ",StringReplace[ToString[#-1&/@Range@#],{" "|"{" ->"_","}"->";}\n"}]}&/@Range[100]<>""
Симмонс
источник
Подсказка: \nможно заменить буквальным символом новой строки.
LegionMammal978
1

Скала, 85 байт

for(u<-1 to 100)println(s"class Tuple$u {public Object _${0 to u-1 mkString ",_"};}")
Джо Бейн
источник
1

Ява, 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;}}
}
Marco13
источник
1

PHP, 112 байт

<?php for($i=0;$i<100;$i++){$m.=$i==0?'_'.$i:',_'.$i;echo 'class Tuple'.($i+1).' {public Object '.$m.';}<br/>';}
gumione
источник
Вы можете сэкономить несколько байтов, переключив эхо на двойные кавычки, где это возможно:<?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
Исмаэль Мигель
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. Проверьте это онлайн!

Джапт имеет:

  • краткий синтаксис, чтобы помочь сократить ваш код.
  • сжатие строк, чтобы сократить его еще больше.
  • множество ошибок, заставляющих вас захотеть выбросить компьютер в окно.

Я даже не могу использовать точку с запятой в строке, потому что функция, в которую она помещена, хочет вернуть все после точки с запятой. Это должно быть только 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.
ETHproductions
источник
Ба! Ninjaed ~ 18 месяцев! XКстати, вам нужно увеличить первое .
Лохматый
1

Javascript, 112 110 байт

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)].
Конор О'Брайен
@ 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 байта.
Кшиштоф Атласик
Вы также можете опустить фигурные скобки в join ( 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идею.

Dair
источник
2
Вы можете увеличить это до 111 байт, если вы используете лямбду в своем сокращенном вызове вместо определения функции для этого:reduce(lambda x,y:'%s,_%s'%(x,y), r(i))
Денкер
1
Или используйте ',_'.join(map(str,r(i)))для удаления лишних 14 байтов (или 15, так как вы оставили дополнительное место в вашем reduce).
Конфликт 409
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";
    }
}
sendaran
источник
Добро пожаловать в Программирование Пазлов и Code Golf! Хороший первый ответ! Если в задании не указано иное, вы всегда можете использовать функции вместо полных программ, поэтому вы можете сэкономить несколько байтов, выполняя это. Вы все еще должны включить iostream tho, так как он необходим для вывода.
Денкер
Вы можете также захотеть сделать j=1в вашем цикле for, таким образом, не имея if(j).
Ethiraric
@Ethiraric Но конечно! Как небрежно с моей стороны. Я думаю, я слишком сосредоточился на идее «не забудьте пропустить дополнения в первой строке» и закончил тем, что писал это слишком буквально.
Сендаран
@sendaran Или, может быть for(int j=0;++j<=i;), сэкономит еще один байт.
Ethiraric
@Ethiraric Сделал это и сбрил лишний байт, извлекая объявления переменных, что позволило использовать другое пустое выражение.
Сендаран