var QUESTION_ID=188988;
var OVERRIDE_USER=53748;
var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;function answersUrl(d){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+d+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(d,e){return"https://api.stackexchange.com/2.2/answers/"+e.join(";")+"/comments?page="+d+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(d){answers.push.apply(answers,d.items),answers_hash=[],answer_ids=[],d.items.forEach(function(e){e.comments=[];var f=+e.share_link.match(/\d+/);answer_ids.push(f),answers_hash[f]=e}),d.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(d){d.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),d.has_more?getComments():more_answers?getAnswers():process()}})}getAnswers();var SCORE_REG=function(){var d=String.raw`h\d`,e=String.raw`\-?\d+\.?\d*`,f=String.raw`[^\n<>]*`,g=String.raw`<s>${f}</s>|<strike>${f}</strike>|<del>${f}</del>`,h=String.raw`[^\n\d<>]*`,j=String.raw`<[^\n<>]+>`;return new RegExp(String.raw`<${d}>`+String.raw`\s*([^\n,]*[^\s,]),.*?`+String.raw`(${e})`+String.raw`(?=`+String.raw`${h}`+String.raw`(?:(?:${g}|${j})${h})*`+String.raw`</${d}>`+String.raw`)`)}(),OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(d){return d.owner.display_name}function process(){var d=[];answers.forEach(function(n){var o=n.body;n.comments.forEach(function(q){OVERRIDE_REG.test(q.body)&&(o="<h1>"+q.body.replace(OVERRIDE_REG,"")+"</h1>")});var p=o.match(SCORE_REG);p&&d.push({user:getAuthorName(n),size:+p[2],language:p[1],link:n.share_link})}),d.sort(function(n,o){var p=n.size,q=o.size;return p-q});var e={},f=1,g=null,h=1;d.forEach(function(n){n.size!=g&&(h=f),g=n.size,++f;var o=jQuery("#answer-template").html();o=o.replace("{{PLACE}}",h+".").replace("{{NAME}}",n.user).replace("{{LANGUAGE}}",n.language).replace("{{SIZE}}",n.size).replace("{{LINK}}",n.link),o=jQuery(o),jQuery("#answers").append(o);var p=n.language;p=jQuery("<i>"+n.language+"</i>").text().toLowerCase(),e[p]=e[p]||{lang:n.language,user:n.user,size:n.size,link:n.link,uniq:p}});var j=[];for(var k in e)e.hasOwnProperty(k)&&j.push(e[k]);j.sort(function(n,o){return n.uniq>o.uniq?1:n.uniq<o.uniq?-1:0});for(var l=0;l<j.length;++l){var m=jQuery("#language-template").html(),k=j[l];m=m.replace("{{LANGUAGE}}",k.lang).replace("{{NAME}}",k.user).replace("{{SIZE}}",k.size).replace("{{LINK}}",k.link),m=jQuery(m),jQuery("#languages").append(m)}}
body{text-align:left!important}#answer-list{padding:10px;float:left}#language-list{padding:10px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/codegolf/primary.css?v=f52df912b654"> <div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table>
void foo(char *c, size_t len)
est légal de prendre un tampon d'entrée / sortie et une longueur, et n'a pas de valeur de retour, juste un effet secondaire sur l'objet pour lequel il a un pointeur.Réponses:
Malbolge , 20775 et 2334 octets
Je n'ai probablement battu personne avec, mais c'était incroyablement amusant à faire.
Essayez-le en ligne!
Si le défi n’a pas nécessité d’être interrompu à un moment donné (p. Ex. Eof), il devient plutôt trivial, attribuer 2334 octets :
Essayez-le en ligne!
Explication
On m'a demandé d'expliquer le fonctionnement du programme. Je vais aborder le second car il est beaucoup plus facile de l'expliquer que le premier, mais la façon dont ces deux méthodes fonctionnent est très similaire.
Commençons par décrypter le code. Comme quelqu'un dans les commentaires l'a fait avant que je commence à travailler sur l'explication, je vous conseille donc vivement de vérifier.
Cela ne facilite pas la lecture du programme, mais avant de passer directement au code, examinons les bases de Malbolge.
La machine virtuelle est basée sur trits ( tri chiffres nary s ). Chaque mot machine a une largeur de dix bits, ce qui le situe entre 0 et 2222222222t (= 59048d). Chaque position de la mémoire contient un mot machine; les adresses ont aussi un mot machine. Les données et le code partagent le même espace mémoire.
Il y a trois registres, chacun contenant un mot machine, initialement 0: le registre de code C qui est un pointeur sur l'instruction sur le point d'être exécutée, le registre de données D utilisé pour la manipulation de données et l'accumulateur A également utilisé par plusieurs instructions pour manipuler des données.
Si l'instruction à exécuter ne se situe pas dans la plage 33-126, l'exécution s'arrête (l'interpréteur de référence se bloque dans ce cas en raison d'un bogue). Sinon, afin de déterminer l'instruction à exécuter, la valeur indiquée par le registre C est ajoutée au registre C lui-même et le résultat est divisé par 94, le reste étant alors réparti.
Voici un tableau de toutes les instructions possibles.
Maintenant que le code est plus compréhensible et qu’il est en fait possible de dire ce qui se passe là-bas, nous pouvons passer à l’idée générale de ce qui se passe là-bas.
Sans aucun saut, programmer Malbolge est assez trivial. Lorsque les sauts sont utilisés, il est nécessaire d'effectuer une tâche de décryptage avant d'exécuter à nouveau ce code. Chaque fois qu'une instruction est exécutée, elle est directement encryptée, elle ne se comporte donc pas comme avant.
Pour illustrer cette solution de contournement, examinons le programme de chat normalisé de Malbolge:
Donc , comme vous pouvez le voir, sur la deuxième ligne que nous avons
/
et<
instructions traitant des choses I / O. En utilisant le fait queC
register est le pointeur d'instruction, nous pouvons le modifier en utilisant l'i
instruction pour créer efficacement une branche. Avant que la branche ne se produise, nous devons toutefois déchiffrer les instructions qui se trouvent à quelques cycles de la lecture et de l’écriture de la sortie vers et depuis le TTY, combinées avec un saut. Comme il n’existe aucun moyen réel de stocker efficacement les constantes, nous devons intégrer de nombreuses instructions non liées et utiliser leur valeur pour calculer les autres constantes nécessaires (en utilisant le fait que Malbolge ne sépare pas le programme et les données).Remarque: Certaines parties de cette réponse sont extraites de la page Esolang wiki Malbolge sous licence CC0 - link .
Peut-être voudrez-vous vérifier mon autre réponse avec Seed
la source
brainfuck , 6 octets
Essayez-le en ligne!
Pour une fois, une réponse vraiment compétitive en brainfuck. :-) Il lit simplement à partir de l'entrée standard (
,
), puis boucle pendant que le caractère lu n'est pas zéro ([
), écrit le caractère lu deux fois (..
) et lit enfin un nouveau caractère (,
) avant de revenir au début de la boucle (]
)Réponse alternative à 6 octets:
Essayez-le en ligne!
la source
Semence ,
60133942388438653848 octetsEssayez-le en ligne!
la source
Gelée , 1 octet
Programme complet.
Essayez-le en ligne!
la source
Ḥ
ż`F
), alors que le mien ne peut pas le croire)Shakespeare Programming Language ,
139129109106 octets-3 octets grâce à Jo King
Essayez-le en ligne!
Spews avertissements et se termine avec une erreur. Faites avec.
la source
Haskell ,
151413 octetsEssayez-le en ligne!
ou lisiblement:
Explication: Les listes sont
Monad
en Haskell et l'utilisation de l'opérateur de liaison>>=
est unconcatMap
, en exécutant une fonction qui prend un élément et renvoie une liste sur chaque élément de la liste, puis concatène les listes résultantes en une grande liste.Maintenant , nous avons juste à construire une fonction qui, étant donné une valeur, retourne une liste double de cette valeur, ce qui est accompli par
(<$"dd")
, qui peut être lu comme « Prenez la liste['d','d']
et de remplacer tous les éléments avec l'argument de cette fonction. Le"dd"
pourrait être toute expression qui aboutit à une liste d’exactement deux éléments, mais c’est le plus court possible.la source
<$
était quelque chose que je n'aurais jamais pensé05AB1E , 2 octets
Ok, j'abandonne. Je suis incapable de trouver un 1-byter pour résoudre ceci. Charges de 2-byters, cependant ..
Essayez en
ø˜
ligne ou essayez enøS
ligne .Essayez en
ζ˜
ligne ou essayez enζS
ligne .Essayez en
€D
ligne ou essayez en€Â
ligne .Essayez en
.ι
ligne.Essayez en
ºS
ligne.Essayez en
·S
ligne ou essayez enxS
ligne .Essayez en
+S
ligne.I / O en tant que liste de caractères.
Explication:
Le seul programme qui fonctionne de la même manière dans les deux versions de 05AB1E. :)
Cette version fonctionne fondamentalement de la même manière que celle ci-dessus pour la nouvelle version. Dans l'ancienne version, vous auriez d'abord besoin d'une paire explicite
‚
, puis vous pourrez le compresser / le transposer. Justeζ
sur une liste 1D sera un no-op dans la version héritée de 05AB1E.Dans la nouvelle version de 05AB1E, toutes les valeurs de la pile sont conservées dans la liste obtenue lors de la création d'une carte. Alors qu'avec la version héritée de 05AB1E, il ne conserverait que la valeur maximale. C'est pourquoi ils ne fonctionnent que dans la nouvelle version.
Cette version intégrée ne figurait pas encore dans la version héritée de 05AB1E.
Dans la version héritée de 05AB1E, le miroir horizontal intégré serait à la
∞
place deº
. Cependant,∞S
cela ne fonctionne pas dans la version héritée, car la liste serait convertie implicitement en une chaîne délimitée par une nouvelle ligne avant de la refléter complètement ( Essayez-le ici ), après quoi elleS
inclurait également ces nouvelles lignes.Double est l'abréviation de
2*
. Dans la nouvelle version de 05AB1E, intégrée à Elixir, cela ne fonctionne que sur des valeurs numériques. L'ancienne version de 05AB1E a été construite en Python, donc2*
fonctionne de manière similaire et répète le caractère.Encore une fois, étant donné que la version héritée de 05AB1E a été construite en Python, il en
"a"+"a"
résulte un résultat inégalé"aa"
, alors que l' option+
ne peut pas être utilisée pour ajouter des chaînes dans la nouvelle version. (PS: Il existe une annexe pour les chaînes qui fonctionne dans les deux versions, ce qui est le cas«
, mais lorsque deux arguments de liste sont fournis, ils sont concaténés au lieu de fusionner chaque chaîne aux mêmes index que le programme ci-dessus ( essayez-le ici ).)la source
ζ˜
pour le 05AB1E moderne.ø˜
, alors je n'ai pas pris la peine de l'ajouter aussi. Je l'ai ajouté (ainsi queøS
/ζS
/xS
).Plan de pyramide ,
229 218213 octetsEssayez-le en ligne!
Cela peut certainement être plus court. La saisie s'effectue via des arguments en ligne de commande. Cela équivaut à:
Avec quelques mises en garde, comme l'impression réellement gérée à la fois dans l'état de la boucle et dans le corps de la boucle.
Alternative 215 byter:
Essayez-le en ligne!
la source
set
peut être déplacé vers le haut et à gauche sans interférer avec quoi que ce soit. Essayez-le en ligne!Gelée , 1 octet
Un programme complet imprimant le résultat.
Essayez-le en ligne!
Comment?
Utilise une fonctionnalité de
bogue...Le "double" atome de Jelly,
Ḥ
est implémenté avec Python*
et vectorisé, tandis que les listes de caractères de Jelly (ses seules "chaînes") sont implémentées sous forme de listes de chaînes Python qui ne comportent généralement qu'un seul caractère - c'est-à-dire jusqu'à ce qu'on se rende compte qu'en Python'blah'*2='blahblah'
...la source
ḤṾV
$ echo -n "Ḥ" | hexdump -C
<00000000 e1 b8 a4 |...|
af
,Ḥ
est juste une représentation visuelle de cet octet, voir Jelly page de code (également lié à l' en- tête du poste).Gelée, 1 octet
Essayez-le en ligne!
Pardon mon inexpérience, je commence juste avec Jelly. Je pense que ce qui se passe, c’est que nous ayons défini une chaîne dyadique, qui traite un seul argument comme un argument à la fois gauche et droit. Dans ce cas, la chaîne consiste en "zip; entrelacez x et y", entrelacez la chaîne d'entrée avec elle-même.
Quelqu'un a déjà posté une solution Jelly à 1 octet, alors j'espère que ce n'est pas une mauvaise façon de poster le mien.
la source
Python,
3425 octetsEssayez-le en ligne! Un autre qui retourne une chaîne au lieu d’une liste de caractères:
Essayez-le en ligne!
la source
lambda i:sum(zip(i,i),())
devrait faire pour -9.for i in input():print(i,end=i)
lambda i:''.join(c*2 for c in i)
32 octets mais renvoie une chaîne et non une listelambda i:''.join(c*2for c in i)
PowerShell ,
292321 octets-6 octets grâce à Andrei Odegov
-2 octets grâce à mazzy
Essayez-le en ligne!
Accepte les éclaboussures, ce qui en fait essentiellement un tableau de caractères
la source
8088 Assembly, IBM PC DOS,
1610 octetsxxd
Dump d' octets assembléListe non assemblée:
Exécutable DOS autonome pour PC. Entrée de
STDIN
, sortie vers la console.Entrée de console interactive:
Entrée par pipe:
Réponse d' origine sur 16 octets :
xxd
Dump d' octets assembléListe non assemblée:
Exécutable DOS autonome pour PC. Entrée via la ligne de commande, sortie vers la console.
la source
LODSW
de placer le premier espace (20H
)81H
dansAH
lequel gâchera bien sûr leLOOP
si c'est dansCH
... Bummer.sed ,
108 octetsEssayez-le en ligne!
Merci à @manatwork pour -2 octets.
la source
s/./&&/g
.JavaScript (Node.js) , 22 octets
Prend les entrées sous forme de tableau de caractères.
Essayez-le en ligne!
JavaScript (ES6), 26 octets
Prend l'entrée sous forme de chaîne.
Essayez-le en ligne!
Version alternative proposée par @PabloLozano:
Essayez-le en ligne!
Le faire de manière récursive est tout aussi long:
Essayez-le en ligne!
la source
s=>s.replace(/./gs,c=>c+c)
de sorte que cela.
corresponde également aux nouvelles lignesjoin('')
devrait prendre soin de cela. À la réflexion, cela peut augmenter la sortie d'une manière non standard, de sorte que cela peut ne pas être valide.["aa","bb","cc"]
est une liste de chaînes cependant, ni une chaîne ni une liste de caractères de lui-même. Ajouter une jointure ou l'aplatir à une liste de caractères est valide, mais doit être compté dans le nombre d'octets.Haskell , 8 octets
Essayez-le en ligne!
Toute chaîne de deux caractères fonctionne à la place de
"x2"
.la source
Brachylog , 2 octets
Essayez-le en ligne!
Explication
la source
Befunge-98 (PyFunge) , 6 octets
Essayez-le en ligne!
la source
C (gcc) , 40 octets
Essayez-le en ligne!
Suppose
t
que la mémoire tampon est suffisamment grande pour stocker la sortie.Probablement pas conforme à la norme, mais cela fonctionne sur TIO.
la source
J ,
63 octets-3 octets grâce à Richard Donovan
Essayez-le en ligne!
K (oK) ,
84 octets-4 octets grâce à ngn!
Essayez-le en ligne!
la source
{2}#
APL (dzaima / APL) , 2 octets SBCS
Fonction de préfixe tacite anonyme.
Essayez-le en ligne!
⌿
est "répliquer" :-)la source
Haskell , 15 octets
Ici,
(:)<*>pure
prend un argument et retourne une liste contenant cet argument deux fois. Puis>>=
mappe cette fonction sur chaque entrée d'une liste d'entrée (qui est une chaîne dans notre cas) et aplatit le résultat (une liste de listes) en une liste.Essayez-le en ligne!
la source
Rouille ,
8346 octetsEssayez-le en ligne!
Je n'aime pas ça, mais ce n'est pas de la triche .
la source
Labyrinthe , 12 octets
Essayez-le en ligne!
Je viens de découvrir cette langue, donc cette réponse peut être sensiblement améliorée ...
la source
","
au lieu de"",
), j'ai réussi un onze maintenant - pourrait-il y en avoir dix ou mieux?Stax , 2 octets
Exécutez et déboguez-le sur staxlang.xyz!
Copie. Zip *: français. Impression implicite.
la source
R ,
5033 octets-17 octets grâce à Giuseppe
Essayez-le en ligne!
la source
gsub('(.)','\\1\\1',a)
?gsub
remplacement des expressions régulières remplace une correspondance de caractère unique(.)
dans le groupe de capture 1 par deux copies du groupe de capture 1\\1\\1
, pour toutes les correspondances possibles, par opposition àsub
une seule.Rétine , 4 octets
Essayez-le en ligne!
Correspond à la chaîne vide (c'est-à-dire la position avant / après chaque caractère) et insère la chaîne entre cette correspondance et la correspondance précédente (qui est toujours exactement le caractère précédent; sauf pour la première correspondance où elle ne fait rien).
la source
Java 8, 27 octets
Essayez-le en ligne.
Les 31 anciens octets répondent avant que les règles ne soient modifiées:
NOTE: La suggestion de @EmbodimentOfIgnorance (
\n|.
au lieu de(?s).
a été annulée, car elle échoue si l'entrée contient\r
. Merci d'avoir signalé à @ OlivierGrégoire .Essayez-le en ligne.
Explication:
Explication regex:
la source
(?s).
peut être remplacé par\n|.
\n|.
version ne fonctionne pas correctement avec l'entrée"\r"
. La(?s).
version fonctionne correctement avec\r
, cependant.\n
c'est imprimable mais ne fait pas partie de la plage imprimable ASCII.Pyth , 2 octets
Essayez-le en ligne!
.i
nligne deux copies de l’entrée ensemble. L'entrée est implicite, donc une version «complète» de ce programme serait.iQQ
, oùQ
est l'entrée du programme.la source
MarioLANG ,
23 2017 octetsEssayez-le en ligne!
Contrairement à brainfuck, MarioLANG renvoie -1 sur EOF. Nous devons donc incrémenter la valeur lue avant de la comparer à zéro, puis la décrémenter avant de l’imprimer. C'est probablement la réponse la plus courte possible dans MarioLANG.
la source