Desafío
Recientemente me he metido en computadoras de 8 bits y estoy fascinado con el funcionamiento de ellas y otras personas por igual; por lo tanto, el objetivo de este código de golf es replicar una parte del monitor Woz, diseñado por Steve Wozniak para Apple I.
Debe almacenar una matriz de 22 valores hexadecimales con un ancho de dos bytes (valor mínimo $ 10 , valor máximo $ FF ) y luego tomar n-cantidad de entradas. (Normalmente dos; idiomas como Brainfuck podrían tener dificultades).
Las entradas se referirán a dónde en la matriz comenzar a imprimir y dónde parar; una entrada con comportamiento definido tendrá su valor inicial menor o igual al valor final. Su programa debe ser capaz de imprimir cada valor hexadecimal entre, e incluyendo , los hexadecimales ingresados.
Un ejemplo de esto:
Array
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15
Values
FF F4 B6 D7 40 00 00 A4 F0 00 FF 0D 9C 21 65 C4 02 28 90 E7 D6 A5
input first num:
04
input second num:
14
40 00 00 A4 F0 00 FF 0D 9C 21 65 C4 02 28 90 E7 D6
Ahora, la parte interesante de este ejercicio es que puede usar lo que quiera para verificar los límites de la entrada de los usuarios. ¿Las entradas de personas hello
y su programa tienen un comportamiento indefinido? Se cierra sin previo aviso? Ambos son validos.
Las únicas reglas son:
1. Debe incluir los valores de los 22 valores hexadecimales como parte de su programa antes de que comience (no puede pedirle entradas al usuario).
2. La salida de los valores hexadecimales debe seguir el formato exacto: los
00 FF 00 FF 00
espacios finales, las pestañas o las líneas están bien. Los personajes no lo son.
3. El programa no tiene que pedir las entradas con un mensaje. Deje el "mensaje" en blanco si lo desea. Sin embargo, el usuario debe ingresar los límites hexadecimales.
4. Como con los valores de los 22 hexadecimales, usted debe decidir, debe hacer un programa que realmente recupere los valores del almacenamiento, en lugar de imitar un programa simplemente imprimiendo valores. (como una lista de $ 00 ).
5) n-cantidadp.ej. (Brainfuck requerirá dos entradas por hex, por lo que es cuatro para los dos). de entradas, se refiere a la cantidad de entradas requeridas para su idioma de elección para reconocer un hexadecimal de dos bytes de ancho.
Siéntase libre de comentar si necesita aclaraciones.
Este es el código de golf, por lo que la respuesta más corta en el número de bytes es el ganador.
Tabla de clasificación
Aquí hay una tabla de clasificación que genera fragmentos cortesía de Martin Ender .
Para asegurarse de que su respuesta se muestre, comience con un título, utilizando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
fuente
n
debido a que Brainfuck no puede tomar una cadena de 2 caracteres, necesitará ingresar el primer byte, luego el segundo para el primer valor y luego volver a hacerlo para el segundo valor, 4 entradas en total. Pueden ser tantos como quieras.Respuestas:
Jalea ,
2421 bytesValores elegidos:
[00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 1F 10 11 12 13 14 15]
TryItOnline
Si la segunda entrada es menor que la primera, genera la secuencia inversa.
El comportamiento fuera de los límites no está definido (por ejemplo, "foo", "14" devuelve 38 valores, la mayoría de los cuales ni siquiera están en la matriz y muchos de los cuales no son de longitud 2)
¿Cómo?
fuente
1F
), lo que significa que no necesitaba interpretar "correctamente" las entradas hexadecimales o agregar 16 para darme dos dígitos hexadecimales para volver a convertir.JavaScript (ES6),
1181151121028281 bytesGuardado 1 byte gracias a ETHproductions
Valores elegidos:
0x04
/0x0f
).0x00
(valor mínimo).0x15
(valor máximo).Versión anterior (97 bytes)
Generando una lista pseudoaleatoria de valores hexadecimales 'verdaderos':
Secuencia:
fuente
[a,b]=prompt().split(' ')
en la línea de comando. De todos modos, mi respuesta actualizada debería arreglar eso.JavaScript (ES6),
107 152137 bytesMostrar fragmento de código
Valores elegidos:
Entradas:
0x14
InternalError: too much recursion
NaN
fuera de los límites.Soluciones anteriores:
152 bytes:
107 bytes, solución no válida (faltan entradas):
fuente
console.log(...)
. ;)var
y el último;
no son parte de la respuesta. Es solo para el fragmento, es por eso que agregué linebreak. Editaré la respuesta.Python,
888786 bytes1 byte guardar gracias a @JonathanAllan
1 byte guardar de nuevo a @JonathanAllan
También cambió la base del código, mucho mejor ahora.
Valores elegidos:
00
para todo.La misma idea que mi respuesta C. Esta vez, sin embargo, el código toma una sola entrada del usuario, que requiere un espacio entre ambos valores, dividirlos, convertirlos en valores hexadecimales e imprimir cada hexágono en la
l
matriz, incluidos y entre los dos valores ingresados. Dado que Python tiene un magnífico sistema de captura de errores, no hay desbordamientos de búfer y, por lo tanto, el código es mucho más seguro. El programa está a salvo de comportamientos indefinidos. en el sentido de que no se ejecutará cuando se envíe un valor más alto antes de un valor más bajo.Esto debería funcionar tanto en Python 2.xy 3.x; Corríjame si me equivoco, ya que no tengo acceso a ambos intérpretes debido a que mi sistema no los admite.
fuente
C ++,
989593 bytesMis valores elegidos son todos 0
fuente
04
y06
solo recuperé dos valores. Sospecho que estos son los valores05
y06
. Debe proporcionar todos los valores entre e incluidos los valores ingresados.Perl,
794541 bytes"valor mínimo $ 10", el ejemplo tiene un mínimo de $ 00, ¿es un error tipográfico?
Aquí hay una respuesta perl bastante aburrida en 41 bytes (Era 46 y luego seguía viendo espacios, parentes que podía eludir). Toma entrada en dos líneas.
Los datos son una lista 04..1A
Antes era demasiado inteligente con empacar y desempacar. Sus bytes de entrada se ingresan a la vez juntos, por ejemplo, "020E" imprimirá las entradas 2a a 14a.
Podría intentar jugar más al golf usando todos los 0
substr
, yprintf'%*vX'
... pues eso hace que mi respuesta sea más larga. 48 caracteres (usando una cadena de ascii '7', hexadecimal 37 como datos)fuente
CJam, 22 bytes
Valores elegidos:
Pruébalo en línea
fuente
Scala, 45 bytes
Sin golf:
Usos
00
aFF
como valores, pero funciona hasta 2147483647.fuente
error: ')' expected but string literal found.
a lasa.to(b).map(
C,
176175161 bytes¡Ahorro de 1 byte gracias a @JonathanAllan
Ayuda masiva gracias a @Downvoter por salvarme 14 bytes!
Pruébalo en línea!
Valores elegidos:
00
para todo.Respuesta sin golf:
El truco para esto es tomar dos entradas e intentar convertirlas en cadenas hexadecimales y luego convertirlas en enteros. Como no hay verificación de errores ni nada similar, comportamiento indefinido es simplemente arrojar errores y romper el programa. El usuario necesita ingresar dos entradas, sin embargo, mi compilador Eclipse CDT parece permitirme ingresar ambas en la misma línea con un espacio entre ellas.
Deben estar en el orden correcto, ya que solicitar un valor mayor antes de que un valor menor no ejecute el
while
bucle.La cuestión es que tampoco hay protección contra el desbordamiento del búfer, por lo que simplemente puedo solicitar algo absurdo, como un rango de $ 0 a $ FFFF, y obtendré todo en la memoria de mi computadora desde el comienzo de la asignación de memoria para el
a[44]
matriz , hasta 65536 valores más tarde.fuente
%x
directamente?char s[2]
lugar de lasmalloc
cosas? Elmalloc
valor de retorno de la conversión no es necesario en C de todos modos.printf("%d%d ", ...)
parte, al reemplazar el formato con simplemente%x
devuelve0
's en lugar de00
' s, y no los espacia.scanf
.GNU sed, 209 + 1 (r flag) = 210 bytes
Pruébalo en línea!Un espacio principal está presente en la salida, espero que esté permitido.
Ejecute ejemplos:
Explicación: los 22 valores hexadecimales almacenados son los mismos que los del ejemplo del OP
Los índices de inicio y fin se leen en líneas separadas. La salida es una sola línea con los valores de la tabla en ese rango de índice (inclusive). La entrada no definida escribirá varias líneas de salida no válida.
fuente
PHP,
10610510496 + 2 byteso
Correr con
php -nr '<code>' <lowindex> <highindex>
; escapar de las comillas simples en el código.... o pruébalo en línea .
dechex
interpreta la entrada como cadenas hexadecimales en la medida en que los caracteres son dígitos hexadecimales,0
si la entrada comienza con otra cosa.no imprime nada si el primer valor es mayor que el segundo.
valores elegidos:
(primeros 22 códigos ascii del código ejecutado)
o
con estos valores:
fuente
<?php
fragmento?-r
. Y si necesito almacenarlo en un archivo, uso la etiqueta abierta corta<?
.a
,z
yProgramingPuzles_CGolf
son indefinidos. ¿De dóndeProgramingPuzles_CGolf
vino de todos modos? : /stderr
a/dev/null
si no te gusta ellos. PHP evalúa las constantes indefinidas en cadenas.Conjunto Apple II 6502, 75 bytes
Código de bytes:
Desmontaje
Forma una matriz en la memoria que se parece a la salida. Los valores elegidos son:
El usuario presiona cuatro teclas para configurar las entradas.
fuente