무작위로 캐릭터를 선택, plinko 스타일


27

선택 언어가 선택적인 임의성에 얼마나 적합한 지 봅시다.

을 감안할 때 4 자, A, B, C,과 D, 또는 4 개 문자의 문자열 ABCD 입력으로 , 다음과 같은 확률로 문자 출력 하나

  • A 1/8 (12.5 %)의 기회가 선택되어야합니다
  • B 3/8 (37.5 %)의 기회가 선택되어야합니다
  • C 2/8 (25 %) 확률을 선택해야합니다
  • D 2/8 (25 %) 확률을 선택해야합니다

이것은 다음의 Plinko 머신 레이아웃 과 일치 합니다 :

   ^
  ^ ^
 ^ ^ ^
A B \ /
     ^
    C D

귀하의 답변은 설명 된 확률을 존중하기 위해 진정으로 시도해야합니다. 답에서 확률을 계산하는 방법과 의사 난수 및 큰 숫자 문제를 무시하고 스펙을 존중하는 이유에 대한 적절한 설명만으로 충분합니다.

채점

이것은 이므로 각 언어에서 가장 적은 바이트 이깁니다!


우리가 선택한 언어의 내장 랜덤 함수가 랜덤이라고 가정 할 수 있습니까?
Mr. Xcoder

이유 내에서 @ Mr.Xcoder, 예.
Skidsdev

명확성을 위해 입력은 항상 정확히 4 자이며 제공된 Plinko 레이아웃에 따라 각각에 확률을 할당해야합니까? 랜덤 소스에서 제공하는 정확도 내에서 확률이 정확하다면 Plinko 레이아웃을 생성하거나 시뮬레이션하는 것이 완전히 불필요합니까?
Kamil Drakari

1
@KamilDrakari가 맞습니다.
Skidsdev

2
길이 때문에 그다지 유용하지는 않지만, 표현식 이이 문제에 대한 적절한 분포 ( )를 사용하여 인덱스를 ceil(abs(i - 6)/ 2.0)인덱스로 매핑 할 것임을 알았습니다 .0-70-30 111 22 33
Socratic Phoenix

답변:


14

린 평균 콩 기계 , 55 43 42 바이트

Alex Varga 덕분에 -13 바이트

  O
  i
  ^
 ^ ^
\ ^ ^
 i / U
 ii
 ^
i U
U

두 시간 만에 나 자신의 질문에 대답하는 것을 신경 쓰지 않기를 바랍니다.하지만 다른 사람이 LMBM에 답변을 게시 할 계획이라고 의심합니다.

이것은 문자 그대로 OP에 표시된 Plinko 레이아웃을 반영하며 불필요한 공백을 줄이기 위해 수평으로 뒤집습니다.


나는 이것을 테스트하는 방법을 알고 있지만,이 힘 작동하지 않습니다 gist.github.com/anonymous/e537edc8c89a72f3631ef765b352b98d
알렉스 바르

@AlexVarga ooh 작동
Skidsdev


9

젤리 , 6 바이트

Ḋṁ7;ḢX

네 개의 문자 목록을 취하여 확률 분포가있는 문자를 반환하는 모나드 링크.

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

방법?

Ḋṁ7;ḢX - Link: list of characters, s  e.g. ABCD
Ḋ      - dequeue s                         BCD
 ṁ7    - mould like 7 (implicit range)     BCDBCDB
    Ḣ  - head s                            A
   ;   - concatenate                       BCDBCDBA
     X - random choice                     Note that the above has 1*A, 3*B, 2*C, and 2*D

와 영리한 트릭 !
Outgolfer Erik

9

Cubix , 39 24 22 21 19 바이트

.<.^iD>D|@oioi.\i;U

온라인 통역사에서 확인하십시오!

이것은 다음 큐브 네트에 매핑됩니다.

    . <
    . ^
i D > D | @ o i
o i . \ i ; U .
    . .
    . .

랜덤 분포 구현 설명

Cubix는 명령 포인터가 큐브의면 주위를 이동하면서 해당 명령을 실행하는 언어입니다. D임의 의 유일한 형태는 command입니다.이 명령 은 IP를 임의의 방향으로 보냅니다 1/4.

그러나 이것을 사용하여 올바른 가중 프로 바이오 라이트를 생성 할 수 있습니다 : D두 번 사용 합니다. 첫 번째 D1/4두 번째로 향합니다 D. D그러나이 두 번째 에는 화살표 ( > D <)로 두 방향이 차단되어 D다른 방향을 선택 하기 위해 명령 포인터를로 보냅니다 . 즉, 거기에는 1/8전체적으로 발생할 가능성 이있는 두 가지 가능한 방향 이 있습니다. 아래 다이어그램과 같이 올바른 문자를 생성하는 데 사용할 수 있습니다.

각 방향의 확률을 보여주는 이미지

(실제 코드에서 오른쪽의 화살표는 거울로 대체됩니다. |)

코드 설명

        . <
        . ^
IP> i D > D | @ o i
    o i . \ i ; U .
        . .
        . .

명령 포인터는 오른쪽에서 문자를 기준으로 오른쪽에서 시작합니다 i. i첫 번째 문자를 입력으로 사용하여 이것을 실행 한 다음 위에 D표시된 임의의 프로세스를 시작하여 로 이동합니다 .

  • Char A : 첫 번째가 D우리를 동쪽으로 보내고 두 번째 는 우리를 문자 A로 인쇄해야하는 경우, 첫 번째 문자부터 이미 스택에 있습니다 i. 다음이 실행됩니다.

    • \ -동쪽으로 향하도록 IP를 반영
    • i; -입력 한 다음 다시 팝업 (no-op)
    • U -IP를 왼쪽으로 두 번 돌려 U 턴을 수행하십시오.
    • o -TOS, 문자 A를 출력
    • @ -프로그램을 종료
  • 문자 B : 첫 번째 또는 두 번째 D헤드 북쪽 인 경우 다음 입력이 될 문자 B를 생성해야합니다. 두 경로 모두 다음 명령을 실행합니다.

    • ^ -북쪽으로
    • < -서쪽으로 가면서 ...
    • i -문자 B를 입력하십시오
    • o -TOS, 문자 B 출력
    • ; -TOS 팝
    • @ -프로그램을 종료
  • Char C : 처음으로 D우리를 서쪽으로 보내면 다음이 실행됩니다.

    • i -문자 B를 입력하십시오
    • i -문자 C를 입력하십시오.
    • o -출력 TOS, 문자 C
    • @ -프로그램을 종료
  • Char D : 처음 D으로 남쪽으로 보내면 다음이 실행됩니다.

    • i -문자 B를 입력하십시오
    • .. -두 개의 놈 없음
    • i -문자 C를 입력하십시오.
    • | -이 거울은 동서를 반영하지만 IP가 북쪽을 향하고 있으므로 통과합니다.
    • ^ -이것은 문자 B에 대한 경로와 결합됩니다. 그러나 두 개의 입력을 이미 취 했으므로 네 번째 문자 (문자 D)가 인쇄됩니다.

2
이것은 장관입니다! 나는 당신 이 크기 2 큐브에 적절한 확률 네 가지 경로를 모두 맞추 었다고 믿을 수 없습니다 . Cubix 답변 피드를 구독 할 수 있는지 궁금합니다.
ETHproductions

@ETHproductions 감사합니다. 한두 바이트를 잘라낼 수있는 방법이 있다고 확신하지만이 답변을 매우 자랑스럽게 생각합니다 :)
FlipTack

8

파이썬 , 50 바이트

lambda x:choice(x[:2]+x[1:]*2)
from random import*

문자열 (또는 문자 목록)을 가져오고 반환하는 명명되지 않은 함수.

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

방법?

random.choice함수는 주어진 올바른 분포 된 문자열을 형성하며,이리스트에서 임의의 소자를 선택하는 "ABCD", "ABCD"[:2] = "AB"플러스 "ABCD"[1:]*2 = "BCD"*2 = "BCDBCD"되는 것이다 "ABBCDBCD".


나는 내 솔루션을 골프화하는 방법을 찾은 다음 역순으로 당신의 것과 동일하다는 것을 깨달았습니다
./

6

R , 31 바이트

sample(scan(,''),1,,c(1,3,2,2))

stdin공백 으로 구분 하여 문자를 읽습니다 . sample첫 번째 입력에서 임의의 샘플을 두 번째 입력 (so 1) (선택적인 대체 인수)의 수량으로 마지막 인수에 의해 주어진 가중치로 그립니다.

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

여러 n번 시도하십시오 !

후자의 코드에서는 대체가 rue로 n설정된 시간 ( n헤더에서 설정 됨) 을 샘플링 T하고 (기본적으로 false 임) 결과를 표로 나누고 n입력의 상대 확률을보기 위해 나눕니다 .


6

PHP, 28 바이트

<?=$argn[5551>>2*rand(0,7)];

로 파이프로 실행하십시오 -nR.

01112233기수 -4는 5551십진수입니다 ...


길이가 같은 108 가능한 값은 ... 7030내가 개인적으로 좋아하는 것 중 하나입니다.
Titus

5

자바 8, 53 44 바이트

s->s[-~Math.abs((int)(Math.random()*8)-6)/2]

이것은입니다 Function<char[], Character>.

온라인으로 사용해보십시오! (이 테스트 프로그램은, 상술 한 기능을 100 번 실행의 가능성을 실험 출력 선택 A, B, C, 및 D).

여기에 일반적인 생각지도 할 수있는 방법 찾을 수 있습니다 0-70-3있도록, 0이 나타납니다의 1/8시간, 1표시 3/8, 시간 2표시 2/8시간 및 3표시 2/8시간을. round(abs(k - 6) / 2.0))k범위에서 임의의 정수가있는 곳에서 작동 합니다 [0,8). 결과는 다음과 같습니다.

k -> k - 6 -> abs(k-6) -> abs(k-6)/2 -> round(abs(k-6)/2)

0 -> -6 -> 6 -> 3   -> 3
1 -> -5 -> 5 -> 2.5 -> 3
2 -> -4 -> 4 -> 2   -> 2
3 -> -3 -> 3 -> 1.5 -> 2
4 -> -2 -> 2 -> 1   -> 1
5 -> -1 -> 1 -> 0.5 -> 1
6 -> 0  -> 0 -> 0   -> 0 
7 -> 1  -> 1 -> 0.5 -> 1

어떤 당신이 볼 수 있듯이, 인덱스 결과 0 111 22 33의 원하는 확률을 생산, 1/8, 3/8, 2/82/8.

하지만 기다려! 세계에서 어떻게 -~Math.abs(k-6)/2같은 결과를 얻 습니까 (다시 말하면 k범위의 임의의 정수는 어디에 [0,8]있습니까)? 실제로는 매우 간단합니다 ... (x+1)/2(정수 나누기)는와 같 round(x/2)으며와 x + 1같습니다 -~x. 비록 x+1-~x같은 길이, 위의 함수에서 사용하는 것이 좋습니다있다 -~x가 있기 때문에 -~괄호를 필요로하지 않는다, 따라서 우선적으로 적용합니다.


나는 그것이 오래되었다는 것을 알고 있지만 정수 캐스트의 배치를 변경하여 두 바이트를 골프 수 있습니다 ( Math.abs두 배를 매개 변수로 허용하기 때문에 ) : s->s[-~(int)Math.abs(Math.random()*8-6)/2]( 42 바이트 ).
Kevin Cruijssen

5

APL, 14 바이트

(?8)⊃1 3 2 2\⊢

문자열로 입력하십시오.

방법?

1 3 2 2\⊢-각 문자를 x 번 반복 ( 'ABCD''ABBBCCDD')

-색인에서 요소를 가져옵니다 ..

(?8) -임의 1-8


내 J 답변을 검토 하고 개선 가능 여부를 알려주시겠습니까?
요나



@Uriel 그러한 인코딩이 없습니다. 전체 UTF-8을 사용하거나 모든 문자를 2 바이트 (UTF-16)로 계산하거나에 5 바이트를 추가합니다 ⎕U2378.
Adám

@ Adám 아, 알겠습니다. 그런 다음 Dyalog가 불필요한 기호로 유럽 상징 문자 중 일부를 새 기호로 바꾸어 바이트를 절약하십시오! ;)
Uriel

4

, 11 바이트

‽⟦εεζζηηηθ⟧

온라인으로 사용해보십시오! Link는 장황한 버전의 코드이지만, 거의 필요하지 않습니다. 임의의 요소를 선택하고 ⟦⟧목록을 작성하며 변수는 적절한 입력 문자를 가져 오는 변수입니다 (필자가 느껴지기 때문에 역순으로).


4

Pyth , 8 7 바이트

O+@Q1t+

내 파이썬 답변과 동일한 알고리즘을 사용합니다.

여기 사용해보십시오!

Pyth , 10 8 바이트

O+<Q2*2t

Jonathan Allan의 Python 답변과 정확히 동일한 알고리즘을 사용합니다.

여기 사용해보십시오!


설명

  • O-을 추가하여 만든 임의의 String 요소를 취합니다 +.

    • <Q2 -문자열의 처음 두 문자.
    • *2t*2첫 번째 문자 ( t)를 제외한 전체 문자열 ( )을 두 배로 늘리십시오 .

이 알고리즘을 적용하기 위해 ABCD:

  • <Q2걸립니다 AB.
  • *2t소요 BCD그것을 두 배로 BCDBCD.
  • +두 문자열을 결합합니다 : ABBCDBCD.
  • O 임의의 문자를 취합니다.

Leaky Nun (2 번째 솔루션) 덕분에 -2

니모닉 (-1 번째 솔루션) 덕분에 -1


>Q1tQ되어 t.
Leaky Nun

넌 대체하여 제 2 용액에 바이트를 저장할 수 *2+회 묵시적 입력을 사용.

@Mnemonic 감사합니다, y대신 문자열을 위해 작동하지 않는 생각 때문에 그것을 사용 하지 않은 것 같습니다 ...
Mr. Xcoder


3

C # (. NET 코어) , 76 55 바이트

s=>(s+s[1]+s[1]+s[2]+s[3])[new System.Random().Next(8)]

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

첫 번째 답변은 휴대 전화를 사용하여 TIO에 직접 작성되었습니다. 레벨 업!

설명 : 원래 문자열이 "ABCD"인 경우 함수는 문자열 "ABCDBBCD"를 작성하고 임의 요소를 가져옵니다.


프로그램은 STDIN의 입력으로 문자를
가져와야합니다

@Mayube는 여전히 골프를 쳤지 만 고쳐졌지만 ...
Charlie

3

자바 스크립트 35 바이트

스트링을 취하고 ABCD, 입력으로 출력하는 A시간의 1 / 8, B시간 3 / 3/8, C시간의 1 / 4 일 및 D시간의 1 / 4 일.

x=>x[5551>>2*~~(Math.random()*8)&3]

설명

x=>x[                     // return character at index
    5551                  // 5551 is 0001010110101111 in binary
                          // each pair of digits is a binary number 0-3
                          // represented x times
                          // where x/8 is the probability of selecting
                          // the character at the index 
    >>                    // bitshift right by
    2 *                   // two times
    ~~(                   // double-bitwise negate (convert to int, then 
                          // bitwise negate twice to get the floor for
                          // positive numbers)
        Math.random() * 8 // select a random number from [0, 8)
    )                     // total bitshift is a multiple of 2 from [0, 14]
    &3                    // bitwise and with 3 (111 in binary)
                          // to select a number from [0, 3]
]


3

> <> , 25 22 19 바이트

i_ixio;o
ox</;
;\$o

온라인으로 사용해보십시오! , 또는 물고기 놀이터 에서 시청하십시오 !

> <>에 대한 간략한 개요 : 코드를 통해 헤엄 치는 명령을 수행하는 물고기를 가진 2D 언어입니다. 코드 가장자리에 도달하면 반대쪽으로 줄 바꿈됩니다. 물고기는 왼쪽 상단에서 시작하여 오른쪽으로 이동합니다. > <>에서는 임의성이 까다 롭습니다. 유일한 임의 명령은입니다 x.이 명령은 물고기의 방향을 위, 아래, 왼쪽 및 오른쪽에서 무작위로 설정합니다 (같은 확률로).

프로그램 시작시, 물고기는 두 개의 입력 문자를 읽습니다 i_i(각각 iSTDIN에서 스택으로 문자를 읽으며 _, 물고기는 현재 무시합니다). 그런 다음에 도달합니다 x.

(가) 경우 x물고기 오른쪽으로를 전송, 그것은 또 하나 개의 문자 (제 3 호)에와 인쇄물을 읽고 o함께하고가 정지를 ;. 왼쪽 방향은 비슷합니다. 물고기는 두 문자를 더 읽고 (그래서 우리는 네 번째 문자까지) 오른쪽으로 감싸고 네 번째 문자를 인쇄하고 정지합니다. 물고기가 헤엄 치면 물고기가 뒤섞여 /멈추기 전에 두 번째 캐릭터를 감싸고 인쇄합니다 . 수영을하면 왼쪽에 반사되어 /다른에 맞습니다 x.

이번에는 두 방향으로 물고기를 다시 x(오른쪽 화살표,, <거울 위)로 다시 보냅니다 _. 따라서 물고기 x는 서로 다른 두 방향으로 이것을 탈출 할 확률이 1/2 입니다. 왼쪽은 스택의 맨 위에있는 문자를 인쇄하지만 두 번째는 맨 아래로 스택에서 맨 아래의 두 요소를로 교체하므로이 $방향은 첫 번째 문자를 인쇄합니다.

요약하면, 세 번째와 네 번째 문자는 각각 1/4로 인쇄됩니다. 첫 번째 문자는 확률이 1/2 x 1/4 = 1/8입니다. 두 번째 문자는 확률이 1/4 + 1/2 x 1/4 = 3/8입니다.


2

05AB1E , 8 바이트

ìD1è0ǝ.R

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

         # Implicit input                            | [A,B,C,D]
ì        # Prepend the input to itself               | [A,B,C,D,A,B,C,D]
 D1è     # Get the second character                  | [A,B,C,D,A,B,C,D], B
    0ǝ   # Replace the first character with this one | [B,B,C,D,A,B,C,D]
      .R # Pick a random character from this array   | D

2

MATL , 12 10 바이트

l3HHvY"1Zr

온라인으로 사용해보십시오! 또는 1000 번 (약간 수정 된 코드) 실행하고 각 문자가 나타나는 횟수를 확인하십시오.

설명

l3HH   % Push 1, 3, 2, 2
v      % Concatenate all stack contents into a column vector: [1; 3; 2; 2]
Y"     % Implicit input. Run-length decode (repeat chars specified number of times)
1Zr    % Pick an entry with uniform probability. Implicit display

수정 된 코드의 변경 사항 : 1000:"Gl3HH4$vY"1Zr]vSY'

  • 1000:"...]1000시간 을 반복하는 루프 입니다.
  • G 각 반복이 시작될 때 입력이 푸시되도록합니다.
  • 반복에서 스택에 결과가 누적됩니다. 따라서 최상위 숫자 만 연결하려면 v대체해야 합니다.4$v4
  • 루프의 끝 v에서 1000결과를 벡터로 연결하고 S정렬 한 후 Y'실행 길이로 인코딩합니다. 이 네 글자와 그들이 나타난 횟수를 제공합니다.

그래, 이제
고쳐질 것 같습니다

@Mayube 주목 해 주셔서 감사합니다!
Luis Mendo

2

05AB1E , 6 바이트

«À¨Ć.R

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

설명

목록과 문자열 모두에서 작동합니다.

«       # concatenate input with itself
 À      # rotate left
  ¨     # remove the last character/element
   Ć    # enclose, append the head
    .R  # pick a character/element at random



2

Pyth, 7 바이트

@z|O8 1

테스트 스위트

O80에서 7 사이의 난수를 생성합니다 | ... 1. 논리 또는 1을 적용하여 0을 1로 변환하고 다른 모든 항목은 그대로 둡니다. 이 단계의 숫자는 시간의 1 2/8이고 시간의 2, 3, 4, 5, 6, 7 또는 8 1/8입니다.

@z해당 위치에서 입력 문자열로 색인합니다. 인덱싱은 문자열의 길이에 대해 모듈로 수행되므로 위치 0에서 4 개의 인덱스, 위치 1에서 5의 인덱스 등이 수행됩니다.

확률은 다음과 같습니다.

  • 위치 0 : 난수 4. 시간의 1/8.

  • 위치 1 : 난수 0, 1 또는 5. 시간의 3/8.

  • 위치 2 : 임의의 숫자 2 또는 6. 시간의 2/8.

  • 위치 3 : 난수 3 또는 7. 시간의 2/8.


2

자바 스크립트, 31 30 바이트 / 23 바이트

asgallant의 초기 Javascript 답변을 보면 JS에 대해 생각하게되었습니다. 그가 말했듯이 :

스트링을 취하고 ABCD, 입력으로 출력하는 A시간의 1 / 8, B 시간 3 / 3/8, C시간의 1 / 4 일 및 D시간의 1 / 4 일.

광산은 :

x=>(x+x)[Math.random()*8&7||1]

설명:

x=>(x+x)[                 // return character at index of doubled string ('ABCDABCD')
         Math.random()*8  // select a random number from [0, 8]
         &7               // bitwise-and to force to integer (0 to 7)
         ||1              // use it except if 0, then use 1 instead
        ]

에서 Math.random()*8&7다음과 같이 세분화합니다 :

A from 4      = 12.5% (1/8)
B from 0,1,5  = 37.5% (3/8)
C from 2,6    = 25%   (1/4)
D from 3,7    = 25%   (1/4)

버전 2, 23 바이트

그러나 Arnauld는 다음과 같이 말했습니다.

시간 종속 수식이 허용되는 경우 다음을 수행 할 수 있습니다.

그것이 실제로 허용된다면, 나를 이끌었습니다.

x=>(x+x)[new Date%8||1]

new Date%8위와 동일한 분류 표 를 사용합니다.

그리고 %8또한 &7; 골라보세요. 다시 한 번 감사드립니다, Arnauld.


2

ngn / apl, 10 바이트

⎕a [⌈ /? 2 4]

?2 4 무작위로 한 쌍의 숫자를 선택합니다-첫 번째는 0 1 중 두 번째는 0 1 2 3 중

⌈/ "최대 감소"-큰 숫자 찾기

⎕a 대문자 알파벳입니다

[ ] 인덱싱


a∊ {0,1} 및 b∊ {0,1,2,3} 일 때 max (a, b)에 대한 차트를 참고하십시오.

    ┏━━━┯━━━┯━━━┯━━━┓
    ┃b=0│b=1│b=2│b=3┃
┏━━━╋━━━┿━━━┿━━━┿━━━┫
┃a=0┃ 0 │ 1 │ 2 │ 3 ┃
┠───╂───┼───┼───┼───┨
┃a=1┃ 1 │ 1 │ 2 │ 3 ┃
┗━━━┻━━━┷━━━┷━━━┷━━━┛

a와 b가 무작위로 독립적으로 선택된 경우, 원하는 확률 분포를 얻기 위해 0123 = ABCD를 대체 할 수 있습니다


1

파이썬 3 , 64 55 51 바이트

@ovs 덕분에 -9 바이트

lambda s:choice((s*2)[1:]+s[1])
from random import*

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


설명

random.choice()1/8 s, 2/8 s, 2/8 s 및 3/8 s 인 입력 을 (s*2)[1:]+s[1]생성 하는 동안 String의 임의의 문자를 가져옵니다 .BCDABCDBABCDACDB


random.choice55 바이트에 사용 :lambda s:choice((s[0]+s[1:]*3)[:8])
ovs

@ovs 더 짧은 방법을 찾았습니다 ^. choice()그래도 감사합니다 .
Mr. Xcoder

1

QBIC , 27 바이트

?_s;+;+B+B+;+C+;+D,_r1,8|,1

설명

?           PRINT
 _s         A substring of
   ;+       A plus
   ;+B+B+   3 instances of B plus
   ;+C+     2 instances of C plus
   ;+D      2 instances of D plus
   ,_r1,8|  from position x randomly chosen between 1 and 8
   ,1       running for 1 character


1

, 60 바이트

)//Z
)/\Z
)\/^.
)\x/Z
)\\\+t
|???`~S
|z*
`{'AabBCcdDEefFGghH

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

3은 ?각각 임의의 비트를 생성합니다. 첫 번째 사이클에서, 이러한 비트는 상기 스위치를 통해 실행된다 ( /집과 \의) 우리는이 테이블에서 출력되는 값 가고 확인하려면

000 a
01_ b
0_1 b
10_ c
11_ d

(여기서 또는 _중 하나 일 수 있음 ). 그런 다음 필요에 따라 입력을 따라 올바른 값에 도달하면 인쇄하고 종료합니다.01

끝에 큰 알파벳 블로 브는 고양이 프로그램에서 도매로 복사됩니다.이 솔루션은 단순히 출력을 억제하고 의도 한 효과를 얻기 위해 종료됩니다.



1

Applesoft, 29 oops, 32 바이트

"재 컴퓨팅"예제입니다. 나와 함께 참아, 나는 이것에 새로운 브랜드입니다. "입력" 으로 지정된 것은 바이트 수 자체가 될 필요가 없다는 것을 수집 합니다. OP에 명시된 바와 같이 입력은 "ABCD"로 제공됩니다. (처음에는 4 바이트를 추가하고 나머지는 1 바이트로 골프를 치는 동안 입력을 지정해야한다는 것을 알지 못했습니다.)

INPUTI$:X=RND(1)*4:PRINTMID$(I$,(X<.5)+X+1,1)

INPUT, RND, PRINT 및 MID $라는 용어는 각각 내부적으로 단일 바이트 토큰으로 인코딩됩니다.

먼저 X에 0 <X <4 범위의 임의의 값이 할당됩니다. 이는 (X <.5) + X + 1에 따라 I $에서 문자 중 하나를 선택하는 데 사용됩니다. 문자 위치 값은 다음과 같습니다. 식의 잘린 평가. X가 0.5보다 작 으면 X <.5는 1을 더하고 그렇지 않으면 0을 더합니다. X의 결과는 다음과 같이 분류됩니다.

A from .5 ≤ X < 1           = 12.5%
B from X < .5 or 1 ≤ X < 2  = 37.5%
C from 2 ≤ X < 3            = 25%
D from 3 ≤ X < 4            = 25%

프로그래밍 퍼즐과 코드 골프에 오신 것을 환영합니다! 불필요한 공백을 제거하는 것을 포함하여 여기에 제출물을 최소한 사소하게 골라야합니다 (여기서 공백이 필요한 경우 사과드립니다). 또한 Applesoft에 대한 표준은 확실하지 않지만 내부 표현이 단일 바이트가 아닌 한 해당 연산자가 단일 바이트 토큰이라고 가정 할 수는 없습니다. 또한 입력이 변수에 저장되어 있다고 가정하지 않을 수도 있습니다. 오히려 실제로 입력, 명령 행 인수 또는 함수 매개 변수로 가져와야합니다. 감사!
HyperNeutrino

@HyperNeutrino 공백이 필요하지는 않지만 "INPUT"과 "PRINT"뒤에 공백이 있으면 가독성이 향상됩니다. 이 골동품 사이버 톤 공간에서는 전통적으로 내가 가진 장소에 전시되었습니다. 내가 언급 한 토큰의 경우 "내부 표현은 단일 바이트"라는 것이 사실입니다. 한편, 나는 바이트를 줄인 코드를 골랐다.
Alan Rat

1

공통 리스프 , 198 바이트

(setf *random-state*(make-random-state t))(defun f(L)(setf n(random 8))(cond((< n 1)(char L 0))((and(>= n 1)(< n 4))(char L 1))((and(>= n 4)(< n 6))(char L 2))((>= n 6)(char L 3))))(princ(f "ABCD"))

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

읽을 수있는 :

(setf *random-state* (make-random-state t))
(defun f(L)
    (setf n (random 8))
    (cond 
            ((< n 1) 
                (char L 0))
            ((and (>= n 1)(< n 4))
                (char L 1))
            ((and (>= n 4)(< n 6))
                (char L 2))
            ((>= n 6)
                (char L 3))
    )
)
(princ (f "abcd"))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.