Choisissez votre informaticien célèbre favori ou pionnier de l' informatique qui est né en 1942 ou plus tôt (en 1943 marque le début de la création de l' ordinateur « premier » ). Ils devraient avoir une page Wikipédia ou un autre site qui répertorie leur année de naissance et indique comment leurs réalisations sont liées à l'informatique. Vous pouvez choisir la même chose que quelqu'un d'autre mais choisir quelqu'un de nouveau est encouragé.
Prenez un nom sous lequel ils sont généralement connus. Il s'agit très probablement de leur prénom et de leur nom, mais cela peut inclure des abréviations ou des prénoms si cela est plus courant. Par exemple, pour Tony Hoare à la fois Tony Hoare
et C. A. R. Hoare
serait acceptable.
Tous les caractères du nom doivent être imprimables en ASCII . Si le nom contient des caractères qui ne sont pas imprimables en ASCII, c'est bien si vous choisissez quelque chose d'approximatif. par exemple Kurt Godel
au lieu de Kurt Gödel
.
Prenez l'ensemble de caractères uniques dans le nom (par exemple C. ARHoare
) et déplacez-les vers le haut de l'échelle ASCII imprimable d'ici l'année de naissance de votre scientifique, en boucle autour de l' ~
espace. (Ajoutez essentiellement le modulo 95 de l'année de naissance.) Cela vous donnera un nouvel ensemble (très probable) de caractères ASCII imprimables.
Par exemple, CAR Hoare est né en 1934, donc le fait de déplacer chaque caractère en C. ARHoare
1934 (34 mod 95) donne ePBctj2$5(
.
Cet extrait de pile fera tout le changement pour vous:
function go() {var name = document.getElementById("name").value;var year = parseInt(document.getElementById("year").value);var unique = {};for (var i = 0; i < name.length; i++) { unique[name.charAt(i)] = true; } var result = ''; for (var char in unique) { result += String.fromCharCode((char.charCodeAt(0) - 32 + year) % 95 + 32); } document.getElementById("result").value = result; }
Name: <input type="text" id="name" value="C. A. R. Hoare"><br>
Birth Year: <input type="text" id="year" value="1934"><br>
<button type="button" onclick="go()">Ok</button><br>
Result: <input type="text" id="result" readonly>
Défi
En utilisant cet ensemble et uniquement cet ensemble (pas de tabulations, pas de nouvelles lignes) de caractères ASCII imprimables décalés, écrivez un programme qui imprime Hello, [name]!
sur stdout ou l'alternative la plus proche, où [name]
est le même nom exact que vous avez choisi ci-dessus et déplacé pour obtenir les caractères de votre programme. Vous pouvez utiliser plusieurs caractères de l'ensemble ou ne pas en utiliser du tout. Par exemple, le programme théorique PetBee($25
s'imprime Hello, C. A. R. Hoare!
.
Notation
Votre score est la taille de votre code en octets multiplié par le nombre de caractères uniques dans le nom que vous choisissez. La plaie la plus faible gagne.
la source
Rear Admiral Grace Murray Hopper, United States Navy, (Retired), Doctor of Philosophy
. Né en 1906. Est-ce que ça va?Rear Admiral Grace Murray Hopper
cependant. N'oubliez pas que la taille de votre code est multipliée par le nombre de caractères uniques dans le nom, donc un nom plus long n'est pas nécessairement meilleur.Réponses:
Insomnie,
1039998 * 8 = 784George Boole , 1815
Les 5 programmes ci-dessous ont la même longueur (98) et la même sortie.
Impressions
Hello, George Boole!
Insomnie, 103 * 6 = 618 (probablement optimal et unique)
Si
G Boole
( George Boole , 1815) est acceptable ...Impressions
Hello, G Boole!
Insomnie,
9492898583 * 10 = 830Kurt Godel, 1906.
Impressions
Hello, Kurt Godel!
J'ai écrit un programme pour rechercher la solution. Ma deuxième version du programme devrait être plus proche de l'optimale que ma première version.
Selon le nitpick de @Martin Büttner (
100928885 caractères, même jeu de caractères):Impressions
Hello, Kurt Goedel!
Interprète
la source
Gödel
utiliser uniquement l'alphabet latin estGoedel
. ;)CJam,
230117115114 114113110107106 octets * 13 = 1378Testez-le ici.
J'ai choisi
Edsger Dijkstra
, né en 1930, ce qui me donnec#2&$1>b()* 3
(que j'ai vraiment juste choisi parce que c'était le premier que j'ai trouvé dont le nom a donné des caractères utiles pour CJam; j'ai vérifié une douzaine de noms depuis et aucun n'avait l'air aussi prometteur).Le code essentiellement construit juste les codes ASCII en utilisant
1
,2
,3
,*
,#
(exponentiation) et(
,)
(décrément, incrément) et les convertit en un personnagec
. Pour enregistrer certains caractères, je peux parfois copier un caractère antérieur avec$
(0$
copie l'élément de pile supérieur,1$
copie l' élément de pile de deuxième en haut, etc.).Voici la répartition du code en caractères (c'est aussi exécutable):
la source
Marbelous , 83 octets * 10 = 830
J'ai choisi
R Kowalski, 1941
ce qui me permet d'utiliser:{It9A+6=53
Celui-ci est un peu plus complexe que l'ancienne réponse (ci-dessous) car de nombreuses billes passent par plusieurs appareils, dans l'ensemble la plupart des billes ont juste quelques éléments ajoutés avant d'être imprimées. Parce que je n'avais pas de soustraction ou de chiffres bas, les codes ascii inférieurs devaient être formés en ajoutant en fusionnant deux billes de haute valeur, car cela entraîne en plus du modulo. (Je l'ai utilisé
=3
comme déflecteur car il pousse chaque marbre non égal à 3 vers la droite et ressemble à un chat mignon)sortie:
Hello, R Kowalski!
ancienne réponse:
Marbelous , 113 * 17 = 1921
Marbelous se débrouille bien ici, puisque jamais le marbre qui tombe de la planche est imprimé, en raison de sa nature 2D, il a besoin de quelques chiffres + de l'arithmétique pour ne pas laisser le borad devenir trop énorme.
J'ai choisi
Philip D. Estridge, 1937
qui donneu./26EiSj9:8*-+
comme jeu de caractères disponible. Les caractères réellement utilisés sont.+-245689E
Le tableau est assez simple, les 3 premières lignes sont des littéraux, chaque groupe de deux est une valeur hexadécimale, la quatrième ligne est des opérations arithmétiques pour former les codes ascii qui n'ont pas pu être écrits explicitement en raison des jeux de caractères limités.
sortie:
Hello, Philip Donald Estridge!
Vous pouvez l'essayer ici!
Je vais maintenant chercher un meilleur candidat possible, car il semble que Marbelous pourrait être compétitif ici.
la source
G Boole
avec 105 caractères * 6 - Je pense qu'il devrait y avoir une limite sur la façon dont le nom peut être raccourci.Using this set and only this set (no tabs, no newlines) of shifted printable ASCII characters
Brainfuck, 1846 * 12 = 22152
Juste pour avoir une langue autre que CJam. Nécessite la spécification d'origine Brainfuck avec le type de données d'octets, qui déborde à 256.
N'utilise que 2 caractères:
+
pour incrémenter la cellule actuelle et.
pour sortir la cellule actuelle.Sortie
Nous remercions Coredump d'avoir révélé ce qui suit dans sa réponse:
la source
"Bonjour, Niklaus Emil Wirth!" (Befunge-98, 222 × 14 = 3108)
De Wikipédia :
Avec un décalage de 34,
Niklaus Emil Wirth
(18 caractères, 14 uniques) finit commep,./$86Bg0,/By,57+
.Code ( essayez-le ici ):
Panne:
La dernière ligne place un caractère HALT (
@
) au début de la ligne. Lorsque le contrôle revient à ce point, le programme s'arrête. Cela ne devrait en fait pas être nécessaire, car le@
caractère en (5,0) est toujours là et rien ne doit être sorti avant qu'il ne soit atteint. Cependant, le seul interprète Befunge en ligne qui exécutera cette monstruosité ne fonctionnera pas correctement sans lui.Il est en fait possible de faire une solution de travail avec juste
Niklaus Wirth
(12 caractères uniquesp,./$86By,57+
), mais le code est beaucoup, beaucoup plus long.(Tagué comme Befunge-98 car Befunge-93 est limité à une largeur de 80 caractères.)
la source
CJam, 323 octets * 10 = 3230
Sortie:
CJam, 662 octets * 10 = 6620
8700Pas pour gagner mais simplement parce que cela semble possible. Il a utilisé seulement
2e(c
.Sortie:
Générateur
La réponse triviale
222(((((((((((c
(générée parq{i222_@-'(*'c}%
) a 3420 octets.la source
e_
littéraux numériques extérieurs.2
? Ou en utilisant les autres caractères (utiles)B
,5
et$
? (Par exemple, vous pouvez obtenir des deuxième à quatrième espaces et les deuxième et troisième périodes avec2$
, ainsi queA
avec2$((
.)CJam, 16 *
307288 =49124608Affiche:
C'est ma première réponse en utilisant CJam, donc cela peut sûrement mieux jouer au golf (tout indice est le bienvenu).
Voici un code utilitaire que j'ai utilisé. Comme j'ai calculé le jeu de caractères pour certains autres noms, cela peut être utile pour quelqu'un qui connaît mieux CJam (ou peut-être pour une autre langue).
la source
Brainf_ck - 723 * 12 = 8676
J'ai parcouru la liste des informaticiens de Wikipédia et j'ai collecté les années de naissance et les noms les plus longs de toutes les personnes qui y sont répertoriées. J'ai écrit un programme pour exécuter tout cela et trouver tout ce que je pourrais éventuellement faire dans une langue commune. Malheureusement, je ne pouvais pas trouver des noms qui pourraient soutenir
echo;
,alert()
,console.log()
(je l' espère),print
oumain
.Je voulais principalement partager mes données d'exploration brutes au cas où quelqu'un voudrait également rechercher d'autres langues (remarque: peut être inexact et incomplet): Données d'exploration .
EDIT : Nouvelle pâte d'exploration avec environ 40 nouveaux noms de List of computing people et List of pionniers in computer science .
EDIT : nettoyé manuellement la liste.
J'ai trouvé que Jean David Ichbiah (1940), concepteur en chef d'Ada, fournit
+-.
(le plus court des trois personnes pour le faire). J'ai généré ce code BF pour lui.Alexander Keewatin Dewdney a fourni les caractères BF les plus utilisables (
+.<>
), mais est venu légèrement au-dessus de ma réponse. Je n'ai trouvé personne fourni.[]
.la source
Rubis 1,8 - 250 × 18 = 4500
Caractères disponibles:
Sortie:
Anatolii Karatsuba , né en 1937, est surtout connu pour ses contributions au domaine de la théorie analytique des nombres (un domaine que j'aime personnellement), y compris l' algorithme de Karatsuba , une méthode pour la multiplication rapide d'opérandes de précision arbitraires.
C'est le premier et le seul nom que j'ai essayé.
la source
GolfScript (125 * 14 = 1750)
Démo en ligne
Douglas Engelbart (1925 - 2013) est peut-être le plus célèbre pour la "Mère de toutes les démos" . Son nom et son année de naissance donnent des caractères
!&(),-./9]^z{~
, dont cette solution utilise&()-./9]^~
La structure de base du code consiste à
build list of numbers](-
placer un grand nombre de nombres dans un tableau avec la chaîne vide qui commence sur la pile, puis à extraire cette chaîne et à l'utiliser avec la promotion de type de-
pour transformer le tableau de nombres en chaîne.Puisqu'il n'y a pas d'accès aux éléments sous le haut de la pile, j'ai écrit un programme C # pour trouver de courts extraits qui prennent un entier donné en haut de la pile et ajoutent le prochain entier requis. Cela a créé un petit problème, lorsque l'extrait de code pour
69
(E
) s'est terminé avec-
et l'extrait de code pour110
(n
) a commencé avec9
: il en coûte un caractère pour utiliser un extrait de code plus long pour110
.la source
CaneCode ,
458410 * 16 =73286560BF correspondant:
Les sorties:
CaneCode est juste une substitution de symboles directe de Brainfuck, où
12348
correspondent+-><.
respectivement. J'ai passé environ 2 heures à essayer de chercher un nom court qui donnait+-.
un Brainfuck normal, sans succès.Jack Elton Bresenham , inventeur de l'algorithme de ligne de Bresenham et né en 1937, donne les personnages suivants:
Malheureusement, alors que
5
([
) est disponible, l'absence de6
(]
) signifie que le code devait encore incrémenter la zone de 100 ish (pour les caractères minuscules) lentement.la source
> <> (Poisson) , 163 * 15 = 2445
Les sorties:
Ivar Hjalmar Jacobson , né en 1939, a été retrouvé grâce aux données d'exploration de BMac . Il fournit les caractères
> <>, comme Befunge, est un langage basé sur la pile 2D. Les commandes> <> utiles sont:
*+24567
pour l'arithmétique (notez que ça47
pousse un4
et un7
sur la pile, pas47
))
pour plus de (utile pour obtenir1
):
pour dupliquer le haut de la pileo
pour la sortie;
pour la fin du programmep
est également bon pour la réflexion, mais je n'ai pas pu penser à une bonne utilisation.>
est une autre commande> <>, qui dirige le flux du programme vers la droite, mais comme le programme s'exécute déjà dans cette direction, il n'était pas nécessaire.la source