Bổ sung lạ


19

Thử thách

Tính tổng lạ của hai số tự nhiên (còn được gọi là phép cộng âm lịch):

Cho A=... a2 a1 a0B=... b2 b1 b0hai số tự nhiên được viết trong cơ sở thập phân, tổng lạ được xác định, dựa trên hoạt động tối đa , như: A+B=... max(a2,b2) max(a1,b1) max(a0,b0)

   ...         a2         a1         a0
 + ...         b2         b1         b0
 ----------------------------------------
   ...  max(a2,b2) max(a1,b1) max(a0,b0)

Đầu vào

Hai số tự nhiên

Tất cả những điều sau đây được cho phép:

  • Chuỗi không đệm (cùng chiều dài)
  • Các chuỗi đệm không gian bên trái
  • Các chuỗi đệm bên phải
  • Mảng hai chuỗi đệm
  • Mảng char không gian đệm 2D

Đầu ra

Một số tự nhiên

Thí dụ

1999+2018-->2999
17210+701-->17711
32+17-->37
308+250-->358
308+25-->328

Quy tắc

  • Đầu vào và đầu ra có thể được cung cấp ở bất kỳ định dạng thuận tiện nào (chọn định dạng phù hợp nhất cho ngôn ngữ / giải pháp của bạn).
  • Không cần xử lý các giá trị âm hoặc đầu vào không hợp lệ
  • Một chương trình đầy đủ hoặc một chức năng được chấp nhận. Nếu một chức năng, bạn có thể trả lại đầu ra thay vì in nó.
  • Nếu có thể, vui lòng bao gồm một liên kết đến một môi trường thử nghiệm trực tuyến để người khác có thể thử mã của bạn!
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là vì vậy tất cả các quy tắc chơi gôn thông thường đều được áp dụng và mã ngắn nhất (tính bằng byte) sẽ thắng.

3
còn được gọi là bổ sung mặt trăng
TFeld

3
Chúng ta có thể lấy đầu vào là chuỗi không đệm (cùng độ dài) không?
TFeld

1
Tôi nghĩ rằng điều này là một chút quá tầm thường. Điều kỳ lạ chưa từng được hỏi trước đây
Bánh quy cối xay gió

1
Chúng ta có thể có các số trong cùng một chiều dài? Giống như 17210 00701 thay vì 17210 701?
Bánh quy cối xay gió

7
Tôi không thấy chính xác các định dạng đầu vào được cho phép. Định dạng đầu vào rất quan trọng trong thử thách này, vì một số định dạng cho phép xử lý dễ dàng hơn nhiều. Những điều sau đây được cho phép? 1) Chuỗi không đệm (cùng chiều dài) 2) Chuỗi đệm không gian bên trái 3) Chuỗi đệm không gian bên phải. 4) Mảng hai chuỗi đệm. 5) mảng char không gian đệm 2D. Bỏ phiếu để đóng và hạ cấp cho bây giờ; Tôi sẽ vui vẻ xóa phiếu bầu của mình khi được giải quyết
Luis Mendo

Câu trả lời:




7

R , 68 65 byte

function(x)apply(outer(x,10^(max(nchar(x)):1-1),`%/%`)%%10,2,max)

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

Nhập dưới dạng số nguyên, đầu ra dưới dạng danh sách các chữ số.

Nếu danh sách chữ số đệm không được cho phép, thì đơn giản là pmaxđủ.


6

MATL , 2 byte

X>

Chọn định dạng phù hợp nhất cho ngôn ngữ / giải pháp của bạn

Định dạng đầu vào là: mảng char 2D gồm hai hàng, mỗi hàng tương ứng với một dòng, với số ngắn hơn được đệm trái với khoảng trắng. Ví dụ

17210
  701

mà trong MATL được định nghĩa là

['17210'; '  701']

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

Giải trình

      % Implicit input: 2D char array with two rows 
X>    % Take maximum of (code points of) each column
      % Implicit display


5

Java 10, 78 57 byte

a->b->{for(int i=a.length;i-->0;)if(a[i]<b[i])a[i]=b[i];}

Nhập vào như hai mảng ký tự đệm không gian.

Sửa đổi mảng đầu vào đầu tiên thay vì trả về một mảng mới để lưu 21 byte (nhờ @ OlivierGrégoire ).

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

Giải trình:

a->b->{            // Method with two char-array parameters and String return-type
  for(int i=a.length;i-->0;)
                   //  Loop `i` in the range (length, 0]:
    if(a[i]<b[i])  //   If the `i`'th character in input `a` is smaller than in input `b`:
      a[i]=b[i];}  //    Change the `i`'th character in `a` to the `i`'th character of `b`

1
a->b->{for(int i=a.length;i-->0;)if(a[i]<b[i])a[i]=b[i];}( 57 byte ). Tái sử dụng alàm đầu ra để thu được nhiều, nhiều byte.
Olivier Grégoire

@ OlivierGrégoire Ah, không thể tin rằng tôi đã không nghĩ về điều đó. Cảm ơn! : D
Kevin Cruijssen


4

Japt, 9 8 7 byte

Đưa đầu vào như một mảng các mảng chữ số.

mÔÕÔËrw

Thử nó

m            :Map
 Ô           :  Reverse
  Õ          :Transpose
   Ô         :Reverse
    Ë        :Map
     r       :  Reduce by
      w      :  Maximum

Nếu lấy mảng không đệm làm đầu vào được cho phép (hiện tại nó sẽ thuộc "định dạng thuận tiện" nhưng tôi nghi ngờ đó không phải là ý định của người thách thức) thì đây có thể là 3 byte.

íwV

Thử nó

í       :Interleave the first input
  V     :With the second
 w      :Reduce each pair by maximum

1
Đây là một giải pháp 8 byte khác với chiến lược khác và định dạng đầu vào đơn giản hơn. có lẽ bạn có thể cạo một byte từ đó?
Kamil Drakari

@KamilDrakari: Uncanny - Tôi chỉ cập nhật với cùng một giải pháp!
Shaggy

Điều thú vị là phiên bản phân tách các bước "chuyển vị" và "giảm" cũng8 byte vì các phím tắt tốt hơn
Kamil Drakari

@KamilDrakari, oh, ybây giờ chúng ta có một lối tắt ? Tôi không biết điều đó. Đây là một cách khác , cũng 8 byte.
Shaggy

Ồ, đó là một mánh khóe gọn gàng với ' . Tôi không biết liệu điều đó có bao giờ lưu byte hay không, nhưng nó chắc chắn rất tuyệt.
Kamil Drakari


4

05AB1E , 9 6 5 byte

-3 cảm ơn Emigna
-1 nhờ Shaggy

íζ€àR

Lấy đầu vào dưới dạng danh sách các chữ số

í      # Reverse both inputs
 ζ     # Zip
  ۈ   # Keep the bigger digits
    R  # Reverse

Hãy thử trực tuyến! hoặc Thử tất cả các trường hợp thử nghiệm


€Rcó thể í. Ngoài ra, tôi không nghĩ bạn cần €þnhưnumber > space
Emigna

@Emigna Cảm ơn! Tôi nghĩ rằng tôi đã thử nó mà không có €þvà nó không hoạt động, nhưng bây giờ thì ...
Riley

Bạn có cần Jở cuối không?
Xù xì

@Shaggy Không, tôi đoán là tôi không. Cảm ơn!
Riley

Điều đó thật khập khiễng, nhưng các quy tắc cho phép giải pháp 3 byte bằng cách lấy một mảng char được đệm không gian 2D ..
Kevin Cruijssen 16/11/18

4

Perl 6 , 15 byte

{[~] [Zmax] $_}

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

Đưa đầu vào thành một danh sách các mảng ký tự được đệm không gian, mặc dù đối với thử thách này, định dạng đầu vào lỏng lẻo làm cho nó khá nhàm chán. Ngoài ra, đây là chương trình lấy danh sách hai số nguyên thay thế:

Perl 6 , 41 byte

{+[~] [Zmax] $_>>.fmt("%{.max}d")>>.comb}

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

Nếu bạn không nhớ một số lượng lớn khoảng trắng, bạn cũng có thể xóa +phần trước.

Giải trình:

{                                       }  # Anonymous code block
             $_>>    # Map each integer to 
                 .fmt("%{.max}d") # The number padded by the max of the list spaces
                                 >>.comb   # And split each to list of characters
      [Zmax]  # Get the max of each digit at each index
              # This works because space is coerced to 0
              # Otherwise we would have to add a 0 to the formatting string
  [~]   # Join the list of digits and spaces
 +      # And coerce the string to a number to get rid of leading whitespace

3

Haskell , 40 byte

a#b=zipWith max(p b++a)$p a++b
p=(' '<$)

Đầu vào / đầu ra dưới dạng chuỗi, thử trực tuyến!

Giải trình

Hàm pthay thế mỗi ký tự bằng một khoảng trắng, sử dụng p b++ap a++b do đó có cùng độ dài. Bằng cách này, chúng ta có thể sử dụng zipWithmà không mất bất kỳ yếu tố nào, sử dụng maxvới nó hoạt động vì một (khoảng trắng) có điểm mã thấp hơn bất kỳ ký tự nào ['0'..'9'].


3

JavaScript (ES6), 51 49 byte

NB: Câu trả lời này đã được đăng trước khi các định dạng I / O lỏng lẻo được cho phép rõ ràng. Với các mảng chữ số không có đệm, điều này có thể được thực hiện trong 33 byte , (nhưng ít thú vị hơn, IMHO).

Lấy đầu vào là hai số nguyên. Trả về một số nguyên.

f=(a,b,t=10)=>a|b&&(a%t<b%t?b:a)%t+t*f(a/t,b/t)|0

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

Đã bình luận

f = (                     // f = recursive function taking:
  a,                      //   a = first integer
  b,                      //   b = second integer
  t = 10                  //   t = 10 (which is used 6 times below)
) =>                      //
  a | b                   // bitwise OR between a and b to test whether at least one of
                          // them still has an integer part
  &&                      // if not, stop recursion; otherwise:
  (                       //
    a % t < b % t ? b : a // if a % 10 is less than b % 10: use b; otherwise: use a
  ) % t +                 // isolate the last decimal digit of the selected number
  t *                     // add 10 times the result of
  f(a / t, b / t)         // a recursive call with a / 10 and b / 10
  | 0                     // bitwise OR with 0 to isolate the integer part

Phiên bản thay thế

Định dạng I / O giống nhau.

f=(a,b)=>a|b&&[f(a/10,b/10)]+(a%10<b%10?b:a)%10|0

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


Bạn có thể nhận được ngắn hơn nhiều nếu bạn giả sử đầu vào của bạn là một mảng char được đệm không gian 2d.
kamoroso94

Chào! Bạn có thể cung cấp một số lời giải thích? Tôi "" đã thử "" để thực hiện thử thách này bằng JavaScript nhưng tôi đã thất bại và muốn xem giải pháp của bạn hoạt động như thế nào :)
Neyt

1
@Neyt Tôi đã thêm một phiên bản nhận xét. Phiên bản thay thế đang sử dụng cùng logic; sự khác biệt duy nhất là chúng ta thêm chữ số tiếp theo vào bên trái dưới dạng chuỗi thay vì nhân kết quả của cuộc gọi đệ quy với 10.
Arnauld

@Arnauld Cảm ơn bạn! :)
Neyt


2

Mẻ, 120 byte

@set/aw=1,x=%1,y=%2,z=0
@for /l %%i in (0,1,9)do @set/a"z+=w*((v=y%%10)+(v-=x%%10)*(v>>4)),y/=10,x/=10,w*=10
@echo %z%

Lấy đầu vào là tham số dòng lệnh. Phiên bản 188 byte hoạt động trên các số nguyên có độ dài tùy ý:

@set/px=
@set/py=
@set z=
:l
@if %x:~-1% gtr %y:~-1% (set z=%x:~-1%%z%)else set z=%y:~-1%%z%
@set x=%x:~,-1%
@set y=%y:~,-1%
@if "%x%" neq "" if "%y%" neq "" goto l
@echo %x%%y%%z%

Đưa đầu vào vào STDIN.


2

Cành , 125 byte

Khi tôi nhìn thấy thử thách này, tôi nghĩ: "hãy để tôi sử dụng ngôn ngữ mẫu! Chắc chắn là phù hợp"

Tôi đã sai ... rất sai .... ... Nhưng thật vui!

{%macro a(a,b,s='')%}{%for k,x in a|reverse|split('')%}{%set s=max(x,(b|reverse|split('')[k]))~s%}{%endfor%}{{s}}{%endmacro%}

Điều này đòi hỏi rằng "rict_variables "được đặt thành false (giá trị mặc định).

Để sử dụng macro này, bạn có thể làm như thế này:

{% import 'file.twig' as my_macro %}

{{ my_macro.a(195,67) }}

Nên hiển thị 167.

Bạn có thể thử điều này trong https://twigfiddle.com/rg0biy
("chế độ nghiêm ngặt" được đặt thành tắt, nó được bật theo mặc định trên trang web)


1

Husk , 5 byte

↔¤żY↔

Thuận tiện lấy đầu vào / đầu ra làm danh sách các chữ số, thử trực tuyến hoặc xác minh tất cả!

Giải trình

↔¤żY↔  -- example inputs [1,4] [3,2]
 ¤  ↔  -- reverse the arguments of: [4,1] [2,3]
  żY   -- | zipWith (keeping elements of longer) max: [4,3]
↔      -- reverse: [3,4]

1

Stax , 5 byte

|>E:o

Chạy và gỡ lỗi nó

Chương trình này lấy đầu vào là một chuỗi các chuỗi.

|>  Right align inputs (filling with \0)
E   "Explode" array onto stack separately
:o  "Overlay" Keep the maximum element respective element from two arrays.

Chạy cái này

Đây là lần đầu tiên tôi thấy việc sử dụng cho hướng dẫn lớp phủ "trong tự nhiên".



1

Bình thường, 5 byte

meSdC

Lấy đầu vào là mảng của hai chuỗi đệm không gian.

meSd       map greatest
    C      on the transpose of input

Hãy thử nó ở đây .



1

Ceylon, 55/99

Với các chuỗi 0 hoặc đệm không gian có cùng độ dài (trả về một ký tự lặp):

function t(String a,String b)=>zipPairs(a,b).map(max);

Với các chuỗi 0 hoặc đệm không gian (trả về Chuỗi):

String t(String a,String b)=>String(zipPairs(a,b).map(max));

Với các chuỗi có độ dài khác nhau (trả về một Chuỗi):

String u(String a,String b)=>String(zipPairs(a.padLeading(b.size),b.padLeading(a.size)).map(max));



1

Võng mạc 0.8.2 , 39 byte

+`^(.*)(.)¶(.*)(.)
$1¶$3¶$2$4
%O`.
¶.?

Hãy thử trực tuyến! Liên kết bao gồm bộ kiểm tra. Phiên bản Retina 1 45 byte trước đó chấp nhận các chuỗi không được đệm:

P^`.+
+`^(.*)(.)¶(.*)(.)
$1¶$3¶$2$4
%O`.
¶.?

Hãy thử trực tuyến! Liên kết bao gồm bộ kiểm tra. Giải trình:

P^`.+

Pad cả hai giá trị đến cùng một chiều dài. (Chỉ Retina 1. Có nhiều cách mô phỏng điều này trong Retina 0.8.2 nhưng chúng không được chơi gôn lắm.)

+`^(.*)(.)¶(.*)(.)
$1¶$3¶$2$4

Chuyển các giá trị.

%O`.

Sắp xếp từng cặp theo thứ tự.

¶.?

Xóa tất cả các chữ số thấp và dòng mới dư thừa.


1

Than , 8 byte

⭆θ⌈⟦ι§ηκ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

 θ          First input
⭆           Map over characters and join
  ⌈         Maximum of
   ⟦        List of
    ι       Current character of first input and
      η     Second input
     §      Indexed by
       κ    Current index
            Implicitly print

Phiên bản 10 byte "thêm" bất kỳ số chuỗi đệm nào:

⭆§θ⁰⌈Eθ§λκ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Phiên bản 14 byte trước đó chấp nhận các chuỗi không được đệm:

⭆◧θLη⌈⟦ι§◧ηLθκ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

  θ             First input
 ◧              Padded to
   L            Length of
    η           Second input
⭆               Map over characters and join
     ⌈          Maximum of
      ⟦         List of
       ι        Current character of first input and
          η     Second input
         ◧      Padded to
           L    Length of
            θ   First input
        §       Indexed by
             κ  Current index
                Implicitly print

Phiên bản 17 byte "thêm" bất kỳ số chuỗi nào:

≔⌈EθLιη⭆η⌈Eθ§◧ληκ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã.


Câu hỏi đã được thay đổi để các chuỗi có thể được nhập dưới dạng đệm
ASCII - chỉ

Nitpicking, nhưng bạn đã bỏ lỡ một paren gần gũi trong phiên bản dài dòng đầu tiên: P
ASCII - chỉ

@ ASCII-only Nếu chỉ TIO phù hợp với parens cho tôi ;-)
Neil

0

Toán học 50 byte

a = 543; b = 791;

FromDigits@MapThread[Max, IntegerDigits /@ {a, b}]

(* 793 *)


1
Bạn có thể thêm một TIO? Tôi không biết Mathicala nhưng tôi nghi ngờ điều này có thể thất bại nếu 2 đầu vào không có số chữ số bằng nhau.
Xù xì

1
Tôi nghĩ rằng bạn đang sử dụng đầu vào thông qua các biến được xác định trước, điều này sẽ khiến điều này trở thành một đoạn trích, không được phép. Đệ trình phải là một chức năng hoặc một chương trình đầy đủ
Jo King
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.