'abc' y 'cba'

28

Su tarea es simple: escriba un fragmento de código único que, cuando se ejecuta en un idioma, solo genera la cadena 'abc'y cuando se ejecuta en otro idioma solo genera la cadena 'cba'. El programa no debe tomar ninguna entrada.

Este es un desafío de .

Chris_Rands
fuente
44
No creo que esto sea un engaño en absoluto. El hecho de que la cadena se invierta es lo suficientemente diferente de imprimir dos cadenas diferentes. Sin embargo, no voy a (volver a abrir), ya que eso tendría un efecto inmediato
Luis Mendo
44
Voté para volver a abrir esta publicación, porque IMO imprime el reverso de una Cadena y una Cadena es muy diferente a 2 diferentes. Ninguna respuesta puede modificarse trivialmente para adaptarse a este desafío. Mi propia respuesta utiliza una técnica de simetría inversa en comparación con las respuestas allí. Estoy de acuerdo con @LuisMendo.
Sr. Xcoder
2
¿Se puede imprimir en ABClugar deabc
Oliver Ni
55
Voto para reabrir, algunas respuestas usan el hecho cbaes al abcrevés; enlace , enlace , enlace , enlace , enlace , enlace , enlace , enlace , enlace
Oliver Ni
2
'ABC'y 'CBA'está bien, espacios en blanco iniciales / finales / nuevas líneas están bien, pero debe ser el mismo para ambas salidas
Chris_Rands

Respuestas:

21

MATLAB / Octave, 41 bytes

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

En MATLAB randsample(2,2)da un vector 2 × 1, también lo size(...,2)es 1. Por fliplo tanto, se aplica a lo largo de la primera dimensión, que es un singleton, por lo que 'abc'se muestra la cadena original :

ingrese la descripción de la imagen aquí

En Octave randsample(2,2)da un vector 1 × 2, también lo size(...,2)es 2. Por fliplo tanto, se aplica a lo largo de la segunda dimensión, es decir, la cadena se voltea de izquierda a derecha:

ingrese la descripción de la imagen aquí

Luis Mendo
fuente
Creo que esto sería unos pocos bytes más cortos si usa la versionvariante menos interesante .
Stewie Griffin
@StewieGriffin Gracias. Creo que es demasiado tarde para cambiar ahora. Tal vez publicarlo usted mismo?
Luis Mendo
No, es una versión aburrida de este ... Además, ya no tengo MATLAB, así que no podré probarlo.
Stewie Griffin
15

25 bytes

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

Pruébalo en línea! ( Python 2 )

Pruébalo en línea! ( Python 3 )

Erik el Outgolfer
fuente
-1 byte usando en exitlugar de print(aunque esto se aplica a todas las respuestas a partir de ahora).
notjagan
@notjagan. exitimprime a stderr, ¿no? No estoy seguro de si sería una respuesta válida.
@ThePirateBay La salida a STDERR está permitida según el meta consenso .
notjagan
Sin embargo, el desafío dice que el fragmento de código y la impresión no utilizan reglas predeterminadas.
xnor
10

-1 bytes si hago ==0en >0pero eso es ya otra respuesta

Python 2 , 26 bytes

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

Pruébalo en línea!


Python 3 , 26 bytes

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

Pruébalo en línea!

1/2da 0(floordiv) en Python 2 y 0.5(truediv) en Python 3. Por lo tanto, 1/2==0da 1 en Python 3 y 0 en Python 2 (en realidad, booleanos, pero esos son solo enteros), por lo que 'acbbca'[1::2] => 'cba'se da para Python 3 y 'acbbca'[0::2] => 'abc'se da para Python 2)

Hiperneutrino
fuente
10

Hojas de Excel / Google, 41 28 27 24 Bytes

Fórmula de hoja de trabajo anónima que no lleva entradas ni salidas "ABC"a la celda que llama en Excel ni "CBA"a la celda que llama en Hojas de cálculo de Google

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

En Google Sheets, M(...)es un alias para y autoformatado a T(...)(abreviatura de Text()) Esta llamada devuelve el valor de texto de la variable pasada, "CBA". "CBA"no se detecta como un error, por lo que "CBA"es devuelto porIfError(...,"ABC")

En Excel, no hay ninguna M(...)función, y M(...)no es un alias y por lo tanto M("CBA")devuelve la fórmula no se encuentra el error, #NAME?. Esto es atrapado por IfError(...,"ABC"), que a su vez regresa "ABC".


Versiones anteriores, 27, 28, 41 bytes

Ver ediciones para explicaciones

=If(IsErr(A()),"ABC","CBA")
=If(IsErr(GT()),"ABC","CBA")
=IfError(If(Info("NUMFILE"),"ABC"),"CBA")
Taylor Scott
fuente
1
¡Ordenado! .... Puede guardar 2 bytes usando en iserrlugar de iferrory 1 byte usando "SYSTEM" en lugar de "NUMFILE":=IF(ISERR(INFO("SYSTEM")),"cba","abc")
Adam
8

CJam / 05AB1E , 6 bytes

"abc"R

Pruébalo en línea:

Cómo funciona en CJam

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

Cómo funciona en 05AB1E

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

Con disculpas a @HyperNeutrino por robar la mayor parte de su respuesta (aún no tengo la reputación para comentar)

Python 2 , 25 bytes

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

Pruébalo en línea!

Python 3 , 25 bytes

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

Pruébalo en línea!

reffu
fuente
Umm, en realidad es por <1cierto.
Erik the Outgolfer
@EriktheOutgolfer No, eso es verdad para ambos idiomas
HyperNeutrino
Como sugirió @notjagan, puede reemplazar printcon exit(que está permitido por nuestras reglas) y, por lo tanto, guardar 1 byte.
3
Debería agregar el segundo idioma a su respuesta (Python3 supongo)
Zacharý
@ Zacharý Gracias, no me di cuenta de que el problema se había actualizado (el original era solo python 2 y pyhon 3)
reffugo
8

Vim / Notepad.exe, 10 bytes

cbaabc<esc><backspace><backspace><backspace>
m-chrzan
fuente
2
El Bloc de notas no es un lenguaje de programación, pero +1.
Jakob
7

JavaScript (NodeJS) y PHP, 46 bytes

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

Imprime abcen JS y cbaen PHP.

Prueba el JS en línea!

Prueba el PHP en línea! (tenga en cuenta que TIO no oculta los comentarios HTML ( <!--... -->)

Justin Mariner
fuente
1
¿Cómo se <!--interpreta en Nodo?
Esolanging Fruit
@ Challenger5 Aparentemente se interpreta como un comentario de una línea, exactamente como //( fuente ). Funciona de esa manera en el navegador JS también.
Justin Mariner
66
Eso es extraño ...
Esolanging Fruit
--> blah blahes un comentario válido en algún intérprete de JavaScript, simplemente puede eliminarlo//
tsh
1
@JustinMariner que había probado en Node v8.1.3. Y el comportamiento definido en la especificación ES6 Anexo B, lo que significa que todos los navegadores que admiten ES6 deberían aceptarlo como comentario.
tsh
6

Python / Befunge, 20 18 bytes

2 bytes guardados gracias a @karhell

print("abc")# ,,,@

Pruébalo en línea! para Python

Python ve print("abc")entonces un comentario.

Pruébalo en línea! para Befunge

Befunge, la eliminación de todos los NOP y comandos inútiles ve "abc",,,@que pone a, by cen la pila y se imprimen (último en entrar - primero fuera).

Uriel
fuente
Un poco tarde, pero puede reducir dos bytes reemplazando >:#,_@por,,,@
karhell
Ahorre uno más en su #,,<@lugar
Jo King
5

Python 2 y Python 3, 42 bytes

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

Pruébalo en línea! (Python 2)

Pruébalo en línea! (Python 3)

Pensé que probaría algo diferente ...

totalmente humano
fuente
Me gusta esta, no el sino un marco genérico más corta del todo, se puede acortar un poco mediante el usotry:long;print('abc')
Chris_Rands
O mejor aúntry:cmp;print('abc')
Chris_Rands
Eso no es lo que escribí, todavía se necesitan paréntesis () alrededor de la impresión
Chris_Rands
5

Hojas de Excel / Google, 28 bytes

Inspirado por @TaylorScott, quien usó una función que solo existe en Excel, encontré una función aún más corta que solo existe en Google Sheets. Convenientemente, está diseñado para devolver cadenas:

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

Cómo funciona

En Google Sheets, join([arg1], arg2, arg3,...argk)concatenará arg2 -> argk , opcionalmente usando el separador especificado en arg1 . En este caso, devuelve con éxito "cba".

Excel no tiene joinfunción, por lo que iferrorve un problema y devuelve "abc"

Adán
fuente
1
Mi primera presentación: espero hacerlo bien ...
Adam
Buena solución :)
Taylor Scott
4

CJam y Gaia , 8 bytes

'c'b'a]$

Pruébalo en CJam!

Pruébalo en Gaia!

Explicación

En ambos idiomas, esto define una lista de caracteres.

En CJam, $es una especie, por lo que se convierte abc.

En Gaia, $une la lista en una cadena, dando cba.

Gato de negocios
fuente
He agregado a Gaia a la lista de idiomas de golf ; por favor avíseme si tengo algún detalle incorrecto.
ETHproductions
@ETHproductions Me parece bien.
Business Cat
4

Java 8 y C, 95 bytes

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

Pruébelo en Java 8, lo que da como resultado "abc".
Pruébelo en C, lo que da como resultado "cba".

Explicación:

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

Como puede ver en el código resaltado de Java anterior, la primera línea es un comentario debido //, y el código C es un comentario debido /* ... */, lo que resulta 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"/**/);}}

No estoy seguro de cómo habilitar correctamente el resaltado en C, porque lang-cda como resultado el mismo resaltado que Java ... Pero //\comentará la siguiente línea, que es el código Java, lo que resulta en:

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

Python 2 / Python 3, 28 bytes

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

En Python 2 se int(1/2*4)-1evalúa -1y se imprime cba. - TiO

En Python 3 evalúa las 1impresiones abc. - TiO


fuente
2
Bienvenido a Programming Puzzles y Code Golf
Евгений Новиков
4

C y C ++, 115 , 78 , 58 , 56 bytes

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

78 bytes, gracias a challenger5 .

58 bytes, gracias a aschepler .

56 bytes, gracias a hvd

Pruébalo - C ++!

Pruébalo - C!

Ivan Botero
fuente
1
1) Puede contraer las dos #ifdefs para hacer una sola. 2) Puede eliminar el espacio en #include <stdio.h>. 3) Puedes cambiar printf("%s",a puts(. Pruébalo en línea!
Esolanging Fruit
2
O siempre está el buen viejo sizeof('x')>1?"abc":"cba"truco.
Aschepler
@ Challenger5 Gracias por el comentario
Ivan Botero
@aschepler Gracias por el truco, he realizado los cambios 58 bytes :)
Ivan Botero
1
sizeofEl operando no necesita paréntesis, no es una función.
hvd
4

R / Cubix , 20 bytes

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

R - ¡Pruébalo en línea!

Cubix - ¡Pruébalo en línea!

Para R, cat("abc")luego el desvergonzado abuso de los comentarios. Para Cubix

    c a
    t (
" a b c " ) # u
@ o ; o ; o ( ;
    . .
    . .
  • "abc" Empuja a, b ad c en la pila
  • )# Incrementa la c, empuja el número de elemento en la pila
  • u Giro en U a la derecha
  • ;( Eliminar la cuenta, disminuir la c
  • o;o;o@ Salida cba y salida

Empuja el número en la pila

MickyT
fuente
2
Estoy extrañamente complacido por la forma en que cat(Cubix lo ignora por completo.
Giuseppe
3

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

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

Fisión / > <> , 11 bytes

!R"abc"ooo;

Prueba la fisión en línea

En Fission, una partícula comienza Re imprime abc.

Probar> <> En línea

En> <>, la IP comienza en la esquina superior izquierda. !omite la siguiente instrucción y "abc"empuja [a, b, c] en la pila. oooluego aparece e imprime tres veces, dando cba.

Ambos programas terminan en ;

KSmarts
fuente
3

Ly / > <> , 20 19 bytes

"abc"&&ov
;     oo<

Pruébalo con> <>!

Pruébalo con Ly!

Estos lenguajes son muy similares, ya que Ly se basa en> <>. Sin embargo, Ly no tiene ejecución 2D e interpreta de manera &diferente, lo cual aproveché aquí.

Ambos idiomas comenzarán empujando abca la pila.

Para> <>, la &instrucción mueve valores hacia y desde el registro. Dos seguidos empujarán un valor al registro y luego lo llevarán directamente hacia atrás, esencialmente un NOP.

Para Ly, &es un modificador que hace que una instrucción realice su función en toda la pila.

osignifica lo mismo para ambos idiomas, pero dado que está modificado por &Ly, imprimirá la pila completa, generando abc. En> <>, solo saldrá c(como se imprime de arriba hacia abajo)

ves un NOP en Ly, que lo omite y va directo a ;, finalizando la ejecución. > <> en su lugar lo tratará como un puntero, enviando la IP hacia abajo.

Luego golpea otra flecha, enviando la IP a la izquierda. Aquí, cumple con dos osignos, salida by a.

EDITAR: guardado un byte (y arreglado> <> fallar)

LyricLy
fuente
1
Puede guardar un byte moviendo el ;a la segunda línea. Esto también tiene el beneficio de que la IP> <> no se ajusta y pasa por la segunda línea nuevamente, lo que causa un error.
Esolanging Fruit
no debería haber un; para> <>? no tomaría más bytes, solo reemplace uno de los espacios
Destructible Lemon
¿Qué tal "abc"&&ooo;? Hace que Ly se bloquee, pero solo después de imprimir "abc".
No es un árbol
... o "abc"&&o!;o<por 1 byte extra, si quieres evitar chocar.
No es un árbol
2

05AB1E y 2sable , 6 bytes

…CBAžR

Imprime ABC(OP dijo que estaba permitido) en 05AB1E y CBAen 2sable, utilizando el hecho de que 2sable era similar a 05AB1E pero žRse agregó a 05AB1E después de que 2sable fue abandonado.

Pruébalo en línea! (05AB1E)

Pruébalo en línea! (2sable)

Oliver Ni
fuente
La especificación establece que debe ser "abc" o "cba". Por mi palabra, diría que esto no es válido, pero puedo preguntarle a OP.
HyperNeutrino
Le pregunté al OP y él no ha respondido. Si esto resulta no válido, lo eliminaré.
Oliver Ni
@OliverNi Umm, si no es válido, puede agregar un por lcierto.
Erik the Outgolfer
2

PHP + JavaScript, 29 28 bytes

Esto funciona porque PHP interpreta '0'(igual que el número entero 0) como falso, mientras que JavaScript asume que es simplemente una cadena no vacía que es verdadera.

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

Esto está destinado a ejecutarse -ren PHP. En Javascript, solo pégalo en la consola.


¡Gracias a @Justin Mariner por salvarme 1 byte!

Ismael Miguel
fuente
También podría usar en "0"lugar de +![]: se convierte en 0(falso) en PHP y es una cadena (verdadero) en JS.
Justin Mariner
@JustinMariner Tienes razón, pero eso es 1 byte más.
Ismael Miguel
1
¿No es un byte más corto? +![]?print(abc):alert('cba');->"0"?alert('cba'):print(abc);
Justin Mariner
@JustinMariner OH !!! ¡¡¡De esa manera!!! Sí, es 1 byte más corto. ¡Gracias!
Ismael Miguel
2

PHP / Brainf * ck, 31 bytes

usando la -rbandera,

PHP ve die(abc)y comenta, y dado que el compilador es indulgente, se muestra abccomo una cadena en lugar de una variable vacía.

Brainf * ck solo ve los caracteres de instrucción, y el resto se ve como comentarios.

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

Pruébalo en línea! (PHP)

Pruébalo en línea! (Brainf * ck)

Stan Strum
fuente
FYI, no tienes que contar-r
Business Cat
2

Julia y Octave / Matlab, 27 bytes

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

En Octave, ambos 'a'y "a"representan la misma cadena, por 'a'=="a"lo tanto, es cierto. Sin embargo, en Julia, 'a'es un solo carácter, mientras que "a"es una cadena de un carácter. En Julia, "cba"es la salida.

Versión sin golf:

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

Perl / Ruby, 18 bytes

Rubí

print'abc'.reverse

prints cbacomo estamos llamando .reversea la cadena.

Pruébalo en línea!

Perl

print'abc'.reverse

prints abcconcatenado con el resultado de reverseque por defecto funciona en el $_que está vacío y, por lo tanto, no hay diferencia.

Pruébalo en línea!

Dom Hastings
fuente