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


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í


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 )


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


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

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

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!


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>

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


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


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


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"


1
Mi primera presentación: espero hacerlo bien ...
Adam

Buena solución :)
Taylor Scott


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

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


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!


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


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

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 ;


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)


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)


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!


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

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

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!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.