Используйте любой язык программирования для отображения чисел от 1 до 99 (включая оба) таким образом, чтобы:
- числа разделены одним пробелом,
- если число делится на 3, оно должно быть в скобках,
- если число делится на 4, оно должно быть в квадратных скобках,
- если число делится на 3 и 4, оно должно быть в скобках и в квадратных скобках (квадратные скобки должны быть ближе к числу).
Ваша программа должна отображать точно:
1 2 (3) [4] 5 (6) 7 [8] (9) 10 11 ([12]) 13 14 (15) [16] 17 (18) 19 [20] (21) 22 23 ([24]) 25 26 (27) [28] 29 (30) 31 [32] (33) 34 35 ([36]) 37 38 (39) [40] 41 (42) 43 [44] (45) 46 47 ([48]) 49 50 (51) [52] 53 (54) 55 [56] (57) 58 59 ([60]) 61 62 (63) [64] 65 (66) 67 [68] (69) 70 71 ([72]) 73 74 (75) [76] 77 (78) 79 [80] (81) 82 83 ([84]) 85 86 (87) [88] 89 (90) 91 [92] (93) 94 95 ([96]) 97 98 (99)
code-golf
kolmogorov-complexity
Monolica
источник
источник
Ответы:
05AB1E , 23 байта
-1 байт благодаря Кевину Круйссену
Попробуйте онлайн!
источник
}?ð?
на]ðý
(закройте и цикл if, и цикл, и соедините весь стек пробелами)Å€
Python 2 ,
686560 байтПопробуйте онлайн!
источник
R 61 байт
Попробуйте онлайн!
источник
Желе ,
2120 байтПопробуйте онлайн!
Как это устроено
источник
D , 110 байт
Попробуйте онлайн!
Портировано из ответа C ++ от @ HatsuPointerKun.
источник
Древесный уголь , 30 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
J ,
5453 байтаНа 1 байт меньше благодаря @Jonah
Попробуйте онлайн!
источник
stdout
здесь ... Я никогда не видел этого раньше. @FrownyFrog#
. Я представил вспомогательный глагол для объемного звучания с()
и[]
:g=. {.@[ , ":@] , {:@[
. тьфу многословие!LF
вместо_
. последний, похоже, тоже работает.C, C ++,
136133131129128124 байтов-5 байт благодаря Zacharý и вдохновлены функцией write () на языке D (см. Zacharý ответ)
-2 байта благодаря Мриклойн
-12 байт для версии C благодаря Мриклойн
-4 байта благодаря потолку
Специфичная оптимизация: 115 байт
источник
inf f()
это? Извините, но яprintf
вещь. Не могли бы вы тогда использовать C stdio?int i
внешнюю функцию (в глобальной области видимости), то ее значение по умолчанию равно 0, а тип данных по умолчанию равенint
. Это приведет к тому, что ваш цикл начнется с 0, и чтобы исправить это, вы можете переместить приращение в выражение условия в цикле for, чтобы оно выглядело какi;f(){for(;++i<=99;)
")\0"+i%3
вместоi%3?"":")"
. Кроме того, я думаю, что вы должны добавитьi=0
в начале цикла.Powershell, 60 байт
Объяснение:
$_, "($_)", "[$_]", "([$_])"
[!($_%3)+2*!($_%4)]
Менее гольф-тестовый сценарий:
Выход:
источник
MathGolf ,
41403429 байтПРИМЕЧАНИЕ: у него есть пробел
Только мой второй ответ MathGolf.
-5 байтов благодаря @JoKing .
Попробуйте онлайн.
Объяснение:
источник
q
можно опустить, и это делается неявно в циклах. Кроме того, не знал, что есть 2/3/4-струнная встроенная. Жаль, что трюк поворота не работает с обернутым массивом.Haskell , 77 байт
Попробуйте онлайн!
Интересно,
show[n]
может ли быть использован, чтобы сократить вещи, пока безрезультатно .источник
Lua,
161123 байтаПопробуйте онлайн!
Ungolfed:
источник
Python 2 ,
1059788868584 байтаПопробуйте онлайн!
источник
C (gcc) , 84 байта
В начале каждой "строки скобок" есть нулевой байт.
Попробуйте онлайн!
источник
PowerShell ,
6762 байтаПопробуйте онлайн!
В основном это FizzBuzz, использующий логические переменные умножения строк (неявно приведенный к 1 или 0). Эти строки остаются в конвейере и собираются внутри блока скрипта внутри кавычек. Поскольку по умолчанию
$OutputFieldSeparator
для массива используются пробелы, это неявно дает нам разделенные пробелами элементы массива.источник
C #,
124117123 байта-5 байт благодаря Кевину Круйссену
Тест с:
источник
x
вместоi
, таким образом, не нужно беспокоиться оint
? (Вы все равно должны были бы установить его, конечно).i
и тот факт, что я могу инициализировать его в 0, когда яInvoke
. Но разве это не значит, что я должен был бы включить объявление t (Action<int>
) и call (t.Invoke(0)
) в счетчик байтов?x=>{for(x=0;x++<99;)Console.Write((x%3==0?"(":"")+(x%4==0?"[":"")+x+(x%4==0?"]":"")+(x%3==0?")":"")+(x%99==0?"":" "));};
, сработает ли что-то подобное .==0
может быть<1
.Красный ,
9997 байтПопробуйте онлайн!
источник
Рубин ,
7266 байтСпасибо @ jonathan-frech и @ conor-obrien за дополнительную обрезку.
источник
a.join b
для массиваa
и строкиb
эквивалентноa*b
PowerShell,
988274676362 байтаКолоссальные -31 байт благодаря @Veskah -5 байт благодаря @ ASCII-only
Попробуйте онлайн!
Я до сих пор не совсем уверен, что я здесь сделал.
источник
"$a"
все равно подставить в значение. (Примечание: одинарные кавычки не заменяют$foo
, а только двойные) Еще один трюк, если ifs заботятся только о 0 или 1, поэтому вы можете использовать логическую логику для сохранения байтаperl -E, 60 байт
Некоторые байты могут быть сохранены, если мы можем использовать переводы строк между числами: в этом случае мы можем удалить
$,=$";
, преобразоватьmap
вfor
цикл, перемещая егоsay
в цикл.источник
/^1$|^(11+?)\1+$/
Perl 6 ,
5148 байтовПопробуйте онлайн!
источник
Пакет, 145 байт
Код проваливается в подпрограмму, но к этому моменту строка уже напечатана, поэтому код выполняется безобидно.
источник
PHP 103
for(;$i<1e2;$i++)$a.=$i%12==0?"([$i]) ":($i%3==0?"($i) ":($i%4==0?"[$i] ":"$i "));echo substr($a,5,-1);
https://www.ideone.com/SBAuWp
источник
Чисто , 100 байт
Попробуйте онлайн!
источник
сфк , 225 байт
Попробуйте онлайн!
источник
Баш, 61 байт
-14 байт, спасибо Денису
объяснение
Довольно просто:
seq
производит 1..99awk
с разделителем выходной записи (ORS
), установленным в пробел, чтобы вывод был одной строкой.Попробуйте онлайн!
источник
JavaScript (Node.js) , 57 байт
Попробуйте онлайн!
Изменено на сообщество, потому что оптимизация слишком полагается на него
источник
${n%4?n:`[${n}]`}
PHP, 65 байт
или
(требуется PHP 5.5 или более поздняя версия)
Запустите
-nr
или попробуйте их онлайн .источник
Python 2 , 78 байт
Попробуйте онлайн!
Я представлял себе этот крутой подход нарезки,
'([%0d])'
но я не могу получить выражения короче.источник
Java 8,
9291 байт-1 байт благодаря @Dana
i->{for(;i++<99;)out.printf((i>1?" ":"")+(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i),i);}
Попробуйте онлайн!
Альтернативное решение, 82 байта (с завершающим пробелом в выходных данных - не уверен, разрешено ли это):
i->{for(;i++<99;)out.printf((i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i)+" ",i);}
Объяснение:
for(;i++<99;)
- цикл for, который переходит от значенияi
(повторно используемого в качестве входного значения, в данном случае принимается равным 0) до 99out.printf(<part1>+<part2>,i);
- форматирует строку перед немедленной ее печатью в стандартный вывод со значениемi
где
<part1>
это(i>1?" ":"")
- печатает пространство перед печатью номера , если это число не является 1, в этом случае он опускает пространствои
<part2>
это(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i)
- еслиi
делится как 3 и 4,i
имеет как квадратные и круглые скобки вокруг него; иначе, еслиi
делится на 3,i
имеет круглые скобки; иначе, еслиi
делится на 4,i
имеет квадратные скобки; остальноеi
не имеет скобок.источник
(i>1:" ":"")
i->{for(;i++<99;)out.printf((i>1?" ":"")+(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i),i);}
?