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.



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]] 

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


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

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.



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                          │
└────────────────────────────┘



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

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.


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!


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



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.


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



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

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!


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.