Eres Desmond Hume Durante los últimos 3 años, usted y su compañero, Kelvin, han sido esclavos de una computadora que requiere que se ingrese una secuencia muy específica cada 108 minutos para salvar el mundo.
4 8 15 16 23 42
Su compañero murió hace 40 días (debido a un desafortunado accidente que involucró la cabeza de Kelvin y una gran roca), y no tiene con quién hablar. Nadie que ingrese los números por usted. Nadie para romper la monotonía. Al principio no fue tan malo, pero ya no puedes soportar el silencio. Y si tienes que escuchar "Make Your Own Kind Of Music" una vez más, vas a gritar.
Usted decide que necesita salir. Escapar. Decides que construirás una balsa y navegarás fuera de la isla. Pero luego te das cuenta de las malas noticias: estás atrapado aquí. Necesitas seguir salvando al mundo.
Pero luego te das cuenta de las buenas noticias: ¡eres un programador! ¡Puedes automatizar salvar el mundo! Emocionado, corres hacia la computadora y, usando tus habilidades confiables de Python, creas un script rápido para ingresar los números por ti.
import time
while True:
print "4 8 15 16 23 42"
time.sleep(60 * 107)
Rápido, simple, confiable, corto y fácil. Todo lo que debería ser un buen script de Python. Pero luego, cuando intentas probarlo, obtienes un error.
Bad command or file name.
Huh, extraño Oh bueno, intentemos c ++.
#include <iostream>
#include <unistd.h>
int main()
{
while (true)
{
std::cout << "4 8 15 16 23 42" << std::endl;
sleep(60 * 107);
}
}
¡No! C ++ tampoco se encuentra. Prueba todos los idiomas que se te ocurran. Javascript, Ruby, Perl, PHP, C #. Nada. Esta computadora fue hecha antes de todos los idiomas populares del día.
El reto
Debe escribir un programa que:
1) Imprima exactamente esto: "4 8 15 16 23 42" (sin comillas)
2) Espere un tiempo entre 104 y 108 minutos. (De acuerdo con The Lost Wiki )
3) Repita para siempre. (O hasta que te des cuenta de que todo esto es una estafa elaborada, y que estás atrapado en un limbo extraño debido a la escritura perezosa y a hacer preguntas para las que no tienes respuestas. ¡Gracias JJ Abrams!)
Sin embargo, hay un inconveniente: DEBE usar un lenguaje que la computadora en la estación de cisne realmente sea capaz de ejecutar. Asumiendo que
A) La computadora estaba actualizada en el momento de la construcción,
B) No ha habido actualizaciones para el software de las computadoras, y
C) No hay conexión a Internet disponible (lo que significa que no puede descargar Golfscript ...),
y haciendo nuestra mejor conjetura para la fecha de construcción de The Swan Station, (Nuevamente, The Lost Wiki ) .
Esto significa que debe usar un idioma que se lanzó por primera vez el 31 de diciembre de 1977 o antes.
Algunas aclaraciones de reglas:
Incluir bibliotecas está bien, pero se aplica la misma regla (las bibliotecas deben ser anteriores a 1977).
No tiene que preocuparse por la compatibilidad del sistema operativo.
Si usa
system
, o sus idiomas equivalentes, debe probar que cualquier comando del sistema que use hubiera estado disponible antes de 1978. Un artículo de Wikipedia es probablemente la mejor manera de probar esto.No importa cuándo inicie el programa, siempre que termine en un patrón de impresión alterna y de suspensión. (print-sleep-print-sleep ... y sleep-print-sleep-print ... son aceptables).
Este es Code-Golf, por lo que la respuesta más corta en bytes gana.
fuente
Respuestas:
APL ,
28242524 bytesEsto funcionó en APL * PLUS de STSC y en SharpAPL de IPSA en 1977, y aunque los APL modernos tienen un montón de nuevas características, esto todavía funciona en todos los APL principales hoy en día:
La primera línea imprime la suma acumulativa de los números mostrados, que son los números requeridos. La segunda línea d e l ays 6360 segundos (106 minutos), y luego toma la signum de que (1, obviamente), y va a esa línea (es decir, la anterior, número-impresión de uno).
Sin embargo, APL \ 360 (el APL para IBM System / 360 ) de 1966 en realidad lo supera en un byte (probado en el emulador gratuito IBM / 370 ):
El I-beam del sueño (" IBM " - ¿entiendes?) Toma el tiempo de espera en segundos de 1 ⁄ 300 th de segundo, por lo que esperamos 19 × 10 5 jiffies = 105 minutos y 33 1 ⁄ 3 segundo.
fuente
+\⎕A⍳'EEHBHT'
(if⎕IO=0
)⎕A
.+\4 4 7 1 7 19
entonces?MUMPS - 30 caracteres, alrededor de 1966 (estándar ANSI primero en 1977)
Mi primer intento de golf de código, ¡aquí vamos!
MUMPS sigue siendo un lenguaje popular para el software EHR, creado por el Hospital General de Massachusetts en Boston. La implementación más conocida es Epic Systems en Verona, WI.
fuente
TECO, 53 bytes
TECO (Text [anteriormente Tape] Editor and Corrector) es un editor de texto que se originó en 1962. También se puede utilizar para ejecutar programas independientes. Es el editor de vanguardia para PDP, VAXen, etc.
Según el manual de TECO, el
^H
comando da la hora del día. Asegúrese de verificar su sistema operativo y fuente de alimentación, ya que la unidad de tiempo puede variar según su máquina:El siguiente programa funciona en sistemas donde la hora del día se mide en segundos / 2:
Tenga en cuenta que
^H
y$
debe ingresarse presionando, respectivamente, CONTROL-H y ESCAPE.Los números en el programa se pueden ajustar para las siguientes máquinas:
fuente
Bourne shell,
4745 bytesfuente
sleep
de hecho estaban disponibles en ese momento, ¿lo encontraste? en.wikipedia.org/wiki/…sleep
comowhile
condición. Ahorra 2 bytesC,
5452 bytesfuente
main(){for(;;sleep(6360))puts("4 8 15 16 23 42");}
FORTRAN 66 (
10898 Bytes)Es cierto que la computadora en cuestión tenía el compilador FORTRAN, ya que dominaba los campos científicos y de ingeniería en la época. Nací 18 años después del año homónimo, pero durante mi programa de matemáticas en la universidad aprendimos FORTRAN. Una divertida lección que aprendimos a programar en tarjetas perforadas. No es tan fácil formatearlo correctamente aquí, debe haber 6 espacios en blanco antes de cada comando y solo pude encontrar una referencia a la función Sleep para Fortran 77, pero ya debería haber existido en Fortran IV y 66.
PD: Podríamos eliminar un byte usando la etiqueta 1 en lugar de la etiqueta 42.
PPS: si la computadora en cuestión usa tarjetas perforadas para la entrada del programa, no tiene suerte y los bytes ya no importan: D.
fuente
60*107
con80**2
.MacLisp,
4746 bytesTodas las construcciones tomadas del manual de referencia de 1974 (PDF) . Sin embargo, no lo probé ya que no tengo un intérprete de MacLisp.
fuente
nil
se puede escribir()
Altair Basic
Por supuesto, Desmond y Kelvin habrían tenido un Altair 8800 (o un emulador) solo por diversión. Altair Basic (de un tipo llamado Bill Gates, de una pequeña empresa emergente de dos hombres llamada Micro-Soft) chilla con un lanzamiento en 1975.
Desmond necesitaría afinar un poco para garantizar que el
FOR
bucle interno dure un minuto. En aquel entonces, todos sabían que los bucles ocupados estaban mal, ¡pero todos los usaban!Como alternativa, Desmond podría instalar la placa 88-RTC (montado a partir de componentes !: http://www.classiccmp.org/altair32/pdf/88-virtc.pdf ) y obtener acceso a través de las interrupciones a un reloj de tiempo real corriendo La línea de alimentación o cristal interno.
Tendría que escribir una rutina de interrupción para manejar la entrada del reloj, que a su vez podría actualizar un puerto, digamos que cada 59 segundos se pone a tierra por un segundo, y luego subir alto.
Altair Basic tenía una
WAIT
función, por lo que el código se simplificaría a algo como lo siguiente (no pude encontrar una lista de puertos, así que elegí 125 con la esperanza de que no se usara):Esta fue en realidad una pequeña pregunta divertida, volviendo a algunas computadoras realmente rudimentarias. ¡La paciencia que debieron tener esos veteranos (incluyéndome a mí)!
fuente
Ensamblador PDP-11 para Unix System 6 -
736874 caracteresHablando de los años 70, ¡es obligatorio honrar a Unix y al hardware donde todo comenzó!
Puede ejecutarlo fácilmente aquí (pero primero debe redescubrir las alegrías de usar
ed
para insertar el texto; en mi caso específico, incluso tuve que descubrir cómo editar realmente el texto en él:)
).Ensamblado se convierte en 108 bytes.
fuente
msg
es un desperdicio, puedo ir conm
(afeitar otros 4 bytes).br
lugar dejmp
, ¿no? Además, escribir requiere el descriptor de archivo en r0: aparentemente tienes 1 (o 2) en él para tu primer ciclo, pero lo estás rompiendo con tu tiempo de sueño.br
, gracias a ese y a algunos otros trucos (principalmente cortando espacios en blanco y usando octal siempre que sea posible) llegamos a 74 caracteres incluso agregando el primeromov
.LOGOTIPO, 61 bytes (posiblemente) o 48 bytes (probablemente no)
Desafortunadamente, no he logrado encontrar una copia en línea de The LOGO System: Preliminary Manual (1967) de BBN, ni ninguna referencia del MIT Logo Group (1960 +). El logotipo de Apple de LCSI es demasiado reciente (~ 1980). Sin embargo, según los libros en línea, alguna variación de lo siguiente probablemente funcionó en ese momento. Tenga en cuenta que WAIT 60 espera durante 1 segundo, no 60.
Podemos hacer un poco mejor con la optimización de llamadas de cola, aunque esto probablemente no estaba disponible en ese momento.
fuente
CBM BASIC 1.0,
5238 caracteres, tokenizado a4531 bytesCBM BASIC 1.0 se introdujo con el Commodore PET en octubre de 1977. Los comandos normalmente se mostrarían en mayúsculas y caracteres gráficos CBM, pero los he enumerado aquí en minúsculas + mayúsculas por razones de facilidad (¡tanto mío como tuyo! :-) ) Tenga en cuenta también que ^ en realidad se mostrará como ↑. Destokenizado, después de enumerar esto con
LIST
esto daría como resultado:El 6502 del PET funcionó a 1MHz, por lo que esto debería tomar alrededor de 105 minutos más o menos para completar.
Editar : Me di cuenta de que los bucles anidados no eran realmente necesarios y había calculado mal mis tokens. Todavía no es suficiente para ganar (y demasiado tarde, para arrancar), pero al menos es mejor.
fuente
Pascal -
10795 bytesVersión sin golf:
fuente
Adelante , 50 bytes
Aunque FORTH-79 es la primera versión estandarizada, el lenguaje estaba en desarrollo a partir de 1968, y era utilizable en el IBM 1130. Se utilizó en otros sistemas también antes de que llegara 1977. Puedo investigar un poco más para asegurarme de que todas estas palabras estén disponibles, pero estoy bastante seguro de que es lo suficientemente básico como para haber existido para entonces. Todos estaban disponibles por FORTH-79, seguro.
Bucles para siempre, esperando 6420000 milisegundos entre la impresión de cadenas. No se imprime nueva línea.
fuente
Smalltalk, 95 (o 68 si se permite una escapatoria)
Ha estado presente desde 1972
Sin experiencia con este, lo vi en wikipedia: P
Busqué en línea cómo hacer un bucle y retrasarlo, la sintaxis debería ser correcta pero no pudo encontrar una manera de ejecutarla.
Posible escapatoria
Debe imprimir la secuencia cada 108 minutos, pero no indica que tiene que ser 108 minutos.
Esto podría acortar el código
El código imprimirá la secuencia sin intervalo, por lo que está garantizado que también se imprimirá después de 108 minutos.
fuente
Wait some time between 104 and 108 minutes
, así que no creo que la escapatoria sea posible.SAS,
827569No es un lenguaje típico de golf, pero creo que califica para este desafío, suponiendo que
file stdout
fuera válido en el SAS de 1977.Mejoras:
data _null_;
->data;
guarda 7 caracteres (y ahora produce un conjunto de datos vacío e imprime en stdout).fuente
Thompson shell, 1971 (1973 para comando de suspensión)
43 bytes
Dado que el shell Bourne, aunque existía en 1977, no estaba en una versión lanzada de Unix hasta la v7 en 1979. El shell original de Unix no tenía ningún comando de control de bucle sofisticado. (Si desea finalizar un ciclo, puede usar el
if
comando para omitir el goto).fuente
exec $0
un pequeño ahorrogoto
?C, 50 bytes
Más corto que la otra solución C, y por lo tanto no es un duplicado. De hecho, escribí esto antes de notar el comentario (casi) idéntico de Digital Trauma sobre la otra solución C.
fuente
COBOL, 240 bytes
Sí, el espacio en blanco líder es significativo. Compila y corre como
cobc -x save.cob; ./save
. (La-x
opción produce un archivo ejecutable en lugar de una biblioteca compartida y, por lo tanto, no creo que deba contarse).Si queremos ser aburridos, podemos agregar la
--free
opción de compilación para el código de formato libre, luego 158 + 6 = 164 bytes, pero es poco probable que funcione en el '77.fuente
ALGOL 60/68 / W,
744750 bytesEjecute este programa completo con
a68g save.a68
, usandoalgol68g
.ALGOL no tiene una manera integrada de dormir, pero podemos ejecutar esencialmente
/bin/sleep
:Vieja respuesta:
fuente
system
está bien y no está bien? Estás bien,system("ping ...")
pero el desafío dice que no puedo usarlosystem
desde C para, por ejemplo, comandos bash. Algol es hacer la impresión, pero no tengo otra forma deping(8)
osleep(1)
para dormir.system("sleep")
en un sistema operativo desde ese momento. Editaré la publicación.