Hitung secara diagonal!

30

Kami memiliki banyak sumbu horizontal untuk angka, tapi jujur ​​saya pikir mereka agak membosankan. Tugas Anda hari ini adalah membuat saya bagian dari sumbu diagonal antara dua bilangan bulat non-negatif yang diberikan sebagai input.

Bagaimana cara membuat sumbu diagonal?

  • Mari kita ambil contoh, dengan input 0, 5. Sumbu kami akan terlihat seperti ini:

    0
     1
      2
       3
        4
         5
    
  • Namun, sumbu kami harus terlihat bagus untuk angka yang memiliki lebih banyak digit juga! Jika inputnya, misalnya 0, 14, sumbu baru harus:

    0
     1
      2
       3
        4
         5
          6
           7
            8
             9
              10
                11
                  12
                    13
                      14
    
  • Idenya adalah bahwa digit pertama dari angka berikutnya pada sumbu harus selalu ditempatkan tepat setelah digit terakhir dari angka sebelumnya. Untuk lebih memahami ide tersebut, berikut adalah contoh lain dengan 997, 1004:

    997
       998
          999
             1000
                 1001
                     1002
                         1003
                             1004
    

Aturan

  • Anda dapat berasumsi bahwa input dalam urutan naik atau turun (Anda dapat memilih antara 5,3dan 3,5).

  • Anda juga dapat mengasumsikan bahwa perbedaan antara kedua bilangan bulat lebih rendah dari 100.

  • Anda mungkin memiliki baris baru terdepan atau ruang terdepan yang konsisten (di setiap baris). Ruang tambahan / baris baru juga baik-baik saja.

  • Celah default tidak diperbolehkan.

  • Anda dapat mengambil input dan memberikan output dengan cara standar apa pun .

  • Ini adalah , jadi kode terpendek dalam byte di setiap bahasa menang!


Kasus Uji Lainnya

  • 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
    
Tuan Xcoder
sumber
Apakah ruang diperbolehkan memimpin, atau apakah nomor pertama harus harus persis di sisi kiri layar?
Nathan.Eilisha Shiraini
@NathanShiraini Baris baru terkemuka diizinkan
Tn. Xcoder
Terkait
Stephen
@ LangkahHen Yang ini agak sulit, terima kasih untuk referensi.
Tn. Xcoder
1
@ Adnan Anda mungkin memiliki baris baru terdepan atau ruang terdepan yang konsisten di setiap baris.
Tn. Xcoder

Jawaban:

19

05AB1E , 8 7 6 byte

Terima kasih untuk Magic Octopus Mm karena menghemat satu byte!

Entah bagaimana itu berhasil, tapi jujur ​​saya tidak tahu kenapa.

Kode

Ÿvy.O=

Menggunakan penyandian 05AB1E . Cobalah online!

Penjelasan

Ÿ          # 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
Adnan
sumber
.O = pop a,b push connected_overlap(b) (deprecated)- Oh, kurasa?
Magic Octopus Guci
@ MagicOctopusUrn Ya, .Osangat buggy dan usang selama lebih dari setahun jadi saya tidak tahu apa yang berhasil dan yang tidak. Saya bersumpah bahwa saya perlu Î, tetapi tiba-tiba itu tidak lagi menjadi masalah (?). Terima kasih! :)
Adnan
1
Btw, Îitu diperlukan untuk mengurangi jumlah maksimum ruang memimpin ke 1.
Adnan
Aku ... Tunggu ... Apa, bagaimana ...?
Guci Gurita Ajaib
1
@ Mr.Xcoder menambahkan
Adnan
14

Python 2 , 43 byte

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

Menggunakan tab vertikal untuk membuat efek tangga. Cara \vyang diberikan tergantung pada konsol, sehingga mungkin tidak berfungsi di mana-mana (seperti TIO).
menjalankan kode

tongkat
sumber
Bisakah Anda menggunakan literal \x0bdalam kode Anda untuk menyimpan byte?
Dom Hastings
@HomHastings mungkin, saya tidak tahu bagaimana
Rod
Saya baru saja mengujinya dan tampaknya berhasil. Untuk memasukkan karakter ke dalam file untuk diuji, saya menggunakan Sublime Text dan melakukan pencarian dan penggantian dalam mode regex untuk \\vdan diganti dengan \x0Byang menunjukkan VTkarakter sebagai pengganti untuk mencetak skor Anda dapat memposting hexdump yang dapat dibalik ( xxdatau sesuatu) atau hanya menyatakan bahwa: " \vadalah tab vertikal harfiah", saya pikir itu akan adil. Semoga itu bisa membantu!
Dom Hastings
13

Arang , 9 8 byte

F…·NN⁺¶ι

Cobalah online!

Tautan adalah ke versi kode yang verbose. Masukan dalam urutan menaik.

  • 1 byte disimpan berkat ASCII-only!
Charlie
sumber
Bagus, Charcoal memenangkan ini lagi!
Tn. Xcoder
2
8 byte
ASCII
Suntingan : Arang dikalahkan ... Wow
Tn. Xcoder
2
@ Mr.Xcoder setidaknya saya tahu cara kerja jawaban saya. :-D
Charlie
7

R, 70 69 61 byte

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

Fungsi yang mengambil variabel awal dan akhir sebagai argumen. Simpulkan urutannya, dan cetak setiap elemen, tambahkan spasi yang cukup. Fdimulai sebagai FALSE=0, dan selama setiap iterasi, jumlah karakter untuk nilai tersebut ditambahkan padanya. Fmenentukan jumlah ruang yang dicetak.

Cobalah online!

-8 byte terima kasih kepada @Giuseppe

JAD
sumber
Saya melihat 70 byte di sana. Menggunakan scan()dua kali dapat dikurangi menjadi 67 byte for(i in scan():scan()){cat(rep(' ',F),i,'\n',sep='');F=F+nchar(i)}.
djhurio
Sayangnya Anda harus mengatur ulang F, jika tidak fungsi hanya dapat digunakan sekali dalam sesi baru. F=0;for(i in scan():scan()){cat(rep(' ',F),i,'\n',sep='');F=F+nchar(i)}(71 byte)
djhurio
@djhurio Di dalam fungsi, itu tidak perlu, karena F hanya dimodifikasi dalam namespace-nya sendiri. Juga, saya menghitung 69 byte, menggunakan nchar.
JAD
1
Tetapi mengganti \nbaris baru yang sebenarnya juga berfungsi, dan itu tidak menghabiskan biaya dua byte.
JAD
1
Bagus, saya berpikir untuk menyalahgunakan spasi otomatis cat, tetapi saya tidak bisa berpikir jernih dan mencari tahu untuk beberapa alasan.
JAD
6

C #, 90 89 85 byte

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

Disimpan 1 byte berkat @LiefdeWen.
Disimpan 4 byte berkat @auhmaan.

Cobalah online!

Versi Lengkap / Terformat:

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();
        }
    }
}
TheLethalCoder
sumber
1
+1, sekarang Anda tidak memiliki 5k tepatnya; D
Tn. Xcoder
1 byte at i<=etoe>i
LiefdeWen
@LiefdeWen Terima kasih :)
TheLethalCoder
Saya percaya Anda dapat menyimpan lebih banyak 4 byte dengan menghapus idan menggunakan kembali sebagai sgantinya
auhmaan
@auhmaan Terima kasih tidak tahu mengapa saya tidak pernah berpikir untuk menggunakan variabel input.
TheLethalCoder
6

Python 2 , 58 54 byte

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

Cobalah online!

Arfie
sumber
Wow, solusi rekursif mengejutkan dan golf-out sebagian besar jawaban python, +1
officialaimm
Pekerjaan yang sangat bagus Ruud, solusi Anda juga OS dan konsol-independen dengan tidak menggunakan karakter tab vertikal seperti yang dilakukan Rod.
Raphaël Côté
6

Mathematica, 59, byte

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

memasukkan

[10,15]

-3 byte @JungHwanMin
bermasalah dengan 0 diperbaiki (lihat komentar untuk detail)
thanx ke @ngenisis

J42161217
sumber
1
Wow, jawaban yang sebenarnya mengandung kata Diagonal
Tn. Xcoder
Anda perlu menambahkan Spacings -> 0jika Anda ingin ini sesuai karakter.
Mr.Wizard
Masukannya hanya non-negatif, tidak dijamin positif.
user202729
Grid[(DiagonalMatrix@Range[1+##]/. 0->""+1)-1,Spacings->0]&adalah cara terpendek yang dapat saya temukan untuk memperbaiki masalah itu
ngenisis
5

Mathematica, 48 byte

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

karena ada begitu banyak jawaban, saya pikir ini harus dimasukkan

memasukkan

[0,10]

keluaran
masukkan deskripsi gambar di sini

J42161217
sumber
1
Ini tidak valid, bukan? Tapi +1 hanya untuk mengambil judul secara harfiah.
Zacharý
5

C, 166 134 95 82 Bytes

Jawaban Baru

Sama seperti fungsi bukan sebagai keseluruhan program.

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

Terima kasih kepada Falken untuk membantu mengurangi 13 Bytes (dan memperbaiki kesalahan)!

Terima kasih kepada Steph Hen yang telah membantu mengurangi 12 Bytes!

Terima kasih kepada Zacharý untuk bantuan menjatuhkan 1 Byte!

Jawaban Lama

Menyingkirkan int sebelum main dan mengubah const char * v [] menjadi char ** v dan menyingkirkan return 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;}

Ini adalah pertama kalinya saya bermain golf dan saya ingin mencoba sesuatu dalam C. Tidak yakin apakah saya memformat ini dengan benar, tetapi saya senang membuatnya!

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

Penjelasan

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

Pemakaian

masukkan deskripsi gambar di sini

Tertidur
sumber
Selamat datang di PPCG! Saya yakin Anda bisa mengganti nama argcdan argvmenjadi satu variabel huruf.
Stephen
Saya pikir Anda dapat memindahkan int s=0ke for loop, seperti pada for(int s=0;a<=b;a++).
Zacharý
Ahh, terima kasih, saya memperbarui pos!
Asleepace
Menggunakan int i=s;while(i--)bukannya for(int i=0;i<s;i++)untuk loop dalam akan menghemat dua byte.
Falken
1
Ahhh hak Anda lupa tentang log10 pada 0 dan negatif, saya sudah memperbarui solusinya terima kasih!
Asleepace
4

C ++, 167 165 byte

-2 byte terima kasih kepada Zacharý

#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;}
HatsuPointerKun
sumber
1. Bisakah Anda memindahkan int m=0,i=l,jke forloop pertama untuk menyimpan byte? 2. Bisakah Anda mengubah r+=t;r+=10ke r+=t+10? 3. Saya mengalahkan seseorang, yay.
Zacharý
@ Zacharý yang bisa saya lakukan r+=t+=10tetapi tidak r+=t+10, itu memberi saya kesalahan
HatsuPointerKun
Tetapi r+=t+=10apakah berhasil? Bukankah itu memengaruhi t.size()?
Zacharý
@ Zacharý Ya, ia bekerja, hanya dengan +, ia mengatakan tidak dapat menemukan kelebihan dengan int sebagai parameter, tetapi dengan + = ia menggunakan kelebihan dengan char
HatsuPointerKun
Oh, bisa Anda memindahkan ++ike std::to_string(i)sebagai std::to_string(i++)menyimpan satu byte lebih?
Zacharý
4

APL (Dyalog) , 25 24 byte

-1 terima kasih kepada Zacharý .

Diasumsikan ⎕IO←0untuk penghitungan berbasis nol. Mengambil argumen batas bawah sebagai argumen kiri dan argumen batas atas sebagai argumen kanan.

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

Cobalah online!

(... ) terapkan fungsi diam-diam berikut di antara argumen:

- kurangi bagian atas bawah dari batas atas

1- kurangi itu dari satu (yaitu 1 + ∆)

⊣+∘⍳ batas bawah kiri ditambah bilangan bulat 0 melaluinya

⍕¨ format (stringify) masing-masing

{... } terapkan anonim berikut untuk itu (diwakili oleh ⍵):

≢¨ panjang masing-masing (angka)

+\ jumlah kumulatif

- meniadakan

⍵↑⍨¨ untuk setiap nomor yang dirangkai, ambil banyak karakter dari ujungnya (pad dengan spasi)

 mencampur daftar string ke dalam matriks karakter

Adm
sumber
Bisa +-⍨jadi --?
Zacharý
@ Zacharya Ya, tentu saja. Terima kasih.
Adám
4

Retina , 81 78 byte

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

Cobalah online! Mengambil input sebagai daftar dua bilangan bulat yang dipisahkan baris baru. Sunting: Disimpan 3 byte dengan mencuri kode ekspansi-rentang dari jawaban saya ke Apakah kita berbagi cluster utama? Penjelasan:

.+
$*

Ubah kedua input menjadi unary.

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

Sementara dua elemen terakhir (a, b) dari daftar berbeda lebih dari 1, gantikan dengan (a, a + 1, b). Ini memperluas daftar dari tuple menjadi range.

1+
$.& $.&

Konversi kembali ke desimal dalam rangkap dua.

 (.+)
$.1$* 

Ubah salinan duplikat menjadi spasi.

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

Secara kumulatif jumlah ruang dari setiap baris ke baris berikutnya.

Neil
sumber
3

Pyth , 14 13 byte

V}FQ
=k+*dlkN

Cobalah online!

Biarawati Bocor
sumber
3

LOGO , 53 byte

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

Tidak ada "Coba online!" tautan karena semua penerjemah LOGO online tidak mendukung daftar templat.

Itu adalah daftar template (setara dengan fungsi lambda dalam bahasa lain).

Pemakaian:

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

(apply memanggil fungsi)

akan dicetak

997
   998
      999
         1000
             1001
                 1002
                     1003
                         1004

catatan:

Ini menggunakan kura-kura ycor(koordinat Y) untuk menyimpan jumlah ruang yang dibutuhkan untuk mengetik, oleh karena itu:

  • Kura-kura harus diatur ke rumah dalam posisi default dan pos (ke atas) sebelum setiap doa.
  • windowharus dieksekusi jika ycorterlalu besar sehingga kura-kura bergerak dari layar. Deskripsi windowperintah if the turtle is asked to move past the boundary of the graphics window, it will move off screen.:, tidak seperti pengaturan default wrap, yangif 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.

Penjelasan:

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)
pengguna202729
sumber
3

05AB1E , 8 byte

Ÿʒ¾ú=þv¼

Cobalah online!

Terima kasih kepada Adnan .

Erik the Outgolfer
sumber
Ahh, itu sangat pintar. Anda dapat mengganti vydemi ʒdan gFdemi vmenghemat 2 byte.
Adnan
@ Adnan Saya tidak berharap ʒtrik lama yang bagus masih digunakan ...
Erik the Outgolfer
3

JavaScript (ES8), 69 67 62 byte

Mengambil input sebagai bilangan bulat, dalam urutan naik, menggunakan sintaks currying. Mengembalikan array string.

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

Cobalah

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>

Shaggy
sumber
3

Japt , 12 byte

òV
£¯Y ¬ç +X

Mengambil input dalam urutan apa pun dan selalu mengembalikan angka dalam urutan naik, sebagai larik garis.

Cobalah online! dengan -Rbendera untuk bergabung dengan array dengan baris baru.

Penjelasan

Masukan implisit dari Udan V.

òV
£

Buat rentang inklusif [U, V]dan petakan setiap nilai ke ...

¯Y ¬ç

Nilai sebelum saat ini ( ¯Y), bergabung ke string ( ¬) dan diisi dengan spasi ( ç).

+X

Ditambah nomor saat ini. Array yang dihasilkan adalah keluaran secara implisit.

Justin Mariner
sumber
3

Python 2 , 65 63 62 61 byte

-2 byte Terima kasih kepada @Mr. Xcoder: exectidak perlu kawat gigi

-1 sampai jumpa berkat @ Zacharý: print s*' 'asprint' '*s

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

Cobalah online!

officialaimm
sumber
1
Anda tidak perlu kawat gigi untuk eksekutif. m,n=input();s=0;exec(n-m+1)*"print s*' '+`m`;s+=len(`m`);m+=1;"cukup.
Tn. Xcoder
1
Saya pikir Anda dapat mengubah print s*' 'ke print' '*suntuk menyimpan satu byte.
Zacharý
2

JavaScript, 57 byte

f=(x,y,s='')=>y>=x?s+`
`+f(x+1,y,s.replace(/./g,' ')+x):s
tsh
sumber
55 bytes: y=>g=(x,s='')=>y<x?s:s+'\n'+g(x+1,s.replace(/./g,' ')+x)Panggilan dengan currying dengan bilangan bulat terbalik: f(103)(95).
Shaggy
54 byte: x=>y=>g=(s='')=>y<x?s:s+'\n'+g(s.replace(/./g,' ')+x++)Panggil sebagai f(x)(y)().
Shaggy
2

Python 2, 60 59 byte

-1 byte terima kasih kepada Mr.Xcoder untuk mendefinisikan s = 0 sebagai variabel opsional di fungsi saya.

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

Cobalah online!

Saya pikir mungkin untuk mentransfer ini ke versi lambda, tapi saya tidak tahu caranya. Saya juga berpikir bahwa ada semacam pemetaan antara spasi dan panjang angka saat ini, tetapi ini saya juga belum mencari tahu. Jadi saya pikir masih ada ruang untuk perbaikan.

Apa yang saya lakukan adalah membuat rentang dari lowerbound lhingga batas atas umencetak setiap baris dengan spasi dikalikan dengan angka s. Saya meningkatkan pengali dengan panjang angka saat ini.

Simon
sumber
59 bytes
Mr. Xcoder
Alternatif 59 byte
Tn. Xcoder
Saya akan mencari tahu Anda lakukan dengan "eksekutif" -versi nanti hari ini. Mungkin itu akan membantu saya dalam pengkodean di masa depan. Terima kasih
Simon
2

Python 2, 78 77 79 byte

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

Cobalah online!

f(A, B) akan mencetak bagian sumbu antara A dan B inklusif.

Pertama kali saya menjawab tantangan!

Menggunakan dan menyalahgunakan backticks Python 2 untuk menghitung jumlah spasi yang harus ditambahkan sebelum nomor.

-1 byte terima kasih kepada Mr.Xcoder

+2 karena saya lupa a +1

Nathan.Eilisha Shiraini
sumber
4
Selamat datang di PPCG! jawaban pertama yang bagus. sum(len(`j`)) fordapat menjadi sum(len(`j`)for, -1 byte
Tn. Xcoder
1
Untuk membuat jawaban ini valid, Anda harus mengganti range(a,b)dengan range(a,b+1), karena Python memiliki rentang semi inklusif.
Tn. Xcoder
Memang, saya melewatkan itu. Apa yang lebih mengejutkan adalah bahwa saya tidak menambahkan bahwa 1 ketika saya membuat tes saya! Tidak heran saya memiliki 2 byte yang hilang ketika saya mengetiknya ke TiO ...
Nathan.Eilisha Shiraini
2

C (gcc) , 41 38 byte

-3 byte Berkat ASCII saja

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

Bekerja pada RedHat6, diakses melalui Putty

Bukti

Cobalah online!

Giacomo Garabello
sumber
1
Ini tidak menghasilkan output yang benar.
Erik the Outgolfer
itu rumit, output ke file dan kemudian gunakan morepada file itu
Giacomo Garabello
2
@GiacomoGarabello Anda harus memberikan kode lengkap agar kami dapat menjalankan program Anda. Jika Anda tidak memberikan tempat uji kerja / tidak memberikan instruksi tentang cara menjalankan program Anda sehingga menghasilkan output yang benar, harap hapus jawaban ini.
Tn. Xcoder
Linefeed dapat kembali ke awal baris, tergantung. Ini berfungsi ketika tidak.
user202729
@ Mr.Xcoder Diedit
Giacomo Garabello
2

V , 16 byte

ÀñÙywÒ $pça/jd

Cobalah online!

Ini akan jauh lebih mudah jika saya dapat mengambil start end - starttetapi saya pikir itu mengubah tantangan terlalu banyak.

Ini mengambil nomor awal sebagai input dalam buffer dan nomor akhir sebagai argumen. Ini benar-benar membuat tangga dari startke start + enddan kemudian menghapus semuanya setelah angka akhir.

nmjcman101
sumber
2

MATL , 11 byte

vii&:"t~@Vh

Cobalah online!

Penjelasan

Ini bekerja dengan menghasilkan string untuk setiap nomor dan menyatukannya dengan salinan string sebelumnya yang dinegasikan secara logis. Karenanya 0 karakter diawali 0 sebanyak panjang string sebelumnya. Karakter 0 ditampilkan sebagai spasi, dan setiap string ditampilkan pada garis yang berbeda

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
Luis Mendo
sumber
2

Cepat 4 , 115 byte

Saya pikir tidak ada yang akan memposting solusi Swift pula ...

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

Cobalah online!

Tuan Xcoder
sumber
2

Perl, 19 byte

Catatan: \x0bdihitung sebagai satu byte.

Bersama dengan yang lain, saya pikir menggunakan gerakan kursor akan menjadi rute terpendek, ini berarti itu tidak bekerja di TIO:

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

Pemakaian

perl -e 'print"$_\x0b"for<>..<>' <<< '5
10'
5
 6
  7
   8
    9
     10
Dom Hastings
sumber
Bagus, belum melihat Perl sama sekali. Bisakah Anda menambahkan tautan pengujian? Selain itu, saya bertanya-tanya apa 1..fungsinya di sana, karena Anda diberi dua bilangan bulat.
Tn. Xcoder
@ Mr.Xcoder Ya, 1..apakah saya tidak sepenuhnya membaca spek, itu sudah diperbaiki sekarang! Sedangkan untuk mengujinya secara online, karena output berisi tab vertikal, itu tidak menghasilkan seperti yang diharapkan. Mencoba melihat apakah saya dapat menemukan perender yang mendukung chars kontrol ... Jika tidak, itu mungkin proyek baru saya!
Dom Hastings
2

Japt , 10 9 byte

òV åÈç +Y

Uji secara online! Mengembalikan array garis; -Rtermasuk bendera untuk bergabung di baris baru agar lebih mudah dilihat.

Penjelasan

 ò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

Versi lama, 10 byte:

òV £P=ç +X

Uji secara 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
Produksi ETH
sumber
Dang, saya baru saja datang dengan solusi yang sama dengan peningkatan jawaban saya sendiri.
Justin Mariner
2

D, 133 127 126 125 121 119 byte

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 dan APL diambil.

Cobalah online!

Jika Anda baik-baik saja dengan hasil yang bergantung pada konsol (menjalankan prinsip yang sama dengan jawaban C Giacomos) di sini satu untuk 72 71 byte:

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

Bagaimana? (Hanya trik spesifik D)

  • f(T)(T a,T b,T s=0) Sistem template D dapat menyimpulkan tipe
  • for(T j;j++<s;)Integer default ke 0.
  • ' '.write;a.writelnD memungkinkan Anda memanggil fun(arg)seperti arg.fun(salah satu dari beberapa hal yang D miliki)
  • a.text.lengthSama seperti di atas, dan D juga memungkinkan Anda untuk memanggil metode tanpa parameter seolah-olah itu adalah properti ( textkonversi ke string)
  • Satu hal yang mungkin relevan (meskipun saya tidak menggunakan ini) baris baru bisa dalam string!
Zacharý
sumber
2

Java 8, 79 byte

(a,b)->{for(String s="";a<=b;System.out.printf("%"+s.length()+"d\n",a++))s+=a;}

Cobalah online!

Justin Mariner
sumber
Anda dapat menyimpan byte dengan mengubah (a,b)->ke b->a->. (Dan Anda bisa menghemat tiga byte lagi dengan membuka Java 10 dan mengubahnya Stringmenjadi var.) Cobalah secara online.
Kevin Cruijssen