1에서 n까지의 번호를 인터리브하고 동일한 번호를 뒤집습니다.


34

간단한 것 :

양수 받아 N 에서 정수 이하 1,000 미만, 출력 한 것은 하는 N 의 정수 인터리브 없음1 . 숫자를 구분 기호없이 표시하도록 숫자를 연결해야합니다.

테스트 사례 :

n = 1
11

n = 4
14233241

n = 26
12622532442352262172081991810171116121513141413151216111710189198207216225234243252261

n = 100
110029939849759669579489399210911190128913881487158616851784188319822081218022792378247725762675277428732972307131703269336834673566366537643863396240614160425943584457455646554754485349525051515052495348544755465645574458435942604161406239633864376536663567346833693270317130722973287427752676257724782379228021812082198318841785168615871488138912901191109299389479569659749839921001

이것은 이므로 각 언어에서 가장 짧은 바이트 제출이 이깁니다. 설명이 권장됩니다.

답변:


16

자바 스크립트 (ES6), 30 바이트

f=(n,k=1)=>n?f(n-1,k+1)+n+k:''

어떻게?

이것은 매우 간단하지만 끈이 꼬리부터 머리까지 만들어 졌다는 점은 주목할 가치가 있습니다. 처음에 빈 문자열이 마지막에 추가되고 최종 결과의 강제 변환이 가능합니다.

다음은 재귀에 대한 세부 사항입니다 f(4).

f(4) =                                            // initial call
f(4, 1) =                                         // applying the default value to k
f(3, 2) + 4 + 1 =                                 // recursive call #1
(f(2, 3) + 3 + 2) + 4 + 1 =                       // recursive call #2
((f(1, 4) + 2 + 3) + 3 + 2) + 4 + 1 =             // recursive call #3
(((f(0, 5) + 1 + 4) + 2 + 3) + 3 + 2) + 4 + 1 =   // recursive call #4
((('' + 1 + 4) + 2 + 3) + 3 + 2) + 4 + 1 =        // n = 0 --> end of recursion
'' + 1 + 4 + 2 + 3 + 3 + 2 + 4 + 1 =              // final sum
'14233241'                                        // final result

테스트 사례


10

파이썬 2 , 46 바이트

lambda n:''.join(`x+1`+`n-x`for x in range(n))

4 바이트 ovs 덕분에

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

설명:

lambda n:''.join(`x+1`+`n-x`for x in range(n))
lambda n:                                      # anonymous lambda taking one parameter n
                 `x+1`+`n-x`                   # `x` is repr(x) which is equivalent to str(x) for integers less than INT_MAX
                            for x in range(n)  # integers x in [0, n)

1
파이썬 3에서 2 바이트 더 :f'{x}{n-~-x}'
L3via 11:30에

2
@ L3viathan 3.6에 추가 된 새로운 기능입니다.
Mego

1
파이썬 3.6은 파이썬 3이 아닙니까?
L3viathan

6
lambda n:''.join('x+1'+'n-x'for x in range(n))46 바이트 동안. ( '목록 이해에서 백틱으로 대체 )
ovs

6
@ovs 안녕하세요, 당신은 백틱을 피할 수 있습니다-> `\`x+1\``렌더링`x+1`
Rod


7

배쉬 , 25 바이트

printf %s`seq $1 -1 1|nl`

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

줄어드는 순서, 번호 줄 증가 및 printf 조인 줄 인쇄

공백으로 구분, 20 바이트 : seq $ 1 -1 1 | nl | xargs


그것이 허용되지 않으면 seq $1 -1 1|nl|tr -d ' \n\t'8 바이트 더 변경할 수 있습니다
marcosm 12

1
20 바이트 제출이 유효하지 않습니다. 나의 투표는 25 바이트 제출입니다.
Digital Trauma

Digital Trauma가 지적했듯이 20 바이트 솔루션은 유효하지 않습니다.
Outgolfer Erik

time printf %s'seq 1000000 -1 1|nl'; grep name /proc/cpuinfo real 0m7.985s user 0m6.092s sys 0m0.392s model name : Intel(R) Pentium(R) D CPU 3.00GHz model name : Intel(R) Pentium(R) D CPU 3.00GHz
marcosm

7

R, 35 바이트

n=scan();cat(rbind(1:n,n:1),sep="")

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

rbind(1:n,n:1)첫 번째 행에는 1부터 n까지, 두 번째에는 n부터 1까지의 2 행 행렬을 만듭니다. cat함수는 각 열을 읽고,이 행렬을 축소.


1
이것은 대화식 모드에서만 작동하며 사용자는 nstdin을 통해 전달하는 대신 명령 행에 입력해야합니다 .
shadowtalker

@ ssdecontrol 예, 일반적으로 허용되는 것으로 생각하지만 여기서 상당히 새롭습니다. 잘못 될 수 있습니다.
user2390246

나는 일반적으로 받아 들일 만하다고 생각하지만 NB, TIO에서 올바르게 실행하려면 바닥 글 필드에 입력을 입력해야합니다 (그리고 링크를 포함하는 것이 좋습니다!) tio.run/nexus/…
Giuseppe

6

05AB1E , 6 5 바이트

rev 에서 제안한대로 새로운 인터리브 내장 기능을 사용하여 바이트를 저장했습니다.

LÂ.ιJ

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

설명

L        # range [1 ... input]
 Â       # create a reversed copy
  .ι     # interleave the lists
    J    # join

rev 라는 이름의 사용자가 제안했습니다 LÂ.ιJ.
Jonathan Frech

@JonathanFrech : 지금은 컨센서스가 챌린지보다 새로운 기능을 사용할 수 있다는 것을 알고 있지만 새로운 내장 기능이 챌린지를 더 잘 완료하기 때문에 이전 답변을 편집하는 것이 주저합니다. 그와 같이 개선 될 수있는 많은 답변이 있습니다. :)
Emigna

글쎄, 나는 메신저였다. 가능한 @rev는 자신의 답변을 게시해야합니다.
Jonathan Frech

@JonathanFrech : 나는 그것을 비난으로 의미하지 않았습니다. Rev는 그가 새로운 제안을 할 때마다 새로운 답변을 게시하는 것보다 기존 답변을 편집하는 것이 낫기 때문에 편집을 제안했을 때 올바르게 수행했습니다. 적어도 제안을 할 때 이전 답변을 수정하는 것이 정말로 나아 져야합니다.
Emigna

4

CJam , 10 바이트

ri,:)_W%]z

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

설명

ri   e# Read input and convert to integer N.
,    e# Turn into range [0 1 ... N-1].
:)   e# Increment to get [1 2 ... N].
_W%  e# Duplicate and reverse the copy.
]    e# Wrap both in an array to get [[1 2 ... N] [N ... 2 1]]
z    e# Transpose to get [[1 N] [2 N-1] ... [N-1 2] [N 1]]
     e# This list is printed implicitly at the end of the program,
     e# but without any of the array structure (so it's essentially flattened,
     e# each number is converted to a string and then all the strings
     e# are joined together and printed).


4

공백 , 71 바이트

   
 
 	
		 
 			
  
 
	   	
	    
 	
 	 
	 
 	
 	   	
	  	 
 
	 	

 


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

설명

sssn  ; push 0 - seed the stack with 0 (this will be our 1->n counter, a)
sns   ; dup
tntt  ; getnum - read n (stored on the heap)
sns   ; dup
ttt   ; retr - pull n onto the stack (this will be our n->1 counter, b)
nssn  ; label 'loop'
snt   ; swap - bring a to the top
ssstn ; push 1
tsss  ; add - increment a
sns   ; dup
tnst  ; putnum - output a as a number
snt   ; swap - bring b to the top
sns   ; dup
tnst  ; putnum - output b as a number
ssstn ; push 1
tsst  ; sub - decrement b
sns   ; dup
ntstn ; jez 'exit' if b is 0
nsnn  ; jmp 'loop'

스택을 올바르게 설정하려면 첫 번째 명령이 필요합니다. 공백의 입력 명령은 힙에 쓰므로 b (입력 값)를 스택에 다시 복사해야합니다. 1 대신 0을 선언하는 것이 더 짧기 때문에 (바이트를 절약하기 때문에) a = 0으로 시작하고 증가 명령을 다시 정렬하기 만하면됩니다. 그 후에 우리는 b를 0에 도달 할 때까지 a를 반복하고 증가시키고, a, 출력 b, 감소 b를 출력합니다.


후행 공백을 모두 제거하면 훨씬 더 골프화 될 수 있습니다. : P
cat

4

하스켈, 65 48 47 바이트

Laikoni 덕분에 1 바이트 절약 :

f n=show=<<(\(l,r)->[l,r])=<<zip[1..][n,n-1..1]

nimi 덕분에 6 바이트가 절약되었습니다.

f n=show=<<(\(l,r)->[l,r])=<<zip[1..n][n,n-1..1]

이전 답변과 설명 :

f n=concatMap show$concatMap(\(l,r)->[l,r])(zip[1..n][n,n-1..1])

여기에 이미 더 나은 Haskell 답변이 있지만 Haskell과 코드 골프를 처음 사용하므로 게시 할 수도 있습니다. :)

이 함수는리스트 [1..n]을 역으로 압축하여 튜플리스트를 생성합니다.

[(1,n),(2,n-1),(3,n-2)..(n,1)]

그런 다음 concatMap람다를이 튜플 목록에 매핑하여 목록 목록을 만듭니다.

[[1,n],[2,n-1],[3,n-2]..[n,1]]

... 그리고 그것을 연결합니다.

[1,n,2,n-1,3,n-2..n,1]

그런 다음 final 은 목록에 concatMap매핑 show되어 단일 문자열로 연결됩니다.

f 26 "12622532442352262172081991810171116121513141413151216111710189198207216225234243252261"


2
infix 함수 =<<는 (list monad 내) concatMap: 와 동일 f n=show=<<(\(l,r)->[l,r])=<<zip[1..n][n,n-1..1]합니다.
nimi

1
1) 현재 솔루션은 48 바이트입니다. 2) 당신은 n안으로 들어갈 수 있습니다 [1..n]: 온라인으로 사용해보십시오!
Laikoni

1) Dang off-by-one errors ... 2) 좋은 전화!
Dan Ambrogio

3

Pyth, 7 바이트

jksC_BS

온라인으로 사용해보십시오 : 데모

설명:

jksC_BSQ   implicit Q (=input number) at the end
      SQ   create the range [1, ..., Q]
    _B     bifurcate by inversion, this gives [[1, ..., Q], [Q, ..., 1]]
  sC       zip and flatten result
jk         join to a string


3

펄 6 , 20 바이트

{[~] 1..*Z~($_...1)}

그것을 테스트

100000 의 입력으로 출력 컴파일 및 인쇄를 포함하여 약 10 초가 걸립니다.

넓히는:

{                # bare block lambda with implicit parameter 「$_」

  [~]            # reduce using concatenation operator 「&infix:«~»」
                 # (shorter than 「join '',」)

    1 .. *       # Range from 1 to infinity

    Z~           # zip using concatenation operator

    ( $_ ... 1 ) # deduced sequence starting at the input
                 # going down to 1
}

Z~필요 ~그렇지 않으면 공간과 캐릭터 라인 화한다리스트 목록을 생성하기 때문이다.

Z입력 목록이 모두 소진되면 중지 되므로 범위는 1에서 시작하여 제한 할 필요가 없습니다 .
이것은 2 바이트를 절약합니다 (다음에 공백이 필요합니다 $_)


3

자바 61 바이트

(int n)->{for(int i=0;i<n;System.out.print(i+1+""+(n-i++)));}

2
또한 PPCG에 오신 것을 환영합니다! :)
Stewie Griffin

익명의 기능을 허용하므로 (int n)->{//for loop}여기에서 작동해야합니다.
Nathan Merrill

더 낫습니까?
cheemcheem

2
네! System.out.print()for 루프의 마지막 문장에 잠재적으로 넣을 수 는 있지만 i두 번 사용하고 있기 때문에 복잡 합니다 (표현식에서 증분해야 함).
Nathan Merrill

나는 루프 안에 인쇄물을 넣고 가능한 마지막 장소에서 i를 증가시킨 다음 테스트 사례로 확인하여 작동하는지 확인했습니다. @NathanMerrill
cheemcheem

3

젤리 , 5 바이트

RṚĖVV

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

작동 원리

RṚĖVV  Main link. Argument: n

R      Range; yield [1, ..., n].
 Ṛ     Reverse; yield [n, ..., 1].
  Ė    Enumerate; yield [[1, n], ..., [n, 1]].
   V   Eval; convert each flat array to a string, interpret it as a Jelly program,
       and yield the output. This concatenates the integers in each pair, yielding
       a flat array of integers
    V  Repeat the previous step, concatenating the intgegers from before.


2

클로저, 61 바이트

#(let[a(range 1(+ 1 %))](apply str(interleave a(reverse a))))

말 그대로 질문을합니다. 나는 덜 사소한 해결책으로도 능가 할 수 있다고 생각합니다.

온라인으로보십시오


2

아세토 , 25 22 바이트

)&
pX`=
(pl0
id@z
r}Z)

설명:

정수를 읽고 두 스택에 넣습니다.

id
r}

하나는 range_up ( Z) 을 호출 하고 다른 하나는 range_down ( ) 을 호출 z한 다음 나중에이 장소로 돌아올 수 있도록 캐치 마크를 설정합니다.

  @z
  Z)

그런 다음 현재 스택이 비어 있는지 확인한 다음 종료되면 종료합니다.

 X`=
  l0

그렇지 않으면 두 스택에서 인쇄하고 캐치 마크로 되돌아갑니다.

)&
p
(p

2

R, 41 바이트

pryr::f(for(i in 1:x){cat(i);cat(x-i+1)})

pryr::f()하나의 입력을받는 함수를 만듭니다. 의 1:x각 요소 1:x와 함께 각 요소를 반복 하여 인쇄합니다 x:1. STDOUT으로 인쇄합니다.


+1,pryr
shadowtalker

@ ssdecontrol function(x):)의 거의 스테이플 교체 :)
JAD


2

MATL, 13 11 9 바이트

@Luis 덕분에 2 바이트 절약

:tPv1eVXz

MATL Online 에서 사용해보십시오

설명

        % Implicitly grab input as a number, N
:       % Create an array from 1..N
tP      % Create a reversed copy
v       % Vertically concatenate the two
1e      % Reshape it into a row vector
V       % Convert to a string
Xz      % Remove whitespace and implicitly display

@LuisMendo 아! 공백을 제거했지만 찾을 수없는 기능이 있다고 생각했습니다. 감사!
Suever

2

PHP, 36 35 29 바이트

for(;$argn;)echo++$i,$argn--;

Jörg Hülsermann 덕분에 1 바이트를 절약했습니다.
Christoph 덕분에 6 바이트를 절약했습니다.


3
음 ... for(;$argn;)echo++$i,$argn--;?
Christoph

2

스칼라, 43 바이트

최고는 아니지만 첫 번째 코드 골프입니다.

n=>1.to(n).foldLeft("")((s,x)=>s+x+(n-x+1))

2

V , 20 바이트

ywo1@"­ñykPjñkògJ

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

설명:

yw                    ' Copy the input number (for looping later)
  o1                 ' Insert a 1 under the input (on a newline)
     @"               ' [Copy register] number of times
       ­ñ      ñ       ' Do the thing inside of this loop
        ykP           ' Copy the current line and line above it, and paste above both
           j        ' decrement the current (top) number, and increment the one below
               k      ' Go to the top line
                ògJ   ' recursively join all of the lines

2

Cubix , 17 바이트

....1I>sO)su.@?(O

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

배양 :

    . .
    . .
1 I > s O ) s u
. @ ? ( O . . .
    . .
    . .

을 누르고 1입력 ( I)을 읽은 다음 스택의 상단을 바꾸고, 출력을 늘리고, 스왑하고, 스택의 상단을 출력하고, 감소하고, 스택의 상단이 0이면 중지하는 루프에 들어갑니다.



2

MathGolf , 5 바이트

{îkï-

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

설명:

{      Run a for loop over implicit input
 î     Push 1 based index of loop
  k    Push inputted number
   ï-  Subtract 0 based index of loop
       Implicitly output all this joined together

1
나는이 같은 결과를 얻을 길이 5의 13 개 프로그램을 찾을 수있었습니다 : ╒{ïí,, ╒{ïk,, ╒{íï-, ╒{kï-, ╒{┐í,, ╒{┐k,, ╒x{î\ , {îïí,, {îïk,, {îíï-, {îkï-, {î┐í,, {î┐k,. 그러나 길이가 4 이하인 프로그램을 찾지 못했습니다. 전체 검색을 수행하지는 않았지만 MathGolf에 5 바이트가 최적 일 가능성이 큽니다.
maxb


2

Mouse-2002 , 32 30 바이트

-2가 (z.^ ... )아니라 조건을 루프 시작으로 이동(... z.0>^)

?n:n.z:(z.^a.1+a:a.!z.!z.1-z:)

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

설명:

?n:                                 ~ get input and store in n
   n.z:                             ~ copy n into z
       (z.^                         ~ stop if z equals 0
           a.1+a:                   ~ add 1 to a
                 a.!                ~ print a
                    z.!             ~ print z
                       z.1-z:)      ~ substract 1 from z

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.