Một 1, Hai 1, Một 2 Một 1


16

Thử thách:

Tạo một chương trình lấy đầu vào của một số nguyên khác không dương và xuất 4 số tiếp theo trong chuỗi được mô tả dưới đây.

Lưu ý: Kiểm tra xem đầu vào có thực sự là số nguyên khác không dương không

Sự nối tiếp:

Mỗi số trong dãy này (ngoài số đầu tiên, là đầu vào) sẽ bao gồm n chữ số, trong đó n là số chẵn. Nếu chúng ta chia số thành n / 2 cặp, cho mỗi cặp, chữ số đầu tiên sẽ là số lần chữ số thứ hai xuất hiện trong số trước

Giải thích trực quan :
Xem xét ví dụ này "trình tự khởi động" hoặc đầu vào 6577
Số tiếp theo trong chuỗi sẽ giống như thế này 161527
Bởi vì đầu vào có 1 "6", 1 "5" và 2 "7" s.

Nếu đầu vào có quá nhiều chữ số (nhiều hơn 9 chữ số), bạn sẽ không thể có được đầu ra chính xác
Ví dụ: 111111111111(12 1))
Số tiếp theo trong chuỗi phải mô tả 12 1 '. Do đó, chúng tôi chia nó thành 9 1 và 3 1 (tổng 9 + 3 = 12)
Số tiếp theo:9131

Bạn nên lặp lại 4 lần cho đầu vào và xuất nó (trả về danh sách / mảng gồm 4 số nguyên hoặc xuất nó bằng cách tách chúng với khoảng trắng, dòng mới cũng được chấp nhận)

"Số có thể được viết theo nhiều cách, làm thế nào để tôi viết nó?" :
Nếu bạn nghĩ về nó, đầu vào ví dụ 6577cũng có thể được viết là 271516 (hai 7, một 5, một sáu). Tuy nhiên đây là đầu ra không hợp lệ. Bạn nên lặp lại số từ trái sang phải. Do đó, 161527. Nếu đó là số 7657lần lặp của số 7, thì số tiền là 6 và số tiền là 5, do đó, đầu ra hợp lệ sẽ là271615

Ví dụ I / O:

Đầu vào: 75
Đầu ra:1715 211715 12311715 4112131715

Đầu vào: 1
Đầu ra:11 21 1211 3112

Đầu vào: 111111111111(12 1 ')
Đầu ra:9131 192113 31191213 23411912


Điều này không giống với câu hỏi "Nói những gì bạn thấy", bởi vì các chuỗi khác nhau: https://oeis.org/A005150 <- Câu hỏi này trả về các số như thế này:
Đầu vào: 1211 Kết quả: 111221
Trong khi trình tự tôi yêu cầu sẽ làm
Đầu vào: 1211 Đầu ra: 3112

Hai chuỗi là khác nhau và yêu cầu các thuật toán khác nhau.
Trình tự được hỏi của tôi: https://oeis.org/A063850 Trình tự
"có thể trùng lặp": https://oeis.org/A005150


Thông số kỹ thuật quan trọng:

Vì nó không đủ rõ ràng cho một số người đã cố gắng trả lời câu hỏi này, đầu ra chính xác cho k chars trong đó k> 9 không phải là "kc" (trong đó c là char) mà là 9c (k-9) c, v.v. 12 1 không phải 121(12 1) mà là 9131(9 1, (12-9) 1 và v.v.

Nếu nghi ngờ, mã của bạn sai nếu nó bao giờ xuất ra một số có số chữ số lẻ (như 121), thì mã này phải có đầu ra là số chẵn do tính chất của chuỗi.


Đây là do đó mã có ít byte thắng nhất.


Đề xuất thử nghiệm: 1111111111111111111(19 1 ' )
Emigna

Liên quan chặt chẽ hơn (mặc dù vẫn không bị lừa).
Sản xuất ETH

Chúng ta có thể xuất ra dưới dạng danh sách các số nguyên được phân tách bằng dấu phẩy không? Đầu ra có thể bắt đầu với số nguyên đầu vào (và do đó có độ dài 5) không?
Greg Martin

Trong trường hợp thử nghiệm cuối cùng của bạn, không nên là số cuối cùng 23411912thay vì 23411219?
Greg Martin

@GregMartin Thật vậy. Cảm ơn đã chỉ ra. Nhưng không, bạn không được phép trả về danh sách các số nguyên hoặc số nguyên đầu ra tách biệt với bất kỳ thứ gì ngoài dòng mới hoặc dấu cách. Và không, bạn không nên xuất dữ liệu đầu vào
P. Ktinos

Câu trả lời:


6

PowerShell , 111 104 byte

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

Hãy thử trực tuyến!


Vì bạn không sử dụng $itrong vòng lặp của mình, tại sao không chỉ lặp vòng lặp trực tiếp như thế$z=$args;0..3|%{...
admBorkBork

@AdmBorkBork Tôi đã nghĩ về nó nhưng cảm thấy nó sẽ dài hơn sau khi phải gán $args(và ban đầu tôi nghĩ mình sẽ sử dụng $i). Tôi định đo nó nhưng rồi câu hỏi đã khép lại.
briantist

@AdmBorkBork ... aaaand đã được chỉnh sửa (cảm ơn)
briantist

5

Python 2 , 116 byte

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

Hãy thử trực tuyến!


Đầu ra cho 19 cái 1111111111111111111là không chính xác. Nên 919111nhưng cho919121
CSharpie

Đầu ra sai cho nhiều giá trị. Ví dụ: image.prntscr.com/image/ed4c523b105b41169e8aa8c46a95f963.png , Với đầu vào 11đầu ra nên 21 1211 3112 132112, tôi không hiểu tại sao nó ra 111như phiên đầu tiên khiến cho cả dây chuyền để đi nặng
P. Ktinos

@ P.Ktinos định dạng đầu vào là sai, nó cần phải là một chuỗi (nó phải là phần còn lại của các bài kiểm tra mà tôi đang làm). Đã sửa lỗi liên kết
Rod

4

05AB1E , 30 23 21 byte

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

Hãy thử trực tuyến!

Giải trình

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: Điều đó sẽ không hoạt động đối với số có hơn 9 lần lặp lại một chữ số, ví dụ như trong liên kết TIO của tôi chẳng hạn.
Emigna

Ohhh ... tôi hiểu rồi
Bạch tuộc ma thuật Urn

1

Toán học, 117 byte

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

Có vẻ như nó không cần phải dài như vậy.


1

C # 246 byte

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})));}}}

Ung dung:

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();
        }
    }
}

Hãy thử ở đây (Nhập đầu vào vào khung dưới cùng sau khi được biên dịch và nhấn ENTER)


0

Thạch , 27 byte

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

Hãy thử trực tuyến!

Các s liên tiếp không thể được lồng nhau vì các chuỗi không thể được lồng nhau.

Lồng với liên kết riêng: 27 byte.

In thay vì tích lũy: 27 byte.

Giải trình

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.