카오스는 ASCII 사다리입니다 개행 문자가 포함

당신은 아무것도 몰라 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이 있으므로 총 높이는입니다 .NN+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.

ω

빈 문자열을 사용하여 결합하십시오. 최종 결과는 암시 적으로 인쇄됩니다.