Défi
Je suis récemment entré dans les ordinateurs 8 bits et suis fasciné par leur fonctionnement et celui des autres; ainsi l'objectif de ce code golf, est de répliquer une partie du Woz Monitor, conçu par Steve Wozniak pour l'Apple I.
Vous devez stocker un tableau de 22 valeurs hexadécimales avec une largeur de deux octets (valeur minimale 10 $ , valeur maximale $ FF ), puis prendre n- quantité d'entrées. (Normalement deux; les langues comme Brainfuck peuvent avoir du mal).
Les entrées feront référence à l'endroit où commencer à imprimer dans le tableau et où s'arrêter; une entrée avec un comportement défini aura sa valeur de départ inférieure ou égale à la valeur de fin. Votre programme doit alors être capable d'imprimer toutes les valeurs hexadécimales comprises entre et incluant les hexadécimaux entrés.
Un exemple de ceci:
Array
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15
Values
FF F4 B6 D7 40 00 00 A4 F0 00 FF 0D 9C 21 65 C4 02 28 90 E7 D6 A5
input first num:
04
input second num:
14
40 00 00 A4 F0 00 FF 0D 9C 21 65 C4 02 28 90 E7 D6
Maintenant, la partie intéressante de cet exercice est que vous pouvez utiliser ce que vous voulez pour vérifier les limites de l'entrée des utilisateurs. Entrées de personne hello
et votre programme a un comportement indéfini? Il quitte sans préavis? Ils sont tous les deux valides.
Les seules règles sont:
1. Vous devez inclure les valeurs des 22 valeurs hexadécimales dans le cadre de votre programme avant qu'il ne démarre (vous ne pouvez pas demander de saisie à l'utilisateur).
2. La sortie des valeurs hexadécimales doit suivre le format exact:
00 FF 00 FF 00
les espaces de fin, les tabulations ou les lignes sont OK. Les personnages ne le sont pas.
3. Le programme n'a pas à demander les entrées avec un message. Laissez le "message" vide si vous le souhaitez. L'utilisateur doit cependant saisir les limites hexadécimales.
4. Comme les valeurs des 22 hexadécimaux sont à vous de décider, vous devez créer un programme qui récupère réellement les valeurs du stockage, au lieu d' imiter un programme en imprimant simplement les valeurs. (comme une liste de 00 $ ).
5. n-quantité d'entrées, se réfère à la quantité d'entrées requises pour que la langue de votre choix reconnaisse une largeur hexadécimale de deux octets. par exemple. (Brainfuck nécessitera deux entrées par hex, ce qui en fait quatre pour les deux).
N'hésitez pas à commenter si vous avez besoin d'éclaircissements.
Il s'agit du code golf, donc la réponse la plus courte en nombre d'octets est le gagnant.
Classement
Voici un extrait de classement générant un courtoisie de Martin Ender .
Pour vous assurer que votre réponse s'affiche, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les barrant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
la source
n
parce que Brainfuck ne peut pas accepter une chaîne de 2 caractères, vous devez saisir le premier octet, puis le second pour la première valeur, puis recommencer pour la deuxième valeur, 4 entrées au total. Ils peuvent être aussi nombreux que vous le souhaitez.Réponses:
Gelée ,
2421 octetsValeurs choisies:
[00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 1F 10 11 12 13 14 15]
TryItOnline
Si la deuxième entrée est inférieure à la première, elle sort la séquence inversée.
Le comportement hors limites n'est pas défini (par exemple, "foo", "14" renvoie 38 valeurs, dont la plupart ne sont même pas dans le tableau et beaucoup ne sont pas de longueur 2)
Comment?
la source
1F
), ce qui signifie que je n'avais pas besoin d'interpréter "correctement" les entrées hexadécimales ou d'ajouter 16 pour me donner deux chiffres hexadécimaux à reconvertir.JavaScript (ES6),
1181151121028281 octets1 octet enregistré grâce à ETHproductions
Valeurs choisies:
0x04
/0x0f
).0x00
(valeur minimale).0x15
(valeur maximale).Version précédente (97 octets)
Génération d'une liste pseudo-aléatoire de «vraies» valeurs hexadécimales:
Séquence:
la source
[a,b]=prompt().split(' ')
dans la ligne de commande. Quoi qu'il en soit, ma réponse mise à jour devrait résoudre ce problème.JavaScript (ES6),
107 152137 octetsAfficher l'extrait de code
Valeurs choisies:
Contributions:
0x14
InternalError: too much recursion
NaN
pour hors limites.Solutions précédentes:
152 octets:
107 octets, solution invalide (entrées manquantes):
la source
console.log(...)
. ;)var
et le dernier;
ne font pas partie de la réponse. C'est juste pour l'extrait, c'est pourquoi j'ai ajouté un saut de ligne. Je vais modifier la réponse.Python,
888786 octets1 octet de sauvegarde grâce à @JonathanAllan
1 octet de sauvegarde à nouveau à @JonathanAllan
A également changé la base du code, beaucoup plus agréable maintenant.
Valeurs choisies:
00
pour tout.Même idée que ma réponse C. Cette fois, cependant, le code prend une seule entrée de l'utilisateur, nécessitant un espace entre les deux valeurs, les divise, les convertit en valeurs hexadécimales et imprime chaque hex du
l
tableau, y compris et entre les deux valeurs entrées. Puisque Python a un magnifique système de capture d'erreurs, aucun débordement de tampon n'est présent et le code est donc beaucoup plus sécurisé. Le programme est à l'abri d' un comportement indéfini en ce sens qu'il ne s'exécutera pas lorsqu'une valeur supérieure est soumise avant une valeur inférieure.Cela devrait fonctionner sur Python 2.x et 3.x; Veuillez me corriger si je me trompe, car je n'ai pas accès aux deux interprètes car mon système ne prend pas en charge les deux.
la source
C ++,
989593 octetsMes valeurs choisies sont toutes des 0
la source
04
et06
que je n'ai récupéré que deux valeurs. Je soupçonne que ce sont les valeurs05
et06
. Vous devez fournir toutes les valeurs entre et y compris les valeurs entrées.Perl,
794541 octets"valeur min 10 $" - l'exemple a un minimum de 00 $ - est-ce une faute de frappe?
Voici une réponse perl plutôt ennuyeuse en 41 octets (était 46, puis j'ai continué à voir des espaces, des parens que je pouvais élider). Prend l'entrée sur deux lignes.
Les données sont une liste 04..1A
Avant j'étais trop intelligent avec le pack & unpack. Ses octets d'entrée sont entrés immédiatement ensemble, par exemple, "020E" affichera les entrées du 14 au 14
Pourrait essayer de jouer au golf plus en utilisant tous les 0
substr
, etprintf'%*vX'
... non, ce qui rend ma réponse plus longue. 48 caractères (en utilisant une chaîne d'ascii '7', hex 37 comme données)la source
CJam, 22 octets
Valeurs choisies:
Essayez-le en ligne
la source
Scala, 45 octets
Non golfé:
Utilise
00
enFF
tant que valeurs, mais fonctionne jusqu'à 2147483647.la source
error: ')' expected but string literal found.
àa.to(b).map(
C,
176175161 161 octets1 octet de sauvegarde grâce à @JonathanAllan Aide
massive grâce à @Downvoter pour m'avoir sauvé 14 octets!
Essayez-le en ligne!
Valeurs choisies:
00
pour tout.Réponse sans golf:
L'astuce consiste à saisir deux entrées et à tenter de les convertir en chaînes hexadécimales, puis de les convertir en entiers. Puisqu'il n'y a pas de vérification d'erreur ou quoi que ce soit de même, un comportement indéfini est simplement de lancer des erreurs et de casser le programme. L'utilisateur doit saisir deux entrées, mais mon compilateur Eclipse CDT semble me permettre de les saisir toutes les deux sur la même ligne avec un espace entre les deux.
Ils doivent être dans le bon ordre, car demander une valeur plus élevée avant qu'une valeur plus petite ne lance pas du
while
tout la boucle.Le fait est qu'il n'y a pas non plus de protection contre le débordement de tampon, donc je peux simplement demander quelque chose d'absurde comme une plage de 0 $ à $ FFFF, et j'obtiendrai tout dans la mémoire de mon ordinateur dès le début de l'allocation de mémoire pour le
a[44]
tableau. , jusqu'à 65536 valeurs plus tard.la source
%x
directement?char s[2]
place desmalloc
trucs? Lamalloc
valeur de retour de cast n'est pas nécessaire de toute façon en C.printf("%d%d ", ...)
partie, en remplaçant la mise en forme par simplement%x
ne renvoie que0
des au lieu de00
, et ne les espace pas.scanf
.GNU sed, 209 + 1 (drapeau r) = 210 octets
Essayez-le en ligne! Un espace de tête est présent dans la sortie, j'espère qu'il est autorisé.
Exemples d'exécution:
Explication: les 22 valeurs hexadécimales enregistrées sont les mêmes que celles de l'exemple de l'OP
Les index de début et de fin sont lus sur des lignes distinctes. La sortie est une seule ligne avec les valeurs de table dans cette plage d'index (inclus). Une entrée non définie écrira plusieurs lignes de sortie non valide.
la source
PHP,
10610510496 + 2 octetsou
Courir avec
php -nr '<code>' <lowindex> <highindex>
; échapper aux guillemets simples dans le code.... ou testez-le en ligne .
dechex
interprète l'entrée comme des chaînes hexadécimales dans la mesure où les caractères sont des chiffres hexadécimaux,0
si l'entrée commence par autre chose.n'imprime rien si la première valeur est supérieure à la seconde.
valeurs choisies:
(22 premiers codes ascii du code exécuté)
ou
avec ces valeurs:
la source
<?php
morceau?-r
. Et si j'ai besoin de le stocker dans un fichier, j'utilise la balise ouverte courte<?
.a
,z
et neProgramingPuzles_CGolf
sont pas définies. D'oùProgramingPuzles_CGolf
venait-il de toute façon? : /stderr
vers/dev/null
si vous ne les aimez pas. PHP évalue les constantes non définies des chaînes.Assemblage Apple II 6502, 75 octets
Code d'octet:
Démontage:
Il forme un tableau en mémoire qui ressemble à la sortie. Les valeurs choisies sont:
L'utilisateur appuie sur quatre touches pour définir les entrées.
la source