ASCII Day of the Day # 1-이중 매듭


47

NSTDIN / 명령 줄 / ARGV 또는 함수 인수를 통해 입력 으로 양의 정수를 가져와 NSTDOUT에 해당하는 ASCII 이중 매듭을 인쇄 하는 전체 프로그램 또는 함수를 작성하십시오 .

ASCII 이중 매듭은 다음과 같습니다.

  __  __  __  __  __  __
 /  \/  \/  \/  \/  \/  \
| /\/ /\/ /\/ /\/ /\/ /\ |
| \/ /\/ /\/ /\/ /\/ /\/ |
 \ \/\ \/\ \/\ \/\ \/\ \/
 /\ \/\ \/\ \/\ \/\ \/\ \
| /\/ /\/ /\/ /\/ /\/ /\ |
| \/ /\/ /\/ /\/ /\/ /\/ |
 \__/\__/\__/\__/\__/\__/

위의 N = 6

다음은 다른 값에 대한 이중 매듭입니다 N.

인 경우 N = 1출력 이중 매듭은 다음과 같습니다.

  __
 /  \
| /\ |
| \/ |
 \ \/
 /\ \
| /\ |
| \/ |
 \__/

의 경우 N = 2, 그

  __  __ 
 /  \/  \
| /\/ /\ |
| \/ /\/ |
 \ \/\ \/
 /\ \/\ \
| /\/ /\ |
| \/ /\/ |
 \__/\__/

의 경우 N = 3, 그

  __  __  __ 
 /  \/  \/  \
| /\/ /\/ /\ |
| \/ /\/ /\/ |
 \ \/\ \/\ \/
 /\ \/\ \/\ \
| /\/ /\/ /\ |
| \/ /\/ /\/ |
 \__/\__/\__/

마찬가지로, 패턴은 계속되고 더 큰 값은 N입니다.

세부 사항 :

  • 입력은 항상보다 큰 양의 정수 0입니다.
  • 후행 줄 바꿈은 선택 사항입니다
  • 각 줄에 후행 공백이 없어야하거나 각 행의 길이가되도록 충분한 후행 공백이 없어야합니다 4*N + 2.
  • 지정된 패턴에 속하지 않는 선행 공간이 없어야합니다.

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.


시리즈 리더 보드

나는 이것을 일련의 ASCII 예술 과제로 변환하여 시리즈의 리더 보드 (Martin의 발췌문)를 추가하고 있습니다. 답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 모든 답변을 헤드 라인으로 시작하십시오.

# Language Name, N bytes

여기서 N은 제출 크기입니다. 점수를 높이면 헤드 라인을 쳐서 오래된 점수를 유지할 수 있습니다. 예를 들어 :

# Ruby, <s>104</s> <s>101</s> 96 bytes


지금까지 시리즈

1. 더블 매듭

2. 흐름 뱀

3. 중국 신사

4. 조디악 징후

5. 랜덤 다이아몬드 타일링


1
N = 3에 대해 오른쪽 가장자리가 다른 이유는 무엇입니까?
aditsu

@ 아디 츠 하하. 4 일, 3K보기, 11 개의 답변이 있으며 귀하는 그것을 가장 먼저 알게됩니다 : 결정된!
옵티 마이저

답변:


12

CJam, 55 바이트

나는 이것으로 꽤 나쁘게 저격 당했다 ... 어쨌든, 마침내 55 바이트 의 ISO 8859-1을 생각해 냈다.

"²îå<63Åhbغ¢dräOä[æTZ"246b5b"|_ \/"f=9/4/~2/\ri*2>*zN*

또는이 대안 :

"ô/Ht]õDz1M;í,D¯Tmä$:r"246b5b"_/\ |"f=9/2/~+ri*2>\++zN*

처음에는 일반 ASCII로 시도했지만 58 바이트 로 줄였습니다 .

"C]VA~`+-WIt*n_I?FanSEo*b"128b5b"_/|\ "f=9/4/~2/\ri*2>*zN*

그리고 또 다른 대안 :

"1,*Ap7c?UvI$yQHqHqs~=}n"153b5b"_ /|\\"f=9/2/~+ri*2>\++zN*

설명:

아이디어는 고유 한 부분 (왼쪽 가장자리, 오른쪽 가장자리 및 중간 패턴)을 편리한 방식으로 인코딩하고 필요에 따라 가운데 부분을 반복 한 다음 구성하는 것입니다. 코드는 여러 가지면에서 Dennis의 답변과 비슷했습니다. 나는 그를 복사하려고하지 않았지만 더 많은 대칭과 반복을 포함하여 많은 다른 접근법을 시도했으며 이것이 가장 효과적이었습니다.

왼쪽과 오른쪽 가장자리를 다음과 같이 정리했습니다.

    
 /\ 
|  |
|  |
 \/ 
 /\ 
|  |
|  |
 \/ 

가운데 패턴에는 4 개의 열이 있지만 N-0.5 번 반복됩니다. 즉, 한 번의 반복이 반으로 줄어 듭니다. 편의상이 패턴을 사용했습니다.

  __
\/  
/ /\
 /\/
/\ \
\/\ 
/ /\
 /\/
/\__

제 1 반복의 전반부를 제거 하였다.

그래서 나는 그 방식으로 작업하기가 더 쉽기 때문에 파트에 합류하고 전치 형태로 인코딩했습니다. 첫 번째 및 세 번째 프로그램은이 문자열을 인코딩합니다.

 \/ /\/ /
 / /\/ /\
_ /\ \/\_
_ \/\ \/_
  ||  || 
 /  \/  \
 \  /\  /
  ||  || 

(줄 바꿈없이), 가운데 + 가장자리의 조옮김입니다. 두 번째 및 네 번째 프로그램 ( "대체")은 다음 문자열을 인코딩합니다.

  ||  || 
 /  \/  \
 \  /\  /
  ||  || 
 \/ /\/ /
 / /\/ /\
_ /\ \/\_
_ \/\ \/_

다시, 개행없이, 이것은 가장자리 + 중간의 조옮김입니다.

코드의 일반적인 부분은 다음과 같습니다.

"…"        encoded string (constructed via the reverse process,
           using a suitable base that gives valid characters)
246b       convert the string to an integer, treating each character as a digit
           in base 246 (or other bases in the ASCII versions)
5b         convert the number to base 5, obtaining 72 digits from 0 to 4,
           representing the 5 different characters we have
"|_ \/"f=  convert the digits to their corresponding characters
           (each program uses a different assignment order)
9/         split the resulting strings into 8 strings of 9 characters
           if viewed as lines, they look exactly like the 2 patterns shown above

이 후 구현이 약간 다릅니다. 첫 번째와 세 번째 프로그램에는 다음이 있습니다.

4/     split the lines into groups of 4 - the middle part and the edges
~      dump the two 4-line parts onto the stack
2/     split the second part (the edges) into 2 groups of 2 lines
       (left edge and right edge)
\      swap the edges with the middle part
ri*    read the input, convert to integer (N) and repeat the middle part N times
2>     remove the first 2 lines (first half of first repetition)
*      join the 2 edges using the repeated middle part as a separator
z      transpose the result back to the desired form
N*     join with newlines

두 번째 및 네 번째 (대체) 프로그램에는 다음이 있습니다.

2/     split the lines into groups of 2
       (left edge, right edge, middle first half, middle 2nd half)
~      dump all the groups onto the stack
+      join the two middle halves into a single middle group of 4 lines
ri*    read the input, convert to integer (N) and repeat the middle part N times
2>     remove the first 2 lines (first half of first repetition)
\      swap the repeated middle with the right edge
+      concatenate the middle with the right edge
+      concatenate the left edge with the rest
z      transpose the result back to the desired form
N*     join with newlines

얼마나 1>W<짧게 만들려고했는지 잘 모르겠습니다 . 배열을 인코딩하기 전에 회전 만하면된다는 사실이 밝혀졌습니다 2>.
Dennis

23

CJam, 103 92 83 69 66 57 바이트

"O5àäªÞáKZò,_÷%SJ«Ò"248b5b"/ \_|"f=9/4/~ri*1>W<+2m<zN*

CJam 통역사 에서 온라인으로 사용해보십시오 .

생각

열이있는 행 (공백으로 오른쪽에 채워짐)을 바꾸면 패턴이 훨씬 더 명확 해집니다.

예 를 들어 입력 3의 경우 다음을 제공합니다.

  ||  || 
 /  \/  \
_ /\ \/\_
_ \/\ \/_
 \/ /\/ /
 / /\/ /\
_ /\ \/\_
_ \/\ \/_
 \/ /\/ /
 / /\/ /\
_ /\ \/\_
_ \/\ \/_
 \  /\  /
  ||  || 

처음 두 행과 마지막 두 행은 특별하지만 다른 행은 반복해서 같은 패턴을 반복합니다.

따라서 입력 N의 경우 반복하면됩니다.

 / /\/ /\
_ /\ \/\_
_ \/\ \/_
 \/ /\/ /

N 번, 첫 번째 행을

  ||  || 
 /  \/  \

마지막 행

 \  /\  /
  ||  || 

마지막으로 행을 열로 바꿉니다.

암호

"O5àäªÞáKZò,_÷%SJ«Ò"

248b  e# Convert the string (array of code points in base 248) to an integer.
5b    e# Convert the integer to the array of its digits in base 5.

      e# This pushes the following array:

      e# [ 1 2 1 1 0 2 1 1 0 1 1 4 4 1 1 4 4 1 1 1 4 4 1 1
      e#   4 4 1 1 0 1 1 2 0 1 1 2 1 0 1 0 2 0 1 0 2 3 1 0
      e#   2 1 2 0 2 3 3 1 2 0 2 1 2 0 3 1 2 0 1 0 2 0 1 0 ]

"/ \_"

f=    e# Retrieve the chars that correspond to the indexes in the array.

      e# This pushes the following string:

      e# " \  /\  /  ||  ||   ||  ||  /  \/  \ / /\/ /\_ /\ \/\__ \/\ \/_ \/ /\/ /"

9/4/~ e# Divide into groups of 4 strings of length 9.

      e# This pushes the following arrays:

      e# [ " \  /\  /"   "  ||  || "   "  ||  || "   " /  \/  \" ]
      e# [ " / /\/ /\"   "_ /\ \/\_"   "_ \/\ \/_"   " \/ /\/ /" ]

ri    e# Read an integer from STDIN.
*     e# Repeat the last array that many times.
1>W<  e# Remove the first and last string from the array.
+     e# Concatenate both arrays.
2m<   e# Rotate the concatenated arrays two elements to the left.
z     e# Zip the array of strings (transpose rows with columns).
N*    e# Join the strings of the array, separating by linefeeds.

12

자바 ( ES7 초안 ) 169 163 160 158 바이트

편집 : -6 템플릿 문자열을 사용하여 패턴 문자열에서 일부 반복을 제거합니다.

패턴 스트링을 재 배열하여 에서 slice(0,-2)로 전환하여 -3을 편집하십시오 slice(2).

편집 : 모듈러스를 사용 하여 문자열을 4로 줄이지 b않고 반복하여 반복하여 -2aa

F=N=>[(a='  ||'[i%4])+b[i]+`  __0\\/ ${c=' 0/ /\\0 /\\/0/\\'} \\0\\/\\${c}__`.split(0)[i].repeat(N).slice(2)+(b+b)[9-i]+a for(i in b=' /  \\/  \\')].join(`
`)
<input id="stdin" value="4" />
<button onclick="stdout.innerHTML=F(stdin.value)">Run</button><br />
<pre id="stdout"></pre>

댓글 :

F=N=>[ // define function F, start array comprehension to generate each line
    (a = '  ||'[i % 4]) + // first character of the line, store copy in a
    b[i] + // second character of each line
        `  __0\\/ ${c=' 0/ /\\0 /\\/0/\\'} \\0\\/\\${c}__`. 
        // list of patterns for each line delimited by 0's
        // results in string: '  __0\/  0/ /\0 /\/0/\ \0\/\ 0/ /\0 /\/0/\__'
        split(0)[i]. // split by 0, get index at i
        repeat(N). // repeat N times
        slice(2) + // chop off the first 2 characters
    (b + b)[9 - i] + // get opposite of second character, b+b to get a space at index 9
    a // repeat first character (a)
    for(i in b = ' /  \\/  \\') // runs for each index in character map b
].join(` // join resulting array with newlines
`)

나는 당신이 전에 문자열을 대체 할 수있는 생각 .split(0)과 함께 ('__ 0 '+(r='\\/0/\\/ 0\\/ /0 ')+r+'0\\/ /0__/\\').
flawr

@flawr 나는 비슷한 방법을 사용하여 더 압축 할 수 있었다 :)
nderscore

0당신이 그것을 통과 하면, 당신은을 볼 수 8있습니다.
Ismael Miguel

그것들 `` ${...}정확히 무엇을합니까?
flawr

@flawr 백틱 구문은 템플릿 문자열을 선언 합니다 . 내부의 모든 ${}것은 자바 스크립트 표현식으로 평가됩니다.
nderscore

9

134 129

print s/...\K.{4}/$&x~-"@ARGV"/er=~y!iolp!| /\\!r,$/for
map/i/?$_.oi:"o$_$_".o,o__o,loop,@x=(iolplolp,ioplolpl),popl,lpop,@x,p__l

명령 행 매개 변수를 사용합니다.

$ perl ~/knot.pl 3
  __  __  __  
 /  \/  \/  \ 
| /\/ /\/ /\ |
| \/ /\/ /\/ |
 \ \/\ \/\ \/ 
 /\ \/\ \/\ \ 
| /\/ /\/ /\ |
| \/ /\/ /\/ |
 \__/\__/\__/ 

8

자바 스크립트 ( ES6 ) 165 166

매듭 요소 :

  • '__'및 '/ \'반복에 따라 2 개의 최상위 행
  • '/ \ /'를 기준으로 반복되고 '| ... | '
  • '\ / \'를 기준으로 '... /'및 '/ ... \'로 묶인 2 개의 내부 행
  • 위의 동일한 2 개의 외부 행
  • '\ __ /'을 기준으로 한 맨 아래 행

언 골프

K=r=>
{
  R = x => x.repeat(r);
  S = d => R(elem).slice(d,d-2); // use global 'elem' that must be assigned before the call
  elem = '/\\/ '
  outer = '\n| ' + S(0) + ' |\n| ' + S(1) + ' |\n '
  elem = '\\ \\/'
  inner = '\\' + S(1) + '/\n /' + S(0) + '\\'
  return R('  __') + '\n ' + R('/  \\') + outer
  + inner + outer + R('\\__/')
}

골프

K=r=>(S=d=>(R=e=>e.repeat(r))(e).slice(d,d-2),o=`
| ${S(0,e='/\\/ ')} |
| ${S(1)} |
 `,R('  __')+`
 ${R('/  \\')+o}\\${S(1,e='\\ \\/')}/
 /${S(0)}\\${o}`+R('\\__/'))

// TEST

function go() {
  O.innerHTML=K(I.value)
}

go()
<input id=I value=5><button onclick='go()'>-></button><br>
<pre id=O></pre>


2
0그것을 통과하려고 하면 4 다리 거미가 생깁니다.
Ismael Miguel

8

C ++, 1530 639 479

이 내용은 내가 간략하게 조금 벗어난 재미있는 도전처럼 보였다.

#include "stdafx.h"
#include <iostream>
#include <sstream>
using namespace std;
string a=" __ ",b="/  \\",c=" /\\",d="/\\/ ",f="\\ \\/",g="/\\\ \\",r="\\__/",o="",e=o,j="|";
string q(int n,string r,string x="",string m=" ",string t=" "){string z=o;for(int i=0;i<n;i++){z+=r;if(i!=n-1)z+=x;}return m+z+t+"\n";}
int main(){int x,y;cin>>x;cin>>y;e+=q(x,a)+q(x,b);for(int i=0;i<y;i++){e+=q(x,c,"/",j," |")+q(x-1,d,o,"| \\/ ",j);if(i!=y-1){e+=q(x,f)+q(x,g);}}e+=q(x,r);cout<<e;}

내 응용 프로그램 크기의 바이트를 측정하는 방법을 모르지만 그것을 알아 내고 대답을 업데이트하려고합니다.

내 응용 프로그램은 더 작을 수 있지만 x와 y 모두에서 반복되며 나는 다음과 같습니다.


1
PPCG에 오신 것을 환영합니다! 점수는 소스 코드의 크기이며 1530 바이트입니다. 주석과 공백을 제거하고 변수 및 함수 이름을 줄임으로써 바이트 저장을 시작할 수 있습니다.
데니스

Wowzor는 그보다 더 큰 나머지 하하보다 큽니다. D
Spaceman

6

파이썬 2 156 151 147 141 139

편집 1 : 함수 대신 input ()을 사용하도록 편집했습니다.

편집 2 : str.join을 사용하고 var c에 추가하여 중복 문자를 제거했습니다.

편집 3 : 불필요한 문자열 이스케이프 시퀀스가 ​​제거되었습니다.

편집 4 : a = n-1 대신 ~ -n 사용

이것은 첫 번째 코드 골프를 프로그래밍하는 것이 즐거웠습니다!

n=input()
a='/\/ '*~-n
b='\ '+'\/\ '*~-n+'\\'
c='\n| '+a+'/\ |\n| \/ '+a+'|'
print'\n '.join(('  __'*n,'/  \\'*n+c,b+'/','/'+b+c,'\__/'*n))

파일 크기를 1 바이트 줄이려면 모듈을 실행하고 번호를 입력하기 위해 마지막 개행 문자를 제거하려면 외부 텍스트 편집기에 n.py로 저장하십시오.


이 프로그램의 실행 문 뒤의 숫자를 오른쪽으로 입력 할 수있는 경우, 본인은 151 바이트로 아래로 제거 할 수 있습니다
micsthepick

input ()STDIN에서 읽을 때는 일반적으로 괜찮습니다.
seequ

내가 저장 한 볼 a=n-1작성에 저장 *(n-1)두 번,하지만 당신은 *~-n .
xnor

값을 두 번 사용하지만 팁이 좋기 때문에 여전히 같은 양의 문자입니다.
micsthepick

파이썬이 문자열에서 백 슬래시를 처리하는 방식에 약간의 바이트를 저장할 수 있으므로 항상 인코딩 할 필요는 없습니다. 참조 stackoverflow.com/a/16973452/3351622
매티

5

파이썬 2 139 133 129 바이트

n=input()
for i in range(9):w=' ?|'[i&2];s=' / /\/ /\_ /\ \/\__ \/\ \/_ \/ /\/ /'[i::9]*n;s=(s,' %s '%s[1:-1])[i%4>1];print w+s+w

이것은 한 줄씩 작성하고 인쇄합니다.

ungolfed 형식의 코드는 다음과 같습니다.

n=int(input())
# The list with all the knot pieces
l= [' __ ',
    '/  \\',
    ' /\/',
    '/\/ ',
    '\ \/',
    '/\ \\',
    ' /\/',
    '/\/ ',
    '\__/']
# The first and last columns
w = '  ||  || '
# Loop for each row
for i in range(9):
    # Exception for the first and last character in the knot (in some rows)
    s = l[i]*n
    if i % 4 > 1:
        s = ' ' + s[1:-1] + ' '
    # Print the knot for this row
    print(w[i] + s + w[i])

편집 : # 3에 대한 답변 과 호환되도록 언어를 python 2로 변경 했습니다 (또한 6 바이트를 더 절약합니다)


내가 생각 w=(3*' ||')[i] -> w=' |'[i&2]하고 ' '+s[1:-1]+' ' -> ' %s '%s[1:-1]작업 (첫 번째는있는 문자열 이 개 다음 파이프 공간, 그러나 SE의 최대 행동)
SP3000

@ Sp3000 감사합니다! 그 첫 번째는 꽤 똑똑합니다. 나는 생각해야 ' ||'[i%4]했지만 이것은 더 짧습니다 ( 두 개의 공백이 있습니다).
Matty

3

C, 159 바이트

j,k;f(n){char*t="7>771I;M6CMI93;IIB;;MI1M;M6CMI93;IIB;>MI";for(n*=4;t[j/2];++k,k%=n+3,j+=k-n?k%n<3||k%4-2?1:-3:3)putchar("\n _|/\\"[(t[j/2]-48)/(j%2?1:6)%6]);}

공백 및 기타 가독성 개선 :

#include <stdio.h>

int j, k;

void f(int n) {
    char *t = "7>771I;M6CMI93;IIB;;MI1M;M6CMI93;IIB;>MI", *m = "\n _|/\\";
    for (n *= 4; t[j / 2];
         ++k,
         k %= n + 3,
         j += k - n ? k % n < 3 || k % 4 - 2 ? 1 : -3 : 3)
        putchar(m[(t[j / 2] - 48) / (j % 2 ? 1 : 6 ) % 6]);
}

주로 템플릿 기반입니다. 템플릿 t에는 9 개의 가능한 출력 열이 모두 포함됩니다. 즉, 후행 줄 바꿈없이 9 * 9 = 81 자 또는 80을 인코딩합니다.

패턴에는 개행 문자를 포함하여 6 개의 다른 문자 만 있기 때문에 두 개의 문자 쌍을 하나의 템플리트 문자로 패키징했습니다. 이는 템플리트를 40 자로 저장할 수 있음을 의미합니다. 그러면 6 * 6 = 36 개의 가능한 문자 쌍이 있으며 ASCII 문자 48-73으로 인코딩됩니다. 원래 문자로의 변환은 작은 조회 테이블에 의해 제공됩니다 m.

나머지 논리는 주로 패턴 n시간 을 반복하는 것입니다. 즉, 템플릿에서 4자를 뒤로 건너 뛰면서 각 행의 시작 부분과 끝 부분을 올바르게 방출합니다.


2

PHP 5.5.3, 488 , 466

<?php 
function k($n){$r=array_fill(0,9,'');for($i=0;$i<$n;$i++){$r[0].=($i==0)?"  __ ":" __ ";$r[1].=($i==0)?" /  \\":"/  \\";$r[2].=($i==0)?"| /\\/":(($i==$n-1)?" /\\ |":" /\\/");$r[3].=($i==0)?"| \/ ":(($i==$n-1)?"/\/ |":"/\/ ");$r[4].=($i==0)?" \\ ":(($i==$n-1)?"\\/\\ \\/":"\\/\\ ");$r[5].=($i==0)?" /\\ ":(($i==$n-1)?"\\/\\ \\":"\\/\\ ");$r[6]=$r[2];$r[7]=$r[3];$r[8].=($i==0)? " \__/":"\__/";}foreach($r as $o){if(strlen($o)-2 !== 4*$n)$o.=" ";echo $o."\n";}}

연산자 주변의 불필요한 공백을 제거하여 일부 문자를 절약 할 수 있습니다 (예 : =및 문자) .=.
ProgramFOX

Thx 나는 답을 편집했다
Med

2

프롤로그 (SWI), 285 바이트

a(N):-b(N,"  ||  || "," /  \\/  \\","_ /\\ \\/\\_","_ \\/\\ \\/_"," \\/ /\\/ /"," / /\\/ /\\"," \\  /\\  /"). b(N,[A|G],[B|H],[C|I],[D|J],[E|K],[F|L],[Y|Z]):-c(N,[Y,A],[E,F,C,D],T),writef([A,B,C,D|T]),nl,b(N,G,H,I,J,K,L,Z). c(1,L,_,L):-!. c(N,L,X,O):-M is N-1,c(M,L,X,T),append(X,T,O).

(공백 포함) :

a(N):-
    b(N,
    "  ||  || ", 
    " /  \\/  \\", 
    "_ /\\ \\/\\_", 
    "_ \\/\\ \\/_", 
    " \\/ /\\/ /", 
    " / /\\/ /\\", 
    " \\  /\\  /").

b(N,[A|G],[B|H],[C|I],[D|J],[E|K],[F|L],[Y|Z]):-
    c(N,[Y,A],[E,F,C,D],T),
    writef([A,B,C,D|T]),
    nl,
    b(N,G,H,I,J,K,L,Z).

c(1,L,_,L):-!.
c(N,L,X,O):-
    M is N - 1,
    c(M,L,X,T),
    append(X,T,O).

나는 문자열을 자르는 몇 가지 방법을 시도했지만 아무도이 순진한 열 방법을 능가하지 않는 것 같습니다.


2

자바 스크립트 (ES6) 158 154 148 137 바이트

n=>`    __
 /\\/ - \\/
 /\\/\\-__/`.replace(/-/g,` \\
| / /\\ |
|  /\\/ |
 \\/\\`).replace(/(..)(....)/g,(_,l,m)=>l+m.repeat(n).slice(2))

편집 : @ Bálint 덕분에 11 바이트가 절약되었습니다.


@ Bálint 그러나 /(..)(.{4})/g같은 13 바이트입니다 /(..)(....)/g...
Neil

@ Bálint 나는 실제로 이전의 4 바이트 절약이 그렇게 할 수 있다는 것을 깨달았지만 그 당시에는 컴퓨터에서 떨어져있었습니다.
Neil

트윗 담아 가기 반복되는 \\ / \\ 세그먼트를 피하는 방법을 살펴 보았지만 더 긴 반복 하위 문자열을 확인하지는 않았습니다.
Neil

1

자바, 339330 바이트

class D{int n,i;public static void main(String[]a){new D(new Integer(a[0]));}D(int k){n=k;r("  __");p("\n ");r("/  \\");c();r("\\ \\/");p("\n ");r("/\\ \\");c();r("\\__/");}void c(){p("\n|");--n;r(" /\\/");p(" /\\ |\n| \\/");r(" /\\/");++n;p(" |\n ");}void p(String s){System.out.print(s);}void r(String s){for(i=n;i>0;--i)p(s);}}

첫 번째 솔루션에는 너무 많은 "정적"키워드가있어서 메소드와 속성을 비 정적으로 만들고 생성자에서 코드를 실행하는 것이 더 짧았습니다.


1

PowerShell을 228 207 181 133 바이트

%{"  "+"__  "*$_;" "+"/  \"*$_;$b="|"+" /\/"*$_+"`b |";$b;$c="| "+"\/ /"*$_+"`b|";$c;" "+"\ \/"*$_;" "+"/\ \"*$_;$b;$c;" "+"\__/"*$_}

알림-PowerShell은 stdin을 자동으로 기다리지 않습니다. 예를 들어 무언가를 파이프해야합니다.3|%{...}


0

SmileBASIC, 149 바이트

INPUT N?"  __"*N
A$="| / /\ |
B$="|  /\/ |
K" /\/  \
K A$K B$K" \/\ \/
K" /\/\ \
K A$K B$K" \/\__/
DEF K A?SUBST$(A,2,4,MID$(MID$(A,2,4)*N,2,N*9))END

각 문자열에는 AACCBBDD확장 된 패턴 이 포함되어 있습니다 AABB(CCBB)*DD. CCBB부분은 N 번 반복 된 후 처음 두 문자가 제거됩니다. (끝에서보다 처음부터 문자를 제거하는 것이 더 짧았습니다)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.