«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 .


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


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 )


-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.


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")

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

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!


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>

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 ( <!--... -->)


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).


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 ...


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"


1
Ma toute première soumission - j'espère que je le fais bien ...
Adam

Belle solution :)
Taylor Scott


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");}}

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


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!


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


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



3

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

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

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 à ;


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)


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)


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!


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

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

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!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.