ศึกวันท้าทาย


28

วันนี้วันที่ 11 พฤศจิกายนเป็นที่รู้จักกันเป็นวันรำลึก , ศึกวันหรือวันทหารผ่านศึก (ขึ้นอยู่กับประเทศ) และเป็นวันของการสะท้อนและความกตัญญูสำหรับสมาชิกของทหารและการให้บริการของพวกเขาเริ่มต้นโดยเฉพาะเพื่อสะท้อนให้เห็นถึงการสิ้นสุดของสงครามในยุโรป ในสงครามโลกครั้งที่หนึ่ง ขอให้เราสะท้อนให้เห็นถึงว่ามีการส่งออก ASCII 11/11ศิลปะที่เรียบง่ายของ

รับอินพุตnส่งออกการแสดงผล ASCII-art ของ11/11ที่มีnหน่วยสูง โดยเฉพาะอย่างยิ่งแต่ละคน1ประกอบด้วยท่อแนวตั้ง||ทับประกอบด้วยทับ//และตัวละครแต่ละตัวมีช่องว่างออกเป็นสอง โปรดทราบว่านี่หมายถึงความกว้างของเอาต์พุตที่แตกต่างกัน - ตัวอย่างเช่นn=3ด้านล่างดูว่า "ส่วนล่าง" ของเครื่องหมายทับสองช่องว่างจาก1ทางซ้ายของมัน แต่เป็นช่องว่างสี่ช่องจาก1ด้านขวาเพื่อให้ด้านบนสุดของทับ เรียงแถวกันอย่างเหมาะสมและเป็นสองช่องว่างจาก1ด้านขวา

n = 1
||  ||  //  ||  ||


n = 2
||  ||   //  ||  ||
||  ||  //   ||  ||


n = 3
||  ||    //  ||  ||
||  ||   //   ||  ||
||  ||  //    ||  ||


n = 4
||  ||     //  ||  ||
||  ||    //   ||  ||
||  ||   //    ||  ||
||  ||  //     ||  ||


n = 5
||  ||      //  ||  ||
||  ||     //   ||  ||
||  ||    //    ||  ||
||  ||   //     ||  ||
||  ||  //      ||  ||

และอื่น ๆ

อินพุต

เป็นจำนวนเต็มบวกเดียวในรูปแบบที่สะดวกใด ๆn > 0 ,

เอาท์พุต

การแทนค่า ASCII-art 11/11ตามกฎและตัวอย่างข้างต้น ขึ้นบรรทัดใหม่ / ต่อท้ายหรือช่องว่างอื่น ๆ เป็นตัวเลือกโดยมีเงื่อนไขว่าตัวอักษรอยู่ในแนวที่เหมาะสม

กฎระเบียบ

  • ยอมรับได้ทั้งโปรแกรมหรือฟังก์ชั่น หากฟังก์ชั่นคุณสามารถส่งคืนผลลัพธ์มากกว่าการพิมพ์
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • นี่คือเพื่อให้ใช้กฎการตีกอล์ฟตามปกติทั้งหมดและรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ

คำตอบ:


4

เยลลี่ 24 ไบต์

⁾| Ḥẋ2µ,Ṛðj
⁶ẋṖ;⁾//ṙḶÇ€Y

TryItOnline!

อย่างไร?

⁾| Ḥẋ2µ,Ṛðj - Link 1, join two "11"s with: middle
⁾|          - string literal: "| "
   Ḥ        - double          "||  "
    ẋ2      - repeat twice    "||  ||  "
      µ     - monadic chain separation
       ,    - pair with
        Ṛ   - reversed       ["||  ||  ","  ||  ||"]
         ð  - dyadic chain separation
          j - join with input "||  ||  middle  ||  ||"

⁶ẋṖ;⁾//ṙḶÇ€Y - Main link: n       e.g. 5
⁶            - literal ' '        ' '
 ẋ           - repeat n times     "     "
  Ṗ          - remove last entry  "    "
   ;         - concatenate with
    ⁾//      - literal "//"       "    //"
        Ḷ    - lowered range(n)   [0,1,2,3,4]
       ṙ     - rotate left        ["    //","   // ","  //  "," //   ","//    "]
         Ç€  - call last link (1) as a monad for €ach
           Y - join with line feeds

21

JavaScript (ES6), 57 ไบต์

n=>" ".repeat(n).replace(/./g,"||  ||  $'//$`  ||  ||\n")

2
อะไรนะ ... ลืมคำตอบของฉันนี่คืออัจฉริยะ ฉันควรหยุดเส้นทางธรรมดาทุกครั้ง: P
ETHproductions

มันลื่น คำตอบที่ดี
AdmBorkBork

ใครสามารถอธิบาย$'และ$`ใน regex? ฉันไม่เคยเห็นมาก่อนและชอบที่จะเข้าใจดีขึ้น
Robert Hickman

1
@RobertHickman พวกเขาอ้างถึงส่วนหนึ่งของสตริงหลังและก่อนการแข่งขัน ( $&จะเป็นการแข่งขันเอง)
Neil

@ Neil ขอบคุณ! คุณได้เรียนรู้สิ่งใหม่ทุกวัน :)
Robert Hickman

7

05AB1E , 24 ไบต์

<ðׄ//J¹FD"  ||"2׊««,À

ลองออนไลน์!

คำอธิบาย

                          # implicit input n
<ð×                       # push n-1 spaces
   „//J                   # join with "//"
       ¹F                 # input times do:
         D                # duplicate top of stack
          "  ||"2×        # push "  ||  ||"
                  Â       # push "||  ||  "
                   Š      # move the top of the stack down 2 places on the stack
                    ««    # concatenate the top 3 elements of the stack
                      ,   # print with newline
                       À  # rotate top of stack left

รุ่นก่อนหน้า 26 ไบต์

F"||  "2שð¹N-<ׄ//ðN×®RJ,

ลองออนไลน์!


2
นั่นเร็วมาก!!
AdmBorkBork

" "×"//"«.s¦R"|| || "s«vyû}»กลายเป็นว่า palendromize ไม่เหมาะสำหรับเหตุผลที่ชัดเจนยิ่งขึ้นในตอนนี้ ... และคุณเอาชนะยอดเงินของฉันได้เร็วขึ้น แต่อย่างใดเฮ้
Magic Octopus Urn

6

Perl, 45 ไบต์

-9 ไบต์ขอบคุณ @Gabriel Benamy

รหัส 47 ไบต์ + 1 ไบต์สำหรับการ-nตั้งค่าสถานะ

say$@="||  "x2,$"x$_,"//",$"x++$.,$@while$_--

ทำงานด้วย-nEธง:

perl -nE 'say$@="||  "x2,$"x$_,"//",$"x++$.,$@while$_--' <<< 5

บันทึก 4 ไบต์โดยการเปลี่ยน"|| ||"ไป"|| "x2แล้วหัน(2+$_)เข้าไปเพียง$_
กาเบรียล Benamy

ฉันคิดว่าคุณยังสามารถวาง+( .. )รอบ ๆ$@ที่ได้รับมอบหมาย มันทำงานบนคอมพิวเตอร์ของฉันอย่างน้อย
Gabriel Benamy

@GabrielBenamy ฉัน+( .. )ขอขอบคุณจริงๆ แต่ฉันไม่สามารถเปลี่ยน"|| ||"ไปเพราะผมต้องสองช่องว่างระหว่าง"|| "x2 ||
Dada

"|| "มีช่องว่างสองหลังท่อ (มันเป็นเพียงการแสดงผลไม่ถูกต้องที่นี่ด้วยเหตุผลบางอย่าง) และคุณกำลังทำซ้ำสตริงที่เข้ามา"|| || "ซึ่งดูแลพิเศษ 2 ช่องว่างจาก$"x(2+$_)
Gabriel Benamy

@ GabrielBenamy โอ้ขอบคุณการจัดรูปแบบ SE จะแสดงเพียงหนึ่งช่องว่าง|| เมื่อมีสองไฟล์
Dada

5

JavaScript (ES6), 88 77 ไบต์

f=(n,i=n)=>i--?`||  ||  ${" ".repeat(i)}//${" ".repeat(n+~i)}  ||  ||
`+f(n,i):""

วิธีการเรียกซ้ำอาจจะไม่ ได้อาจจะเป็นที่สั้นที่สุด


.map รุ่น (88 ไบต์):

n=>[...Array(n)].map((_,i)=>`||  ||  ${" ".repeat(n+~i)}//${" ".repeat(i)}  ||  ||`).join`
`

ความเข้าใจของแถวลำดับ (86 ไบต์):

n=>[for(_ of Array(i=n))`||  ||  ${" ".repeat(--i)}//${" ".repeat(n+~i)}  ||  ||`].join`
`

for เวอร์ชันลูป (89 ไบต์):

n=>{for(a="",i=n;i--;a+=s+" ".repeat(i+2)+`//${" ".repeat(n-i+1)+s}
`)s="||  ||";return a}

.replace รุ่น (85 ไบต์):

n=>`||  ||  q  ||  ||
`[r="repeat"](n).replace(/q/g,_=>" "[r](--i)+"//"+" "[r](n+~i),i=n)

4

เรติน่า 29 ไบต์

.+
$* 
.
xx$'//$`  xx¶
x
||  

พอร์ตของโซลูชัน JavaScript ของฉัน หมายเหตุพื้นที่หลังจากที่สองหลังจากที่ช่องว่าง$*||


3

V , 30 ไบต์

4i||  2Bi//  Àé XÀ«ñÄf/é Elx

ลองออนไลน์!

ตามปกตินี่คือ hexdump:

0000000: 3469 7c7c 2020 1b32 4269 2f2f 2020 1bc0  4i||  .2Bi//  ..
0000010: e920 58c0 abf1 c466 2fe9 2045 6c78       . X....f/. Elx

5i|| <esc>3b2r/ฉันคิดว่าคุณอาจมีการเปลี่ยนแปลงส่วนเริ่มต้นที่จะ คุณจะอยู่ในสถานที่ที่แตกต่างกันเล็กน้อยและฉันไม่สามารถอ่านวีดังนั้นฉันไม่แน่ใจว่าเรื่องนั้น
nmjcman101

3

แบตช์ 130 ไบต์

@set s=xx//  xx
@set l=@for /l %%i in (2,1,%1)do @call
%l% set s=%%s://= //%%
%l%:l
:l
@echo %s:x=^|^|  %
@set s=%s: //=// %

ไม่ใช่พอร์ตของโซลูชัน JavaScript ของฉัน เนื่องจาก|s ยากที่จะจัดการในแบทช์ฉันใช้xs เป็นตัวยึดและแทนที่ในเอาต์พุตสิ่งนี้จึงช่วยลดขนาดรหัสของฉันได้อย่างสะดวก เริ่มต้นโดยการตั้งค่าsเป็นเอาต์พุตที่ต้องการสำหรับn=1( nถูกส่งผ่านบนบรรทัดคำสั่ง) จากนั้นแทรกช่องว่างตามความจำเป็นเพื่อให้ได้บรรทัดแรกสำหรับค่าจริงจากnนั้นวนซ้ำผ่านการพิมพ์สตริงและเลื่อนเครื่องหมายทับซ้ายหนึ่งอักขระในแต่ละครั้ง


3

BaCon , 71 ไบต์

โปรแกรม BASIC ที่สมบูรณ์ในหนึ่งบรรทัด

INPUT n:FOR x=1 TO n:?"||  ||",SPC$(n-x+2),"//",SPC$(x+1),"||  ||":NEXT

ดี! เป็นไปได้1 TOหรือไม่ที่จะลบพื้นที่ใน?
DLosc

3

เสียงกระเพื่อมสามัญ, 216 ไบต์

ฉันจะพูดทันทีว่านี่เป็นทางออกที่น่ากลัวสำหรับความท้าทาย อย่างไรก็ตามมันใช้งานได้และฉันก็เหนื่อย

(defun arm (n) (format t "~{||  || ~v,,,vA//~v,,,vA ||  ||~%~}" (butlast (butlast (butlast (butlast (butlast (butlast (loop for i from 1 to (+ n 1) append `(,(- (+ n 1) i) #\Space #\Space ,i #\Space #\Space))))))))))

การใช้งาน:

* (arm 4)
||  ||     //  ||  ||
||  ||    //   ||  ||
||  ||   //    ||  ||
||  ||  //     ||  ||

ด้วยเหตุผลบางอย่างแทนที่จะทำอะไรที่มีเหตุผลฉันจึงตัดสินใจเข้าใกล้สิ่งนี้ด้วยการวนซ้ำในการformatโทร วงนี้ iterates ผ่านเนื้อหาที่ส่งกลับมาจากอื่น ๆสร้างห่วงที่เกิดขึ้นจริงที่ส่วนท้ายสุดกับช่วงหกองค์ประกอบออก (ดังนั้นซ้ำbutlasts) เนื้อหาของค่าที่ส่งคืนโดยการสร้างลูปนี้ประกอบด้วยการนับการเติมสำหรับด้านหน้าของเครื่องหมายทับ, อักขระการเติม (ช่องว่าง), การนับการเว้นระยะสำหรับด้านหลังของเครื่องหมายทับและท้ายสุดคืออักขระการเติมเต็มเดียวกัน

ฉันค่อนข้างใหม่กับ Lisp และฉันเข้าใจว่ามีพื้นที่มากมายสำหรับการปรับปรุงที่นี่


คุณควรลองตีกอล์ฟแก้ปัญหาของคุณ (กำจัดช่องว่างที่ไม่จำเป็นและตัวย่อให้สั้นลง)
cat

ยินดีต้อนรับสู่ PPCG!
AdmBorkBork

3

Python 2, 76 75 71 Bytes

ยังคงทำงานในรุ่นที่สั้นกว่า แต่ก็ไม่ได้แย่เกินไป

n=input()
k='||  ||'
for i in range(n):print k,(n-i)*' '+'//'+' '*-~i,k

ขอบคุณ mbomb007 สำหรับการจับข้อผิดพลาด!


สั้นลง 1 ไบต์:x='|| '*2;print x+(n-i)*' '+'//'+' '*i+x[::-1]
mbomb007

@ mbomb007 คุณต้องการช่องว่างสองช่วงระหว่าง 11s ไม่ใช่ 1 ที่จะทำให้เท่ากัน
Kade

นั่นเป็นเพียง SE ที่ทำให้สับสน มันยังคงเป็นไบต์ที่สั้นกว่า repl.it/EViJ
mbomb007

@ mbomb007 ตามหน้า repl.it นั้นมีช่องว่างสามช่องก่อนหน้า//ในแถวสุดท้ายและช่องว่างสองช่องหลังจาก//บนแถวแรก ควรเป็นสองช่องว่างในทั้งสองกรณี
Kade

จากนั้นโปรแกรมปัจจุบันของคุณผิดเพราะนั่นคือสิ่งที่คุณทำ
mbomb007

2

R, 86 ไบต์

เป็นเพียงforวิธีวนรอบง่าย:

x="||  ||";n=scan();for(i in 1:n)cat(x,rep(" ",2+n-i),"//",rep(" ",1+i),x,"\n",sep="")

2

เรติน่า 40 ไบต์

.+
x $&$* //  x
;{:`x
||  ||
   //
  // 

ลองออนไลน์!

คำอธิบาย

.+
x $&$* //  x

นี่จะเปลี่ยนอินพุตNเป็น

x S//  x

ในกรณีที่Sสอดคล้องกับNพื้นที่

;{:`x
||  ||

มีสองสิ่งที่เกิดขึ้นที่นี่ ;{:บ่งชี้ว่าสเตจนี้และสเตจสุดท้ายควรรันในลูปจนกว่าจะไม่สามารถเปลี่ยนสตริงได้ :บ่งชี้ว่าผลลัพธ์ของระยะนี้ควรพิมพ์หลังจากการวนซ้ำแต่ละครั้งและ;บ่งชี้ว่าผลลัพธ์สุดท้ายของการวนซ้ำ (และดังนั้นของโปรแกรมทั้งหมด) ไม่ควรพิมพ์ สเตจเองเพิ่งแทนที่xs ด้วย|| ||การวนซ้ำครั้งแรก (และไม่ทำอะไรเลยหลังจากนั้น) ดังนั้นตอนนี้เราจึงมีบรรทัดแรกของเอาต์พุตที่ต้องการ (และพิมพ์)

   //
  // 

ในที่สุดการเปลี่ยนแปลงนี้ตัวละครตัวหนึ่งไปทางซ้ายให้ยังคงมีอย่างน้อยสามช่องว่างด้านซ้ายของ// //หลังจากนั้นเรากลับไปยังขั้นตอนก่อนหน้า (ซึ่งตอนนี้พิมพ์เฉพาะบรรทัดปัจจุบันเนื่องจากไม่มีอีกxแล้ว) และทำซ้ำ




1

Ruby, 76 74 73 ไบต์

x="||  ||";n=gets.to_i;puts (1..n).map{|i|x+" "*(n-i+2)+"//"+" "*(i+1)+x}

ในฐานะที่เป็นฟังก์ชั่นจะใช้เวลา73 72 ไบต์นับความหมาย:

def f n,x="||  ||";(1..n).map{|i|x+" "*(n-i+2)+"//"+" "*(i+1)+x}*?\n;end

1

Powershell, 66 ไบต์

$a=read-host;1..$a|%{$s="||  ";$s*2+" "*($a-$_)+"// "+" "*$_+$s*2}

ยินดีต้อนรับสู่เว็บไซต์!
DJMcMayhem

@DrMcMoylex เพียงแค่สงสัยว่าฉันเห็นคำตอบนี้และกำลังจะทำสิ่งเดียวกันกับที่คุณทำ แต่มันบอกว่าฉันไม่ได้เปลี่ยนแปลงมากพอในการแก้ไขของฉัน คุณสามารถทำสิ่งนี้ได้อย่างไร
nedla2004

@ nedla2004 เมื่อคุณมีชื่อเสียง 1,000 คน (หรือ 2,000 แห่งสำหรับไซต์ที่สำเร็จการศึกษาอย่างเต็มที่) คุณจะได้รับรางวัลการแก้ไขแบบเต็ม ก่อนหน้านั้นการแก้ไขทั้งหมดของคุณจะต้องมีอย่างน้อย 6 ตัวอักษรและจะได้รับการตรวจสอบโดยผู้ใช้รายอื่นที่มีตัวแทนมากขึ้น เนื่องจากฉันมีตัวแทนมากกว่า 1,000 คนฉันจึงได้รับอนุญาตให้ส่งการแก้ไขเล็กน้อยในทันที
DJMcMayhem

ยินดีต้อนรับสู่ PPCG! คุณสามารถบันทึกสองสามไบต์โดยการป้อนบรรทัดคำสั่งแทนread-host-param($a)1..$a|%{$s="|| ";$s*2+" "*($a-$_)+"// "+" "*$_+$s*2}
AdmBorkBork

ขอบคุณสำหรับการต้อนรับการแก้ไขและบรรทัดคำสั่งทั้งหมด!
Ben

1

C #, 150 ไบต์

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

string A(int n){string a="",b= "||  ||";for(int i=0;i<n;i++)a+=b+"  //  ".PadLeft(5+n-i,'\0')+string.Concat(Enumerable.Repeat(" ",i))+b+"\n";return a;

Ungolfed:

public string A(int n)
{
  string a = "", b = "||  ||";
  for (int i = 0; i < n; i++)
    a += b + "  //  ".PadLeft(5 + n - i, '\0') + string.Concat(Enumerable.Repeat(" ", i)) + b + "\n";
  return a;
}

การทดสอบ:

Console.WriteLine(new ArmisticeDayChallenge().A(11));

เอาท์พุท:

||  ||            //  ||  ||
||  ||           //   ||  ||
||  ||          //    ||  ||
||  ||         //     ||  ||
||  ||        //      ||  ||
||  ||       //       ||  ||
||  ||      //        ||  ||
||  ||     //         ||  ||
||  ||    //          ||  ||
||  ||   //           ||  ||
||  ||  //            ||  ||

1

Groovy, 63 chars / bytes

นี่คือความพยายามของฉันกับ Groovy โดยใช้การปิดแบบไม่ระบุชื่อและวนซ้ำง่าย ๆ ในการพิมพ์ ASCII art ไปยังเอาต์พุตมาตรฐาน:

{n->n.times{println'|| '*2+' '*(n-it-1)+'//'+' '*it+' ||'*2}}

คุณสามารถทดลองใช้ออนไลน์ได้ที่นี่ เพียงคลิก "แก้ไขในคอนโซล" จากนั้น "เรียกใช้งานสคริปต์"

พยายามทำสิ่งเดียวกันและส่งคืนสตริงแทนที่จะพิมพ์ฉันไม่สามารถรับได้ต่ำกว่า 71 ไบต์:

{n->a='';n.times{a+='|| '*2+' '*(n-it-1)+'//'+' '*it+' ||'*2+'\n'};a}


0

Python 3, 78 ไบต์

a="||  ||"
def m(n):
    for e in range(n):print(a," "*(n-e),"//"," "*(e+1),a)

ยังคงพยายามย่อ ...


ยินดีต้อนรับสู่ PPCG! คุณสามารถย้ายforไปยังบรรทัดเดียวกันได้defหรือไม่ (เช่นนี้def m(n):for e in range(n):print(a," "*(n-e),"//"," "*(e+1),a)) นอกจากนี้คุณยังสามารถบันทึกไบต์ที่สองโดยการแทนที่ด้วย(e+1) -~e
ETHproductions
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.