En el idioma inglés, una forma segura de hacer una combinación de letras sin sentido pronunciable es hacerlo completamente de pares de consonantes-vocales, por ejemplo, Wu ko pa ha , o, Me fa ro , consonante primero, seguido de vocal .
Desafío:
Escriba un programa o función que, dado un número de letras especificado por el usuario, cree un nombre aleatorio utilizando este principio. Es así de simple.
Entrada:
Un entero mayor o igual a 2 que designa el número requerido de letras en la salida. La entrada puede tomarse de STDIN, argumentos de línea de comando o argumentos de función.
Salida:
Una cadena de la longitud dada que contiene pares de consonantes-vocales seleccionados al azar. Puede imprimirse en STDOUT o en la alternativa más cercana o devolverse en el caso de una función.
Reglas:
- Cada consonante del alfabeto inglés debe tener la misma probabilidad de ser seleccionada para el primer carácter de cada par, y cada vocal del alfabeto inglés debe tener la misma probabilidad de ser seleccionada para el segundo carácter de cada par.
- Los pares de letras pueden repetirse.
- Como se trata de un nombre, la primera letra debe estar en mayúscula.
- Si la entrada es impar, un par letra seleccionada aleatoriamente en el nombre debería tener y o h adjunta al final. La elección de y o h también debe ser aleatoria.
- Las lagunas estándar no están permitidas.
- El código más pequeño en bytes gana.
Definiciones de letras:
Consonantes
bcdfghjklmnpqrstvwxyz
Vocales:
aeiou
Ejemplo de E / S:
Input: 6
Output: Mefaro
Input: 9
Output: Wukohpaha
¡Disfrutar!
Respuestas:
Pyth, 33 bytes
Demostración.
fuente
JavaScript ES6,
187180168 bytesEditar: Cambié de usar regex replace a un simple for loop, lo que mejoró considerablemente la longitud. Código sin golf y prueba de interfaz de usuario a continuación. Ingrese un número negativo bajo su propio riesgo porque hace un bucle infinito. (Gracias a Unclemeat por señalar eso).
fuente
SWI-Prolog,
286285 bytesEjemplo:
a(13).
salidasLeqihsekeqira
.Nota: es posible que deba reemplazarlo
`
por"
si tiene una versión anterior de SWI-Prolog.fuente
Pyth,
5242 bytesPuedes probarlo en el compilador en línea aquí.
Gracias a Jakube por jugarlo aún más, a NinjaBearMonkey por aclarar el desafío, y por la creación de Pyth y sin querer enseñándome sobre
X
.Este programa selecciona aleatoriamente una consonante y una vocal para llenar la cadena, agrega 'h' o 'y' a un par si la entrada es impar, luego capitaliza el primer carácter. Aquí está el desglose:
Parece ineficiente agregar 'h' o 'y' al primer par consonante-vocal y luego mezclar la lista. Intenté agregar un par aleatorio, pero el código siempre fue más largo que esto.
fuente
rX1
capitalizaX
.t
es lo mismo que_P_
.J
, ya que la usaJ
solo una vez.Perl,
253238 bytesProbablemente pueda seguir jugando al golf, pero esto debería hacerlo por ahora.
Cambios:
fuente
Julia, 141 bytes
Esto crea una función lambda sin nombre que acepta un entero como entrada y devuelve una cadena. aprovecha el hecho de que las cadenas en Julia pueden indexarse y referenciarse como matrices de caracteres. Para llamarlo, dale un nombre, por ejemplo
f=n->...
.Ungolfed + explicación:
Ejemplos:
fuente
Pitón 2,
148169156Editar: me di cuenta de que no capitalizaba la primera letra. Veré si puedo volver a jugar golf mañana.
Edición 2: recordado
.title
pero creo que será todo.fuente
SmileBASIC 2 (Petit Computer),
197177 bytesEDICIÓN CONTEMPORÁNEA MAYO 2018 : ¡Esta fue mi primera presentación, hace casi 3 años! Mis habilidades han mejorado mucho desde entonces; -20 solo por ajustes menores.
Comienza con un mensaje (se deja en blanco para guardar bytes, por lo que es solo un?) Donde se coloca la longitud (almacenada en la variable
L
).Estoy seguro de que participar con un lenguaje BASIC oscuro no me dará más que un aspecto extraño, pero logré hacerlo bastante pequeño para BASIC. Aprovecha las peculiaridades extrañas de SB (como los condicionales que evalúan a 1 o 0 ya que no hay un tipo booleano) para eliminar tantos bytes como podría tener cuando escribí esto a las 3AM.
fuente
Maravilloso, 203 bytes
Pruébelo aquí (intérprete en línea). Entrada a través de argumentos. Las bibliotecas y tableros cilíndricos deben estar habilitados.
Versión comentada / legible:
Esto es más o menos equivalente al siguiente pseudocódigo (
random(a,b)
genera números entrea
eb
inclusive):fuente
Ruby, 119 bytes
13 bytes para capitalizar ...
Uso:
Salida:
fuente
C, 219 caracteres
Parece funcionar, todavía soy nuevo en esto.
fuente
rand()%(n-1-i)<2
lugar derand()%(n-1)<(i+2)
obtener una distribución uniforme, a menos que genere este número aleatorio solo una vez y lo guarde en algún lugar.🙋
que usa más de un byte.R, 166 bytes
Toma entradas de STDIN y salidas a STDOUT.
Explicación
Algunas pruebas
fuente
K5, 131 bytes
Esto NO funcionará en Kona o kdb +; necesitas usar un intérprete K5 como oK .
Demo en vivo. (Intente configurar
5
al final un número diferente para probar diferentes entradas).fuente
Rubí,
316 238216 caracteresLos combos de números impares terminan en
h
oy
.Gracias a @blutorange por un diccionario completo de consejos de golf rubí.
Whoa, acorté mi código en 100 caracteres.
fuente
j
fue un error tipográfico.for i in ?a..?z;...;end
se pueden reemplazar con(?a..?z).map{...}
; Elthen
afterif
es opcional.v.include?(i)||c.push(i)
es la abreviatura deunless v.include?(i);c.push(i)
. Usarc<<i
parac.push(i)
.c.map{}
es más corto quec.each{}
.i%2==1?1:2
es la abreviatura deif i%2==1;1;else;2;end
. Elprint "Enter..."
no es necesario en codegolf; )Perl 5 , 112 bytes
Pruébalo en línea!
fuente