첫 번째, 마지막 및 그 사이의 모든 것


33

두 개의 정수가 주어지면 두 개의 정수를 출력 한 다음 그 사이의 범위를 (둘 다 제외) 출력하십시오.

범위의 순서는 입력과 동일해야합니다.

예 :

 Input        Output
 0,  5   ->   [0, 5, 1, 2, 3, 4]
-3,  8   ->   [-3, 8, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7]
 4,  4   ->   [4, 4]
 4,  5   ->   [4, 5]
 8,  2   ->   [8, 2, 7, 6, 5, 4, 3]
-2, -7   ->   [-2, -7, -3, -4, -5, -6]

미리 주문한 순서대로 입력을받을 수없는 것 같습니까?
Kevin Cruijssen

@KevinCruijssen, 아니오, 출력 순서는 입력 순서에 따라 다릅니다
TFeld

@StewieGriffin, 출력 순서는 입력과 동일해야합니다
TFeld

출력 형식으로 허용? 개행에 주목
Luis Mendo

2
@KevinCruijssen 합리적인 I / O가 허용됩니다.
TFeld

답변:





10

Python 2 (Cython) , 36 35 바이트

lambda x:x+range(*x,-cmp(*x)|1)[1:]

1 바이트를 골라내는 @nwellnhof에게 감사드립니다!

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


파이썬 2 , 37 바이트

lambda x:x+range(*x+[-cmp(*x)|1])[1:]

CPython으로의 포트를위한 @JonasAusevicius에게 감사합니다!

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


2
이것은 37 바이트에서 표준 Python 2에 적용될 수 있으며, 가장 짧은 대답은 다음과 같습니다 lambda x:x+range(*x+[-cmp(*x)|1])[1:]. 좋은 해결책
Jonas Ausevicius


7

파이썬 2 , 40 바이트

lambda x,y:[x,y]+range(x,y,-(y<x)|1)[1:]

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


정말 좋아 -(y<x)|1합니다. 매우 시원하지만 왜 작동하는지 알 수 없습니다! 당신이 그것을 설명 할 수 있습니까?
ElPedro

2
@ElPedro 기본적으로 엄격히 미만 y<x인지 확인 하고 그렇지 않은 경우 반환 합니다 . 그런 다음 단항 이 적용 되어 and 로 변환 됩니다 . 마지막 단계는이 숫자를 비트 단위로 또는로하는 것입니다 . 이 분명히 잎 ( ) 영향을받지 않고, 또한 잎 ( 영향을받지 않는 ()의 부호 비트는 이 같은 유지, 그래서 설정). 그러나, 변환 수행 에를 그 때문에, 사용 a 나에 대해 불평하지 않는다 의 . yxTrueFalse-True-1False0110b1-1-0b1-101rangestep0
Outgolfer Erik

그것은 정말 시원하고 매우 영리합니다. 내가 두 번 투표 할 수 있다면 설명해 주셔서 감사합니다.
ElPedro

6

파이썬 3, 64 62 51 바이트

lambda a,b:[a,b]+[*range(a+1,b)]+[*range(a-1,b,-1)]

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

파이썬 2, 58 45 바이트

lambda a,b:[a,b]+range(a+1,b)+range(a-1,b,-1)

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


2
빈 목록이 잘못되었으므로 a<=b and 두 답변 모두에서 답변을 제거 할 수 있습니다.
TFeld

+대신 사용할 수도 있습니다or
TFeld

@TFeld 감사합니다
Jonas Ausevicius

Python 3에서 47 바이트까지 :lambda a,b:[a,b,*range(a+1,b),*range(a-1,b,-1)]
mypetlion


6

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

로 입력을 (a)(b)받습니다.

a=>g=(b,c=b)=>(b+=b<a|-(b>a))-a?[...g(b,c),b]:[a,c]

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

댓글

a =>                // main function, taking a
  g = (             // g = recursive function
    b,              //     taking b
    c = b           // we save a backup of the original value of b into c
  ) =>              //
    (b +=           // add to b:
      b < a |       //   +1 if b is less than a
      -(b > a)      //   -1 if b is greater than a
    )               //   (or 0 if b = a)
    - a ?           // if the updated value of b is not equal to a:
      [             //   generate a new array:
        ...g(b, c), //     prepend all values generated by a recursive call
        b           //     append the current value of b
      ]             //
    :               // else:
      [a, c]        //   stop recursion and return the first 2 values: a and c

6

파이썬 2 , 47 41 40 바이트

lambda a,b:[a,b]+range(a,b,a<b or-1)[1:]

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

여기에 많은 다른 파이썬 답변이 게시되었습니다.

GB 덕분에 -6 바이트


유효하지 않은 경우 빈 범위를 이용하는 것은 정방향 또는 역방향 목록을 처리하는 현명한 방법입니다. 나는 매우 유용하고 알기 좋은 요령임을 알 수 있습니다.
akozi

2
단일 범위를 사용하는 41 바이트 : range (a, b, (a <b) * 2-1)
GB

a<b or-1세 번째 범위 매개 변수보다 짧습니다. 내가 가진 가장 짧은 것은lambda x,y:[x,y]+range(x+(x<y or-1),y,x<y or-1)
mbomb007

5

자바 10, 109 108 104 102 93 62 바이트

공백으로 구분 된 문자열 사용 :

b->a->{var r=a+" "+b;for(;a<b?++a<b:--a>b;)r+=" "+a;return r;}

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

목록 사용하기 :

b->a->{var r=new java.util.Stack();for(r.add(a),r.add(b);a<b?++a<b:--a>b;)r.add(a);return r;}

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

( a<b?++a<b:--a>b일 수 ++a<b||(a-=2)>b동일한 바이트 카운트 : String 을 온라인으로 시도 하거나 List를 온라인으로 시도하십시오 .)


이전 ( 109 108 104 (102) 어레이를 이용하여 101 바이트) 답 :

a->b->{int s=a<b?1:-1,i=a!=b?(b-a)*s+1:2,r[]=new int[i];for(r[0]=a,r[1]=b;i>2;)r[--i]=b-=s;return r;}

@nwellnhof 덕분에 -7 바이트 .

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

설명:

a->b->{                // Method with 2 int parameters & int-array return-type
  int s=               //  Step integer, starting at:
        a<b?1          //   1 if the first input is smaller than the second
        :-1;           //   -1 otherwise
      i=               //  Array-index integer, starting at:
        a!=b?          //   If the inputs aren't equal:
         (b-a)*s+1     //    Set it to the absolute difference + 1
        :              //   Else:
         2,            //    Set it to 2
      r[]=new int[i];  //  Result-array of that size
  for(r[0]=a,          //  Fill the first value with the first input
      r[1]=b;          //  And the second value with the second input
      i>2;)            //  Loop `i` downwards in the range [`i`,2):
    r[--i]=            //   Decrease `i` by 1 first with `--i`
                       //   Set the `i`'th array-value to:
           b-=s;       //    If the step integer is 1: decrease `b` by 1
                       //    If the step integer is -1: increase `b` by 1
                       //    And set the array-value to this modified `b`
  return r;}           //  Return the result-array

Java 표준 라이브러리에 정수 범위를 만들기위한 것이 있습니까? 아니면 사용하기에 너무 장황합니까?
OUurous

Οurous @ 너무 자세한 참이다 : a->b->{var L=java.util.stream.IntStream.range(a,b).boxed().collect(java.util.Collectors.toList());L.add(0,b);L.add(0,a);return L;}(130 바이트)
케빈 Cruijssen

Java 8 또는 Java 10입니까? "var"때문에 ^^ '
Neyt

1
@Neyt Ah 고정. 아래 배열이있는 초기 버전은을 사용하지 않았으므로 var일반적으로 8을 사용 var하고 10을 사용 하는 버전 ( String.repeat11은 11을 사용하는 버전)을 사용 합니다. :) List 및 String 응답을 추가 한 후 업데이트하지 않았습니다. 지금 수정해야합니다. 감사.
Kevin Cruijssen

5

APL (Dyalog Extended) , 5 바이트

익명의 접사 기능.

,,…~,

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

, 첫 번째와 마지막 (논쟁의 연결)

, 및 (점등.에 연결됨)

 범위

~ 없이

, 첫 번째와 마지막 (논쟁의 연결)


좋아, 이제부터 당신은 모든 골프에 이것을 사용할 것이라고 생각합니까?
Zacharý

@ Zacharý 코드가 상당히 짧거나 더 단순한 경우에만 가능합니다 .
Adám



4

J , 26 바이트

,,[|.@]^:(>{.)<.+1}.i.@|@-

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

설명:

이완 동사 (왼쪽 및 오른쪽 인수 사용)

                         -    subtracts the arguments
                       |@     and finds the absolute value
                    i.@       and makes a list 0..absolute difference
                 1}.          drops the fist element
                +             adds to the entire list
              <.              the smaller of the arguments
   |.@]                       reverses the list
       ^:                     only if
  [                           the left argument
         (>{.)                is greater than the first item of the list
 ,                            appends the list to
,                             the right argument appended to the left one

1
,,[:}.@}:<.+i.@-@(+*)@-23 바이트의 경우 상대 인수 순서에 특별한 대소 문자가 없습니다 (대신 signum 안에 숨겨져 있습니다 *). 나는 이것이 20 세 미만으로 떨어질 수 있다고 생각하지만 피곤합니다.
요나

@Jonah 감사합니다! Btw FrownyFrog의 솔루션은 내 것보다 낫기 때문에 더 이상 골프를 타지 않을 것입니다.
Galen Ivanov


4

J , 13 바이트

,,<.+i.@-~-.=

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

     i.@-~       range [0 .. |difference|-1], reverse if the difference is positive
          -.=    remove the zero (either "=" is 0 or there’s nothing to remove)
  <.+            to each element add the smaller of the args
,,               prepend args

좋은 해결책! 나는 i.부정적인 주장으로 완전히 잊어 버렸습니다 .
Galen Ivanov

1
이것은 화려하다!
요나

3

배치, 107 바이트

@echo %1
@echo %2
@for %%s in (1 -1)do @for /l %%i in (%1,%%s,%2)do @if %1 neq %%i if %%i neq %2 echo %%i

입력을 명령 행 인수로 사용합니다. 설명:

@echo %1
@echo %2

두 정수를 출력합니다.

@for %%s in (1 -1)do

오름차순 및 내림차순 범위를 모두 시도하십시오.

@for /l %%i in (%1,%%s,%2)do

포괄적 인 범위를 반복합니다.

@if %1 neq %%i if %%i neq %2

두 정수를 제외하십시오.

echo %%i

현재 값을 출력합니다.


3

Pyth , 5 바이트

+QtrF

입력은 두 요소로 구성된 목록 [input 1, input 2]입니다. 여기 에서 온라인으로 시도 하거나 모든 테스트 사례를 한 번에 확인 하십시오 .

+QtrFQ   Implicit: Q=eval(input())
         Trailing Q inferred
   rFQ   Generate range [input 1 - input 2)
  t      Discard first element
+Q       Prepend Q

사용 F대신에 .*이 요소 목록에 대한 것은 내가 여기에에서 사용하는 절대적 것이라는 화려한 트릭이다.
hakr14






3

PHP (102 바이트)

function t($a,$b){count($r=range($a,$b))>1?array_splice($r,1,0,array_pop($r)):$r=[$a,$b];print_r($r);}

모래 상자

불행히도 (골프의 경우) PHP는 다소 장황한 함수 이름을 사용하여 길이에 많은 기여를합니다. 그러나 기본 아이디어는 범위를 만든 다음 마지막 요소를 튀어 오프셋 1에서 다시 스티치하는 것입니다. 예를 4,4들어 count($r=range($a,$b))>1?...:$r=[$a,$b];꽤 많은 추가 요소 를 추가 해야 했고 불행히도 array_splice()참조로 몇 가지 더 나에게 맞았습니다. 바이트 ( $r= and a ;). 그 "가장자리 사건"때문에, 롤.

어쨌든 즐기십시오!


나는 이것이 코드 골프에 대한 올바른 접근법이라고 생각하지 않습니다. 이것을 확인하십시오 function t($a,$b){$o=array($a,$b);for($i=$a+1;$i<$b;$i++)$o[]=$i;print_r($o);}
th3pirat3

또는 이와 같은 것function t($a,$b){echo $a.$b;for($i=$a+1;$i<$b;$i++)echo $i};
th3pirat3

1
함수 여야하고 배열을 출력해야합니다. 당신이 더 나은 답변을 가지고 있다면 그것을 게시 환영합니다.
ArtisticPhoenix

편집했습니다. 유효한 제출입니까? 새로운 답으로 쓰시겠습니까?
th3pirat3

그건 전적으로 당신에게 달려 있습니다, 저는 그냥 루프없이하고 싶었습니다 ... lol
ArtisticPhoenix

3

클로저 , 61 바이트

(fn[[a b]](def s(if(> a b)-1 1))(list* a b(range(+ a s)b s)))

2- 벡터를 입력으로 받아서 목록을 반환하는 익명 함수입니다.

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

설명

(fn [[a b]] ; An anonymous function that accepts a 2-vector as input, and destructures it to a and b
  (def s (if (> a b) -1 1)) ; If a > b assigns -1 to s and assigns 1 to s otherwise. This determines the order of the elements of the output list.
  (list* a b ; Creates a list with a and b as the first two elements. The remaining elements will be appended from the following range:
    (range (+ a s) b s))) ; A range starting at a+s and ending at b with step s


3

TI-BASIC, 35 34 바이트

Misha Lavrov 에서 -1 바이트

Prompt A,B
Disp A,B
cos(π(A>B
For(I,A+Ans,B-Ans,Ans
Disp I
End

2
로 교체 1-2(A>B하여 하나 더 바이트 cos(π(A>B.
Misha Lavrov

@MishaLavrov은 seq(입력에 대한 것없는 작업 A하고 B있는 같은 불행하게도 :(
kamoroso94

사실-의 인수를 생략 seq(했기 때문에 더 이상 더 작다고 확신하지 않습니다. 그래도 cos(트릭이 도움이 될 것입니다.
Misha Lavrov

2

, 15 바이트

IE²NI…⊕θηI⮌…⊕ηθ

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

IE²N

입력을 별도의 줄에 인쇄하십시오.

I…⊕θη

오름차순 범위를 인쇄하십시오 (있는 경우).

I⮌…⊕ηθ

역방향 오름차순 역방향 범위를 인쇄하십시오 (있는 경우).


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