Это была просто ошибка

76

Вдохновленный прослушиваются выходом в @Carcigenicate Clojure ответа «s для печати этого алмаза вызова.

Напечатайте этот точный текст:

1        2        3        4        5        6        7        8        9        0
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1        2        3        4        5        6        7        8        9        0

(От середины кнаружи в обоих направлениях каждая цифра отделяется на один пробел больше, чем предыдущая строка.)

Правила соревнований:

  • Там не будет никакого ввода ( или пустой неиспользуемый ввод ).
  • Конечные пробелы не являются обязательными.
  • Одиночный трейлинг новой строки не является обязательным.
  • Пробелы или новые строки не допускаются.
  • Возвращение массива строк не допускается. Вы должны либо вывести текст, либо иметь функцию, которая возвращает единственную строку с правильным результатом.

Основные правила:

  • Это , поэтому выигрывает самый короткий ответ в байтах.
    Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования.
  • К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
  • По умолчанию лазейки запрещены.
  • Если возможно, добавьте ссылку с тестом для вашего кода.
  • Также, пожалуйста, добавьте объяснение, если это необходимо.
Кевин Круйссен
источник
Разрешен ли вывод массива строк - по 1 строке на строку?
Лохматый
@ Shaggy Извините, в этом случае он должен либо вернуть одну строку с новыми строками, либо вывести результат. Я добавил это как правило к вызову.
Кевин Круйссен
Не беспокойся, Кевин; просто переключал мою руку, чтобы посмотреть, смогу ли я спасти себя пару байтов.
Лохматый
3
@ Шэгги Хе-хе. Какую еще причину нам пришлось бы задать вопрос в состязании по коду-гольфу, помимо цели сохранения этих нескольких байтов? ;)
Кевин Круйссен
8
Ха, это круто. Мне было интересно, почему этот ответ вдруг получил так много внимания. Спасибо!
Carcigenicate

Ответы:

7

SOGL V0.12 , 12 байт

9{SUē↕∑}¹№╬«

Попробуй здесь! Объяснение:

9{     }      9 times do
  SU            push "1234567890"
    ē           push e, predefined with the input, which defaults to 0, and then increase it
     ↕          get that many spaces
      ∑         join the string of digits with those spaces
        ¹     collect the results in an array
         №    reverse the array vertically
          ή  palindromize vertically with 1 overlap
dzaima
источник
О, хорошо, это даже короче, чем принятый ответ. Хм, какова политика в отношении коротких ответов через пару месяцев после принятия ответа? Получает ли это сейчас чек (вроде несправедливо по отношению к принятому в настоящее время ответу) или мне следует заняться чем-то другим? Отличный ответ независимо! +1 от меня.
Кевин Круйссен,
@KevinCruijssen Обычно рекомендуется обновлять принятый ответ, но, поскольку в нем используются несколько новых функций, я бы сказал, что есть причина пойти в любую сторону - вы выбираете.
Дзайма
62

Python 2 , 59 57 56 55 байт

i=8;exec"print(' '*abs(i)).join('1234567890');i-=1;"*17

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

@ Leaky Nun очень помог в игре в гольф, @Praind предложил метод сохранения 1 байта, о котором я раньше думал, но забыл отредактировать, @CotyJohnathanSaxman предложил изменить цикл.


объяснение

  • i=8- Присваивает значение 8переменной с именем i.

  • exec"..."*17- Выполнить этот блок кода ( ...) 17 раз.

  • print(...) - Вывести результат.

  • ' '*abs(i)- Создать строку с пробелом повторяется |i|раз.

  • .join('1234567890')- Чередуйте строку, созданную выше 1234567890, так, чтобы |i|между цифрами вставлялись пробелы.

  • i-=1- Уменьшить i, и, выполняя его 17 раз, он достигает -8, что создает повторяющийся узор с помощью abs().

Мистер Xcoder
источник
5
59 байт
Утренняя монахиня
23
Это ферма более впечатляющая, чем 25 байтов на любом языке для игры в гольф imho.
Jylo
4
@Jylo Спасибо, но 25-байтовые решения очень впечатляют, поскольку они показывают много усилий в области гольфа, предпринятых их авторами. Сначала вы должны знать, что означает каждый персонаж в их источнике, а затем вы поймете, насколько они прекрасны в гольфе.
Мистер Кскодер
2
@JasonChen Нет, Python не разрешает этот синтаксис, потому что он специфичен для языков, подобных Си.
г-н Xcoder
5
Возможное вдохновение: может быть выполнено без exec 55 байтов . Использовал аналогичный подход, чтобы получить Python 3 до 57 байт . Не видел никакого очевидного способа сделать это короче, опуская exec, но решил, что я бы упомянул это как возможность.
ShadowRanger
32

Vim, 35 байт:

i1234567890<esc>qqYP:s/\d/& /g
YGp{q7@q

Объяснение:

i1234567890<esc>    " insert '1234567890'
qq                  " Record the following into register 'q'
  Y                 "   Yank a line
   P                "   Paste it above us
    :s/\d/& /g      "   Put a space after each number
Y                   "   Yank this line
 G                  "   Move the end of the buffer
  p                 "   Paste the line
   {                "   Move the beginning of the buffer
    q               " Stop recording
     7@q            " Call macro 'q' 7 times
DJMcMayhem
источник
6
Мне даже все равно, что это не победитель, это красиво.
MrDuk
@MrDuk Спасибо! Я рад, что вам это нравится :)
DJMcMayhem
21

05AB1E ,  14  13 байт

17F9ÝÀN8αð×ý,

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

объяснение

17F            # for N in [0 ... 16] do
   9Ý          # push [0 ... 9]
     À         # rotate left
      N8α      # compute the absolute difference between N and 8
         ð×    # push that many spaces
           ý   # merge the list of digits with the space string as separator
            ,  # print
Emigna
источник
1
Хм ... ты мог бы победить SOGL, если бы тебе не нужно s... имеет ли смысл объединять строку со списком или список со строкой? Я предложу улучшение для Аднана. Ох, и есть .∊для û».
Эрик Outgolfer
@EriktheOutgolfer: Или я мог бы переключить свой метод и сохранить тот 1 байт, который мне был нужен :)
Emigna
Извините, уже проголосовали.
Эрик Outgolfer
3
Это означает, что я бы снова проголосовал ...
Эрик Outgolfer
4
8F9ÝÀNð×ý}».∊Я сделал сделал космический корабль пасть! И я был взволнован предложением 12-байтового редактирования.
Волшебная Осьминог Урна
20

C64 ASM, 358 байт (102 байта, скомпилированных с basicstub)

Это самое близкое, что я мог получить из-за очевидных ограничений:

C64

jsr $E544
lda #9
sta $FD
nl1: jsr dl
jsr il
dec $FD
bne nl1
inc $FD
nl2: ldy $FD
cpy #9
bne nt1
bl: jmp bl
nt1: iny
sty $FD
jsr dl
jsr il
jmp nl2
dl: clc
ldx #$31
ldy #0
lp: txa
sm: sta $0400, y
inx
cpx #$31
bne c1
rts
c1: cpx #$3A
bne nt2
ldx #$30
clc
nt2: tya
adc $FD
cmp #40
bcc c2
rts
c2: tay
jmp lp
il: lda sm+1
adc #39
bcc nc
inc sm+2
nc: sta sm+1
rts

(Возможно, может быть оптимизирован совсем немного)

Jupp3
источник
Добро пожаловать в PPCG! Пожалуйста, используйте кодовый тег, чтобы публиковать красивые. Я отредактировал твой пост. После внесения изменений вы можете увидеть, что изменилось, нажав на кнопку изменить
Евгений Новиков
Я только что проверил, и он даже не поместится на ПЭТ на 80 cols, поскольку первая и последняя строки требуют 82 столбца.
Шон Бебберс,
17

TSQL, 220 148 байт

Улучшение, опубликованное ZLK:

DECLARE @ VARCHAR(MAX)=''SELECT TOP 17@+=REPLACE('1@2@3@4@5@6@7@8@9@0','@',SPACE(ABS(9-RANK()OVER(ORDER BY object_id))))+'
'FROM sys.objects PRINT @

Выход:

1        2        3        4        5        6        7        8        9        0
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1        2        3        4        5        6        7        8        9        0
Ян Дрозен
источник
DECLARE @ VARCHAR(MAX)=''SELECT TOP 17@+=REPLACE('1@2@3@4@5@6@7@8@9@0','@',SPACE(ABS(9-RANK()OVER(ORDER BY object_id))))+' 'FROM sys.objects PRINT @
ZLK
Замените sys.objectsна sysobjects, а 1object_id` на « idЯ искал более короткие таблицы в sysсхеме, но ничего короткого не имело таких коротких столбцов, какsysobjects
Jaloopa
И вы можете сохранить еще несколько байтов, изменив внутренний CAST(с помощью POWER(10)) наVARCHAR
Jaloopa
Фактически, избегайте всего, что заменяет вещи, используя LOG10и REPLICATE:DECLARE @o VARCHAR(MAX)=''SELECT TOP 17 @o+=REPLACE('1@2@3@4@5@6@7@8@9@0','@',replicate(' ',LOG10(POWER(10,ABS(ROW_NUMBER()OVER(ORDER BY id)-9)+1)/10)))+' 'FROM sysobjects PRINT @o
Jaloopa
Вы можете изменить имя переменной, чтобы просто @сбрить 3 символа.
Мост
14

APL (Dyalog) , 22 байта

↑∊¨(1+|¯9+⍳17)↑¨¨⊂1⌽⎕D

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

⎕DD igits от нуля до девяти

1⌽ повернуть на один шаг вправо (ставит ноль в конце)

 приложить (рассматривать как единое целое)

(... )↑¨¨ для каждого из этих чисел взять столько символов из каждой буквы:

⍳17 с одного до семнадцати

¯9+ вычесть девять

| найти абсолютные значения

1+ добавить одну

∊¨ заручиться поддержкой

 изменить один слой глубины на уровень ранга (Matrify)

Адам
источник
3
На таком компактном языке серьезно требуется два байта, чтобы добавить один?
aschepler
3
@aschepler Да. APL не является языком игры в гольф и не имеет примитива приращения. J делает, но это занимает два байта; >:,
Адам
4
APL is not a golfing language... ↑⊃¨,/¨(1+|¯9+⍳17)↑¨¨⊂1⌽⎕D... ಠ_ಠ
Александр
1
@ Александр Спасибо, что уделили мне внимание. Я мог бы играть в гольф 3 байта.
Адам
12

Java 11 (JDK) , 98 байт

o->{for(int i=-9;++i<9;)System.out.println("".join(" ".repeat(i<0?-i:i),"1234567890".split("")));}

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

  • -14 байтов путем переключения на JDK 11, который теперь имеет родной String::repeat.

Предыдущий ответ ( Java (OpenJDK 8) ), 113 112 байт

o->{for(int i=-9;++i<9;)System.out.printf("".join("%1$"+(i<0?-i:i>0?i:"")+"s","1234567890".split(""))+"%n","");}

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

Пояснения

Я в основном строю следующие String17 раз ( Nэто переменная, а не фактическое значение):

"1%1$Ns2%1$Ns3%1$Ns4%1$Ns5%1$Ns6%1$Ns7%1$Ns8%1$Ns9%1$Ns0%n"

Это все ожидаемые цифры, объединённых %1$Nsгде Nэто количество пробелов между каждой цифрой.

%1$Nsв основном означает «возьмите первый аргумент и добавьте его, пока длина не станет меньше N». Кроме того , %1$0sне поддерживаются , так это особый случай %1$sсделан для 0.

Наконец, я форматирую и печатаю эту строку, используя один аргумент:, ""чтобы форматировщик всегда использовал одну и ту же пустую строку, заполняя ее пробелами по мере необходимости.

Сохраняет

  • 1 байт благодаря Кевину Круйссену
Оливье Грегуар
источник
2
Хороший ответ! Кстати, я явно упомянул в вызове неиспользуемый пустой параметр разрешен, так что вы можете заменить ()->с , o->чтобы сохранить байты. :)
Кевин Круйссен
Можете ли вы сделать и использовать его в цикл? ointfor(o=-9;++o<9;)
зима
2
@ Зима Нет, потому что в запросе указано « не используется », и при этом будет использоваться переменная параметра, даже если значение не будет использовано.
Оливье Грегуар
@ OlivierGrégoire Он ссылается на этот пост codegolf.meta.stackexchange.com/questions/12681/… и в этих постах только говорится, что он должен быть пустым (0 для целых).
зима
@ Indeed Действительно, но сам вызов говорит «неиспользованный». Определенные решения в вызове отменяют значения по умолчанию.
Оливье Грегуар
11

Japt -R , 19 18 16 14 13 байт

Aõ%A
£qYçÃÔÅê

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


объяснение

A             :10
 õ           :Range [1,10]
  %A         :Modulo each by 10
\n           :Assign to variable U
£            :Map each element at 0-based index Y
 q           :  Join U with
  Yç         :   Space repeated Y times
    Ã        :End map
     Ô       :Reverse
      Å      :Slice off first element
       ê     :Mirror
             :Implicitly join with newlines and output
мохнатый
источник
2
Приятно. Мое 16-байтовое решение было9ÆAõ%A qXîÃw ê ·
ETHproductions
8

JavaScript (ES2017), 83 73 72 68 байт

Спасибо Shaggy за сохранение 10 байтов. Спасибо Крейгу за сохранение 1 байта. Спасибо дуги за сохранение 4 байта.

for(i=-9,a="";i++<8;)a+=[...`1234567890
`].join("".padEnd(i<0?-i:i))

for(i=-9,a="";i++<8;)a+=[...`1234567890
`].join("".padEnd(i<0?-i:i))

console.log(a);
.as-console-wrapper { max-height: 100% !important; top: 0; }
.as-console-row:after { display: none !important; }

Tushar
источник
Сохраните 1 байт, используя полифилл для Math.abs. Я также сделал aсписок не жестко закодированным, но это предпочтение ...a=[...Array(10).keys()];for(i=-8;i<9;i++)console.log(a.join(' '.repeat(i<0?-i:i)))
Томас В.
1
Сохранить несколько байтов с[..."1234567890"].join("".padEnd(i<0?-i:i))
Shaggy
@ Shaggy Спасибо. Это сэкономило 10 байтов. :)
Тушар
1
@ThomasW: [...Array(10).keys]будет 0первым элементом, а не последним.
Лохматый
1
Вы можете сохранить байт, используя свой метод, сохраняя результат в строке, а не в журнале:, for(i=-8,s="";i<9;i++)s+=[..."1234567890"].join("".padEnd(i<0?-i:i))+`X`где Xнаходится фактическая
Крейг Эйр,
7

Брахилог , 30 29 28 байт

Ị↺{∧≜;Ṣj₍g;?↔zcc}ᶠ⁹↔;XcP↔Pẉᵐ

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

Сохраненный один байт благодаря Leaky Nun .

объяснение

Ị↺                               The string "1234567890"
  {               }ᶠ⁹            Find the first 9 outputs of:
   ∧≜                              Take an integer
       ;Ṣj₍                        Juxtapose " " that number of times
           g;?↔z                   Zip that string of spaces with "1234567890"
                cc                 Concatenate twice into one string
                    ↔            Reverse the resuling list
                     ;XcP↔P      Palindromize the list (concatenate X to it into the list P,
                                   P reversed is still P)
                           ẉᵐ    Map writeln
Fatalize
источник
2
28 байт
Утренняя монахиня
@LeakyNun Я застрял на большом «Напечатайте этот точный текст» и не читал, что у нас могли бы быть
заключительные
4
23 байта
Утренняя монахиня
1
@LeakyNun Почему вы не опубликовали свой ответ?
Фатализировать
7

Древесный уголь , 18 байт

F⁹⪫⁺…I¹:⟦0¶⟧× ι‖B↑

Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:

F⁹      Repeat 9 times (i = loop variable)
  ⪫       Join
   ⁺       Concatentate
    …I¹:    All the characters from str(1) below ":" (i.e. to "9") as a list
    ⟦0¶⟧    A list whose element is the string "0\n"
   × ι     With i spaces
‖B↑     Reflect everything upwards but without duplicating the top line

Примечание: Cast(1)занимает такое же количество байтов, потому "1"что раньше требовался бы разделитель ":"(который, как это происходит, не может быть вставлен в девербосификатор).

Нил
источник
7

R , 108 байт

for(i in abs(-8:8))cat(paste0(el(strsplit("1234567890","")),paste(rep(" ",i),collapse=""),collapse=""),"\n")

Просто вставляю и сворачиваю струны.

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

Редактировать: спасибо за Challenger5 за указание на проблему. Исправлено сейчас.

Редактировать 2: сохранил байт благодаря bouncyball.

Probel
источник
Добро пожаловать на сайт! :)
DJMcMayhem
2
Это выглядит не совсем правильно - в средней строке вообще не должно быть пробелов.
Esolanging Fruit
@ Challenger5 ты прав! исправил это с помощью paste0взамен, pasteпоэтому пришлось добавить байт :(
Probel
1
сохранить 2 байта, используя el: el(strsplit("1234567890",""))вместоstrsplit("1234567890","")[[1]]
bouncyball
Вы можете избавиться от одного из pasteутверждений, используя sepаргумент to catи сделав немного больше, чтобы получить его до 70 байт
Giuseppe
7

Python 3 , 58 57 54 байта

i=8
while i+9:print(*'1234567890',sep=' '*abs(i));i-=1

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

(спасибо @flornquake за последние три байта; я полностью забыл использовать sepдля сохранения и сравнения .join)

ShadowRanger
источник
1
54 байта:while i+9:print(*'1234567890',sep=' '*abs(i));i-=1
землетрясение
6

Java 8, 235 234 206 163 байта

interface A{static void main(String[]a){for(int i=-8;i<9;i++){String s="";for(int j=1,k;j<10;j++){s+=j;for(k=0;k<(i>0?i:-i);k++)s+=" ";}System.out.println(s+0);}}}

Обновление : -28 байт благодаря Leaky Nun!
Обновление 2 : -43 байта благодаря Leaky Nun снова!

Ungolfed:

interface A {
    static void main(String[] a) {
        for (int i = -8; i < 9; i++) {
            String s = "";
            for (int j = 1, k; j < 10; j++) {
                s += j;
                for (k = 0; k < (i > 0 ? i : -i); k++)
                    s += " ";
            }
            System.out.println(s + 0);
        }
    }
}

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

РЕДАКТИРОВАТЬ: код ранее был неправильным! Сделал ошибку при игре в коде, он должен работать как задумано сейчас!

Алекс Ферретти
источник
4
Добро пожаловать в PPCG! Советы по игре в гольф на Java и советы по игре в гольф на <все языки> могут быть интересными для чтения. :) Некоторые вещи, которые вы можете убрать в гольф public, и избавиться от некоторых ненужных мест. И есть еще кое-что, что можно улучшить, но я предлагаю прочитать советы и посмотреть, где вы можете улучшить себя. Снова добро пожаловать, и приятного пребывания! :)
Кевин Круйссен
2
Хм, также, вы уверены, что отправили правильный код? Когда я копирую и вставляю ваш код в TryItOnline, он не дает правильного вывода.
Кевин Круйссен
1
Черт, я сделал что-то не так во время игры в гольф! Я исправлю это!
Алекс Ферретти
1
144 байта
Лики Монахиня
6

Шелуха , 21 байт

mΣṪ`:§+↔tḣR8' ṁs`:0ḣ9

Это полная программа, которая печатает в STDOUT. Попробуйте онлайн! Есть много висячих мест.

объяснение

В Husk до сих пор не хватает многих важных вещей, таких как функция диапазона с двумя аргументами, поэтому некоторые части этого решения немного хакерские.

mΣṪ`:§+↔tḣR8' ṁs`:0ḣ9
              ṁs`:0ḣ9  This part evaluates to the string "1234567890".
                   ḣ9   Range from 1 to 9.
                `:0     Append 0.
              ṁs        Convert each number to string and concatenate.
     §+↔tḣR8'          This part evaluates to a list like ["  "," ",""," ","  "]
                       but with 17 elements instead of 5.
          R8'           A string of 8 spaces.
         ḣ              Take prefixes.
     §+                 Concatenate
       ↔                the reversal and
        t               tail of the prefix list, palindromizing it.
  Ṫ                    Take outer product of the two lists
   `:                  with respect to flipped prepeding.
                       This prepends each digit to each string of spaces.
mΣ                     Map concatenation over the results, computing the rows.
                       Implicitly join with newlines and print.
Zgarb
источник
Вы можете заменить ṁs`:0ḣ9на, uṁsḣ10чтобы сгенерировать строку "1234567890" с одним меньшим байтом!
София Лехнер
6

T-SQL 145 152 байта

DECLARE @ VARCHAR(MAX)=''SELECT TOP 17@+=REPLACE('1x2x3x4x5x6x7x8x9x0','x',SPACE(ABS(number-8)))+'
'FROM master..spt_values WHERE type='P'PRINT @

Обновлено для использования:

  • master..spt_valuesгенерировать числа ( WHERE type = 'P'всегда последовательные, начиная с 0)
  • TOP 17Идея @ ZLK
  • ПЕЧАТЬ (подчиняться правилам - без списков строк)
  • Прекрасная идея @ JanDrozen о включении возврата каретки в строку (я посчитал это всего лишь одним байтом - Windows CRLF что?)
  • Идея @Bridge использовать только @ для имени переменной - все эти трюки !!

Результаты:

1        2        3        4        5        6        7        8        9        0
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1        2        3        4        5        6        7        8        9        0

(Спасибо @JanDrozen за идею ЗАМЕНИТЬ)

Обратный инженер
источник
Это хороший ответ! Добро пожаловать на сайт :)
DJMcMayhem
Благодарю. Я вижу, что некоторые из нас изобрели наши собственные языки здесь :)
Обратный инженер
1
Оптимальное сочетание этого ответа с другим: например SELECT TOP 17REPLACE('1x2x3x4x5x6x7x8x9x0','x',SPACE(ABS(9-RANK()OVER(ORDER BY object_id))))FROM sys.objects(при условии, что вам не нужно печатать).
ZLK
Ага @ZLK - несколько приятных трюков - TOP 17, RANK OVER и sys.objects - спасибо!
Обратный инженер
6

Clojure, 126 99 байтов

-27 исправив пару глупых ошибок. Внешнее использование aне было необходимости, поэтому я смог избавиться от aвсего и просто написать apply strодин раз. Это также позволило мне использовать макрос функции для основной функции, который сохранил несколько байтов. Я также добавил вызов Math/absвместо повторной привязки n-spaces.

В основном порт Clojure идеи Python @ Mr.Xcoder. Оглядываясь назад, я должен был изначально использовать метод abs/ rangeдля задачи с бриллиантом, но тогда я, возможно, не произвел ошибочный вывод!

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

#(doseq[n(range -8 9)](println(clojure.string/join(apply str(repeat (Math/abs n)\ ))"1234567890")))

(defn bugged []
  (doseq [n-spaces (range -8 9)]
    (println
        (clojure.string/join
          ; "String multiplication"
          (apply str
                 (repeat (Math/abs n-spaces) \space))
          "1234567890"))))
Carcigenicate
источник
5

Mathematica, 92 байта

Column@Join[Reverse@(s=Row/@Table[Riffle[Range@10~Mod~10,""<>Table[" ",i]],{i,0,8}]),Rest@s]

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

скопируйте / вставьте код с помощью ctrl-v
нажмите shift + enter для запуска

J42161217
источник
Не могли бы вы добавить ссылку на TryItOnline ?
Кевин Круйссен
@KevinCruijssen Mathematica не является свободным языком, и математика, похоже, не работает .
Утренняя монахиня
@ LeakyNun Хорошо, спасибо. Иногда я вижу, как MartinEnder публикует TIO-ссылки, но это действительно были ссылки на Mathics.
Кевин Круйссен
1
@Kevin Cruijssen да, конечно, я добавил ссылку с инструкциями
J42161217
5

C 97 байтов

i=-9;main(j){for(;++i<9;putchar(10))for(j=0;++j<11;printf("        "+8-abs(i)))putchar(48+j%10);}

Ваш компилятор, вероятно, будет много жаловаться на этот код; мой бросил 7 предупреждений 4 разных типов. Может улучшить код позже.

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

tomsmeding
источник
5

C (gcc) , 76 байт

f(x,y){for(y=-9;++y<9;puts(""))for(x=10;x++;printf("%-*d",abs(y)+1,x%=10));}

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

Он выводит некоторые пробелы, которые должны быть в порядке.

Он печатает числа, используя выравниваемые по левому краю поля динамической длины - для этого предназначена строка формата %-*d.

Внутренний цикл имеет некоторую забавную инициализацию (начинается с 10; любое кратное 10 было бы хорошо), чтобы «упростить» его условие завершения.

anatolyg
источник
4

Древесный уголь , 21 20 19 18 байт

F⁹«F…¹χ⁺κ… ι0⸿»‖B↑

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

Ссылка на подробную версию . По сути, я создаю нижнюю часть рисунка, а затем отражаю текст вверх.

Чарли
источник
1
Когда я увидел вопрос, я решил попробовать сам в древесном угле, прежде чем посмотреть на ответ. Я начал с 21-байтового ответа, но сыграл в гольф до 20 байтов ... жуткий!
Нил
@Neil :-D Ну, теперь это 19 байтов!
Чарли
Да, только что нашел этот гольф сам. Я также изучал E…⁹⪫E…·¹χI﹪κχ× ι‖B↑(также для 19 байтов), но интерпретатору это, кажется, не нравится (я сам не вижу, что с ним не так).
Нил
О, Рейндж принимает два аргумента, глупый я.
Нил
1
Оказывается, Mapбыла красная сельдь, так что теперь я разместил свой 18-байтный ответ.
Нил
4

CJam , 21 байт

A,(+aH*ee{:\8-zS**n}/

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

объяснение

A,     e# Get [0 1 2 ... 9].
(+     e# Rotate the 0 to the end.
aH*    e# Wrap in an array and repeat 17 times.
ee     e# Enumerate. This pairs each copy of the array with its index in
       e# the list.
{      e# For each [index array] pair...
  :\   e#   Unwrap the pair and swap its order.
  8-z  e#   Get the absolute difference of the index from 8.
  S*   e#   Get a string of that many spaces.
  *    e#   Riffle the list of digits with the string of spaces.
  n    e#   Print it with a trailing linefeed.
}/
Мартин Эндер
источник
1
Альтернативное решение (также 21 байт):9{S*A,(+\*}%_W%);\+N*
Esolanging Fruit
4

Пакетный, 163 байта

@set s=1 2 3 4 5 6 7 8 9 0
@set t=         
@for %%l in (9 7)do @for /l %%i in (1,1,%%l)do @call:%%l
:7
@set t=  %t%
:9
@set t=%t:~1%
@call echo %%s: =%t%%%

Примечание. Первая строка заканчивается 9 пробелами. Пояснение: Используется креативная нумерация строк! Первый цикл должен выполняться 9 раз и каждый раз удалять пробел, а второй цикл должен выполняться 8 раз и каждый раз добавлять пробел. Первое достигается путем его запуска 7 раз и проваливания в 8-й раз, в то время как второе достигается путем добавления двух пробелов и провала, чтобы удалить один из них снова.

Нил
источник
4

SOGL V0.12 , 14 байтов

ā9{SUčf@*∑Κ}╬Æ

Попробуй здесь!

Объяснение:

ā               push an empty array
 9{        }    9 times do
   SU             push "1234567890"
     č            chop into characters
      f@*         get current iteration (0-based) amount of spaces
         ∑        join with that
          Κ       prepend this to the array
            Β  palindromize vertically with 1 overlap
dzaima
источник
4

PowerShell , 30 байт

8..0+1..8|%{1..9+0-join' '*$_}

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

Создает диапазон 8,7,6...2,1,0,1,2...8затем перебирает каждое число. Внутри цикла мы строим ряд 1..9сцепленных с 0затем -joinчислами в диапазоне вместе с соответствующим количеством пробелов. Каждая строка остается в конвейере, а вывод неявным при завершении программы.

AdmBorkBork
источник
1
Хороший ответ! Powershell внезапно почувствовал себя сильнее в гольфе :)
Мистер Xcoder