ASCII 양말 양말


15

소개

짧은 이야기 : 며칠 전 실수로 양말을 뜨개질하기 시작했고 평범한 스티치의 논리적 구조로 인해 아이디어가 나옵니다.

입력

입력 범위의 짝수 정수 N입니다 [2,30].

산출

결과는 분명히 양말입니다.

구조

우리는 일반 스티치 만 사용 v하기 때문에 아래쪽 스티치와 >오른쪽 스티치 에만 사용 합니다 . 다음에 대한 예제를 통해 전체 구조를 설명하겠습니다 N=8.

vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvv>>>
vvvvvv>>>>>>
vvvvv>>>>>>>>>
vvvv>>>>>>>>>>>>
vvvv>>>>>>>>>>>>>>>>>>>>>>>>
vvvv>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvv>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvv>>>>>>>>>>>>>>>>>>>>>>>>
  • 첫 번째 블록은 상단입니다. 너비 N와 높이가N*1.5
  • 그 후 발 뒤꿈치가 시작됩니다. 너비 v가 될 때까지 오른쪽에서 행당 하나를 뺍니다 N/2. 그런 다음 아래에 니트를 완성하기 N/2위해 너비가 N/2아래에 행 을 추가 합니다 . N/2 + 1너비 가있는 총 행을 제공합니다.N/2

첫 번째 부분:

vvvvvvvv    //begin with width N
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv
vvvvvvvv    // N*1.5 times
vvvvvvv     // reduce
vvvvvv
vvvvv
vvvv        // till here
vvvv        // repeat N/2 times
vvvv
vvvv
vvvv
  • 이제 옆구 니트가 시작됩니다. 첫 번째 줄을 줄로 시작 >하여 너비가 될 때까지 채우고 N두 개를 더 추가하십시오. N/2너비가 있는 첫 번째 행을 포함하여 해당 프로세스를 계속하십시오.
  • 해당 레벨 아래의 행을 채우고 그에 N*1.5시간 >을 추가하십시오
  • 있는 그대로 외부 부품을하자 더 먼저 아래와 LASE 이상 2 행에 추가 >'s가 완료 될 때까지

두 번째 부분 :

vvvvvvvv
vvvvvvv>>>  //fill to N and add two >
vvvvvv>>>>>>     //repeat
vvvvv>>>>>>>>>
vvvv>>>>>>>>>>>>   //till here
vvvv>>>>>>>>>>>>>>>>>>>>>>>>       //fill to the row above and add N*1.5 times >
vvvv>>>>>>>>>>>>>>>>>>>>>>>>>>     //add two more '>' than the row above
vvvv>>>>>>>>>>>>>>>>>>>>>>>>>>     //add two more '>' than the row beneath
vvvv>>>>>>>>>>>>>>>>>>>>>>>>

규칙

후행 줄은 괜찮습니다.

대문자 또는 소문자 중에서 선택할 수 V있지만 일관성이 있어야합니다.

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

테스트 사례

N=2
vv
vv
vv
v>>>
v>>>>>>

N=4
vvvv
vvvv
vvvv
vvvv
vvvv
vvvv
vvv>>>
vv>>>>>>
vv>>>>>>>>>>>>
vv>>>>>>>>>>>>

N=6
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvvv
vvvvv>>>
vvvv>>>>>>
vvv>>>>>>>>>
vvv>>>>>>>>>>>>>>>>>>
vvv>>>>>>>>>>>>>>>>>>>>
vvv>>>>>>>>>>>>>>>>>>

N=12
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvvv
vvvvvvvvvvv>>>
vvvvvvvvvv>>>>>>
vvvvvvvvv>>>>>>>>>
vvvvvvvv>>>>>>>>>>>>
vvvvvvv>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vvvvvv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

2
후행 줄 바꿈이 괜찮기를 바랍니다. (또한 실수로 어떻게 양말을 뜨개질을 시작합니까?)
Greg Martin

3
@GregMartin 할머니를 찾아갔습니다. 그녀에게 거절하기가 어렵 기 때문에 여기로갑니다 :) 이틀 전에 첫 번째를 마쳤습니다. 나는 그것이 괜찮다고 생각하지만 실제로 작업량을 과소 평가했습니다. 누군가가 당신을 위해 양말을 만들었다면 기뻐하십시오.
izlin

사용 v하거나 V상호 교환 할 수 있습니까 ? 나는 v허용되는 유일한 순간 이지만 가정 V하면 바이트 수에 영향을 줄 것입니다
Golden Ratio

@GoldenRatio 규칙을 변경했습니다. 이제 둘 다 허용됩니다.
izlin

@GurupadMamadapur 'Input'에서 읽을 수 있듯이 짝수 만 입력으로 허용됩니다. 귀하의 프로그램은 홀수를 처리 할 필요가 없습니다
izlin

답변:


2

피스-93 바이트

J/Q2K"V"P*s*Q1.5+*QKbVJp*+Q_+1NK*+3*3N">";InQ2VJp*JK*+s*2aaNc-J 1 2c-J 1 2+3*Q3">";IqQ2pK*6">

설명:

J/Q2                             sets J to half of input
K"V"                             sets K to "V"
P                                prevents newline after main block of sock
*                                multiply the next 2 items
s*Q1.5                           rounds up input*1.5 (columns in main block)
+                                adds the next 2 item (this item gets multiplied by the previous item)
*QK                              multiplies "V" by input (resulting in each row)
b                                New line
VJ                               For all the numbers 0-((Q/2)-1) (as represented by N)
p                                print
*                                multiply the next 2 items
+Q_+1N                           input + -1*(1+N)
K                                "V"
*+3*3N">"                        3N+3 many ">"'s
;                                ends for statement
InQ2                             if input is not 2
VJ                               For all the numbers 0-((input/2)-1) (as represented by N)
p                                print
*JK                              input/2 many ">"'s
*+s*2aaNc-J 1 2c-J 1 2+3*Q3">"   int(abs(abs(N-((input/2)-1)/2)-((input/2)-1)/2)))+(input*3)+3 many ">"'s
;                                end of for statement
IqQ2                             if input is 2
pK*6">                           print "V" and 6 ">"'s

여기서 시도해보십시오!


2

수학, 104 바이트

""<>{t=Table;c=t[{"v"~t~#,">"~t~#2,"
"},#3]&;h=#/2;c[#,0,3h],c[#-i,3i,z={i,h}],c[h,6h+2Min[i-1,h-i],z]}&

이름없는 함수는 입력으로 양의 정수를 가져 와서 문자열 (후행 줄 바꿈)을 반환합니다. 위의 두 코드 줄 사이의 줄 바꿈은 코드의 일부입니다. 주요 작업은 cungolfed 정의 기능으로 수행됩니다.

c[#1, #2, #3] = Table[{Table["v", #1], Table[">", #2], "\n"}, #3]

"v"행은 여러 행으로 구성되고 그 뒤에 여러 줄로 구성되는 목록 테이블을 만듭니다 ">". 다행히도, 범위 #3외를위한이 Table표현에서 지칭 될 수있는 변수 이름을 가질 수 #1#2; 이를 통해 c상수 및 가변 인수로 함수 를 호출 할 수 있습니다. 나머지는 계산에 불과하고 문자열 결합 연산자 ""<>는 무료로 발생하는 중첩 목록을 평평하게 만듭니다.


2

파이썬, 3.5 183 177 바이트

n=int(input())
h=n//2
z=h%2
l=['v'*h+'>'*(2*n-h+3*h+i*2)for i in range(1*z+n//4)]
*map(print,['v'*n]*(3*h)+['v'*i+'>'*(3*(n-i))for i in range(h,n)][::-1]+[l,l[:-1]][z]+l[::-1]),

수신 설명.

온라인으로 사용해보십시오!


아시다시피, v2가 "초기 알파 단계"에있을 때 TIO Nexus는 현재 TIO v2보다 더 잘 작동합니다.

1 바이트를 저장하기 위해 'v'top에 변수를 할당 할 수 있습니다.
nedla2004

@JackBates Duly는 지적했다.
Gurupad Mamadapur

@ nedla2004 다음과 같은 의미 n,v=int(input()),'v'입니까? 그런 다음 아무것도 저장하지 않습니다.
Gurupad Mamadapur


1

배치, 279 바이트

@echo off
set i=for /l %%i in (2,2,%1)do 
set v=
%i%call set v=v%%v%%v
%i%echo %v%&echo %v%&echo %v%
%i%call:a
%i%call set v=%%v%%]]]
%i:,2,=,4,%call:c&if %%i lss %1 call set v=%%v%%]]
%i:2,=4,%call:b
exit/b
:a
set v=%v:~1%]]]]]
:b
set v=%v:~0,-2%
:c
echo %v:]=^>%

참고 : 두 번째 줄은 공백으로 끝납니다. 배치에 에코 문제가 있습니다> 변수에 있으므로 a) 대체를 사용해야합니다. b) 서브 루틴을 호출하여 수정 된 문자열을 에코합니다. 실제로 세 가지 서브 루틴이 있습니다.

  • a발 뒤꿈치에 사용됩니다. v매번 1 개씩 제거되고 3 개> 개가 추가됩니다. >서브 루틴이 b서브 루틴 으로 들어갈 수 있도록 두 개의 추가 가 추가 됩니다.
  • b발바닥에 사용됩니다. 두>매번 개씩 제거됩니다. 그런 다음 서브 루틴은 서브 루틴으로 넘어갑니다 c.
  • c 양말의 현재 행을 인쇄하여 자리 표시 자 문자를 대체하여 > s가 올바르게 인쇄 .

네 번째 줄은 다리의 너비를 처리하고 다섯 번째 줄은 길이를 처리합니다. 일곱 번째 줄은 발의 길이를 처리하는 반면, 여덟 번째 줄은 >>인쇄 후 각 줄에 2 개 를 추가하여 발 높이의 절반을 처리 합니다. 이것은 4의 배수 인 양말 크기에 적용되며, 가장 긴 라인이 반복되지 않도록 다른 양말 크기에 맞게 조정됩니다.


0

PHP, 229 바이트

상당히 게으른 접근

for($m=$n=$p=$argv[1];$i++<$q=$n*1.5;)echo($d=str_pad)("
",$n+1,v);for(;$p-->$n/2;)echo$s="
".$d($d("",$p,v),$m+=2,">");$r=[$s.=$d("",$q,">")];for($k=$n>>2;--$k;)$r[]=$s.=">>";echo join($r),$n&2?"$s>>":"",join(array_reverse($r));

선행 줄 바꿈을 인쇄합니다. 로 실행하십시오 -nr.

고장

// print first part + preparing some variables for later
for($m=$n=$p=$argv[1];$i++<$q=$n*1.5;)echo str_pad("\n",$n+1,v);

// print second part + prepare $s for third part
for(;$p-->$n/2;)echo$s="\n".str_pad(str_pad("",$p,v),$m+=2,">");

// third part: create an array of strings ...
$r=[$s.=str_pad("",$q,">")];
for($k=$n>>2;--$k;)$r[]=$s.=">>";
// ... then print it and its reverse
echo join($r),$n&2?"$s>>":"",join(array_reverse($r));

0

dc , 269 바이트

1k?d1.5*sadsdsb[[[v]nlb1-dsb0<f]dsfx[]pldsbla1-dsa0<c]dscxldd1-sisb2su[[[v]nlb1-dsbldli-<g]dsgx[[>]nlb1-dsblu+0<t]dstx[]plu2+suli1-dsilddsb2/!>m]dsmxld3*dsdsolidswst[[[v]nlw1-dsw0!>x]dsxx[2-]sa[2+]sy[[>]nlo1-dso0<g]dsgxldltli1+2/<yltli1+2/>adsdsolisw[]plt1-dst0!>f]dsfx

알았어 .. 이건 방대하다 . 쉽지는 않았지만, 모든 레지스터 참조, 비교, 매크로, 문자열 조작 능력 부족 등으로 무엇을 많이 말할지 모르겠습니다. 그럼에도 불구하고, 이것을 합치는 것이 즐거웠습니다. ? ;)

온라인으로 사용해보십시오!

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