이상한 추가


19

도전

두 자연수 (음력 추가라고도 함)의 이상한 합을 계산합니다.

주어 A=... a2 a1 a0B=... b2 b1 b0소수베이스에 기록 된 두 개의 자연수는 이상한 합 에 기초하여, 정의 된 최대 로 작동 : 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)

입력

두 자연수

다음이 모두 허용됩니다.

  • 제로 패딩 문자열 (길이 동일)
  • 공백으로 채워진 문자열
  • 오른쪽으로 채워진 문자열
  • 두 개의 패딩 문자열 배열
  • 2D 스페이스 패딩 문자 배열

산출

자연수

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

규칙

  • 입력 및 출력은 편리한 형식으로 제공 될 수 있습니다 (언어 / 솔루션에 가장 적합한 형식을 선택하십시오).
  • 음수 값 또는 유효하지 않은 입력 을 처리 할 필요가 없습니다.
  • 전체 프로그램 또는 기능이 허용됩니다. 함수 인 경우 출력하지 않고 출력을 반환 할 수 있습니다.
  • 가능하면 다른 사람들이 귀하의 코드를 시험해 볼 수 있도록 온라인 테스트 환경에 대한 링크를 포함하십시오!
  • 표준 허점 은 금지되어 있습니다.
  • 이것은 이므로 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.


3
입력을 0으로 채워진 문자열 (같은 길이)로 취할 수 있습니까?
TFeld

1
나는 이것이 너무 사소한 것이라고 생각합니다. 이전에 요청되지 않은 이상한
풍차 쿠키

1
같은 길이의 숫자를 가질 수 있습니까? 17210 701 대신 17210 00701?
Windmill Cookies

7
정확히 어떤 입력 형식이 허용되는지 알 수 없습니다. 일부 형식에서는 처리가 훨씬 쉬워 지므로 입력 형식은이 과제에서 매우 중요합니다. 다음 중 허용되는 것은 무엇입니까? 1) 제로 패딩 문자열 (같은 길이) 2) 왼쪽 공백 패딩 문자열 3) 오른쪽 공백 패딩 문자열. 4) 두 개의 패딩 된 문자열 배열. 5) 2D 스페이스 패딩 문자 배열. 현재 닫고 투표하는 투표; 해결 때 나는 행복하게 나의 표를 제거합니다
루이스 Mendo에게

답변:





6

MATL , 2 바이트

X>

귀하의 언어 / 솔루션에 가장 적합한 형식을 선택하십시오

입력 형식은 다음과 같습니다. 각 행에 해당하는 2 행의 2D char 배열은 공백으로 채워진 짧은 숫자입니다. 예를 들어

17210
  701

MATL에서 다음과 같이 정의됩니다.

['17210'; '  701']

온라인으로 사용해보십시오!

설명

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


5

자바 10, 78 57 바이트

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

두 개의 공백으로 채워진 문자 배열로 입력하십시오.

@ OlivierGrégoire 덕분에 21 바이트를 절약하기 위해 새 입력 배열을 반환하는 대신 첫 번째 입력 배열을 수정합니다 .

온라인으로 사용해보십시오.

설명:

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 바이트 ). a많은 바이트를 얻으려면 출력으로 재사용하십시오 .
Olivier Grégoire

@ OlivierGrégoire 아, 나는 그것을 생각하지 않았다 믿을 수 없습니다. 감사! : D
Kevin Cruijssen


4

apt, 9 8 7 바이트

숫자 배열의 배열로 입력을받습니다.

mÔÕÔËrw

시도 해봐

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

0으로 채워진 배열을 입력으로 허용하면 (현재 "편의 한 ​​형식"에 속하지만 도전자의 의도가 아닌 것 같습니다) 3 바이트가 될 수 있습니다.

íwV

시도 해봐

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

1
여기서 '다른 전략 간단 입력 포맷과 다른 8 바이트 용액이야. 아마 당신은 그것에서 바이트를 면도 할 수 있습니까?
카밀 드라 카리

@ KamilDrakari : Uncanny-방금 동일한 솔루션으로 업데이트했습니다!
Shaggy

흥미롭게도 "전치"단계와 "축소"단계를 구분하는 버전 은 더
빠른

@KamilDrakari, 오, y지금 바로 가기가 있습니까? 난 몰랐어. 또 다른 방법 은 8 바이트입니다.
얽히고 설킨

오, 그것은 깔끔한 트릭입니다 '. 바이트를 절약 할 수 있을지 모르겠지만 확실히 멋집니다.
카밀 드라 카리


4

05AB1E , 9 6 5 바이트

Emigna 덕분에 -3 Shaggy
덕분에 -1

íζ€àR

숫자 목록의 목록으로 입력을받습니다.

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

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 시도하십시오


€R일 수 있습니다 í. 또한, 나는 당신이 필요로 생각하지 않는 €þnumber > space
Emigna

@Emigna 감사합니다! 내가없이 그것을 시도 생각 €þ하고 그것은 작동하지 않았다, 그러나 지금은 ... 않습니다
라일리

J마지막에 필요 합니까?
얽히고 설킨

@Shaggy 아니요, 그렇지 않은 것 같습니다. 감사!
라일리

그것은의 절름발이하지만 규칙은 허용 3 바이트 솔루션 차원 공간 패딩 문자 배열을 취함으로써를 ..
케빈 Cruijssen

4

펄 6 , 15 바이트

{[~] [Zmax] $_}

온라인으로 사용해보십시오!

공백으로 채워진 문자 배열 목록으로 입력을 취하지 만이 문제의 경우 lax 입력 형식이 다소 지루합니다. 또는 두 정수 목록을 대신 사용하는 프로그램이 있습니다.

펄 6 , 41 바이트

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

온라인으로 사용해보십시오!

많은 양의 공백이 마음에 들지 않으면 +앞면에서 공백을 제거 할 수도 있습니다 .

설명:

{                                       }  # 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

하스켈 , 40 바이트

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

문자열로 입력 / 출력 하고 온라인으로 시도하십시오!

설명

기능은 p사용 공간에 의해 각 캐릭터를 대체 p b++a하고 p a++b, 따라서 동일한 길이이다. 이 방법으로 zipWith요소를 잃지 않고 사용할 수 있습니다 max. (공백)은 문자보다 코드 포인트가 낮기 때문에 작동 합니다 ['0'..'9'].


3

자바 스크립트 (ES6), 51 49 바이트

주의 :이 답변은 느슨한 I / O 형식이 명시 적으로 허용되기 전에 게시되었습니다. 0으로 채워진 숫자 배열을 사용하면 33 바이트 로 수행 할 수 있습니다 (그러나 IMHO는 훨씬 덜 흥미 롭습니다).

입력을 두 정수로 취합니다. 정수를 반환합니다.

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

온라인으로 사용해보십시오!

댓글

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

대체 버전

동일한 I / O 형식

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

온라인으로 사용해보십시오!


입력이 2d 공백으로 채워진 char 배열이라고 가정하면 훨씬 짧아 질 수 있습니다.
kamoroso94

안녕하세요! 설명 좀 해 주시겠습니까? 나는 JavaScript에서이 도전을하기 위해 ""시도했다 ". 그러나 나는 실패했고 당신의 해결책이 어떻게 작동하는지보고 싶다 :)
Neyt

1
@Neyt 댓글이 달린 버전을 추가했습니다. 대체 버전은 동일한 논리를 사용하고 있습니다. 유일한 차이점은 재귀 호출의 결과에 10을 곱하는 대신 다음 숫자를 왼쪽에 문자열로 추가한다는 것입니다.
Arnauld

@Arnauld 감사합니다! :)
Neyt


2

배치, 120 바이트

@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%

입력을 명령 행 매개 변수로 사용합니다. 188 바이트 버전은 임의의 길이 정수에서 작동합니다.

@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%

STDIN에서 입력을받습니다.


2

나뭇 가지 , 125 바이트

이 도전을 보았을 때, 나는 "템플릿 언어를 사용하자!

나는 틀렸다 ... 틀렸다 .... ... 그러나 재미있었습니다!

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

"strict_variables"가 false(기본값)으로 설정되어 있어야합니다 .

이 매크로를 사용하려면 다음과 같이하십시오 :

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

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

167을 표시해야합니다.

https://twigfiddle.com/rg0biy 에서 시도해 볼 수 있습니다
( "strict_variables"는 off로 설정되어 있으며 웹 사이트에서는 기본적으로 켜져 있습니다)



1

Stax , 5 바이트

|>E:o

실행 및 디버깅

이 프로그램은 입력을 문자열 배열로 가져옵니다.

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

이것을 실행

이것은 "야생에서"오버레이 명령에 대한 사용을 처음 본 것입니다.





1

실론, 55/99

길이가 같은 0 또는 공백으로 채워진 문자열을 사용하는 경우 (반복 가능한 문자 반환) :

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

0 또는 공백으로 채워진 문자열 (문자열 반환) :

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

길이가 다른 문자열이있는 경우 (문자열을 반환) :

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



1

레티 나 0.8.2 , 39 바이트

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

온라인으로 사용해보십시오! 링크에는 테스트 스위트가 포함되어 있습니다. 이전 45 바이트 Retina 1 버전은 패딩되지 않은 문자열을 허용합니다.

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

온라인으로 사용해보십시오! 링크에는 테스트 스위트가 포함되어 있습니다. 설명:

P^`.+

두 값을 같은 길이로 채 웁니다. (Retina 1 만 해당됩니다. Retina 0.8.2에는이를 모방하는 방법이 있지만 골프는 아닙니다.)

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

값을 바꿉니다.

%O`.

각 쌍을 순서대로 정렬하십시오.

¶.?

낮은 자릿수와 잉여 줄 바꿈을 모두 삭제하십시오.


1

, 8 바이트

⭆θ⌈⟦ι§ηκ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

 θ          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

10 바이트 버전은 여러 개의 채워진 문자열을 "추가"합니다.

⭆§θ⁰⌈Eθ§λκ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 이전 14 바이트 버전은 패딩되지 않은 문자열을 허용합니다.

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

  θ             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

17 바이트 버전은 여러 문자열을 "추가"합니다.

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다.


문자열이
ASCII 전용

하찮은 일에 속 태우고있다, 그러나 당신은 첫째 자세한 버전에 가까운 괄호 놓친 : P를
ASCII 전용

@ ASCII-only TIO 만 나를 위해 parens과 일치하는 경우 ;-)
Neil

0

Mathematica 50 바이트

a = 543; b = 791;

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

(* 793 *)


1
TIO를 추가 할 수 있습니까? Mathematica는 모르지만 두 입력의 숫자가 같지 않으면 이것이 실패 할 수 있습니다.
Shaggy 2013

1
미리 정의 된 변수를 통해 입력을 받고 있다고 생각합니다. 스 니펫은 허용되지 않습니다. 출품작은 기능 또는 전체 프로그램이어야합니다
Jo King
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.