Concepto
¿De qué maneras puedes mezclar el alfabeto inglés para que aún se pueda cantar con la melodía Twinkle Twinkle Little Star sin arruinar la melodía?
Reglas
Intercambiando
Supongamos que las letras contenidas en cada uno de los siguientes conjuntos se pueden intercambiar libremente de forma predeterminada sin arruinar la melodía:
- {A, J, K}
- {B, C, D, E, G, P, T, V, Z}
- {I, Y}
- {Q, U}
- {S, X, F}
- {M, N}
- Por lo tanto, H, L, O, R y W están bloqueados en su lugar
Salida
El programa debe generar una única cadena ALEATORIA (o lista de caracteres) que contenga el alfabeto inglés completo en cualquier orden, siempre que ese orden cumpla las condiciones anteriores. No debería haber forma de predecir qué cadena generará su programa (si ignoramos la siembra), lo que significa que no puede simplemente codificarlo.
¡Su programa debe tener alguna probabilidad positiva (no necesariamente uniforme) de generar cada uno de los salidas.
No existen restricciones de formato particulares con respecto al espaciado, delimitadores o mayúsculas y minúsculas, solo sea consistente.
Gol
¡Pocos bytes ganan!
Ejemplos:
- 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, mi
- KVTDCFBHIJALNMOPURSZQGWXYE
- jcdebxthikalnmogursvq pwfyz
- ABCDEFGHIJKLMNOPQRSTU VWXYZ
No ejemplo:
- HLWROABCDEFZXYGIJKMNPQTSVU
Prueba de concepto: (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 "encerrado en su lugar", ¿no rima con los demás?Respuestas:
05AB1E , 28 bytes
Salidas como una sola cadena en minúsculas.
Explicación:
Ver este consejo 05AB1E mío (sección Cómo comprimir cadenas que no forman parte del diccionario? ) Para entender por qué
.•¬=©ƶÓÄûkTVã”ØζÞ•
es"ajk bcdegptvz iy qu sxf mn"
.fuente
Python 3 ,
140133124123 bytesPruébalo en línea!
-1 byte, gracias a Jo King
Python 2 ,
174170158 bytesPruébalo en línea!
fuente
Ruby , 102 bytes
Pruébalo en línea!
fuente
Pyth ,
595756 bytesPruébalo en línea!
La salida es una matriz de letras minúsculas.
fuente
R ,
9391 bytesPruébalo en línea!
fuente
Perl 6 , 76 bytes
Pruébalo en línea!
El bloque de código anónimo no toma argumentos y devuelve una lista de caracteres.
Explicación:
fuente
JavaScript -
421344328320306280277276... 176 Bytes-77 Bytes - por mi cuenta
-18 Byte - gracias a @tsh y @Geza Kerecsenyi que me hicieron ver lo que @tsh señaló inicialmente también
-8 Bytes - gracias a @Geza Kerecsenyi
-14 Bytes - con la ayuda de @Geza Kerecsenyi
- 28 bytes - por mi cuenta
-3 - Bytes de nuevo con la ayuda de @Geza Kerecsenyi
-1 Bytes - ¿cómo podría suceder esto ...
...
-100 Bytes - @Kaiido mató a ella y a través de algunos pasos antes de que todo esto se bajó a 176 bytes
Golfizado:
o pruébalo en línea !
fuente
'BCDEGPTVZ'.split``
lugar de.split('')
por -2.y=q=>q.split``
en la parte superior de su código, y hacer todas las cadenas de matrices que se pasa eny()
- por ejemplo,a=['A','J','K']
se convierte ena=y("AJK")
'BCDEGPTVZ'.split('')
cony('BCDEGPTVZ')
'abcdef'.includes(s)?r(eval(s)):l[i]
Encantamientos rúnicos , 210 bytes
Pruébalo en línea!
La aleatorización no es uniforme ya que no hay una buena manera de hacerlo en Runic. En cambio, rota aleatoriamente cada colección de letras (por ejemplo,
[BCDEGPTVZ]
es una agrupación) en cierta cantidad (por ejemplo, girando el conjunto anterior por 4, donde la parte superior de la pila está a la derecha, el resultado sería[BCDEGZPTV]
) y luego decide aleatoriamente si invertir la pila. Realiza estas operaciones 15 veces. Como resultado, todos los posibles pedidos son posibles pero no igualmente probables. (En el caso de que esto no sea suficiente, aumentarlo aún cuesta cero bytes , hasta 15000 bucles aleatorios).Esta es la sección del código que maneja el barajado:
El resto del código se desenvuelve en esto:
Si las letras se dejan sin mezclar (pero una vez invertidas) al cambiar dos bytes, el alfabeto se imprime normalmente , lo que se puede utilizar para verificar que todos los grupos de letras se impriman en los lugares correctos. El espacio en blanco que desplaza los
B
comandos fuera de fase es para que todas las IP puedan usar el bucle de funciones al mismo tiempo sin colisionar, y luego volver a ponerlos en fase.Para jugar al golf, primero se recortó cualquier espacio que pudiera eliminarse en todas las líneas, luego cada dos espacios se convirtieron en a
y
, y cada secuencia deyyyy
se convirtió en̤
porque̤
yyyyy
tienen la misma cantidad de retraso, pero 2 bytes más baratos. La salida del bucle también se combinó con elHLORW
segmento principal del programa para ahorrar en los bytes de espaciado (12 bytes).fuente
Perl 5 ,
103 9185 bytesPruébalo en línea!
Este código (ab) utiliza el hecho de que la salida de las claves hash (
%l
) de Perl es aleatoria para crear una asignación (%k
) de todas las letras modificables a una de sus posibles contrapartes. En el momento de la salida, se supone que cualquier clave que no existe no se modifica.fuente
keys
Definitivamente, usar es un buen enfoque, pero puedes guardar 6 bytes usandosort rand 2,...
:( ¡ Pruébalo en línea!Jalea , 34 bytes
Pruébalo en línea!
fuente
Python 3 , 149 bytes
Pruébalo en línea!
Aleatorización mediante el uso de pop () para el conjunto de letras
fuente
APL (Dyalog Extendido) , 55 bytes
Programa completo Imprime en mayúsculas con un espacio inicial y final, pero sin espacios intermedios.
Pruébalo en línea!
⎕A
el alfabeto en mayúscula'AjkBcdegptvzIyQuSxfMn'(
...)
aplique la siguiente función tácita anónima con eso como argumento derecho y la cadena indicada como argumento izquierdo:⊣
para el argumento de la izquierda,⊂
particionarlo, comenzando un nuevo segmento donde∊
los caracteres de los argumentos de la izquierda son miembros del argumento de la derecha (es decir, en letras mayúsculas),⍨
adjuntar⊂
adjuntar (para tratarlo como un solo elemento)⍤
el⊢
argumento correcto⌈
todo en mayúscula{
...}/
reducir por la siguiente lambda anónima, dando ..."QU"λ("SXF"λ("MN"λ"A-Z"))
:⊢⍵
en el argumento correcto (el alfabeto de codificación en progreso)(
...)@(∊∘⍺)
aplique la siguiente función tácita anónima al subconjunto que es miembro del argumento izquierdo (un grupo de rimas)⊢
en ese subconjunto⊇
reordenar para que sea?⍨
Una permutación aleatoria∘
de la longitud≢
de las letras en el subconjuntofuente
Carbón , 43 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. El carbón no tiene operadores de barajado, pero se me ocurrió un método de muestreo sin reemplazo. Explicación:
Pase sobre cada letra del alfabeto.
Divida la cadena
AJK BCDEGPTVZ IY QU SXF MN H L O R W
en espacios y repita sobre las subcadenas.Recorre el número de veces que aparece la letra actual en la subcadena. (Uso un bucle porque un condicional necesitaría un
else
caluse. Alternativamente, podría haber filtrado en la subcadena que contiene la letra actual para el mismo recuento de bytes).Imprima un carácter aleatorio pero excluya los que ya se han impreso.
fuente
Retina , 80 bytes
Pruébalo en línea!
Probablemente no sea el método más golfizado, pero lo enviaré de todos modos.
Explicación:
Establezca la cadena de trabajo en
1A2B2C2D2E5F2GH3I1J1KL6M6NO2P4QR5S2T4U2VW5X3Y2Z
. Hay un número antes de cada letra en un grupo, por ejemploA
,J
yK
todos tienen1
antes.Marque una sección de código que produzca algún código de retina y luego ejecútelo.
Establecer la cadena de trabajo a
123456
Reemplace cada personaje con
?O`{character}.¶
Elimine la nueva línea final y finalice el grupo para generar el código. El grupo generará el código:
{n}.
coincide con todas las instancias del número n seguido de un carácter.?O
ordena cada instancia al azar, y esto se hace para todos los conjuntos de caracteres.Finalmente, elimine todos los números y genere implícitamente la cadena generada.
fuente