ครั้งแรกที่ผ่านมาและทุกอย่างระหว่าง


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

คือนี้รูปแบบการออกยอมรับ? หมายเหตุ newline
Luis Mendo

2
@KevinCruijssen I / O ที่เหมาะสมเป็นที่ยอมรับ
TFeld

คำตอบ:


14

R , 39 33 30 ไบต์

c(a<-scan(),setdiff(a:a[2],a))

ลองออนไลน์!

ขอบคุณสำหรับการบันทึกไบต์ไปยังผู้ใช้ 2390246 และ J.Doe


คุณสามารถบันทึกไม่กี่ไบต์โดยการป้อนข้อมูลเป็นเวกเตอร์แทนที่จะเป็นจำนวนเต็มสองแยก
user2390246

ใช่มันสมเหตุสมผลแล้วจริงๆแล้วมันจะสั้นกว่าในฐานะโปรแกรมเต็มรูปแบบมากกว่าฟังก์ชั่น
คิริลล์ลิตร

คุณสามารถใช้ความจริงที่:ผู้ปฏิบัติงานใช้องค์ประกอบแรกของทั้งสองอาร์กิวเมนต์เป็นเวลา30 ไบต์
J.Doe



10

Python 2 (Cython) , 36 35 bytes

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

ขอบคุณ @nwellnhof สำหรับการตีกอล์ฟ 1 ไบต์!

ลองออนไลน์!


Python 2 , 37 ไบต์

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

ขอบคุณ @JonasAusevicius สำหรับพอร์ตไปยัง CPython!

ลองออนไลน์!


2
นี้สามารถนำไปใช้กับมาตรฐานหลาม 2 ที่ 37 ไบต์ทำให้มันเป็นคำตอบที่สั้น ๆlambda x:x+range(*x+[-cmp(*x)|1])[1:]: วิธีแก้ปัญหาที่ดี
Jonas Ausevicius


7

Python 2 , 40 ไบต์

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

ลองออนไลน์!


ชอบ-(y<x)|1มาก ๆ เจ๋งมาก แต่ฉันคิดไม่ออกว่าทำไมมันถึงได้ผล! โอกาสใดที่คุณสามารถอธิบายได้
ElPedro

2
@ElPedro โดยทั่วไปy<xตรวจสอบว่าyน้อยกว่าอย่างเคร่งครัดxและส่งกลับTrueถ้ามันเป็นFalseอย่างอื่น หลังจากนั้นเอก-ถูกนำไปใช้มันซึ่งแปลงTrueไป-1และจะFalse 0ขั้นตอนสุดท้ายคือการ OR 1ระดับบิตจำนวนนี้กับ เห็นได้ชัดว่าใบนี้1( 0b1) ไม่ได้รับผลกระทบและยังทิ้ง-1( -0b1) ไม่ได้รับผลกระทบ (บิตเครื่องหมายของการ-1ตั้งค่าดังนั้นจึงถูกเก็บไว้เช่นนี้) แต่จะเปลี่ยน0ไป1เพื่อให้rangeไม่บ่นเกี่ยวกับฉันใช้ของstep 0
Erik the Outgolfer

นั่นเจ๋งมากและฉลาดมาก ถ้าฉันสามารถโหวตได้สองครั้งฉันก็ทำได้ ขอบคุณมากสำหรับคำอธิบาย
ElPedro

6

Python 3, 64 62 51 ไบต์

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

ลองออนไลน์!

Python 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 bytes:lambda a,b:[a,b,*range(a+1,b),*range(a-1,b,-1)]
mypetlion


6

JavaScript (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

Python 2 , 47 41 40 ไบต์

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

ลองออนไลน์!

นี่คือของฉันตอนนี้ที่โพสต์คำตอบหลามอื่น ๆ จำนวนมากได้รับการโพสต์

-6 ไบต์ขอบคุณ GB


การใช้ประโยชน์จากช่วงที่ว่างเมื่อไม่ถูกต้องเป็นวิธีที่ชาญฉลาดในการจัดการกับรายการไปข้างหน้าหรือข้างหลัง ฉันเห็นว่าการมีประโยชน์มากและเป็นเคล็ดลับที่ควรรู้ที่มีอยู่
akozi

2
41 ไบต์ใช้ช่วงเดียว: ช่วง (a, b, (a <b) * 2-1)
GB

a<b or-1สั้นกว่าสำหรับพารามิเตอร์ช่วงที่ 3 สั้นที่สุดที่ฉันได้รับคือlambda x,y:[x,y]+range(x+(x<y or-1),y,x<y or-1)
mbomb007

5

Java 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จำนวนไบต์เดียวกันได้: ลองแบบออนไลน์สำหรับสตริงหรือลองแบบออนไลน์สำหรับรายการ )


คำตอบเก่า ( 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;}

-7 ไบต์ขอบคุณที่@nwellnhof

ลองออนไลน์

คำอธิบาย:

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 สำหรับการทำช่วงของจำนวนเต็ม? หรือมันจะใช้อย่างละเอียดเกินไป?
Οurous

@ Οurousมัน verbose เกินไปจริง ๆ : 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 bytes)
Kevin Cruijssen

มันคือ Java 8 หรือ Java 10 หรือไม่? เนื่องจาก "var" ^^ '
Neyt

1
@Neyt Ah แก้ไขแล้ว เวอร์ชันเริ่มต้นของฉันที่มีอาร์เรย์ด้านล่างไม่ได้ใช้varซึ่งเป็นสาเหตุที่ฉันมักจะใส่ที่ 8 และรุ่นที่ใช้varเป็น 10 (และรุ่นที่ใช้String.repeatเป็น 11) :) ลืมที่จะอัปเดตหลังจากเพิ่มคำตอบรายการและสตริงที่ควรได้รับการแก้ไขในขณะนี้ ขอบคุณ
Kevin Cruijssen

5

APL (ขยาย Dyalog) 5 ไบต์

ฟังก์ชั่นมัดไม่ระบุชื่อ

,,…~,

ลองออนไลน์!

, ครั้งแรกและครั้งสุดท้าย (สว่าง. การต่อกันของข้อโต้แย้ง)

, และ (จุดเชื่อมต่อกับ)

 ช่วง

~ ไม่มี

, ครั้งแรกและครั้งสุดท้าย (สว่าง. การต่อกันของข้อโต้แย้ง)


เยี่ยมมากฉันคิดว่าคุณจะใช้มันเพื่อเล่นกอล์ฟของคุณต่อจากนี้ไปหรือไม่
Zacharý

@ รีนอาจจะเฉพาะในกรณีที่รหัสเป็นอย่างมีนัยสำคัญสั้นหรือง่าย
Adám



4

J , 26 ไบต์

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

ลองออนไลน์!

คำอธิบาย:

คำกริยา dyadic (ใช้อาร์กิวเมนต์ซ้ายและขวา)

                         -    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

@Jonah ขอบคุณ! วิธีแก้ปัญหาของ Btw FrownyFrog นั้นดีกว่าของฉันดังนั้นฉันจะไม่ไปเล่นกอล์ฟอีกต่อไป
Galen Ivanov

4

อ็อกเทฟ 45 ไบต์

@(a,b)[a b linspace(a,b,(t=abs(a-b))+1)(2:t)]

ลองออนไลน์!


ถ้าช่วงแรกมีขนาดใหญ่กว่าช่วงที่สองจะต้องลดช่วง
TFeld

โอ้ฉันไม่สามารถอ่าน
หลุยส์ Mendo

ฉันสิ้นสุดการเปลี่ยนภาษา
Luis Mendo

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
นี่คือรูปหล่อ!
Jonah

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แทน.*รายการ 2 องค์ประกอบเป็นเคล็ดลับที่ยอดเยี่ยมที่ฉันจะใช้จากที่นี่ใน
hakr14




3

Python 2 , 52 47 41 ไบต์

lambda i,j:[i,j]+range(i,j,(i<j)*2-1)[1:]

ลองออนไลน์!

-5 ด้วย @JoKing ขอบคุณ

-6 โดยแบ่งองค์ประกอบแรกออกจากช่วง (ความคิดที่ถูกขโมยจากและด้วยเครดิตถึง @TFeld)

รุ่นที่ไม่ใช่แลมบ์ดา ...

Python 2 , 51 49 47 ไบต์

i,j=input();print[i,j]+range(i,j,(i<j)*2-1)[1:]

ลองออนไลน์!

-2 ด้วยขอบคุณ @JoKing


3

APL (Dyalog Classic) , 29 ไบต์

{⍺,⍵,(⌽⍣(⍺>⍵))(⍺⌊⍵)+¯1↓⍳|⍺-⍵}

ลองออนไลน์!

พอร์ตของJโซลูชันของฉัน


ว้าวฉันประหลาดใจว่ามันนานมากสำหรับงานที่ดูเหมือนง่าย
Quintec

@Quintec อาจเป็นไปได้ที่จะเล่นกอล์ฟหรืออัลกอริทึมอื่นอาจทำให้ได้คำตอบที่สั้นกว่ามาก
Galen Ivanov

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);}

Sandbox

น่าเสียดาย (สำหรับกอล์ฟ) 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

Clojure 61 ไบต์

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

ฟังก์ชั่นไม่ระบุชื่อที่ใช้ 2-vector เป็นอินพุตและส่งคืนรายการ

ลองออนไลน์!

คำอธิบาย

(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 ไบต์

-1 ไบต์จากMisha Lavrov

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.