Kestirme artan tam sayı dizilerini genişlet


18

Stenografi artan bir tamsayı dizisi biçimindeki sayı listesinin bir girdisi verildiğinde, diziyi tam olarak çıktılayın.

Kestirme artan tamsayı dizi biçimi, n'den önceki sayıdan daha az basamaklı her n sayısını bularak çalışır , m . İle d basamak sayısı n , son d basamakları m her basamak ile değiştirilir n . İşte bir örnek giriş:

123 45 6 7 89 200

Değiştirme kuralını uygulayarak, önce 45'i 145'e çeviriyoruz çünkü 45 <123:

123 145 6 7 89 200

Aynı kuralı tekrar tekrar uygulamak, bu olur:

123 145 146 7 89 200
123 145 146 147 89 200
123 145 146 147 189 200

Sıra şimdi sıralanmıştır (kuralın uygulandığı sayı yoktur), bu yüzden bu son çıktıdır.

Bunu varsayabilirsin

  • steno gösterimi her zaman mümkün olduğunda kullanılır. Örneğin, girdi 12 3asla olmayacaktır 12 13.

  • sayılar aynı basamakta kalırken asla azalmaz. Örneğin, girdi asla olmayacak 333 222.

  • stenografi kuralının uygulanması asla dizideki önceki sayıdan daha az olan bir sayıyla sonuçlanmaz. Örneğin, girdi asla olmayacak 123 12.

  • sayılar her zaman pozitif tamsayı olur ve hiçbir zaman baştaki 0'ları içermez (dize biçimi kullanılıyorsa).

  • tam, genişletilmiş sıra hiçbir zaman yinelenen sayılar içermez. (Ancak, stenografi sırası; ör. 10 1 20 1-> 10 11 20 21.)

  • girişte en az bir sayı olacaktır.

Giriş ve çıkış, sayıların / dizelerin listeleri / dizileri veya rakam olmayan herhangi bir öğe ile ayrılmış öğeler içeren tek bir dize olabilir.

Bu , bayt cinsinden en kısa kod kazanacaktır.

Alternatif hatlarda giriş ve çıkışlı test senaryoları:

1 2 3 10 1 2 20 5 100 200 10 3 5 26 9 99 999 9999
1 2 3 10 11 12 20 25 100 200 210 213 215 226 229 299 999 9999
223 1184 334 441 5 927 2073 589 3022 82 390 5 9
223 1184 1334 1441 1445 1927 2073 2589 3022 3082 3390 3395 3399
5 10 5 20 5 30 5 40 5 50 5
5 10 15 20 25 30 35 40 45 50 55
7 8 9 70 80 90 700 800 900 7000 8000 9000
7 8 9 70 80 90 700 800 900 7000 8000 9000
42
42

Zorluk oldukça eski, ama a) giriş boş olabilir mi? b) Girdi yalnızca bir sayı içerebilir mi?
Outgolfer Erik

@EriktheOutgolfer Devam edeceğim ve girişte numbers1 sayı olacağını söyleyeceğim.
Kapı tokmağı

Yanıtlar:


7

Jöle, 7 bayt

DUṛ"\UḌ

Çevrimiçi deneyin! veya tüm test senaryolarını doğrulayın .

Nasıl çalışır

DUṛ"\UḌ  Main link. Input: A (list of integers)

D        Convert each integer to a list of its base 10 digits.
 U       Reverse each digit list.
    \    Do a cumulative reduce, applying the dyadic link to the left:
   "       For each pair of corresponding digits:
  ṛ          Select the right one.
           Vectorization leaves digits that do not have a counterpart untouched.
     U   Reverse the resulting digit arrays.
      Ḍ  Convert from base 10 to integer.

5

Javascript, 45 42 bayt

3 bytes kapalı teşekkürler @Neil .

a=>a.map(x=>z=z.slice(0,-x.length)+x,z='')

Yukarıdaki fonksiyon bir dizi karakter bekler.


1
z=z.slice(0,-x.length)+x,z=''(Veya istediğiniz değişken adını) kullanarak 4 bayt kaydedin.
Neil

@Neil. Güzel! Bunu yapmanın bir yolu olması gerektiğini biliyordum
kaldırıldı

(Kaydetmeyi yanlış saydığımız için özür dilerim.) Ayrıca, s=>s.split` `.map(2 bayt (bu sefer iki kez kontrol ettim) daha kısa olduğu için dize sürümü gereksizdir s=>s.replace(/\d+/g,.
Neil

@Neil. Geçerli nokta. Sadece orada bıraktım çünkü cevaplarken ilk hedefimdi ... ama haklısın
kaldırıldı

1

Retina, 45 bayt

+`(?=(?<1>\d)+)(?<=(\d)(?(1)x)(?<-1>\d)+ )
$1

Çok maliyetli basamakları saymak için dengeleme gruplarını kullanır. Henüz daha iyi bir yaklaşım bulamadım ama ilgileniyorum.

Burada çevrimiçi deneyin.


0

Gema, 35 karakter

<D>=@set{p;@fill-right{${p;};$0}}$p

Girdi: bir şeyle ayrılmış sayılar içeren dize, çıktı dizesi.

Örnek çalışma:

bash-4.3$ gema '<D>=@set{p;@fill-right{${p;};$0}}$p' <<< '123 45 6 7 89 200'
123 145 146 147 189 200

0

Ruby, 39 karakter

->a{l='';a.map{|c|l=l[0..-c.size-1]+c}}

Girdi: dizgiler dizisi, çıktı: dizgiler dizisi.

Örnek çalışma:

2.1.5 :001 > ->a{l='';a.map{|c|l=l[0..-c.size-1]+c}}[%w{123 45 6 7 89 200}]
 => ["123", "145", "146", "147", "189", "200"] 

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.