El escenario: usted es un diseñador de software que trabaja para una empresa administrada por el gobierno que diseña placas para automóviles y otros vehículos. Se le ha pedido que desarrolle software que genere placas de matrícula. Antes de ir a trabajar, tus jefes establecieron estas reglas básicas.
Una placa no puede contener:
ASS
666
69<any number here>
<any number here>69
KKK
SHT
Reglas y requisitos:
- La matrícula debe ser generada al azar.
- Una vez que se genera una matrícula aleatoria, la misma matrícula no puede generarse nuevamente.
- Debe generar al menos 200 placas únicas . Puedes generar más si quieres .
- Puede almacenar placas generadas en un archivo para "recordarlas".
- La placa de matrícula contiene 2 secciones, una que contiene solo tres letras y otra que contiene solo tres números, separados por un guión, como este:
233-ADF
oADF-233
. - Solo puede usar números y letras mayúsculas.
- Las placas de matrícula se pueden escribir en stdout o en un archivo.
- Cada "lado" de una placa contendrá tres números o letras.
- Este es un código de golf , por lo que la respuesta más corta y más popular gana. El ganador será elegido después de siete días.
Reglas generales
- La respuesta debe incluir, entre otros, lo siguiente.
- Nombre del lenguaje.
- Número de letras.
- Tamaño del archivo.
- Cómo se ejecuta el código.
- El código en sí.
- Ejemplo: caracteres Python 234 o Python 23mb .
Si necesito aclarar algún detalle adicional, menciónelo en los comentarios y lo agregaré a mi publicación. De todos modos, buena suerte, ¡y que me generen algunas placas apropiadas!
Actualización 1: el ganador será elegido un poco antes.
Resulta que tengo que hacer un viaje pronto, por lo que elegiré un ganador alrededor de las 00:00 UTC del 25 de julio. Después de que se elija el ganador, aún puede enviar entradas, solo sepa que se ha elegido un ganador. Bai
Actualización 2: ¡Ganadores!
¡Tenemos ganadores! ¡Hurra! ¡Queso y vino a todos los que participaron! Aquí está quién ganó.
- 1er lugar: Àngel - Bash (95 caracteres)
- 2do lugar: Martin Büttner - Mathematica (182 bytes)
- 2do lugar: Emilio M Bumachar - Pyg (92?)
- 2do lugar: Peter Taylor - Golfscript (98 caracteres)
- 3er lugar: Mark Thomas - Ruby (127 caracteres)
Wow, tres empates en el segundo lugar. Guau. La competencia ha terminado, pero siéntase libre de enviar entradas si lo desea. Bai!
fuente
AAA-
Respuestas:
bash (95 caracteres)
Guarde el script como
m
en una carpeta en su RUTA con el conjunto de bits de ejecución.Corre como
bash m
. Las placas se almacenan en el archivo pEsto es equivalente a ejecutar lo siguiente:
Advertencia: la final
m
debería serexec m
(+5 caracteres) para evitar dejar los procesos en espera de completarse (pero puede tener miles sin muchos problemas)El crédito va a http://www.cyberciti.biz/faq/linux-random-password-generator/ por la idea de usar
tr -dc
fuente
grep -v
excluye tanto la lista negra como la lista de placas que ya generamos (grep
espera que p contenga un patrón por línea, pero como las placas no contienen metacaracteres de expresión regular, solo coinciden). Solo generamos una o cero placas por iteración, por lo que después de cada iteración, grep leerá la lista completa (actualizada) de placas para excluir. : DPYG - 92
Ahora puede seleccionar uniformemente de todas las placas no utilizadas, manteniendo las especificaciones de OP, mientras que es más corto en 1 carácter más.
Es teóricamente posible que la lista de 999 placas contenga suficientes repeticiones para que el conjunto recortado sea inferior a 200. Pero las probabilidades de que eso sea infinitesimal son pequeñas. En diez ensayos, la longitud más baja que obtuve fue 994.
EDITAR: cambió 999 a K (que es pyg por 1000), para guardar dos caracteres por recomendación de bitpwner.
fuente
Mathematica, 182 bytes
Ugh, esto es largo
Sin golf
Muy claro. Genera placas aleatorias y filtra los duplicados y los prohibidos hasta encontrar 200.
fuente
GolfScript (98 caracteres)
Esto genera todas las placas posibles en un orden aleatorio usando una conversión de base fea seguida de filtrado. Hay muchos de ellos, así que no esperes que se ejecute rápidamente, pero la pregunta no impuso ninguna restricción en el tiempo de ejecución.
fuente
JavaScript (ES6) - 213
Probablemente se pueda mejorar. Probado en Firefox Console.
Cambie esa alerta a a
console.log()
si desea probarfuente
Ruby -
136133129 caracteresHorrible. Sin embargo, creo que hay margen de mejora. Simplemente suelte el código
irb
opry
presione Enter para ejecutar:fuente
Ruby, 127 caracteres
Mi intento de una versión "legible" de Ruby:
fuente
Python 2.7 - 258 caracteres
No soy un programador profesional ni nada, entonces diría que estoy satisfecho con el resultado.
¡El tamaño del archivo es de 4.0 K, corre con
python file.py
!fuente
pass
uncontinue
? También puede guardar algunos caracteres sangría con 1 espacio en lugar de 4.for i in range(0,200):
podría ser reemplazado porfor i in range(200):
.continue
... Peropass
funcionó. Además, es más corto. Y cuando lo intentéfor i in range(200)
, solo hizo 199 ^^ Los conté después haciendo unaduplicates
variable y poniendoduplicates += 1
antespass
y contando las ocurrencias-
en la lista / cadena.\t
y reemplazarlos por 1 espacio no cambió el recuento de caracteres ... ¡Gracias por las sugerencias!if k in t: pass
, ya que no hace nada.Python - 208
Hola, he aquí mi puñalada en la generación de matrículas. Esta solución es similar a la solución de @ bitpwner pero sin el módulo de cadena y en lugar de una lista para la placa elegí usar un conjunto y también permite números primero.
Salida de muestra:
fuente
Python, 252 bytes
Aquí está mi contribución. Estoy impresionado con eso, pero sé que otros lo han hecho mejor con Python.
fuente
Python - 165
Esas importaciones ...
Si es necesario comenzar al azar con números o alfabetos, lo cual no creo que sea realmente necesario, entonces 190.
fuente
PHP
341324320Fue lo mejor que pude hacer.
Para ejecutar el código, simplemente guárdelo como un archivo .php y busque en cualquier servidor web. Intentará crear el archivo de lista negra p.txt si aún no existe. Sin embargo, es posible que deba definirlo con una ruta completa del servidor si no tiene acceso de root.
El código en sí está aquí antes de la golfificación:
Fue lo más corto que pude conseguir :-(
Salida de muestra
EDITAR: ordenó un par de declaraciones if para usar la forma corta.
fuente
$string = (rand(1,2)==1) ? "$rand_number-$letters" : "$letters-$rand_number";
Delphi, 161 bytes
Aquí está mi opinión sobre esto. Produce placas de matrícula en stdout sin avance de línea entre ellas. Si se necesita LF (no especificado en las reglas), eso agrega 4 bytes adicionales.
Versión de golf:
Sin golf:
Como correr:
fuente
PHP, 267
Esto es lo más corto que puedo obtener.
Las placas se almacenan en el archivo "p".
fuente
R, 229 caracteres
Estoy seguro de que esto podría mejorarse:
Ejecutar en la consola, imprime una lista de placas.
fuente
Cobra - 198
fuente
ECMAScript 6 -
155168158Advertencia : 200 cuadros de diálogo de alerta (el cambio
alert
deconsole.log
a prueba)Editar : ¡Vaya! Versión original impresa duplicados ...
Edición 2 : ahora más cerca de la partitura original: cambió de un conjunto a una matriz asociativa con algunos cheques duplicados que le permiten imprimir a medida que avanza
Probado en la consola de Firefox.
fuente
l=x=>String.fromCharCode(65+r()*26);
. Supongo que no sé qué está pasandol=x=>...
f=a=>b
es una función ES6 que es básicamente abreviadafunction f(a) { b }
y solo es (?) Compatible con Firefox en este momento.JavaScript (ES6) 184
Como de costumbre, prueba en FireFox consola y el cambio
alert
aconsole.log
o estar preparado para prensaescape
200 veces.fuente
Python3, 257 caracteres
Salida de muestra:
fuente
;
lugar de\n
.PHP, 167
eso es 100 caracteres menos que el mejor PHP actual :)
Espero que te guste. En caso de que esté permitido:
son solo 141 caracteres pero no mezcla caracteres y números. Cualquier sugerencia bienvenida :)
fuente
F #, 264 caracteres
No es realmente un lenguaje diseñado para jugar al golf, pero estoy seguro de que esto podría mejorarse. Usar Seq.exists con una lambda es bastante molesto, como lo son los muchos parens y la falta de conversión implícita.
Utiliza la recursividad, continúa para siempre.
Se puede ejecutar en FSI.
fuente
Python 203
No estoy seguro de si esto técnicamente cuenta, pero me gustó, así que lo publico de todos modos. Si bien genero las respuestas pseudoaleatoriamente, como lo hicieron casi todos los demás, elegí estratégicamente la semilla aleatoria de modo que las respuestas no válidas no terminaran en la salida. Entonces, mi respuesta no es capaz de generar el conjunto completo de respuestas válidas, sin generar también las inválidas.
fuente
Perl - 123 caracteres
Sin golf:
Si alguien tiene ideas para jugar más golf, hágamelo saber, estoy interesado. Si desea una explicación más detallada de parte del código, deje un comentario y me complacería explicarle más.
fuente
Javascript - 283
327caracteresEditar:
Después de implementar las sugerencias de Alconja , aquí está mi nueva versión:
1) Eliminar Variable: sy usar literal: "\ n" [-4] [323]
2) Eliminar "var o =" ", i, r, n, l," [-17] [306]
3) Eliminar Variable: ty usar literal: "ASS | KKK | SHT | 666" [-4] [302]
4) Establezca m = Math.random y use "m" en su lugar [-7] [296]
5) Use (m ( ) + "") en lugar de m (). toString () [-6] [290]
6) Eliminar innecesariamente ";" [-7] [283]
Versión antigua: Javascript - 327 caracteres
Estoy seguro de que hay espacio para mejorar ... Soy bastante inexperto en Code-golf:
Aquí hay una versión formateada, "Ungolfed" con nombres de variables / funciones "no minificados":
Aquí hay una versión de "depuración" que se puede pegar en la URL del favorito / marcador del navegador. La salida se coloca en una "TEXTAREA" en una nueva "ventana" en lugar de "alert ()":
Aquí está la versión "depuración", formateada:
fuente
var
(solo asignar, 323 ), no necesita;
s a menos que haya otra declaración siguiente (p. ej., el último carácter de la línea, o antes de un}
, 316 ), busque cualquier cosa que requiera más espacio para declarar / usar que solo en línea (p. ej., sus
variable, 312 ), lo mismo ocurre con el reverso si se usa algo más que . una vez (por ejemplo,Math.random(...)
ar=Math.random ... r(...)
, 307 ,(x+"")
es más corta quex.toString()
, 300