Phân tách một số thành một tổng số các chữ số


9

Repdigits là số có dạng a * (10^n - 1)/9với a in [-9,9]\{0}(nói cách khác 111, -3333, 66 tuổi, con số đó được thực hiện bằng cách lặp lại chỉ có một chữ số)

Mục tiêu: Viết chương trình hoặc hàm lấy một số nguyên dương Nvà in N = s_1 + s_2 + ... + s_k. Cần có một số trên mỗi dòng và các số cần được căn phải. Không có hai triệu hồi nên có cùng số chữ số và không được phép thêm số không. Đầu ra phải được sắp xếp theo thứ tự tăng dần hoặc giảm dần (theo số chữ số)

Ví dụ:

in:
24192
out:
24192 =
22222 +
 2222 -
  222 -
   33 +
    3

in:
24192
out:
    -7
   -22
  +888
 +1111
+22222
=24192

in:
113
out:
113=    NOT  111+  no empty lines  111+
111+          00+                    
  2            2                     2

Như bạn có thể thấy có thể có nhiều giải pháp và một số tự do nghệ thuật được cho phép. Khoảng trắng hàng đầu và dấu trong mỗi dòng được cho phép

Số byte ngắn nhất sẽ thắng


Bạn nên khai báo một số quy tắc để ngăn chặn, ví dụ như chỉ in Nnhững cái?
PurkkaKoodari

3
Điều này đã được đề cập: "Không có hai triệu hồi nào có cùng số chữ số"
nutki

Những con số này cũng được gọi là repdigits.
Ypnypn

Câu trả lời:


6

perl 5 - 97 92 93 86

$x=$_=pop;{printf"%15s
",$_;$_=$x,s!\d!//,$&!eg,$x-=$_,$i++?s/^\b/+/:s/^/=/;/0/||redo}

Đầu vào được đưa ra dưới dạng tham số:

$perl a.pl 2224192
     2224192
    =2222222
       +1111
        +888
         -22
          -7

Nó không in bất cứ thứ gì nếu số có 0 trong đó. Có lẽ đó là /0/điều kiện lặp.
frageum

Cảm ơn, thực sự đó là trường hợp. Tôi bối rối với các vòng lặp perl. Họ có điều kiện ở cuối nhưng vẫn kiểm tra nó ở lần lặp đầu tiên. Tôi phải tìm "+0" rồi.
nutki

Trên thực tế tôi có thể mô phỏng làm ... while () chỉ với một ký tự phụ sử dụng redo.
nutki

2

CJam, 55 50 byte

'=l:L+Li{_W>"-+"=1$zs(\,)*+:Ii-L,_S*I+\~>\}h;]W%N*

Kiểm tra nó ở đây.

Sử dụng định dạng đầu ra

      -7
     -22
    +888
   +1111
+2222222
=2224192

Tôi có thể chơi golf này nhiều hơn một khi tôi bị đánh.

Giải trình:

'=l:L+Li{_W>"-+"=1$zs(\,)*+:Ii-L,_S*I+\~>\}h;]W%N*
'=                                                 "Push = character.";
  l:L                                              "Read STDIN and store in L.";
     +L                                            "Concatenate, push new copy of L.";
       i                                           "Convert to integer.";
        {                                 }h       "Do-while loop. Leaves the condition on the
                                                    stack. I will use the remainder for that.";
         _W>                                       "Duplicate remainder, compare with -1.";
            "-+"=                                  "Select appropriate sign character.";
                 1$                                "Copy remainder again.";
                   zs                              "Take abs() and convert to string.";
                     (                             "Shift off first digit.";
                      \                            "Swap with string.";
                       ,                           "Get length.";
                        )                          "Increment.";
                         *                         "Repeat digit that often.";
                          +                        "Concatenate with sign.";
                           :I                      "Store in I.";
                             i-                    "Convert to integer. Subtract from remainder.";
                                                   "Now we'll right-justify I.";
                               L,                  "Load input, get length.";
                                 _                 "Duplicate.";
                                  S*               "Repeat space that often.";
                                    I+             "Load string and concatenate.";
                                      \~           "Swap with length. Bitwise complement.";
                                        >          "Take that many characters from the right.";
                                         \         "Swap with remainder.";
                                            ;      "Discard final remainder (0).";
                                             ]     "Wrap in array.";
                                              W%   "Reverse.";
                                                N* "Join with line feeds.";

Mảng kết quả được in tự động vào cuối chương trình.


0

JavaScript ES6 - 145

i=0;f=n=>{return g=n<0,n=Math.abs(n)+'',l=n.length,r=l-1?n[0].repeat(l):n,(i>0?g?'-':'+':n+'=')+'\n'+' '.repeat(i++)+(l-1?r+f((+n-r)*(g?-1:1)):r)}

Dán vào bảng điều khiển Firefox. Chạy như f(24192).

Đầu ra cho f(24192):

24192=
22222+
 1111+
  888-
   22-
    7

Với đầu vào, 55nó bao gồm 0 trong tổng (đó là một lỗi).
frageum

0

GolfScript 77

~.[{..0>2*(.@*`.,\[0=]*''+~*.@\-.}do;]-1%{[.0>' +'=\`n].1=,2$`,\-' '*\+}%'='@

Liên kết demo trực tuyến:

Một phiên bản dễ đọc hơn một chút (nếu GolfScript có thể được gọi là có thể đọc được) với phiên bản thử nghiệm đơn vị có sẵn ở đây .

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.