Conta in diagonale!


30

Abbiamo molti assi orizzontali per i numeri, ma onestamente penso che siano noiosi. Il tuo compito oggi è di costruirmi una porzione di un asse diagonale tra due interi non negativi distinti dati come input.

Come costruire un asse diagonale?

  • Facciamo un esempio, con l'input 0, 5. Il nostro asse dovrebbe assomigliare a questo:

    0
     1
      2
       3
        4
         5
    
  • Tuttavia, il nostro asse dovrebbe avere un bell'aspetto anche per i numeri che hanno più cifre! Se l'input è, ad esempio 0, 14, il nuovo asse dovrebbe essere:

    0
     1
      2
       3
        4
         5
          6
           7
            8
             9
              10
                11
                  12
                    13
                      14
    
  • L'idea è che la prima cifra del prossimo numero sull'asse deve essere sempre posizionata esattamente dopo l'ultima cifra del numero precedente. Per capire ancora meglio l'idea, ecco un altro esempio con 997, 1004:

    997
       998
          999
             1000
                 1001
                     1002
                         1003
                             1004
    

Regole

  • Puoi presumere che l'input sia in ordine crescente o decrescente (puoi scegliere tra 5,3e 3,5).

  • Puoi anche supporre che la differenza tra i due numeri interi sia inferiore a 100.

  • Potresti avere una nuova riga iniziale o uno spazio iniziale coerente (su ogni riga). Anche gli spazi finali / le nuove righe vanno bene.

  • Le scappatoie predefinite sono vietate.

  • Puoi prendere input e fornire output con qualsiasi media standard .

  • Questo è , quindi vince il codice più breve in byte in ogni lingua!


Altri casi di test

  • 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
    

Sono consentiti spazi iniziali o il primo numero deve essere esattamente sul lato sinistro dello schermo?
Nathan.Eilisha Shiraini,

@NathanShiraini Sono ammesse nuove linee guida
Mr. Xcoder


@StepHen Questo è un po 'più difficile, grazie per il riferimento.
Mr. Xcoder,

1
@Adnan Potresti avere una nuova riga iniziale o uno spazio iniziale coerente su ciascuna riga.
Mr. Xcoder,

Risposte:


19

05AB1E , 8 7 6 byte

Grazie a Magic Octopus Urn per aver salvato un byte!

Funziona in qualche modo, ma onestamente non ho idea del perché.

Codice

Ÿvy.O=

Utilizza la codifica 05AB1E . Provalo online!

Spiegazione

Ÿ          # 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)- Oh, immagino?
Magic Octopus Urn

@MagicOctopusUrn Sì, .Oè estremamente difettoso e deprecato per oltre un anno, quindi non ho idea di cosa funzioni e cosa no. Potrei giurare di averne bisogno Î, ma improvvisamente non sembra più essere il caso (?). Grazie! :)
Adnan,

1
A proposito, Îera necessario ridurre il numero massimo di spazi iniziali a 1.
Adnan,

Io ... Aspetta ... Cosa, come ...?
Magic Octopus Urn

1
@ Mr.Xcoder aggiunto
Adnan

14

Python 2 , 43 byte

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

Utilizza la scheda verticale per rendere l'effetto scala. Il modo in cui \vviene eseguito il rendering dipende dalla console, quindi potrebbe non funzionare ovunque (come TIO).
running code


Puoi usare un valore letterale \x0bnel tuo codice per salvare un byte?
Dom Hastings,

@DomHastings forse, non so come
Rod

L'ho appena provato e sembra funzionare. Per mettere il personaggio nel file da testare, ho usato Sublime Text e ho trovato e sostituito in modalità regex \\ve sostituito con il \x0Bquale mostra un VTpersonaggio al suo posto per il punteggio che puoi pubblicare un hexdump reversibile ( xxdo qualcosa) o semplicemente affermare che: " \vè una scheda verticale letterale", penso che sarebbe giusto. Spero che sia d'aiuto!
Dom Hastings,


7

R, 70 69 61 byte

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

Funzione che accetta la variabile iniziale e finale come argomenti. Passa sopra la sequenza e stampa ogni elemento, anteposto con spazi sufficienti. Finizia come FALSE=0e durante ogni iterazione viene aggiunta la quantità di caratteri per quel valore. Fdecide la quantità di spazi stampati.

Provalo online!

-8 byte grazie a @Giuseppe


Vedo 70 byte lì. Usandolo scan()due volte può essere ridotto a 67 byte for(i in scan():scan()){cat(rep(' ',F),i,'\n',sep='');F=F+nchar(i)}.
djhurio,

Sfortunatamente devi resettare F, altrimenti la funzione può essere usata solo una volta in una nuova sessione. F=0;for(i in scan():scan()){cat(rep(' ',F),i,'\n',sep='');F=F+nchar(i)}(71 byte)
djhurio

@djhurio All'interno di una funzione, non necessaria, poiché F viene modificato solo nel proprio spazio dei nomi. Inoltre, conto 69 byte, usando nchar.
JAD

1
Ma anche la sostituzione \ncon una nuova riga effettiva funziona, e ciò non costa apparentemente due byte.
JAD

1
Bello, ho pensato di abusare della spaziatura automatica di cat, ma non riuscivo a pensare dritto e capirlo per qualche motivo.
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;}

Salvato 1 byte grazie a @LiefdeWen.
Salvato 4 byte grazie a @auhmaan.

Provalo online!

Versione completa / formattata:

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, ora non hai 5k precisamente; D
Mr. Xcoder

1 byte a i<=eae>i
LiefdeWen

@LiefdeWen Thanks :)
TheLethalCoder

Credo che puoi salvare più 4 byte rimuovendo ie riutilizzando sinvece
auhmaan

@auhmaan Grazie non so perché non penso mai di usare la variabile di 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`)

Provalo online!


Wow, sorprendente soluzione ricorsiva e out-golf più risposte python, +1.
officialaimm,

Ottimo lavoro Ruud, la tua soluzione è anche indipendente dal sistema operativo e dalla console non usando il carattere di tabulazione verticale come ha fatto Rod.
Raphaël Côté,

6

Mathematica, 59, byte

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

ingresso

[10,15]

-3 byte
problema @JungHwanMin con 0 risolto (vedi commenti per dettagli)
grazie a @ngenisis


1
Wow, una risposta che in realtà contiene la parola Diagonal
Mr. Xcoder

È necessario aggiungere Spacings -> 0se si desidera che questo sia esatto per il carattere.
Mr.Wizard,

L'input è solo non negativo, non è garantito che sia positivo.
user202729

Grid[(DiagonalMatrix@Range[1+##]/. 0->""+1)-1,Spacings->0]&è il modo più breve che ho trovato per risolvere quei problemi
ngenisi


5

Mathematica, 48 byte

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

dato che ci sono così tante risposte, ho pensato che questo dovesse essere incluso

ingresso

[0,10]

produzione
inserisci qui la descrizione dell'immagine


1
Questo non è valido, vero? Ma +1 solo per aver preso il titolo alla lettera.
Zacharý,

5

C, 166 134 95 95 82 byte

Nuova risposta

Proprio come una funzione non come un intero programma.

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

Grazie a Falken per aver contribuito a eliminare 13 byte (e correggere un problema tecnico)!

Grazie a Steph Hen per aver contribuito a eliminare 12 byte!

Grazie a Zacharý per l'aiuto a eliminare 1 byte!

Risposte antiche

Si è sbarazzato di int prima di main e ha cambiato const char * v [] in char ** v e si è liberato di 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;}

Questa è la prima volta che gioco a golf e volevo provare qualcosa in C. Non sono sicuro di averlo formattato correttamente, ma mi sono divertito a farlo!

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

Spiegazione

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

uso

inserisci qui la descrizione dell'immagine


Benvenuti in PPCG! Credo che tu possa rinominare argce argvad una lettera variabili.
Stephen

Penso che puoi spostare il int s=0ciclo for, come in for(int s=0;a<=b;a++).
Zacharý,

Ahh hai ragione grazie, ho aggiornato il post!
Asleepace,

L'uso di int i=s;while(i--)invece di for(int i=0;i<s;i++)per il ciclo interno salverà due byte.
Falken,

1
Ahhh la tua destra ha dimenticato log10 su 0 e negativi, ho aggiornato la soluzione grazie!
Asleepace,

4

C ++, 167 165 byte

-2 byte grazie a 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;}

1. Potresti spostare il int m=0,i=l,jprimo forloop per salvare un byte? 2. Puoi passare r+=t;r+=10a r+=t+10? 3. Ho battuto qualcuno, yay.
Zacharý,

@ Zacharý Posso fare r+=t+=10ma no r+=t+10, mi ha dato un errore
HatsuPointerKun

Ma r+=t+=10funziona? Non influirebbe t.size()?
Zacharý,

@ Zacharý Sì, funziona solo con +, dice che non riesce a trovare un sovraccarico con int come parametro, ma con + = usa il sovraccarico con il carattere
HatsuPointerKun

Oh, potresti spostare ++iin std::to_string(i)as std::to_string(i++)per salvare un altro byte?
Zacharý,

4

APL (Dyalog) , 25 24 byte

-1 grazie a Zacharý .

Presuppone ⎕IO←0per il conteggio basato su zero. Prende il limite inferiore come argomento sinistro e il limite superiore come argomento destro.

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

Provalo online!

(... ) applica la seguente funzione tacita tra gli argomenti:

- sottrarre la parte superiore inferiore dal limite superiore

1- sottrai quello da uno (cioè 1 + ∆)

⊣+∘⍳ limite inferiore sinistro più gli interi da 0 a quello

⍕¨ formato (stringify) ciascuno

{... } applica il seguente anonimo (rappresentato da ⍵):

≢¨ lunghezza di ciascuno (numero)

+\ somma cumulativa

- negare

⍵↑⍨¨ per ogni numero limitato, prendi tanti caratteri dalla fine (pad con spazi)

 mescola l'elenco di stringhe in una matrice di caratteri


Potrebbe +-⍨essere --?
Zacharý,

@ Zacharý Sì, certo. Grazie.
Adám,

4

Retina , 81 78 byte

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

Provalo online! Prende l'input come un elenco separato da riga di due numeri interi. Modifica: salvato 3 byte rubando il codice di espansione dell'intervallo dalla mia risposta a Condividiamo il cluster principale? Spiegazione:

.+
$*

Converti entrambi gli input in unari.

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

Mentre gli ultimi due elementi (a, b) dell'elenco differiscono di oltre 1, sostituiscili con (a, a + 1, b). Questo espande l'elenco da una tupla in un intervallo.

1+
$.& $.&

Converti in decimale in duplicato.

 (.+)
$.1$* 

Converti la copia duplicata in spazi.

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

Sommare cumulativamente gli spazi da ciascuna riga alla successiva.



3

LOGO , 53 byte

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

Non esiste "Provalo online!" collegamento perché tutto l'interprete LOGO online non supporta l'elenco dei modelli.

Questo è un elenco di modelli (equivalente della funzione lambda in altre lingue).

Uso:

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

( applychiama la funzione)

stamperà

997
   998
      999
         1000
             1001
                 1002
                     1003
                         1004

Nota:

Questo utilizza la tartaruga ycor(coordinata Y) per memorizzare il numero di spazi necessari per digitare, quindi:

  • La tartaruga deve essere impostata su home nella sua posizione predefinita e andando (verso l'alto) prima di ogni invocazione.
  • windowdovrebbe essere eseguito se ycordiventa troppo grande e la tartaruga si sposta dallo schermo. Descrizione del windowcomando if the turtle is asked to move past the boundary of the graphics window, it will move off screen.:, a differenza dell'impostazione predefinita wrap, cheif 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.

Spiegazione:

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 byte

Accetta input come numeri interi, in ordine crescente, utilizzando la sintassi del curry. Restituisce una matrice di stringhe.

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

Provalo

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 byte

òV
£¯Y ¬ç +X

Accetta input in entrambi gli ordini e restituisce sempre i numeri in ordine crescente, come una matrice di righe.

Provalo online! con la -Rbandiera per unire l'array con le nuove righe.

Spiegazione

Input implicito di Ue V.

òV
£

Crea un intervallo inclusivo [U, V]e associa ogni valore a ...

¯Y ¬ç

I valori prima di current ( ¯Y), uniti a una stringa ( ¬) e riempiti con spazi ( ç).

+X

Più il numero attuale. L'array risultante viene implicitamente emesso.


3

Python 2 , 65 63 62 61 byte

-2 byte Grazie a @Mr. Xcoder: execnon necessita di parentesi graffe

-1 ciao grazie a @ Zacharý: print s*' 'asprint' '*s

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

Provalo online!


1
Non hai bisogno delle parentesi graffe per exec. m,n=input();s=0;exec(n-m+1)*"print s*' '+`m`;s+=len(`m`);m+=1;"basta.
Mr. Xcoder,

1
Penso che tu possa passare print s*' 'a print' '*sper salvare un byte.
Zacharý,

2

JavaScript, 57 byte

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

55 byte: y=>g=(x,s='')=>y<x?s:s+'\n'+g(x+1,s.replace(/./g,' ')+x)chiamata con currying con gli interi invertite: f(103)(95).
Shaggy,

54 byte: x=>y=>g=(s='')=>y<x?s:s+'\n'+g(s.replace(/./g,' ')+x++)chiama come f(x)(y)().
Shaggy,

2

Python 2, 60 59 byte

-1 byte grazie a Mr.Xcoder per aver definito my s = 0 come variabile opzionale nella mia funzione.

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

Provalo online!

Penso che sia possibile trasferirlo in una versione lambda, ma non so come. Penso anche che ci sia una sorta di mappatura tra gli spazi e la lunghezza del numero corrente, ma anche questo non l'ho ancora capito. Quindi penso che ci sia ancora spazio per miglioramenti.

Quello che ho fatto è stato creare un intervallo dal limite inferiore lal limite superiore ustampando ogni riga con uno spazio moltiplicato per un numero s. Sto aumentando il moltiplicatore con la lunghezza del numero corrente.




Capirò che hai fatto con quella versione "exec" più avanti nel corso della giornata. Forse mi aiuterà nelle future programmazioni. Grazie
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`

Provalo online!

f(A, B) stamperà la parte dell'asse tra A e B incluse.

La prima volta che rispondo a una sfida!

Utilizza e abusa dei backtick di Python 2 per contare il numero di spazi che deve aggiungere prima del numero.

-1 byte grazie a Mr.Xcoder

+2 perché ho dimenticato a +1


4
Benvenuti in PPCG! bella prima risposta. sum(len(`j`)) forpuò diventare sum(len(`j`)for-1 byte
Mr. Xcoder

1
Per rendere valida questa risposta, è necessario sostituirla range(a,b)con range(a,b+1), poiché Python ha intervalli semi-inclusivi.
Mr. Xcoder,

Anzi, mi è mancato. Cosa c'è di più sorprendente è che ho fatto aggiungere che uno quando ho fatto le mie prove! Non c'è da stupirsi che mi mancassero 2 byte quando l'ho digitato in TiO ...
Nathan.Eilisha Shiraini

2

C (gcc) , 41 38 byte

-3 byte Grazie solo a ASCII

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

Funziona su RedHat6, accessibile tramite PuTTY

Prova

Provalo online!


1
Questo non produce un output corretto.
Erik the Outgolfer,

è complicato, l'output su un file e quindi utilizzare moresu quel file
Giacomo Garabello

2
@GiacomoGarabello Devi fornire il codice completo per consentirci di eseguire il tuo programma. Se non si fornisce un campo di prova funzionante / non si forniscono istruzioni su come eseguire il programma in modo che produca un output corretto, si prega di eliminare questa risposta.
Mr. Xcoder,

L'alimentazione di linea può tornare all'inizio della linea, dipende. Questo funziona quando non lo fa.
user202729

@ Mr.Xcoder Modificato
Giacomo Garabello

2

V , 16 byte

ÀñÙywÒ $pça/jd

Provalo online!

Sarebbe molto più semplice se potessi prenderlo start end - start ma penso che cambiando un po 'troppo la sfida.

Questo prende il numero iniziale come input nel buffer e il numero finale come argomento. In realtà crea la scala da starta start + ende quindi elimina tutto dopo il numero finale.


2

MATL , 11 byte

vii&:"t~@Vh

Provalo online!

Spiegazione

Funziona generando una stringa per ciascun numero e concatenandola con una copia negata logicamente della stringa precedente. Pertanto char 0 viene anteposto 0 tante volte quanto la lunghezza della stringa precedente. Il carattere 0 viene visualizzato come spazio e ogni stringa viene visualizzata su una riga diversa

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 byte

Penso che nessuno avrebbe pubblicato una soluzione Swift comunque ...

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

Provalo online!


2

Perl, 19 byte

Nota: \x0b viene conteggiato come un byte.

Insieme ad altri, ho pensato che usare i movimenti del cursore sarebbe il percorso più breve, questo significa che non funziona su TIO:

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

uso

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

Bello, non vedo Perl da un po 'di tempo. Potresti aggiungere un link di prova? Inoltre, mi chiedevo cosa 1..ci facesse lì, dato che ti vengono dati due numeri interi.
Mr. Xcoder,

@ Mr.Xcoder Sì, 1..non stavo leggendo completamente le specifiche, è stato risolto ora! Per quanto riguarda il test online, poiché l'output contiene la scheda verticale, non viene visualizzato come previsto. Sto cercando di vedere se riesco a trovare un renderer che supporti i caratteri di controllo ... Altrimenti, potrebbe essere il mio nuovo progetto!
Dom Hastings,

2

Japt , 10 9 byte

òV åÈç +Y

Provalo online! Restituisce una matrice di linee;-Rflag incluso per unire le newline per una visualizzazione più semplice.

Spiegazione

 ò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

Vecchia versione, 10 byte:

òV £P=ç +X

Provalo 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, avevo appena trovato la stessa soluzione per migliorare la mia risposta.
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);}

Furono prese Jelly e APL.

Provalo online!

Se stai bene con i risultati dipendenti dalla console (va fuori lo stesso principio della risposta C di Giacomos) eccone uno per 72 71 byte:

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

Come? (Solo trucchi specifici per D)

  • f(T)(T a,T b,T s=0) Il sistema di template di D può inferire i tipi
  • for(T j;j++<s;)I numeri interi sono impostati su 0.
  • ' '.write;a.writelnD ti permette di chiamare fun(arg)come arg.fun(una delle poche cose da golf che D ha)
  • a.text.lengthCome sopra e D consente anche di chiamare un metodo senza parametri come se fosse una proprietà ( textè la conversione in stringa)
  • Una cosa che potrebbe essere rilevante (non l'ho usato però) le nuove righe possono essere nelle stringhe!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.