Rakam Oluşumları


12

Giriş:

Tam sayı listesi (hiçbir zaman sıfır içermez)

Çıktı:

Aşağıdakilere dayalı olarak aynı boyutta bir listedir:

  • Geçerli öğe negatifse: Bu öğeden önceki tüm öğelere bakın ve diğer rakamlarda basamakların kaç kez oluştuğunu sayın
  • Bunun yerine geçerli öğe pozitifse: Bu öğeden sonraki tüm öğelere bakın ve bu sayılardaki sayının kaç kez oluştuğunu sayın

Bir bükülme var: Listenin boyutu bile olsa, her sayıyı sadece bir kez sayarız (birden fazla hane ile eşleşse bile) ve boyut garip ise, geçerli öğenin her basamağı için sayıların her basamağını sayarız (çoğaltılmış) basamak birden çok kez sayılır).

Bunu biraz açıklığa kavuşturmak için bazı örnekler verelim:

Çift listeli örnek:

Input:  [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2,  4,  1,   2,    1,    1,   5   ]

Listenin Boyutu bile sadece bir kez her sayısını yüzden.

  • 4: Olumlu, bu yüzden sabırsızlanıyoruz. Haneyi içeren üç sayı vardır 4( 42, -942, 8374). Böylece bir ile başlayalım 3.
  • 10: Olumlu, bu yüzden sabırsızlanıyoruz. Rakam 1ve / veya 0( -10, -200) içeren iki sayı vardır . Yani ikinci çıktı 2.
  • 42: Yine olumlu, çok ileri. Basamak ya içeren dört numaraları vardır 4ve / veya 2( -942, 8374, 728, -200). Üçüncü çıktı 4.
  • -10: Bu sefer olumsuz, bu yüzden geriye bakıyoruz. Rakamı 1ve / veya 0(eksi işaretini yoksayıyoruz) ( 10) içeren yalnızca bir sayı vardır . Dördüncü çıktı 1.
  • vb.

Tek listeli örnek:

Input:  [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13,  2,   2,  4,   8,   3,  0,   11,  6 ]

Listenin boyutu garip , bu yüzden her basamağı sayıyoruz.

  • 382: Olumlu, bu yüzden sabırsızlanıyoruz. Orada biri 3diğer numaralar (içinde 381, altı) 8'diğer numaralar (içinde s -82, -8, 381, 228, 28, -28) ve altı 2' diğer sayılarda s ( -82, 228, 28, -28, 2). Böylece bir ile başlayalım 13.
  • -82: Olumsuz, bu yüzden geriye. Kimse yok 3başka sayısında ( 382) ve bir 8diğer sayısında ( 382). Yani ikinci çıktı 2.
  • ...
  • 228: Olumlu, çok ileri. Üç vardır 2'diğer numaralar (içinde s 28, -28, -2) ve başka bir üç 2' ler ve iki 8'diğer sayılarda s ( 28, -28). Yani bu çıktı 8.
  • vb.

Zorluk kuralları:

  • Girdinin hiçbir zaman 0öğe olarak içermeyeceğini varsayabilirsiniz , çünkü bu ne olumlu ne de olumsuzdur.
  • Giriş listesinin her zaman en az iki öğe içerdiğini varsayabilirsiniz.
  • G / Ç esnektir. Giriş / çıkış, tamsayıların dizisi / listesi, sınırlandırılmış dize, basamak / karakter matrisi vb. Olabilir.
  • Listedeki ilk sayı negatif bir sayıysa veya listedeki son sayı pozitif bir sayıysa, ortaya çıkan listede 0 olur.
  • Tek listelerde, aynı rakamı birden çok kez içeren sayılar, 228yukarıdaki tek örnekte olduğu gibi 8(3 + 2) yerine (3 + 3 + 2) ile sonuçlanan birden çok kez sayılır 5.

Genel kurallar:

  • Bu , bayt en kısa cevap kazanır.
    Kod golf dillerinin, kod yazmayan dillerle yanıt göndermenizi engellemesine izin vermeyin. 'Herhangi bir' programlama dili için mümkün olduğunca kısa bir cevap bulmaya çalışın.
  • Cevabınız için standart kurallar geçerlidir , bu nedenle STDIN / STDOUT, fonksiyonlar / yöntem uygun parametreler ve dönüş tipi, tam programlar ile kullanılabilir. Çağrınız.
  • Varsayılan Loopholes yasaktır.
  • Mümkünse, lütfen kodunuz için test içeren bir bağlantı ekleyin.
  • Ayrıca, gerekirse bir açıklama ekleyin.

Test senaryoları:

Input:  [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2,  4,  1,   2,    1,    1,   5   ]

Input:  [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13,  2,   2,  4,   8,   3,  0,   11,  6 ]

Input:  [10, -11, 12, -13, 14, -15, 16, -17, 18, -19]
Output: [9,  1,   7,  3,   5,  5,   3,  7,   1,  9  ]

Input:  [10, -11, 12, -13, 14, -15, 16, -17, 18, -19, 20]
Output: [11, 2,   8,  4,   5,  6,   3,  8,   1,  10,  0 ]

Input:  [88, 492, -938, 2747, 828, 84710, -29, -90, -37791]
Output: [8,  9,   3,    9,    3,   4,     5,   4,   12    ]

Input:  [-1, 11, 11, 1]
Output: [0,  2,  1,  0]

Input:  [1, 11, 11, -1]
Output: [3, 2,  1,  3 ]

Input:  [-1, 11, 1]
Output: [0,  2,  0]

Input:  [1, 11, -1]
Output: [3, 2,  3 ]

Yanıtlar:




4

Java (JDK 10) , 204 bayt

a->{int l=a.length,r[]=new int[l],i=0,j,x,y,b,s,t=10;for(;i<l;i++)for(j=i+(s=a[i]>0?1:-1);0<=j&j<l;j+=s)for(b=0,x=a[i];x!=0;x/=t)for(y=a[j];b<1&y!=0;y/=t)if(x%t==-y%t|x%t==y%t){r[i]++;b+=1-l%2;}return r;}

Çevrimiçi deneyin!

Kredi


[1,11,-1]dönmelidir [3,2,3]. Bu tuhaf bir liste, bu yüzden tüm rakamlar önemlidir. Birincisi 1: Bak ileri, üç 1toplamda s: 11,-1. İkincisi 11: Her basamak için sabırsızlanın: bir 1+ bir 1. Üçüncüsü -1: Bak geriye, üç 1toplamda s: -1,11. (Tek listelerde, her basamağa, hatta aynı şekilde bakmalısınız. Bunu meydan okumada açıklığa kavuşturacağım, ancak sayı ile garip örnek 228bunu biraz açıklığa kavuşturacaktır.)
Kevin Cruijssen

@KevinCruijssen Şimdi düzeltilmelidir.
Olivier Grégoire

Gerçekten de öyle. İlk açıklama, yayınladığımda biraz fazla belirsiz olabileceğinden korkuyordum .. Şimdi cevabınızın herhangi bir şeyi golf oynayabilir miyim göreceğim. ;)
Kevin Cruijssen

1
Ben de çok zaman yok, ama bir şey golf yeni bir değişken ekliyor olabilir ,tve değişen i+(a[i]>0?1:-1)etmek i+(t=a[i]>0?1:-1)ve sonra sadece kullanım j+=tyerine j+=a[i]>0?1:-1.
Kevin Cruijssen

1
Örneğin, t = 10 beyan ederseniz 2 kaydedebilir ve daha az anlaşılabilir olmasına rağmen t için 10
tanesini değiştirebilirsiniz



1

JavaScript (Node.js) , 164.158.140 139 bayt

a=>a.map((x,i)=>a.slice(x<0?0:i+1,x<0?i:l).map(b=>c+=[...b+""].map(X=>s+=X>=0&&(x+"").split(X).length-1,s=0)&&l%2?s:+!!s,c=0)|c,l=a.length)

Çevrimiçi deneyin!


Bu JS6'ya benziyor, Node-y gibi bir şey değil.
Charles

bu tio tarafından üretilen dizedir. Düğüm Babil veya SpiderMonkey JS'ye sahiptir. hala düğüm üzerinde çalışıyor bu yüzden onun güzel
DanielIndie


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.