Альфа-числовий бантик


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
Чи можемо ми замість цього використовувати алфавіт верхнього регістру?
користувач41805

3
@Cowsquack Це було б зміна правила. Він говорить, що виведіть саме цей текст .
Денніс

@Cowsquack Nope - потрібна маленька літера.
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


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

2
64 байти,rep засновані на вашому рішенні, використовуючи ярлик @ Giuseppe плюс функцію, intToUtf8що 0перетворюється на a "".
J.Doe

@ J.Doe чудовий трюк!
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
ê

Перекладач Japt

Виводимо як масив масивів символів. -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

Стакс , 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

, з'єднаний з

  • перевернутий

  • матризовано

  • ,\ префікси

  • перевернутий

  • 819⌶ і нижній регістр

  • 9↑ перші 9 елементів

  • ⎕a ця струна 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

  • Це дає матрицю символів

        i
       Привіт
      гхи
     fghi
    efghi
   дефгі
  cdefghi
 bcdefghi
abcdefghi

і за цим результатом

1 i
12 привіт
123 ghi
1234 fghi
12345 efghi
123456 дефгі
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´Ãê

Перевірте це


Мені зараз цікаво, якщо побудова цього горизонтально, можливо, не призвела б до коротшого рішення! : \
Shaggy

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_            ^
                             >:#,_@#:<

Спробуйте в Інтернеті!

Golfed 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 символи пробілу
mazzy

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's None. Через це є однобайтовий перевіркою на те, чи є аргументом Noneце ненулеве ціле число, оскільки це фальси в Python. Якщо ця поведінка буде змінена, то це також працює на ще один байт.

Функція, яка повертає список рядків.



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

Спробуйте в Інтернеті!

Only posted as an alternative to using eval() and because I finally got it under 100. Basically starts with the middle row then works both up and down at the same time.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.