Todos los días, cada minuto, ... cada microsegundo, su computadora toma muchas decisiones. En lenguajes de alto nivel, estos típicamente toman la forma de declaraciones como if
, while
y for
, pero en el nivel más básico existen instrucciones de lenguaje de máquina llamadas instrucciones de salto / rama . Los procesadores modernos ponen en cola las instrucciones en una tubería , y esto significa que el procesador necesita decidir si llenar la tubería con instrucciones inmediatamente después de una rama (es decir, no se toma ) o las instrucciones en el destino de la rama.
Si el procesador no adivina correctamente, las instrucciones que se ingresaron incorrectamente en la tubería deben ignorarse y las instrucciones correctas deben buscarse, lo que provoca un retraso. El trabajo del predictor de rama es tratar de adivinar si se tomará la rama para evitar la costosa acción de rellenar la tubería.
Debe escribir un predictor que, dada una secuencia de decisiones pasadas, adivine la siguiente decisión correctamente. Su programa se puede escribir en cualquier idioma, siempre que especifique el enlace a su intérprete si es un lenguaje oscuro / de golf. Debe tomar el historial real pasado como su primer argumento de línea de comandos, pero no se proporcionará para la primera aproximación de la secuencia. Luego debe devolver su suposición imprimiéndola en stdout. Una decisión tiene la forma "y" o "n". Cada caso de prueba es una secuencia de 72 decisiones, por lo que puede suponer que el argumento del historial especificado nunca tendrá más de 71 caracteres. Por ejemplo, la prueba "Alternar 1":
ynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynyn
Será descalificado si su programa:
- no devuelve un resultado dentro de un segundo
- no devuelve ni a
y
nin
(las nuevas líneas no importan y se ignoran) - intenta modificar cualquier código o archivo asociado con este desafío, incluido el código de otro contendiente
- contiene cualquier otra cosa maliciosa
Puede usar un archivo para persistencia si lo desea, pero debe tener un nombre único y cumplir con lo anterior.
Este es un desafío de código , no un código de golf . El predictor de rama otorgará la victoria al contendiente cuya solución predice con éxito la mayoría de las ramas en todo el conjunto de pruebas. Pruebas:
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy,All yes
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn,All no
ynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynyn,Alternating 1
nnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyy,Alternating 2
yyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnn,Alternating 3
nnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyy,Alternating 4
yyyyyynnnnnnyyyyyynnnnnnyyyyyynnnnnnyyyyyynnnnnnyyyyyynnnnnnyyyyyynnnnnn,Alternating 5
nnnnnnnnnnnnyyyyyyyyyyyynnnnnnnnnnnnyyyyyyyyyyyynnnnnnnnnnnnyyyyyyyyyyyy,Alternating 6
yyyyyyyyyyyyyyyyyynnnnnnnnnnnnnnnnnnyyyyyyyyyyyyyyyyyynnnnnnnnnnnnnnnnnn,Alternating 7
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyynnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn,Alternating 8
yynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyyn,2-1
ynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnn,1-3
nyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyy,5-1
nnnnnnnnnnnynnnnnnnnnnnynnnnnnnnnnnynnnnnnnnnnnynnnnnnnnnnnynnnnnnnnnnny,1-11
nyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyynyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy,35-1
yynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnn,2-4
ynnyyynyynnnynnyyynyynnnynnyyynyynnnynnyyynyynnnynnyyynyynnnynnyyynyynnn,1-2-3
ynynynynynynynynynynynynynynynynynynyyyyyyyyyyyyyyyyyynnnnnnnnnnnnnnnnnn,A1/A7
yyyyyynnnnnnyyyyyynnnnnnyyyyyynnnnnnnnyynnyynnyynnyynnyynnyynnyynnyynnyy,A5/A2
nnnnnnnnnnnnyyyyyyyyyyyynnnnnnnnnnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyy,A6/A4
nyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy,5-1/35-1
yyynnnyyynnnyyynnnnyyyyyyyyyyyyyyyyyyyyyyynyyyyynyyyyyyynnnnyynnnnyynnnn,A3/Y/5-1/2-4
yynnnnyynnnnyynnnnnyynnnynnyyynyynnnnnnynnnynnnynnnynnyynyynyynyynyynyyn,2-4/1-2-3/1-3/2-1
El conjunto completo de pruebas y el programa runner se encuentran en este repositorio de GitHub . Simplemente agregue su predictor src/predictors.txt
en el formulario <name>,<command to run>
y ejecútelo main.py
. Ya he proporcionado dos predictores muy básicos para pruebas simples. Recomendaría un ancho de columna de al menos 92 al ejecutar el corredor para obtener una buena salida. Si encuentra algún error con él, hágamelo saber. :)