başa getirebilir, komuta-Dizi


14

Görev

Başa eklenen, Ek-Sıra, bu şekilde tekrarlı olarak tanımlanır

  • a (1) = 1
  • a (n) = a (n-1) .n, eğer n eşitse
  • a (n) = na (n-1), n ​​tekse

nerede . bir tamsayı birleşimidir.

İlk birkaç terim: 1,12,312,3124,53124,531246,7531246,...Bu A053064 .

Görev, tam sayı, bir verilen bir> 0 dönmek n olduğu, örneğin , n sona ekleme inci elemanı, ekleme-Dizi eşittir bir ve böyle bir durumunda , n dönüş 0, negatif bir sayı veya hata üzerinden vb vardır

kurallar

  • Giriş bir tamsayı, dize, karakter / rakam listesi vb. Olarak alınabilir.
  • Çıktı STDOUT'a yazdırılabilir veya döndürülebilir (tamsayı, dize vb. İyidir)
  • Geçersiz girişte ve böyle bir n olmaması durumunda, programınız pozitif bir tamsayı döndürmekten başka bir şey yapabilir (ör. Sonsuza kadar döngü, 0 dönüşü vb.)
  • 0 dizinleme kullanmayı seçebilirsiniz, ancak n olmaması durumunda çıktı 0 olamaz

Test senaryoları

1 -> 1
12 -> 2
21 -> 0
123 -> 0
312 -> 3
213 -> 0
211917151311975312468101214161820 -> 21
2119171513119753102468101214161820 -> 0
333129272523211917151311975312468101214161820222426283031 -> 0
999795939189878583817977757371696765636159575553514947454341393735333129272523211917151311975312468101214161820222426283032343638404244464850525456586062646668707274767880828486889092949698100 -> 100

Daha resmi: a(n-1)*(int(log(n))+1)+nve n*(int(log(n))+1)+a(n-1)?
— Bay Xcoder

1
@ Mr.Xcoder Daha az resmi diyebilirim : P
— Rock Garf Hunter Post

@JonathanAllan Bu soru zaten ~ 10 dakika.
— Bay Xcoder

2
Geçersiz girişler için hatalara izin vermenizi öneririm.
— user41805

Geçersiz girdiler için tanımlanmamış davranışa izin vermenizi öneririm.
— Bay Xcoder

Yanıtlar:


6

JavaScript (ES6), 40 bayt

Girişi dize olarak alır. Dizin bulunmazsa bir özyineleme hatası atar.

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

gösteri


Ben bununla bir bayt kaydedebilirsiniz düşünüyorum : f=(n,s=k='1')=>n-s?f(n,++k&1?k+s:s+k):k
— Rick Hitchcock

@RickHitchcock Ne yazık ki, bu sayı karşılaştırmalarını zorlar ve hassasiyet kaybının neden olduğu büyük girdilere yanlış pozitifler getirir.
— Arnauld

Anladım. Test senaryolarında çalışır, ancak diğer durumları nasıl ele alacağından emin değildi.
— Rick Hitchcock

6

C # (.NET Core) , 83, 80, 60 59 bayt

n=>{int i=0;for(var t="";t!=n;)t=++i%2<1?t+i:i+t;return i;}

Çevrimiçi deneyin!

Girişi bir string olarak lambda fonksiyonuna alır. 1 endeksli. Doğruluk için değerin dizinini veya "falsey" için sonsuz döngüler döndürür


6

Python 2 , 63 bayt

@EriktheOutgolfer sayesinde -1 bayt .

f=lambda x,i='1',j=2:i!=`x`and f(x,[i+`j`,`j`+i][j%2],j+1)or~-j

Çevrimiçi deneyin!

Python 2 , 64 bayt

@Officialaimm sayesinde -18 bayt , çünkü hataya izin verildiğini fark etmedim!

x,i,j=input(),'1',1
while i!=x:j+=1;i=[i+`j`,`j`+i][j%2]
print j

Çevrimiçi deneyin!

Python 2 , 82 bayt (sonsuza kadar döngü yapmaz)

Bu 0geçersiz girdiler için geri döner .

def f(n,t="",i=1):
 while len(t)<len(n):t=[t+`i`,`i`+t][i%2];i+=1
 print(n==t)*~-i

Çevrimiçi deneyin!


2
Ninja'd: D 65 bayt
— officialaimm

@officialaimm Çok teşekkürler! Sonsuza kadar izin / döngü hata fark etmedi.
— Bay Xcoder

Lambda ile bir bayt kaydedin:f=lambda x,i='1',j=2:i!=`x`and f(x,[i+`j`,`j`+i][j%2],j+1)or~-j
— Outgolfer Erik

@EriktheOutgolfer Bekle, ben ayarlasam da, her şey için özyineleme hatası atıyor sys.setrecursionlimit(). Bir tio sağlayabilir misiniz?
— Bay Xcoder

@ Mr.Xcoder Bir hata veriyor x=1mu? Yoksa x=12? Sadece en azından x=151311975312468101214falan böyle bir hata attığını düşündüm .
— Outgolfer Erik

3

Jöle , 12 bayt

Rs2ZU1¦ẎVµ€i

Çevrimiçi deneyin!

Açıklama:

Rs2ZU1¦ẎVµ€i
         µ€  Eval this link for each (automatic [1..n] range)
R             Range
 s2           Split in pieces of: 2
   Z          Zip
    U1¦       Only keep index: 1 of: Vectorized reverse
       Ẏ      Flatten 1-deep
        V     Concatenate string versions and eval
           i Find index of y in x (y = implicit input)

3

05AB1E , 14 bayt

$vDNÌNFs}«})Ik

Çevrimiçi deneyin! veya Test takımı olarak

açıklama

0 dizinli . Giriş dizide değilse -1 değerini
döndürür .

$                 # push 1 and input
 v                # for each y,N (element, index) in input do:
  D               # duplicate top of stack
   NÌ             # push N+2
     NF }         # N times do:
       s          # swap the top 2 elements on the stack
         «        # concatenate the top 2 elements on the stack
          })      # end loop and wrap in a list
            Ik    # get the index of the input in this list

Haha, temelde gkaldırılan ve ekleme / başa ekleme kısaltılmış çözümüm . Cevabımı sileceğim
— Okx

@Okx: Oh evet, yazımdan sadece birkaç dakika sonra seninkini neredeyse tam olarak golf oynadığını görüyorum. Büyük beyinler;)
— Emigna

2

R , 73 bayt

p=paste0;n=scan(,'');l='';while(l!=n){F=F+1;l="if"(F%%2,p(F,l),p(l,F))};F

Stdin'den okur ve dizinin değerini döndürür (örtük olarak yazdırılır). Değer sırayla olmadığında sonsuz döngüler. Fvarsayılan olarak FALSEartığını hangi 0aritmetik kullanıldığında.

Çevrimiçi deneyin!


1

Mathematica, 135 bayt

s=t={};x=1;While[x<5!,{s~AppendTo~#&,s~PrependTo~#&}[[x~Mod~2+1]]@x;AppendTo[t,FromDigits@Flatten[IntegerDigits/@s]];x++];t~Position~#&

1

Jöle ,  19 18  15 bayt

+ḂḶṚm2;RḤ$ṁµ€Vi

Tamsayıları alıp döndüren monadik bir bağlantı.

Çevrimiçi deneyin! (çok yavaş - sadece3124dizindeolduğunu onaylamak için TIO ~ 50s alır4)

Çok daha hızlı bir versiyon için önceki 18 byter'ı kullanın (sadece girişin uzunluğunu kontrol eder, bu yeterlidir).

Nasıl?

+ḂḶṚm2;RḤ$ṁµ€Vi - Link: number, v
           µ€   - perform the monadic link to the left for €ach k in [1,2,3,...v]
                -                 (v can be big, lots of k values makes it slow!)
 Ḃ              -   modulo k by 2  = 1 if odd 0 if even
+               -   add to k = k+isOdd(k)
  Ḷ             -   lowered range = [0,1,2,...,k+isOdd(k)]
   Ṛ            -   reverse = [k+isOdd(k),...,2,1,0])
    m2          -   modulo slice by 2 = [k+isOdd(k),k+isOdd(k)-2,...,3,1]
         $      - last two links as a monad:
       R        -   range(k) = [1,2,3,...,k]
        Ḥ       -   double = [2,4,6,...,2k]
     ;          - concatenate = [k+isOdd(k),k+isOdd(k)-2,...,3,1,2,4,6,...,2k]
         ṁ      - mould like range(k) = [k+isOdd(k),k+isOdd(k)-2,...,3,1,2,4,6,...,k-isOdd(k)]
                -   (this is a list of the integers to be concatenated for index k)
             V  - evaluate as Jelly code (yields a list of the concatenated integers)
              i - first index of v in that (or 0 if not found)

Hesaplamak ne kadar sürer 211917151311975312468101214161820?
— Okx

Uzun, uzun bir süre: p
— Jonathan Allan

Evet, ama ne kadar sürecek?
— Okx

Görünüşe göre v düzeni kare, burada v girdi tamsayısıdır.
— Jonathan Allan

@JonathanAllan Teknik olarak ⁸ : p
— Outgolfer Erik

1

Swift 4 , 92 bayt

Bu geçersiz durumlar için sonsuz döngüler, bu yüzden onları test bağlantısına dahil etmedim.

func f(x:String){var i="1",j=1;while i != x{j+=1;i=[i+String(j),String(j)+i][j%2]};print(j)}

Test odası.

Eğlenceli, bir kapatma ile daha uzun:

var f:(String)->Int={var i="1",j=1;while i != $0{j+=1;i=[i+String(j),String(j)+i][j%2]};return j}

Test odası.




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.