Порахуйте по діагоналі!


30

У нас багато горизонтальної осі для чисел, але я, чесно кажучи, думаю, що вони нудні. Ваше завдання сьогодні - побудувати мені ділянку діагональної осі між двома різними невід’ємними цілими числами, заданими як вхідні дані.

Як побудувати вісь діагоналі?

  • Візьмемо приклад із введенням 0, 5. Наша вісь повинна виглядати так:

    0
     1
      2
       3
        4
         5
    
  • Однак наша вісь повинна виглядати приємно і для чисел, які мають більше цифр! Якщо введенням є, наприклад 0, 14, нова вісь повинна бути:

    0
     1
      2
       3
        4
         5
          6
           7
            8
             9
              10
                11
                  12
                    13
                      14
    
  • Ідея полягає в тому, що перша цифра наступного числа на осі завжди повинна розміщуватися точно після останньої цифри попереднього числа. Щоб зрозуміти ідею ще краще, ось ще один приклад із 997, 1004:

    997 рік
       998
          999 рік
             1000
                 1001
                     1002
                         1003
                             1004
    

Правила

  • Ви можете припустити, що введення відбувається у порядку зростання або зменшення (ви можете вибрати між 5,3і 3,5).

  • Ви також можете припустити, що різниця між двома цілими числами нижче 100.

  • У вас може бути провідна нова лінія або послідовний пробіл (у кожному рядку). Трейлінг пробілів / нових рядків також добре.

  • Лазівки за замовчуванням заборонені.

  • Ви можете приймати введення та забезпечувати вихід будь-яким стандартним значенням .

  • Це , тому найкоротший код у байтах кожною мовою виграє!


Інші тестові випадки

  • 1, 10:

    1
     2
      3
       4
        5
         6
          7
           8
            9
             10
    
  • 95, 103:

    95
      96
        97
          98
            99
              100
                 101
                    102
                       103
    
  • 999999, 1000009:

    999999
          1000000
                 1000001
                        1000002
                               1000003
                                      1000004
                                             1000005
                                                    1000006
                                                           1000007
                                                                  1000008
                                                                         1000009
    

Чи дозволені провідні пробіли, або перше число повинно бути точно в лівій частині екрана?
Nathan.Eilisha Shiraini

@NathanShiraini Провідні нові рядки дозволені
містер Xcoder


@StepHen Це трохи складніше, хоча, спасибі за довідку.
Містер Xcoder

1
@Adnan У вас може бути провідна нова лінія або послідовний пробіл у кожному рядку.
Містер Xcoder

Відповіді:


19

05AB1E , 8 7 6 байт

Завдяки Magic Octopus Urn за збереження байта!

Це якось працює, але, чесно кажучи, я поняття не маю, чому.

Код

Ÿvy.O=

Використовує кодування 05AB1E . Спробуйте в Інтернеті!

Пояснення

Ÿ          # Create the range [a, .., b] from the input array
 vy        # For each element
   .O      #   Push the connected overlapped version of that string using the
                 previous version of that string. The previous version initially
                 is the input repeated again. Somehow, when the input array is
                 repeated again, this command sees it as 1 character, which gives
                 the leading space before each line outputted. After the first
                 iteration, it reuses on what is left on the stack from the
                 previous iteration and basically attaches (or overlaps) itself 
                 onto the previous string, whereas the previous string is replaced 
                 by spaces and merged into the initial string. The previous string
                 is then discarded. We do not have to worry about numbers overlapping 
                 other numbers, since the incremented version of a number never
                 overlaps entirely on the previous number. An example of 123 and 456:

                 123
                    456

                 Which leaves us "   456" on the stack.
     =     #   Print with a newline without popping

.O = pop a,b push connected_overlap(b) (deprecated)- О, гадаю?
Чарівна восьминога урна

@MagicOctopusUrn Так, .Oце надзвичайно баггі та застаріло вже більше року, тому я не маю уявлення, що працює, а що ні. Я міг би поклятися, що мені потрібно Î, але це раптом вже не здається (?). Спасибі! :)
Аднан

1
До речі, Îпотрібно було зменшити максимальну кількість провідних просторів до 1.
Аднан

Я ... Зачекайте ... Що, як ...?
Чарівна восьминога урна

1
@ Mr.Xcoder додано
Аднан

14

Python 2 , 43 байти

lambda a,b:'\v'.join(map(str,range(a,b+1)))

Використовує вертикальну вкладку, щоб зробити ефект сходів. Спосіб \vвідображення тета залежить від консолі, тому він може працювати не скрізь (як TIO).
запущений код


Чи можете ви використовувати буквал \x0bу своєму коді, щоб зберегти байт?
Дом Гастінгс

@DomHastings, можливо, я не знаю як це
Rod

Я тільки тестував це, і, здається, працює. Для введення символу у файл для тестування я використав Sublime Text і зробив пошук і заміну в режимі регулярного вибору для \\vі замінив, \x0Bякий відображає VTна його місці символ для озброєння, ви можете опублікувати реверсивний шестигранник ( xxdабо щось таке) або просто констатую, що: " \vце буквальна вертикальна вкладка", я думаю, це було б справедливо. Сподіваюся, що це допомагає!
Дом Гастінгс

13

Деревне вугілля , 9 8 байт

F…·NN⁺¶ι

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

Посилання на багатослівну версію коду. Введіть у порядку зростання.

  • 1 байт збережено завдяки лише ASCII!

Приємно, Вугілля знову перемагає це!
Містер Xcoder


EDIT: Деревне вугілля перевершило ... Вау
містер Xcoder

2
@ Mr.Xcoder принаймні я знаю, як працює моя відповідь. :-D
Чарлі

7

R, 70 69 61 байт

function(a,b)for(i in a:b){cat(rep('',F),i,'
');F=F+nchar(i)}

Функція, яка приймає змінну початку та кінця в якості аргументів. Петлі над послідовністю та друкує кожен елемент, попередньо маючи достатньо пробілів. Fпочинається як FALSE=0і під час кожної ітерації до нього додається кількість символів для цього значення. Fвизначає кількість надрукованих пробілів.

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

-8 байт завдяки @Giuseppe


Я бачу там 70 байт. Використовуючи scan()вдвічі, його можна зменшити до 67 байт for(i in scan():scan()){cat(rep(' ',F),i,'\n',sep='');F=F+nchar(i)}.
djhurio

На жаль, вам доведеться скинути F, інакше функцію можна використовувати лише один раз у нових сеансах. F=0;for(i in scan():scan()){cat(rep(' ',F),i,'\n',sep='');F=F+nchar(i)}(71 байт)
djhurio

@djhurio Всередині функції це не потрібно, оскільки F змінюється лише у власному просторі імен. Також я рахую 69 байт, використовуючи nchar.
JAD

1
Але заміна \nна фактичний новий рядок теж працює, і це, мабуть, не коштує двох байтів.
JAD

1
Добре, я думав зловживати автоматичним інтервалом cat, але я не міг думати прямо і зрозуміти це чомусь.
JAD

6

C #, 90 89 85 байт

s=>e=>{var r="";for(int g=0;e>s;g+=(s+++"").Length)r+="".PadLeft(g)+s+"\n";return r;}

Збережено 1 байт завдяки @LiefdeWen.
Збережено 4 байти завдяки @auhmaan.

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

Повна / відформатована версія:

namespace System
{
    class P
    {
        static void Main()
        {
            Func<int, Func<int, string>> f = s => e =>
            {
                var r = "";
                for (int g = 0; e > s; g += (s++ + "").Length)
                    r += "".PadLeft(g) + s + "\n";

                return r;
            };

            Console.WriteLine(f(0)(5));
            Console.WriteLine(f(0)(14));
            Console.WriteLine(f(997)(1004));
            Console.WriteLine(f(1)(10));
            Console.WriteLine(f(95)(103));
            Console.WriteLine(f(999999)(1000009));

            Console.ReadLine();
        }
    }
}

1
+1, зараз у вас точно немає 5 к; D
містер Xcoder

1 байт при i<=eдоe>i
LiefdeWen

@LiefdeWen Спасибі :)
TheLethalCoder

Я вірю, що ви можете зберегти ще 4 байти, видаливши iта sзамість цього скориставшись
auhmaan

@auhmaan Спасибі не знаю, чому я ніколи не думаю використовувати вхідну змінну.
TheLethalCoder

6

Python 2 , 58 54 байти

def f(a,b,s=''):print s;b<a or f(a+1,b,' '*len(s)+`a`)

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


Нічого собі, дивовижне рекурсивне рішення та перевершило більшість відповідей пітона, +1.
officialaimm

Дуже добре, Рууд, ваше рішення також не залежить від ОС та консолі, не використовуючи символів вертикальної вкладки, як це робив Rod.
Рафаель Кот

6

Математика, 59, байти

Grid[(DiagonalMatrix@Range[1+##]/. 0->""+1)-1,Spacings->0]&

вхід

[10,15]

-3 байти @JungHwanMin
проблема з 0 фіксованими (детальніше див. Коментарі),
ніж xngenisis


1
Вау, відповідь, яка насправді містить слово Діагональ
Містер Xcoder

Вам потрібно додати, Spacings -> 0якщо ви хочете, щоб це було точно символом.
Mr.Wizard

Вхід є лише негативним, не гарантовано позитивним.
користувач202729

Grid[(DiagonalMatrix@Range[1+##]/. 0->""+1)-1,Spacings->0]&це найкоротший шлях, який я міг знайти, щоб виправити ці проблеми
ngenisis


5

Математика, 48 байт

Rotate[""<>Table[ToString@i<>" ",{i,##}],-Pi/4]&

оскільки відповідей так багато, я вважав, що цю слід включити

вхід

[0,10]

вихід
введіть тут опис зображення


1
Це не вірно, чи не так? Але +1 лише для того, щоб буквально взяти титул.
Zacharý

5

C, 166 134 95 82 байт

Нова відповідь

Так само як функція не як ціла програма.

f(a,b){int s=0,i;while(a<=b){i=s;while(i--)printf(" ");s+=printf("%i\n",a++)-1;}}

Дякуємо Фолкену за допомогу збити 13 байт (і виправити глюк)!

Дякуємо Стефу Хен за допомогу збити 12 байт!

Дякуємо Zacharý за допомогу, збивши 1 байт!

Старі відповіді

Позбувся int перед головним та змінив const char * v [] на char ** v та позбувся повернення 0;

main(int c,char**v){int s=0;for(int a=atoi(v[1]);a<=atoi(v[2]);a++){for(int i=0;i<s;i++)printf(" ");printf("%i\n",a);s+=log10(a)+1;}}


int main(int c,const char*v[]){int s=0;for(int a=atoi(v[1]);a<=atoi(v[2]);a++){for(int i=0;i<s;i++)printf(" ");printf("%i\n",a);s+=log10(a)+1;}return 0;}

Це мій перший гольф, і я хотів спробувати щось у C. Не впевнений, чи правильно я це відформатував, але мені було весело, роблячи це!

int main(int c, const char * v[]) {
    int s = 0;
    for(int a=atoi(v[1]); a<=atoi(v[2]); a++) {
        for(int i=0; i<s; i++) printf(" ");
        printf("%i\n",a);
        s += log10(a)+1;
    }
    return 0;
}

Пояснення

int s = 0; // Number of spaces for each line

for(int a=atoi(argv[1]); a<=atoi(argv[2]); a++) { // Loop thru numbers

for(int i=0; i<s; i++) printf(" "); // Add leading spaces

printf("%i\n",a); // Print number

s += log10(a)+1; // Update leading spaces

Використання

введіть тут опис зображення


Ласкаво просимо до PPCG! Я вірю, що ви можете перейменовувати argcі argvдо однієї літери змінних.
Стівен

Я думаю, ви можете перемістити int s=0до циклу for, як в for(int s=0;a<=b;a++).
Zacharý

Ах, ваше право дякую, я оновив пост!
Asleepace

Використання int i=s;while(i--)замість for(int i=0;i<s;i++)внутрішнього циклу збереже два байти.
Фолкен

1
Аааа, ваше право забув про log10 на 0 та мінуси, я оновив рішення спасибі!
Asleepace

4

C ++, 167 165 байт

-2 байти завдяки Захарі

#include<string>
#define S std::string
S d(int l,int h){S r;for(int m=0,i=l,j;i<=h;){for(j=0;j<m;++j)r+=32;S t=std::to_string(i++);r+=t;r+=10;m+=t.size();}return r;}

1. Чи можете ви перейти int m=0,i=l,jдо першого forциклу, щоб зберегти байт? 2. Ви можете змінити , r+=t;r+=10щоб r+=t+10? 3. Я когось бив, так.
Zacharý

@ Zacharý Я можу зробити, r+=t+=10але ні r+=t+10, це дало мені помилку
HatsuPointerKun

Але r+=t+=10чи працює? Це не вплине t.size()?
Zacharý

@ Zacharý Так, це працює, лише з +, він говорить, що не може знайти перевантаження з int в якості параметра, але з + = він використовує перевантаження з char
HatsuPointerKun

О, ви могли б перейти ++iдо параметра " std::to_string(i)as", std::to_string(i++)щоб зберегти ще один байт?
Zacharý

4

APL (Dyalog) , 25 24 байти

-1 дякую Захарі .

Припускається ⎕IO←0для нульового підрахунку. Нижня межа вважається лівим аргументом, а верхня межа - правою.

{↑⍵↑⍨¨-+\≢¨⍵}(⍕¨⊣+∘⍳1--)

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

() Застосувати таку негласну функцію між аргументами:

- відняти верхню нижню від верхньої межі

1- відняти це від одного (тобто 1 + ∆)

⊣+∘⍳ ліва нижня межа плюс цілі числа 0 через це

⍕¨ формат (раціоналізувати) кожен

{} Застосувати наступне анонімне на це (представлене ⍵):

≢¨ довжина кожного (кількість)

+\ сукупна сума

- заперечувати

⍵↑⍨¨ для кожного рядкового номера візьміть з кінця стільки символів (колодки з пробілами)

 змішати список рядків у матрицю символів


Може +-⍨бути --?
Zacharý

@ Zacharý Так, звичайно. Спасибі.
Adám

4

Сітківка , 81 78 байт

.+
$*
+`\b(1+)¶11\1
$1¶1$&
1+
$.& $.&
 (.+)
$.1$* 
+1`( *)(.+?)( +)¶
$1$2¶$1$3

Спробуйте в Інтернеті! Приймає введення як новий розділений список з двох цілих чисел. Редагувати: Збережено 3 байти, вкравши код розширення діапазону з моєї відповіді на " Чи поділяємо ми основний кластер?" Пояснення:

.+
$*

Перетворити обидва входи в одинакові.

+`\b(1+)¶11\1
$1¶1$&

Хоча останні два елементи (a, b) списку відрізняються більш ніж на 1, замініть їх на (a, a + 1, b). Це розширює список з кортежу в діапазон.

1+
$.& $.&

Перетворити назад у десятковий екземпляр.

 (.+)
$.1$* 

Перетворити дублюючу копію в пробіли.

+1`( *)(.+?)( +)¶
$1$2¶$1$3

Сукупно підсумовуйте пробіли від кожного рядка до наступного.



3

LOGO , 53 байти

[for[i ? ?2][repeat ycor[type "\ ]pr :i fd count :i]]

Немає "Спробуйте в Інтернеті!" посилання, оскільки весь онлайн-перекладач LOGO не підтримує список шаблонів.

Це список-шаблон (еквівалент функції лямбда на інших мовах).

Використання:

apply [for[i ? ?2][repeat ycor[type "\ ]pr :i fd count :i]] [997 1004]

( applyвикликає функцію)

буде надруковано

997
   998
      999
         1000
             1001
                 1002
                     1003
                         1004

Примітка:

При цьому використовується черепаха ycor(координата Y) для зберігання кількості просторів, необхідних для введення, отже:

  • Перед кожною викликом черепаху потрібно встановити додому в її за замовчуванням і вгору (вгору).
  • windowслід виконати, якщо він ycorстає занадто великим, щоб черепаха рухалася з екрану. Опис windowкоманди: if the turtle is asked to move past the boundary of the graphics window, it will move off screen.на відміну від налаштування за замовчуванням wrap, якеif the turtle is asked to move past the boundary of the FMSLogo screen window, it will "wrap around" and reappear at the opposite edge of the window.

Пояснення:

for[i ? ?2]        Loop variable i in range [?, ?2], which is 2 input values
repeat ycor        That number of times
type "\            space character need to be escaped to be typed out.
pr :i              print the value of :i with a newline
fd count :i        increase turtle's y-coordinate by the length of the word :i. (Numbers in LOGO are stored as words)


3

JavaScript (ES8), 69 67 62 байт

Вводиться як цілі числа, у порядку зростання, використовуючи синтаксис currying. Повертає масив рядків.

x=>y=>[...Array(++y-x)].map(_=>s="".padEnd(s.length)+x++,s="")

Спробуй це

o.innerText=(f=

x=>y=>[...Array(++y-x)].map(_=>s="".padEnd(s.length)+x++,s="")

)(i.value=93)(j.value=105).join`\n`
oninput=_=>o.innerText=f(Math.min(i.value,j.value))(Math.max(i.value,j.value)).join`\n`
label,input{font-family:sans-serif}input{margin:0 5px 0 0;width:100px;}
<label for=i>x: </label><input id=i type=number><label for=j>y: </label><input id=j type=number><pre id=o>


3

Japt , 12 байт

òV
£¯Y ¬ç +X

Приймає введення в будь-якому порядку і завжди повертає числа у порядку зростання, як масив рядків.

Спробуйте в Інтернеті! з -Rпрапором, щоб приєднати до масиву нові рядки.

Пояснення

Неявне введення Uта V.

òV
£

Створіть інклюзивний діапазон [U, V]і позначте кожне значення на ...

¯Y ¬ç

Значення перед поточним ( ¯Y), приєднаним до рядка ( ¬) і заповненим пробілами ( ç).

+X

Плюс поточне число. Результат масиву неявно виводиться.


3

Python 2 , 65 63 62 61 байт

-2 байти Завдяки @Mr. Xcoder: execбрекети не потрібні

-1 до побачення завдяки @ Zacharý: print s*' 'якprint' '*s

def f(m,n,s=0):exec(n-m+1)*"print' '*s+`m`;s+=len(`m`);m+=1;"

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


1
Вам не потрібні брекети для exec. m,n=input();s=0;exec(n-m+1)*"print s*' '+`m`;s+=len(`m`);m+=1;"достатньо.
Містер Xcoder

1
Я думаю , що ви можете змінити , print s*' 'щоб print' '*sзберегти один байт.
Zacharý

2

JavaScript, 57 байт

f=(x,y,s='')=>y>=x?s+`
`+f(x+1,y,s.replace(/./g,' ')+x):s

55 байт: y=>g=(x,s='')=>y<x?s:s+'\n'+g(x+1,s.replace(/./g,' ')+x)Виклик з виробленням з цілими числами навпаки: f(103)(95).
Кудлатий

54 байти: x=>y=>g=(s='')=>y<x?s:s+'\n'+g(s.replace(/./g,' ')+x++)Дзвінок як f(x)(y)().
Shaggy

2

Python 2, 60 59 байт

-1 байт, завдяки Mr.Xcoder за визначення мого s = 0 як необов'язкової змінної у моїй функції.

def f(l,u,s=0):
 while l<=u:print' '*s+`l`;s+=len(`l`);l+=1

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

Я думаю, що це можливо перенести в лямбда-версію, але я не знаю як. Я також думаю, що між пробілами та довжиною поточного числа є якесь відображення, але цього я ще не з'ясував. Тому я думаю, що ще є можливість для вдосконалення.

Що я зробив, це створити діапазон від нижньої межі lдо верхньої межі uдруку кожного рядка з пробілом, помноженим на число s. Я збільшую множник із довжиною поточного числа.




Я зрозумію, що ви зробили з цією "exec" -версією пізніше цього дня. Можливо, це допоможе мені в майбутніх кодуваннях. Спасибі
Саймон


2

Python 2, 78 77 79 байт

def f(a,b):
 for i in range(a,b+1):print sum(len(`j`)for j in range(i))*' '+`i`

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

f(A, B) буде надрукувати частину осі між A і B включно.

Перший раз відповідаю на виклик!

Використовує та зловживає задумами Python 2 для підрахунку кількості пробілів, які він повинен додати до числа.

-1 байт завдяки Mr.Xcoder

+2, тому що я забув a +1


4
Ласкаво просимо до PPCG! приємна перша відповідь. sum(len(`j`)) forможе стати sum(len(`j`)for, -1 байт
Містер Xcoder

1
Для того, щоб зробити цю відповідь дійсно, необхідно замінити range(a,b)з range(a,b+1), тому що Python має підлогу інклюзивні діапазонів.
Містер Xcoder

Дійсно, я пропустив це. Що більш дивно те , що я зробив додати , що +1 , коли я зробив мої тести! Недарма у мене було 2 байти, коли я набрав його в TiO ...
Nathan.Eilisha Shiraini

2

C (gcc) , 41 38 байт

-3 байти Завдяки лише ASCII

t(x,v){while(x<=v)printf("%d\v",x++);}

Працює над RedHat6, доступ до якого здійснюється через PuTTY

Доказ

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


1
Це не дає правильного виводу.
Ерік Аутгольфер

це складно, виведіть у файл, а потім використовуйте moreцей файл
Giacomo Garabello

2
@GiacomoGarabello Ви повинні надати повний код, щоб ми могли запускати вашу програму. Якщо ви не надаєте робочий тестовий майданчик / не надаєте інструкцій, як запустити свою програму таким чином, щоб вона дала правильний вихід, видаліть цю відповідь.
Містер Xcoder

Подача рядків може повернутися до початку рядка, це залежить. Це працює, коли цього немає.
користувач202729

@ Mr.Xcoder Відредаговано
Giacomo Garabello

2

V , 16 байт

ÀñÙywÒ $pça/jd

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

Це було б простіше, якби я міг прийняти, start end - startале я думаю, що це занадто сильно змінить виклик.

Це приймає початковий номер як вхід в буфер, а кінцевий номер як аргумент. Це на самому ділі створює сходи від startдо , start + endа потім видаляє всі після закінчення номера.


2

MATL , 11 байт

vii&:"t~@Vh

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

Пояснення

Це працює, генеруючи рядок для кожного числа і з'єднуючи його з логічно заперечною копією попереднього рядка. Таким чином, char 0 попередньо дорівнює 0 стільки разів, скільки довжина попереднього рядка. Char 0 відображається як пробіл, а кожен рядок відображається в іншому рядку

v       % Concatenate stack (which is empty): pushes []
ii      % Input two numbers
&:      % Range between the two numbers
"       % For each
  t     %   Duplicate
  ~     %   Logical negation. This gives a vector of zeros
  @     %   Push current number
  V     %   Convert to string
  h     %   Concatenate with the vector of zeros, which gets automatically 
        %   converted into chars.
        % End (implicit). Display stack (implicit), each string on a diferent
        % line, char 0 shown as space


2

Perl, 19 байт

Примітка: \x0bрахується як один байт.

Поряд з іншими, я думав, що використання рухів курсору буде найкоротшим маршрутом, це означає, що він не працює в TIO:

print"$_\x0b"for<>..<>

Використання

perl -e 'print"$_\x0b"for<>..<>' <<< '5
10'
5
 6
  7
   8
    9
     10

Приємно, зовсім не бачили Перла. Чи можете ви додати тестове посилання? Крім того, мені було цікаво, що 1..там робити, оскільки вам дано два цілих числа.
Містер Xcoder

@ Mr.Xcoder Так, 1..я не повністю читав специфікацію, це вже виправлено! Щодо тестування в Інтернеті, оскільки вихід містить вертикальну вкладку, він не відображається так, як очікувалося. Спробую дізнатися, чи можу я знайти рендері, який підтримує символи управління ... Якщо ні, то це мій новий проект!
Дом Гастінгс

2

Japt , 10 9 байт

òV åÈç +Y

Перевірте це в Інтернеті! Повертає масив ліній; -Rпрапор включений, щоб приєднатися до нових рядків для легшого перегляду.

Пояснення

 òV åÈ   ç +Y
UòV åXY{Xç +Y}   Ungolfed
                 Implicit: U, V = inputs, P = empty string
UòV              Create the range [U, U+1, ..., V-1, V].
    åXY{     }   Cumulative reduce: Map each previous result X and current item Y to:
        Xç         Fill X with spaces.
           +Y      Append Y.
                 Implicit: output result of last expression

Стара версія, 10 байт:

òV £P=ç +X

Перевірте це в Інтернеті!

 òV £  P= ç +X
UòV mX{P=Pç +X}  Ungolfed
                 Implicit: U, V = inputs, P = empty string
UòV              Create the range [U, U+1, ..., V-1, V].
    mX{       }  Map each item X to:
         Pç        Fill P with spaces.
            +X     Append X.
       P=          Re-set P to the result.
                   Implicitly return the same.
                 Implicit: output result of last expression

Данг, я щойно придумав таке ж рішення, як і вдосконалення власної відповіді.
Джастін Марінер

2

D, 133 127 126 125 121 119 байт

import std.conv,std.stdio;void f(T)(T a,T b,T s=0){for(T j;j++<s;)' '.write;a.writeln;if(a-b)f(a+1,b,s+a.text.length);}

Забрали желе і APL.

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

Якщо ви добре з консользалежними результатами (виходить за тим же принципом, що і відповідь Giacomos C), ось один на 72 71 байт:

import std.stdio;void f(T)(T a,T b){while(a<=b){a++.write;'\v'.write;}}

Як? (Лише D конкретні хитрощі)

  • f(T)(T a,T b,T s=0) Система шаблонів D може робити висновки про типи
  • for(T j;j++<s;)Цілі за замовчуванням до 0.
  • ' '.write;a.writelnD дозволяє вам подзвонити на fun(arg)зразок arg.fun(одна з небагатьох речей, що перебувають у D)
  • a.text.lengthЯк і вище, і D також дозволяє викликати метод без параметрів, як якщо б це було властивістю ( textце перетворення в рядок)
  • Одне, що може бути актуальним (я цього не використовував), рядки можуть бути в рядках!

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