Recentemente (há alguns anos atrás) houve um burburinho nos sites de programação sobre uma implementação do Tetris em 140 bytes . ...
Acontece que, embora seja pequeno, é uma versão simplificada do Tetris, e nem mesmo uma implementação completa. Somente a função lógica central cabe em 140 bytes de Javascript. Para executá-lo, você precisa de outros ~ 840 caracteres de HTML.
Nós podemos fazer melhor!
Esse desafio é implementar uma versão completa do "Binary Tetris" no menor número possível de tweets.
Regras binárias de Tetris:
- O programa deve exibir um campo de jogo contendo pelo menos 5 colunas e 6 linhas de células.
- Qualquer método de exibição pode ser usado, desde que os blocos e as bordas do campo estejam claramente marcados.
- Deve haver pelo menos dois tipos de blocos:
#
e##
. Suporte adicional a blocos, como###
blocos angulares em forma de L, será votado por mim: P e o jogo mais completo de tetris binários (a maioria dos blocos como os recursos originais e de rotação) ganharão minha felicidade e uma possível recompensa de 50 repetições. - Novos blocos são adicionados ao campo na linha superior e uma célula de bloco deve ocupar a coluna central.
- Os blocos descem em direção à linha inferior a uma taxa fixa. Os blocos devem descer mesmo sem a entrada do usuário.
- Quando os blocos tocam a parte inferior do campo ou um bloco inferior, eles param de cair e são fixados no lugar. Um novo bloco é adicionado.
- Quando todas as colunas da linha são preenchidas com blocos, a linha é esvaziada e todos os blocos fixos acima caem uma linha.
- O programa deve responder a pressionamentos de tecla. Deve haver três teclas exclusivas que executam as seguintes funções
- deslocar o bloco atual para a esquerda 1 coluna
- deslocar o bloco de corrente à direita 1 coluna
- deslocar o bloco atual para baixo 1 linha
- Cada tweet pode ter apenas 140 caracteres. É permitido o uso de caracteres de vários bytes que podem ser colocados nos tweets.
As regras para o que pode estar em um tweet é simples. Se você pode twittar, você pode usá-lo.
Os idiomas interpretados seguem as mesmas regras. Cada seção deve seguir as especificações. Desde que não ocorram erros no tempo de execução (e o restante seja válido de acordo com as especificações), sua resposta é válida Regras de golfe:
Como a implementação original era "tweetável", esse desafio requer o mesmo. As entradas devem poder ser transmitidas como uma série de tweets (linhas de 140 caracteres ou menos).O primeiro tweet deve conter o nome do compilador / intérprete, o nome do programa e quaisquer argumentos de linha de comando
- ele será salvo como arquivo "P0"
- Os seguintes N tweets devem conter o programa como uma série de linhas.
- Cada tweet será armazenado em um arquivo com o nome T <n>, onde n é 1..N
- Cada linha será adicionada às linhas anteriores e compilada ou interpretada. Ele deve produzir um arquivo ou programa de objeto válido.
- O programa não precisa estar funcional até que a última linha seja adicionada.
O programa será executado da seguinte maneira (pseudo-bash)
interp,prog,args = split P0 /\s/ touch $prog for file in ./T* do cat $prog file > $prog $interp $prog $args die("FAIL") if $? #detect error done
O intérprete deve ser um programa executável comumente disponível que ainda não implemente o Tetris.
Scoring :
tweets, incluindo P0 menor índice. Gravatas quebradas pelo maior número de caracteres sobressalentes (140 * num tweets - contagem total de caracteres).
Entradas de exemplo
chrome a.htm
<html><div id="output"></div></html>
<script>cool java script here</script>
Pontuação = 3 (334 de reposição)
cc a.c ;a.out
main(){/*cool prog here*/}
Pontuação = 2 (241 de reposição)
tetris
Pontuação = 1 (134 de reposição) se for legal, o que não é
Agradecimentos especiais
Pude postar isso com o consentimento de Ashelly aqui
fonte
Respostas:
Python 3, Pontuação de 5 Tweets (242 de reposição, contando P0)
-19 bytes graças a Jonathan Allan !
A contagem de reposição não leva em consideração as novas linhas entre os tweets.
Tweet 1 (Declaração, 12 bytes)
Tweet 2 (70 bytes)
Tweet 3 (129 bytes)
Tweet 4 (113 bytes)
Tweet 5 (134 bytes)
Programa completo (449 bytes)
Algum ponto do mal aponta para hackers e armazena o campo e a peça em dois números inteiros. Vou tentar postar uma explicação em breve.
Nota: Isso funciona apenas no Windows, mas pode ser alterado para Linux através de
msvcrt
→getch
e"cls"
→"clear"
. Além disso, a entrada de caracteres não funciona no IDLE do Python, então eu recomendo executá-la em outro lugar.fonte
\xe0
tem quatro bytes e não um, então o tweet 3 deve ter 130. Parece que você perdeu otime.sleep(.1);c+=1
tweet 4 e alterou a ordem (não sei se a alteração da ordem é intencional) e novamente\n
tem dois bytes e não um, então deve ser 134 .sleep
meu computador.c%10<1
e removerc=0
.JavaScript (4 Tweets /
343317 bytes / 243 sobressalentes)Não tem muita certeza dos requisitos do cabeçalho e do formato dos Tweets, por isso, informe se ele precisa ser corrigido. Ainda um pouco mais pode ser raspado, tenho certeza.
Tweet 1 - P0 (11 bytes)
Tweet 2 (82 bytes)
Tweet 3 (126 bytes)
Tweet 4 (98 bytes)
Execute-o no JSFiddle: https://jsfiddle.net/CookieJon/7Lenhcge/
(Clique no painel de saída para dar foco aos eventos do teclado)
fonte