Exigences:
- Effectuez une entrée sur stdin, y compris les nouvelles lignes / retours à la chaîne de longueur illimitée (limitée uniquement par la mémoire système, c’est-à-dire qu’il n’ya pas de limite inhérente dans le programme.)
- Sortie l'inverse de l'entrée sur stdout.
Exemple:
Contribution:
Quick brown fox
He jumped over the lazy dog
Sortie:
god yzal eht revo depmuj eH
xof nworb kciuQ
Le plus court gagne.
Classement:
var QUESTION_ID=242,OVERRIDE_USER=61563;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.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(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;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="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <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><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><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
strrev
ƃop ʎzɐʃ ǝɥʇ ɹǝʌo pǝdɯnɾ ǝH
xoɟ uʍoɹq ʞɔınΌ
;-PRéponses:
Golfscript - 3 caractères
la version obfusquée est aussi 3 caractères
voici une explication de la façon dont % fonctionne
la source
Bash - 7
tac
inverse l'ordre des lignes, tandis querev
inverse l'ordre des caractères.la source
alias z='tac|rev'
rev|tac
pour le même score - juste ajouter une note pour dire que cela fonctionne pour n'importe quel shell POSIX, pas seulement Bash.BrainFuck, 10 personnages
Bat beaucoup de réponses pour un langage aussi simple.
la source
C, 37 octets
la source
Haskell - 21
la source
Pancake Stack ,
342316 octetsCela suppose que l’entrée se termine par un caractère nul (
^@
en ligne de commande). Exemple exécuté en utilisant l' interpréteur :la source
Python,
41 à40 octets41 -> 40 - point virgule supprimé à la fin du programme.
Probablement pourrait être optimisé!
la source
print raw_input()[::~0]]
? C'est toujours Python 2 à cause deprint
# Language Name, Character/Byte Count
APL, 2
Ou CircleBar QuoteQuad si les caractères ne passent pas, ce qui signifie simplement: inverser la saisie de caractères au clavier.
la source
⍞
.⌽
est une fonction anonyme complète qui peut être attribué et utilisé:f←⌽
f 'The quick brown fox'
.Perl - 23
la source
print"".reverse<>
n'y a que 17 caractères. Et avec Perl 5.10+, vous pouvez enregistrer deux autres caractères en utilisant à lasay
place deprint
.print~~reverse<>
pour 16 personnagessay~~reverse<>
fonctionnerait-il? 14 caractères.Ruby - 19 personnages
la source
C - 47 caractères
Notez que cela utilise O (n) espace de pile. Essayez-le en ligne!
la source
main(c){(c=getchar())>0&&main(),putchar(c);}
c>=0
peut devenir~c
Windows PowerShell, 53 à
542011-01-30 (54) - Première tentative
2011-01-30 (53) - Les sauts de ligne en ligne sont amusants.
2011-01-3- (52) - Les affectations de variables en ligne également.
la source
-join($a="$args")[$a.Length..0]
seul semble fonctionner pour l'exemple fourni, je n'ai aucun problème avec les sauts de ligne sous Windowscrlf
- je ne suis pas sûr du psv2 ni de ce que vous avez utilisé lors de l'écriture de celui-ci.$input
est un énumérateur générant des lignes, vous ne pouvez donc pas le hiérarchiser comme ça.Perl 5.1, 14
la source
Befunge-93 - 11x2 (22 caractères)
Testé à l'aide de cet interprète .
la source
Lambda Calcul binaire - 9 octets
Source: http://ioccc.org/2012/tromp/hint.html
la source
Fission ,
161412 octetsExplication
Le flux de contrôle commence à
D
avec un(1,0)
atome descendant . Les?
lectures de STDIN, un caractère à la fois, fixent la masse au code de caractère lu et à l’énergie0
. Une fois que nous avons atteint EOF, nous?
allons définir l’énergie sur1
. Le[
redirige l'atome sur unZ
commutateur. Tant que nous lirons des caractères, l’énergie sera0
, de sorte que l’atome est dévié vers le haut par leZ
. Nous clonons l'atome en remettant une copie dans la boucle?
pour continuer à lire les entrées. Nous incrémente l'énergie de l'autre copie1
avec$
et le pousser sur la pileK
. Donc la boucle d'entrée est la suivante:Lorsque l'énergie est
1
due à EOF, laZ
volonté laissera plutôt l'atome traverser et décrémenter à0
nouveau l'énergie .~
décrémente l'énergie davantage à-1
. Des atomes à énergie négative jaillissent de la pile, ce qui permet de récupérer les caractères dans l’ordre opposé et de les imprimer!
. Notez maintenant que la grille est toroïdale, de sorte que l'atome réapparaît sur le bord gauche de la même ligne. Rappelez-vous que nous avons incrémenté l’énergie des atomes poussés plus tôt avec$
, de sorte que les atomes ont maintenant de l’énergie1
tout comme la dernière sortie de?
et passera à nouveau directement à travers leZ
. Le chemin après EOF est doncCette boucle sur la ligne du bas continue jusqu'à ce que la pile soit vide. Lorsque cela se produit, l'atome est réfléchi par le
K
et son énergie devient positive (+1
). Le~
décrémente encore une fois (en se déplaçant vers la gauche), de sorte que nous touchons maintenant leZ
avec une énergie non positive. Cela dévie l'atome vers le bas, de sorte qu'il se termine dans le coinY
où il est stocké et, comme il n'y a plus d'atomes en mouvement, le programme se termine.la source
> <>,
1614 octets-2 octets par @JoKing
deux ans (!) plus tard, supprime le -1 supplémentaire de la lecture en déplaçant la logique d’arrêt.
Essayez-le en ligne!
Semblable à l'autre> <> réponse, il n'est pas nécessaire d'inverser la pile à cause de la façon dont l'entrée est lue dans la première ligne. En fait, je ne suis pas trop sûr de savoir si cela devrait être une suggestion pour l'autre réponse> <>, car son apparence est très différente mais son concept est similaire.
La principale différence est que ma réponse compare l’entrée à 0, et si elle est inférieure (c’est-à-dire qu’il n’ya pas d’entrée -
i
renvoie -1 si aucune entrée n’est donnée), il saute à (1,7), sinon, (0, sept). S'il passe à l'ancien, la valeur supérieure (-1) est affichée et une boucle d'impression est lancée. S'il saute à ce dernier, il continue la boucle d'entrée.11 octets, sort avec une erreur
Gracieuseté de @JoKing
Essayez-le en ligne!
Je crois que cela est valable maintenant via le méta-consensus.
Réponse précédente (14 octets)
la source
o
le;
o
part; n'a pas remarqué cela à l'époque. Et merci pour la sauvegarde. Utilisation intelligente de la comparaison à zéro pour se débarrasser du dernier -1.0=?
à?!
)PHP -
3817 caractèresla source
cat
??stdin
Stack Cats , 7 octets
Essayez-le en ligne!
Il existe de nombreuses alternatives pour le même nombre d'octets, dont la plupart sont essentiellement équivalentes par leur fonctionnement:
Explication
Un petit guide pour Stack Cats:
-1
dessus de ces zéros, puis les octets d'entrée en plus de cela (avec le premier octet tout en haut et le dernier octet au-dessus du-1
).-1
le bas s'il y en a une, puis imprimons toutes les valeurs sous forme d'octets dans STDOUT.Passons maintenant au programme actuel:
Sp3000 a mis sa recherche de force brute à la recherche de toutes les autres solutions à 7 octets. Voici donc quelques alternatives:
Ces trois variantes sont essentiellement les mêmes, sauf qu'elles diffèrent par le calcul du NON au niveau du bit et par l'utilisation de la pile vide à gauche ou à droite.
Comme je l'ai dit dans l'explication ci-dessus,
T
ne fait rien lorsque le sommet de la pile est à zéro. Cela signifie que nous pouvons réellement mettre le!
au centre à la place. Cela signifie que le premierT
est un no-op, nous tournons le zéro sur le dessus dans un-1
et puis ensuite deuxièmeT
effectue l'inversion. Bien entendu, cela signifie que l'état final de la mémoire a un-1
sur la pile à côté de celui d'origine, mais cela n'a pas d'importance, car seule la pile à la position actuelle de la tête de la bande affecte la sortie.Cette variante utilise
*
(XOR 1) au lieu de!
, de manière à transformer le zéro en+1
, et leI
est une poussée conditionnelle qui pousse les valeurs positives et à droite, les valeurs négatives à gauche, et les annule dans les deux cas (de sorte que nous aboutissons toujours à un-1
lorsque nous rencontronsT
), cela fonctionne donc de la même manière que la<!]T[!>
solution originale .la source
PHP,
8229242928 caractères82 -> 29: Le caractère de nouvelle ligne est conservé lorsqu'il est inversé avec
strrev
.29 -> 24: Utilise maintenant la syntaxe de raccourci.
24 -> 29: lit maintenant toutes les lignes au lieu d'une seule.
la source
fgets(STDIN)
ne lit que la première ligne.Befunge-98 -
1110(Testé avec cfunge)
La variante ci-dessous rompt légèrement l'exigence: elle exécute la tâche mais génère ensuite un flux infini d'octets nuls (et ne se termine pas).
La façon dont cela fonctionne est qu’il lit de façon répétée les entrées dans la pile (
~
), caractère par caractère, en sautant (#
) la virgule. Lorsque EOF est atteint,~
agit comme un réflecteur et le PC bascule, saute et affiche de manière répétée un caractère (,
) tout en sautant (#
) le tilde.la source
#v~
Ligne 2::<,_@#
. Drôle que l’utilisationj
ne l’améliore pas ici.Pyth -
354 octetsAinsi, la version originale à 3 caractères n'a pas inversé l'ordre des lignes, mais uniquement les lignes. Je suis alors venu avec cette version à 5 caractères:
J'ai sauvé 1 octet grâce à @FryAmTheEggman pour le résultat:
Démo en direct.
Explication:
Solution originale (incorrecte):
Techniquement, cela n’a aucune importance, car Pyth a été créé en 2014, mais il n’en reste pas moins qu’il est lié à GolfScript.
Explication:
la source
Fk_.z_k
Je suis sûr que quelqu'un peut obtenir quelque chose de plus court que cela, mais c'est ce que j'ai.Cubix ,
98 octetsMerci à Martin Ender pour ce golf:
Voir le travail en ligne!
Cela devient le cube suivant (
>
indique le pointeur d'instruction initiale):La première étape du programme consiste à prendre toutes les entrées.
i
met 1 octet d'entrée sur la pile. À moins que l’entrée ne soit terminée,?
l’IP tourne à droite, enroulant le cube jusqu’à atteindrew
, ce qui le renvoiei
.Lorsque l’entrée se termine, le programme
?
fait passer l’IP vers le nord en entrant dans la boucle de sortie:o
: imprimer le personnage en haut de la pilew
: 'sidestep' le pointeur à droite;
: pop le personnage qui vient d'être imprimé\
: refléter l'adresse IP en l'envoyant vers l'est?
: s'il reste des caractères à imprimer, tournez à droite, revenez dans la boucle.La dernière fois
?
est atteinte, quand rien ne reste sur la pile, l’IP continue à la place:i
: prend un octet d'entrée. Ce sera-1
comme entrée a fini.\
: reflète l'adresse IP, en l'envoyant au nord, dans:@
: terminer le programme.Solution de 9 octets
Voir le travail en ligne!
Sous forme de cube:
Le premier caractère rencontré est celui
i
qui prend un charcode d’entrée. S'il n'y a plus d'entrée, c'est bien-1
.Le caractère suivant est
?
- une décision. Si le haut de la pile est positif, il tourne à droite et contourne le cube jusqu'à ce qu'il frappe,/
ce qui le renvoie aui
, créant ainsi une boucle de saisie. Cependant, si le TOS est négatif, l’entrée est terminée et elle se tourne vers la gauche dans la boucle de sortie.La boucle de sortie est simple.
o;
sorties et affiche le TOS. La première fois que cela est exécuté,-1
c'est le haut de la pile, mais ne correspond pas à un personnage et est donc ignoré./
reflète l'adresse IP à déplacer à gauche, où il rencontre!@
- ce qui termine le programme si la pile est vide. Sinon, l'IP continue, en tapant?
encore une fois - parce que la pile n'est pas vide, le TOS doit être un charcode, tous positifs ( 1) , ce qui fait que l'IP tourne à droite et continue la boucle de sortie.1 Les deux solutions supposent que l'entrée ne contiendra pas d'octets nuls.
la source
05AB1E, 1 octet
R inverse l’entrée.
la source
,
de la fin, car le haut de la pile s’imprime automatiquement lorsque rien n’a été imprimé.Wumpus , 12 octets
Essayez-le en ligne!
La réponse de Martin montre bien le flux de contrôle de grille triangulaire de Wumpus, mais je pensais que je tenterais ce défi avec un one-liner.
La version la plus facile à comprendre (un octet de plus) est:
qui fonctionne comme suit:
Jetons maintenant un coup d'œil à la version avec golf, qui diffère au milieu:
La version avec golf enregistre un octet car elle n’a pas besoin d’une commande explicite
;
pour extraire la valeur -1 superflue. Ce programme saute à la fin du fichier, au(4, 0)
lieu de(8, 0)
où il exécute à4*0.
nouveau - sauf que cette fois l'étranger -1 est sur le dessus! Cela nous amène à sauter(-4, 0)
, ce qui en raison de l’emballage est identique à celui(8, 0)
de cette grille, nous amenant où nous voulons tout en consommant la valeur étrangère en même temps.la source
Wumpus ,
13 à11 octetsEssayez-le en ligne!
Explication
Puisque Wumpus est un langage basé sur les piles, l’idée de base est de lire tous les codes STDIN dans la pile, puis d’imprimer la pile entière de haut en bas. La partie intéressante ici est le flux de contrôle à travers la grille.
Pour comprendre le flux de contrôle, nous devons examiner la disposition actuelle de la grille triangulaire:
La propriété intellectuelle commence dans le coin supérieur gauche en direction est. Nous pouvons voir qu’il ya une boucle dans le groupe de six cellules à gauche et une branche de la
\
. Comme on pouvait s'y attendre, la boucle lit toutes les entrées et la section linéaire à la fin écrit le résultat dans STDOUT.Regardons d'abord la boucle. Il est plus logique de penser que le premier
)?\
ne fait pas partie de la boucle, la boucle réelle commençant au débuti
. Alors voici le bit initial:Puis la boucle commence:
Cela laisse la section linéaire à la fin:
la source
PHP - 44 caractères
la source
Perl
la source
Fission ,
20 à15 octetsL'algorithme est très similaire à celui de Martin, mais la mise en œuvre diffère considérablement.
Comment ça fonctionne
Tout commence à
R
, ce qui libère un atome vers l'est de masse 1 et d'énergie 0.En frappant
?
, un caractère saisi est enregistré en tant que masse de l'atome et l'énergie est laissée à 0 sauf si stdin renvoie EOF, auquel cas l'énergie devient 1.J
est la commande de saut de Fission, et saute un atome en avant d'un nombre de cellules équivalent à son énergie actuelle, laissant l'atome à 0 énergie. Pour l'instant, notre atome a 0 énergie et ignore cette commande.Nous frappons ensuite
%
, ce qui est un commutateur. Avec plus de 0 énergie, notre atome serait dirigé vers le bas (comme si réfléchie par un\
miroir), mais étant donné que nous avons exactement 0 l' énergie, nous sommes envoyés vers le haut par le miroir opposé,/
.Notre atome continue jusqu'à ce qu'il rencontre un deuxième miroir,
\
cette fois en le dirigeant vers la gauche.Nous incrémentons l'énergie de l'atome à 1 avec
$
, et utilisonsX
pour dupliquer l'atome. Une copie sera renvoyée à la$
commande (en laissant cette copie avec 2 énergie) et l'autre copie sera placée dans la pile,K
.Notre copie réfléchie se déplace d’où elle vient jusqu’à ce qu’elle revienne à l’
%
interrupteur. Maintenant que nous avons une énergie positive, nous réfléchissons comme si nous nous étions heurtés à un\
miroir, passant d’un bord à l’autre au tableau suivantS
et réduisant notre énergie à 1.La
S
commande consomme 1 énergie pour préserver notre direction. Si nous n'avions pas d'énergie, l'atome aurait dévié comme s'il était frappé par un\
miroir, en bas. Au lieu de cela, nous nous déplaçons à nouveau vers la droite et prenons plus d’entrées avec?
et le cycle se répète.Une fois que notre atome a atteint EOF, la
?
commande stockera 1 énergie dans l’atome. Ainsi, lorsque nous appuyons sur laJ
commande cette fois-ci, nous sautons complètement l'%
interrupteur et atterrissons sur leS
avec 0 énergie.Maintenant, puisque notre énergie a été consommée pendant le saut, notre direction n’est pas préservée par le
S
commutateur, mais nous sommes plutôt dirigés vers le bas. Nous décrémentons ensuite notre énergie à -1 avec la~
commande et enveloppons le tableau. Lorsqu'elle est touchée par une énergie négative, laK
commande fait apparaître un atome au lieu d'en pousser un. Nous produisons notre atome récemment sauté avec!
, et utilisons l'énergie 1 de cet atome pour contourner leS
commutateur, et le cycle se termine.Si la pile
K
était vide, l'énergie de notre atome est annulée (ce qui donne +1 énergie) et il est renvoyé sur la~
commande, le laissant avec l'énergie 0. En frappant àS
nouveau, nous sommes déviés vers la droite, jusqu'à ce que le coup?
soit frappé. Depuis que EOF a été atteint, le?
détruit l'atome et termine le programme.la source
Labyrinthe , 10 octets
Normalement, les programmes Labyrinth sont supposés ressembler à des labyrinthes, mais j’ai réussi à compresser les boucles dans celui-ci si étroitement que ce code s’est transformé en un seul bloc (pièce?). Voici une version légèrement développée qui facilite le suivi du flux de contrôle:
,
lit un octet à la fois de STDIN jusqu'à ce qu'il atteigne EOF et revienne-1
. Le)
incrémente cette valeur pour que nous obtenions quelque chose de positif pour chaque octet de lecture et zéro à EOF. Les:
doublons lisent chaque octet.Une fois que nous avons atteint EOF, le pointeur d’instruction passe à la seconde boucle, où il omet de manière répétée une valeur avec
;
(initialement, EOF, plus tard, la deuxième copie de chaque octet), puis décrémente la valeur suivante(
et l’affiche avec.
. En raison de cette deuxième copie (qui est toujours positive), nous savons que l’IP tournera à droite en haut et continuera dans cette boucle.Une fois que tous les octets ont été imprimés, le sommet de la pile est à nouveau à zéro et l'adresse IP continue tout droit jusqu'à
@
et le programme se termine.La duplication apparemment inutile de chaque octet est ce qui me permet de garantir que (même dans les boucles serrées de la version jouée au golf), l’IP prend toujours le virage correct et ne passe jamais d’une boucle à l’autre.
Coup de chapeau à TheNumberOne et à Sp3000, qui ont eux-mêmes tenté de trouver cette solution hautement compressée.
la source