Этот вопрос распространяется как вирус в моем офисе. Есть довольно разные подходы:
Распечатайте следующее:
1
121
12321
1234321
123454321
12345654321
1234567654321
123456787654321
12345678987654321
123456787654321
1234567654321
12345654321
123454321
1234321
12321
121
1
Ответы оцениваются в символах с меньшим количеством символов, которые лучше.
code-golf
ascii-art
kolmogorov-complexity
Эрик Уилсон
источник
источник
Ответы:
J,
29 26 24 23 2221 символовСпасибо FUZxxl за
"+
трюк (я не думаю, что когда-либо использовалu"v
раньше, хе).объяснение
источник
"0]
, чтобы писать"+
.,.0(<#":)"+9-+/~|i:8
⍪↑{(0<⍵)/⍕⍵}¨9-∘.+⍨|9-⍳17
APL (
3331)Если разрешены пробелы, разделяющие числа (как в записи Mathematica), его можно сократить до
2826:Объяснение:
⍳9
: список номеров от 1 до 91↓⎕D
:⎕D
это строка '0123456789',1↓
удаляет первый элемент⍴∘(1↓⎕D)¨⍳9
: для каждого элемента N из⍳9
взять первые N элементов из1↓⎕D
. Это дает список: ["1", "12", "123", ... "123456789"] как строки⌽¨
: перевернуть каждый элемент этого списка. ["1", "21", "321" ...](Короткая программа :)
⍳¨⍳9
: список от 1 до N для N [1..9]. Это дает список [[1], [1,2], [1,2,3] ... [1,2,3,4,5,6,7,8,9]] в виде чисел.⌽∘⍕∘
: обратная сторона строкового представления каждого из этих списков. ["1", "2 1" ...]A←⌽↑
: создает матрицу из списка списков, дополняет ее пробелами справа, а затем наоборот. Это дает верхний сектор алмаза. Хранится в А.A←A,0 1↑⌽A
: A, с обратным знаком A минус его первый столбец, прикрепленный справа. Это дает верхнюю половину прямоугольника. Это затем сохраняется в A снова.A⍪1↓⊖A
:⊖A
Зеркально отражается вертикально (давая нижнюю половину),1↓
удаляет верхний ряд нижней половины иA⍪
является верхней половиной сверху1↓⊖A
.источник
Clojure,
191179 байт-12 байт, изменив внешнее
doseq
на aloop
, что позволило мне избавиться отatom
(yay).Двойной «для петли». Внешний цикл (
loop
) проходит по каждой строке, в то время как внутренний цикл (doseq
) проходит по каждому числу в строке, которая находится в диапазоне(concat (range 1 n) (range n 0 -1))
, гдеn
находится наибольшее число в строке.Из-за ошибки в логике в моей первой попытке (случайно вставив вместо каждого из них префиксные пробелы), мне удалось получить это:
Даже не правильно игнорировать очевидную ошибку, но она выглядела круто.
источник
Mathematica
83 49 43 5451С 3 байтами сохранены благодаря Келли Лоудер.
Анализ
Основная часть кода
Sum[DiamondMatrix[k, 17], {k, 0, 8}]
, может быть проверена на WolframAlpha .Ниже показана основная логика подхода в меньшем масштабе.
источник
f = Table[# - Abs@k, {k, -8, 8}] &; f[f[9]] /. n_ /; n < 1 -> "" // Grid
Table[9 - ManhattanDistance[{9, 10}, {j, k}], {j, 18}, {k, 18}] /. n_ /; n < 1 -> "" // Grid
Grid@#@#@9&[Table[#-Abs@k,{k,-8,8}]&]/.n_/;n<1->""
50 символовArrayPlot[Sum[k~DiamondMatrix~17, {k, 0, 8}], AspectRatio -> 2]
Python 2,
72696761Не умно:
источник
s=`0x2bdc546291f4b1`
'L'
.С, 79 символов
источник
Python 2,
6059Злоупотребления клюшки и повторы.
источник
in
ключевого слова может быть удален, как вы это сделали сprint
клавиатурой.L
в середине семь строк вывода.GolfScript,
333130 символовДругое решение GolfScript
Спасибо @PeterTaylor за другого персонажа .
Предыдущие версии:
( запустить онлайн )
источник
17,{8-abs." "*10@-,1>.-1%1>n}%
Mathematica
5550454138источник
Javascript, 114
Моя первая запись на Codegolf!
Если это может быть сокращено дальше, пожалуйста, прокомментируйте :)
источник
PHP,
9290 символовВычисляет и печатает манхэттенское расстояние от центра. Печатает пробел, если он меньше 1.
Анонимный пользователь предложил следующее улучшение (84 символа):
источник
<?
пропущенным мета . Кроме того, у вас, похоже, есть проблемы с кодировкой во втором коде.<?
в список байтов. Я также сделал некоторые другие улучшения.Древесный уголь (неконкурентный), 13 байт
Не конкурировать, потому что язык (намного) новее, чем вопрос.
Попробуйте онлайн!
Как?
Рисует девять последовательно меньших концентрических числовых алмазов друг над другом:
источник
Common Lisp, 113 символов
Сначала я заметил, что элементы бриллианта можно выразить так:
и т.п.
x
Рекурсивно вычисляет основание (1, 11, 111 и т. д.), которое возводится в квадрат, а затем печатается по центруformat
. Чтобы числа поднимались до максимального значения и снова возвращались, я использовал,(- 8 (abs (- n 8)))
чтобы избежать второго циклаисточник
JavaScript, 81
источник
PowerShell (2 варианта):
928445 байтОбъяснение:
1..8+9..1
или1..9+8..1
генерирует массив целых чисел, возрастающих от 1 до 9, затем убывающих обратно до 1.|%{
...}
передает целочисленный массив вForEach-Object
цикл через встроенный псевдоним%
.' '*(9-$_)+
вычитает текущее целое число из 9, а затем создает строку с таким количеством пробелов в начале вывода для этой строки.[int64]($x='1'*$_)*$x
определяет$x
как строку1
s, пока текущее целое число большое. Затем он преобразуется в int64 (требуется для правильного вывода 111111111 2 без использования E-записи) и возводится в квадрат.источник
long
int64
1..8+9..1|%{' '*(9-$_)+ +($x='1'*$_+'L')*$x}
Vim,
623938 нажатий клавишСпасибо @DJMcMayhem за сохранение тонны байтов!
Мой первый ответ Vim, так волнительно!
Я пытался записать числа через запись, но это намного дольше
Попробуйте онлайн!
Объяснение:
РЕДАКТИРОВАТЬ:
Я использовал
H
вместоgg
и сохранил 1 байтисточник
ma
и изменить`ai<space>
наI<space>
.APL (Dyalog Classic) ,
2019 байтовПопробуйте онлайн!
⎕d
цифры'0123456789'
1↓
брось первый ('0'
),⍨\
Сканирование поменяно местами, т.е. обратные префиксы'1' '21' '321' ... '987654321'
↑
смешать в матрицу с пробелами:⌽
перевернуть матрицу по горизонтали(
...)⍣2
сделать это дважды:⍉⊢⍪1↓⊖
транспозиция (⍉
) самой матрицы (⊢
), соединенная вертикально (⍪
) с вертикально инвертированной матрицей (⊖
) без ее первой строки (1↓
)источник
R, 71 символов
Для записей:
источник
message(rep(" ",9-i),s[c(1:i,i:1-1)])
for(i in s<-c(1:9,8:1))...
чтобы сохранить байтк (
6450 символов)Старый метод:
источник
(1+!9)#'"1"
это,\9#"1"
CJam,
3127 байтCJam намного новее, чем этот вызов, поэтому этот ответ не может быть принят. Это был аккуратный маленький субботний вечер, хотя. ;)
Проверьте это здесь.
Идея состоит в том, чтобы сначала сформировать верхний левый квадрант. Вот как это работает:
Сначала сформируйте строку
" 123456789"
, используя8S*9,:)+
. Эта строка длиной 17 символов. Теперь мы повторяем строку 9 раз, а затем разбиваем ее на подстроки длиной 9 с9/
. Несоответствие между 9 и 17 сместит каждую строку на один символ влево. Распечатав каждую подстроку в отдельной строке, мы получим:Так что, если мы просто отбрасываем все остальные строки (что удобно работает
2%
), мы получаем один квадрант по желанию:Наконец, мы отражаем это дважды, переставляя сетку между ними, чтобы гарантировать, что две операции зеркального отображения идут вдоль разных осей. Само зеркалирование просто
Наконец, мы просто соединяем все строки с помощью новых строк, с
N*
.источник
GolfScript, 36 символов
Предполагая, что это подразумевается как вызов кода , вот базовое решение GolfScript:
источник
Рубин, 76 знаков
Улучшения приветствуются. :)
источник
f=->x{[*1..x]+[*1...x].reverse};puts f[9].map{|i|(f[i]*'').center 17}
[*-8..8].map{|i|puts' '*i.abs+"#{eval [?1*(9-i.abs)]*2*?*}"}
Befunge-93 , 155 символов
Попробуйте онлайн!
Это определенно может быть больше в гольфе, но это моя первая программа Funge, и моя голова уже болит. Было очень весело, хотя
источник
JavaScript, 170 байт
Мой первый код гольф :)
Golfed
Ungolfed
источник
Perl
5654 персонажаДобавлен 1 символ для
-p
переключателя.Использует воссоединения в квадрате для создания последовательности.
источник
Perl, 43 + 1
добавление +1, для
-E
которого требуетсяsay
say$"x(9-$_).(1x$_)**2for 1..9,reverse 1..8
редактировать: немного сокращен
источник
Питон, 65
источник
I=int;
ваш код и заменить все последующие экземплярыint
сI
int
он используется, и он используется 3 раза, поэтому он экономит 6 символов при стоимости 6 символов.Groovy
7775старая версия:
источник
each
с ,any
чтобы спасти двух символов.Скала - 86 символов
источник
Javascript, 137
С рекурсией:
Первый раз на CG :)
Или 118
Если я могу найти реализацию JS, которая выполняется
111111111**2
с более высокой точностью.(Здесь: 12345678987654320).
источник