Альфа-Числовой Боути


14

Выведите этот точный текст:

1                i
12              hi
123            ghi
1234          fghi
12345        efghi
123456      defghi
1234567    cdefghi
12345678  bcdefghi
123456789abcdefghi
12345678  bcdefghi
1234567    cdefghi
123456      defghi
12345        efghi
1234          fghi
123            ghi
12              hi
1                i

Допускается одиночный завершающий перевод строки, но другие изменения форматирования не допускаются.

Правила и ввод / вывод

  • Нет ввода
  • Вывод можно дать любым удобным способом .
  • Либо полная программа или функция приемлемы. Если функция, вы можете вернуть вывод, а не распечатать его.
  • Стандартные лазейки запрещены.
  • Это поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).

1
Можем ли мы использовать заглавные буквы вместо?
Kritixi Lithos

3
@ Cowsquack Это было бы изменение правила. Там написано « Точный текст» .
Деннис

@ Cowsquack Нету - строчная требуется.
AdmBorkBork

Ответы:


13

C 87 85 81 80 байт

j;main(i){for(;++i<19;)for(j=19;j--;)putchar(j?j<i^j<20-i?32:106-j-j/10*39:10);}

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

объяснение

j; // same as int j;
main(i){ // same as int main(int i){, where i = argc (1 with no arguments)
  for(;++i<19;) // loop over rows, i = 2..18
    for(j=19;j--;) // loop over chars, j = 19..0
      putchar(j?j<i^j<20-i?32:106-j-j/10*39:10); // output characters:
      //      j?                           :10 // on last char (j=0), output \n
      //        j<i                            // check for top/left half
      //            j<20-i                     // check for bottom/left half
      //           ^                           // 1 if only one half matched
      //                  ?32:                 // if so, output space
      //                      106              // char code for j
      //                         -j            // get desired letter
      //                           -j/10*39    // subtract 39 for j>9 (numbers)
}

Я поражен, ^имеет более низкий приоритет, чем <... какой красивый ответ!
Линн

@Lynn Битовые операторы в C (и даже Java / JS и тому подобное) имеют меньший приоритет, чем сравнения. Это и хорошо для кода гольф и действительно хороший источник ошибок (думаю if (x & 2 == 0), что всегда имеет значение 0)
PurkkaKoodari


6

R , 64 байта

for(i in abs(8:-8))cat(intToUtf8(c(57-8:i,32*!!-i:i,97+i:8,13)))

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

  • -3 байта благодаря @Giuseppe
  • -5 байт благодаря @ J.Doe

67 байт сintToUtf8
J.Doe

catза один байт?
JayCe

2
64 байта, основанные на вашем решении, используя ярлык @ Giuseppe, чтобы добавить repфункцию, intToUtf8которая 0превращается в "".
Дж. Доу

@ J. Отличный трюк!
JayCe

@ J.Doe: Отлично, спасибо!
digEmAll



3

QBasic, 72 байта

На основании представления Тейлор Скотт .

FOR y=-8TO 8
z=ABS(y)
?"123456789abcdefghi";
LOCATE,10-z
?SPC(2*z)"
NEXT

Основное объяснение

В каждой строке мы печатаем полную строку 123456789abcdefghi. Тогда мы вернемся и перезаписываем его часть пробелами.

Полное объяснение

С кодом, немного расклеенным:

FOR y = -8 TO 8           ' Loop for 17 rows
 z = ABS(y)               ' z runs from 8 to 0 and back to 8
 ? "123456789abcdefghi";  ' Print the full string and stay on the same line (important!)
 LOCATE , 10-z            ' Go back to column 10-z on that line
 ? SPC(2*z); ""           ' Print 2*z spaces
                          ' (SPC keeps the cursor on the same line unlesss you print
                          ' something after it, so we'll use the empty string)
NEXT                      ' Go to the next y value

Это действительно умное использование Locateкоманды
Тейлор Скотт

2

T-SQL, 108 байт

DECLARE @ INT=8a:
PRINT STUFF('123456789abcdefghi',10-abs(@),2*abs(@),SPACE(2*abs(@)))
SET @-=1IF @>-9GOTO a

Возврат только для удобства чтения.

Перепробовал множество других вариаций, включая таблицы чисел, это было самое короткое время.



2

Japt , 20 байт

9Æ9Ç>YÃê1 Ë?S:°EsH
ê

Джапт Переводчик

Вывод в виде массива массивов символов. -RФлаг не нужно работать, он просто делает выход выглядеть лучше.

Объяснение:

9Æ9Ç                    create a 9x9 2D array 
    >YÃ                 fill bottom left triangle with "false", upper right with "true"
       ê1               mirror horizontally
          Ë?S           replaces "true" with a space
             :°EsH      replaces "false" with the horizontal index + 1 converted to base 32
                  \n    Store the result in U (saves bytes by not closing braces)
                    ê   palindromize vertically

1

Stax , 18 байт

â4+╤jo♂▐▀3bkWíæß╝╖

Запустите и отладьте его

Объяснение:

9R$|[|<Va17T|]r|>\|pm Full program
9R$                   Produce "123456789"
   |[|<               Left-aligned prefixes (["1        ", "12       ", ...])
       Va17T          Produce "abcdefghi"
            |]        Suffixes (["abcdefghi", "bcdefghi", ...])
              r|>     Reverse and left-align (["        i", "       hi", ...])
                 \    Zip both arrays (["1                i", "12              hi", ...])
                  |p  Palindromize array
                    m Map over array, printing each with a newline                        

1

APL (Dyalog Unicode) , 30 байтов

(⊢⍪1↓⊖)(↑,\1↓⎕d),⌽↑,\⌽8199↑⎕a

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

преобразовать в матрицу (автозапчасти с пробелами)

  • ,\ префиксы

  • 1↓ первый элемент выпал из

  • ⎕d эта строка '0123456789'

  • Это дает матрицу символов

1        
12       
123      
1234     
12345    
123456   
1234567  
12345678 
123456789

, соединенный с

  • обращенный

  • matrixified

  • ,\ префиксы

  • обращенный

  • 819⌶ и в нижнем регистре

  • 9↑ первые 9 элементов

  • ⎕a эта строка 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

  • Это дает матрицу символов

        я
       Здравствуй
      ГХИ
     FGHI
    efghi
   defghi
  cdefghi
 bcdefghi
ABCDEFGHI

и по этому результату

1 я
12 привет
123 гхи
1234 фнт
12345 Efghi
123456 defghi
1234567 cdefghi
12345678 bcdefghi
123456789abcdefghi

выполнить следующий поезд (⊢⍪1↓⊖)

правильный аргумент

соединены вертикально с

1↓ первый ряд пропущен (это позволяет избежать повторения среднего ряда)

правильный аргумент перевернут по вертикали


Другие решения

33 байта

(⊢⍪1↓⊖)(↑,\⍕¨q),⌽↑,\⎕ucs 106-q←⍳9

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

33 байта

(⊢⍪1↓⊖)(↑,\⍕¨q),⌽↑,\⌽ucs 96+q←⍳9

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


1

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

G↗↓←⁹β←G↖↓⁹⭆χι‖O↓

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

G↗↓←⁹β

Нарисуйте нижний прямоугольный треугольник и заполните его строчными буквами. (Заливка основана на разбиении плоскости на буквы алфавита и последующем копировании нарисованной области.)

Двигайтесь влево, чтобы нарисовать числовой треугольник.

G↖↓⁹⭆χι

Нарисуйте нижний левый треугольник и заполните его, используя цифры. (Поскольку треугольник нарисован слева от начала координат, цифры взяты по правому краю, поэтому используются только цифры от 1 до 9.)

‖O↓

Подумайте, чтобы завершить нижнюю половину.


1

V , 25 , 21 байт

¬19¬ai8ñHÄ/á
r ge.YGp

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

Сохранено 2-4 байта благодаря nmjcman101!

HexDump:

00000000: ac31 39ac 6169 38f1 48c4 2fe1 0a72 2067  .19.ai8.H./..r g
00000010: 652e 5947 70                             e.YGp

Я знаю, что все, что я делаю, это выкладываю ваши ответы сегодня, но я думаю, что это работает для 23: попробуйте это онлайн!
nmjcman101

@ nmjcman101 По какой-то причине я не могу понять, как работает эта версия. Но я понял, что еще короче, так что спасибо!
Джеймс

Это пошло до конца /\d*поиска
nmjcman101

1

J , 44 байта

(m]\u:49+i.9),.(m=.,}.@|.)]\&.(|."1)u:97+i.9

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

Я попытался сгенерировать численно маску из 1 и нуля для индексации, но стоимость избавления от лишней строки была высока, и я сдался:

   (9-.~i.18){0<:-/~(,|.)i.9
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1
1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1
1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1


1

Japt, 24 байта

Возвращает массив строк

9Æ´AçXÄ
c¡A°îYd#a
Vù y ê

Проверь это


объяснение

9Æ            :Map each X in the range [0,9)
  ´A          :  Prefix decrement A (initially 10)
    ç         :  Repeat
     XÄ       :  X+1
\n            :Assign to variable U
 ¡            :Map each element at index Y in U
  A°          :  Postfix increment A
    î         :  Repeat
      d       :  The character at codepoint
     Y #a     :  Y+97
c             :Concatenate with U
\n            :Assign to variable V
Vù            :Left pad each element in V to the length of the longest element
   y          :Transpose
     ê        :Palindromise

альтернативы

9õÈîZqÃú Ë+EòdEn#i)¬ù9Ãê

Проверь это

9ÇòdZn#i)cZòÄ)¬Ãú ®éJ´Ãê

Проверь это


Теперь мне интересно, если бы это горизонтальное строительство не привело к более короткому решению! : \
Лохматый

1

QBasic , 87 байт

Анонимная функция, которая не принимает ввод и выводит данные на консоль.

For y=-8To 8:z=Abs(y):a$="123456789abcdefghi":?Mid$(a$,1,9-z)Spc(2*z)Mid$(a$,10+z):Next

Этот ответ технически является полиглотом и будет функционировать в VBA.



1

Befunge-93 , 314 308 байт

<p0+3*67p0+4*77p0+3*77p0-7*88p0-6*88"#v#v>"
"i        "11g1-21p56+1g1+56+1p28*1g1+28*1p  ^       >25*
"        1"92g1+82p56+2g1-56+2p28*2g1-28*2p91g00g`#v_^   >
"ihgfedcba "93p26*3g1-26*3p">^"88*7-0p88*7-4pv     >25*
"987654321 "14p26*4g1+26*4p26*4g12g`#v_            ^
                             >:#,_@#:<

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

Гольф 6 байтов, поместив >с pинструкцией



1

PowerShell 5.1, 70 69 64 57 байт

Спасибо Mazzy за -7 байт

1..9+8..1|%{-join(1..$_+'  '*(9-$_)+' ihgfedcba'[$_..1])}

Получается, склеив это вручную, сохраняет байт. Создание всего одного мега-соединения также экономит еще 5. Также работает, превращая диапазон целых чисел в char [], чтобы получить ai. Использование диапазона над реальными буквами на 5 байт лучше.


1
попробуйте это: 1..9+8..1|%{-join(1..$_+' '*(9-$_)+' ihgfedcba'[$_..1])}. Записка ' '*(9-$_)содержит 2 пробела
18:05

1
@ mazzy ooof, пропустил этот трюк с двойным пробелом. Я думал о различных математических утверждениях, но очевидное решение никогда не приходило мне в голову.
Веска

1

C (GCC) ,143 142 127 + 10 = 137 136 + 10 = 146 (флаги компилятора) байтов

-1 байт, заменяя логическое ИЛИ побитовым оператором.

-5 байтов благодаря Логерну.

+9 байт, чтобы исправить срединную линию, которая выводилась дважды.

char*s="123456789abcdefghi";G{for(;j<18;++j)putchar(i>j|j>17-i?s[j]:32);puts("");}f(){int i=0,j=0;for(;i++<8;)G;g(i+1,j);for(;i-->1;)G;}

Флаг компилятора:

-DG=g(i,j)

Этот макрос анализирует случаи g(i,j): объявления функций и вызовов.

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

Другой подход, чем отличный ответ Pietu1998 , более простой (и читаемый), но более высокий балл.

Точка входа является функцией f() ; Функция g()обрабатывает печать каждой последовательной строки.

Можно сделать полную программу переименованием f в main, но это все же увеличит счет.

Красивая версия, макрос Gрасширен:

char *s = "123456789abcdefghi";
int g(int i, int j) {
    for(; j < 18; ++j)
        putchar((i > j | j > 17 - i) ? s[j] : 32);
    puts(""); // Break the line -- shorter than putchar(10) or printf("\n")
}
int f() {
    int i = 0, j = 0; // j is constant, declared here to not have to declare and init it inside g()
    for(; i++ < 8;) // Upper half of the tie
        g(i, j);
    g(i + 1, j); // Median line
    for(; i-- > 1;) // Lower half; --i > 0 would also work for the condition
        g(i, j);
}


137, но +10 для флагов компилятора
joH1

Всего 137, 127 байтов кода и 10 байтов флагов компилятора.
Логерн

Ой, простите, мой плохой. Обновление сейчас!
JoH1

@Logern Я позволил себе переименовать макрос Gв соответствии с именем функции.
JoH1



0

VBA, 75 байт

Функция анонимного непосредственного окна VBE, которая не принимает входные данные и не выводит данные на консоль.

For y=-8To 8:z=Abs(y):a="123456789abcdefghi":Mid(a,10-z)=Space(2*z):?a:Next

0

Желе , 22 21 байт

9R€z⁶Zµạ106Ọ$Ṡ¡€Uṭ)ŒḄ

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

Полагается на (вероятное) непреднамеренное поведение, которое, когда (знак) действует на символ, приводит к Python None. Из-за этого выполняется однобайтовая проверка того, является ли его аргумент ненулевым целым числом, поскольку Noneв Python это false. Если это поведение изменилось, то работает и для еще одного байта.

Функция, которая возвращает список строк.



0

Python 2 , 97 94 байта

i=o="123456789abcdefghi";c=8
while c:i=i[:c]+' '*(9-c)*2+i[-c:];o=i+'\n'+o+'\n'+i;c-=1
print o

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

Размещается только в качестве альтернативы использованию, eval()и потому что я наконец получил его ниже 100. Обычно начинается со среднего ряда, а затем работает как вверх, так и вниз одновременно.



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.