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
6
cadena de caracteres seleccionando aleatoriamente de un15
alfabeto de caracteres codificados arbitrariamente comoABC123!@TPOI098
. (Esto es solo un ejemplo, y debe ser personalizable sin afectar el recuento de bytes). - Genere una
6
cadena de caracteres seleccionando aleatoriamente de un15
alfabeto de caracteres0123456789ABCDE
. - Genere una
6
cadena de caracteres seleccionando al azar del15
alfabeto 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!@£POI098
22 bytes(pensando en una compresión para disminuir esta)
B :
0123456789ABCDE
8 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:
ABCDEFGHIJKLMNO
10 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
AbHb
es 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!@)POI098
en este ejemplo) -> 46 bytes:say map{substr"ABC123!@)POI098",15*rand,1}1..6
Alfabeto fijo
0123456789ABCDE
-> 26 bytes:printf"%X",rand 15for 1..6
Alfabeto personalizado
0123456789ABCDE
en ese caso -> 26 bytes:printf"%X",rand 15for 1..6
Puede 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..6
ysay map{(A..O)[rand 15]}1..6
. Por el segundo puede usarprintf
: ¡printf"%X",rand 15for 1..6
para ahorrar 11 en total! ¡Estoy seguro de que Ton puede aconsejar algo de magia arcana para ahorrar más también!substr
guarda otro:say map{substr"ABC123!@)POI098",15*rand,1}1..6
printf"%X"
,substr..rand
ymap
, 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+Math
es genial :).1+JSON
es 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
~c
lugar 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 random
yrandom.choice
al menos en los dos primeros ejemplos.import random random.choice
es 27, perofrom random import* choice
es de 26 años, tambiénimport random as r r.choice
es 27format(randrange(8**8),'X')
.F
Vitsy, 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#15
para 9 bytes, como señaló @miles.De todos modos,
?6#15
son 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
hfd
que 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
) de0
a15
(wά
).Alfabeto 1-9A-F, 13 bytes. Pruébalo aquí!
lp^1ά
es el mismo que el anterior, excepto de1
a16
.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
0
a5
, cada iteración selecciona unRandom
carácter o valor ASCII,char
convirtiéndolo en una matriz si es necesario, y uniéndolo-join
en 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:
abcdefghijklmno
fuente