Il y a eu récemment (il y a quelques années) un certain buzz sur les sites de programmation concernant une implémentation de Tetris en 140 octets . ...
Il s'avère que bien qu'il soit petit, il s'agit d'une version simplifiée de Tetris, et même pas d'une implémentation complète. Seule la fonction logique principale tient dans 140 octets de Javascript. Pour l'exécuter, vous avez besoin de ~ 840 caractères HTML supplémentaires.
On peut faire mieux!
Ce défi consiste à implémenter une version complète de "Tetris binaire" dans le moins de tweets possible.
Règles Tetris binaires:
- Le programme doit afficher un terrain de jeu contenant au moins 5 colonnes et 6 lignes de cellules.
- N'importe quelle méthode d'affichage peut être utilisée, tant que les blocs et les bords du champ sont clairement marqués.
- Il doit y avoir au moins deux types de blocs:
#
et##
. Un support de bloc supplémentaire tel que des###
blocs d'angle en forme de L sera voté par moi: P et le jeu de tetris binaire le plus complet (le plus de blocs comme les fonctionnalités d'origine et de rotation) gagnera mon bonheur et une prime possible jusqu'à 50 répétitions. - De nouveaux blocs sont ajoutés au champ de la ligne supérieure et une cellule de bloc doit occuper la colonne centrale.
- Les blocs descendent vers la rangée du bas à un taux fixe. Les blocs doivent descendre même sans intervention de l'utilisateur.
- Lorsque des blocs touchent le bas du champ ou un bloc inférieur, ils arrêtent de tomber et sont fixés en place. Un nouveau bloc est ajouté.
- Lorsque toutes les colonnes de la ligne sont remplies de blocs, la ligne est vidée et tous les blocs fixes ci-dessus déroulent d'une ligne.
- Le programme doit répondre aux pressions de touches. Il doit y avoir 3 touches uniques qui remplissent les fonctions suivantes
- décaler le bloc actuel vers la gauche 1 colonne
- décaler le bloc en cours vers la droite 1 colonne
- décaler le bloc actuel d'une ligne vers le bas
- Chaque tweet ne peut contenir que 140 caractères. L'utilisation de caractères multi-octets pouvant être mis dans des tweets est autorisée.
Les règles pour ce qui peut être dans un tweet sont simples. Si vous pouvez le tweeter, vous pouvez l'utiliser.
Les langues interprétées suivent les mêmes règles. Chaque section doit suivre les spécifications. Tant qu'aucune erreur d'exécution ne se produit (et que le reste est valide selon les spécifications), votre réponse est des règles de golf valides :
parce que l'implémentation d'origine était "tweetable", ce défi nécessite la même chose. Les inscriptions doivent pouvoir être transmises sous la forme d'une série de tweets (lignes de 140 caractères ou moins).Le premier tweet doit contenir le nom du compilateur / interpréteur, le nom du programme et tout argument de ligne de commande
- il sera enregistré en tant que fichier "P0"
- Les N tweets suivants doivent contenir le programme sous la forme d'une série de lignes.
- Chaque tweet sera stocké dans un fichier avec le nom T <n>, où n est 1..N
- Chaque ligne sera ajoutée aux lignes précédentes et compilée ou interprétée. Il doit produire un fichier objet ou un programme valide.
- Le programme n'a pas besoin d'être fonctionnel jusqu'à ce que la dernière ligne soit ajoutée.
Le programme sera exécuté de la manière suivante (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
L'interpréteur doit être un programme exécutable couramment disponible qui n'implémente pas déjà Tetris.
Score : le moins de
tweets, y compris P0. Liens rompus par le plus grand nombre de caractères de rechange (140 * num tweets - nombre total de caractères)
Exemples d'entrées
chrome a.htm
<html><div id="output"></div></html>
<script>cool java script here</script>
Score = 3 (334 de rechange)
cc a.c ;a.out
main(){/*cool prog here*/}
Score = 2 (241 de rechange)
tetris
Score = 1 (134 de rechange) si c'était légal, ce qui n'est pas le cas
Remerciement spécial
J'ai été autorisé à poster ceci avec le consentement d'Ashelly ici
la source
Réponses:
Python 3, Score de 5 Tweets (242 de rechange, en comptant P0)
-19 octets merci à Jonathan Allan !
Le compte de réserve ne prend pas en compte les sauts de ligne entre les tweets.
Tweet 1 (Déclaration, 12 octets)
Tweet 2 (70 octets)
Tweet 3 (129 octets)
Tweet 4 (113 octets)
Tweet 5 (134 octets)
Programme complet (449 octets)
Est-ce que certains bits maléfiques pointent le piratage et stockent le champ et la pièce dans deux entiers. Je vais essayer de poster une explication bientôt.
Remarque: Cela ne fonctionne que sur Windows, mais il peut être basculé sur Linux via
msvcrt
→getch
et"cls"
→"clear"
. De plus, la saisie de caractères ne fonctionne pas sur IDLE de Python, donc je recommanderais de l'exécuter ailleurs.la source
\xe0
est de quatre octets et non un donc le tweet 3 devrait être 130. Vous semblez avoir manquétime.sleep(.1);c+=1
du tweet 4 et changé l'ordre (je ne sais pas si le changement d'ordre est intentionnel) et encore\n
deux octets pas un, donc il devrait être 134 .sleep
sur ma machine.c%10<1
et supprimerc=0
.JavaScript (4 Tweets /
343317 octets / 243 de rechange)Pas tout à fait sûr des exigences du format d'en-tête et de tweets, veuillez donc indiquer s'il doit être corrigé. Encore un peu plus peut être rasé, j'en suis certain.
Tweet 1 - P0 (11 octets)
Tweet 2 (82 octets)
Tweet 3 (126 octets)
Tweet 4 (98 octets)
Exécutez-le dans JSFiddle: https://jsfiddle.net/CookieJon/7Lenhcge/
(Cliquez sur le volet de sortie pour mettre l'accent sur les événements du clavier)
la source