แสดงภูเขาลูกโซ่ที่มีเลขคี่อยู่ด้านบน!


19

บรรทัดแรกทำด้วยceil(n/2)องค์ประกอบที่แต่ละองค์ประกอบคือ:<space><odd-number><space>

บรรทัดที่สองทำด้วยceil(n/2)องค์ประกอบ แต่แต่ละองค์ประกอบมี/ \เพียง

คุณอาจจะสมมติและn >= 0n <= 10

ตัวอย่าง

อินพุต: 3

 1  3
/ \/ \

อินพุต: 10

 1  3  5  7  9
/ \/ \/ \/ \/ \

ตัวอย่างใน Python 3, 103 ไบต์:

lambda a:print("".join([" "+str(i)+" "for i in range(1,a+1,2)]+["\n"]+["/ \\"for i in range(1,a+1,2)]))

รหัสที่สั้นที่สุดเป็นไบต์ชนะ :)


3
คุณสามารถสมมติว่าการป้อนข้อมูลทั้งหมดจะน้อยกว่า 11?
บลู

ใช่อินพุตทั้งหมดจะน้อยกว่า 11!
Sygmei

8
ยินดีต้อนรับสู่เว็บไซต์! ค่าเริ่มต้นของเราสำหรับcode-golfคือนับเป็นไบต์ไม่ใช่ตัวอักษร ถ้าคุณต้องการที่จะแทนที่มันก็เป็นทางเลือกของคุณ นอกจากนี้ผมอยากจะแนะนำSandboxในครั้งต่อไป :)
เอริก Outgolfer

ฉันหมายถึงไบต์ที่คุณพูดถูก! มีการนับไบต์ที่ดีรอบ ๆ ?
Sygmei

1
เราต้องจัดการกับช่องว่างอย่างไร? คุณบอกว่าแต่ละองค์ประกอบนั้น<space><odd-number><space>แต่กรณีทดสอบไม่มีช่องว่างหลังจากเลขคี่สุดท้าย มันเป็นทางเลือกหรือไม่? นอกจากนี้เอาต์พุตสำหรับn=0สองบรรทัดว่าง?
xnor

คำตอบ:


12

05AB1E , 19 15 14 12 ไบต์

05AB1E ใช้การเข้ารหัสCP-1252
ที่บันทึกไว้ 4 ไบต์ขอบคุณที่Adnan
บันทึก 2 ไบต์ด้วยcarusocomputing

ÅÉðìDg…/ \×»

ลองออนไลน์!

คำอธิบาย

ÅÉ               # list of uneven number up to input
  ðì             # prepend a space to each
    Dg           # get length of list
      …/ \       # push the string "/ \"
          ×      # repeat the string length-list times
           »     # join rows by spaces and columns by newlines

นานแค่ไหนมีÏตัวตน ?! นั่นดูเหมือนว่า suuuper มีประโยชน์
Magic Octopus Urn

2
@carusocomputing เป็นเวลานาน: p
Adnan

2
LDÉÏเป็นเช่นเดียวกับÅÉและ„ ýðìสามารถถูกแทนที่ด้วยðì)»:)
Adnan

2
คุณสามารถลบ )มันได้ใช่ไหม
Magic Octopus Urn

3
ÅÉðìDg…/ \×»ใช้Dgแทน¹;îการบันทึกไบต์อื่นเช่นกัน
Magic Octopus Urn

11

Pyke ขนาด 16 ไบต์

S2%idm+dJil*"/ \

ลองที่นี่!

17 ไบต์และยอดเยี่ยมขึ้น

S2%i`~Bd.:il*"/ \

ลองที่นี่!

วิธีนี้ใช้อัลกอริธึมที่ยอดเยี่ยมของ IMHO เพื่อให้แน่ใจว่ามีการจัดเรียงบรรทัดแรกอย่างถูกต้อง

S                 - range(1, input+1)
 2%               -  ^[::2]
   i              -   i = ^
    `             -    str(^)
     ~Bd.:        -     ^.translate("><+-.,[]", " ") <-- awesome bit here
          il      -  len(i)
            *"/ \ - ^ * "/ \"

สิ่งนี้จะแทนที่อักขระทั้งหมดในรายการที่ทำให้เป็นสตริงด้วยช่องว่าง ~Bมีตัวละครทั้งหมดในภาษา Brain **** และนี่เป็นครั้งแรกที่ฉันใช้ตัวแปรนี้

โปรแกรม`~Bd.:ทำสิ่งนี้:

`~Bd.: - input = [1, 3, 5, 7]
`      - str(input)  # stack now ["[1, 3, 5, 7]"]
 ~B    - "><+-.,[]"  # stack now ["[1, 3, 5, 7]", "><+-.,[]"]
   d   - " "         # stack now ["[1, 3, 5, 7]", "><+-.,[]", " "]
    .: - translate() # stack now [" 1  3  5  7 "]

... นี่คือ ... ยอดเยี่ยมแค่ไหน? คุณรู้ว่าคุณเพิ่งชนะ 05AB1E และทุกคนใช่ไหม
Erik the Outgolfer

ฉันลองเยลลี่แล้ว มันจะนานขึ้นอย่างแน่นอน
Erik the Outgolfer

"ฉันใช้ตัวอักษร BF เพื่อเว้นช่องว่างจำนวนเท่ากัน" สิ่งที่คุณไม่เคยคิดว่าคุณจะพูด ...
ETHproductions

มันฉลาดจริงๆ :) ทำได้ดีมาก
Sygmei

@ErikGolfer ーリックゴルファーไม่ตี 05AB1E อีกต่อไป
boboquack

6

Python 2, 63 ไบต์

lambda n:' '.join(n%2*`n`for n in range(n+1))+'\n'+-~n/2*'/ \\'

เคล็ดลับเล็กน้อยสำหรับบรรทัดแรก: มันไม่พิมพ์เลขคู่ แต่ใช้เป็นสตริงว่างซึ่งนำไปสู่การเริ่มต้นพื้นที่ว่าง (0 จะมี) และเว้นวรรคสองครั้งระหว่างตัวเลขโดยไม่มีการแก้ไขใด ๆ ในช่วง ข้อเสียคือพื้นที่ชั้นนำในเลขคู่ n


6

Python 2 3, 67 65 63 60 ไบต์

ไม่มีอะไรบ้าเกินไปที่นี่ฉันคิดว่าส่วนแรกอาจสั้นกว่านี้ได้ แต่ฉันก็ไม่แน่ใจเหมือนกัน ฉันใช้ความจริงที่ว่าในกรณีนี้-~n/2จะใช้งานceilได้

lambda n:-~n//2*' %d '%(*range(1,n+1,2),)+'\n'+-~n//2*'/ \\'

ด้านล่างนี้เป็นโซลูชั่นทางเลือก 61 และ 65 ไบต์ใน Python 2:

lambda n:-~n/2*' %d '%tuple(range(1,n+1,2))+'\n'+-~n/2*'/ \\'
lambda n:' '+'  '.join(map(str,range(1,n+1,2)))+'\n'+-~n/2*'/ \\'

ขอบคุณ Rod สำหรับการบันทึก 2 ไบต์และ Artyer สำหรับการบันทึกไบต์อื่นโดยการสลับรุ่น :)


หากคุณย้ายไปที่ Python 3 คุณสามารถแทนที่%(tuple(...))ด้วย%[*...]แต่คุณต้องทำ-~n//2
Artyer

@Artyer ลองใช้สิ่งนี้ แต่มันทำให้เกิดข้อผิดพลาดจำนวนมาก ฉันคิดว่าฉันจะต้องโยนrangeไปยังรายการเพราะ 3 rangeเป็นเหมือนงูหลาม xrange2
Kade

คุณสามารถวางวงเล็บที่ล้อมรอบtuple()
Rod

คุณสามารถทำได้(*<iterable>,)เพื่อโยน tuple ในหลาม 3 นี้จะช่วยประหยัด 1 ไบต์ แต่หลังจากที่คุณเปิดn/2เข้าไปในn//2หลาม 3.
Artyer

@Rod และ Artyer ขอบคุณมัด! :)
Kade

6

JavaScript (ES6), 55 ไบต์

f=n=>n%2?f(n-1).replace(`
`,` ${n} 
/ \\`):n?f(n-1):`
`
<input type=number min=1 max=10 oninput=o.textContent=f(this.value)><pre id=o>

หมายเหตุช่องว่างที่ท้ายบรรทัดที่สอง


Dangit ฉันคิดว่า.replaceอาจจะดีกว่า แต่ฉันไม่ได้สนใจที่จะตรวจสอบ ...
ETHproductions

คำถามที่ว่า "คุณอาจจะคิดว่า ... "
โซโลมอน Ucko

1
@SolomonUcko HTML ไม่ได้เป็นส่วนหนึ่งของคำตอบ แต่เป็นเพียงการแสดงให้เห็นถึงการทำงานของมัน เช่นนี้อาจ จำกัด ค่าให้อยู่ระหว่าง 1 ถึง 10 เนื่องจากผลลัพธ์จะไม่ถูกต้อง
Neil

ฉันเห็น. คุณจะต้องกำหนดระยะห่างที่ถูกต้องเป็นอย่างอื่น
โซโลมอนอุคโค

5

Python 2, 53 ไบต์

lambda n:" 1  3  5  7  9"[:-~n/2*3]+'\n'+-~n/2*"/ \\"

ใช้ประโยชน์จากข้อ จำกัด n <= 10ในการสร้างบรรทัดบนสุดโดยการตัดส่วนจากสตริงฮาร์ดโค้ด

เอาต์พุตสำหรับ 1 ถึง 10 คือ

 1 
/ \
 1 
/ \
 1  3 
/ \/ \
 1  3 
/ \/ \
 1  3  5 
/ \/ \/ \
 1  3  5 
/ \/ \/ \
 1  3  5  7 
/ \/ \/ \/ \
 1  3  5  7 
/ \/ \/ \/ \
 1  3  5  7  9
/ \/ \/ \/ \/ \
 1  3  5  7  9
/ \/ \/ \/ \/ \

เอาต์พุตสำหรับ 0 คือสองบรรทัดว่าง


5

เป็นกลุ่ม73 59 56 ไบต์

นี่เป็นจำนวน IMO ที่สูงมากสำหรับสิ่งที่ดูเหมือนเป็นปัญหาอย่างง่าย ฉันรู้สึกเหมือนขาดอะไรบางอย่างที่ชัดเจน

caw="/2*2
caw1357911/"
DYp:s;.;/ \\;g
k:s// & /g

ลองออนไลน์!

Unprintables:

^Acaw^R=^R"/2*2      # Transform a number into the next odd number (3->5,4>5)
^[^Acaw1357911^[/^R" # Insert 1357911, delete everything after the number above
DYp:s;.;/ \\;g       # Duplicate the line, replace numbers with / \
k:s// & /g           # On the line above, add spaces around numbers
<trailing newline>

ดีฉันมักจะโหวตเป็นกลุ่ม! อย่างไรก็ตามอักขระที่ไม่สามารถพิมพ์ได้จะนับเป็นไบต์ดังนั้นวิธีนี้จึงเป็น 73 ไบต์ ขอโทษสำหรับเรื่องนั้น!
DJMcMayhem

ฉันมีคำแนะนำบางอย่าง 1) ถ้าคุณใช้ seperator :s;.;/ \\;gแตกต่างกันในคำสั่งแทนของคุณคุณจะไม่จำเป็นต้องหลบหนีทับเพื่อให้คุณสามารถทำ 2) ในคำสั่งทดแทนที่สองของคุณคุณสามารถปล่อยให้การค้นหาว่างเปล่าและมันจะใช้การค้นหาครั้งล่าสุดของคุณ (ซึ่งเกิดขึ้นเพื่อจะเหมือนกัน) นอกจากนี้ยัง&เทียบเท่า\0และสั้นลงหนึ่งไบต์ ดังนั้นคุณจะได้รับ:s// & /g
DJMcMayhem

ขอบคุณ! ฉันหวังว่าจะเห็นคำตอบ V จากคุณเพื่อดูว่าคุณใช้แนวทางที่ต่างกันสำหรับจำนวนไบต์น้อยลงหรือไม่ แต่ก็ไม่เป็นไร! ความคิดเห็นแรกที่ฉันคิดว่าเป็นฟังก์ชั่นของฉันลืมที่จะปรับปรุงลิงค์ลองออนไลน์ ที่สองให้ฉัน 3 ไบต์ดังนั้นขอบคุณ!
nmjcman101

4

Mathematica, 65 ไบต์

" "<>Range[1,#,2]~StringRiffle~"  "<>"
"<>"/ \\"~Table~⌈#/2⌉&

ฟังก์ชั่นไม่ระบุชื่อ รับตัวเลขเป็นอินพุตและส่งคืนสตริงเป็นเอาต์พุต อักขระ Unicode ตามลำดับเป็น U + 2308 เพดานซ้ายสำหรับ\[LeftCeiling]และ U + 2309 \[RightCeiling]ขวาเพดาน


4

WinDbg ขนาด 100 ไบต์

.echo;.for(r$t1=1;@$t1<=2*@$t0+@$t0%2;r$t1=@$t1+2){j@$t1<=@$t0 .printf"\b %d \n",@$t1;.printf"/ \\"}

อินพุตดำเนินการโดยการตั้งค่าใน pseudo-register $t0การป้อนข้อมูลจะทำโดยการตั้งค่าในหลอกทะเบียน

ดูเหมือนว่าจะสั้นที่สุดที่นี่เพียงเพื่อพิมพ์สตริงเนื่องจากมันถูกสร้างขึ้นแทนที่จะพยายามสร้างมันขึ้นมาก่อนและแสดงทุกสิ่ง ฉันมีวิธีแก้ปัญหาที่สั้นกว่านี้หาก WinDbg จะให้ฉันเขียนถึงที่อยู่0จะให้ฉันเขียนไปยังที่อยู่

มันทำงานอย่างไร:

.echo;                                            * Print a new line that'll be deleted
.for(r$t1=1; @$t1 <= 2*@$t0+@$t0%2; r$t1=@$t1+2)  * Enumerate 1 to 4*ceil($t0/2), count by 2
{
    j@$t1<=@$t0                                   * If $t1 <= $t0...
        .printf"\b %d \n",@$t1;                   * ...Print $t1 (and newline for last n)
        .printf"/ \\"                             * ...Else print the / \'s
}

เอาต์พุตสำหรับแต่ละค่าของn:

0:000> .for(r$t0=0;b>@$t0;r$t0=@$t0+1){.printf"\n\nn=%d\n",@$t0; .echo;.for(r$t1=1;@$t1<=2*@$t0+@$t0%2;r$t1=@$t1+2){j@$t1<=@$t0 .printf"\b %d \n",@$t1;.printf"/ \\"}}


n=0



n=1
 1 
/ \

n=2
 1 
/ \

n=3
 1  3 
/ \/ \

n=4
 1  3 
/ \/ \

n=5
 1  3  5 
/ \/ \/ \

n=6
 1  3  5 
/ \/ \/ \

n=7
 1  3  5  7 
/ \/ \/ \/ \

n=8
 1  3  5  7 
/ \/ \/ \/ \

n=9
 1  3  5  7  9 
/ \/ \/ \/ \/ \

n=10
 1  3  5  7  9 
/ \/ \/ \/ \/ \

4

> <> (FISH), 69 60 68 55 ไบต์

5|v&+%1:,2
1->:?!v:
8~v!?l<on$o:*4
a&/o
1->:?!;"\ /"ooo

วางลงในล่ามออนไลน์นี้!

หมายเลข 5 ในบรรทัดแรกคือค่าอินพุตของคุณ (ฮาร์ดโค้ดเป็น 5 แทนที่ด้วย 0-a หรือ i สำหรับอินพุตผู้ใช้)

แก้ไข 1: ย้ายตำแหน่งบรรทัดใหม่ไปยังพื้นที่บรรทัดแรก (ว่างเปล่า) เพื่อบันทึก 9 ไบต์โดยรวมในพื้นที่จากบรรทัดใหม่

แก้ไข 2: ตามที่บันทึกไว้โดยผู้ใช้ 7150406 เอาต์พุตไม่ถูกต้อง (ไม่มีการพิมพ์ช่องว่าง) สิ่งนี้ได้รับการแก้ไขด้วยการสูญเสีย 8 ไบต์

แก้ไข 3: เปลี่ยนแปลงตรรกะอย่างสมบูรณ์ไม่มีการตรวจสอบจุดว่าตัวเลขเป็นเลขคี่ - แทนที่จะใส่ตัวเลขทั้งหมดลงในสแต็กและลบทุก ๆ วินาที Byte บันทึกแล้ว 13!


4

Java, 118 112 Bytes

แก้ไข: บันทึกแล้ว 6 ไบต์ขอบคุณ @peech

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

String M(int n){String o=" ";int i=1;n+=1;for(;i<n;i+=2)o+=i+"  ";o+="\n";for(i=0;i<n/2;i++)o+="/ \\";return o;}

Ungolfed:

public String M(int n)
{
    String o = " ";
    int i=1;
    n += 1;
    for (; i < n;i+=2)
        o += i + "  ";
    o += "\n";
    for (i = 0; i < n/2; i++)
        o += "/ \\";
    return o;  
}

การทดสอบ:

    OddMountains om = new OddMountains();
    System.out.println(om.M(1));
    System.out.println();
    System.out.println(om.M(3));
    System.out.println();
    System.out.println(om.M(5));
    System.out.println();
    System.out.println(om.M(7));
    System.out.println();
    System.out.println(om.M(10));

 1  
/ \

 1  3  
/ \/ \

 1  3  5  
/ \/ \/ \

 1  3  5  7  9  
/ \/ \/ \/ \/ \

Ahhhh คุณเอาชนะฉันไปแล้ว :) ฉันยังต้องการโพสต์คำตอบ Java แต่อย่างใดนี่เป็นคำแนะนำบางอย่างเพื่อกอล์ฟมันบิตเพิ่มเติมได้ที่: คุณไม่จำเป็นที่จะต้องเริ่มต้นในครั้งแรกของคุณสำหรับวงก็อาจมีลักษณะเช่นนี้i for(; i < n; i++)คุณสามารถกอล์ฟมันยิ่งขึ้นด้วยการเปลี่ยนแปลงนี้: o += i + " ";การเปลี่ยนแปลงและการห่วงกลายเป็นo += i++ + " "; for(; i < n; )นั่นคือถ้าคุณต้องการที่จะเก็บถ้าคำสั่ง คุณสามารถเปลี่ยนการเพิ่มของฉันเป็นi += 2 และลบทั้งหมดถ้าคำสั่ง แต่ในกรณีนั้นข้อเสนอที่สองของฉันไม่ได้ใช้ :) (ps: ฉันไม่ได้ทดสอบนี้ :))
peech

@peech หากเป็นการปลอบใจมันเป็นเรื่องปกติที่ฉันจะได้คำตอบ C # คำตอบถ้ามันหายไปฉันจะคลำหาทางผ่านคำตอบ Java :) ขอบคุณสำหรับคำแนะนำ ฉันได้ลบการiเริ่มต้นจากforวง แต่สิ่งอื่น ๆ มันติดอยู่ในวง ผมอาจจะต้องเล่นรอบกับมันน้อยมาก :)
พีอาร์เดน

อืมฉันดีใจมากที่ในความคิดเห็นก่อนหน้านี้ฉันพูดว่า "ฉันไม่ได้ทดสอบสิ่งนี้" ... แน่นอนว่ามันใช้ไม่ได้กับo += i++ + " ";:) Btw คุณมีข้อผิดพลาดเล็ก ๆ ในรหัสของคุณ :) ตั้งแต่ Java ใช้floor()เกี่ยวกับการแบ่งจำนวนเต็ม (4/3 = 1) int i = 1; n += 1; for (; i < n; i += 2) { ... jada jada ... }คุณควรทำเช่นนี้ หากคุณเพิ่มฉันโดยi += 2คุณไม่จำเป็นต้องใช้ถ้างบตรวจสอบความเท่าเทียมกัน นอกจากนี้ยังช่วยประหยัดอีก 3 ไบต์ :) ลองที่นี่: ideone.com/ekaUUH
peech

@peech หากมีใครมั่นใจในการแก้ไขรหัสของฉันฉันคิดว่ามันต้องถูกต้องดังนั้นเมื่อมันไม่ทำงานฉันลองอีกครั้งและอีกครั้งโดยคิดว่า "ต้องเป็นฉัน ... " :) ไม่ต้องกังวล! ขอบคุณสำหรับเคล็ดลับ - ผมค้นพบfloorส่วนมุมแหลมตัวเองเมื่อเล่นกับบาง Java ไม่กี่วันที่ผ่านมา :)
พีอาร์เดน

3

C # 6, 95 ไบต์

n=>{var o="";int i=1;for(;i<=n;i+=2)o+=$" {i} ";o+='\n';for(i=1;i<=n;i+=2)o+="/ \\";return o;};

แลมบ์ดาเต็ม:

Func<int, string> a = n=>
{
    var o="";int i=1;
    for(;i<=n;i+=2)
        o+=$" {i} ";
    o+='\n';
    for(i=1;i<=n;i+=2)
        o+="/ \\";
    return o;
};

3

CJam, 26 23 ไบต์

Sri,:)2%_S2**N@,"/ \\"*

ทดสอบ!

-3 ขอบคุณ 8478 (Martin Ender)


คุณสามารถบันทึกได้ 3 ไบต์โดยหลีกเลี่ยงการจัดการสแต็กบางอย่าง:Sri,:)2%_S2**N@,"/ \\"*
Martin Ender

@ มาร์ตินเอนเดอร์ดังนั้นฉันจึงไม่สามารถลบมัน+ได้ และฉันสาบานฉันใช้จริงๆed! ... สั้นกว่า Pyth
Erik the Outgolfer

3

ภาษาของ Game Maker (GM 8.0), 97 ไบต์

m=ceil(argument0/2)e=""for(i=1;i<2*m;i+=2)e+=" "+string(i)+" "return e+"#"+string_repeat("/ \",m)

ระบุว่าอินพุตไม่เกิน 10 chr(48+i)จะทำงานแทนstring(i)แม้ว่าจำนวนไบต์จะเท่ากัน

อ่านได้:

m = ceil(argument0/2)
e = ""
for (i = 1; i < 2*m; i += 2 )
  e += " " + string(i) + " "
return e + "#" + string_repeat("/ \", m)


3

> <> (ปลา) 52 63 62 ไบต์

<v!?:-1:!?-1%2:
 >~la}}" "72.
v!?-2lno<o"  "
o
>:?!;"\ /"ooo1-

ลองออนไลน์!

ที่จะใช้เพียงแค่วาง nบนสแต็กและไปให้ไกล!

สิ่งเหล่านี้ส่วนใหญ่นำมาจากคำตอบของ @ Teal-Pelican :)

แก้ไข: เอาต์พุตไม่ได้จัดแนวอย่างถูกต้องในการส่ง> <>! แก้ไข ...

แก้ไข 2: ฉันต้องเสียสละบางไบต์ แต่ผลลัพธ์ที่ถูกต้องจริงตอนนี้

แก้ไข 3: ไม่สนุกอีกต่อไปกับมิ\ /เรอร์และฉันประหยัดได้ 1 ไบต์

เอาท์พุท:

 1  3  5  7  9
/ \/ \/ \/ \/ \

ขอขอบคุณที่พบข้อผิดพลาดในการพิมพ์ฉันกำลังแก้ไขคำตอบของฉันตอนนี้ (ค่อนข้างสำคัญสำหรับฉัน) มันน่าสนใจที่เห็นคำตอบพื้นฐานเหมือนกัน แต่ประหยัดจำนวนมากไบต์
นกกระทุงนกเป็ดน้ำ

ไม่มีปัญหาฉันมีความสุขที่ได้เห็นการส่ง> <>! มันน่าสนใจที่จะเห็นว่าอันไหนที่เล็กลงในขณะนี้เนื่องจากการเปลี่ยนแปลงเหล่านี้ทำร้ายฮ่าฮ่า
redstarcoder

ดูเหมือนว่าฉันจะเล็กกว่า 5 ไบต์: p
redstarcoder

ตอนนี้ฉันจะดูที่ฉันอีกครั้งเพื่อดูว่าฉันสามารถบีบเอาเศษโมโหออกมาได้ไหม
นกกระทุงนกเป็ดน้ำ

1
ฉันกลับถึงบ้านและมีความคิดเกี่ยวกับวิธีการใหม่ในการดำเนินการ คำตอบใหม่ของฉันคือ 55 ไบต์! : D - ขอบคุณที่ทำให้ฉันทำงานเกี่ยวกับเรื่องนี้มันสนุก
นกกระทุงนกเป็ดน้ำ



2

ทุบตี, 64, 59, 57, 51, 49, 48, 45 ไบต์

แก้ไข:

  • ลบ 3 ไบต์ (ใช้ $ 1 แทน STDIN)
  • หนึ่งไบต์ออกโดยแทนที่-s ""ด้วย-s\
  • ลบ 2 ไบต์โดยแทนที่printfด้วยseq -f (ขอบคุณ @Adam!)
  • refactored ไปยังสคริปต์แทนฟังก์ชั่น (ที่จะชนะ> <> )
  • ลบช่องว่างฟุ่มเฟือย
  • ปรับการแสดงออกของsedเล็กน้อย

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

ก้อน (45 ไบต์):

seq -f" %g " -s\  1 2 $1|sed 'p;s| . |/ \\|g'

ฟังก์ชั่น (รุ่นดั้งเดิม) (57 ไบต์):

M() { printf " %s %.0s" `seq 1 $1`|sed 'p;s| . |/ \\|g';}

ทดสอบ

--- mountains.sh ----
#!/bin/bash
seq -f" %g " -s\  1 2 $1|sed 'p;s| . |/ \\|g'

>./mountains.sh 10
 1  3  5  7  9 
/ \/ \/ \/ \/ \

>M 10
 1  3  5  7  9 
/ \/ \/ \/ \/ \

2
ความsedสดใส โดยไม่ใช้ฟังก์ชั่นหรือ printf คุณประหยัด 10 ไบต์:seq -f" %g " -s "" 1 2 $1|sed 'p;s| . |/ \\|g'
Adam

นั่นเป็นคำแนะนำที่ดี! ขอขอบคุณ ! ฉันยังคงใช้catเพื่ออ่านอินพุตจาก STDIN เนื่องจาก IMO มันไม่ยุติธรรมเลยที่จะใช้ตัวแปรที่กำหนดไว้ล่วงหน้าเพื่อส่งผ่านข้อมูล
zeppelin

1
$1เป็นเพียงพารามิเตอร์แรกที่ส่งไปยังโปรแกรม ฉันไม่คิดว่ามันเป็นการโกงดูmeta.codegolf.stackexchange.com/questions/2447/…
อดัม

ใช่คุณถูกต้อง ขอบคุณอีกครั้ง !
Zeppelin


2

Ruby 82 60 ไบต์

วิธีแก้ปัญหาทับทิมที่รวดเร็วและสกปรกน่าจะเหมาะสมกว่าถ้าฉันใช้ Ruby ดีกว่า

puts "",1.step($*[0].to_i,2).map{|x|$><<" #{x} ";"/ \\"}*""

การใช้งาน: prog.rb 10
เอาท์พุท:

 1  3  5  7  9
/ \/ \/ \/ \/ \

แก้ไข: การแก้ไขและเพิ่มประสิทธิภาพเป็นจำนวนมากโดย @Manatwork!


print→ และการใช้สตริงแก้ไข$><< " #{x} "แต่ที่ดีที่สุดที่จะลดจำนวนของ.eachโดยการแสดงผล 1 เส้นโดยตรงจากการเรียกกลับและสร้างเส้นที่ 2 s="";(1..$*[0].to_i).step(2){|x|$><<" #{x} ";s+="/ \\"};puts"",sในตัวแปร: puts"",(1..$*[0].to_i).step(2).map{|x|$><<" #{x} ";"/ \\"}*""หรือแม้กระทั่ง
จัดการ

Numeric#stepยอมรับ 2 พารามิเตอร์เพื่อให้สามารถหลีกเลี่ยงไวยากรณ์ช่วงยาวที่ต้องวงเล็บรอบ: →(1..$*[0].to_i).step(2) 1.step($*[0].to_i,2)
จัดการ

@Manatwork คำแนะนำที่ดีจริงๆ! ฉันเห็นว่าตัวเองใช้คำแนะนำของคุณมากมายในโพสต์กอล์ฟในอนาคตของฉันดังนั้นฉันจึงชื่นชมการป้อนข้อมูลจริงๆ
Ben Hili

1

JavaScript (ES6), 66 64 ไบต์

n=>(f=n=>n?f(n-1)+(n%2?n+s:s):s=" ")(n)+`
`+"/ \\".repeat(++n/2)

สร้างบรรทัดแรกแบบวนซ้ำจากนั้นต่อท้ายบรรทัดที่สอง บรรทัดแรกถูกสร้างขึ้นด้วยการสังเกตว่ามันเป็นเพียงแค่ช่วง[0 ... n]รายการแต่ละรายการnเปลี่ยนพื้นที่หากแม้หรือnตัดแบ่งที่มีพื้นที่ถ้าแปลก


1

Python 2, 60 ไบต์

บันทึกแล้ว 6 ไบต์ขอบคุณ @Kade!

lambda s:" "+"  ".join(`range(s+1)`[4::6])+"\n"+-~s/2*"/ \\"

คุณไม่จำเป็นต้องใช้การlist()หล่อถอดมันออกมาทำให้คุณได้รับถึง 60 :)
Kade

@Kade Backticks `` `` ทำให้มันเป็นสตริง ฉันไม่สามารถทำเช่นlambda s:" "+" ".join(range(s+1)[1::2])+"\n"+-~s/2*"/ \\"eนั้นเพราะมันจะให้รายชื่อของ ints และมันจะตาย
Oliver Ni


@Kade Huh มันใช้งานไม่ได้ ... ไม่เป็นไรฉันไม่รู้ว่าทำไมฉันจึงคิดว่ามันใช้งานไม่ได้ ...
Oliver Ni


1

สกาลา, 99 95 ไบต์

(? :Int)=>for(i<-0 to 1)println(1 to ?filter(c=>c%2>0)map(c=>if(i<1)s" $c "else"/ \\")mkString)

Ungolfed

(? :Int) => 
    for (i<-0 to 1)
        println(
            1 to ?filter(c=>c%2>0)
                  map(c=>if(i<1)s" $c "else"/ \\")
                  mkString
        )


1

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

f=@(n)reshape(sprintf(' /%d \',1:2:n),2,[]);

ทดสอบ:
f (8)

 1  3  5  7
/ \/ \/ \/ \

เมื่ออินพุต = 0 จะมี a / left :)
Sygmei

ไม่ได้พูดคำตอบของคุณไม่ถูกต้อง! เพิ่งสังเกตเห็นว่าขนาดเล็กตลกผิดพลาด :)
Sygmei

ฉันไม่สามารถสันนิษฐานได้ว่า n == 0 :(
rahnema1

1

QBIC , 35 ไบต์

:[1,a,2|X=X+!b$+@ | Y=Y+@/ \|]?X ?Y

คำอธิบาย:

:           gets a CMD line param as INT 'a'
[1,a,2|     FOR b = 1 to a STEP 2
X=X+!b$+@ | Add to X$ the counter of our FOR loop and a trailing space
            Leading space is provided by the cast-to-string function.
Y=Y+@/ \|   Add to Y$ the mountain.
]           Close the first possible language construct (IF, DO or FOR). In this case: NEXT
?X ?Y       Print X$, Print Y$. The space adds a newline in the resulting QBASIC.


0

Perl, 46 + 2 ( -plธง) = 48 ไบต์

@_=map$_%2?$_:"",0..$_;$_="@_$/"."/ \\"x(@_/2)

โดยใช้:

perl -ple '@_=map$_%2?$_:"",0..$_;$_="@_$/"."/ \\"x(@_/2)' <<< 7    

หรือ 52 ไบต์:

@_=map$_%2?$_:"",0..pop;print"@_$/","/ \\"x(@_/2),$/

โดยใช้:

perl -e '@_=map$_%2?$_:"",0..pop;print"@_$/","/ \\"x(@_/2),$/' 7
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.