Soyez sûr de voir l'autre défi, inverser la carte de caractères ASCII !
Le jeu de caractères ASCII (American Standard Code for Information Interchange) est la norme de codage de caractères la plus utilisée. Les codes ASCII représentent le texte des ordinateurs, des équipements de télécommunications et d'autres appareils.
Défi
Votre défi consiste à imprimer un mappage du jeu de caractères ASCII lorsque l'utilisateur les saisit. GIF:
Une fois que l'utilisateur a saisi chaque caractère ASCII, la sortie doit ressembler à ceci:
Cartographie
Chaque caractère a une position assignée sur une grille logique 16x6, en commençant par le caractère espace en haut à gauche et en encapsulant de sorte que le chiffre 0 apparaisse en dessous.
Lorsqu'une entrée ASCII imprimable est reçue, imprimez ce caractère ASCII à son emplacement d'écran attribué sans supprimer aucun des caractères actuellement à l'écran.
Règles
- Votre programme n'a besoin que de mapper les caractères ASCII imprimables
0x20
vers0x7E
. - Votre programme ne doit pas se terminer et continuer de mapper des caractères à l'écran tant que tous les caractères ASCII imprimables n'ont pas été saisis. À partir de là, votre programme peut se terminer ou s’exécuter dans Neverland.
- Votre programme peut mapper des caractères comme vous le souhaitez, par exemple sur une feuille de calcul, un tableau, une fenêtre de console ou une fenêtre graphique.
- Quelle que soit la façon dont vous affichez le mappage, il doit être mis à jour en temps réel (dès qu'il reçoit une entrée utilisateur).
- Si votre programme ne lit pas l'entrée silencieusement, il doit mettre le curseur hors du chemin, afin que le texte ne gêne pas la carte.
Aidez-moi
Voici l'algorithme de pseudocode que j'ai utilisé pour générer le GIF:
loop forever
c = input
y_coord = c / 16
x_coord = c - y * 16
if c is printable
print c at (x_coord * 2 + 1, y_coord + 1)
end if
end loop
Il peut exister un autre moyen d'obtenir la sortie requise. Vous pouvez choisir d'utiliser mon algorithme ou le vôtre, mais la sortie doit être la même indépendamment.
Voici une référence de table ASCII utile.
Notation
La réponse avec le moins d'octets dans chaque langue l'emporte. S'amuser!
Réponses:
QBIC ,
5357 octetsAjout de 4 octets pour l'espacement.
QBIC a commencé le développement comme raccourci pour QBasic, donc j'ai pensé que traduire ma réponse QBasic le démontrerait bien. Nous avons économisé environ 40% dans l'octet de comptage pour un programme fonctionnellement identique - et c'est quand même
LOCATE
,ASC
etCHR
n'a pas encore SPEQ-fonctions. Heureusement, QBIC peut transmettre du code directement à QBasic pour compenser cela. Un côte à côte:la source
JavaScript (ES6) + HTML, 114 + 16 = 130 octets
16 octets enregistrés grâce à @Shaggy
C'est tellement incroyablement satisfaisant de simplement écraser le clavier ...
la source
prompt()
dans une boucle? Il vous sauvera de toute la gestion des événements et du HTML. OP semble le permettre. Voir les commentaires du billet Mathematica.onkeypress
seul, ce qui vous permet de supprimer labody
balise. En outre, lapre
balise peut être raccourcie à juste<pre id=O
. Cependant, vous devrez inclure la fermeture>
pour qu'elle fonctionne dans un extrait.QBasic 4.5,
8185 octetsAjout de 4 octets pour se conformer à la règle d'espacement.
Et la sortie ressemblera à ceci (REMARQUE: ancienne capture d'écran, maintenant chaque caractère est séparé par un espace):
QBasic a la
LOCATE
commande, qui est utile ici. Une ventilation de ce code:la source
Java 8 , 143 octets
Utilise le code de contrôle ANSI
CSI n ; m f
pour définir la position du curseur etConsole.readPassword()
lire silencieusement l'entrée utilisateur. Sortie de certains caractères:la source
readPassword()
utilisé comme ça. Oh, et vous semblez manquer un point-virgule après l'impression. En outre, n'est-il pas possible d'utiliser d'uneSystem.out.printf
manière ou d'une autre au lieu deSystem.out.println(String.format(
? Et vous pouvez passer()->
ào->
en utilisant un paramètre vide inutilisé .BrainFuck , 355 octets
Les options de BrainFuck sont assez limitées, donc la sortie est dans le terminal et l'écran est "effacé" avec 20 nouvelles lignes. L'entrée doit être les caractères ASCII, séparés par des retours à la ligne.
Essayez-le en ligne!
Formaté et documenté
Ce sont les notes de débogage que j'ai utilisées pour écrire le programme. J'ai utilisé mon interpréteur qui peut éventuellement imprimer l'état de la bande à chaque caractère «~» pour le débogage.
la source
Mathematica, 108 octets
Essayez-le en ligne sur https://sandbox.open.wolframcloud.com/
Lorsque vous collez du code et appuyez sur
Shift+Enter
, une boîte de dialogue apparaîtra, vous entrez"a"
par exemple pour le caractèrea
. Le programme fonctionne pour toujours.Remarque: Sur Wolfram sandbox, la police est formatée différemment de celle de Mathematica sur mon ordinateur. L'espacement des lignes / colonnes peut donc sembler étrange.
la source
OK
sur une zone de saisie, une autre zone de saisie apparaît pour que vous puissiez entrer la saisie.Python 2 , 115 octets
Essayez-le en ligne!
Nécessite des guillemets (simples ou doubles) autour des caractères saisis (la version TIO ne le fait pas).
la source
raw_input
àinput
comme c'est le recensement de la communauté que vous pouvez supposer que l'entrée a des guillemets autour si nécessaire.{
sans correspondance}
.str , non compétitif, 18 octets
Présentation de mon nouveau langage semi-ésotérique.
la source
Haskell, 133 octets
Nécessite un terminal qui comprend les séquences d'échappement ANSI.
Il est plus court de conserver une liste de toutes les touches enfoncées jusqu'à présent et d'effacer l'écran avant de les imprimer toutes à chaque tour que de désactiver l'écho dans la session de terminal. Ce dernier a besoin
import System.IO
ethSetEcho stdin(2<1)
coûte trop d'octets.la source
C, 101 octets
C'était le programme que j'ai utilisé pour faire les graphiques. La sortie est comme indiqué dans le GIF. ;)
la source
QBasic,
6258 octetsTesté avec QB64 . Devrait également fonctionner correctement sur QBasic, bien que vous souhaitiez peut-être le modifier pour faire un
CLS
lors de la première exécution.Similaire à la réponse de steenbergh , mais utilise
INPUT$(1)
pour lire les caractères un à la fois. Cette approche est plus courte et n'affiche également aucune invite. Il utilise égalementRUN
pour la boucle infinie, car nous n'avons pas à stocker d'état entre les itérations à l'exception de l'état de l'écran.la source
input$()
. J'aime trop le sujet TIPS.Pascal, 112 caractères
Comme ma solution Mathematica prend de nombreux octets
div
,mod
etToCharacterCode[Input[]]
j'essaie de faire une autre réponse avec Pascal. Mais sansClrScr
mon compilateur (FPC), j'ai laissé quelques informations de compilation à l'écran.ClrScr;
prend 7 octets.Le
*2
utilisé pour l'espacement correct prend encore 2 octets.la source
LOGO, 90 octets
Essayez-le sur FMSLogo.
Après tout, ma solution Logo est la plus courte, par rapport à ma réponse Mathematica et Pascal.
Ajoutez 3 octets si la tortue doit être cachée.
la source
6502 code machine + Apple // e ROM, 31 octets
Vidage hexadécimal:
Assemblée commentée:
Si le curseur l'invalide, voici une version à 36 octets sans curseur:
la source
Rubis,
797571 + 13 = 84 octets+13 octets pour l'
-rio/console
indicateur.Ungolfed
la source
SmileBASIC 3, 82 octets
Dans le jeu de caractères SmileBASIC,
¥
se trouve là où\
se trouverait normalement; j'espère que cela n'invalide pas complètement cette réponse.la source
Applesoft BASIC , 134 octets
Il s'agit d'une version golfée du test de clavier Apple] [, le programme qui a inspiré le défi.
la source