Rosnąca piramida liczb całkowitych

18

Wyjdź albo tekst poniżej, albo listę list liczb całkowitych (więcej szczegółów poniżej).

 0
10  1
20 11  2
30 21 12  3
40 31 22 13  4
50 41 32 23 14  5
60 51 42 33 24 15  6
70 61 52 43 34 25 16  7
80 71 62 53 44 35 26 17  8
90 81 72 63 54 45 36 27 18  9
91 82 73 64 55 46 37 28 19
92 83 74 65 56 47 38 29
93 84 75 66 57 48 39
94 85 76 67 58 49
95 86 77 68 59
96 87 78 69
97 88 79
98 89
99

Zasady

  • Jeśli chcesz, możesz „jeden indeks” i zastąpić każdy nz nich n+1. W takim przypadku dane wyjściowe będą zawierać liczby od 1 do 100 włącznie.

Jeśli wyjście jest tekstem

  • Pojedyncze cyfry są wyrównane do prawej w każdej kolumnie podanego tekstu, ale dobrze jest, jeśli chcesz wyrównać do lewej. Ponadto wyrównanie nie musi być spójne między kolumnami.
  • Wiodące / końcowe białe znaki są dozwolone. Dopuszczalne są również końcowe spacje w każdej linii.
  • Dopuszczalne jest zwrócenie listy wierszy.

Jeśli dane wyjściowe są liczbowe

  • Dane wyjściowe może być listą liczb całkowitych (lub tablicy 2D): [[1], [11, 2], [21...
  • Pływaki są w porządku.
  • Jeśli nie jest możliwe użycie nieprostokątnej tablicy w użytym języku, wówczas elementy w tablicy, które nie znajdują się w trójkącie, mogą przyjąć dowolną wartość i zostaną zignorowane.

Jeśli wolisz inny format, możesz zapytać.

Najkrótszy kod wygrywa.

dylnan
źródło
Piaskownica
dylnan
Ponieważ początkowe / końcowe białe znaki są dozwolone w wynikach tekstowych, czy początkowe / końcowe puste listy są dozwolone w wynikach listy?
Jonathan Allan,
@JonathanAllan Sure
dylnan
nie mogę go edytować, ale powinien mieć tag złożoności Kołmogorowa (nie jestem pewien, czy poprawnie to przeliterowałem ...)
Brian H.
@BrianH. Według innych, ponieważ tak naprawdę nie ma ani jednej stałej, która ma być wytworzona, tag KC nie ma tutaj zastosowania
dylnan

Odpowiedzi:

10

Galaretka ,  13 12 10  6 bajtów

-4 dzięki Dennisowi, tak CZTERY! (stosowanie indeksów grupowych i produktu kartezjańskiego)

⁵pḅ1ĠU

Wykorzystuje indeksowanie 1 i opcję listy dla danych wyjściowych.

Wypróbuj online! (Stopka formatuje dane wyjściowe w reprezentacji w języku Python)
... lub zobacz sformatowaną wersję z indeksowaniem 0 .

W jaki sposób?

⁵pḅ1ĠU - Main link: no arguments
⁵      - literal 10
 p     - Cartesian product (with the leading constant of 10 and implicit ranges)
       -       = [[1,1],[1,2],[1,3],...,[10,8],[10,9],[10,10]]
  ḅ1   - to base one (proxy for sum each without the monad)
       -       = [2,3,4,5,6,7,8,9,10,11,3,4,5,6,7,8,9,10,11,12,4,...,18,19,20]
    Ġ  - group indices by value
       -       = [[1],[2,11],[3,12,21],...,[90,99],[100]]
     U - upend = [[1],[11,2],[21,12,3],...,[99,90],[100]] 
Jonathan Allan
źródło
1
Ładny. Miałem 7 bajtów
dylnan
Co na świecie w Ġogóle robi ?!
Magic Octopus Urn
1
@MagicOctopusUrn grupuje indeksy tablicy według odpowiadającej jej wartości. Więc [5,7,5,9]Ġwrócę [[1,3],[2],[4]]. Wynika to z faktu, że indeksy [1,3]odpowiadają wartości 5w oryginalnej tablicy, [2]do 7i [4]do 9.
dylnan
5

Python 2 , 54 bajty

k=1
exec"print range(k,0,-9)[:101-k];k+=10-k/91*9;"*19

Wypróbuj online!

(1-indeksowany, ponieważ range(k,0,-9)jest krótszy niż range(k,-1,-9).)

Lynn
źródło
4

Węgiel drzewny , 29 20 bajtów

E¹⁹⪫I⮌Φ¹⁰⁰⁼ι⁺÷λχ﹪λχ 

Wypróbuj online! Link jest do pełnej wersji kodu. Uwaga: końcowe miejsce. Wyjaśnienie:

 ¹⁹                     Literal 19
E                       Map over implicit range
       ¹⁰⁰              Literal 100
      Φ                 Filter over implicit range
              λ  λ      Inner index
               χ  χ     Predefined variable 10
                ﹪       Modulo
             ÷          Integer divide
            ⁺           Sum
           ι            Outer index
          ⁼             Equals
     ⮌                  Reverse
    I                   Cast to string
   ⪫                    Join with spaces
                        Implicitly print each string on its own line
Neil
źródło
4

JavaScript (ES6), 61 bajtów

W oparciu o 0. Zwraca ciąg.

f=(k=n=0)=>k>98?k:k+((k-=9)%10>0?' '+f(k):`
`+f(n+=n>89||10))

Wypróbuj online!

W jaki sposób?

Zaczynamy od k = n = 0 i zatrzymujemy się, gdy k = 99 . Odejmujemy 9 od k przy każdej iteracji.

Koniec wierszy jest wykrywany za pomocą k % 10 <= 0. Ten warunek jest spełniony, jeśli:

  • k jest ujemne (górna część piramidy), ponieważ znakiem modulo w JS jest znak dywidendy.

     0 (-9)
    10  1 (-8)
    20 11  2 (-7)
    
  • lub k% 10 == 0 (dolna część piramidy)

    90 81 72 63 54 45 36 27 18  9 (0)
    91 82 73 64 55 46 37 28 19 (10)
    92 83 74 65 56 47 38 29 (20)
    

Na początku następnego wiersza dodajemy 1 lub 10 do n i restartujemy od tego miejsca.

Arnauld
źródło
3

J , 14 bajtów

,.<@|./.i.,~10

Wypróbuj online!

Uwaga:

To rozwiązanie wykorzystuje dane wyjściowe w ramkach - nie jestem pewien, czy jest to dozwolone (mam nadzieję, że tak, ponieważ dozwolone są również listy liczb całkowitych)

Alternatywny:

J , 10 bajtów

|./.i.,~10

W tym rozwiązaniu liczby poza trójkątnym obszarem są wyświetlane jako 0

Wypróbuj online!

Wyjaśnienie:

i.,~10tworzy macierz 10x10 liczb 0..99 ,~10jest skrótem od10 10

   i.,~10
 0  1  2  3  4  5  6  7  8  9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99

/. znajduje ukośne przekątne (antydiagonale) matrycy

   ]/.i.,~10
 0  0  0  0  0  0  0  0  0  0
 1 10  0  0  0  0  0  0  0  0
 2 11 20  0  0  0  0  0  0  0
 3 12 21 30  0  0  0  0  0  0
 4 13 22 31 40  0  0  0  0  0
 5 14 23 32 41 50  0  0  0  0
 6 15 24 33 42 51 60  0  0  0
 7 16 25 34 43 52 61 70  0  0
 8 17 26 35 44 53 62 71 80  0
 9 18 27 36 45 54 63 72 81 90
19 28 37 46 55 64 73 82 91  0
29 38 47 56 65 74 83 92  0  0
39 48 57 66 75 84 93  0  0  0
49 58 67 76 85 94  0  0  0  0
59 68 77 86 95  0  0  0  0  0
69 78 87 96  0  0  0  0  0  0
79 88 97  0  0  0  0  0  0  0
89 98  0  0  0  0  0  0  0  0
99  0  0  0  0  0  0  0  0  0

Użycie ](tego samego) wypełnia wszystkie linie za pomocą 0s. Każda linia jest odwrócona. Aby pozbyć się zer, zaznaczam linie <po ich odwróceniu|.

   <@|./.i.,~10
┌─┬────┬───────┬──────────┬─────────────┬────────────────┬
│0│10 1│20 11 2│30 21 12 3│40 31 22 13 4│50 41 32 23 14 5│. . .
└─┴────┴───────┴──────────┴─────────────┴────────────────┴

Boks powoduje, że lista list zostaje spłaszczona. W końcu przeglądam ,.listę, aby linie były uporządkowane w kolumnie.

  ,.<@|./.i.,~10
┌────────────────────────────┐
│0                           │
├────────────────────────────┤
│10 1                        │
├────────────────────────────┤
│20 11 2                     │
├────────────────────────────┤
│30 21 12 3                  │
├────────────────────────────┤
│40 31 22 13 4               │
├────────────────────────────┤
│50 41 32 23 14 5            │
├────────────────────────────┤
│60 51 42 33 24 15 6         │
├────────────────────────────┤
│70 61 52 43 34 25 16 7      │
├────────────────────────────┤
│80 71 62 53 44 35 26 17 8   │
├────────────────────────────┤
│90 81 72 63 54 45 36 27 18 9│
├────────────────────────────┤
│91 82 73 64 55 46 37 28 19  │
├────────────────────────────┤
│92 83 74 65 56 47 38 29     │
├────────────────────────────┤
│93 84 75 66 57 48 39        │
├────────────────────────────┤
│94 85 76 67 58 49           │
├────────────────────────────┤
│95 86 77 68 59              │
├────────────────────────────┤
│96 87 78 69                 │
├────────────────────────────┤
│97 88 79                    │
├────────────────────────────┤
│98 89                       │
├────────────────────────────┤
│99                          │
└────────────────────────────┘
Galen Iwanow
źródło
2

Pure Bash (bez narzędzi zewnętrznych), 66

eval a={{9..1},}\;b={9..0}';c[a+b]+=$a$b\ '
printf %s\\n "${c[@]}"

Wypróbuj online!

Cyfrowa trauma
źródło
2

Gol> <> , 24 bajty

0D9FlF{a+|lD|9F~lF{P|D|;

Wypróbuj online!

Dane wyjściowe wyglądają następująco:

[0]
[10 1]
[20 11 2]
[30 21 12 3]
[40 31 22 13 4]
[50 41 32 23 14 5]
[60 51 42 33 24 15 6]
[70 61 52 43 34 25 16 7]
[80 71 62 53 44 35 26 17 8]
[90 81 72 63 54 45 36 27 18 9]
[91 82 73 64 55 46 37 28 19]
[92 83 74 65 56 47 38 29]
[93 84 75 66 57 48 39]
[94 85 76 67 58 49]
[95 86 77 68 59]
[96 87 78 69]
[97 88 79]
[98 89]
[99]

Jak to działa

0D9FlF{a+|lD|9F~lF{P|D|;

0D                       Push 0 and print stack
  9F        |            Repeat 9 times...
    lF{a+|                 Add 10 to all numbers on the stack
          l                Push stack length (the last one-digit number)
           D               Print stack
             9F       |  Repeat 9 times...
               ~           Discard the top
                lF{P|      Increment all numbers on the stack
                     D     Print stack
                       ; Halt
Bubbler
źródło
2

R , 50 48 bajtów

split(y<-rev(order(x<-outer(0:9,0:9,"+"))),x[y])

Wypróbuj online!

1-indeksowany. Kieruje się tą samą logiką, co odpowiedź galaretki Jonathana Allana , więc upewnij się, że go głosujesz.

Jako bonus, tutaj jest również implementacja standardowego podejścia do zapętlania (indeksowane 0). Tutaj przynajmniej starałem się, aby wyjście było ładniejsze (dlatego nie zapisywałem nawet bajtów printzamiast, cat(...,"\n")aby pozbyć się denerwujących [1]s w konsoli.

R , 66 59 bajtów

for(i in c(0:8*10,90:99))cat(seq(i,i/10+i%%10*10-1,-9),"
")

Wypróbuj online!

Edycja: -2 i -7 zarówno dzięki Giuseppe.

Kirill L.
źródło
1
Udało mi się zagrać w golfa od drugiego do 59 bajtów, a od pierwszego do 48 bajtów
Giuseppe,
Ach tak, dzięki.
Kirill L.
@ KirillL. Zawsze jest naprawdę elegancko używać zewnętrznego. plus w tym przypadku jest krótszy!
JayCe
2

R , 137 86 73 69 bajtów

for(u in 0:18)cat("if"(u>9,seq(81+u,10*u-81,-9),seq(10*u,u,-9)),"\n")

Wypróbuj online!

Poprzednia wersja golfa,% 100 kredytów dla Giuseppe .

S=sapply
c(S(1:10,function(u)1:u-1+10*(u-1:u)),S(9:1,function(y)1:y+9-y+10*(y:1+9-y)))

Wypróbuj online!

Poniżej mojej pierwszej próby utrzymania Codegolfa tylko dla celów rejestracyjnych.

x<-c(1:10)
z<- c(9:1)
c(sapply(x,function(u) seq_len(u)-1+10*(u-seq_len(u))),sapply(z,function(y) seq_len(y)+9-y+10*rev(seq_len(y)+9-y)))

Wypróbuj online!

JayCe
źródło
1
Niezła odpowiedź! Jak mówisz, możesz usunąć sporo bajtów; Udało mi się znaleźć rozwiązanie 86-bajtowe, usuwając niepotrzebne białe znaki i zastępując seq_lenje 1:w większości miejsc; Użyłem również y:1zamiast rev.
Giuseppe,
@Giuseppe wielkie dzięki za poprawioną odpowiedź - pokazuje, że nie kodowałem od lat.
JayCe
1

Oktawa , 67 66 65 64 bajtów

for i=0:8disp(10*i:-9:0)end,for i=0:9disp(90+i:-9:11*i+(i<1))end

Wypróbuj online!

Brakujące średniki zraniły mnie w oczy!

Stewie Griffin
źródło
1

05AB1E , 22 bajty

TLûvTLD>T*«NèyGD9+})R,

Wypróbuj online!


Super Naiwne podejście: wypróbuj online! może być lepszym rozwiązaniem, ale nie mogę wymyślić, jak dostać się z punktu A do punktu B.

Urna Magicznej Ośmiornicy
źródło
Czy istnieje polecenie „sortuj według wartości b”?
dylnan
0

PowerShell , 77 bajtów

(0..90|?{!($_%10)})+91..99|%{"$(for($i=$_;$i-gt$_/10+$_%10*10-1;$i-=9){$i})"}

Wypróbuj online!

Wyprowadza jako ASCII-art z wyrównanymi do lewej cyframi. Wykorzystuje fakt, że stringowanie tablicy domyślnie wstawia spacje między elementami.

Najwyraźniej bardzo podobny do odpowiedzi Pytona Rod, ale opracowany niezależnie.

AdmBorkBork
źródło
0

JavaScript, 69 bajtów

f=(i=e=[])=>e[i<19&&(e[+i]=[]),i/10+i%10|0].unshift(+i)*i++-99?f(i):e

Wypróbuj online!

JavaScript REPL, 77 bajtów

[...Array(100)].map((_,i)=>e[i<19&&(e[i]=[]),i/10+i%10|0].unshift(i),e=[])&&e
l4m2
źródło
0

Perl 5 , 62 bajty

$,=$";say@,=map$_+=10,@,,$_ for-9..0;say map++$_,@,while pop@,

Wypróbuj online!

1 indeksowany, aby zaoszczędzić kilka bajtów

Xcali
źródło
0

Czerwony , 105, 95 91 bajtów

v: make vector! 0
loop 10[alter v + 10 length? v print v]loop 9[alter v last v print 1 + v]

Wypróbuj online!

Wyjaśnienie:

v: make vector!   0                           ; start with a vector with one element: -10
loop 10[alter v + 10 length? v print v]       ; Ten times print the vector after adding 10
                                              ; to its elements and appending the length   
loop 9[alter v last v print 1 + v]            ; Nine times print the vector after adding 1 
                                              ; to its elements and removing the last one
                                              ; `alter` appends the item if it's not
                                              ; in the list, otherwise removes it
Galen Iwanow
źródło
0

JavaScript , 112 bajtów

Nie tak optymalne, ale chciałem spróbować innego podejścia.

[...Array(19)].map((x,y)=>y>9?81+y:y?y+'0':y).map(x=>(f=(n,a=[n])=>!n|a[n+='']|n[1]>8?a:f(n-=9,a.concat(n)))(x))

Wypróbuj online!

Stare rozwiązanie:

[...Array(19)].map((x,y)=>y>9?y-9+'9':y).map((x,y)=>(f=(n,a=[n])=>a[n/10]|!n?a.reverse():a.push(n+=9)&&f(n,a))(x*1).slice(y-19))

Wypróbuj online!

Oliver
źródło
0

05AB1E , 16 bajtów

тL<ΣTLãOsè}TLû£í

Wypróbuj online!

Wyjaśnienie

тL<Σ      }       # sort the values in [0 ... 99] by
        sè        # the value at that index in
       O          # the sum of
      ã           # the cartesian product of
    TL            # the range [1 ... 10]
              £   # split the result into pieces of sizes
           TLû    # [1,2,...,9,10,9,...2,1]
               í  # and reverse each
Emigna
źródło
0

Perl 6 , 43 40 bajtów

{map {[R,] grep :k,$_,(^10 X+ ^10)},^19}

Wypróbuj online!

-3 bajty dzięki Brad Gilbert b2gills.

nwellnhof
źródło
1
[R,] LISTjest krótszy niżreverse LIST
Brad Gilbert b2gills
@ BradGilbertb2gills Ładne, dzięki!
nwellnhof