휴전의 날 도전


28

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

입력 주어지면 n, 출력의 ASCII 아트 연주 11/11n단위 높이. 구체적으로, 각각 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.