«abc» et «cba»

28

Votre tâche est simple, écrivez un extrait de code unique qui, lorsqu'il est exécuté dans une langue, ne produit que la chaîne 'abc'et lorsqu'il est exécuté dans une autre langue, ne produit que la chaîne 'cba'. Le programme ne doit prendre aucune entrée.

Il s'agit d'un défi de .

Chris_Rands
la source
4
Je ne pense pas que ce soit dupe. Le fait que la chaîne soit inversée est suffisamment différent de l'impression de deux chaînes différentes. Je ne vais pas (voter pour) rouvrir, car cela aurait un effet immédiat
Luis Mendo
4
J'ai voté pour rouvrir ce post, car IMO imprimant l'inverse d'une chaîne et d'une chaîne est très différente de 2 différentes. Aucune réponse ne peut être trivialement modifiée pour répondre à ce défi. Ma propre réponse utilise une technique de symétrie inverse par rapport aux réponses qui y sont. Je suis d'accord avec @LuisMendo.
M. Xcoder
2
Pouvez-vous imprimer à la ABCplace deabc
Oliver Ni
5
Je vote pour rouvrir, certaines réponses utilisent le fait cbaest à l' abcenvers; lien , lien , lien , lien , lien , lien , lien , lien , lien
Oliver Ni
2
'ABC'et 'CBA'est ok, les espaces blancs de
début

Réponses:

21

MATLAB / Octave, 41 octets

disp(flip('abc',size(randsample(2,2),2)))

Dans MATLAB randsample(2,2), le vecteur 2 × 1 l' size(...,2)est aussi 1. Ainsi flipest appliqué le long de la première dimension, qui est un singleton, de sorte que la chaîne d'origine 'abc's'affiche:

enter image description here

Dans Octave randsample(2,2)donne un vecteur 1 × 2, il en size(...,2)est de même 2. Ainsi flipest appliqué le long de la deuxième dimension, c'est-à-dire que la chaîne est inversée de gauche à droite:

enter image description here

Luis Mendo
la source
Je pense que ce serait quelques octets plus court si vous utilisez la versionvariante la moins intéressante .
Stewie Griffin
@StewieGriffin Merci. Je pense qu'il est trop tard pour changer maintenant. Peut-être le poster vous-même?
Luis Mendo
Non, c'est une version ennuyeuse de celui-ci ... De plus, je n'ai plus MATLAB donc je ne pourrai pas le tester.
Stewie Griffin
15

25 octets

print(1/2and'cba'or'abc')

Essayez-le en ligne! ( Python 2 )

Essayez-le en ligne! ( Python 3 )

Erik le Outgolfer
la source
-1 octet en utilisant exitau lieu de print(bien que cela s'applique à chaque réponse à partir de maintenant).
notjagan
@notjagan. exitimprime sur stderr, n'est-ce pas? Je ne sais pas si ce serait une réponse valide.
@ThePirateBay La sortie vers STDERR est autorisée selon le méta-consensus .
notjagan
Le défi dit cependant l'extrait de code et l'impression, il n'utilise pas de règles par défaut.
xnor
10

-1 octet si je fais ==0en >0mais c'est déjà une autre réponse

Python 2 , 26 octets

print('acbbca'[1/2==0::2])

Essayez-le en ligne!


Python 3 , 26 octets

print('acbbca'[1/2==0::2])

Essayez-le en ligne!

1/2donne 0(floordiv) en Python 2 et 0.5(truediv) en Python 3. Ainsi, 1/2==0donne 1 en Python 3 et 0 en Python 2 (en fait, booléens, mais ce ne sont que des entiers), 'acbbca'[1::2] => 'cba'est donc donné pour Python 3 et 'acbbca'[0::2] => 'abc'est donné pour Python 2.

HyperNeutrino
la source
10

Fiches Excel / Google, 41 28 27 24 octets

Formule de feuille de calcul anonyme qui ne prend aucune entrée et sortie "ABC"dans la cellule appelante dans Excel et "CBA"dans la cellule appelante dans Google Sheets

=IfError(M("CBA"),"ABC")

Dans Google Sheets, M(...)est un alias pour et mis en forme automatiquement T(...)(abréviation de Text()). Cet appel renvoie la valeur de texte de la variable passée, "CBA". "CBA"n'est pas détecté comme une erreur, il "CBA"est donc renvoyé parIfError(...,"ABC")

Dans Excel, il n'y a aucune M(...)fonction, et M(...)n'est pas un alias et donc M("CBA")retourne la formule ne trouve pas d' erreur, #NAME?. Ceci est rattrapé IfError(...,"ABC"), qui à son tour revient "ABC".


Versions précédentes, 27, 28, 41 octets

Voir les modifications pour les explications

=If(IsErr(A()),"ABC","CBA")
=If(IsErr(GT()),"ABC","CBA")
=IfError(If(Info("NUMFILE"),"ABC"),"CBA")
Taylor Scott
la source
1
Soigné! .... Vous pouvez enregistrer 2 octets en utilisant iserrau lieu de iferroret 1 octet en utilisant "SYSTEM" au lieu de "NUMFILE":=IF(ISERR(INFO("SYSTEM")),"cba","abc")
Adam
8

CJam / 05AB1E , 6 octets

"abc"R

Essayez-le en ligne:

Comment ça marche dans CJam

"abc"    Push this string
R        Push variable R, predefined to the empty string
         Implicitly display stack

Comment ça marche dans 05AB1E

"abc"    Push this string
R        Reverse
         Implicitly display top of the stack
Luis Mendo
la source
8

Toutes mes excuses à @HyperNeutrino pour avoir volé la majeure partie de sa réponse (je n'ai pas encore la réputation de commenter)

Python 2 , 25 octets

print('acbbca'[1/2>0::2])

Essayez-le en ligne!

Python 3 , 25 octets

print('acbbca'[1/2>0::2])

Essayez-le en ligne!

reffu
la source
Umm c'est en fait <1btw.
Erik the Outgolfer
@EriktheOutgolfer Non, c'est vrai pour les deux langues
HyperNeutrino
Comme l'a suggéré @notjagan, vous pouvez remplacer printpar exit(ce qui est autorisé par nos règles) et ainsi économiser 1 octet.
3
Vous devez ajouter la deuxième langue à votre réponse (Python3 je suppose)
Zacharý
@ Zacharý Merci, je ne savais pas que le problème avait été mis à jour (l'original n'était que python 2 et pyhon 3)
reffu
8

Vim / Notepad.exe, 10 octets

cbaabc<esc><backspace><backspace><backspace>
m-chrzan
la source
2
Le bloc-notes n'est pas un langage de programmation, mais +1.
Jakob
7

JavaScript (NodeJS) et PHP, 46 octets

<!--
strrev=console.log//--><?=
strrev("abc");

Imprime abcen JS et cbaen PHP.

Essayez le JS en ligne!

Essayez le PHP en ligne! (notez que TIO ne cache pas les commentaires HTML ( <!--... -->)

Justin Mariner
la source
1
Comment est <!--interprété dans Node?
Esolanging Fruit
@ Challenger5 Il est apparemment interprété comme un commentaire d'une ligne, exactement comme //( source ). Cela fonctionne également dans le navigateur JS.
Justin Mariner
6
C'est bizarre ...
Esolanging Fruit
--> blah blahest un commentaire valide dans un interpréteur JavaScript, vous pouvez simplement le supprimer//
tsh
1
@JustinMariner J'avais testé sur Node v8.1.3. Et le comportement défini dans l'annexe B de la spécification ES6, ce qui signifie que tous les navigateurs qui prennent en charge ES6 doivent l'accepter comme commentaire.
tsh
6

Python / Befunge, 20 18 octets

2 octets économisés grâce à @karhell

print("abc")# ,,,@

Essayez-le en ligne! pour Python

Python voit print("abc")alors un commentaire.

Essayez-le en ligne! pour Befunge

Befunge, en supprimant tous les nops et les commandes inutiles, voit "abc",,,@quelles mises a, bet csur la pile, puis les imprime (dernier entré - premier sorti).

Uriel
la source
Un peu en retard, mais vous pouvez raser deux octets en remplaçant >:#,_@par,,,@
karhell
Économisez un de plus avec à la #,,<@place
Jo King
5

Python 2 et Python 3, 42 octets

try:exec("print'abc'")
except:print('cba')

Essayez-le en ligne! (Python 2)

Essayez-le en ligne! (Python 3)

Je pensais que j'essaierais quelque chose de différent ...

totalement humain
la source
J'aime celui-ci, pas le cadre le plus court mais assez générique, peut être raccourci un peu en utilisanttry:long;print('abc')
Chris_Rands
Ou mieux encoretry:cmp;print('abc')
Chris_Rands
Ce n'est pas ce que j'ai écrit, des parenthèses () sont toujours nécessaires autour de l'impression
Chris_Rands
5

Feuilles Excel / Google, 28 octets

Inspiré par @TaylorScott, qui a utilisé une fonction qui n'existe que dans Excel, j'ai trouvé une fonction encore plus courte qui n'existe que dans Google Sheets. Idéalement, il est conçu pour renvoyer des chaînes:

=iferror(join(,"cba"),"abc")

Comment ça marche

Dans Google Sheets, join([arg1], arg2, arg3,...argk)concaténera arg2 -> argk , en utilisant éventuellement le séparateur spécifié dans arg1 . Dans ce cas, il renvoie avec succès "cba".

Excel n'a pas de joinfonction, iferrorvoit donc un problème et retourne "abc"

Adam
la source
1
Ma toute première soumission - j'espère que je le fais bien ...
Adam
Belle solution :)
Taylor Scott
4

CJam et Gaia , 8 octets

'c'b'a]$

Essayez-le dans CJam!

Essayez-le à Gaia!

Explication

Dans les deux langues, cela définit une liste de caractères.

Dans CJam, $c'est en quelque sorte, ça devient abc.

Dans Gaia, $joint la liste en une seule chaîne, donnant cba.

Chat d'affaires
la source
J'ai ajouté Gaia à la liste des langues de golf ; s'il vous plaît laissez-moi savoir si je me trompe.
ETHproductions
@ETHproductions me semble OK.
Business Cat
4

Java 8 et C, 95 octets

//\
interface a{static void main(String[]s){System.out.print("abc"/*
main(){{puts("cba"/**/);}}

Essayez-le en Java 8 - résultant en "abc".
Essayez-le en C - résultant en "cba".

Explication:

//\
interface a{static void main(String[]s){System.out.print("abc"/*
main(){{puts("cba"/**/);}}

Comme vous pouvez le voir dans le code surligné Java ci-dessus, la première ligne est un commentaire dû à //, et le code C est un commentaire dû à /* ... */, résultant en:

interface a{static void main(String[]s){System.out.print("abc");}}

//\
interface a{static void main(String[]s){System.out.print("abc"/*
main(){{puts("cba"/**/);}}

Je ne sais pas comment activer correctement la surbrillance C, car cela lang-centraîne la même surbrillance que Java .. Mais //\commentera la ligne suivante, qui est le code Java, résultant en:

main(){{puts("cba");}}
Kevin Cruijssen
la source
4

Python 2 / Python 3, 28 octets

print('abc'[::int(1/2*4)-1])

En Python 2 int(1/2*4)-1évalue -1et imprime donc cba. - TiO

En Python 3, il évalue 1donc les impressions abc. - TiO


la source
2
Bienvenue à la programmation d'énigmes et de code Golf
Евгений Новиков
4

C et C ++, 115 , 78 , 58 , 56 octets

#include<stdio.h>
main(){puts(sizeof('x')>1?"abc":"cba");}

78 octets, grâce à challenger5 .

58 octets, grâce à aschepler .

56 octets, grâce au hvd

Essayez-le - C ++!

Essayez-le - C!

Ivan Botero
la source
1
1) Vous pouvez #ifdefréduire les deux pour en faire un seul. 2) Vous pouvez supprimer l'espace #include <stdio.h>. 3) Vous pouvez changer printf("%s",pour puts(. Essayez-le en ligne!
Esolanging Fruit
2
Ou il y a toujours le bon vieux sizeof('x')>1?"abc":"cba"truc.
aschepler
@ Challenger5 Merci pour le commentaire
Ivan Botero
@aschepler Merci pour l'astuce, j'ai fait les changements 58 octets :)
Ivan Botero
1
sizeofL'opérande n'a pas besoin de parenthèses, ce n'est pas une fonction.
hvd
4

R / Cubix , 20 octets

cat("abc")#u@o;o;o(;

R - Essayez-le en ligne!

Cubix - Essayez-le en ligne!

Pour R, cat("abc")alors abus sans vergogne de commentaires. Pour Cubix

    c a
    t (
" a b c " ) # u
@ o ; o ; o ( ;
    . .
    . .
  • "abc" Pousse a, b et c sur la pile
  • )# Incrémente le c, pousse le nombre d'éléments dans la pile
  • u Demi-tour à droite
  • ;( Supprimer le nombre, décrémenter le c
  • o;o;o@ Sortie cba et sortie

Pousse le nombre dans la pile

MickyT
la source
2
Je suis étrangement satisfait de la manière dont cat(Cubix l'ignore totalement.
Giuseppe
3

Python 2 et Foo , 16 octets

print"abc"[::-1]

Python 2

print"abc"[::-1]

Essayez Python 2 en ligne!

Explication

print"abc"[::-1]

print             # print... (duh)
     "abc"        # the string "abc"...
          [::-1]  # backwards

Foo

"abc"

Essayez Foo en ligne!

Explication

"abc"

"abc"               print the string "abc"
totalement humain
la source
3

C (gcc) C ++ (g ++), 59 octets

#include<stdio.h>
main(){puts("abc\0cba"+(sizeof(' ')&4));}
tsh
la source
3

Fission / > <> , 11 octets

!R"abc"ooo;

Essayez Fission en ligne

Dans Fission, une particule commence à Ret s'imprime abc.

Essayez> <> en ligne

Dans> <>, l'IP commence en haut à gauche. !ignore l'instruction suivante et "abc"pousse [a, b, c] sur la pile. ooopuis apparaît et imprime trois fois, donnant cba.

Les deux programmes se terminent à ;

KSmarts
la source
3

Ly / > <> , 20 19 octets

"abc"&&ov
;     oo<

Essayez-le avec> <>!

Essayez-le avec Ly!

Ces langues sont très similaires, car Ly est basé sur> <>. Cependant, Ly n'a pas d'exécution 2D et interprète &différemment, ce dont j'ai profité ici.

Les deux langues commenceront en poussant abcvers la pile.

Pour> <>, l' &instruction déplace les valeurs dans les deux sens du registre. Deux de suite pousseront une valeur dans le registre puis la reprendront, essentiellement un NOP.

Pour Ly, &est un modificateur qui fait qu'une instruction remplit sa fonction sur toute la pile.

osignifie la même chose pour les deux langues, mais comme il est modifié par &dans Ly, il imprimera la pile entière, en sortie abc. Dans> <>, il sortira uniquement c(car il est imprimé de haut en bas)

vest un NOP dans Ly, qui l'ignore et passe directement à ;, mettant fin à l'exécution. > <> le traitera plutôt comme un pointeur, envoyant l'IP vers le bas.

Il frappe ensuite une autre flèche, envoyant l'IP à gauche. Ici, il rencontre deux osignes, en sortie bet a.

EDIT: enregistrement d'un octet (et correction>> du plantage)

LyricLy
la source
1
Vous pouvez enregistrer un octet en déplaçant la ;sur la deuxième ligne. Cela présente également l'avantage que l'IP <<> ne s'enroule pas et ne passe pas par la deuxième ligne, ce qui provoque une erreur.
Esolanging Fruit
ne devrait-il pas y avoir un; pour> <>? cela ne prendrait plus d'octets, remplacez simplement l'un des espaces
Destructible Lemon
Et alors "abc"&&ooo;? Cela fait planter Ly, mais seulement après avoir imprimé "abc".
Pas un arbre
… Ou "abc"&&o!;o<pour 1 octet supplémentaire, si vous voulez éviter de planter.
Pas un arbre
2

05AB1E et 2sable , 6 octets

…CBAžR

Impressions ABC(OP a dit que c'était autorisé) dans 05AB1E et CBAdans 2sable, en utilisant le fait que 2sable était similaire à 05AB1E mais a žRété ajouté à 05AB1E après que 2sable a été abandonné.

Essayez-le en ligne! (05AB1E)

Essayez-le en ligne! (2sable)

Oliver Ni
la source
La spécification indique qu'elle doit être "abc" ou "cba". Par ma parole, je dirais que ce n'est pas valide, mais je peux demander à OP.
HyperNeutrino
J'ai demandé au PO et il n'a pas répondu. Si cela s'avère invalide, je le supprimerai.
Oliver Ni
@OliverNi Umm, s'il n'est pas valide, vous pouvez simplement ajouter un lbtw.
Erik the Outgolfer
2

PHP + JavaScript, 29 28 octets

Cela fonctionne parce que PHP interprète '0'(comme le nombre entier 0) comme étant faux, tandis que JavaScript suppose qu'il s'agit simplement d'une chaîne non vide qui est véridique.

'0'?alert('cba'):print(abc);

Ceci est destiné à fonctionner avec -rPHP. En Javascript, il suffit de le coller dans la console.


Merci à @Justin Mariner de m'avoir sauvé 1 octet!

Ismael Miguel
la source
Vous pouvez également utiliser à la "0"place de +![]: il devient 0(faux) en PHP et est une chaîne (véridique) en JS.
Justin Mariner
@JustinMariner Vous avez raison, mais cela fait 1 octet de plus.
Ismael Miguel
1
N'est-ce pas un octet plus court? +![]?print(abc):alert('cba');->"0"?alert('cba'):print(abc);
Justin Mariner
@JustinMariner OH !!! De cette façon!!! Oui, c'est 1 octet plus court. Merci!
Ismael Miguel
2

PHP / Brainf * ck, 31 octets

en utilisant le -r drapeau,

PHP voit die(abc) et un commentaire, et puisque le compilateur est indulgent, il génère abcune chaîne au lieu d'une variable vide.

Brainf * ck ne voit que les caractères d'instruction, et le reste est considéré comme des commentaires.

die(abc);#--[----->+<]>---.-.-.

Essayez-le en ligne!(PHP)

Essayez-le en ligne! (Brainf * ck)

Stan Strum
la source
Pour info, vous n'avez pas à compter-r
Business Cat
2

Julia et Octave / Matlab, 27 octets

if'a'=="a""abc"else"cba"end

Dans Octave, les deux 'a'et "a"représentent la même chaîne, c'est donc 'a'=="a"vrai. Cependant, dans Julia, il 'a's'agit d'un seul caractère alors qu'il "a"s'agit d'une chaîne à un caractère. Dans Julia, "cba"c'est la sortie.

Version non golfée:

if 'a'=="a"
  "abc"
else
  "cba"
end
Sven Hohenstein
la source
2

Perl / Ruby, 18 octets

Rubis

print'abc'.reverse

prints cbaque nous appelons .reversesur la chaîne.

Essayez-le en ligne!

Perl

print'abc'.reverse

prints abcconcaténé avec le résultat reversequi par défaut fonctionne sur $_lequel est vide et ne fait donc aucune différence.

Essayez-le en ligne!

Dom Hastings
la source