숫자와 숫자를 더한 값을 반대로 추가


26

숫자가 0보다 크면 모든 자릿수 (1 .. n)를 연결하고 뒤집은 합계를 출력하고 합산하십시오. 예를 들어, n = 6 인 경우

1에서 6까지의 숫자가 연결되었습니다.

123456

역전 :

654321

함께 합하면 777777이됩니다. 또 다른 예는 n = 11입니다.

1 2 3 4 5 6 7 8 9 10 11 > 1234567891011

11 10 9 8 7 6 5 4 3 2 1 > 1110987654321

함께 합하면 결과가됩니다 2345555545332. 이것은 A078262라고도 합니다.

최단 코드 승리!



에 바운드가 있습니까 n, 아니면 임의로 큰 정수를 지원해야합니까?
LegionMammal978

나는 기본값이 "경계"라고 생각합니다 max(256,yourlanguagesdefaultintegertypelimit). 그러나 지정해야합니다.
CalculatorFeline

@ LegionMammal978 언어가 지원하는 최대 높이.
Lamaro

중요한 테스트 케이스 : 10, 제공한다 23333333231.
Adnan

답변:


9

05AB1E, 7 바이트

LDRJsJ+

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

설명

LDRJsJ+

L        range from 1 .. input
 D       duplicate
  R      reverse
   JsJ   convert both arrays to strings
      +  add (coerces both strings to ints)

+목록에 중첩 추가를 수행하는 디자인 선택에 매우 혼란스러워 하며 문자열의 경우 int로 변환 한 다음 추가합니다. 그러나 나는 그것이 여기서 효과가 있다고 생각합니다! : P
FryAmTheEggman

@FryAmTheEggman 중첩 된 추가를 제거하려고합니다. 내가 그것을 구현 한 이래로 유용하지 않았습니다 ...
Adnan

3
Sheshe, 나는 2 시간 동안 PPCG를 떠나고 내가가는 동안 Aqua Tart로 이름을 바꿉니다. 오, PPCG 사용자의 삶.
ETHproductions

6

젤리, 9 바이트

R,U$DF€ḌS

라이브 코딩 


2
나입니까 아니면 그 코드가 비밀리에 U $ D를 훔치는 것을 볼 수 있습니까?
gcampbell


4

Pyth, 12 10 바이트

ssMjLk_BSQ

2 바이트 동안 @FryAmTheEggman 에게 감사 합니다!

Q입력이고, S로 변 [1, 2, ..., input()], _B두 갈래로 위에은 _(반전)를 생성하도록 [rng, rev(rng)], jLk그 위에 매핑 join하여 k(이하 "빈 문자열"변수 임) sM에 매핑 int이상 얻어진 배열 및 s최종 합계를 산출한다.


4

자바 스크립트 (ES6), 70 67 64 바이트

a=>(z=[...Array(a)].map((b,c)=>c+1)).join``- -z.reverse().join``

구식 코드가 입력에 대한 오해로 만들어져 요구 사항을 충족하도록 수정되었습니다.


@TimmyD 설명을 추가했습니다.
Mwr247

@TimmyD OH! > _ <도전에 대한 나의 오해는 어떻게 ... 그래, 나는 이것을 고쳐야 할 것이다.
Mwr247

@TimmyD 온라인으로 돌아올 정도로 오래 걸렸습니다. 지금은 고쳐졌고, 그것을 잡아 주셔서 감사합니다.
Mwr247

다른 답변에서 언급했듯이 매개 변수 a가 1과 12 사이 인 경우에만 작동합니다. 실제로 너무 작습니다
edc65

@ edc65 OP의 의견 에 따르면 충분합니다.
Mwr247

3

파이썬 3, 74

DSM 덕분에 6 바이트를 절약했습니다.

너무 흥미로운 것은 범위에 가입 한 다음 정수로 변환하여 추가하십시오.

lambda x:sum(int(''.join(list(map(str,range(1,x+1)))[::i]))for i in(1,-1))

3

망막 , 71

그 작업에 대한 도구가 잘못 되었기 때문입니다.

.+
$*a:$&$*
+`^(a+)a\b(.*)\b1(1+)$
$1 $& $3
 ?(\w)+ ?
$#1
\d+:?
$&$*c
c

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

최대 6 개의 입력에 작동하지만 그 후에 온라인 통역사가 시간 초과됩니다.


1
마지막 행을 제거하고로 변경 (c)+하여 74로 줄 이십시오 c.
daavko

@daavko 예, 물론 감사합니다!
디지털 외상

또한 $&$*c-> $*c\d+:?-> \d+70입니다. 어떤 이유로 든 계속 작동합니다.
daavko


3

자바 스크립트 (ES6), 67 66 바이트

n=>(a=[...Array(n+1).keys()].slice(1)).join``- -a.reverse().join``

예, 그것은 공간입니다. 어. 적어도 @Downgoat는 바이트를 절약하는 데 도움이되었습니다.


1
첫 번째를 제거하고 바이트를 저장하기 위해 -> 를 +만들 수 있습니다+ +- -
Downgoat

n => (a = [... Array (n)]. map (_ => n-)). join- -a.reverse().join
edc65

참고 : 간단한 js 산술을 사용하면 이것은 1 .. 12로 제한됩니다. 12
edc65


2

PowerShell, 35 바이트

param($a)+-join(1..$a)+-join($a..1)

을 사용하여 입력을 범위로 변환 한 ..다음 함께 범위를 확장 -join하고 추가합니다.

최대 입력 번호를 작동 138하는 동안 139줄 것이다 Infinity, 그리고 140놀랍 자세한 캐스팅 오류를 발프 것입니다 위 :

Cannot convert value "12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413
5136137138139140" to type "System.Int32". Error: "Value was either too large or too small for an Int32."


2

자바 스크립트 (ES6), 99

이것은 자릿수를 추가하므로 53 비트 정밀도의 자바 스크립트보다 훨씬 높은 숫자를 처리 할 수 ​​있습니다.

n=>eval("for(a=b=c=r='';n;a+=n--)b=n+b;for(i=a.length;i--;r=c%10+r)c=(c>9)-(-a[i]-b[i]);c>9?1+r:r")

테스트

f=n=>eval("for(a=b=c=r='';n;a+=n--)b=n+b;for(i=a.length;i--;r=c%10+r)c=(c>9)-(-a[i]-b[i]);c>9?1+r:r")

// Less golfed
U=n=>{
  for(a=b=c=r=''; n; --n)
      b=n+b, a+=n;
  for(i=a.length; i--; r = c%10+r) 
      c=(c>9)-(-a[i]-b[i]);
  return c>9? 1+r : r;
}

function test() {
  var n=+I.value
  R.textContent=f(n)
}  

test()
N: <input id=I value=11 oninput="test()"> -> <span id=R></span>


9에서 작동하지 않는 것 같습니다. 또한 c다른 변수로 초기화하지 않는 이유 는 무엇입니까?
Neil

당신은 내 공감대를 가지고 있습니다.
Neil


2

MATL , 13 바이트

:tP2:"wVXvU]+

편집 (2016 년 5 월 20 일) 링크의 코드는 최근 언어 변경으로 인해 Xz대신 Xv에을 (를) 사용 합니다.

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

:                % range [1,2,...,n], where n is input
 tP              % duplicate and flip
   2:"     ]     % do this twice
      w          % swap
       V         % convert array of numbers to string with numbers and spaces
        Xv       % remove spaces
          U      % convert to number
            +    % add the two numbers

11 또는 10에서는 작동하지 않습니다. (힌트 : 문자열로 변환하기 전에 역 범위)
Mama Fun Roll

@ ӍѲꝆΛꝆΛПҒЦꝆ 감사합니다! 수정
루이스 멘도

큰! 공감하십시오.
Mama Fun Roll



1

펄 6 , 25 바이트

{([~] @_=1..$^n)+[R~] @_}
{
  (
    [~]           # reduce with the string concatenation infix op:
    @_ = 1 .. $^n # the range 1 to input ( also stored in @_ )
  )
  +               # add that to
  [R~] @_         # @_ reduced in reverse
}

용법:

for 6, 11, 12 -> $n {
  say {([~] @_=1..$^n)+[R~] @_}( $n )
}
777777
2345555545332
244567776755433

나는 당신이 할 수 있다고 생각 $n대신에$^n
andlrc

@ dev-null 블록에 입력하기를 원한다면 아닙니다. 는 -> $n {에 다른 하나입니다 $^n.
브래드 길버트 b2gills

1

R, 34 60 64 바이트

f=pryr::f;g=f(as.numeric(paste(x,collapse='')));f(g(1:n)+g(n:1))

pryr패키지가 설치 되었다고 가정 합니다. 이것은 f함수 생성을위한 속기입니다.

편집 된 26 바이트가 추가되었지만 완전히 잘못된 것이 아니라 작동하는 함수를 반환합니다.

strtoi (이전에 사용 된)가 반환되는 n = 10 이상의 경우를 처리하기 위해 편집에 또 다른 4 바이트가 추가되었습니다. NA


1

루아, 57

a=''b=''for i=1,...do a=a..i b=b.. ...-i+1 end return a+b

1

루아, 53 바이트

이 프로그램은 n명령 행 인수로 사용됩니다.

s=""r=s for i=1,arg[1]do r,s=i..r,s..i end print(s+r)

나는 소수 부분이 0 인 숫자를 출력하는 것이 좋다고 가정했습니다 ( 777777.0이것은 루아에서 숫자를 출력하는 기본 방법이기 때문에 형식입니다 (정수와 실수는 구별되지 않습니다)


문자열 자체가 아니라 숫자입니다. 귀하의 코드는 n> = 10에서 실패합니다.
Moop

@Moop 1 바이트의 가격으로 수정되었습니다 ^^ '. 댓글 주셔서 감사합니다 ^^ '
Katenkyo

r 대신 역방향 연결에 arg [1] 근사한 작업 대신 ...를 사용하여 3을 더 절약 할 수 있습니다. +1
Moop

@Moop 나는 당신의 게시물을 보았습니다, 그것을 잘 사용했습니다. 나는 당신이 그런 식으로 사용할 ...수 있다는 것을 몰랐습니다 ! 온라인 컴파일러 이외의 다른 것을 사용할 수 없으므로 처리 할 수 ​​없기 때문에 잠시 동안이 방법을 계속 사용할 것입니다. 답변 :))
Katenkyo

1

펄 5, 37 바이트

25 바이트, 1은 -p11, 11은-MList::Gen

$_=<[.]1..$_>+<[R.]1..$_>

이전 솔루션, 40 바이트 : 39 -p

@a=reverse@_=1..$_;$"=$\;$_="@a"+"@_"

1

펄, 36 바이트

에 +1 포함 -p

STDIN에서 실행

perl -p reverse.pl <<< 6

reverse.pl

$_=eval join"",map{abs||"+"}-$_..$_

1

Dyalog APL , 17 바이트

+/⍎¨∊¨⍕¨¨x(⌽x←⍳⎕)

프롬프트 입력을위한
입력 될 때까지 '열거
x←X에 저장 목록
X 역
x(... )원래 목록에 앞에 추가 반대 목록
⍕¨¨문자열로 각 목록의 각 숫자가 변환
∊¨한 문자열로 문자열의 각 목록을이
⍎¨숫자로 각각의 문자열을 변환
+/합이 두 숫자 .


0

Mathematica, 64 바이트

Plus@@FromDigits/@#&[""<>ToString/@#&/@{#,Reverse@#}&[Range@#]]&


0

𝔼𝕊𝕄𝕚𝕟, 12 자 / 15 바이트

⨭⟮⩤⁽1ï⟯⨝,Ⅰᴚ⨝

Try it here (Firefox only).

Meh.

설명

범위를 가져 [1,input]와서 결합합니다. 같은 범위를 취해 뒤집은 다음 조인합니다. 두 범위의 합이 결과입니다.


0

루비, 40 자

->n{eval (l=[*1..n])*''+?++l.reverse*''}

샘플 실행 :

irb(main):001:0> ->n{eval (l=[*1..n])*''+?++l.reverse*''}[11]
=> 2345555545332

irb(main):002:0> ->n{eval (l=[*1..n])*''+?++l.reverse*''}[6]
=> 777777

0

C #, 126 바이트

using System.Linq;a=>{var b=Enumerable.Range(1,a);return long.Parse(string.Concat(b))+long.Parse(string.Concat(b.Reverse()));}

더 골프를 칠 수도 있습니다. 확실하지 않습니다.


0

Groovy, 42 39 자

{[1..it,it..1]*.join()*.toLong().sum()}

샘플 실행 :

groovy:000> ({[1..it,it..1]*.join()*.toLong().sum()})(11)
===> 2345555545332

groovy:000> ({[1..it,it..1]*.join()*.toLong().sum()})(6)
===> 777777
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.