휴전의 날 도전


28

오늘 11 월 11 일은 현충일 , 휴전 일 또는 재향 군인의 날 (국가에 따라 다름 )로 알려져 있으며 , 군대와 그들의 복무에 대한 성찰과 감사의 날, 특히 유럽의 적대 행위의 끝을 반영하기 시작했습니다. 첫번째 세계 대전에서. 간단한 ASCII 아트 출력을 사용하여 그것에 대해 생각해 보자 11/11.

입력 주어지면 n, 출력의 ASCII 아트 연주 11/11즉 n단위 높이. 구체적으로, 각각 1은 수직 파이프로 구성 ||되고, 슬래시는 슬래시로 구성되며 //, 각 문자는 2 개의 간격으로 떨어져 있습니다. 이는 다양한 출력 폭을 의미합니다. 예를 들어 n=3아래의 경우 슬래시의 "하단"이 1왼쪽에서 왼쪽으로 두 칸 이지만 1오른쪽 에서 네 칸 이되어 슬래시의 맨 위를보십시오. 적절하게 정렬되고 1오른쪽 에서 두 칸이됩니다 .

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


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


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


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


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

등등.

입력

하나의 양의 정수 편리한 형식으로 , n > 0.

산출

11/11위의 규칙과 예제에 따른 의 ASCII 아트 표현 . 문자가 적절하게 정렬되는 경우 선행 / 후행 줄 바꿈 또는 기타 공백은 선택 사항입니다.

규칙

  • 전체 프로그램 또는 기능이 허용됩니다. 함수 인 경우 출력하지 않고 출력을 반환 할 수 있습니다.
  • 표준 허점 은 금지되어 있습니다.
  • 이것은 이므로 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.

답변:


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

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

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

2
내 대답을 잊어 버리는 것은 천재입니다. 나는 매번 기존의 경로를 멈춰야한다. : P
— ETHproductions

매끈하다. 좋은 대답입니다.
— AdmBorkBork

누군가가 설명 할 수 $'와 $`정규식에를? 나는 그것을 전에 본 적이 없으며 그것을 더 잘 이해하고 싶습니다.
— Robert Hickman

1
@RobertHickman 일치 전후의 문자열 부분을 참조합니다 ( $&일치 자체).
— Neil

@ 닐, 감사합니다! 당신은 매일 새로운 것을 배웁니다 :)
— Robert Hickman 1

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

펄, 45 바이트

@Gabriel Benamy 덕분에 -9 바이트

코드 47 바이트 + -n플래그 1 바이트

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

-nE플래그로 실행 :

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

변경하여 4 바이트 저장 "|| ||"에 "|| "x2다음 전환 (2+$_)단지로$_
— 가브리엘 Benamy

과제를 +( .. )둘러 볼 수도 있다고 생각합니다 $@. 적어도 내 컴퓨터에서 작동합니다.
— 가브리엘 베 나미

@GabrielBenamy +( .. )감사합니다. 그러나 사이에 두 개의 공백이 필요 "|| ||"하기 "|| "x2때문에로 변경할 수 없습니다 ||.
— Dada

"|| "파이프 다음에 공백이 두 개 있습니다 (어떤 이유로 여기에서는 올바르게 렌더링되지 않음) "|| || ". 추가 문자열을 처리 하는 문자열을 복제하고 있습니다.$"x(2+$_)
— Gabriel Benamy

@GabrielBenamy 감사 || 합니다. 두 개가있을 때 하나의 공백 만 표시하는 SE 형식 입니다.
— Dada

5

자바 스크립트 (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/. 그래도 약간 다른 곳에있을 것이고 V를 읽을 수 없으므로 그게 중요한지 확실하지 않습니다.
— 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 솔루션의 포트가 아닙니다. |Batch에서 조작하기가 어렵 기 때문에 s x를 자리 표시 자로 사용 하고 출력에서 ​​대체하므로 코드 크기가 편리합니다. s에 대한 원하는 출력 으로 설정 하여 시작하고 n=1( n명령 행에 전달됨) 실제 값에 대한 첫 번째 행을 얻기 위해 필요한만큼 공백을 삽입합니다.n 한 다음 문자열을 인쇄하고 매번 슬래시를 한 문자 씩 왼쪽으로 이동합니다.


3

베이컨 , 71 바이트

한 줄에 완전한 기본 프로그램.

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호출 내부에서 루프를 사용하여 이것에 접근하기로 결정했습니다 . 이 루프 는 맨 마지막에 다른 실제 루프 구문에서 반환 한 내용을 반복 하며 마지막 6 개 요소가 제거됩니다.butlast s). 이 루프 구문이 반환하는 값의 내용은 슬래시 앞의 패딩 수, 패딩 문자 (공백), 슬래시의 뒷면에 대한 패딩 수 및 마지막으로 동일한 패딩 문자로 구성됩니다.

나는 Lisp를 처음 접했고 여기에 개선의 여지가 많이 있음을 이해합니다.


당신은 당신의 솔루션을 골라 내야합니다 (불필요한 공백을 없애고 식별자를 줄이십시오)
— cat

PPCG에 오신 것을 환영합니다!
— AdmBorkBork

3

파이썬 2, 76 75 71 바이트

그래도 더 짧은 버전으로 작업하고 있지만 그렇게 나쁘지는 않습니다.

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 11이 아닌 1 사이가 아닌 두 개의 공백이 필요합니다.
— Kade

그것은 SE가 그것을 망쳐 놓는 것입니다. 여전히 바이트가 짧습니다. repl.it/EViJ
— mbomb007

@ mbomb007 해당 repl.it 페이지에 따르면 //마지막 행 앞에 3 개의 공백 //이 있고 첫 번째 행에 2 개의 공백이 있습니다. 두 경우 모두 두 개의 공백이 있어야합니다.
— 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를 대체하고 || ||(나중에 아무 것도하지 않음) 이제 필요한 출력의 첫 번째 줄을 가지고 인쇄합니다.

   //
  // 

마지막으로, //왼쪽에 공백이 3 개 이상 남아 있으면 한 문자가 왼쪽으로 이동합니다 //. 그 후 우리는 이전 단계로 돌아가서 (현재 더 이상 xs 가 없기 때문에 현재 줄만 인쇄합니다 ) 반복합니다.


2

루비, 60 바이트

->n{n.times{|i|puts (a='||  || ')+' '*(n-i)+'//  '+' '*i+a}}


1

루비, 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

파워 쉘, 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;

언 골프 드 :

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

그루비, 63 문자 / 바이트

다음은 익명 클로저와 간단한 루프를 사용하여 ASCII 아트를 표준 출력으로 인쇄하는 Groovy의 시도입니다.

{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

파이썬 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)) 또한, 당신은 대체하여 2 바이트를 저장할 수 있습니다 (e+1)로 -~e.
— ETHproductions
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.