พิมพ์หนังสือเล่มเล็ก


39

การอ่านหนังสือเป็นเรื่องง่าย แต่การพิมพ์หนังสืออาจเป็นเรื่องยาก เมื่อพิมพ์หนังสือเล่มเล็กเครื่องพิมพ์จะต้องจัดเรียงหน้ากระดาษในลักษณะที่แน่นอนเพื่อให้อ่านจากซ้ายไปขวา วิธีการนี้ทำได้โดยใช้รูปแบบดังต่อไปนี้

n, 1, 2, n-1, n-2, 3, 4, n-3, n-4, 5, 6, n-5, n-6, 7, 8, n-7, n-8, 9, 10, n-9, n-10, 11, 12, n-11…

กรณีทดสอบ

หนังสือเล่มเล็ก 4 หน้า: 4, 1, 2, 3

หนังสือเล่มเล็ก 8 หน้า: 8,1,2,7,6,3,4,5

หนังสือเล่มเล็ก 12 หน้า: 12,1,2,11,10,3,4,9,8,5,6,7

หนังสือเล่มเล็ก 16 หน้า: 16,1,2,15,14,3,4,13,12,5,6,11,10,7,8,9

หนังสือเล่มเล็ก 20 หน้า: 20,1,2,19,18,3,4,17,16,5,6,15,14,7,8,13,12,9,10,11

งาน

งานของคุณคือกำหนดจำนวนเต็มnซึ่งเป็นผลคูณของ 4 แสดงอาร์เรย์ของตัวเลขที่สามารถใช้พิมพ์หนังสือnหน้าได้

หมายเหตุ:ตราบใดที่เอาต์พุตสร้างตัวเลขที่ถูกต้องไม่ว่าจะคั่นด้วยช่องว่างเครื่องหมายจุลภาคยัติภังค์หรือวงเล็บวิธีการใดก็ได้ในการไปยังโซลูชันสามารถใช้งานได้

นี่เป็นคำถามเกี่ยวกับดังนั้นคำตอบจะได้คะแนนเป็นไบต์โดยมีจำนวนไบต์น้อยที่สุดที่ชนะ


เรารับประกันได้หรือไม่ว่าการป้อนข้อมูลจะหารด้วย 4 หรือเลขคู่เสมอ คุณช่วยเพิ่มกรณีทดสอบอีกสองสามข้อได้ไหม และยินดีต้อนรับสู่ PPCG :)
Shaggy

8
ยินดีต้อนรับสู่ PPCG และความท้าทายแรกที่ดี! โปรดทราบว่าเราขอแนะนำให้เสนอความท้าทายใหม่ในกล่องทรายก่อนโพสต์
Oliver Ni

1
ข้อมูลที่คุณป้อนต้องเป็นทวีคูณของ 4
tisaconundrum

1
จะดี (แต่อาจไม่สำคัญ) เพื่อรองรับค่าใด ๆ เติมหน้าว่างหากจำเป็น (ความท้าทายอื่นอาจจะใช่หรือไม่)
Barranka

1
เราสามารถกำหนดขอบเขตด้วยช่องว่างเครื่องหมายขีดกลางหรือตัวคั่นอื่นแทนเครื่องหมายจุลภาคได้หรือไม่
TehPers

คำตอบ:



13

JavaScript (ES6), 49 45 ไบต์

บันทึก 4 ไบต์ด้วยความช่วยเหลือจาก@RickHitchcock

f=(n,k=1)=>n<k?[]:[n,k,k+1,n-1,...f(n-2,k+2)]

การสาธิต


Non-recursive, 51 ไบต์

n=>[...Array(n)].map((_,i)=>[2*n-i,,++i][i&2]+1>>1)

การสาธิต


47 bytes: f=(n,a=1)=>n<a+3?[]:[n,a,a+1,n-1,...f(n-2,a+2)]
Rick Hitchcock

1
@RickHitchcock n<aนั้นเพียงพอแล้วดังนั้นจึงบันทึกได้ 4 ไบต์ ขอบคุณ!
Arnauld

6

Python 2, 99 93 88 58 56 55 55 ไบต์

f=input()
for i in range(1,f/2,2):print-~f-i,i,i+1,f-i,

ลองออนไลน์!

-6 ไบต์โดยการลบการเยื้องออกที่ไม่จำเป็นขอบคุณ Oliver Ni

-5 ไบต์โดยการเปลี่ยนเงื่อนไขขอบคุณ Luis Mendo

-30 ไบต์โดยปรับคำแถลงการพิมพ์ให้ดีที่สุดขอบคุณ Arnold Palmer

-2 ไบต์โดยใส่ลูปในหนึ่งบรรทัดขอบคุณ nedla2004

-1 ไบต์ด้วยการทำเวทย์มนตร์ขอบคุณ Mr. Xcoder


ประหยัด bytes โดยใช้ 1 space แทน 4
Oliver Ni

โอ้ใช่ฉันมักจะลืมเรื่องนั้นเสมอ ขอบคุณ
LyricLy

1
-29 ไบต์โดยใช้lambda(แม้ว่าอาจแตกต่างกันพอที่จะรับประกันคำตอบแยกต่างหาก)
notjagan

@notjagan ไปข้างหน้าและโพสต์เองถ้าคุณต้องการ
LyricLy

58 ไบต์โดยเปลี่ยนการพิมพ์ของคุณเพียงเล็กน้อย ตอนนี้มันจะพิมพ์f-i+1,i,i+1,f-iในแต่ละวงแทนการพิมพ์ค่าสุดท้ายตามเงื่อนไข วิธีนี้อนุญาตการลบเริ่มต้นprint f,ด้วย
Arnold Palmer

6

Python 2 , 46 ไบต์

lambda n:map(range(1,n+1).pop,n/4*[-1,0,0,-1])

ลองออนไลน์!

สร้างช่วง[1..n]และปรากฏจากด้านหน้าและด้านหลังในรูปแบบการทำซ้ำback, front, front, back, ...


Python 2 , 49 ไบต์

f=lambda n,k=1:n/k*[0]and[n,k,k+1,n-1]+f(n-2,k+2)

ลองออนไลน์!

สร้างองค์ประกอบ 4 รายการแรกจากนั้นทำต่อเนื่องโดยที่ค่าสูงสุดnลดลง 2 และค่าที่ต่ำกว่าkเพิ่มขึ้น 2


Python 2 , 49 ไบต์

lambda n:[[n-i/2,i/2+1][-i%4/2]for i in range(n)]

ลองออนไลน์!

สร้างค่าi'th ของรายการโดยตรงโดยใช้-i%4/2เป็นบูลีนว่าจะใช้ค่าที่ต่ำกว่าหรือสูงกว่า


6

Python 3 , 68 63 62 ไบต์

by5ไบต์ขอบคุณ@notjagan (การลบช่องว่างและการใช้[*...]แทนlist())

-1 ไบต์ขอบคุณที่@ovs ( *1แทน[:] )

def f(n):r=[*range(1,n+1)];return[r.pop(k%4//2-1)for k in r*1]

ลองออนไลน์!



1
คุณสามารถใช้r*1แทนr[:]สำหรับ -1 byte`
OVS


5

เจลลี่ ,  12  11 ไบต์

ปรับปรุงเป็น 11 ไบต์ "วิธี Combinatorial":

9Bṁ×ḶṚÆ¡‘Œ?

ลองออนไลน์!

อย่างไร?

สิ่งนี้ใช้การคำนวณการเรียงสับเปลี่ยนและระบบหมายเลขแฟคทอเรียล:

9Bṁ×ḶṚÆ¡‘Œ? - Link n                        e.g. 16
9B          - nine in binary                     [1,0,0,1]
  ṁ         - mould like n                       [1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1]
    Ḷ       - lowered range(n)                   [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
   ×        - multiply                           [0,0,0,3,4,0,0,7,8,0,0,11,12,0,0,15]
     Ṛ      - reverse                            [15,0,0,12,11,0,0,8,7,0,0,4,3,0,0,0]
      Æ¡    - convert from factorial base        19621302981954 (=15*15!+12*12!+...+3*3!)
        ‘   - increment                          19621302981955 (we actually wanted 1*0! too)
         Œ? - shortest permutation of natural numbers [1,2,...] that would reside at that
            -   index in a sorted list of all permutations of those same numbers
            -                                    [16,1,2,15,14,3,4,13,12,5,6,11,10,7,8,9]

12 byter ที่ไม่ได้รับการปรับปรุง "ลวดลายการถัก":

RṚ‘żRs2Z€FḊṁ

ลองออนไลน์!

อย่างไร?

นี่เป็นวิธีการง่าย ๆ มันสร้างสองเส้นสอดพวกเขาแล้วจดจ้องปลายหลวม:

RṚ‘żRs2Z€FḊṁ - Link: n                      e.g. 8
R            - range(n)                          [1,2,3,4,5,6,7,8]
 Ṛ           - reverse                           [8,7,6,5,4,3,2,1]
  ‘          - increment                         [9,8,7,6,5,4,3,2]
    R        - range(n)                          [1,2,3,4,5,6,7,8]
   ż         - zip (interleave)                  [[9,1],[8,2],[7,3],[6,4],[5,5],[4,6],[3,7],[2,8]]
     s2      - split into chunks of length 2     [[[9,1],[8,2]],[[7,3],[6,4]],[[5,5],[4,6]],[[3,7],[2,8]]]
       Z€    - transpose €ach (cross-stitch?!)   [[[9,8],[1,2]],[[7,6],[3,4]],[[5,4],[5,6]],[[3,2],[7,8]]]
         F   - flatten                           [9,8,1,2,7,6,3,4,5,4,5,6,3,2,7,8]
          Ḋ  - dequeue (removes excess start)    [8,1,2,7,6,3,4,5,4,5,6,3,2,7,8]
           ṁ - mould like n (removes excess end) [8,1,2,7,6,3,4,5]

นี่คือฉลาด +1
Erik the Outgolfer

4

อ็อกเท43 43ไบต์

พอร์ตของคำตอบนี้ใน C (GCC) สามารถพบได้ที่นี่

@(n)[n-(k=1:2:n/2)+1;k;k+1;n-k](:)';

คำอธิบาย

  1. k=1:2:n/2: สร้างลำดับเชิงเส้นตั้งแต่ 1 ถึงn/2ขั้นตอนที่ 2 โปรดทราบว่านี่จะใช้ในขั้นตอนถัดไปทันที
  2. [n-k+1;k;k+1;n-k]: สร้างเมทริกซ์ 4 แถวโดยที่แถวแรกสร้างลำดับn, n-2, n-4...ลงไปn-(n/2)+2แถวที่สอง1, 3, 5...ขึ้นไปn/2 - 1แถวที่สามคือแถวที่สองที่เพิ่มขึ้น 1 และแถวที่สี่คือแถวแรกที่เพิ่มขึ้น 1
  3. [n-k+1;k;k+1;n-k](:)': นี่จะรวมคอลัมน์ทั้งหมดของเมทริกซ์นี้เข้าด้วยกันจากซ้ายไปขวาเพื่อสร้างเวกเตอร์คอลัมน์เดียวและเราแปลงมันเป็นเวกเตอร์แถวเพื่อให้แสดงง่าย การรวมคอลัมน์เข้าด้วยกันด้วยวิธีนี้สร้างลำดับที่ต้องการอย่างแม่นยำ

โปรดทราบว่านี่เป็นฟังก์ชันที่ไม่ระบุตัวตนดังนั้นคุณสามารถกำหนดให้กับตัวแปรก่อนใช้งานหรือคุณสามารถใช้ansตัวแปรบิวด์อินที่สร้างขึ้นหลังจากสร้างฟังก์ชัน

ลองออนไลน์!


1
สวัสดีฉันคิดว่าคุณสามารถย่อให้สั้นลงได้ด้วยการทำให้ฟังก์ชั่นไม่ระบุชื่อดังนั้นคุณไม่จำเป็นต้องโทรเข้า ดูลิงค์นี้: gnu.org/software/octave/doc/v4.0.3/…
Michthan

1
@Michthan True ตอนแรกฉันทำอย่างนั้นเพราะรหัสเป็นคำสั่งมากกว่าหนึ่งคำ ฉันใช้ crack อีกครั้งเพื่อลบการเรียกไปinputและฉันใช้ซินแทกซ์อีกเล็กน้อยโดยการจัดเก็บเวกเตอร์ที่เพิ่มขึ้นฐานขณะที่ฉันกำลังสร้างแถวแรกและรับข้อมูลnจากฟังก์ชั่นการป้อนตัวจริงที่ไม่ระบุชื่อตัวเอง หนึ่งคำสั่ง ขอบคุณ!
rayryeng - Reinstate Monica

3

R , 48 ไบต์ (ปรับปรุง)

ขอบคุณ @Giuseppe สำหรับ -7 ไบต์!

n=scan();(x=order(1:n%%2))[order(-(n/2+.5-x)^2)]

เคล็ดลับคือว่าเทียบเท่ากับx=1:n;x[order(x%%2)]order(1:n%%2)

ลองออนไลน์!

R , 55 ไบต์ (ดั้งเดิม)

แข็งแรงเล่นกอล์ฟ

n=scan();x=1:n;x=x[order(x%%2)];x[order(-(n/2+.5-x)^2)]

ไม่พอใจกับความคิดเห็น

อ่านnจาก stdin

n=scan()

กำหนดxเป็นลำดับของหน้าจาก 1 nถึง

x=1:n

สั่งซื้อหน้าดังนั้นแม้กระทั่งหน้าก่อนหน้าไม่สม่ำเสมอ

x=x[order(x%%2)]

n/2+.5หน้าการสั่งซื้อในลำดับถัดลงมาด้วยความเคารพไปยังศูนย์กลางของหนังสือเล่มนี้คำนวณโดย

x[order(-(n/2+.5-x)^2)]

ตัวอย่างที่มี 8 หน้า:

  • ศูนย์คือ 4.5;
  • หน้า 1 และ 8 อยู่ไกลที่สุดจากศูนย์กลาง แต่ 8 มาก่อนเพราะ 8 เป็นเลขคู่
  • หน้า 2 และ 7 เป็นจุดที่ไกลที่สุดถัดไปจากจุดศูนย์กลาง แต่ 2 กลับมาก่อนเป็น 2
  • และอื่น ๆ

ลองออนไลน์!


1
ดีวิธีดีกว่าโซลูชันของฉัน (ขโมย)
จูเซปเป้


1
เคล็ดลับคือการสังเกตเห็นว่า(1:n)[order(1:n%%2)]เป็นเช่นเดียวกับorder(1:n%%2)
จูเซปเป้

2

Mathematica, 54 53 45 ไบต์

Join@@Range[#][[(-1)^k{k,-k}]]~Table~{k,#/2}&

คำอธิบาย

Join@@Range[#][[(-1)^k{k,-k}]]~Table~{k,#/2}&  (* Input: # *)
                              ~Table~{k,#/2}   (* Iterate from k=1 to #/2 *)
      Range[#][[            ]]                 (* From {1..#}, take... *)
                      {k,-k}                   (* k-th and negative k-th element *)
                                               (* negative k-th = k-th from the end *)
                (-1)^k                         (* Reversed for odd k *)
Join@@                                         (* Join the result *)



2

Java 8, 84 72 ไบต์

n->{for(int j=0;++j<n;System.out.printf("%d,%d,%d,%d,",n--,j++,j,n--));}

หรือ

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

-12 ไบต์ขอบคุณความคิดเห็นของ@TheLethalCoderในคำตอบ C #

คำตอบเก่า (84 ไบต์):

n->{int r[]=new int[n],i=1,N=n,J=1;for(r[0]=n;i<n;r[i]=-~i++%4<2?J++:--N);return r;}

คำอธิบาย:

ลองที่นี่

n->{                  // Method with integer parameter and no return-type
  for(int j=0;++j<n;  //  Loop from 1 to `n` (exclusive)
    System.out.printf("%d,%d,%d,%d,",n--,j++,j,n--)
                      //   Print four numbers simultaneously
  );                  //  End of loop
}                     // End of method


1

สวิฟท์ 3 , 74 ไบต์

func g(f:Int){for i in stride(from:1,to:f/2,by:2){print(f-i+1,i,i+1,f-i)}}

ลองออนไลน์!

Swift 3 , 60 bytes

{f in stride(from:1,to:f/2,by:2).map{(f-$0+1,$0,$0+1,f-$0)}}

ด้วยเหตุผลบางอย่างสิ่งนี้ไม่ทำงานในสภาพแวดล้อมออนไลน์ใด ๆ ที่ฉันได้ลองมา หากคุณต้องการที่จะทดสอบมันใส่var g=ในด้านหน้าของมันและเรียกมันด้วยprint(g(12))ในXcode (เด็ก)

นี่คือภาพหลังจากที่ฉันวิ่งไปในสนามเด็กเล่น Xcode เวอร์ชั่น 8.3.1 (Running Swift 3.1):

ป้อนคำอธิบายรูปภาพที่นี่


1

QBICขนาด 25 ไบต์

[1,:/2,2|?b-a+1,a,1+a,b-a

แม้ว่าอินพุตจะเป็น% 4 แต่จังหวะที่แท้จริงคือ 2-based

คำอธิบาย

[1,:/2,2|   FOR ( b=1; b <= <input>/2; b=b+2)               
?           PRINT
 b-a+1,     n
 a,         1
 1+a,       2
 b-a        n-1



1

R , 64 60 ไบต์

ทำลายล้างอย่างรุนแรงโดยdjhurio ! คำตอบของเขาสวยมากไปโหวตเลย

n=scan();matrix(c(n-(k=seq(1,n/2,2))+1,k,k+1,n-k),4,,T)[1:n]

พอร์ตของrayryeng คำตอบของคู่

ลองออนไลน์!

โซลูชันดั้งเดิม (64 ไบต์):

f=function(n,l=1:n)`if`(n,c(l[i<-c(n,1,2,n-1)],f(n-4,l[-i])),{})

ฟังก์ชั่นวนซ้ำ

ลองออนไลน์!


ครั้งแรกที่มีคนเคยใช้คำตอบของฉันเป็นแรงบันดาลใจ ขอบคุณ :)
rayryeng - Reinstate Monica

1
มันยากที่จะเอาชนะคุณ แต่ฉันจัดการมันด้วยคำตอบ 55 ไบต์ ( codegolf.stackexchange.com/a/138045/13849 )
djhurio

1

Bash + Perl + Groff + Psutils, 48 ​​ไบต์

perl -nE'say".bp
"x--$_'|groff|psbook>/dev/null

stderrการส่งออกในการแสดง เอาต์พุตมีขยะต่อท้าย

ตัวอย่างการใช้งาน:

$ echo 20 | perl -nE'say".bp
> "x--$_'|groff|psbook>/dev/null
[20] [1] [2] [19] [18] [3] [4] [17] [16] [5] [6] [15] [14] [7] [8] [13] [12] 
[9] [10] [11] Wrote 20 pages, 4787 bytes

0

Pyth , 21 20 ไบต์

sm[hK-QddhdK):1/Q2 2

ชุดทดสอบ

หากอนุญาตให้แสดงผลเป็นรายการซ้อนได้:

Pyth , 20 19 ไบต์

m[hK-QddhdK):1/Q2 2

ชุดทดสอบ


คำอธิบาย

sm [hK-QddhdK): 1 / Q2 2 - โปรแกรมเต็มรูปแบบ

 m: 1 / Q2 2 - แมปช่วง (1, อินพุต () / 2,2) พร้อมตัวแปร d
  [) - สร้างรายการด้วย:
   hK-Qd - อินพุต - d + 1,
        d - d
         hd - d + 1 และ
           K - อินพุต - d
s - ปรับรายการและพิมพ์โดยปริยาย


0

C #, 107 ไบต์

int[]F(int p){var a=new int[p];for(int i=0,q=1;q<p;a[i++]=p--){a[i++]=p--;a[i++]=q++;a[i++]=q++;}return a;}

เก็บสองเคาน์เตอร์หนึ่งเริ่มต้นที่ 1, หนึ่งที่ p ในการวนซ้ำแต่ละครั้งให้เขียนสี่องค์ประกอบและเพียงเพิ่มหรือลดเคาน์เตอร์หลังจากแต่ละรายการ เมื่อเคาน์เตอร์พบกันตรงกลางให้หยุด

int[] F(int p)
{
    var a = new int[p];
    for(int i = 0, q = 1; q < p; a[i++] = p--)
    {
        a[i++] = p--;
        a[i++] = q++;
        a[i++] = q++;
    }
    return a;
}

คุณสามารถบันทึกไม่กี่ไบต์โดยการวางวิธีในผู้รับมอบสิทธิ์ รหัสของคุณจะมีลักษณะดังนี้: p=>{var a=new int[p];for(int i=0,q=1;q<p;a[i++]=p--){a[i++]=p--;a[i++]=q++;a[i++]=q++;}return a;};โดยที่System.Func<int, int[]> f =ไม่มีสิ่งที่รวมอยู่ใน bytecount นอกจากนี้คุณสามารถเพิ่มลิงค์ไปยัง TIO ซึ่งมีประโยชน์มากเมื่อพยายามให้ผู้อื่นลองใช้รหัสของคุณด้วยตัวเอง!
เอียนเอช.

@IanH เมื่อใช้แลมบ์ดาคุณสามารถมองข้ามกึ่งโคลอนที่ต่อท้ายได้
TheLethalCoder

เริ่มต้นqที่0และเพิ่มขึ้นก่อนที่q<p-> ++q<pจากนั้นลบการเพิ่มโพสต์ที่สองเพื่อบันทึกไบต์ ย้ายข้อความสั่งวนรอบสองคำสั่งลงในขั้นตอนสุดท้ายของ for loop เพื่อให้คุณสามารถลบเครื่องหมายปีกกาได้
TheLethalCoder

2
หากจุลภาคต่อท้ายที่ได้รับอนุญาตการทำงานต่อไปนี้สำหรับ 71 p=>{for(int q=0;++q<p;)System.Console.Write(p--+$",{q++},{q},{p--},");}ไบต์ TIO
TheLethalCoder


0

Pyth , 27 24 23 ไบต์

-3 ไบต์โดยการพิมพ์ตลอดแทนที่จะสิ้นสุด

-1 ขอบคุณ Mr. Xcoder

V:1/Q2 2pjd[-QtNNhN-QNk

ลองออนไลน์!

หรือบนคอมไพเลอร์ออนไลน์ / ผู้บริหาร

นี่เป็นโปรแกรมแรกของฉันใน Pyth ดังนั้นอาจมีวิธีที่ดีกว่าที่ฉันไม่รู้

คำอธิบาย

V:1/Q2 2pjd[-QtNNhN-QNk
V:1/Q2 2                   # For N in range(1, Q/2, 2):
        pjd                # print " ".join(...),
           [-QtNNhN-QNk    # The list [n - (N-1), N, N + 1, n - N, ""] (n is input)

ฉันพบการปรับปรุงบางอย่างและตัดสินใจว่าพวกเขาสมควรได้รับคำตอบของตัวเอง
Mr. Xcoder

โดยวิธีการแทนที่FNด้วยVสำหรับ-1 ไบต์
นาย Xcoder

0

C ++ (gcc) , 89 84 68 ไบต์

ในฐานะแลมบ์ดาทั่วไปที่ไม่มีชื่อ nคือ #pages (% 4 == 0) และCเป็นพารามิเตอร์อ้างอิงสำหรับผลลัพธ์คอนเทนเนอร์ที่ว่างเช่นvector<int>( push_backจำเป็นต้องมีเท่านั้น)

[](int n,auto&C){for(int i=0,j=0;i<n;C.push_back(++j%4<2?n--:++i));}

วิธีแก้ปัญหาก่อนหน้า:

#define P C.push_back(
[](int n,auto&C){for(int i=0;i<n;P n--),P++i),P++i),P n--));}

ลองออนไลน์!

ungolfed เล็กน้อย:

auto f=
[](int n,auto&C){
 for(int i=0,j=0;
     i<n;
     C.push_back(++j%4<2 ? n-- : ++i));
}

วิธีการแก้ปัญหาก่อนหน้าungolfed เล็กน้อย :

auto f=
[](int n, auto&C){
 for(
  int i=0;
  i<n;
   P n--),
   P++i),
   P++i),
   P n--)
 );
}
;

มันพัฒนาค่อนข้างตรงไปตรงมาและมีบางอย่างเพิ่มประสิทธิภาพเล็กน้อยในการคำนวณ

  • แก้ไข 1: การรวมกันของ arithmetics บันทึก 5 ไบต์
  • แก้ไข 2: หลังจากการรวมเข้าด้วยกันจะรวม 4 ขั้นตอน

การใช้งาน:

std::vector<int> result;
f(n, result);

ตัวแปรการพิมพ์ 77 ไบต์ล้าสมัย

หากคุณยืนยันในการพิมพ์ค่ามีวิธีแก้ไขปัญหานี้:

[](int n,auto&o){for(int i=0;i<n;o<<n--<<' '<<++i<<' '<<++i<<' '<<n--<<' ');}

ที่ไหนที่oคุณต้องการstd::ostreamเช่นstd::cout

การใช้งาน (ถ้าแลมบ์ดาที่ 2 ได้รับมอบหมายให้g):

g(n, std::cout);


0

Lua, 94 ไบต์

สำหรับความท้าทายครั้งนี้ฉันได้วิธีการที่แตกต่างกัน 2 วิธีซึ่งมีทั้ง 94 ไบต์

วิธีที่ 1:

function f(n,i)i=i or 1 return n>i and('%s,%s,%s,%s,%s'):format(n,i,i+1,n-1,f(n-2,i+2))or''end

รหัสความคิดเห็น:

function f(n,i)
  i=i or 1
  -- On the first iteration i will be nil so I'm setting it's value to 1 if it is.

  return n>i and ('%s,%s,%s,%s,%s'):format(n,i,i+1,n-1,f(n-2,i+2)) or ''
  -- Here i return a ternary statement
  -- If n>i is true, it will return a string using string.format() and part of this is recursion
  -- If it's false, it will just return an empty string
end

วิธีที่ 2:

function f(n,i)i=i or 1 return n>i and n..','..i..','..i+1 ..','..n-1 ..','..f(n-2,i+2)or''end

วิธีนี้คล้ายกับวิธีแรก แต่ฉันกลับคืนค่าสตริงที่ต่อกันแทน string.format ()

ในทั้งสองวิธีฉันใช้แนวคิดของ n และฉันเข้าใกล้กันมากขึ้น


0

PHP, 51 + 1 ไบต์

while($i<$k=&$argn)echo$k--,_,++$i,_,++$i,_,$k--,_;

พิมพ์หมายเลขหน้าคั่นด้วยเครื่องหมายขีดล่างด้วยตัวคั่นต่อท้าย
ทำงานเป็นท่อที่มี-nRหรือลองออนไลน์


0

J , 22 ไบต์

($,)_2|.`]\1+],@,.&i.-

ลองออนไลน์!

คำอธิบาย

($,)_2|.`]\1+],@,.&i.-  Input: integer n
             ]          Identity
                     -  Negate
                  &i.   Form the ranges [0, 1, ..., n-1] and [n-1, ..., 1, 0]
                ,.      Interleave
              ,@        Flatten
           1+           Add 1
    _2    \             For each non-overlapping sublist of size 2
        `                 Cycle between these two operations
      |.                    Reverse for the first, third, ...
         ]                  Identity for the second, fourth, ...
  ,                     Flatten
 $                      Reshape to length n
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.