Çapraz olarak say!


30

Sayılar için çok fazla yatay eksenimiz var, ama dürüst olmak gerekirse sıkıcı olduklarını düşünüyorum. Bugün sizin göreviniz, bana girdi olarak verilen iki farklı negatif olmayan tamsayı arasında çapraz bir eksenin bir kısmını inşa etmektir.

Çapraz eksen nasıl oluşturulur?

  • Girdi ile bir örnek alalım 0, 5. Eksenimiz şöyle görünmelidir:

    0
     1
      2
       3
        4
         5
    
  • Bununla birlikte, eksenimizde daha fazla rakam olan sayılar için iyi görünmelidir! Girdi, örneğin 0, 14, yeni eksen şöyle olmalıdır:

    0
     1
      2
       3
        4
         5
          6
           7
            8
             9
              10
                11
                  12
                    13
                      14
    
  • Fikir, eksen üzerindeki bir sonraki sayının ilk rakamının daima önceki sayının son basamağından sonra yerleştirilmesi gerektiğidir. Bu fikri daha iyi anlamak için işte bir başka örnek 997, 1004:

    997
       998
          999
             1000
                 1001
                     1002
                         1003
                             1004
    

kurallar

  • Girişin artan veya azalan bir sırada olduğunu varsayabilirsiniz ( 5,3ve arasında seçim yapabilirsiniz 3,5).

  • İki tam sayı arasındaki farkın 100'den düşük olduğunu da varsayabilirsiniz.

  • Önde gelen bir yeni hattınız veya tutarlı bir ana alanınız olabilir (her satırda). Sondaki boşluklar / newlines da iyidir.

  • Varsayılan Loopholes yasaktır.

  • Herhangi bir standart ortama göre girdi alabilir ve çıktı alabilirsiniz .

  • Bu , yani her dilde en kısa byte'lık kod kazanıyor!


Diğer Test Durumları

  • 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
    

İzin boşluklar lider, yoksa ilk sayı gelmez sahip ekranın sol tarafında tam olarak?
Nathan.Eilisha Shiraini

@NathanShiraini Önde gelen yeni hatlara izin verilir
Bay


@StepHen Bu biraz zor olsa da, referans için teşekkürler.
Bay Xcoder

1
@Adnan Her satırda baştaki bir yeni hattınız veya tutarlı bir baştaki alanınız olabilir.
Bay Xcoder

Yanıtlar:


19

05AB1E , 8 7 6 bayt

Bayt kaydettiğiniz için Magic Octopus Urn'a teşekkürler !

Bir şekilde çalışıyor, ama dürüstçe, nedenini bilmiyorum.

kod

Ÿvy.O=

05AB1E kodlamasını kullanır . Çevrimiçi deneyin!

açıklama

Ÿ          # 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)- Sanırım?
Magic Octopus Urn,

@MagicOctopusUrn Evet, .O bir yıldan fazla bir süredir aşırı derecede ve kullanımdan uzak olduğu için neyin işe hiçbir fikrim yok. İhtiyacım olduğuna yemin edebilirdim Î, ama bu aniden durum böyle görünmüyor (?). Teşekkürler! :)
Adnan

1
BTT, Îmaksimum önde gelen alan sayısını 1'e düşürmek için gerekliydi.
Adnan

Ben ... Bekle ... Ne, nasıl ...?
Magic Octopus Urn,

1
@ Mr.Xcoder eklendi
Adnan

14

Python 2 , 43 bayt

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

Merdiven efektini oluşturmak için dikey sekmeyi kullanır. İşleniş \vşekli konsola bağlıdır, bu nedenle her yerde çalışmayabilir (TIO gibi).
running code


\x0bBir bayt kaydetmek için kodunuzda değişmez kullanabilirsiniz .
Dom Hastings,

@DomHastings belki bilmiyorum nasıl olsa
Rod

Daha yeni test ettim ve işe yarıyor. Karakteri test etmek için, Sublime Text'i kullandım ve regex modunda buldum ve değiştirdim \\vve yerine onun yerine \x0Bbir VTkarakter gösteren, onu puanlama için değiştiren bir hexdump ( xxdveya başka bir şey) gönderebilir ya da sadece şunu belirtin: " \vdeğişmez bir dikey sekme", bunun adil olacağını düşünüyorum. Umarım yardımcı olur!
Dom Hastings,


7

R, 70 69 61 bayt

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

Başlangıç ​​ve bitiş değişkenini argüman olarak alan işlev. Dizinin üzerinde döngüler olur ve her bir öğeyi yeterli boşlukla önceden hazırlanmış olarak yazdırır. Folarak başlar FALSE=0ve her yineleme sırasında, o değer için karakter miktarı ona eklenir. Fbasılan alanların miktarını belirler.

Çevrimiçi deneyin!

@Giuseppe sayesinde -8 bayt


Orada 70 bayt görüyorum. scan()İki kez kullanarak 67 bayta düşürülebilir for(i in scan():scan()){cat(rep(' ',F),i,'\n',sep='');F=F+nchar(i)}.
djhurio

Maalesef F'yi sıfırlamak zorundasınız, aksi takdirde işlev yeni oturumlarda yalnızca bir kez kullanılabilir. F=0;for(i in scan():scan()){cat(rep(' ',F),i,'\n',sep='');F=F+nchar(i)}(71 byte)
djhurio

@djhurio Bir fonksiyonun içinde bu gerekli değildir, çünkü F sadece kendi isim alanında değiştirilir. Ayrıca, kullanarak 69 bayt sayıyorum nchar.
JAD,

1
Ancak \ngerçek bir yeni satır yerine geçmek de işe yarıyor ve bu iki bayta mal oluyor.
JAD

1
Güzel, otomatik boşluğunu kötüye kullanmayı düşündüm cat, ama doğru düşünemedim ve bir nedenden dolayı çözemedim.
JAD,

6

C #, 90 89 85 bayt

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

@LiefdeWen sayesinde 1 bayt kaydedildi.
@Auhmaan sayesinde 4 bayt kurtarıldı.

Çevrimiçi deneyin!

Tam / Biçimli sürüm:

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, şimdi tam olarak 5k yok; D
Bay Xcoder

1 bayt az i<=eüzeree>i
LiefdeWen

@LiefdeWen Thanks :)
TheLethalCoder

Sana kaldırarak daha 4 bayt kaydedebilirsiniz inanıyoruz ive yeniden syerine
auhmaan

@auhmaan Giriş değişkenini neden kullanmayı asla düşünmediğimi bilmiyorum.
TheLethalCoder

6

Python 2 , 58 54 bayt

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

Çevrimiçi deneyin!


Vay canına, şaşırtıcı özyinelemeli çözüm ve çoğu python cevapları dışında golf, +1.
officialaimm

Çok iyi iş Ruud, çözümünüz aynı zamanda işletim sistemi ve konsoldan bağımsız olarak Rod'un yaptığı gibi dikey sekme karakterini kullanmadan bağımsızdır.
Raphaël Côté

6

Mathematica, 59 bayt

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

giriş

[10,15]

-3 bayt @JungHwanMin
0 sabit sorunu (ayrıntılar için yorumlara bakınız)
thanx to @ngenisis


1
Vay canına, aslında Köşegen
Bay Xcoder

Bunun Spacings -> 0karakteristik olmasını istiyorsanız eklemeniz gerekir .
Mr.Wizard,

Girdi yalnızca negatif değil, pozitif olduğu garanti edilmez.
user202729

Grid[(DiagonalMatrix@Range[1+##]/. 0->""+1)-1,Spacings->0]&sorunları çözmek için bulabildiğim en kısa yol bu
ngenisis


5

Mathematica, 48 bayt

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

Çok fazla cevap olduğu için bunun dahil edilmesi gerektiğini düşündüm.

giriş

[0,10]

çıktı
enter image description here


1
Bu geçerli değil, değil mi? Ama tam anlamıyla unutma sadece 1 +.
Zacharý

5

C, 166 134 95 82 Bayt

Yeni cevap

Sadece bir fonksiyon değil, bütün bir program değil.

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

13 Bayt'ı düşürmeye yardımcı olduğu için Falken'e teşekkürler (ve bir aksaklığı giderin)!

Steph Bay'a, 12 Byte'ı düşürdüğü için teşekkürler!

Yardım için Zacharý için 1 Byte knock off!

Eski Cevaplar

İnt'den önce main'ten kurtuldum ve const char * v [] ile char ** v değiştirildi ve 0 döndürüldü;

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;}

Bu benim ilk golf oynamam ve C de bir şeyler denemek istemiştim.

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;
}

açıklama

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

kullanım

enter image description here


PPCG'ye Hoşgeldiniz! Bir harf değişkenini argcve adını değiştirebileceğine inanıyorum argv.
Stephen

Sanırım int s=0içinde olduğu gibi for döngüsüne taşıyabilirsin for(int s=0;a<=b;a++).
Zacharý

Ahh sağ teşekkürler, yazıyı güncellendi!
Uykuda

İç döngü int i=s;while(i--)yerine kullanmak for(int i=0;i<s;i++)iki bayttan tasarruf sağlar.
Falken

1
Ahhh hakkınız log10 hakkında 0 unuttum ve negatif, ben teşekkürler çözümü güncellendi!
Uykuda,

4

C ++, 167 165 bayt

Zacharý sayesinde -2 bayt

#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. Bir baytı kaydetmek int m=0,i=l,jiçin ilk forçevrime taşıyabilir misiniz ? 2. olarak değiştirebilir r+=t;r+=10misiniz r+=t+10? 3. Birisini yendim yay.
Zacharý

@ Zacharý Yapabilirim r+=t+=10ama yapmadım r+=t+10, bana bir hata verdi
HatsuPointerKun

Fakat r+=t+=10işe yarıyor mu? Bu etkilemez t.size()mi?
Zacharý

@ Zacharî Evet, yalnızca + ile çalışıyor, parametre olarak int ile aşırı yük bulamadığını söylüyor, ancak + = char ile aşırı yükü kullanıyor
HatsuPointerKun

Oh, hareket olabilir ++iiçin std::to_string(i)olduğu gibi std::to_string(i++)bir byte daha kaydetmek için?
Zacharý

4

APL (Dyalog) , 25 24 bayt

-1 sayesinde Zacharý'ya .

⎕IO←0Sıfır bazlı sayım varsayar . Alt sınırı sol argümanı, üst sınırı da sağ argümanı olarak alır.

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

Çevrimiçi deneyin!

(...)  Argümanlar arasına aşağıdaki tacit fonksiyonunu uygulayın:

- üstteki alttan üst alttan çıkart

1- birinden çıkart (yani 1 + ∆)

⊣+∘⍳ sol alt sınır artı 0'dan tamsayılar

⍕¨ her birini biçimlendir (dize)

{… Bunun } üzerine isimsiz olarak aşağıdakileri uygulayın (represented ile temsil edilir):

≢¨ her birinin uzunluğu (sayı)

+\ kümülatif toplam

- negate

⍵↑⍨¨ Her dize edilmiş numara için, uçtan itibaren o kadar çok karakter alın (boşluklu pedler)

 karakter matrisine dizelerin listesini karıştırın


Could +-⍨olmak --?
Zacharý

@ Zacharý Evet, elbette. Teşekkürler.
Adám,

4

Retina , 81 78 bayt

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

Çevrimiçi deneyin! Girdiyi iki tamsayıdan oluşan yeni bir satır listesi olarak alır. Düzenleme: Yanıtımdan aralık genişletme kodunu çalarak 3 bayt kurtarıldı Asıl kümeyi paylaşıyor muyuz? Açıklama:

.+
$*

Her iki girişi de birliğe dönüştürün.

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

Listenin son iki öğesi (a, b) 1'den fazla farklılık gösterse de, onları (a, a + 1, b) ile değiştirin. Bu, listeyi bir dizgiden bir aralığa genişletir.

1+
$.& $.&

Çift kopya halinde tekrar ondalık sayıya dönüştürün.

 (.+)
$.1$* 

Yinelenen kopyayı boşluklara dönüştür.

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

Boşlukları her satırdan diğerine kümülatif olarak toplayın.



3

LOGO, 53 bytes

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

There is no "Try it online!" link because all online LOGO interpreter does not support template-list.

That is a template-list (equivalent of lambda function in other languages).

Usage:

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

(apply calls the function)

will print

997
   998
      999
         1000
             1001
                 1002
                     1003
                         1004

Note:

This uses turtle's ycor (Y-coordinate) to store the number of spaces needed to type, therefore:

  • The turtle need to be set to home in its default position and heading (upwards) before each invocation.
  • window should be executed if ycor gets too large that the turtle moves off the screen. Description of window command: if the turtle is asked to move past the boundary of the graphics window, it will move off screen., unlike the default setting wrap, which 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.

Explanation:

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 bytes

Takes input as integers, in ascending order, using currying syntax. Returns an array of strings.

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

Try it

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 bytes

òV
£¯Y ¬ç +X

Takes input in either order and always returns the numbers in ascending order, as an array of lines.

Try it online! with the -R flag to join the array with newlines.

Explanation

Implicit input of U and V.

òV
£

Create inclusive range [U, V] and map each value to...

¯Y ¬ç

The values before the current (¯Y), joined to a string (¬) and filled with spaces (ç).

+X

Plus the current number. Resulting array is implicitly output.


3

Python 2, 65 63 62 61 bytes

-2 bytes Thanks to @Mr. Xcoder: exec doesn't need braces

-1 bye thanks to @Zacharý: print s*' ' as print' '*s

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

Try it online!


1
You do not need the braces for exec. m,n=input();s=0;exec(n-m+1)*"print s*' '+`m`;s+=len(`m`);m+=1;" suffices.
Mr. Xcoder

1
I think you can change print s*' ' to print' '*s to save one byte.
Zacharý

2

JavaScript, 57 bytes

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

55 bytes: y=>g=(x,s='')=>y<x?s:s+'\n'+g(x+1,s.replace(/./g,' ')+x) Call with currying with the integers reversed: f(103)(95).
Shaggy

54 bytes: x=>y=>g=(s='')=>y<x?s:s+'\n'+g(s.replace(/./g,' ')+x++) Call as f(x)(y)().
Shaggy

2

Python 2, 60 59 bytes

-1 byte thanks to Mr.Xcoder for defining my s=0 as an optional variable in my function.

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

Try it online!

I think it is possible to transfer this into a lambda version, but I do not know how. I also think that there is some sort of mapping between the spaces and the length of the current number, but this I also did not figure out yet. So I think there still is room for improvement.

What i did was creating a range from the lowerbound lto the upper bound u printing each line with a space multiplied with a number s. I am increasing the multiplier with the length of the current number.




I'll figure out you did with that "exec"-version later this day. Maybe it will help me in future codings. Thanks
Simon


2

Python 2, 78 77 79 bytes

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

Try it online!

f(A, B) will print the portion of the axis between A and B inclusive.

First time I answer a challenge!

Uses and abuses Python 2's backticks to count the number of spaces it has to add before the number.

-1 byte thanks to Mr.Xcoder

+2 because I forgot a +1


4
Welcome to PPCG! nice first answer. sum(len(`j`)) for can become sum(len(`j`)for, -1 bytes
Mr. Xcoder

1
To make this answer valid, you must replace range(a,b) with range(a,b+1), because Python has semi inclusive ranges.
Mr. Xcoder

Indeed, I missed that. What's more surprising is that I did add that +1 when I made my tests! No wonder I had 2 bytes missing when I typed it into TiO...
Nathan.Eilisha Shiraini

2

C (gcc), 41 38 bytes

-3 bytes Thanks to ASCII-only

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

Works on RedHat6, accessed via PuTTY

Proof

Try it online!


1
This doesn't produce correct output.
Erik the Outgolfer

it's tricky, output to a file and then use more on that file
Giacomo Garabello

2
@GiacomoGarabello You must provide the full code in order for us to be able to run your program. If you do not provide a working test ground / do not provide instructions on how to run your program such that it produces correct output, please delete this answer.
Mr. Xcoder

Linefeed may return to begin of line, it depends. This does work when it does not.
user202729

@Mr.Xcoder Edited
Giacomo Garabello

2

V, 16 bytes

ÀñÙywÒ $pça/jd

Try it online!

This would be way easier if I could take start end - start but I think that's changing the challenge a bit too much.

This takes the start number as input in the buffer and the end number as an argument. It actually creates the ladder from start to start + end and then deletes everything after the end number.


2

MATL, 11 bytes

vii&:"t~@Vh

Try it online!

Explanation

This works by generating a string for each number and concatenating it with a logically-negated copy of the previous string. Thus char 0 is prepended 0 as many times as the length of the previous string. Char 0 is displayed as a space, and each string is displayed on a different line

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

Swift 4, 115 bytes

I think nobody would have posted a Swift solution anyway...

func f(l:Int,b:Int){for i in l...b{print(String(repeating:" ",count:(l..<i).map{String($0).count}.reduce(0,+)),i)}}

Try it online!


2

Perl, 19 bytes

Note: \x0b is counted as one byte.

Along with others, I thought using cursor movements would be the shortest route, this does mean it doesn't work on TIO:

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

Usage

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

Nice, haven't seen Perl at all in a while. Could you add a testing link? Additionally, I was wondering what the 1.. does there, since you are given two integers.
Mr. Xcoder

@Mr.Xcoder Yeah, 1.. was me not fully reading the spec, that's fixed now! As for testing it online, because the output contains the vertical tab, it doesn't render as expected. Trying to see if I can find a renderer that does support control chars... If not, that might be my new project!
Dom Hastings

2

Japt, 10 9 bytes

òV åÈç +Y

Test it online! Returns an array of lines; -R flag included to join on newlines for easier viewing.

Explanation

 ò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

Old version, 10 bytes:

òV £P=ç +X

Test it online!

 ò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

Dang, I had just come up with the same solution as an improvement to my own answer.
Justin Mariner

2

D, 133 127 126 125 121 119 bytes

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);}

Jelly and APL were taken.

Try it online!

If you're fine with console-dependent results (goes off the same principle as Giacomos's C answer) here's one for 72 71 bytes:

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

How? (Only D specific tricks)

  • f(T)(T a,T b,T s=0) D's template system can infer types
  • for(T j;j++<s;) Integers default to 0.
  • ' '.write;a.writeln D lets you call fun(arg) like arg.fun (one of the few golfy things D has)
  • a.text.length Same as above, and D also allows you to call a method with no parameters as if it was a property (text is conversion to string)
  • One thing that might be relevant (I didn't use this though) newlines can be in strings!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.