Codegolf - Знаешь Ли Ты Свои Квз?

  • Автор темы Fwwcvh66
  • Обновлено
  • 22, Oct 2024
  • #1

Концепция

Какими способами можно изменить английский алфавит так, чтобы его можно было петь под мелодию «Мерцай, мерцай, маленькая звездочка», не испортив мелодию?

Правила

Обмен

Давайте просто предположим, что буквы, содержащиеся в каждом из следующих наборов, по умолчанию можно свободно менять местами, не испортив мелодию:

  • { А, Дж, К }
  • { B, C, D, E, G, P, T, V, Z }
  • { Я, Ю }
  • { Q, У }
  • { С, Х, Ф }
  • { М, Н }
  • Поэтому H, L, O, R и W зафиксированы на месте.

Выход

Программе необходимо вывести одну СЛУЧАЙНУЮ строку (или список символов), содержащую полный английский алфавит в любом порядке, при условии, что порядок удовлетворяет вышеуказанным условиям. У вас не должно быть возможности предсказать, какую строку выведет ваша программа (если мы игнорируем заполнение), то есть вы не можете просто жестко запрограммировать ее.

Ваша программа должна иметь некоторую положительную вероятность (не обязательно равномерную) генерации каждой из \$9! \cдот 3! \cдот 3! \cдот 2! \cдот 2! \cдот 2! = 104509440 \$ выходов.

Никаких особых ограничений форматирования в отношении пробелов, разделителей или регистра нет, просто будьте последовательны.

Цель

Наименьшее количество байтов выигрывает!

Примеры:

  • KCDBPSVHIAJLMNOZQRXGUEWFYT
  • A,G,Z,V,P,X,C,H,Y,K,J,L,N,M,O,T,U,R,S,D,Q,B,W,F,I, Э
  • KVTDCFBHIJALNMOPURSZQGWXYE
  • j c d e b x th h i k a l n mo g u r s v q p w f y z
  • ABCDEFGHIJKLMNOPQRSTUVWXYZ

Непример:

  • HLWROABCDEFZXYGIJKMNPQTSVU

Доказательство концепции: (Python3, 529 байт)

 import random
g1 = ['A', 'J', 'K']
g2 = ['B', 'C', 'D', 'E', 'G', 'P', 'T', 'V', 'Z']
g3 = ['I', 'Y']
g4 = ['Q', 'U']
g5 = ['S', 'X', 'F']
g6 = ['M', 'N']
random.shuffle(g1)
random.shuffle(g2)
random.shuffle(g3)
random.shuffle(g4)
random.shuffle(g5)
random.shuffle(g6)
print(g1[0] + g2[0] + g2[1] + g2[2] + g2[3] + g5[0] + g2[4] + 'H' + g3[0] + g1[1] + g1[2] + 'L' + g6[0] + g6[1] + 'O' + g2[5] + g4[0] + 'R' + g5[1] + g2[6] + g4[1] + g2[7] + 'W' + g5[2] + g3[1] + g2[8])
 

#код-гольф #строка #случайный

Fwwcvh66


Рег
30 Nov, 2010

Тем
59

Постов
188

Баллов
503
  • 26, Oct 2024
  • #3

05AB1E, 28 байты

{n}.

Выводится как одна строка в нижнем регистре.

Попробуйте онлайн или проверить \$n\$ случайные выходные данные сразу.

Объяснение:

?O`1. ?O`2. ?O`3. ?O`4. ?O`5. ?O`6.

См. мой совет по 05AB1E (раздел Как сжать строки, не входящие в словарь?) чтобы понять, почему )`¶$ [blank line] is ?O`{character}.¶ .

 

Kalobok


Рег
17 Jul, 2008

Тем
77

Постов
195

Баллов
590
  • 26, Oct 2024
  • #6

Перл 6, 76 байт

1

Попробуйте онлайн!

Анонимный блок кода, не принимающий аргументов и возвращающий список символов.

Объяснение:

K ||answer||

JavaScript - 421 344 328 320 306 280 277 276... 176 байт

-77 байт - самостоятельно

-18 Байт - благодаря @tsh и @Геза Кереченьи кто заставил меня увидеть что @tsh изначально тоже указал

-8 байт - благодаря @Геза Кереченьи

-14 байт - с помощью @Геза Кереченьи

-28 байт - самостоятельно

-3 байта – снова с помощью @Геза Кереченьи

-1 Байт - как такое могло случиться...

...

-100 байт - @Кайидо убил его и сделал несколько шагов, прежде чем все это дошло до 176 байт

Гольф:

J

или попробуй онлайн!

 

VasyaBli


Рег
03 Mar, 2020

Тем
86

Постов
236

Баллов
686
  • 26, Oct 2024
  • #7

Рунические чары, 210 байт

A

Попробуйте онлайн!

Рандомизация не однородный поскольку в Runic нет хорошего способа сделать это. Вместо этого он случайным образом вращает каждую коллекцию букв (например, 1A2B2C2D2E5F2GH3I1J1KL6M6NO2P4QR5S2T4U2VW5X3Y2Z is one grouping) by some amount (e.g. rotating the above set by 4, where the top of the stack is at the right, the result would be K`1A2B2C2D2E5F2GH3I1J1KL6M6NO2P4QR5S2T4U2VW5X3Y2Z ), а затем случайным образом решает, следует ли перевернуть стек. Он выполняет эти операции 15 раз. В результате все возможные порядки возможный но не одинаково вероятно. (В случае, если этого недостаточно, увеличиваем еще стоит ноль байт, до 15000 циклов перемешивания).

Это раздел кода, который обрабатывает перетасовку:

K`1A2B2C2D2E5F2GH3I1J1KL6M6NO2P4QR5S2T4U2VW5X3Y2Z ~(K`123456 . ?O`$&.¶ )`¶$ [blank line] \d [blank line]

Остальная часть кода разворачивается следующим образом:

‽Φκ¬№KAμ

Если буквы оставить неперемешанными (но один раз перевернуть), изменив два байта алфавита печатается нормально, который можно использовать для проверки того, что все группы букв печатаются в правильных местах. Пробелы, смещающие else commands out of phase is so that all the IPs can use the function loop at the same time without colliding, and then getting them back into phase again.

В гольфе сначала обрезалось любое пространство, которое можно было удалить на всех линиях, затем каждые два места преобразовывались в F№κι , and every sequence of AJK BCDEGPTVZ IY QU SXF MN H L O R W был преобразован в F⪪”&↖(vJf#S»↖ιηa↷N↖⪪νP´↑x‖υ” because Fα и FαF⪪”&↖(vJf#S»↖ιηa↷N↖⪪νP´↑x‖υ” F№κι‽Φκ¬№KAμ are the same amount of delay, but 2 bytes cheaper. The loop exit was also combined with the основной сегмент программы, чтобы сэкономить на пробелах (12 байт).

 

Dellar


Рег
01 Feb, 2008

Тем
72

Постов
191

Баллов
571
  • 26, Oct 2024
  • #8

Перл 5, 103 91 85 байт

Попробуйте онлайн!

Этот код (ab) использует тот факт, что вывод Perl хэш-ключей ( ?⍨ ) is random to create a mapping ( ) всех изменяемых букв к одному из их возможных аналогов. Во время вывода любой несуществующий ключ считается неизменным.

 

Николка


Рег
05 Apr, 2011

Тем
82

Постов
196

Баллов
616
  • 26, Oct 2024
  • #11

APL (расширенный диалог), 55 байт

Полная программа. Печатает заглавные буквы с начальным и конечным пробелом, но без промежуточных пробелов.

(

Попробуйте онлайн!

⊢⍵  the uppercase alphabet

"QU"λ("SXF"λ("MN"λ"A-Z"))}/  примените следующую анонимную неявную функцию с ней в качестве правого аргумента и указанной строкой в ​​качестве левого аргумента:

{  for the left argument,

 partition it, beginning a new segment where

 the left arguments characters are members of the right argument (i.e. on uppercase letters)

 append

 enclose (to treat it as a single element)
,⍨  the
 right argument

 uppercase everything

)  уменьшите следующую анонимную лямбду, давая... 'AjkBcdegptvzIyQuSxfMn'( :

⎕A  on the right argument (the scrambling-in-progress alphabet)

{(?⍨∘≢⊇⊢)@(∊∘⍺)⊢⍵}/⌈'AjkBcdegptvzIyQuSxfMn'(⊂⍤⊢,⍨∊⊂⊣)⎕A a,b,i,q,s,m,h,l,o,r,w=(set(s)for s in["AJK","BCDEGPTVZ","IY","QU","SXF","MN",*"HLORW"]) print([eval(c).pop()for c in[*"abbbbsbhiaalmmobqrsbqbwsib"]])  примените следующую анонимную неявную функцию к подмножеству, которое является членом левого аргумента (группы рифм)

   ØA“wẸXWỵḲ⁻ȦƙṄṇ’œэµ“ĠQ’ḃ3ÄœṖ⁸Ẋ€Ẏị@Ụ  on that subset

   %k  reorder it to be

   %l  a random permutation
   map{my%l;@l{/./g}++;@k{/./g}=keys%l}AJK,BCDEGPTVZ,SXF,IY,QU,MN;say map$k{$_}||$_,A..Z  of length
   HLORW  tally of letters in the subset

 

Plaync14


Рег
25 Oct, 2024

Тем
52

Постов
196

Баллов
456
  • 26, Oct 2024
  • #12

Древесный уголь, 43 байта

yyyy

Попробуйте онлайн! Ссылка на подробную версию кода. У Charcoal нет операторов перетасовки, но я придумал метод выборки без замены. Объяснение:

̤

Прокрутите каждую букву алфавита.

̤

Разделить строку yyyy on spaces and loop over the substrings.

y

В цикле определите, сколько раз текущая буква появляется в подстроке. (Я использую цикл, потому что для условного выражения потребуется B caluse. Alternatively I could have filtered on the substring containing the current letter for the same byte count.)

ABCDEFGHIJKLMNOPQRSTUVWXYZ > `AJK`08B $ $$; > `BCDEGPTVZ`08B $$$$ $ $ $ $ $; > `IY`08B $ $; > `QU`08B $ $; > `FSX`08B $ $ $; > `MN`08B $$; > `HLORW`08Bo $ $ $ $ $; ^ Create IPs ^^^^^^^^^^^^^^^^ Set letter groupings ^^^ Call shuffle function ^^^^^^^^^^^^^^^^^^^^^^^^^^ Print letters ^ Last letter group needs to be sorted

Напечатайте случайный символ, но исключите те, которые уже были напечатаны.

 

ENL


Рег
13 Sep, 2006

Тем
73

Постов
208

Баллов
583
  • 26, Oct 2024
  • #13

сетчатка, 80 байт

v vvvv Loop counter }}f}l3-[r\ < Loop entry [2'RA?r1KRl'RAs]{1-:0)?\}l3- \~{{B͍ < loop exit ^^^^^^ Randomly reverse ^^^^^ Rotate by a random an amount

Попробуйте онлайн!

Вероятно, это не самый удачный метод, но я все равно его представлю.

Объяснение:

[BCDEGZPTV]

Установите рабочую строку на [BCDEGPTVZ] . There is a number before each letter in a group, for example >yy `AJK`06B$̤$@ >`BCDEGPTVZ`06B$$$$ $̤$y $ $y @ >̤`IY`06Byyy$yyy̤ @ > ̤`QU`06Byy̤ $y @ > ̤`FSX`06B $yy̤$yy@ >y̤ `MN`06Byyy $@ }}f}l3-[r\ 3-[2'RA?rR1Kl'RAs]{1-:0)?\}l > ̤`HLORW`06Bo$y $y$y$yy@ \~{{B͍ , c=[,'AJK','BCDEGPTVZ','IY','QU','SXF','MN'].map(s=>[...s]);alert([...'1222252H311L66O24R5242W532'].reduce((o,v)=>o+(+v?(p=>p.splice((Math.random()*p.length)|0,1))(c[v]):v),"")) and { } # Anonymous code block my@a='A'..'Z'; # Initialise @a as a list of the alphabet <AJK BCDEGPTVZ IY QU SXF MN> # For each of the sets of letters >>.&{@a[.ords X-65].= } # Set those indexes pick(*) # To a random order ;@a # And return у всех есть {my@a='A'..'Z';<AJK BCDEGPTVZ IY QU SXF MN>>>.&{@a[.ords X-65].=pick(*)};@a} before them.

`^`=strsplit L=LETTERS for(s in el('AJK7BCDEGPTVZ7IY7QU7FSX7MN'^7)^'')L[L%in%s]=sample(s) L

Отметьте раздел кода, который будет создавать код Retina, а затем запустите его.

hMeD,Vs.SMJc"ajk bcdegptvz iy qu fsx mn h l o r w"dxLGsJ Implicit: d=" ", G=<lowercase alphabet> Jc"ajk bcdegptvz iy qu fsx mn h l o r w"d Chop the grouping string on spaces, store in J sJ Concatenate J into single string xLG Find the index of each letter in grouping string in the unaltered alphabet .SMJ Shuffle each group in J s Concatenate into a single string ,V Pair the shuffled string with their 'correct' positions in the alphabet eD Order the pairs by the derived positions (last element of each pair) hM Keep the letter from each pair (the first element) Implicit print

Установите рабочую строку на hMeD,Vs.SMJc"ajk bcdegptvz iy qu fsx mn h l o r w"dxLGsJ

s=[*?A..?Z]*'' %w(AJK BCDEGPTVZ IY QU SXF MN).map{|e|a=e.chars.shuffle;s.gsub!(/[#{e}]/){a.pop}} $><<s

Замените каждый символ на "ajk bcdegptvz iy qu sxf mn"

.•¬=©ƶÓÄûkTVã”ØζÞ•

Удалите завершающую новую строку и завершите группу, чтобы сгенерировать код. Группа сгенерирует код:

A # (a) Push the lowercase alphabet .•¬=©ƶÓÄûkTVã”ØζÞ• # Push compressed string "ajk bcdegptvz iy qu sxf mn" Dá # (b) Duplicate it, and only keep the letters (removing the spaces) s# # Swap to get the string again, and split it by spaces €.r # Shuffle each substring randomly J # (c) Join it back together to a single string ‡ # Transliterate all characters from (b) to (c) in string (a) # (and output the result implicitly)

A.•¬=©ƶÓÄûkTVã”ØζÞ•Dás#€.rJ‡ matches all instances of number н за которым следует персонаж. from random import* s='' for c in'abbbbebHcaaLffObdRebdbWecb':s+=choice(list(set(('AJK BCDEGPTVZ IY QU SXF MN '+c).split()['abcdef'.find(c)])-set(s))) print s sorts each instance randomly, and this is done for all character sets.

d=*map(set,'AJK BCDEGPTVZ IY QU SXF MN H L O R W'.split()), print([d[int(c,16)].pop()for c in'0111141620075581394131a421'])

Наконец, удалите все числа и неявно выведите сгенерированную строку.

 

Андрей 099


Рег
23 Jun, 2013

Тем
71

Постов
182

Баллов
577
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно