Випадково виберіть персонаж у стилі плінко


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%)

Це відповідає наступному плануванню верстата Плінько :

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

Ваша відповідь повинна зробити справжню спробу поважати описані ймовірності. Власне пояснення того, як обчислюються ймовірності у вашій відповіді (і чому вони поважають характеристики, нехтуючи псевдовипадковістю та проблемами великої кількості), є достатнім.

Оцінка балів

Це тому виграє найменше байтів на кожній мові !


Чи можемо ми вважати, що вбудована випадкова функція у нашій вибраній мові є випадковою?
Містер Xcoder

@ Mr.Xcoder в межах розуму, так.
Skidsdev

Отже, для наочності вхід завжди має рівно 4 символи, і він повинен призначити ймовірності кожному відповідно до точно передбаченого макета Плінько? Створювати макети Плінько або моделювати їх цілком непотрібно, доки вірогідності вірні в межах точності, наданої вашим випадковим джерелом?
Каміль Дракарі

1
@KamilDrakari правильно.
Skidsdev

2
Не надто корисний через його довжину, але я з’ясував, що вираз ceil(abs(i - 6)/ 2.0)буде відображати індекс 0-7до індексу 0-3з відповідним розподілом ( 0 111 22 33) для цього виклику ...
Socrat Phoenix

Відповіді:


14

Lean Mean Bean Machine , 55 43 42 байт

-13 байт завдяки Алексу Варзі

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

Сподіваюсь, ви, хлопці, не заперечуєте, щоб відповісти на моє власне запитання лише через 2 години, але я дуже сумніваюся, що хтось інший планував розмістити відповідь у ЛМБМ.

Це буквально просто відображає макет Плінько, показаний в ОП, перевернутий горизонтально, щоб скоротити зайвий пробіл.


Я не знаю, як це перевірити, але це може спрацювати: gist.github.com/anonymous/e537edc8c89a72f3631ef765b352b98d
Alex Varga

@AlexVarga ooh that працює
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

Розумний трюк з !
Ерік Аутгольфер

9

Cubix , 39 24 22 21 19 байт

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

Переглянути в онлайн-перекладачі!

Це відображає на наступну кубичну сітку:

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

Пояснення реалізації випадкового розподілу

Cubix - мова, якою вказівник вказівки об'їжджає грані куба, виконуючи команди, з якими він стикається. Єдиною формою випадковості є команда D, яка надсилає IP у випадковому напрямку: рівний шанс у 1/4кожному напрямку.

Однак ми можемо використовувати це для отримання правильних зважених ймовірностей: використовуючи Dдвічі. Перший Dмає 1/4заголовок до другого D. Однак у цьому другому Dє два напрямки, заблоковані стрілками ( > D <), які направляють вказівник інструкції назад до, Dщоб вибрати інший напрямок. Це означає, що звідти є лише два можливі напрямки, кожен із яких має 1/8загальний шанс відбутися. Це можна використовувати для створення правильного символу, як показано на схемі нижче:

Зображення, що показує ймовірності кожного напрямку

(Зверніть увагу, що у фактичному коді стрілка праворуч замінена дзеркалом, |)

Пояснення коду

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

Покажчик інструкцій починається праворуч, у символу i, зверненого праворуч. Він виконує це i, беручи перший символ як вхідний, а потім переходить на D, починаючи випадковий процес, показаний вище.

  • Char A: У випадку, коли перший Dпосилає нас на схід, а другий на південь, нам потрібно надрукувати символ А. Це вже в стеці від першого i. Виконується наступне:

    • \ - Відбийте IP, щоб він рухався на схід
    • i; - Візьміть вкладку, а потім повторіть її (без опції)
    • U - Виконайте поворот, двічі повернувши IP-ліворуч
    • 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
    • | - Це дзеркало відображає схід-захід, але ІР спрямовується на північ, тому ми проходимо через нього.
    • ^ - Це поєднується з шляхом, обраним для символу В. Однак, оскільки ми вже взяли два входи, четвертий символ (символ 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".


Я знайшов спосіб розіграти своє рішення, а потім зрозумів, що він ідентичний вашому, просто у зворотному порядку: /
Містер Xcoder

6

R , 31 байт

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

Читає символів з stdinрозділених пробілами. sampleмалює випадкові вибірки з першого введення в кількості другого вводу (так 1), (необов'язковий аргумент заміни), з вагами, заданими останнім аргументом.

Спробуйте в Інтернеті!

Спробуйте nраз!

Для останнього коду я беру вибірки nразів (встановлений nу заголовку) із заміною, встановленою на True (вона за замовчуванням помилкова), табулюють результати та ділять на, nщоб побачити відносні ймовірності входів.


6

PHP, 28 байт

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

Запустити як труба -nR.

01112233в базі-4 знаходиться 5551в десятковій ...


108 можливих значень з однаковою довжиною ... 7030є серед моїх особистих фаворитів.
Тит

5

Java 8, 53 44 байти

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

Це Function<char[], Character>.

Спробуйте в Інтернеті! (Це тестова програма працює вищенаведеної функції 1000000 раз і виводить експериментальні ймовірності вибору A, B, Cі D).

Основна ідея тут , щоб знайти якийсь - то спосіб відображення 0-7на 0-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/8і 2/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 байти ).
Кевін Круїссен

5

APL, 14 байт

(?8)⊃1 3 2 2\⊢

Введіть як рядок.

Як?

1 3 2 2\⊢- повторити кожну букву x разів ( 'ABCD''ABBBCCDD')

- взяти елемент в індекс ..

(?8) - випадкові 1-8


Ви б не хотіли переглянути мою відповідь J та повідомити, чи можна її покращити?
Йона



@Uriel Немає такого кодування. Або ви перейдете повний UTF-8, або ви рахуєте кожен символ як два байти (UTF-16), або додаєте 5 байт для ⎕U2378.
Adám

@ Adám о, я бачу. то отримайте Dyalog замінити деякі ці непотрібні європейські букви з наголосом на нові символи, щоб зберегти байти! ;)
Уріель

4

Вугілля деревне , 11 байт

‽⟦εεζζηηηθ⟧

Спробуйте в Інтернеті! Посилання - це багатослівна версія коду, хоча вона вам навряд чи потрібна; вибирає випадковий елемент, ⟦⟧створює список, а змінні - це ті, які отримують відповідні букви введення (у зворотному порядку, тому що я відчував це як).


4

Pyth , 8 7 байт

O+@Q1t+

Використовується точно такий же алгоритм, як у моїй відповіді Python.

Спробуйте тут!

Pyth , 10 8 байт

O+<Q2*2t

Використовується точно такий же алгоритм, що і відповідь Джонатана Аллана на Python.

Спробуйте тут!


Пояснення

  • O- Бере випадковий елемент рядка, зроблений додаванням (з +):

    • <Q2 - Перші два символи Рядок.
    • *2tПодвойте повну строку ( *2), за винятком першого символу ( t).

Застосування цього алгоритму для ABCD:

  • <Q2займає AB.
  • *2tприймає BCDі подвоює його: BCDBCD.
  • +з'єднує два рядки: ABBCDBCD.
  • O приймає випадковий характер.

-2 завдяки Leaky Nun (друге рішення)

-1 завдяки мнемонічному (перше рішення)


>Q1стає tQ, що стає t.
Лина монашка

Ви можете зберегти байти на другий розчині шляхом заміни *2з +і використанням неявного введення двічі.

@Mnemonic Спасибі, я думаю, я не використовував це, тому що я надумав y, що замість цього не працює для рядків ...
Містер Xcoder


3

C # (.NET Core) , 76 55 байт

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

Спробуйте в Інтернеті!

Перша моя відповідь, написана безпосередньо в TIO, за допомогою мого мобільного телефону. Рівнем вище!

Пояснення: якщо початковий рядок є "ABCD", функція створює рядок "ABCDBBCD" і приймає з нього випадковий елемент.


Ваша програма повинна сприймати символи як вхідні дані від STDIN
Skidsdev

@Mayube виправлено, хоча це все ще може бути гольф ...
Чарлі

3

Javascript 35 байт

В якості рядка приймає рядок ABCD, виводить A1/8 часу, B3/8-ї частини часу, C1/4-го часу та D1/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(кожен iчитає символ зі STDIN до стека, і _є горизонтальним дзеркалом, яке риба ігнорує зараз). Потім він доходить до x.

Якщо xнадсилає рибу прямо, вона читає ще один символ (третій), друкує її oі зупиняється з ;. Лівий напрямок схожий: риба читає ще два символи (значить, ми до четвертого), обертається праворуч, друкує четвертий символ і зупиняється. Якщо риба плаває, вона загортає та друкує другий символ, перш ніж відобразитись правою /та зупинившись. Якщо вона пливе вниз, вона відбивається ліворуч /і б’є іншого x.

Цього разу два напрямки просто повертають рибку назад x(праворуч зі стрілкою <та вгору з дзеркалом _). Тому риба має 1/2 шансів уникнути цього xв кожному з двох інших напрямків. Ліворуч друкує верхній символ на стеці, який є другим, але вниз перший замінює два елементи на стеку $, тому цей напрямок друкує перший символ.

Підсумовуючи, третій та четвертий символи друкуються з вірогідністю 1/4 кожного; перший символ має ймовірність 1/2 x 1/4 = 1/8; а другий символ має ймовірність 1/4 + 1/2 x 1/4 = 3/8.



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$v на об'єднання лише верхніх 4чисел.
  • В кінці циклу vоб'єднує 1000результати у вектор, Sсортує їх, а Y'довжина виконання кодує його. Це дає чотири літери та кількість разів, коли вони з’явилися.

Так, зараз, схоже, виправлено
Skidsdev

@Mayube Дякую за те, що помітили!
Луїс Мендо



2

Рубі, 34 33 29 27 байт

Збережено 2 байти завдяки @Value Inc

Введіть як чотири символи

a=$**2
a[0]=a[1]
p a.sample

побудувати масив [B,B,C,D,A,B,C,D]і вибірку його.

спробуйте в Інтернеті!

спробуйте nраз! (Я перетворив його у функцію, щоб повторити її легше, але алгоритм той самий)


$*псевдонім для ARGV.
Значення чорнила

2

Pyth, 7 байт

@z|O8 1

Тестовий набір

O8генерує випадкове число від 0 до 7. | ... 1застосовує логічне або з 1, перетворюючи 0 в 1 і залишаючи все те саме. Число на цьому етапі становить 1 2/8-й час, а 2, 3, 4, 5, 6, 7 або 8 1/8 часу.

@zіндексує у вхідний рядок у цій позиції. Індексація виконується по модулю довжиною рядка, тому 4 індекси в положенні 0, 5 в положенні 1 і так далі.

Ймовірності такі:

  • Позиція 0: Випадкове число 4. 1/8 часу.

  • Позиція 1: Випадкове число 0, 1 або 5. 3/8 часу.

  • Позиція 2: Випадкове число 2 або 6. 2/8 часу.

  • Позиція 3: Випадкове число 3 або 7. 2/8 часу.


2

Javascript, 31 30 байт / 23 байти

Побачивши попередню відповідь Javascript на Asgallant, змусило мене задуматися про JS. Як він сказав:

Приймає рядок ABCDяк вхід, виводить A1/8 часу, B 3 /8-ї частини часу, 1/4 Cчасу, і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 байти

Але тоді дякую Арнолду, який розмістив за мною, коли той сказав:

Якщо дозволена залежна від часу формула, ми можемо просто зробити:

що, якщо це дійсно дозволено, привело мене до:

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

в якій new Date%8 використовується та сама розбивна таблиця, що і вище.

А %8також може бути &7; взяти свій вибір. Ще раз дякую, Арнольд.


2

ngn / apl, 10 байт

⎕a [⌈ /? 2 4]

?2 4 вибирає довільно пару чисел - перше серед 0 1, а друге серед 0 1 2 3

⌈/ є "максимальне зменшення" - знайдіть більшу кількість

⎕a - це великий алфавіт

[ ] індексація


відзначте діаграму для max (a, b), коли a∊ {0,1} і b∊ {0,1,2,3}:

    ┏━━━┯━━━┯━━━┯━━━┓
    ┃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 байт

-9 байт завдяки @ovs

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

Спробуйте в Інтернеті!


Пояснення

random.choice()отримує випадковий характер рядка, в той час як (s*2)[1:]+s[1]створює BCDABCDBдля входу ABCD, який має 1/8 Aс, 2/8 Cс, 2/8 Dс і 3/8 Bс.


Використовуйте random.choiceдля 55 байт:lambda s:choice((s[0]+s[1:]*3)[:8])
ов

@ovs Знайшов коротший шлях ^. Дякую за choice()все.
Містер 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

Спробуйте в Інтернеті!

Кожен з трьох ?виробляє випадковий біт. На першому циклі ці біти виконуються через перемикачі вище ( /s і \'s), щоб визначити, яке значення ми будемо виводити з цієї таблиці:

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

(де _може бути 0або 1). Потім ми проходимо по необхідному входу, друкуючи та завершуючи, коли буде досягнуто правильного значення.

Велика абетка в кінці копіюється оптом з програми для котів, це рішення просто пригнічує вихід і припиняється, щоб отримати намічений ефект.



1

Applesoft, 29 упс, 32 байти

Маленький приклад "ретрокомп'ютерних". Ведміть мене, я абсолютно новий. Я вважаю, що те, що позначається як "вхід", не повинно рахуватися самим байтом. Як зазначено в ОП, вхід подаватиметься як "ABCD". (Я спочатку не усвідомлював, що мені потрібно вказати отриманий вхід, який додав 4 байти, а решту внизу перейшов на байт.)

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

Терміни INPUT, RND, PRINT та MID $ кодуються внутрішньо як однобайтові лексеми.

Спочатку X присвоюється випадкове значення в діапазоні 0 <X <4. Це використовується для вибору одного з символів з I $, відповідно до (X <.5) + X + 1. Значення позиції символу приймається як усічена оцінка виразу. X <.5 додає 1, якщо X менше 0,5, в іншому випадку додайте 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" покращив би читабельність. Так сталося, що в цьому антикварному просторі кібертонгу традиційно демонстрували місця, де я їх мав. Для лексем, про які я згадував, справді вірно, що "внутрішнє представлення - це один байт". Тим часом я пограв у гольф код, який у мене був на байті.
Алан Щур

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"))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.