En uno de nuestros proyectos en el trabajo, recientemente descubrimos un método particularmente grande para generar una cadena de 6 caracteres a partir de un alfabeto de 15 caracteres. Algunos de nosotros afirmamos "Apuesto a que podemos poner eso en una línea", que comenzó un pequeño juego interno de golf de código.
¡Tu tarea es vencernos, lo que sin duda no tardará!
El algoritmo original usaba el alfabeto 0-9A-E, pero hemos experimentado con otros alfabetos. Por lo tanto, hay tres subtareas.
- Genere una
6cadena de caracteres seleccionando aleatoriamente de un15alfabeto de caracteres codificados arbitrariamente comoABC123!@TPOI098. (Esto es solo un ejemplo, y debe ser personalizable sin afectar el recuento de bytes). - Genere una
6cadena de caracteres seleccionando aleatoriamente de un15alfabeto de caracteres0123456789ABCDE. - Genere una
6cadena de caracteres seleccionando al azar del15alfabeto de caracteres que elija (solo caracteres imprimibles, por favor).
Cada personaje debe tener la misma posibilidad de selección y la repetición debe ser posible.
Lo mejor que hemos podido administrar para cada una de las subtareas es:
- "ABC123! @ TPOI098" -
24 bytes - "0123456789ABCDE" -
21 bytes - Alfabeto personalizado
13 bytes
Su puntaje es la suma de los bytes en la solución de cada subtarea. es decir, nuestro puntaje es actualmente 58.
Intentamos usar, entre otros, CJam y Ruby. El original estaba en C #. Use cualquier idioma que desee, pero nos interesará ver soluciones en estos idiomas particularmente
fuente

Respuestas:
Jalea , 38 bytes
TryItOnline une A , B , y C .
A :
ABC123!@£POI09822 bytes(pensando en una compresión para disminuir esta)
B :
0123456789ABCDE8 bytes:C :
123456789ABCDEF(opción), 8 bytes:¿Cómo?
fuente
CJam (23 + 14 + 10 = 47 bytes)
Alfabeto arbitrario: 23 bytes ( demostración en línea )
Alfabeto hexadecimal: 14 bytes ( demostración en línea )
Alfabeto personalizado:
ABCDEFGHIJKLMNO10 bytes ( demostración en línea )Disección
El hexadecimal es el interesante:
Los seis caracteres se dejan en la pila y se imprimen automáticamente.
fuente
AbHbes brillante Pensé en ese enfoque general, pero_9>7*+fue demasiado largo.Perl, 46 + 26 + 26 = 98 bytes
¡Gran parte del crédito va a @Dom Hastings por ahorrar 13 bytes!
Los 3 programas son bastante idénticos, excepto por el alfabeto que cambia.
Alfabeto codificado (
ABC123!@)POI098en este ejemplo) -> 46 bytes:say map{substr"ABC123!@)POI098",15*rand,1}1..6Alfabeto fijo
0123456789ABCDE-> 26 bytes:printf"%X",rand 15for 1..6Alfabeto personalizado
0123456789ABCDEen ese caso -> 26 bytes:printf"%X",rand 15for 1..6Puede ponerlos todos en un archivo para ejecutarlos:
(
say "";están aquí para mejorar el formato de salida)fuente
say:say map{("ABC123!@)POI098"=~/./g)[rand 15]}1..6ysay map{(A..O)[rand 15]}1..6. Por el segundo puede usarprintf: ¡printf"%X",rand 15for 1..6para ahorrar 11 en total! ¡Estoy seguro de que Ton puede aconsejar algo de magia arcana para ahorrar más también!substrguarda otro:say map{substr"ABC123!@)POI098",15*rand,1}1..6printf"%X",substr..randymap, es un poco menos obvio, ¡así que dejo que la gente disfrute de la magia perl sin spoilers! : DR, 33 + 43 + 59 = 135 bytes
Alfabeto codificado arbitrario (cambie la cadena para cambiar el alfabeto):
Alfabeto de
[0-9A-E]:Alfabeto definido por el usuario de stdin:
Todos los casos imprimen la palabra de salida en stdout.
fuente
JavaScript (ES6),
167166164163 bytesGuardado 1 byte gracias a Neil
Guardado 2 bytes gracias a ETHproductions
Guardado 1 byte gracias a premek.v
Codificado:
"ABC123!@TPOI098"(58 bytes)Corregido:
"0123456789ABCDE"(5857 bytes)Personalizado:
"()+.1=>?M[afhnt"(514948 bytes)fuente
(n=6)=>n?f(n-1)+("ABCDE"[n=Math.random()*15|0]||n-5):''te ahorra un byte.1/8+Mathes genial :).1+JSONes mejor;)JSON+f([object JSON](n=>" (JNOS[]bcejnot")JavaScript (ES6), 184 bytes
Alfabeto personalizado: 66 bytes
0-9A-E: 63 bytes
0-9a-e: 55 bytes
(Reste 6 bytes si la aleatoriedad basada en la fecha es permisible).
fuente
**:_=>((Math.random()+1)*15**6|0).toString(15).slice(1)f=en el conteo de bytesq, 42 bytes
UN
19 bytes
si
14 bytes
C
9 bytes
(usa las primeras quince letras del alfabeto)
fuente
Julia (36 + 26 + 21 = 83)
fuente
CJam, 48 bytes
Alfabeto arbitrario, 23 bytes:
Pruébalo en línea!
Dígitos hexadecimales, 15 bytes:
Pruébalo en línea!
Alfabeto
ABCDEFGHIJKLMNO, 10 bytes:Pruébalo en línea!
fuente
~clugar de'A+devolver algo técnicamente imprimible.Rubí 47 + 37 + 31 = 115
Codificado: "ABC123! @ TPOI098" (47)
Corregido: "0123456789ABCDE" (37)
Personalizado: "ABCDEFGHIJKLMNO" (31)
fuente
05AB1E , 43 bytes
Alfabeto arbitrario (
ABC123!@TPOI098), 23 bytes Pruébelo en líneaAlfabeto casi hexadecimal (
0123456789ABCDE), 10 bytes Pruébelo en líneaAlfabeto personalizado (
abcdefghijklmno), 10 bytes Pruébelo en líneafuente
Python 2, 70 + 70 + 64 = 204 bytes
Desafortunadamente, el segundo ejemplo es más fácil con el primer método que algo como
choice([randint(48,57)),choice(65,69)])fuente
from random import*? Creo que puedes usarimport randomyrandom.choiceal menos en los dos primeros ejemplos.import random random.choicees 27, perofrom random import* choicees de 26 años, tambiénimport random as r r.choicees 27format(randrange(8**8),'X').FVitsy, 27 +
2422 +1310 =646259 bytes# 1:
Pruébalo en línea!
# 2:
Pruébalo en línea!
# 3:
Donde están los caracteres disponibles:
Pruébalo en línea!
fuente
J, 24 + 24 +
1810 = 58 bytes¡8 bytes guardados gracias a las millas!
Sí, la segunda cadena no es fácilmente comprimible en J:
Si un alfabeto hexadecimal en minúscula está bien, entonces hay
,hfd?6#15para 9 bytes, como señaló @miles.De todos modos,
?6#15son 6 números aleatorios entre 0 y 15;{~es tomar deu:Convierte números en caracteres. El último ejemplo codificaABCDEFGHIJKLMNOP.Bonus: caso general
{~6?@##es más o menos:fuente
hfdque se convierte en h ex f rom d ecimal. Puede obtener una solución de 9 bytes usando,hfd?6#15. El último caso, solo para tener algo fácil de leer, utiliza el alfabeto de'A'una solución de 10 bytesu:65+?6#15, lo que hace un total de 24 + 9 + 10 = 45.PHP, 46 + 36 + 35 = 117 bytes
Codificado (46 bytes)
(47 bytes)Hexadecimal (minúsculas) (36 bytes)
Para mayúsculas, 46 bytes con versión codificada.
Personalizado (AO) (35 bytes)
fuente
Scala, 154 bytes
Alfabeto codificado (54 bytes):
Alfabeto hexadecimal (54 bytes):
Alfabeto personalizado
ABCDEFGHIJKLMNO(47 bytes):Explicación:
'A'to'O'crea una secuencia de 15 caracteres, de A a Ofuente
Pipa , 42 bytes
Alfabeto codificado, 22 bytes:
Dígitos hexadecimales, 11 bytes:
Primeras 15 letras minúsculas, 9 bytes:
Explicación
Los tres programas comienzan con
L6O: bucle 6 veces y generan la expresión dada.RC"...": Elección aleatoria de un personaje de la cadena codificadaRR15TB16: RandRange (15), convertido a Base 16z@RR15: alfabeto en minúsculasz, indexado con RandRange (15)Pruébalo en línea!
fuente
Skript / skQuery , 108 bytes
Codificado (43 bytes):
0123456789ABCDE (34 bytes):
Elección (31 bytes):
fuente
`a la izquierda?Jolf, 26 + 14 + 13 = 51 bytes
Alfabeto personalizado, 24 bytes. Pruébalo aquí!
Alfabeto 0-9A-E, 14 bytes. Pruébalo aquí!
lp^0wάeslp(0-Z) cortado (l) de0a15(wά).Alfabeto 1-9A-F, 13 bytes. Pruébalo aquí!
lp^1άes el mismo que el anterior, excepto de1a16.Método general:
Otros intentos (usando compresión de cadena):
fuente
PowerShell v2 +, 45 + 44 + 37 = 126 bytes
Alfabeto fijo, 45 bytes
Alfabeto casi hexadecimal, 44 bytes
Alfabeto personalizado (A a O), 37 bytes
Todos estos siguen el mismo patrón: bucle de
0a5, cada iteración selecciona unRandomcarácter o valor ASCII,charconvirtiéndolo en una matriz si es necesario, y uniéndolo-joinen una cadena. Esa cadena se deja en la tubería, y la salida es implícita.Ejemplos
fuente
Pyke, 35 bytes
Alfabeto arbitrario, 20 bytes
Pruébalo aquí!
Alfabeto hexadecimal, 8 bytes
Pruébalo aquí!
Alfabeto personalizado, 7 bytes
Pruébalo aquí!
Alfabeto elegido:
abcdefghijklmnofuente