Você é Desmond Hume. Nos últimos 3 anos, você e seu parceiro, Kelvin, foram escravos de um computador que requer que uma sequência muito específica seja inserida a cada 108 minutos para salvar o mundo.
4 8 15 16 23 42
Seu parceiro morreu há 40 dias (devido a um acidente infeliz envolvendo a cabeça de Kelvin e uma grande pedra) e você não tem com quem conversar. Ninguém para inserir os números para você. Ninguém para quebrar a monotonia. No começo não foi tão ruim, mas você não aguenta mais o silêncio. E se você tiver que ouvir "Faça seu próprio tipo de música" mais uma vez, vai gritar.
Você decide que precisa sair. Escapar. Você decide construir uma jangada e sair da ilha. Mas então você percebe as más notícias: você está preso aqui. Você precisa continuar salvando o mundo.
Mas então você percebe as boas notícias: você é um programador! Você pode automatizar salvando o mundo! Animado, você corre para o computador e, usando suas habilidades confiáveis em python, cria um script rápido para inserir os números para você.
import time
while True:
print "4 8 15 16 23 42"
time.sleep(60 * 107)
Rápido, simples, confiável, curto e fácil. Tudo o que um bom script python deve ser. Mas então, quando você tenta testá-lo, você recebe um erro.
Bad command or file name.
Estranho. Oh bem, vamos tentar c ++.
#include <iostream>
#include <unistd.h>
int main()
{
while (true)
{
std::cout << "4 8 15 16 23 42" << std::endl;
sleep(60 * 107);
}
}
Não! C ++ também não foi encontrado. Você tenta todos os idiomas em que consegue pensar. Javascript, Ruby, Perl, PHP, C #. Nada. Este computador foi fabricado antes de todos os idiomas populares do dia.
O desafio
Você deve escrever um programa que:
1) Imprima exatamente isso: "4 8 15 16 23 42" (sem aspas)
2) Aguarde um tempo entre 104 e 108 minutos. (De acordo com o The Lost Wiki )
3) Repita para sempre. (Ou até você perceber que tudo isso é uma farsa elaborada e que você está preso em um limbo estranho devido a uma escrita preguiçosa e fazendo perguntas para as quais você não tem respostas. Obrigado JJ Abrams!)
No entanto, há um problema: você DEVE usar um idioma que o computador na estação de cisnes realmente seja capaz de executar. Assumindo que
A) O computador estava atualizado no momento da construção,
B) Não houve atualizações no software dos computadores e
C) Não há conexão à Internet disponível (o que significa que você não pode baixar o Golfscript ...),
e adivinhando a data de construção da Estação Swan (novamente, The Lost Wiki. )
Isso significa que você deve usar um idioma que foi lançado pela primeira vez em 31 de dezembro de 1977.
Alguns esclarecimentos sobre regras:
A inclusão de bibliotecas é aceitável, mas a mesma regra se aplica (as bibliotecas devem ser anteriores a 1977).
Você não precisa se preocupar com a compatibilidade do sistema operacional.
Se você usa
system
ou seu idioma é equivalente, deve provar que qualquer comando do sistema que você usa estaria disponível antes de 1978. Um artigo da wikipedia é provavelmente a melhor maneira de provar isso.Não importa quando você inicia o programa, desde que ele termine em um padrão alternado de impressão e suspensão. (print-sleep-print-sleep ... e sleep-print-sleep-print ... são aceitáveis.)
Este é o Code-Golf, pelo que a resposta mais curta em bytes vence.
fonte
Respostas:
APL ,
28242524 bytesIsso funcionou no APL * PLUS da STSC e no SharpAPL da IPSA em 1977, e embora os APLs modernos tenham uma tonelada de novos recursos, isso ainda funciona em todos os principais APLs da atualidade:
A primeira linha imprime a soma cumulativa dos números mostrados, que são os números necessários. A segunda linha d e l ays 6360 segundos (106 minutos), em seguida, converte o signum de que (1, obviamente), e vai para que a linha (isto é, o anterior, o número-a imprimir um).
No entanto, o APL \ 360 (o APL para IBM System / 360 ) de 1966 na verdade supera-o em um byte (testado no emulador IBM / 370 gratuito ):
O sono I-beam ( " IBM " -? Obtê-lo) converte o tempo de espera em jiffies de 1 / 300 th de um segundo, então vamos esperar 19 × 10 5 jiffies = 105 minutos e 33 1 / 3 segundo.
fonte
+\⎕A⍳'EEHBHT'
(if⎕IO=0
)⎕A
.+\4 4 7 1 7 19
então?MUMPS - 30 caracteres, por volta de 1966 (padrão ANSI pela primeira vez em 1977)
Minha primeira tentativa no código de golfe, aqui vamos nós!
O MUMPS ainda é um idioma popular para o software EHR, criado pelo Massachusetts General Hospital em Boston. A implementação mais conhecida é a Epic Systems em Verona, WI.
fonte
TECO, 53 bytes
O TECO (Editor e Corretor de Texto [anteriormente Fita]) é um editor de texto com origem em 1962. Também pode ser usado para executar programas independentes. É o editor de última geração para PDPs, VAXen, etc.
De acordo com o manual do TECO, o
^H
comando indica a hora do dia. Verifique o sistema operacional e a fonte de alimentação, pois a unidade de tempo pode variar de acordo com a sua máquina:O programa a seguir funciona em sistemas em que a hora do dia é medida em segundos / 2:
Observe que
^H
e$
deve ser inserido pressionando, respectivamente, CONTROL-H e ESCAPE.Os números no programa podem ser ajustados para as seguintes máquinas:
fonte
Shell Bourne,
4745 bytesfonte
sleep
de fato disponíveis na época - você achou isso? en.wikipedia.org/wiki/…sleep
comowhile
condição. Salva 2 bytesC,
5452 bytesfonte
main(){for(;;sleep(6360))puts("4 8 15 16 23 42");}
FORTRAN 66 (
10898 bytes)É certo que o computador em questão possuía o compilador FORTRAN, pois dominava os campos científicos e de engenharia da época. Nasci 18 anos após o ano homônimo, mas durante o meu programa de matemática na universidade aprendemos FORTRAN. Em uma palestra divertida, aprendemos a programar em cartões perfurados. Não é tão fácil formatá-lo corretamente aqui, deve haver 6 espaços em branco antes de cada comando e eu só consegui encontrar uma referência à função Sleep para o Fortran 77, mas ela já deveria existir no Fortran IV e 66.
PS: Podemos descartar um Byte usando o rótulo 1 em vez do rótulo 42.
PPS: Se o computador em questão usa cartões perfurados para a entrada do programa, você está sem sorte e os bytes não importam mais: D.
fonte
60*107
por80**2
também.MacLisp,
4746 bytesTodas as construções retiradas do manual de referência de 1974 (PDF) . Não testei, pois não tenho um intérprete de MacLisp.
fonte
nil
pode ser escrito()
Altair Basic
Com certeza, Desmond e Kelvin teriam um Altair 8800 (ou um emulador) apenas por diversão. Altair Basic (de um cara chamado Bill Gates, de uma pequena start-up chamada Micro-Soft) entra em cena com um lançamento em 1975.
Desmond precisaria ajustar um pouco para garantir que o
FOR
loop interno dure um minuto. Naquela época, todo mundo sabia que os loops ocupados estavam errados, mas todos os usavam!Como alternativa, Desmond poderia instalar a placa 88-RTC (montada a partir de componentes !: http://www.classiccmp.org/altair32/pdf/88-virtc.pdf ) e obter acesso através de interrupções a um relógio em tempo real correndo a linha de energia ou cristal interno.
Ele precisaria escrever uma rotina de interrupção para lidar com a entrada do relógio, que por sua vez poderia atualizar uma porta, digamos que a cada 59 segundos traga para o solo por um segundo e depois suba alto.
O Altair Basic tinha uma
WAIT
função, então o código seria simplificado para algo como o seguinte (não consegui encontrar uma lista de portas, então escolhi 125 na esperança de que não fosse utilizado.):Esta foi realmente uma pequena pergunta divertida, voltando a alguns computadores realmente rudimentares. A paciência que os veteranos (inclusive eu) devem ter!
fonte
Montador PDP-11 para Sistema Unix 6 -
736874 caracteresFalando sobre os anos 70, é obrigatório homenagear o Unix e o hardware onde tudo começou!
Você pode executá-lo facilmente aqui (mas primeiro você precisa redescobrir as alegrias de usar
ed
para inserir o texto - no meu caso específico, eu até tive que descobrir como realmente editar o texto nele:)
).Montado, ele se torna 108 bytes.
fonte
msg
é um desperdício, eu posso ir comm
(barbear outros 4 bytes).br
vez dejmp
, não é? Além disso, a gravação requer o descritor de arquivo em r0 - você aparentemente possui 1 (ou 2) no seu primeiro loop, mas está quebrando com o tempo de sono.br
, graças a esse e a outros truques (principalmente cortando espaços em branco e usando octal sempre que possível), chegamos a 74 caracteres, incluindo o primeiromov
.LOGO, 61 bytes (possivelmente) ou 48 bytes (provavelmente não)
Infelizmente, não consegui encontrar uma cópia on-line do The LOGO System: Preliminary Manual (1967) da BBN, ou qualquer referência do MIT Logo Group (década de 1960 +). O logotipo da Apple por LCSI é um pouco recente (~ 1980). No entanto, com base em livros on-line, algumas variações dos itens a seguir provavelmente funcionaram na época. Observe que WAIT 60 aguarda 1 segundo, não 60.
Podemos melhorar um pouco a otimização da chamada de cauda, embora isso provavelmente não estivesse disponível no momento.
fonte
CBM BASIC 1.0,
5238 caracteres, tokenizado para4531 bytesO CBM BASIC 1.0 foi introduzido com o Commodore PET em outubro de 1977. Os comandos normalmente seriam mostrados em caracteres gráficos maiúsculos e CBM, mas os listei aqui em letras minúsculas + maiúsculas por uma questão de facilidade (tanto a minha quanto a sua! :-) ) Observe também que o ^ seria realmente exibido como ↑. Detokenized, depois de listar isso com
LIST
isso resultaria em:O 6502 do PET funcionava a 1 MHz, por isso deve demorar cerca de 105 minutos para ser concluído.
Edit : Percebi que os loops aninhados não eram realmente necessários e eu calculei mal meus tokens. Ainda não é suficiente para vencer (e tarde demais, para inicializar), mas pelo menos é melhor.
fonte
Pascal -
10795 bytesVersão não destruída:
fonte
Adiante , 50 bytes
Embora o FORTH-79 seja a versão padronizada mais antiga, o idioma estava em desenvolvimento a partir de 1968 e era utilizável no IBM 1130. Ele foi usado em outros sistemas também antes de 1977 chegar. Posso fazer um pouco mais de pesquisa para garantir que todas essas palavras estejam disponíveis, mas tenho quase certeza de que isso é básico o suficiente para ter existido até então. Todos estavam disponíveis no FORTH-79, com certeza.
Loops para sempre, aguardando 6420000 milissegundos entre a impressão em seqüência. Nenhuma nova linha é impressa.
fonte
Smalltalk, 95 (ou 68, se a brecha for permitida)
Existe desde 1972
Nenhuma experiência com este, vi na wikipedia: P
Pesquisei on-line como fazer loop e atrasar, a sintaxe deve estar correta, mas não foi possível encontrar uma maneira de executá-lo.
Possível brecha
Ele deve imprimir a sequência a cada 108 minutos, mas não indica que deve ter 108 minutos.
Isso poderia tornar o código mais curto
O código imprimirá a sequência sem intervalo, por isso é garantido que também será impresso após 108 minutos.
fonte
Wait some time between 104 and 108 minutes
, então não acho que a brecha seja possível.SAS,
827569Não é uma linguagem típica de golfe, mas acho que se qualifica para esse desafio, assumindo que isso
file stdout
era válido no SAS da era de 1977.Melhorias:
data _null_;
->data;
salva 7 caracteres (e agora produz um conjunto de dados vazio, além de imprimir em stdout).fonte
Thompson shell, 1971 (1973 para comando do sono)
43 bytes
Desde que o shell Bourne, embora existisse em 1977, não estava em uma versão lançada do Unix até a v7 em 1979. O shell original do Unix não possuía nenhum comando de controle de loop sofisticado. (Se você quiser encerrar um loop, poderá usar o
if
comando para pular o goto.)fonte
exec $0
uma pequena economiagoto
?C, 50 bytes
Mais curto que a outra solução C e, portanto, não é uma duplicata. Na verdade, eu escrevi isso antes de perceber o comentário (quase) idêntico do Digital Trauma sobre a outra solução C.
fonte
COBOL, 240 bytes
Sim, o espaço em branco à esquerda é significativo. Compile e corra como
cobc -x save.cob; ./save
. (A-x
opção produz um executável em vez de uma lib compartilhada e, portanto, acho que não precisa ser contada.)Se quisermos ser entediantes, podemos adicionar a
--free
opção de compilação para código de formato livre, 158 + 6 = 164 bytes, mas é improvável que isso funcione em 77.fonte
ALGOL 60/68 / W,
744750 bytesExecute este programa completo com
a68g save.a68
, usandoalgol68g
.O ALGOL não possui uma maneira embutida de dormir, mas podemos executar essencialmente
/bin/sleep
:Resposta antiga:
fonte
system
está tudo bem e não está bem? Você está bem,system("ping ...")
mas o desafio diz que não posso usarsystem
do C para, por exemplo, comandos bash. ALGOL está fazendo a impressão, mas não tenho outra maneira do queping(8)
ousleep(1)
a dormir.system("sleep")
em um sistema operacional a partir desse momento. Eu vou editar a postagem.