단순한 용암 램프


18

소개:

나는 모든 사람들이 용암 램프가 무엇인지 알고 있다고 생각하지만, 그렇지 않은 경우 :

여기에 이미지 설명을 입력하십시오
(이미지 소스)

그들은 기본적으로 반투명 액체에 왁스를 포함하는 유리관입니다. 램프가 켜지면 바닥 부분이 가열되어 밀도가 변경되어 왁스가 맨 위로 떠 오릅니다. 그것이 식 으면 다시 쓰러져서 위에서 본 결과를 초래합니다.

램프의베이스가 고체 왁스를 액체 왁스로 변경하기에 충분할 정도로 온도가 상승하는 데 일반적으로 약 45-60 분이 걸립니다 (램프가 실온의 영역에있는 경우).

위의 일부 텍스트의 소스로도 사용되는 Wikipedia에 대한 자세한 정보.

도전:

n우리가 용암 램프를 켠 후 몇 분이 지 났는지를 나타내는 양의 정수가 주어지면, 5 개 레벨의 정수에 기초하여 용암 램프의 무작위 상태를 출력합니다.

이 문제를 해결하기 위해 Lava Lamp에는 총 1000 개의 왁스가 들어 있으며 왁스가있는 5 가지 레벨이 있습니다.

1) n45 미만인 경우 용암 램프가 여전히 가열 중이므로 1000하단에 4 개의 빈 줄이 표시 됩니다.





1000

2) n이 범위 내에 있으면 [45, 60)용암 램프가 왁스가 움직일 수있을 정도로 온도가 올라갔지 만 아직 높지는 않습니다. 왁스는 세 번째 수준까지 포함 할 수 있습니다.
3)의 경우가 n있다 60높거나, 왁스는 다섯 단계에서나 할 수있다.

양의 정수 n를 입력으로 지정하면 위의 세 가지 규칙을 염두에두고 임의의 상태를 출력합니다 .

다음은 예제 출력입니다.

어떤을 위해 가능한 출력 n입니다 >= 45:



523
106
371


913

87

어떤을 위해 가능한 출력 n입니다 >= 60:

73
113
312
5
497
284
55
637

24

대한 일정한 출력 n<= 44(임의의 수 및 출력 n)





1000

도전 규칙 :

  • 위의 레벨이 비어 있지 않더라도 빈 줄이있을 수 있습니다.
  • 그냥 0모든 라인에서 허용되지 않습니다. 대신 비어 있어야합니다.
  • 출력은 다소 유연합니다. 위와 같이 줄 바꿈으로 구분 된 결과 대신 문자열 / 객체의 목록 / 배열을 출력 할 수 있습니다. 내가 문자열 / 객체를 말하는 이유는 위의 규칙 때문입니다. 빈 라인이 있어야한다 "", null, [], 등,하지만 수 없습니다 0또는 음의 정수 (도가 될 수있다 false(IE) ["", "", 913, "", 87]에 대한 n >= 45). 또한 출력을 반대로 할 수 있습니다 (즉 1000\n\n\n\n대신 \n\n\n\n1000또는 [87, null, 913, null, null]대신[null, null, 913, null, 87] ).
  • 숫자는 모두 정수 여야합니다. 는 010 진수 값을 가진 10 진수 일 수 있지만 숫자에는 10 진수가 없어야하며 정수는 항상 정확하게 합산되어야합니다.1000 .
  • 다음을 기반으로 가능한 모든 랜덤 출력n 은 0이 아닌 확률을 가져야합니다.
  • 후행 줄 바꿈 (6 줄 출력)이 허용됩니다.

일반 규칙:

  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다.
    코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하십시오. '모든'프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오.
  • 표준 규칙이 적용됩니다 답변에 되므로 STDIN / STDOUT, 적절한 매개 변수 및 리턴 유형의 전체 프로그램과 함께 함수 / 방법을 사용할 수 있습니다. 당신의 전화.
  • 기본 허점 은 금지되어 있습니다.
  • 가능하면 코드 테스트 링크를 추가하십시오.
  • 또한 답변에 대한 설명을 추가하는 것이 좋습니다.


빈 레벨을 단일 공백으로 나타낼 수 있습니까?
Arnauld

@Arnauld 물론입니다. 0, 음수 또는을 제외한 모든 값이 될 수 있습니다 false.
Kevin Cruijssen

출력이 항상 5 레벨 n < 60입니까?
Emigna

@Emigna 예, 출력은 항상 5 단계입니다. 내용 n < 45만 1 레벨 그러나 충전된다 (상부 또는 하부의 순서로 출력하면을 따라) 1000. 와 45 <= n < 60다섯 세와와 n >= 60모두 다섯. 그러나 출력에는 항상 5 개의 '줄'이 포함됩니다.
Kevin Cruijssen

답변:


5

수학 골프 , 21 20 바이트

5º*♪{k[K∞╟(]m<Σ∞wΦ}σ

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

이것은 나의 새로운 언어로 된 첫 번째 대답입니다. 내 솔루션을 Emigna의 05AB1E 솔루션을 기반으로했지만 MathGolf의 깔끔한 기능을 사용하여 조금 짧게 만들었습니다.

설명

5º*                   push 5, [0], multiply (yielding [0,0,0,0,0]
   ♪                  push 1000
    {                 start block
     k                push input as integer
      K∞              push 22 and double it, yielding 44
        ╟(            push 60 and decrease, yielding 59
          α           wrap last two elements in array, yielding [44,59]
           m<         map is less than, giving [0,0], [1,0] or [1,1]
             Σ        sum array, giving 0, 1 or 2
              ∞       double, giving 0, 2 or 4
               w      push random integer in range
                Φ     increase array element
                 }    execute for loop (loops 1000 times)
                  σ   convert to string and remove leading zeroes (implicit map)

기능 자체가이 문제에 대한 기본 제공 기능이 아닌 경우 경쟁이 아닌 태그는 필요하지 않습니다. 작년 중반 부터 비경쟁은 더 이상 문제가되지 않습니다. 매우 새롭기 때문에 귀하의 언어에 대한 온라인 컴파일러가 아직 없다고 가정합니까? 대신 인증으로 일부 스크린 샷 (또는 스크린 샷이 너무 많으면 스크린 샷 링크를 추가)을 추가 할 수 있습니까? 그리고 내가 연락 할 @Dennis를 언어가 추가 될 수 있는지 물어 ' TryItOnline .
Kevin Cruijssen

2
@KevinCruijssen 의견을 보내 주셔서 감사합니다! 스크린 샷을 추가하고 언어를 TIO에 가져 오는 중입니다. 끊임없이 새로운 기능을 추가하지 않는다고 생각되면 Dennis에게 연락하겠습니다.
maxb

당신 의 언어를위한 공간 을 마련해 보셨습니까 ? 나는 그것을 배우는 데 매우 관심이 있습니다!
조 왕

@JoKing 당신이 관심을 가지고 기뻐요! 이번 주말 언젠가 방을 만들려고합니다. 나는 Dennis 덕분에 TIO에 관한 언어를 방금 받았으며, 모든 사람들이 이용할 수 있도록 노력하고 있습니다!
maxb

@JoKing 저는 MathGolf를 위한 공간을 만들었습니다 . 최대한 빨리 질문에 답변하려고 노력하겠습니다. 문서가 약간 완성되지 않았다는 것을 알고 있습니다.
maxb

8

파이썬 (2) , 117 (113) 108 107 106 105 바이트

from random import*
def f(n):a=['']*5;exec"i=randint(0,(n>44)+(n>59)<<1);a[i]=(a[i]or 0)+1;"*1000;print a

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

반전 된 목록을 반환합니다 (맨 아래)


주석의 스택 오버 플로우 답변 에서 영감을 얻은 버전 (가장자리가 더 낫습니다) :

파이썬 2 , 129 바이트

from random import*
def f(n):a=sorted([1000]*5+sample(range(1001)*5,(n>44)+(n>59)<<1));print[y-x or''for x,y in zip([0]+a,a)[:5]]

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


코드의 작동 방식을 정확히 모르지만 모든 주에서 제로가 아닌 확률이 발생합니까? 모든 숫자가 각각 3 개 또는 5 개 근처 333또는 근처에 200있습니다. 0또는에 스파이크 / 이상 치가 표시되지 않습니다 1000. 또는 천문학적으로 작은 (그러나 여전히 0이 아닌) 가능성이 근처 333및 근처의 정수 와 비교할 때 200입니까?
Kevin Cruijssen

1
1000 용암 단위 각각 @KevinCruijssen 랜덤 빈 (투입된다 0또는 0-20-4)을 계산. 그때 어느 쪽도 들어 가지 않을 가능성은 있지만 매우 작습니다.
TFeld

아, 알겠습니다. 이제 코드도 더 잘 이해하고 있습니다. 감사! 나에게서 +1
Kevin Cruijssen

7

자바 스크립트 (ES6), 78 바이트

빈 레벨이 공백으로 채워진 역 배열을 리턴합니다.

t=>(a=[...'     '],g=k=>k?g(k-1,a[Math.random()*(t>59?5:t<45||3)|0]++):a)(1e3)

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

댓글

t => (                      // t = input
  a = [...'     '],         // a[] = output array, initially filled with 5 spaces
  g = k =>                  // g = recursive function taking an iteration counter k
    k ?                     //   if k is not equal to zero:
      g(                    //     do a recursive call:
        k - 1,              //       decrement k
        a[                  //       update a[]:
          Math.random() * ( //         pick a random slot:
            t > 59 ? 5 :    //           among all 5 slots if t > 59
            t < 45          //           force the 1st slot if t < 45
            || 3            //           among the 3 first slots otherwise
          ) | 0             //         round the above result to an integer
        ]++                 //       increment the wax amount on this slot
      )                     //     end of recursive call
    :                       //   else:
      a                     //     stop recursion and return a[]
)(1e3)                      // initial call to g() with k = 1000

실제로 파이썬 답변에 대한 의견 과 동일한 질문이 있습니다 . 모든 주에서 제로가 아닌 확률이 발생합니까?
Kevin Cruijssen

1
1090

Rofl, 운석과 유사합니다. ;) 이제 실제로는 메소드가 Python 응답과 유사하다는 것을 알았습니다. 배열의 3 개 또는 5 개 지점 중 하나의 값을 최대 1000까지 넣는 점입니다. 좋은 대답입니다.
Kevin Cruijssen

6

R , 85 84 바이트

function(n)write(ifelse(t<-table(cut(runif(1e3,2*(n<60)+3*(n<45),5),0:5)),t,""),1,1)

@Giuseppe 덕분에 -1 바이트

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

설명 (ungolfed) :

function(n){
      # Generate 1000 random uniform numbers in [5,5] (if n<45),
      # in [2,5] (if 45<=n<60) and in [0,5] (if n>=60).
    x = runif(1e3,2*(n<60)+3*(n<45),5) 
      # Code each by the number of the interval it falls in (0,1],(1,2]...(4,5]
    cx = cut(x,0:5)
      # Tabulate the intervals. Because cut() returns a factor,
      # zero counts are included 
    t = table(cx)
      # Vector-wise replace zero elements with "" and cat out, 1 per line.
    t1 = ifelse(t,t,"")
    write(t1,1,1)
}

경우 NA빈 줄 / 요소로 허용, 여기에 77 바이트 용액 (이다 ! 온라인 체험 ) 또는 80 바이트 용액 ( ! 온라인으로 시도는 요소 이름에 문제가있는 경우)
duckmayr

6

C (gcc) , 131 , 116 , 90 , 89 , 87 바이트

L(l,a,v,A){for(A=5,v=1e3;A--;v-=a)printf("%d\n"+!a*2,a=l>59|A<3&l>44?rand()%-~v:!A*v);}

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

업데이트 : 원본 버그가 수정되었습니다. 도우미 기능에 융합하여 추가 15 바이트를 줄입니다.

업데이트 2 : ErikF 덕분에 -25 바이트.

업데이트 3 : ceilingcat 덕분에 -1 바이트.

데 고프

L(l,a,v,A){
    for(A=5,v=1e3;A--;v-=a)
        printf("%d\n"+!a*2, // No clue how this works anymore, but it'll advance the pointer 
                            // to the string constant when a number shouldn't be printed.
        a=l>59|A<3&l>44?rand()%-~v // Random integer to print in [0, v]
        :!A*v); // If bottom layer, return remaining volume
}

puts()인쇄물을 하나로 결합 printf()하고 빼기를 루프 끝에 넣음으로써 제거 할 수 있습니다 . 또한 srand()초기화를 호출자 에게 넣을 수 있다고 생각 합니다. 온라인으로 사용해보십시오!
ErikF

"제로 없음"제한을 놓쳤다는 것을 깨달았습니다. 고정 버전은 다음과 같습니다. 온라인으로 사용해보십시오!
ErikF


큰; 나는 추가 바이트로 골프를 쳤다.

1
또한, 우리는 해냈습니다! 우리는 파이썬을 이겼습니다!

5

05AB1E , 27 26 25 바이트

Adnan 덕분에 바이트를 절약했습니다 . Kevin Cruijssen
덕분에 다른 바이트를 절약했습니다 .

5Å0₄FD„,;ÇI‹O·ÝΩ©è>®ǝ]ε0Û

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

설명

5Å0                         # initialize with a list of 5 zeroes
   ₄F                       # 1000 times do:
     D                      # duplicate the list
      „,;ÇI‹                # check if the input is larger than 44 and/or 59
            O·              # sum and double, yielding (0,2 or 4)
             ÝΩ             # pick a random number between and 0 and the number above
               ©è           # get the count in that level
                 >          # increment it
                  ®ǝ        # insert it at the same position
                     ]      # end loop
                      ε0Û   # remove leading zeroes on each level

1
좋은 대답입니다! 나는 당신이 사용했던 방법을 좋아 5Å0하고 ǝ, 그리고 ε0Û마지막에. 나는 더 짧은 것을 생각해 냈지만 할 수 없습니다. 나는 그것이 어떻게 든 여전히 골프를 칠 수 있다는 느낌을 가지고 있지만 현재는 그것을 볼 수 없습니다 (아마도 불가능하고 임의의 느낌 일 수도 있습니다). 더 짧은 대신 •A–•60в1 바이트 더 깁니다 44 59‚. 그리고 s를 빈 문자열 ε0Û로 바꾸는 0것도 가장 짧은 것 같습니다. 0K단순히 0 항목을 완전히 제거하고 모든 숫자의 숫자 0를 제거하기 때문입니다.
Kevin Cruijssen

1
@KevinCruijssen : 예, 나는 더 짧은 방법을 찾고 보았지만 찾을 44 59‚수는 없습니다 ( •H|•2ô동일한 수). 내 이전 솔루션 (또한 27 바이트)이 사용 45되었고 60다른 방식으로 생성하기가 더 쉽지만 입력에 따라 1 , 3 또는 5 레벨을 출력하므로 항상 5 는 아니지만 유효하지 않다고 생각합니다 .
Emigna

아, •H|•2ô그것은 또한 현명한 방법입니다. 그리고 실제로 5 줄을 출력해야합니다. 나는 당신의 이전 답변을 실제로 보았고에 대해 한 줄만 출력했다고 언급하려고 n < 45했지만 삭제했습니다. 또 다른 27 바이트 솔루션을 찾았습니다. :)
Kevin Cruijssen

2
나는 생각한다 ŽH|2ô당신이 찾고있는 ?
Adnan

2
@KevinCruijssen 그것은 정확히 그렇게 작동합니다. 05AB1E를 사용하여 이전 답변을 사용하여 조사한 결과 이것이 재 작성에 추가 한 것 중 하나였습니다. 현재 다른 유스 케이스가 없습니다.
Adnan

4

JavaScript (Node.js) , 87 86 바이트

f=(n,w=1e3,s=5,r=n<45|n<60&s<4|s<2?w:Math.random()*w|0)=>s?`${r||""}
`+f(n,w-r,s-1):""

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

(n/15-2|0)*s<4더 큰 것을 확인해야하기 때문에 83 바이트 솔루션 ( )이 먼저 예약 n됩니다.

업데이트 : 예, (n/15-2|0)*s<4 때문에 더 큰 작동하지 않았다 n때문에 n충분히 큰이 합이 1000에 도달하지 못할 수 있습니다.



3

클린 , 215 바이트

import StdEnv,Math.Random,Text
? ::!Int->Int
?_=code{ccall time "I:I"
}
$n#l=take(max(2*min(n/15-2)2)0+1)(genRandReal(?0))
#l=map toInt[1E3*e/sum l\\e<-l]
|sum l==1000=map(\v|v>0=v<+"\n"="\n")(l++repeat 0)%(0,4)= $n

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

그래서 결국 수입보다 임의의 씨앗을 얻을 수있는 짧은 방법을 발견했습니다 System._Unsafe, System.Time그리고 사용toInt(accUnsafe time) ...
그리고 소년 codegolf의 정신에 진정을입니다 - 일반적으로 평가를 확인하는 데 사용되는 세계 상태 유형을 무시하고, C에 대한 호출을 삽입 그런 것들의 순서.


3

자바 (JDK 10) , 121 (117) (113) 111 바이트

m->{for(int w=1000,j,i=5;i-->0;w-=j=i>0?j*=Math.random():w,System.out.println(j<1?"":j))j=m>59|m>44&i<3?w+1:0;}

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

더 많은 왁스를 맨 위에 두는 편견이 있지만, 합법적으로 왁스를 배치하는 것이 이론적으로 가능합니다.

편집 : 4 바이트는 @KevinCruijssen에 의해 저장되었습니다

사람이 읽을 수있는 Java에서 :

(int minutes /* golfed variable m */) -> {
  int waxRemaining = 1000; // golfed variable w

  // golfed version goes from index 4 to 0 in a bit of a roundabout way
  // starting at 5 but decrementing right away
  for (int level = 4 /* golfed variable i */; level <= 0; level--) {
    // golfed variable j
    // the golfed version initializes this to (waxRemaining + 1)
    // in order to juice out some extra bytes during the Math.random() call
    int waxAtLevel = 0;

    // the golfed version does all of these ifs as ternary operations
    // and avoids using 2-character operators wherever possible
    // so e.g. "a == 0" becomes "a<1" and "a && b" becomes "a&b"
    // since here we are certain things can't be negative,
    // and took a good look at the Java operator precedence cheat-sheet
    // to make sure "&" and "|" would work properly to give a truthy value
    if (level == 0) {
      // if we are at the bottom level, just put the rest of the wax there
      waxAtLevel = waxRemaining;
    } else if (minutes >= 60 || (minutes >= 45 && level < 3)) {
      // otherwise if we are at a legal level put a random portion of the remaining wax there
      // note: the random portion can be between 0 and waxRemaining inclusive
      waxAtLevel = (int) (Math.random() * (waxRemaining + 1));
    }

    if (waxAtLevel > 0) {
      // only print the amount of way at this level if its greater than 0
      System.out.print(waxAtLevel);
    }
    System.out.println();

    waxRemaining -= waxAtLevel;
  }
}

2
Math.random()*(w+1) 될 수있다 Math.random()*-~w-2 바이트 일 . 여기에 관련 팁을 참조하십시오. . 좋은 대답입니다! 나에게서 +1 편집 : 실제로는 j임시로 변수를 사용하여 2 바이트를 더 절약 할 수 있습니다 w+1(어쨌든 인쇄 직후에 덮어 쓰기 j*=Math.random()때문에 ) 대신 캐스트 할 필요가 없습니다 (int)( 117 바이트 ).
Kevin Cruijssen

트윗 담아 가기 또한 나는 &i>2조건이 필요하지 않다는 것을 알아 차렸다
SamYonnou

3

Powershell , 188 162 바이트

param($m);$t=0;$a=,0*5;$s=if($m-lt45){4}elseif($m-lt60){2}else{0};$s..4|%{$t+=$a[$_]=if($_-eq4){1e3-$t}elseif($t-ne1e3){Random(1000-$t)}}$a|%{if($_){$_}else{''}}

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

@Kevin Cruijssen의
-2 바이트
루프를 단축하고 공백 을 제거하여 선택적 Get-verb -20 바이트를 제거하여 -4 바이트


안녕하세요, PPCG에 오신 것을 환영합니다! 훌륭한 첫 번째 답변! 나는 기본적인 테스트를했는데 모든 것이 잘 작동하는 것 같습니다. Powershell에 대해서는 거의 알지 못하지만로 바꿀 else{if($t-ne 1e3){Get-Random(1000-$t)}}elseif($t-ne 1e3){Get-Random(1000-$t)}있습니까? elseif코드에서 이전을 사용 했으므로 2 바이트를 절약해야합니다. 또한 Powershell의 골프 팁 또는 <모든 언어>의 골프 팁 이 더 많은 영감을 줄 수 있습니까? 체류를 즐길 수! :)
Kevin Cruijssen

1
ifelse에 대해 완전히 수정하십시오. 프로세스 초기에 else를 제거했습니다. 링크도 영감을 주었다!
Edwin

2

파스칼 (FPC) , 192190 바이트

var n,a:word;z:array[0..4]of word;begin read(n);if n>44then a:=a+3;if n>59then a:=a+2;Randomize;for n:=0to 999do inc(z[random(a)]);for n:=0to 4do if z[n]>0then writeln(z[n])else writeln end.

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

TFeld에 의한 빈으로 포장 방법 사용 . 후행 줄 바꿈으로 맨 아래 행을 먼저 인쇄합니다.

FPC에는 문제가없는 것 같습니다 random(0). 그래서 특이한 부분을 추가했습니다.


내 원래 제출물은 209 바이트로 줄었습니다.

var n,i,a,r:int32;begin read(n);if n>44then a:=a-2;if n>59then a:=a-2;r:=1000;Randomize;for i:=-3to-0do begin if i>a then begin n:=random(r+1);if n>0then write(n);r:=r-n;end;writeln;end;if r>0then write(r)end.

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


2

, 37 바이트

F²F²⊞υ∧‹³⁺ι÷Iθ¹⁵‽⊕⁻φΣ∨υω⊞υ⁻φΣυEυ⎇ιIιω

온라인으로 사용해보십시오!링크는 자세한 버전의 코드입니다. 설명:

F²F²

두 번, 두 번 반복하십시오. 또는 동일한 바이트 수에 대해 정수를 루프 인덱스를 2로 나눌 수 있습니다.

‹³⁺ι÷Iθ¹⁵

외부 지수 + 온도의 15 분의 1이 3보다 큰 경우 ...

⊞υ∧...‽⊕⁻φΣ∨υω

... 그런 다음 1000까지의 임의의 정수를 밀어냅니다. 불행히도 Charcoal은 빈 목록의 합계를 계산할 수 없으므로 빈 문자열을 대신 사용해야합니다.

⊞υ⁻φΣυ

남은 금액을 목록으로 미십시오.

Eυ⎇ιIιω

목록을 문자열로 변환하되 0 대신 빈 문자열을 사용하십시오.


2

젤리 , 28 바이트

>“,;‘SḤ‘µȷŻṗS⁼¥ƇȷX;0ẋ5¤ḣ5Yḟ0

전체 프로그램이 결과를 인쇄합니다 (허용 된 경우 거꾸로 됨).

온라인으로 사용해보십시오! -구현이 골프 적으로 느리기 때문에 (1000)7대신사용하도록 변경되었습니다ȷ! (...에 대한>59 의 목록 1015 5 개의 튜플을 빌드 한 후 필터링하여 선택할 수 있습니다)

어떻게?

>“,;‘SḤ‘µȷŻṗS⁼¥ƇȷX;0ẋ5¤ḣ5Yḟ0 - Main Link: integer, n
 “,;‘                        - list of code-page indices = [44,59]
>                            - greater than? (vectorises)
     S                       - sum (i.e. 0, 1 or 2)
      Ḥ                      - double (i.e 0, 2 or 4)
       ‘                     - increment (i.e. 1, 3 or 5)
        µ                    - start a new monadic link, call that x (i.e. f(x))
         ȷ                   - literal 1000
          Ż                  - zero-range = [0,1,2,...,1000]
           ṗ                 - Cartesian power (all tuples of length x using those numbers)
               Ƈ             - filter keep if:
              ¥              -   last two links as a dyad:
            S                -     sum
             ⁼  ȷ            -     equals 1000? (i.e. only valid tuples)
                 X           - random choice (get one of these tuples)
                      ¤      - nilad followed by link(s) as a nilad:
                   0         -   zero
                    ẋ5       -   repeat five times = [0,0,0,0,0]
                  ;          - concatenate     (e.g. [354,388,258,0,0,0,0,0])
                       ḣ5    - head to index 5 (e.g. [354,388,258,0,0])
                         Y   - join with newlines
                          ḟ0 - filter out zeros
                             - implicit print

1
" 출력을 반대로 할 수도 있습니다 (즉, 1000\n\n\n\n대신 \n\n\n\n1000또는 [87, null, 913, null, null]대신 [null, null, 913, null, 87]). "따라서, . 없이 28 바이트 버전을 사용할 수 있습니다 .
Kevin Cruijssen

2

작은 가지 , 126 바이트

이것은 실제로 재미있는 도전이었습니다!

이 코드는 가져와야하는 매크로를 만듭니다.

{%macro a(s,z=1000)%}{%for _ in 4..1%}{%set t=s>59or(s>44and _<3)?random(z):''%}{%set z=z-t%}{{t}}
{%endfor%}{{z}}{%endmacro%}

가져 오려면 다음과 같이하십시오 :

{%- import 'macro.twig' as a -%}
{{- a.a(50) -}}

이것은 트릭을해야합니다.

당신은 그것을 시도 할 수 있습니다 https://twigfiddle.com/t4dfgy
주의 : 공백을 제거 페이지로 인해, 나는를 추가하도록 강요했다- 가 라인의 정확한 수를 출력하는 것을 증명하기 위해, 줄의 끝에서.

정기적 인 설치에서는 문제없이 줄 바꿈 만 표시됩니다.


2

펄 6 , 62 바이트

{($!=1e3)||@,|((+$!-($!-=$!.rand+|0)||@)xx($_/15+|0)*2-4)[^4]}

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

문자열을 가져 와서 정수 목록 Nil또는 빈 목록 ( [])을 반환하는 익명 코드 블록0 s .

설명:

{($!=1e3)||@,|((+$!-($!-=$!.rand+|0)||@)xx($_/15+|0)*2-4)[^4]}
{                                                            }  # Anonymous code block
 ($!=1e3)  # Initialise $! to 1000
                +$!-($!-=$!.rand+|0)     # Pick a random value from 0 to $!
                                    ||@  # Or an empty array if it is zero
            ,  (                       )xx  # Repeat this
                                          ($_/15+|0)*2-4  # The given value mapped to 0,2,4
             |(                                         )[^4] # Get the first four values
 ($!    )||@  # Where the first value is the leftover number in $! or an empty array


2

J , 56 55 54 48 43 40 바이트

5{.1e3(2<@-/\[,0,~[:\:~?@$~)2*1#.>&44 59

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

FrownyFrog 덕분에 -3 바이트


조금 더 길지만 모든 가능성에 대해 완벽하게 균일 한 분포를 보장하는 또 다른 개념적으로 좋은 방법 여기에있는 방법에 :

J , 53 바이트

5$!.a:[:<@(+/);._1 0:,(1e3#1)({~#?#)@,0$~2*1#.>&44 59

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


아닌가요 $!.a:단지 {.?
FrownyFrog

@FrownyFrog 감사합니다. 사용 가능한 것보다 많은 요소를 사용하면 "제로"채우기가 발생한다는 것을 잊었습니다.
요나


1

루비 , 62 55 바이트

->n{w=1000;[4,4,3,3].map{|r|r*15>n||w-=q=rand(w);q}<<w}

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

용암 램프는 고온에서 위험 할 수 있으므로 테스트는 0-99 도로 제한됩니다 .


안녕. 답변이 잘못되었습니다. 현재 0빈 줄이 있습니다. 배열에 빈 라인을 제외하고 아무것도 할 수있다 0, false또는 음수. 이 될 수 있도록 null, "", [], 등,하지만 0. 루비에 객체 배열 / 목록이 있는지 확실하지 않으므로 0s를 다른 것으로 변환 할 수는 없지만 배열 / 목록을 반환하는 대신 인쇄해야합니다.
Kevin Cruijssen

수정되었지만 조금 너무 임의적이라고 생각합니다.
GB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.