Conceito
De que maneira você pode embaralhar o alfabeto inglês para que ele ainda possa ser cantado na música Twinkle Twinkle Little Star sem estragar a música?
Regras
Troca
Vamos supor que as letras contidas em cada um dos seguintes conjuntos possam ser trocadas livremente por padrão, sem estragar a música:
- {A, J, K}
- {B, C, D, E, G, P, T, V, Z}
- {I, Y}
- {Q, U}
- {S, X, F}
- {M, N}
- Portanto, H, L, O, R e W estão travados no lugar
Saída
O programa precisa gerar uma única sequência RANDOM (ou lista de caracteres) contendo o alfabeto inglês completo em qualquer ordem, desde que a ordem atenda às condições acima. Não deve haver maneira de você prever qual string seu programa produzirá (se ignorarmos a propagação), o que significa que você não pode simplesmente codificá-lo.
Seu programa deve ter alguma probabilidade positiva (não necessariamente uniforme) de gerar cada um dos saídas.
Não há restrições de formatação específicas em relação ao espaçamento, delimitadores ou maiúsculas e minúsculas, apenas seja consistente.
Objetivo
Menos bytes ganha!
Exemplos:
- 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, E
- KVTDCFBHIJALNMOPURSZQGWXYE
- jcdebxthikalnmogursvq pwfyz
- 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
Nenhum exemplo:
- HLWROABCDEFZXYGIJKMNPQTSVU
Prova de conceito: (Python3, 529 bytes)
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])
Z
estar "trancado no lugar", não rima com os outros?Respostas:
05AB1E , 28 bytes
Saídas como uma única sequência minúscula.
Experimente online ou verifique saídas aleatórias de uma só vezn .
Explicação:
Veja este 05AB1E ponta do meu (seção Como cordas compressa não fazem parte do dicionário? ) Para entender por que
.•¬=©ƶÓÄûkTVã”ØζÞ•
é"ajk bcdegptvz iy qu sxf mn"
.fonte
Python 3 ,
140133124123 bytesExperimente online!
-1 byte, graças a Jo King
Python 2 ,
174170158 bytesExperimente online!
fonte
Ruby , 102 bytes
Experimente online!
fonte
Pitão ,
595756 bytesExperimente online!
Saída é uma matriz de letras minúsculas.
fonte
R ,
9391 bytesExperimente online!
fonte
Perl 6 , 76 bytes
Experimente online!
Bloco de código anônimo sem argumentos e retornando uma lista de caracteres.
Explicação:
fonte
JavaScript -
421344328320306280277276... 176 Bytes-77 Bytes - por conta própria
-18 Byte - graças a @tsh e @Geza Kerecsenyi, que me fizeram ver o que @tsh inicialmente apontou também
-8 Bytes - graças a @Geza Kerecsenyi
-14 Bytes - com a ajuda de @Geza Kerecsenyi
- 28 Bytes - On my Own
-3 Bytes - novamente com a ajuda de @Geza Kerecsenyi
-1 Bytes - como isso poderia acontecer ...
...
-100 Bytes - @Kaiido matou-o e através de alguns passos antes essa coisa toda desceu para 176 bytes
Golfe:
ou experimente online !
fonte
'BCDEGPTVZ'.split``
vez de.split('')
para -2.y=q=>q.split``
na parte superior do seu código e criar todas as cadeias de caracteres das quais você passay()
- por exemplo,a=['A','J','K']
se tornaa=y("AJK")
'BCDEGPTVZ'.split('')
pory('BCDEGPTVZ')
'abcdef'.includes(s)?r(eval(s)):l[i]
Encantos Rúnicos , 210 bytes
Experimente online!
A randomização não é uniforme, pois não há uma boa maneira de fazer isso em Runic. Em vez disso, ele gira aleatoriamente cada coleção de letras (por exemplo,
[BCDEGPTVZ]
um agrupamento) em alguma quantidade (por exemplo, girando o conjunto acima por 4, onde a parte superior da pilha está à direita, o resultado seria[BCDEGZPTV]
) e então decide aleatoriamente se deve ou não inverta a pilha. Ele realiza essas operações 15 vezes. Como resultado, todos os pedidos possíveis são possíveis, mas não são igualmente prováveis. (Caso isso não seja suficiente, aumentá-lo custa zero bytes , até 15000 loops aleatórios).Esta é a seção do código que lida com o embaralhamento:
O restante do código se desenrola nisso:
Se as letras não forem embaralhadas (mas revertidas uma vez), alterando dois bytes, o alfabeto será impresso normalmente , o que pode ser usado para verificar se todos os agrupamentos de letras são impressos nos locais corretos. O espaço em branco que desloca os
B
comandos para fora da fase é para que todos os IPs possam usar o loop de função ao mesmo tempo sem colidir e, em seguida, colocá-los novamente em fase.Para o golfe, primeiro qualquer espaço que pudesse ser removido em todas as linhas era aparado; depois, cada um dos dois espaços era convertido em a
y
, e cada sequênciayyyy
era convertida em̤
porque̤
eyyyy
tem a mesma quantidade de atraso, mas 2 bytes mais barato. A saída do loop também foi combinada com oHLORW
segmento principal do programa para economizar nos bytes de espaçamento (12 bytes).fonte
Perl 5 ,
103 9185 bytesExperimente online!
Este código (ab) usa o fato de que a saída de chaves hash (
%l
) do Perl é aleatória para criar um mapeamento (%k
) de todas as letras modificáveis para uma de suas possíveis contrapartes. No momento da saída, qualquer chave que não exista é assumida como inalterada.fonte
keys
é definitivamente uma boa abordagem, mas você pode salvar 6 bytes usandosort rand 2,...
:( Experimente on-line!Geléia , 34 bytes
Experimente online!
fonte
Python 3 , 149 bytes
Experimente online!
Randomização usando pop () para o conjunto de letras
fonte
APL (Dyalog Extended) , 55 bytes
Programa completo. Imprime maiúsculas com um espaço à esquerda e à direita, mas sem espaços intermediários.
Experimente online!
⎕A
o alfabeto maiúsculo'AjkBcdegptvzIyQuSxfMn'(
…)
Aplique a seguinte função tácita anônima com isso como argumento da direita e a sequência indicada como argumento da esquerda:⊣
para o argumento esquerdo,⊂
particioná-lo, iniciando um novo segmento onde∊
os caracteres de argumentos à esquerda são membros do argumento à direita (ou seja, em letras maiúsculas),⍨
acrescentar⊂
coloque (para tratá-lo como um único elemento)⍤
o⊢
argumento correto⌈
tudo em maiúsculas{
…}/
Reduza pela seguinte lambda anônima, fornecendo…"QU"λ("SXF"λ("MN"λ"A-Z"))
:⊢⍵
no argumento certo (o alfabeto em andamento)(
…)@(∊∘⍺)
Aplique a seguinte função tácita anônima ao subconjunto que é membro do argumento esquerdo (um grupo de rimas)⊢
nesse subconjunto⊇
reordenar?⍨
uma permutação aleatória∘
do≢
registro de tamanho das letras no subconjuntofonte
Carvão , 43 bytes
Experimente online! Link é a versão detalhada do código. O carvão vegetal não possui operadores de embaralhamento, mas criei um método de amostragem sem substituição. Explicação:
Faça um loop sobre cada letra do alfabeto.
Divida a sequência
AJK BCDEGPTVZ IY QU SXF MN H L O R W
em espaços e faça um loop sobre as substrings.Repita o número de vezes que a letra atual aparece na substring. (Eu uso um loop porque um condicional precisaria de uma
else
caluse. Como alternativa, eu poderia ter filtrado a substring que contém a letra atual para a mesma contagem de bytes.)Imprima um caractere aleatório, mas exclua aqueles que já foram impressos.
fonte
Retina , 80 bytes
Experimente online!
Provavelmente não é o método mais praticado, mas vou enviá-lo de qualquer maneira.
Explicação:
Defina a sequência de trabalho para
1A2B2C2D2E5F2GH3I1J1KL6M6NO2P4QR5S2T4U2VW5X3Y2Z
. Há um número antes de cada letra em um grupo, por exemploA
,J
eK
todos têm1
antes deles.Marque uma seção do código que produzirá algum código de retina e execute-o posteriormente.
Defina a cadeia de trabalho como
123456
Substitua cada caractere por
?O`{character}.¶
Remova a nova linha à direita e termine o grupo para gerar o código. O grupo irá gerar o código:
{n}.
corresponde a todas as instâncias do número n seguido por um caractere.?O
classifica cada instância aleatoriamente, e isso é feito para todos os conjuntos de caracteres.Por fim, remova todos os números e produza implicitamente a sequência gerada.
fonte