당신은 아무것도 몰라 I가하는 일 ” 혼돈은 사다리이다가 “ 텔레비전 시리즈에서 기억에 남는 라인 왕좌의 게임 .
이 과제의 목적은 ASCII 기술로 혼란에서 사다리를 만드는 것입니다.
도전
입력
- 사다리 폭
W >= 3
(정수) - 스텝 높이
H >= 2
(정수) - 렁 수
N >= 2
(정수).
산출
사다리와 수평 렁 및 수직 레일 모두 1 개 문자 폭. 래더 폭 ( W
)에는 2 개의 레일이 포함되며 계단 높이 ( H
)에는 해당 렁이 포함됩니다.
맨 위와 맨 아래를 포함한 모든 렁은 H-1
바로 위와 아래 에 세로 길이의 세로 레일이 있습니다. 이 예는 이것을 더 명확하게합니다.
사다리가보기로한다 인쇄, 공백이 아닌 ASCII 문자 ,의 포함 범위, !
(코드 포인트 33
에) ~
(코드 포인트 126
국지적 실제 문자가 선택됩니다) 무작위로 . 입력이 주어지면, 임의의 문자 선택은 각각 0이 아닌 확률을 가져야합니다. 그 외에 확률 분포는 임의적입니다.
가로 또는 세로의 선행 또는 후행 공백 이 허용됩니다.
예
주어진 W=5, H=3, N=2
하나의 가능한 출력은 다음과 같습니다.
x :
g h
q$UO{
t T
6 <
bUZXP
8 T
5 g
가로대와 세로 섹션 H*(N+1)-1
이 있으므로 총 높이는입니다 .N
N+1
중재 규칙
-
입력 수단과 형식은 평소처럼 유연 합니다. 예를 들어, 3 개의 숫자를 임의의 순서로 입력하거나 숫자를 포함하는 배열을 입력 할 수 있습니다.
-
출력은 STDOUT 또는 함수에 의해 리턴 된 인수를 통해 이루어질 수 있습니다. 이 경우 개행 문자가 포함 된 문자열, 2D 문자 배열 또는 문자열 배열 일 수 있습니다.
-
프로그램이나 기능 을 제공 할 수 있습니다.
-
표준 허점 은 금지되어 있습니다.
-
바이트 단위의 최단 코드가 이깁니다.
테스트 사례
각각 W, H, N
가능한 출력이 표시됩니다.
W=5, H=3, N=2:
\ ~
: K
ke:[E
5 u
0 _
8Fr.D
# r
7 X
W=3, H=2, N=2:
$ X
Mb)
0 ]
(T}
j 9
W=12, H=4, N=5:
d Y
P `
5 3
p$t$Ow7~kcNX
D x
` O
* H
LB|QX1'.[:[F
p p
x (
2 ^
ic%KL^z:KI"^
C p
( 7
7 h
TSj^E!tI&TN8
| [
< >
= Q
ffl`^,tBHk?~
O +
p e
n j
W=20, H=5, N=3:
G %
o y
% 3
- 7
U'F?Vml&rVch7{).fLDF
o }
U I
h y
a g
;W.58bl'.iHm\8v?bIn&
, U
N S
4 c
5 r
F3(R|<BP}C'$=}xK$F]^
' h
h u
x $
6 5
답변
젤리 , 24 23 22 바이트
«þỊoU$ẋ⁵‘¤Ḋ×94X€€+32ỌY
전체 프로그램은 세 개의 인수를 복용 W
, H
, N
그 결과를 인쇄.
어떻게?
단일 렁과 아래의 수직 섹션으로 2D 배열 마스크를 만들고 반복 N+1
하고 상단 렁을 제거한 다음 마스크 값에 따라 임의의 문자 또는 공백을 배치합니다.
«þỊoU$ẋ⁵‘¤Ḋ×94X€€+32ỌY - Main link: W, H (N is third input / 5th command line argument)
þ - outer product (build a table using):
« - minimum
- ...note: þ implicitly builds ranges of W and H prior
Ị - insignificant? (abs(z)<=1) - yields a W by H 2-d array,
- all zeros except the left and top edges which are 1s
$ - last two links as a monad:
U - upend (reverse each row)
o - or (vectorises) - giving us our |‾| shape of 1s
¤ - nilad followed by link(s) as a nilad:
⁵ - 5th command line argument, N
‘ - increment -> N+1
ẋ - repeat list - giving us our ladder-mask plus a top rung)
Ḋ - dequeue - remove the top rung
94 - literal ninety-four
× - multiply (vectorises) - replace the 1s with 94s
X€€ - random for €ach for €ach - 0 -> 0; 94 -> random integer in [1,94]
32 - literal thirty-two
+ - add (vectorises) - 0 -> 32; random integers now from [33,126]
Ọ - character from ordinal (vectorises)
Y - join with newlines
- implicit print
답변
인화점 스크립팅 언어, 643 624 바이트
f={l=["""","!","#","$","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"];t=_this;w=t select 0;r={l select random 92};v="";s=v;i=2;while{i<w}do{i=i+1;v=v+" "};p={i=1;while{i<t select 1}do{i=i+1;s=s+call r+v+call r+"\n"}};k=0;call p;while{k<t select 2}do{k=k+1;i=0;while{i<w}do{i=i+1;s=s+call r};s=s+"\n";call p};s}
문자 코드에서 문자를 만들 수있는 방법이 없기 때문에 엄청나게 길다.
전화 :
hint ([5, 3, 2] call f)
산출:
글꼴이 고정 폭이 아니기 때문에 사다리는 더욱 혼란 스럽다.
풀림 :
f =
{
l = ["""","!","#","$","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"];
t = _this;
w = t select 0;
r =
{
l select random 92
};
v = "";
s = v;
i = 2;
while {i < w} do
{
i = i + 1;
v = v + " "
};
p =
{
i = 1;
while {i < t select 1} do
{
i = i + 1;
s = s + call r + v + call r + "\n"
}
};
k = 0;
call p;
while {k < t select 2} do
{
k = k + 1;
i = 0;
while {i < w} do
{
i = i + 1;
s = s + call r
};
s = s + "\n";
call p
};
s
}
답변
05AB1E , 29 바이트
순서대로 입력 N, H, W
>*GNUžQ¦©.RIÍFð®.R«X²Öè}®.RJ,
설명
>*G # for N in [1 ... (N+1)*H)-1] do:
NU # store N in variable X
žQ # push a string of printable ascii
¦© # remove the first (space) and save a copy in register
.R # pick a random character
IÍF # W-2 times do:
ð # push a space
®.R # push a random ascii character
« # concatenate
X²Ö # push X % H == 0
è # index into the string of <space><random_char> with this
} # end inner loop
®.R # push a random ascii character
J, # join everything to a string and print
답변
C, 95 바이트
f(w,h,n,i){++w;for(i=0;i++<w*~(h*~n);)putchar(i%w?~-i%w%(w-2)*((i/w+1)%h)?32:33+rand()%94:10);}
답변
R , 138 (129) 111 98 93 바이트
Neal Fultz 덕분에 -13 바이트!
Robin Ryder 덕분에 -1 바이트
function(W,H,N){m=matrix(intToUtf8(32+sample(94,W*(h=H*N+H-1),T),T),h)
m[-H*1:N,3:W-1]=" "
m}
익명의 기능; 결과를 행렬로 반환합니다.
그 단어 그리드 질문 으로 인해, 나는 평소보다 훨씬 더 행렬에 대해 생각했습니다. 렁은 계단 높이의 배수 인 H
(R은 1- 인덱싱 된) 행렬 행에 있고 레일은 첫 번째 및 마지막 열 1
이며 W
. 그래서 임의의 ASCII 문자로 구성된 행렬을 만들고 해당 기준과 일치하지 않는 문자를 공백으로 바꾸고 행렬을 반환합니다. TIO 링크가 멋지게 인쇄합니다.
닐 퓰츠 다른 우주 문자 색인 제안 [-H*(1:N),3:W-1]
의 배수의 행에있는 사람들을 제외한 모든 문자를 대체 H
: -H*(1:N)
가장자리에하지 3:W-1
<==>을 2:(W-1)
.
R , 121 바이트
function(W,H,N)for(i in 1:(H*N+H-1)){for(j in 1:W)cat("if"(!(i%%H&j-1&j-W),sample(intToUtf8(33:126,T),1)," "))
cat("\n")}
내가 시작한 원래의 매트릭스 기반 접근법에 대한 개선; 그것은 동일한 알고리즘이지만 for
루프는 행렬을 구성하고 인쇄하는 것보다 짧습니다 (그러나 인쇄하지 않으면 안됩니다!)
답변
펄 5 , 81 바이트
80 바이트 코드 + 1 -p
.
/ \d+ /;$_=(($}=(_.$"x($`-2)._.$/)x($&-1))._ x$`.$/)x$'.$};s/_/chr 33+rand 94/ge
답변
숯 , 34 32 바이트
E…¹×⁺¹NN⪫EIζ⎇∧﹪ιIη﹪λ⁻Iζ¹ §⮌γ‽⁹⁴ω
온라인으로 사용해보십시오! N, H, W 순서로 입력을 받습니다. Verbose 근사값 ( Plus(InputNumber(), 1)
현재 TIO에서는 깨짐). 설명:
E…¹×⁺¹NN
범위를 넘는지도 1..H*(N+1)
. 이것은 횡선 i
이의 배수 일 때 나타납니다 H
.
⪫
다음의 결과에 참여하십시오.
EIζ
암시 적 범위의 매핑 0..W
:
⎇∧﹪ιIη﹪λ⁻Iζ¹
열이없는 경우 0
또는 W-1
상기 행의 배수가 아닌 H
다음 출력 공간;
§⮌γ‽⁹⁴
그렇지 않으면, 사전 정의 된 ASCII 문자 변수를 가져 와서 뒤집어 (공간을 94 위에두고), 현재 첫 번째 94부터 임의의 문자를 인쇄하십시오 Slice
.
ω
빈 문자열을 사용하여 결합하십시오. 최종 결과는 암시 적으로 인쇄됩니다.