Negatif sırayla tamsayılar çıktısı alın, her zaman maksimum tamsayıyı artırın


44

Ana görev

Göreviniz, tamsayı azalan sırayla, 1'den başlayarak ve tekrar tekrar 1'e basmaya devam ederken, verilen girişe ulaşana kadar basmak, ardından geri kalanı 1'e basana kadar yazdırmak. Girdili örnek 6:

1
21
321
4321
54321
654321
Without newlines (valid output):
121321432154321654321
Yan not: bu OEIS’de A004736’dır . Ayrıca, ilk örnek (yeni satırlı) kurallarda belirtildiği gibi geçersiz bir çıktıdır.

Giriş

Kodunuz bir tam sayı veya sayı biçiminde her türlü girişi (grafiksel, STDIN) alabilir.

Çıktı

Kodunuz, giriş numarasına ulaşılana kadar yukarıda açıklanan diziyi vermeli, ardından tekrar 1'e gelinceye kadar çıktısını bitirmelidir. Çıktı herhangi bir şey olabilir, bu nedenle sayılar, dizgiler, tam sayılar veya grafiksel çıktı. Tek bir sayıyı yazdırmak gerekir (eğer bir dize ise yeni satır yok). Çıktınız, istediğiniz sayıda karakterle (örn. []) Girilebilir ve çıkarılabilir .

Bazı yanlış anlaşılmalar olduğu için, çıktılarınızı deneyebileceğiniz bir regex deseni.

^(\D*(\d)+\D*)$

kurallar

  • Çıktı tam sayı olmalı, hiçbir şeyden ayrılmamalı, hatta yeni satırlar içermemelidir.
  • Algoritma, herhangi bir şekilde ortaya çıkan ilk N örneğini (örn 21. Giriş 121321) kontrol etmemeli , bunun yerine gerçek sayı olarak ilk N örneğini kontrol etmelidir .
  • Tek bir izleyen yeni satıra izin verilir.
  • Negatif girdilerin kullanımı tamamen sizin tercihinizdir, negatif sayılar test etmeniz gereken durumlar değildir.

Test durumları

Input: 6
Output: 121321432154321654321

Input: 1 Output: 1

Input: 26 Output: 121321432154321654321765432187654321987654321109876543211110987654321121110987654321131211109876543211413121110987654321151413121110987654321161514131211109876543211716151413121110987654321181716151413121110987654321191817161514131211109876543212019181716151413121110987654321212019181716151413121110987654321222120191817161514131211109876543212322212019181716151413121110987654321242322212019181716151413121110987654321252423222120191817161514131211109876543212625242322212019181716151413121110987654321

Input: 0 Output: 0, Empty, or Error

Input: 21 Output: 121321432154321654321765432187654321987654321109876543211110987654321121110987654321131211109876543211413121110987654321151413121110987654321161514131211109876543211716151413121110987654321181716151413121110987654321191817161514131211109876543212019181716151413121110987654321212019181716151413121110987654321

Teşekkürler @Emigna, bu test durumlarını hesaplamak için algoritmasını kullandım.

kazanan

Kazanan seçildi! Öyleydi ErikGolfer cevabı etkileyici ile 5 bayt! Tebrikler!


The output must be a full number ...Tüm diziyi mi kastediyorsunuz, yoksa sadece farklı alt dizileri mi (1, 2-1, 3-1 ...)? İlk örneğiniz bu ifadeyle eşleşmiyor gibi görünüyor.
steenbergh

1
Çıktının tek bir sayı olması gerekiyorsa, nasıl "diziler" olabilir?
smear

Bu dizi çıktı olarak kabul edilebilir mi? [1, 21, 321, 4321, 54321, 654321] Buna ne dersin? [1,2,1,3,2,1,4,3,2,1,5,4,3,2,1,6,5,4,3,2,1] Yoksa sadece tek bir elemente sahip olan dizilerden mi bahsediyorsunuz [121321432154321654321]?
saat

1
Çıktı formatı hakkında kafam karıştı. Neyin kabul edilebilir olduğuna dair örnekler verebilir misiniz? Sayı dizisi? Boşluklarla ayrılmış sayılar içeren dize?
Luis Mendo

1
Düzenli ifadeniz çıktısına izin veriyor mickey321211mouse. Gerçekten \Dparçalar hiçbir orada olmak neden var
edc65

Yanıtlar:



19

05AB1E , 6 bayt

L€LíJJ

Çevrimiçi deneyin!

açıklama

Örnek giriş 4

L       # range [1 ... input]
        # STACK: [1,2,3,4]
 €L     # map: range
        # STACK: [[1],[1,2],[1,2,3],[1,2,3,4]]
   í    # reverse each
        # STACK: [[1],[2,1],[3,2,1],[4,3,2,1]]
    J   # join inner lists
        # STACK: ['1','21','321','4321']
     J  # join list
        # OUTPUT: 1213214321

13

JavaScript (ES6), 37 bayt

f=(n,k=1)=>k>n?n--?f(n):'':f(n,k+1)+k

gösteri

N <10, 34 bayt için alternatif yöntem (rekabet etmeyen)

f=(n,s='1')=>--n?s+f(n,++s[0]+s):s

JavaScript'te, dizeler değişmezdir. Bu nedenle, dizginin Nth karakterinin içeriğini syeni bir değer atayarak değiştirmek mümkün değildir s[N].

Bununla birlikte, ifade ++s[N]geçerlidir ve dize değişmeden kalsa bile, bekleneceği gibi değerlendirme yapar. Örneğin:

++"1"[0] // equals 2

Ve uzatma ile:

s = "21"
++s[0] + s // equals "321"

N> 9
edc65,

@ edc65 Tabii ki haklısın. Neden 9'da
durmanın

12

V, 29 28 27 23 19 17 16 bayt

@DJMcMayhem sayesinde 8 bayt kurtarıldı

@ Nmjcman101 sayesinde 3 bayt kurtarıldı

"apÀ­ñÄòy$jpkgJ

Gizli karakterler:

"apÀ<C-x>ñÄ<C-x>òy$jpkgJ

C-x Ctrl + x'dir.

Çevrimiçi deneyin! komut satırı argümanları üzerinden girdi alır

HexDump:

0000000: 2261 70c0 adf1 c418 f279 246a 706b 674a  "ap......y$jpkgJ

açıklama

"ap            Paste the argument
À<C-x>         Argument minus 1 times (so that we exclude the 0)
ñ ... ò        Loop (for some weird reason the ò closes the ñ)
Ä<C-x>         paste current line above and decrement it

Şimdi şuna benziyor:

1
2
...
n

devam etti...

ò             recursively do (until a breaking error)
y$             yank this line
  jp           paste it down
    kgJ        go up and join
              implicit ò end

GIF (eski)

(arg için 6)

gif


Döngününüzü a) üstü kapalı olarak değiştirerek birkaç tane aldım ve b) devam ettiği gibi çizgileri birleştirin (sonunda değil)òy$jpkgJ
nmjcman101

@ nmjcman101 2 bayt kurtarmama yardım ettiğiniz için teşekkür ederiz!
Kritixi Lithos 19:16

Bu oldukça iyi golf oynuyor. 20 dakikadır beynimi sallıyordum ve daha kısa bir şey düşünemiyorum. :)
DJMcMayhem

@DJMcMayhem Bunun nedeni, çok yardımcı oldum :)
Kritixi Lithos

Yaptım! 16 bayta kadar alabilirsiniz. Argümanı yapıştırır ve sonra yukarı / aşağıya doğru çoğaltırsanız, H'yi kaldırırsınız. Sonra, üzerindeki azaltma işlecini kullanırsanız, üstünde À0 olacak ve böylece x'i kaldırabilirsiniz. Sonra görünüşte a òkapanır, ­ñböylece ikincisini kaldırabilirsiniz ­ñ(kaydettiğiniz bayt). Link çünkü bu hiç mantıklı
gelmedi

11

C #, 72 69 65 bayt

n=>{for(int i=0,j;i<n;)for(j=++i;j>0;)System.Console.Write(j--);}

Çıktı konsola Yazılı olarak iade edilebilirse

C #, 71 68 64 bayt

n=>{var s="";for(int i=0,j;i<n;)for(j=++i;j>0;)s+=j--;return s;}

Çok bayt tasarrufu için @VisualMelon sayesinde

Burada test edin (Çevrimiçi derleyici, 420'nin üzerindeki herhangi bir sayıya bölünür)


Bu gerçekten hızlıydı.
devRicher

@devRicher Ne diyebilirim, gönderilmek üzere bir şeyler bekliyordum: P
Alfie Goodacre

2
Bir süre döngü C # kod golf kullanmak için hiçbir neden yoktur, daha iyi olmasa da bir for-döngüsü her zaman iyi bir performans sergileyecektir. Bu durumda, j=1for-loop atamalarını dahil edebilir ve yarı-kolonu kaydedebilirsiniz. Ayrıca , kaydetmek için jbirlikte ilan edebilirsiniz . Ayrıca taşınabilir bir byte tasarruf atama. Ayrıca değiştirmek gerekir ile bunu yaparsanız yerine ve başlangıç olarak . iinti++j=ii<=ni<nj=++ii0
VisualMelon

@VisualMelon düzenledi, 3 bayt kurtardı! İkisini birlikte bildirmek, bayt sayısında hiçbir fark
yaratmadı

@AlfieGoodacre onları for döngüsünde birlikte bildirirseniz, 2 bayt daha tasarruf edersiniz for(int i=0,j;i<n;);) Ayrıca {}döngü için iç çevresine de gerek yoktur .
VisualMelon

8

Saf bash, 34

eval eval printf %s \\{{1..$1}..1}

İki seviyeli ayraç genişlemesi. Girdi ile 6ilk seviye genişler {1..1} {2..1} {3..1} {4..1} {5..1} {6..1}. Bu daha sonra 1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 6 5 4 3 2 1, bir dizgeyle birlikte itilen genişlemeye başlar printf %s. evalHer iki genişleme seviyesinde de gereklidir - ilk seviye için $1parametre ilk olarak genişletilecek, ikinci seviye için ise birinci seviyeden sonra genişleyecektir.

Çevrimiçi deneyin


8

Perl, 21 bayt

-EEk ücret ödemeden kullanır .

say map$}=$_.$},1..<>

kullanım

perl -E 'say map$}=$_.$},1..<>' <<< 6
121321432154321654321

7

Pyth, 7 bayt

jks}R1S

Bir tamsayı girişi alan ve sonucu basan bir program.

Çevrimiçi Deneyin!

Nasıl çalışır

jks}R1S   Program. Input: Q
jks}R1SQ  Implicit input fill
    R     Map
      SQ  over [1, 2, 3, 4, ..., Q] with i:
   } 1     Yield [i, i-1, i-2, i-3, ..., 1]
  s       Merge
jk        Join
          Implicitly print

Şahsen ben çok hayal kırıklığına uğradım, jk_hC.:Sdaha uzun, ama iyi iş!
FryAmTheEggman

7

GeoGebra , 67 bayt

1
InputBox[a]
Sum[Join[Sequence[Sequence[Text[j],j,i,1,-1],i,1,a]]]

Her satır ayrı ayrı giriş çubuğuna girilir. Giriş, bir giriş kutusundan alınır.

İşte yürütmenin bir gif:

Program yürütme

Nasıl çalışır

Girme 1örtülü devrettikleri aiçin 1ve InputBoxkomut ile bir giriş kutusu ilişkilendirir a. Ardından, her biri için iin {1, 2, 3, ..., a}, liste {i, i-1, i-2, ..., 1}kullanılarak oluşturulan Sequencekomutu ve her jbu listede kullanarak bir dizeye dönüştürülür Text. Son olarak, Jointüm listeleri Sumbirleştirir ve tüm öğeleri görüntülenen bir metin nesnesine birleştirir.


@ devRicher Bu makul görünüyor. Teşekkürler!
TheBikingViking


7

Retina , 26 22 bayt

Bayt sayısı, ISO 8859-1 kodlamasını varsayar.

.+
$*

$`¶
1
$.%'
0?¶

Çevrimiçi deneyin!

açıklama

.+
$*

Girişi unary'ye dönüştürün.


$`¶

Her bir pozisyonda, önek ile bu noktaya kadar satır başı ekleyin. Bu bir tek terimli dizi oluşturur 2için n+1satır başına bir değer.

1
$.%'

Her birini 1aynı satırdaki karakter sayısı ile değiştirin . Bu bir şeye 11111dönüşür 43210.

0?¶

Tüm satır beslemelerini ve onlardan önceki sıfırları kaldırın.


5

GameMaker Dili, 65 bayt

b=""for(i=1;i<=argument0;i++){c=i while(j)b+=string(c--)}return b

5

APL, 10 bayt

∊⍕¨∘⌽∘⍳¨∘⍳

Örneğin:

      (∊⍕¨∘⌽∘⍳¨∘⍳)6
121321432154321654321

Açıklama:

  • : 1'den N'ye kadar olan sayıları al.
  • ⍳¨∘: her biri için 1'den N'ye kadar olan sayıları al.
  • ⌽∘: bu listeyi tersine çevir
  • ⍕¨∘: her bir öğenin karakter temsilini al (böylece aralarında boşluk olan sayıları çıkarmaz)
  • : elde edilen diziyi düzleştirmek

Yani kodu geriye doğru mu ayırıyor?
devRicher

işlev bileşimi, işlevlerin gerçekten değerlendirildikleri sırayla açıklama yaptım
marinus

1
İşte meraklılar için ayrıştırıcı ağaç: tryapl.org/…
marinus

5

Python 2, 71 68 bayt

Özyinelemeli bir çözümün daha kısa olacağına bahse girerim, ancak bunu bir formüle sokmakta zorlanıyorum.

n=input()
i=0
o=""
while i<n:
    i+=1;j=i
    while j:o+=`j`;j-=1
print o

Çevrimiçi deneyin


5

Aslında 8 bayt

RR♂RΣRεj

İlk kez Aslında bir cevap gönderme, böylece muhtemelen golf edilebilir.

Nasıl çalışır

Program takes implicit input, implicit print at EOF
R           Takes the input and creates a range (1, input)   
                STACK = [1,2,..,n]
 R          Reverse the top stack item (our range)
                STACK = [n,..,2,1]
  ♂R        For each item in our range, create a range (1, rangeitem)
                STACK = [[1,2,..,n], .., [1,2], [1]]
    Σ       Stitch the items of the list together
                STACK = [n,..,1,2,3,1,2,1]
     R      Reverse the top stack item again (our answer)
                STACK = [1,2,1,3,2,1,..n]
      εj    Create an empty string and append each item from the list to it.
            (turns non string items into strings)

Çevrimiçi deneyin!


1
Emin oradaki değilim olduğunu daha kısa çözüm, ama daha önce kendimi yanlış kanıtladın. Her durumda, işte cevabınız için Çevrimiçi Deneyin linki .
Sherlock9

1
Kod R♂R♂RΣεjaynı sayıda bayt, ancak bunun için bir açıklama yazmak daha kolay olabilir.
Sherlock9

@ Sherlock9 yolunuz biraz daha zarif, bağlantıyı ve biraz daha açıklamayı denemek için dün eklemeyi unuttuğum bir açıklama ekledim.
Peal Pelikan,

4

Brachylog , 8 bayt

yb@[rcw\

Çevrimiçi deneyin!

açıklama

yb         The list [1, ..., Input]
  @[       Take a prefix of that list
    rc     Reverse it and concatenate into an integer
      w    Write to STDOUT
       \   Backtrack: try another prefix

4

Perl 6 , 22 bayt

{[~] flat [\R,] 1..$_}

Bir dize döndüren bir lambda.

( Çevrimiçi deneyin. )

Açıklama:

  • 1..$_: Tam sayı aralığı ... (1 2 3 4)
  • [,] 1..$_: Virgül operatörüne göre azaltma ("katla") ... (1 2 3 4)
  • [\,] 1..$_: Orta dereceli sonuçlarla ( üçgen azaltma ) ...((1) (1 2) (1 2 3) (1 2 3 4))
  • [\R,] 1..$_: Ters meta-işleçini virgülle uygulayın ...((1) (2 1) (3 2 1) (4 3 2 1))
  • [~] flat ...: Liste iç içe geçmesini kaldır ve string concat operatörünü katla ... 1213214321

4

Haskell, 35 bayt

f x=[1..x]>>= \y->[y,y-1..1]>>=show

Kullanım örneği: f 6-> "121321432154321654321".

Tüm numaraları için xde 1 ... xmarka bir liste x,x-1, ... ,1, bir dizeye numaralarını çevirmek ve tek bir dize halinde bunları bağlamak. Yine, bu dizeleri tek bir dizgide birleştirin.


4

C89, 54 bayt

i,j;f(n){for(i=1;j<=n;j=i++)while(j)printf("%d",j--);}

ErikGolfer sayesinde 56 -2 = 54!


Sonuncuyu (test edilmemiş) (j=i++)yerine yapabilir (j=i)ve kaldırabilirsiniz i++.
Outgolfer Erik

İşte daha kısa özyinelemeli versiyonu: i,j;f(n){j=++i;while(j)printf("%d",j--);i-n?f(n):0;}(52 bytes)
Steadybox 19:16

@ Steadybox İsterseniz bunu kendi cevabınız olarak ekleyebilirsiniz, ama teşekkürler!
kedi,

@ cat Tamam, teşekkürler. Sadece çözümünüzü düzenlediğimden beri yapmam gerekip gerekmediğinden emin değildim.
Steadybox

4

Python 3, 87 92 83 74 bayt

lambda n:"".join(["".join([str(i)for i in range(1,k)][::-1])for k in range(1,n+2)])

Özyineleme kullanarak daha kısa cevap:

f=lambda n:f(n-1)+"".join([str(i)for i in range(1,n+1)][::-1])if n>0else""

Belki de en küçüğü değil, ancak Python'un listesinin kavranması ile yapıldı!

(Yazdırma işlevini eklemek ve \ n öğesini kaldırmak için düzenlenmiş)

(Yazdırma işlevini kaldırmak ve n + 1, k + 1'den n, k + 2'ye değiştirmek için düzenlenmiştir)


K, n + 2 ile çalışır, ancak k + 2, n ile olmaz, fikir için teşekkürler :)
Sygmei

İlk puan verdiğiniz kod olmalıdır. Ayrıca, Python 2'yi kullanmak gerekir, ardından kullanmak `i`yerine str(i). Ve "".join(...)yerine "".join([...])ve range(1,k,-1)kaldırmak için kullanabilirsiniz [...][::-1].
mbomb007

Ayrıca, n>0olabilir n. Ve demek istedim range(n,0,-1). Ve kullan n and f(n-1)+...)or"".
mbomb007

1
62 bayt . Aslında bu, bu cevaba çok yaklaşıyor olabilir .
mbomb007 15

Evet bu oldukça yaklaşıyor, ikinci versiyonumu yaptıktan sonra gördüm :(
Sygmei

3

Pyth, 8 bayt

jks_M._S

açıklama

jks_M._SQ   Implicit input
       SQ   Get the range [1, 2, ..., N]
     ._     Get each prefix
   _M       Reverse each prefix
jks         Join everything as a string


3

Mathematica, 36 bayt

ToString/@(""<>Range[Range@#,1,-1])&

Güvenle göz ardı edilebilecek bir sürü uyarı atıyor.

açıklama

Girdiyi 5örnek olarak kullanmak :

Range@#

Bir aralık oluşturur {1, 2, 3, 4, 5}.

Range[...,1,-1]

Rangelistable olduğundan, herhangi bir argüman için bir liste verebiliriz ve otomatik olarak bu argüman üzerinde durur. Bu bize bir sürü tersine liste veriyor:

{{1}, {2, 1}, {3, 2, 1}, {4, 3, 2, 1}, {5, 4, 3, 2, 1}}

Sonraki:

(""<>...)

Bu, iç içe listeye boş dizeyle birleştirilir. İç içe geçmiş liste aslında herhangi bir dize içermediğinden, değerlere (uyarıların üretildiği yer) gerçekten katılamaz, ancak ""<>listeyi düzleştirmenin yan etkisi vardır. Yani bu bize verir

1 <> 2 <> 1 <> 3 <> 2 <> 1 <> 4 <> 3 <> 2 <> 1 <> 5 <> 4 <> 3 <> 2 <> 1

Şimdi Mathematica'nın Mapharita üzerinde bulunduğu yapıyı önemsemediği güzel özelliği geliyor . Normalde listeye uygularsınız, ancak herhangi bir kafa ile çalışır. f /@ h[a, b, c]sadece sana verir h[f[a], f[b], f[c]]. Bizim durumumuzda, baş StringJoinve değerler tam sayılardır.

ToString/@...

Böylece bu sadece tamsayıları dizgelere çevirir. Bu noktada StringJoin[...]onlarla ne yapılacağını bilir ve hepsini tek bir dizgeye ekler:

"121321432154321"

1
Bu sadece düz kötü. :)
Greg Martin

3

GolfScript , 14 bayt

~,{),{)}%-1%}%

Çevrimiçi deneyin!

Genel yöntem elbette, ancak bu GolfScript.

Bu VAST kod parçasına ilişkin açıklama :

~,{),{)}%-1%}% # Code
               # Initial stack.      ["n"]
~              # Eval ToS.           [n]
 ,             # ToS' lowered range. [[0..n)]
  {),{)}%-1%}  # Block. 1 argument.  [a]
   )           # Increment.          [a+1]
    ,          # Range.              [[0..a)]
     {)}       # Block. 1 argument.  [b]
      )        # Increment.          [b+1]
        %      # Map.                [[1..a]]
         -1    # Integer. -1         [[1..a] -1]
           %   # Each nth element.   [[a..1]]
             % # Map.                [[[1],[2,1],...,[n..1]]]
               # Implicit output.    121...n..1

Çıktının tek bir sayı olduğunu unutmayın. Takip ediyor \n.


3

R, 38 33 44 bayt

if((n=scan())>0)for(i in 1:n)cat(i:1,sep="")

STDIN'e girdi alır ve her adım için i'den 1'e kadar olan diziyi yaratarak ve basarak 1'den n'ye kadar olan döngüler.

Düzenleme: değiştirilmiştir seq(i,1)tarafından i:15 bayt tasarrufu ve gösteren neden toplantılarda golf olmamalı.


Bu, 101eğer giriş ise üretir 0. if((n=scan())>0)for(i in 1:n)cat(i:1,sep="")hile yapar.
Frederic

Kahretsin, sıfır olmayan girdi kabul edildi :(
JAD

if(n<-scan())yeterli olmalı
Giuseppe

3

MATL , 14 11 bayt

:"@:P]v!VXz

Çevrimiçi deneyin!

açıklama

:      % Input N implicitly. Push range [1 2 ...N]
"      % For each k in [1 2 ...N]
  @:   %   Push range [1 2 ... k]
  P    %   Reverse
]      % End
v!     % Concatenate all arrays horizontally
V      % Convert to string
Xz     % Remove spaces. Display implicitly

not split up by anything, ikincisine izin verildiğini sanma.
JAD

2
@JarkoDubbeldam OP netleşene kadar onu sileceğim
Luis Mendo

1
@Jarko OP açıklığa kavuşturuldu. Güncel çözüm şartnameye uygundur
Luis Mendo

3

brainfuck, 17 bayt

>,[>[+.>]+.[<]>-]

açıklama

>           keep the first cell at 0
 ,          input of the decimal number into the cell
  [>        start a conditionnal loop and go to the next cell
   [+.>]    while it don't find 0, increment each cells and output the value
    +.      increment the new cell and output
     [<]    go to the first cell
      >-]   decrement the second cell and restart

Çevrimiçi deneyin!


PPCG'ye Hoşgeldiniz! Tur sayfasını ve en sıcak meta sorularını henüz okudunuz mu? Sana tavsiyem, yardımcı oluyorlar! Ayrıca, kodunuzu kod biçimlendirmesine sarın! Biçimlendirme yardımını okudunuz mu? Yapabiliyorsanız, kodunuzun nasıl çalıştığını da açıklamanız gerekir!
devRicher

@muddyfish Yeni bir açıklama ekledim
Milihhard

Bir mobil uygulama kullandım. Sonuç ekranını görebilirsiniz.
Milihhard

Hayır, bu iyi. Ancak bağlantıda, çıkış
ascii'de

@muddyfish Permalink'iniz biraz kafa karıştırıcı. Girişte görünmez bir 0x06 var, ardından 6 basamağı var .
Dennis,

3

Python , 63 57 59 bayt

Hem Python 2 hem de 3'te çalışan özyinelemeli bir çözüm. Bu muhtemelen daha fazla golf oynayabilir. Golf önerileri hoş geldiniz! Çevrimiçi deneyin!

Düzenleme: Jonathan Allan sayesinde -6 bayt. +2 bayt, mbomb007 sayesinde cevabımla ilgili bir problemi işaret etti.

f=lambda n:n and f(n-1)+"".join(map(str,range(n,0,-1)))or""

Ungolfing

def f(n):
    s = ""
    for i in range(n+1):
        m = map(str, range(n, 0, -1))
        s += "".join(m)
    return s

2
map6 bayt kaydetmek için a kullanın :lambda n:n and f(n-1)+"".join(map(str,range(n,0,-1)))or""
Jonathan Allan

2

PHP, 35 34 33 bayt

Bir byte kurtardım çünkü yanlış saydım, teşekkürler Titus! Ve başka!

while($i++<$argv[1])echo$s=$i.$s;

Komut satırından ile çalıştırın -r.

Oldukça basit bir cevap, ndizgenin başlangıcında sayıyı takip edip yazdırarak girişten 1'e kadar olan döngüler .


34 sayarım. Artış sonrası bir bayt daha kısa.
Titus

33 bayt:while($i++<$argv[1])echo$s=$i.$s;
16'da

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.