Fatigué de la fiabilité du stockage flash, vous avez décidé de stocker tous vos programmes sur l’une de ces vieilles vieilles disquettes de 1 440 Ko. Cependant, après avoir copié pas même 3 000 programmes, le disque était plein. Comment est-ce possible? Habile dans l'art du code-golf tel que vous l'êtes, la plupart de vos programmes ne mesurent même pas 100 octets; il devrait donc rester beaucoup de place ...
Après avoir posé votre question sur Super User, vous découvrez que la taille du cluster du système de fichiers vous a causé du tort , un complot pervers des concepteurs de FAT12 qui laisse une partie importante de votre disquette inutilisée et vous oblige à acheter plus que ce dont vous avez réellement besoin.
Acheter plus de disquettes? Jamais! La taille du cluster sera moins un problème si nous sauvegardons simplement plusieurs programmes dans un seul fichier, ce qui est possible car différents compilateurs / interprètes se comporteront différemment pour le même code source.
Tâche
Ecrivez un polyglotte qui s'intègre dans un seul cluster (512 octets ou moins) et résout le plus grand nombre possible des tâches suivantes.
Lire toutes les entrées et les imprimer.
Imprimer Bonjour le monde! .
Lire une ligne / argument ( nom ) comme entrée et imprimer joyeux anniversaire, [nom]! .
Lire toutes les entrées et imprimer J'aime les onglets! s'il contient un ou plusieurs tabulateurs (0x09) et que je déteste les espaces! si ce n'est pas le cas.
Lisez deux lignes / arguments et imprimez une valeur de vérité si la seconde est une sous-chaîne de la première et une valeur de faux si ce n’est pas le cas.
Lire une ligne / un argument et imprimer une valeur de vérité si ses caractères sont dans un ordre strictement croissant et une valeur de faux si ce n’est pas le cas.
Lire une ligne / un argument et un caractère et imprimer les index de toutes les occurrences de ce caractère.
Lire une ligne / un argument et imprimer l'un des caractères avec le plus grand nombre d'occurrences.
Lire deux nombres entiers compris entre 0 et 255 et imprimer leur somme.
Lire un seul entier compris entre 0 et 255 et imprimer le quotient et le résidu de sa division par 7 .
Lire un seul entier compris entre 1 et 255 et imprimer une valeur de vérité s'il s'agit d'un nombre composé (ni 1 ni premier) et une valeur de faux si ce n'est pas le cas.
Lire un seul entier compris entre 1 et 255 et imprimer une valeur de vérité s'il s'agit d'une puissance de 2 et une valeur de faux sinon.
Lire deux nombres entiers compris entre 0 et 255 et imprimer le plus grand.
Lire un entier décimal compris entre 0 et 255 affiche sa représentation hexadécimale.
Lit un seul entier compris entre 0 et 255 et affiche son poids de Hamming (nombre de 1 bits).
Lire un entier n entre 1 et 13 et imprimer la F n , la n ième nombre de Fibonacci .
Par exemple, pour l’entrée
13
, imprimez233
.
Lire une ligne / argument d'entrée et le cadrer.
Par exemple, pour l'entrée
Programming Puzzles & Code Golf
, imprimez ceci:+---------------------------------+ | Programming Puzzles & Code Golf | +---------------------------------+
Lisez un bloc rectangulaire de caractères et faites-le pivoter d'un quart de tour dans le sens des aiguilles d'une montre.
Par exemple, pour l'entrée
tye xll epb tma id sa s e i r hsn Tiu
imprimer ceci:
This text is simply unreadable
Lire un entier compris entre 1 et 40 et imprimer un losange de la longueur de ce côté.
Par exemple, pour l'entrée
3
, imprimez ceci:/\ / \ / \ \ / \ / \/
Imprimer ceci:
....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@....
Notation
La réponse qui parvient à incorporer le plus grand nombre de programmes dans un seul fichier qui s'inscrit dans un seul cluster gagne 512 octets. Les liens sont décomposés par le nombre d'octets (plus bas est le meilleur).
Règles supplémentaires
Pour chaque tâche que vous réclamez pour votre partition, le même fichier (octet par octet) doit constituer un programme complet - dans la langue de votre choix - permettant de résoudre cette tâche particulière.
Chaque tâche doit être résolue dans une langue différente.
Les langues sont considérées différentes s'il ne s'agit pas de versions différentes de la même langue. Par exemple, il n'y a qu'un seul JavaScript, un Python et un TI-BASIC, mais C, C ++, Octave et MATLAB sont quatre langages différents.
Le langage sélectionné pour chaque tâche doit satisfaire à notre définition habituelle du langage de programmation .
De plus, la langue doit avoir été publiée et mise en œuvre avant le 9 septembre 2015.
Votre compilateur / interprète peut ne nécessiter aucun indicateur non standard pour produire le comportement attendu.
Les exceptions à cette règle incluent les indicateurs requis pour spécifier une langue particulière, pour lire le programme à partir d'un fichier (unique) ou pour supprimer une bannière.
L'entrée de chaque tâche comprendra des caractères ASCII imprimables (0x20 à 0x7E) et des sauts de ligne (0x0A) sans dépasser 255 octets de longueur.
Tous les nombres entiers peuvent être lus en décimal ou unaire, sauf indication contraire dans la tâche.
Le comportement pour une entrée non valide n'est pas défini.
Vous pouvez lire les entrées de STDIN (ou de son alternative la plus proche) ou sous forme d'arguments de ligne de commande.
Si une tâche nécessite la lecture de deux entrées, vous pouvez les lire - dans n'importe quel ordre - séparées par un séparateur d'un octet de votre choix, en tant qu'arguments de ligne de commande distincts ou l'un de STDIN et l'autre en tant qu'argument de ligne de commande.
Si l'une des pièces d'entrée est une ligne, le seul séparateur possible est un saut de ligne.
Imprimez la sortie sur STDOUT (ou l’alternative la plus proche). Toutes les sorties sur STDERR seront ignorées.
Les règles standard de code-golf s'appliquent à chaque tâche .
Cela inclut notamment les échappatoires interdites par défaut , à l'exception du codage en dur de la sortie , qui est explicitement autorisée pour ce défi.
2>/dev/null
et obtenons la sortie correcte sur stdout, tout va bien? Juste pour être sûr.Réponses:
12 langues, 418 octets
C'est un défi amusant. Il devient difficile d'insérer plus de langues, mais avec tous ces octets restants, je pourrais probablement en faire une de plus.
Utilise gratuitement les langages 2D. Notez que le caractère entre les
[ ]
sur la@-[ ]e<
ligne est un onglet. De plus, cela nécessite des\n
fins de ligne pour que TRANSCRIPT fonctionne.Prélude (Tâche 1 / Chat)
?(!?)
est juste une traduction directe de,[.,]
en BF. Les()
boucles Prelude agissent comme des[]
boucles BF , de sorte que tout, de la(
colonne la plus à gauche à l')
avant du programme principal, n'est pas exécuté.Les règles de syntaxe de Prelude signifient que les parenthèses doivent être mises en correspondance (lecture de colonne à gauche), et qu'il ne peut y avoir qu'une seule parenthèse par colonne. Autre que cela, c'est un langage assez facile à intégrer.
Assurez - vous
NUMERIC_OUTPUT
est fixé àFalse
si vous utilisez l'interpréteur Python.TRANSCRIPTION (tâche 2 / Bonjour tout le monde)
TRANSCRIPT est un esolang thématique basé sur la fiction interactive. Les lignes non reconnues par TRANSCRIPT sont ignorées, ce qui facilite leur intégration.
Tr is here.
déclare uneTr
variable chaîne et la deuxième ligne définit le contenu de la variable surHello, World!
.X Tr
(X
pour examiner) renvoie ensuite la chaîne.Bien que TRANSCRIPT soit très facile à intégrer, c’est un langage assez verbeux, j’ai donc fait en sorte que le défi soit le plus facile.
Fission (tâche 3 / message d'anniversaire)
qui imprime la première partie, lit l’entrée avec une petite boucle 2D, puis sort le point d’exclamation final. Le
R
signifie qu'un atome commence ici en se dirigeant vers la droite, ce qui est utile car ce programme peut être déplacé n'importe où.Rail (tâche 4 / onglets)
Comme la fission, le rail est un langage 2D qui présente l’avantage de pouvoir être déplacé n’importe où. L'exécution commence à partir
$
de lamain
fonction en direction du sud-est.Nous commençons par descendre le
\
s, tourner à gauche à-
, frapper[<tab>]
qui pousse un onglet.e<
puis branches basées sur EOF - si EOF, nous baissons et imprimons"I hate spaces!"
avant de nous arrêter, sinon nous remontons. Si nous nous dirigeons vers le haut, nous lisons le caractère suivant et le comparons à l'onglet, une fois encore, branche - si onglet, montez et imprimez"I love tabs!"
avant de vous arrêter, sinon tournez vers le bas et continuez la boucle de saisie.Ce programme est assez coûteux, mais depuis que TRANSCRIPT a pris Hello World, il était difficile de choisir une tâche appropriée pour Rail.
> <> (Tâche 6 / entrée croissante)
Imprime
1
si strictement ascendant,0
sinon.> <> est un autre langage 2D, et l’exécution commence en haut à gauche.
"..."
est le mode chaîne, poussant les caractères internes un par un. Après la première chaîne que nous avons frappée#
, qui reflète l’adresse IP vers la gauche, poussant plus de chaînes et enveloppant (> <> est toroïdal) avant de frapper\
, un miroir qui nous renvoie vers le haut.Au bas du programme se trouve
.91<
téléporteur(9, 1)
où se trouve le programme de base. Après que cela0[
supprime toute la malbouffe des chaînes,0
pousse un zéro pour représenter le dernier caractère lu, et après cela, il ne fait que lire les caractères un par un, en s'assurant que nous sommes toujours en train d'augmenter.Il est probablement préférable de réduire le programme principal plutôt que de se téléporter, mais je traiterai de cela plus tard si nécessaire.
Befunge (tâche 9 / ajout)
Testé avec l'interprète trouvé ici . Ceci est un programme assez simple, avec le début en poussant une chaîne inutile et
#
sautant par dessus l'espace. Après cela, c'est juste le programme de base&&+.@
.Labyrinth (Task 10 / Divmod by 7)
Commodément,
'
et"
sont PON à labyrinthe qui agissent comme un chemin praticable dans le labyrinthe. Je vais sauter la navigation en désordre, mais fondamentalement, il y a beaucoup de retournement et d'errance avant que nous ne?
commencions, le début du programme de base.Le programme n’est pas tout à fait à gauche pour tenir compte de Prelude (par exemple
?
lit l'entrée dans Prelude).Python 2 (tâche 14 / hexadécimal)
Les
xxx
s représentent des parties non pertinentes commentées par des chaînes ou des commentaires multilignes. Entre les deuxprint hex(input())
, le programme principal. Cette sortie avec un leader0x
, mais je suppose que ça va (sinon, c'est une solution facile quand même).La première ligne est une chaîne
"1\"# &&+.@\""
suivie de deux" "
lettres s. Ces trois chaînes sont concaténées par l'analyseur et laissées inutilisées (cette première ligne fonctionne de la même manière pour Ruby et Julia plus tard).GolfScript (tâche 15 / poids de Hamming)
La première ligne pousse trois chaînes et la deuxième ligne est un commentaire.
''''
pousse deux autres chaînes, puis<<
fait deux comparaisons (s
est ignoré). Enfin,""'("'
pousse deux autres chaînes.Tout cela est éliminé en l'enveloppant dans un tableau et en obtenant le premier élément (
]0=
), qui est l'entrée initialement sur la pile. Nous évaluons ensuite l’entrée avec~
, transformons-la en binaire avec2base
ensuite sommeons les bits avec{+}*
. La prochaine}
est inégalée et super commente le reste du programme.Julia (tâche 16, Fibonacci)
#=
commence un commentaire multiligne et=#
termine un commentaire multiligne. Le programme principal utilise l’exponentiation matricielle pour calculer les nombres de Fibonacci (extraits de Rosetta ).Ruby (cadre Task 17 / ASCII)
Ce programme suppose que l’entrée ne se termine pas par une nouvelle ligne.
Nous avons une chaîne inutile, un commentaire, une autre chaîne inutile, puis un hérédoc qui commente la majeure partie du programme. Après cela est le programme de base, suivi d'un
#
commentaire d' une seule ligne .CJam (tâche 19 / diamant)
Les deux chaînes d'espace à la fin de la première ligne doivent satisfaire CJam, puisqu'il
#=
s'agit de deux opérateurs binaires. Je n’entrerai pas dans les détails avec celui-ci, mais au fond, c’est un gâchis, le programme de base étant la simpleentre.
La différence entre GolfScript et CJam réside dans le fait que, dans CJam, un guillemet simple
'
ne commence ni ne termine les chaînes, mais place le caractère suivant dans la pile. Cela signifie que dans CJampousse a
(
puis commence une chaîne avec"
(dont le premier caractère est'
), alors que ce qui précède est juste une chaîne simple droite dans GolfScript.Essayez-le en ligne .
1>
est utilisé à la place de(
pour rendre compte de Prelude.Voici 12 langues, 373 octets . Certaines tâches ont été déplacées, TRANSCRIPT a été supprimé (cela a rendu Rail trop cher) et Scheme (poulet) a été ajouté. Ceci est juste mon terrain de golf pour les mises à jour à venir, car la mise à jour de la publication principale prend une éternité.
Je pourrais économiser quelques octets pour Julia car les commentaires multilignes non terminés génèrent une erreur dans STDERR.
la source
;)
je vais tergiverser et je ne change rien dans ma réponse, à cause de la longue description. lol78910 langues,398431447507 octetsC’est probablement le maximum que je puisse intégrer dans la solution actuelle.
La dernière ligne contient du code Whitespace codé pour que SE ne le mange pas. Pour exécuter le code, remplacez-les tous
S
par des espaces,T
des tabulations etN
des nouvelles lignes.C89, tâche 16
Voici ce que voit le compilateur:
Tout le reste est dépouillé sous forme de commentaires ou dans le
#if 0
.C ++, tâche 14
J'ai utilisé une astuce volée d' ici pour faire la différence entre C89 et C ++.
Lua, tâche 2
Voici la structure de base.
Brainfuck, tâche 1
Je devais juste m'assurer qu'aucune boucle infinie ni aucun parasite ne
.,
soient trouvés. Les commentaires multilignes de Lua font également double emploi avec les commentaires de BF. En dehors des 2 premiers caractères, tout est une grande boucle NOP.Python, tâche 6
Encore une fois, j'utilise des fonctionnalités spécifiques à une langue pour NOP ou commenter l'autre code.
Pyth, tâche 17
Pyth est bien pour cette chose. Il prend le premier
#
comme unewhile True:
boucle qui se ferme silencieusement en cas d'erreur . Donc, je fais juste du code une chaîne (pour éviter de;
mettre fin à la boucle plus tôt), puis finissez juste la boucle, quittez-en une autre créée par le commentaire Python et faites la tâche. Voici le avec toutes les chaînes non vides remplacées par" string "
, cela reste fonctionnellement équivalent:> <>, tâche 3
Celui-ci est très intéressant. L'exécution rebondit dans le code, en utilisant des sauts si nécessaire pour contourner les obstacles. Les parties pertinentes:
Étoilé , tâche 9
Ici, je devais commencer à entrer dans les langues "éliminer tous les caractères sauf". Tout ce qui a été enlevé, ça ressemble à:
Le code saute la majeure partie de la ponctuation d'un saut pour éviter les moments difficiles, en utilisant simplement le début et la fin du code. Le code est fonctionnellement équivalent à
Befunge-98, tâche 10
Fonctionne de la même manière que le> <> un. Heureusement,
#
est un miroir dans> <> et un saut dans Befunge, afin que nous puissions mettre en œuvre un comportement différent. Aussi0/0 == 0
.Espace blanc , tâche 13
C’était la dernière chose à laquelle j’ai eu ma place. Les premières lignes ne font que placer des zéros sur la pile, car ils ne contiennent que des espaces et des nouvelles lignes à partir du code "normal". Le code est codé. remplacez tout
S
par un espace,T
des onglets etN
des nouvelles lignes.la source
17 versions différentes de Pip, 383 octets (invalide)
Alors que cette question était posée dans un bac à sable, j'ai passé au peigne fin toutes les révisions de mon langage, Pip. et trouvé un polyglotte en utilisant 17. Malheureusement, les règles de défi interdisent les versions du même langage, mais avec la permission de Dennis et un avertissement, je publie mon travail de toute façon.
Le code brut
La stratégie
Dans Pip, les lettres minuscules sont des variables. Les lettres majuscules sont plus compliquées: elles sont divisées en deux ou trois caractères au maximum, qui peuvent être des opérateurs ou des variables. Si un jeton en majuscule n'est pas spécifiquement défini en tant que variable ou opérateur, il est supposé être une variable non définie, dont la valeur est égale à zéro.
Donc, pour distinguer deux versions de Pip, il me suffit de trouver un opérateur variable ou alphabétique ajouté dans la plus récente des deux. Dans l'ancien, ce sera nul à la place. Le code
v:uIN[...]
constitue une grande liste contenant l'une de ces vérifications pour chaque version que je veux tester, recherche le nombre de nils présents dans cette liste (lau
variable est explicitement initialisée sur nil) et stocke le nombre dansv
(pour "version"). .Après d’autres calculs, une autre grande liste calcule les résultats de 17 tâches du défi et en utilise une
v
pour en choisir une version.Versions et tâches
0.15.09.04
Diagnostic:
(oTM0,0i)
(correction d'un bug avec l' opérateurT
riM
où le rognage de 0 caractères à chaque extrémité d'une chaîne donnait la chaîne vide à la place; l'indexation dans une chaîne vide donnait nil)Tâche 18:
Iv<2W##YqlPBy
(configuration: lisez toutes les lignes de stdin siv
est inférieur à 2) suivies de((J_M ZRVl)|0)Jn
(liste inversée de lignes, transposée et jointe dans une chaîne)0.15.08.06
Diagnostic:
EN1
(ajout d'EN
un opérateur)Tâche 1:
Iv<2W##YqlPBy
(même code d’installation que ci-dessus) suivi del?lJnl
(rejoindre les nouvelles lignes)0.15.08.03
Diagnostic:
1N1
(ajouté enN
tant que version abrégée de l'IN
opérateur)Tâche 20:
c:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0
(configuration: générer une liste contenant les moitiés supérieure et inférieure de l’échiquier et la stocker dansc
) suivie decJn
(rejoindre sur la nouvelle ligne)0.15.08.01
Diagnostic:
Y1
(ajoutéY
opérateur ank)Tâche 19:
Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}
(configuration: siv
3, construire la moitié supérieure du losange dansd
) suivie ded.n.RVd
(inverser pour la moitié inférieure et rejoindre sur une nouvelle ligne)0.15.06.19
Diagnostic:
RCk
(ajoutéR
AndomC
opérateur hoix)Tâche 17:
m:'+.'-X#a+2.'+.n."| "
(configuration: construire une+----+\n|
chaîne dansm
) suivie dem.a.RVm
(insérer les entréesm
et les inverser dansm
)0.15.06.12
Diagnostic:
k
(k
variable initialisée à", "
; auparavant, elle était indéfinie et donc nulle)Tâche 16:
Iv=5La{i+:oSio}
(siv
5, indiquez le nombre de Fibonacci dansi
) suivi dei
0.15.06.08 (note: le numéro de version n'a pas été changé avant la validation suivante)
Diagnostic:
w
(w
variable initialisée à`\s+`
)Tâche 15:
h:$+TBa
(convertir l’entrée en chiffres binaires et en somme; enregistrer le résultath
pour la tâche 12 ultérieurement)0.15.05.29
Diagnostique:
(hR`1.+0``&2o`)@>3@AB0
Cette version a été ajoutée
&
comme motif de remplacement pour toute la chaîne correspondante dans un remplacement de regex (inspiré de sed). Le code ci-dessus prendh
(100
) et le remplace par`&2o`
(c'est-"1002o"
à- dire dans les versions les plus récentes mais simplement"&2o"
dans les versions plus anciennes). Il coupe ensuite tous les caractères après le troisième ("2o"
dans les versions plus récentes,""
dans les versions plus anciennes) et tente d'indexer dans cette chaîne. L'indexation dans une chaîne vide donne nil.Tâche 7:
j:ak:b
(setup: copie les vars locauxa
,b
en vars globauxj
,k
afin qu’ils soient disponibles dans une fonction) suivi de({j@aEQk}FI0,#a).s
(filtre pour les index dansa
lesquels le caractère correspondant est égal àb
, et rejoindre l’espace)0.15.05.26
Diagnostic:
`u`
(type de motif ajouté; dans les versions précédentes, les backticks étaient ignorés en tant que caractères non reconnus et l'expression évaluée était égale àu
zéro)Tâche 14:
aTB16
(convertiT
oB
ase 16)0.15.05.24
Diagnostic:
rZ4
(r
variable spéciale créée qui renvoie une valeur aléatoire entre 0 et 1 chaque fois qu'elle est référencée; auparavant, elle était indéfinie et donc l'expression évaluée à nil)Tâche 13:
a>b?ab
(expression ternaire)0.15.05.12
Diagnostic:
rZ4
(Z
opérateur IP ajouté )Tâche 12:
h=1
(la somme des bits de la tâche 15 doit être égale à 1)0.15.05.11
Diagnostic:
AB6
(AB
opérateur de valeur de soluté ajouté )Tâche 11:
Pv=11?a>1&0INa%(2,a)[...]@v
(siv
est1
égal à 11, sortie si entrée supérieure à 1 et divisée exactement0
par un nombre inférieur, sinon; siv
rien d'autre, utilisez-lav
comme un index de la liste pour décider du contenu à afficher)0.15.05.02
Diagnostic:
({a}V7)
(V
opérateur ajouté ; quandV
était indéfini, ceci envoyait les arguments nil et 7 à une fonction{a}
qui retourne son premier argument)Tâche 10:
a//7.s.a%7
(entrée int divisée par 7 et mod 7, séparée par des espaces)0.15.04.26
Diagnostic:
BN8
(ajoutéB
itwiseN
opérateur egation)Tâche 9:
a+b
0.15.04.23
Diagnostic:
AZ
(AZ
variable initialisée en alphabet majuscule)Tâche 5:
bINa
(IN
donne le nombre d’occurrences)0.15.04.20
Diagnostic:
m@0:0
suivi de9@m
La
m
variable est préinitialisée à 1000. Dans cette validation, l'@
opérateur était corrigé pour renvoyer des valeurs. auparavant, assigner àm@0
donnait un avertissement et ne faisait rien. Ainsi, après la correction de bugs, la première instruction définitm
sur0000
, qui est un index légal pour9
; pré-bugfix,m
séjours1000
, ce qui est un index juridique. (Les indices n'étaient pas encore cycliques.)Tâche 3:
"Happy Birthday, ".a.'!
0.15.04.18
Tous les diagnostics précédents entraînent l'ajout de zéro à la liste de diagnostics.
Tâche 2:
"Hello, World!"
La plupart des autres codes sont des modifications que j'ai dû faire pour éviter des erreurs dans diverses versions. Ce message est déjà beaucoup trop long, donc si vous voulez savoir quelque chose que je n'ai pas expliqué, passons à la discussion sur le forum des langues ésotériques .
la source
6 langues, 226 octets (229 selon l'
\x1b
acceptation!)Donc, je ne pense pas avoir fait le meilleur choix de langues et j'imagine que ce n'est pas particulièrement compétitif, mais j'ai néanmoins trouvé le défi intéressant! Globalement, peu de défis sont complets, mais je pourrais probablement faire un défi dans les espaces ou quelque chose de similaire, mais voici ce que j’ai eu jusqu’à présent:
1. Brainfuck
Testé sur http://copy.sh/brainfuck/ et http://brainfuck.tk/ .
Après avoir supprimé tous les caractères ignorés, le programme ci-dessus est tout ce qui nous reste, à savoir l'exemple de programme cat avec quelques boucles vides supplémentaires pour contourner l'utilisation des symboles dans d'autres langues.
2. rubis
Usage:
Ce qui précède est le code une fois tous les commentaires supprimés. La première ligne est tout à fait inutile dans Ruby que nous définissons quelques expressions régulières pour contenir le Befunge-93 et le code brainfuck, nous créons un tableau pour contenir
Hello
etWorld
et l' imprimer en utilisantprintf
(pour ajouter le,
et!
).3. Perl
Usage:
Très similaire à Ruby, sauf que puisque nous stockons une référence de tableau dans
$a
, lorsque nous essayons d'accéder à$a[0]
celle-ci, elle est vide, nous pouvons donc la remplacer par le texte du défi 3,Happy Birthday
etpop
(qui montre le dernier argument du programme de ligne de commande ).4. JavaScript
Utilisation: coller dans la console du navigateur et exécuter.
Comme Ruby et Perl, la première ligne crée essentiellement des
RegExp
objets inutiles . Nous stockons ensuite un tableau inutile$a
et instancions deux chaînes inutiles, l'une contenant le code Ruby / Perl et l'autre contenant un retour à la ligne et un#
, puis nousprompt()
en saisissonsalert()
le résultat attendu. par la plupart des humains pour le défi 4. Nous finissons avec un autreRegExp
objet inutile pour fermer la boucle de brainfuck.9. Befunge-93
Testé sur http://www.quirkster.com/iano/js/befunge.html .
Si je comprends bien,
/
divise la pile et affiche le résultat qui n’a pas d’effet pervers sauf si on appuieNaN
sur le site ci-dessus,&
demande l’entrée d’un nombre entier pour que nous puissions lire les deux nombres requis par le défi 9 dans la pile,#
ce qui nous permet d’éviter le[
qui est là pour brainfuck,+
puis ajoute les deux premiers nombres sur la pile, les.
sort,#]
pour brainfuck encore et@
sort.13. PHP (en cours d'exécution dans Bash)
Usage:
En PHP, tout ce qui n’est pas inclus dans les
<?
balises est sorti textuellement, ce qui donne le code Befunge-93 et le code brainfuck. Nous avons doncdie()
immédiatement dans le code, généré un écran clair (\x1bc
) puis lemax()
des deux premiers arguments.la source
the first character in the first string literal is the byte ASCII 27
); Votre score est 226..match'\x09'
(où sont les "sont") peut-être que je verrai si je peux en ajouter plus à un moment donné!6 langues,
450404 octetsbash, brainfuck, C, gawk4, JavaScript et Minimal-2D
Mise à jour: Golfé un peu. Vous ne savez toujours pas quoi ajouter, et je ne sais pas comment les membres en concurrence penseraient à mon utilisation de leur langue pour différentes tâches. Essayer d'expliquer l'algorithme de brainfuck.
Eh bien, c’est / était ma première expérience polyglotte, j’ai donc dû tout apprendre à partir de rien. Commencer par awk n’était pas l’idée la plus intelligente à mon avis, car c’est relativement impitoyable. Comme le nombre de tâches terminées est pertinent, j'ai commencé par les tâches les plus faciles. Je ne sais pas si c'était un geste intelligent. Ce n’est pas vraiment une question de golf, car j’avais assez de mal à faire travailler ces six personnes ensemble, mais j’ai fait tout ce que je pouvais pour rester bref.
Voici les langues et ce qu'elles font dans l'ordre alphabétique. Je vais montrer un moyen facile de les tester tous plus bas. Certains de ces éléments pouvant être spécifiques à une version, je vous donnerai les numéros de version des outils que j'ai utilisés.
bash, tâche 3
Eh bien, il est évident que j'ai utilisé sed. J'ai essayé de mettre un script sed dans ceci, mais je ne pouvais pas le faire fonctionner, alors je suis parti sur la voie bash. La façon dont je l'ai dit, c'est dans un commentaire C et awk l'évalue
False
.sed --version
donnesed (GNU sed) 4.2.2
bash --version
donneGNU bash, Version 4.3.30(1)-release (x86_64-pc-linux-gnu)
Donc, la partie sed se résume à
Il regroupe l'entrée, la colle dans une nouvelle chaîne et imprime le résultat. Trucs assez communs.
brainfuck, tâche 20
Eh bien, il est toujours facile de se cacher, je suppose. Une ligne commençant par
#//
est ignorée par C et awk. Ou au moins ils peuvent vivre avec des ordures derrière cela.bf
donnebf - a Brainfuck interpreter version 20041219
C'est le code condensé. La première ligne n'est que la corbeille des autres langues.
Je vais essayer d'expliquer comment ça marche
cela arrange la bande et le pointeur sur cette
la cellule contenant 8 est le compteur global de la boucle suivante
, le nombre de fois que 3 lignes identiques sont imprimées
définit
C1
à 3, le nombre de lignes identiquesdéfinit
C2
à 4 le nombre de "....@@@@
" dans une ligne (au début)imprime une ligne complète décrémentant
C2
dans le processusquand
C2
est égal à zéro, il affiche une nouvelle ligne et décrémenteC1
.si
C1
est zéro la magie se produitle 46 est déplacé derrière le 64
le 10 et le compteur global sont déplacés un vers la droite
alors le compteur global est décrémenté
s'il est zéro, le programme quitte
C, tâche 2
J'épuise chaque dernière capacité de C ici en imprimant "Hello, World!". Eh bien, quelqu'un devait faire le travail ...
gcc --version
donnegcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2
Le code C actuel
Le
#define func
est de faire awk d'accord avec cela. Il pense que c'est une fonction awk. L'abréviation de func est une fonctionnalité gawk.gawk4, tâche 18
Depuis que j’ai utilisé awk pour à peu près tout ici, j’ai décidé qu’il devait en être ainsi.
awk --version
donneGNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
awk voit ça
Les modèles de recherche, y compris
\t
évaluer àfalse
. J'ai choisi l'onglet ici, parce que je pense que ça ne peut pas être dans l'entrée.sed
évalue àfalse
."the string"&&0
évalue à faux. La fonction est d'accord. Le programme est exécuté si un motif vide correspond, quelle que soit l'entrée.Ça fait ça
Contribution
Sortie
Vous devez vous assurer que toutes les lignes d'entrée ont la même longueur. Utilisez des espaces pour les remplir.
JavaScript, tâche 9
Je ne sais pas si c'est légitime, parce que c'était trop facile. Si vous attribuez au fichier de programme une fin HTML et que vous l'ouvrez dans un navigateur (j'ai utilisé Firefox 40.0.3 et chrome 45.0.2454.85), il vous invite à saisir une information. Vous devez entrer deux nombres séparés par un espace et cela alertera la somme de ceux-ci.
Minimal-2D , tâche 1
C'était assez facile à intégrer dans les lignes de commentaires. J'ai utilisé l'interprète , qui s'exécute en python, pour tester cela. Il imprime l'entrée dans la sortie. Le programme ressemble à ceci
RUDL sont à droite, en haut, en bas et à gauche. Alors ça commence à aller droit, lit un caractère de stdin en mémoire et en ajoute un. La barre oblique ignore la commande suivante si la mémoire a la valeur 0. Ceci met fin à cela. Si un caractère de valeur -1 est lu, la saisie est terminée. Donc, si -1 est lu, il saute le D et se termine. Si quelque chose d’autre est lu, il descendra à gauche, ajoutera le 1 dans la mémoire et imprimera le caractère sur la sortie standard. Ensuite, il monte à gauche et recommence.
Essai
Déni de responsabilité: je ne prendrai aucune responsabilité pour les dommages que vous causeriez à votre système avec cela.
En supposant que vous ayez bash & co, gawk (au moins la version 4, car elle utilise des tableaux multidimensionnels), gcc, python, bf en tant qu’interprète cérébral et que Firefox est installé.
Pour simplifier, copiez la source du programme dans un fichier nommé
cluster.html
. Rendre ce fichier exécutable pour la tâche bash. Copiez et collez l' interpréteur de Minimal-2d dans un fichier nomméminimal2D.py
dans le même répertoire. Ensuite, copiez et collez le script suivant dans un fichier de script et placez-le dans le même répertoire, rendez-le exécutable et exécutez-le. Si vous lisez ceci, vous n'aurez probablement pas besoin de beaucoup d'explications et vous pourrez le faire fonctionner de toute façon.Vous y trouverez également la commande permettant d'exécuter les tests individuellement.
S'amuser!
la source