Bir 1, İki 1, Bir 2 Bir 1


16

Meydan okuma:

Pozitif sıfır olmayan bir tam sayı girdisini alan ve sonraki 4 sırayı aşağıda açıklanan sırayla veren bir program oluşturun.

Not: Girişin gerçekten sıfır dışında bir tam sayı olup olmadığını kontrol etmek gerekli değildir

Sıra:

Bu dizideki her sayı (girdi olan ilk sayı dışında) n basamaktan oluşacaktır, burada n çift sayıdır. Sayıyı n / 2 çiftine böldüğümüzde, her bir çift için ilk basamak, ikinci basamağın bir önceki sayıda kaç kez göründüğü olmalıdır

Görsel açıklama :
Bu örneği "dizi başlatıcı" veya giriş olarak düşünün Dizideki bir 6577
sonraki sayı şöyle görünmelidir 161527
Çünkü giriş 1 "6", 1 "5" ve 2 "7" s'dir.

Eğer giriş çok fazla basamağa sahipse (tek bir basamağın 9'dan fazla) doğru çıkış elde edemezsiniz
Örnek: 111111111111(12 1'ler)
Sıradaki sonraki sayı 12 1'leri tanımlamak zorundadır. Böylece onu 9 1 ve 3 1'lere ayırdık (toplam 9 + 3 = 12)
Sonraki sayı:9131

Giriş için 4 kez yinelemeli ve çıktı vermelisiniz (4 tamsayıdan oluşan bir liste / dizi döndürmeli ya da bir boşlukla ayırarak çıktı vermelisiniz, yeni satırlar da kabul edilebilir)

"Sayı birçok şekilde yazılabilir, nasıl yazarım?" :
Bunu düşünürseniz, örnek girdi 6577de 271516 (iki 7, bir 5, bir altı) olarak yazılabilir. Ancak bu geçersiz bir çıktıdır. Soldan sağa sayıyı yinelemelisiniz. Böylece 161527. Eğer 7'sini 7657tekrarlarsanız, o zaman 6'ların miktarı sonra 5'lerin miktarını tekrarlarsınız, böylece geçerli çıktı271615

Örnek G / Ç:

Giriş: 75
Çıkış:1715 211715 12311715 4112131715

Giriş: 1
Çıkış:11 21 1211 3112

Giriş: 111111111111(12 1's)
Çıkış:9131 192113 31191213 23411912


Bu, "Ne gördüğünüzü söyle" sorusunun aksine, sekanslar farklı olduğu için: https://oeis.org/A005150 <- Bu, bunun gibi sayıları döndürür:
Giriş: 1211 Çıktı: 111221 İstediğim
sıra yapacağını
Giriş: 1211 Çıktı: 3112

İki sekans farklıdır ve farklı algoritmalar gerektirir.
Sorulan dizilim: https://oeis.org/A063850
"Olası kopya" dizisi: https://oeis.org/A005150


Önemli özellikler:

Bu soruyu cevaplamaya çalışan bazı insanlar için yeterince açık olmadığından, k> 9'un "kc" (c'nin char olduğu) değil, 9c (k-9) c vb. Olduğu k karakterleri için doğru çıktı. 12 1'ler 121(12 1) değil 9131(9 1'ler, (12-9) 1'ler vb.)

Şüpheniz varsa, kodunuz tek bir rakam (121 gibi) içeren bir sayı çıkarıyorsa yanlıştır, dizinin doğası gereği çift haneli sayıların çıktısına sahip olmalıdır.


Bu yani en az bayt kazanır kod.


Önerilen testcase: 1111111111111111111(19 1'ler )
Emigna


Virgülle ayrılmış bir tamsayı listesi olarak çıktı alabilir miyiz? Çıkış giriş tamsayı ile başlayabilir mi (ve böylece uzunluk 5 olabilir)?
Greg Martin

Son test durumunuzda, son sayı 23411912yerine değil 23411219mi?
Greg Martin

@GregMartin Gerçekten. İşaret ettiğiniz için teşekkürler. Ancak hayır, yeni satırlardan veya boşluklardan ayrı bir şeyle ayrılmış tam sayıların veya çıktı tam sayılarının bir listesini döndürmenize izin verilmez. Ve hayır, girdiyi
çıkarmamalısınız

Yanıtlar:


6

PowerShell , 111104 bayt

$z=$args;1..4|%{($z=-join($z-split'\B'|group|%{for($c,$n=$_.Count,$_.Name;$c-gt9;$c-=9){"9$n"}"$c$n"}))}

Çevrimiçi deneyin!


Kullanmadığınız yana $ineden sadece döngü içinde döngü doğrudan gibi$z=$args;0..3|%{...
AdmBorkBork

@AdbBorkBork Ben düşündüm ama atamak zorunda sonra daha uzun olacağını hissettim $args(ve aslında ben kullanacağını düşündüm $i). Bunu ölçecektim ama sonra soru kapandı.
Briantist

@AdmBorkBork ... aaaand edited (thanks)
briantist

5

Python 2 , 116 bayt

x=input()
exec"x=''.join(x.count(n)/9*(`9`+n)+`x.count(n)%9`+n for i,n in enumerate(x)if n not in x[:i]);print x;"*4

Çevrimiçi deneyin!


19 çıkış çıktısı 1111111111111111111yanlış. Olmalı 919111ama verir919121
CSharpie

Birçok değer için çıktı yanlış. Örnek: image.prntscr.com/image/ed4c523b105b41169e8aa8c46a95f963.png , Giriş 11çıkışı ile 21 1211 3112 132112, neden 111tüm zincirin kötü gitmesine neden olan ilk yineleme olarak çıktığını anlamıyorum
56'da P. Ktinos

@ P.Ktinos giriş formatı yanlıştı, bir dize olması gerekiyor (yaptığım testlerin artması olmalı). Bağlantı düzeltildi
Rod

4

05AB1E , 30 23 21 bayt

4F©Ùv9y«®y¢9‰`U×XyJ}=

Çevrimiçi deneyin!

açıklama

4F                     # 4 times do:
  ©                    # store a copy of the current number in register
   Ùv                  # for each unique digit y in the number
     9y«               # concatenate 9 with y
        ®y¢            # count occurrences of y in current number
           9‰          # divmod by 9
             `U        # store the result of modulus in X
               ×       # repeat the number "9y" result_of_div times
                X      # push result of modulus
                 y     # push y
                  J    # join everything to one number
                   }   # end inner loop
                    =  # print the current number without popping

@MagicOctopusUrn: Bu, örneğin TIO bağlantımdaki örnek gibi, bir basamağın 9'dan fazla tekrarına sahip sayılar için işe yaramaz.
Emigna

Ohhh ... Şimdi anladım.
Sihirli Ahtapot Urn

1

Mathematica, 117 bayt

Grid@{Rest@NestList[FromDigits[Join@@(Reverse/@Tally@IntegerDigits@#//.{a_,b_}/;a>9->{9,b}~Sequence~{a-9,b})]&,#,4]}&

Bu kadar uzun olması gerekmiyor gibi görünüyor.


1

C # 246 bayt

namespace System{using Linq;using f=String;class p{static void Main(f[] s){f p=s[0];for(int i=0,n;i++<4;Console.Write(p+" "))p=f.Concat(p.GroupBy(c=>c).SelectMany(g=>new int[(n=g.Count())/9].Select(_ =>"9"+g.Key).Concat(new[]{n%9+""+g.Key})));}}}

Ungolfed:

namespace System
{
    using Linq;
    using f = String;
    class p
    {
        static void Main(f[] s)
        {
            f p = s[0];
            for (int i = 0, n; i++ < 4; Console.Write(p + " "))

                p = f.Concat(p.GroupBy(c => c).SelectMany(g =>
                    new int[(n = g.Count()) / 9].Select(_ => "9" + g.Key).Concat(new[] { n % 9 + "" + g.Key }
                )));
            Console.ReadKey();
        }
    }
}

Burada deneyin (Derlendiğinde girdiyi alt çerçeveye yazın ve ENTER tuşuna basın)


0

Jöle , 27 bayt

L,Ḣ
D©®i$ÞŒgs9$€Ç€€FḌµ4µÐ¡Ḋ

Çevrimiçi deneyin!

Ardışık s yuvalanamaz çünkü zincirler yuvalanamaz.

Ayrı bağlantı ile yuvalama: 27 bayt.

Kümeleme yerine yazdır: 27 bayt.

açıklama

L,Ḣ                     - helper function, does the look-and-say. Input is a list of digits
 ,                      - return 2-tuple of:
L                       -   length of input
  Ḣ                     -   first element of input

D©®i$ÞŒgs9$€Ç€€FḌµ4µÐ¡Ḋ - main link, takes input as integer
                 µ4µÐ¡  - repeat 4 times, saving the results of each iteration:
D                       -   convert integer to list of digits
 ©                      -   save into register, for later use
  ®i$Þ                  -   sort list's elements by first occurrence in list
      Œg                -   group runs of equal elements
        s9$€            -   split each run into sets which are at most 9 elements long
            Ç€€         -   do the look-and-say with helper function
               FḌ       -   flatten and convert back into integer for next iteration
                      Ḋ - remove the first element from the list since it includes the
                           initial element

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.