'abc' e 'cba'

28

Sua tarefa é simples, escreva um único trecho de código que, quando executado em um idioma, gera apenas a sequência 'abc'e, quando executado em outro idioma, gera apenas a sequência 'cba'. O programa não deve receber entrada.

Este é um desafio do .

Chris_Rands
fonte
4
Eu não acho que isso seja uma bobagem. O fato de a string ser revertida é diferente o suficiente da impressão de duas strings diferentes. Eu não vou (votar para) reabrir, embora, como que teria efeito imediato
Luis Mendo
4
Votei em reabrir este post, porque a IMO imprimindo o reverso de uma String e uma String é muito diferente de duas diferentes. Nenhuma resposta pode ser modificada trivialmente para atender a esse desafio. Minha própria resposta usa uma técnica de simetria reversa quando comparada às respostas existentes. Eu concordo com @LuisMendo.
Mr. Xcoder
2
Você pode imprimir em ABCvez deabc
Oliver Ni
5
Eu voto para reabrir, algumas respostas usam o fato cbaé ao abccontrário; ligação , ligação , ligação , ligação , ligação , ligação , ligação , ligação , ligação
Oliver Ni
2
'ABC'e 'CBA'é ok, levando / espaços em branco / novas linhas ok, mas deve ser a mesma para ambas as saídas
Chris_Rands

Respostas:

21

MATLAB / oitava, 41 bytes

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

Em MATLAB randsample(2,2)dá um vetor 2 × 1, assim size(...,2)é 1. Assim, flipé aplicado ao longo da primeira dimensão, que é um singleton, para que a sequência original 'abc'seja exibida:

insira a descrição da imagem aqui

Em Octave randsample(2,2)fornece um vetor 1 × 2, assim size(...,2)é 2. Assim, flipé aplicada ao longo da segunda dimensão, ou seja, a sequência é invertida da esquerda para a direita:

insira a descrição da imagem aqui

Luis Mendo
fonte
Eu acho que isso seria alguns bytes mais curto se você usar a versionvariante menos interessante .
Stewie Griffin
@StewieGriffin Thanks. Eu acho que é tarde demais para mudar agora. Talvez postá-lo você mesmo?
Luis Mendo
Não, é uma versão chata deste ... Além disso, eu não tenho mais o MATLAB, então não poderei testá-lo.
Stewie Griffin
15

25 bytes

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

Experimente online! ( Python 2 )

Experimente online! ( Python 3 )

Erik, o Outgolfer
fonte
-1 byte usando em exitvez de print(embora isso se aplique a todas as respostas a partir de agora).
notjagan
@notjagan. exitimprime para stderr, não é? Não tenho certeza se seria uma resposta válida.
@ThePirateBay A saída para STDERR é permitida conforme meta consenso .
precisa saber é
O desafio diz que o snippet de código e a impressão são impressos, mas não estão usando regras padrão.
Xnor
10

-1 byte se eu fizer ==0em >0mas isso já é outra resposta

Python 2 , 26 bytes

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

Experimente online!


Python 3 , 26 bytes

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

Experimente online!

1/20(floordiv) em Python 2 e 0.5(truediv) em Python 3. Assim, 1/2==0dá uma em Python 3 e 0 em Python 2 (na verdade, booleanos, mas estes são apenas números inteiros), assim'acbbca'[1::2] => 'cba' é dado para o Python 3 e 'acbbca'[0::2] => 'abc'é dado para o Python 2)

HyperNeutrino
fonte
10

Planilhas do Excel / Google, 41 28 27 24 Bytes

Fórmula de planilha anônima que não aceita entradas e saídas "ABC" na célula de chamada no Excel e "CBA"na célula de chamada no Planilhas Google

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

No Planilhas Google, M(...)é um alias para e formatado automaticamente para T(...)(abreviação de Text()). Essa chamada retorna o valor de texto da variável passada "CBA",. "CBA"não é capturado como um erro, então "CBA"é retornado porIfError(...,"ABC")

No Excel, não há M(...)função e M(...)não é um alias e, portanto, M("CBA")retorna a fórmula de erro não encontrado #NAME?,. Isso é capturado pelo IfError(...,"ABC")que, por sua vez, retorna "ABC".


Versões anteriores, 27, 28, 41 bytes

Veja as edições para explicações

=If(IsErr(A()),"ABC","CBA")
=If(IsErr(GT()),"ABC","CBA")
=IfError(If(Info("NUMFILE"),"ABC"),"CBA")
Taylor Scott
fonte
1
Arrumado! .... Você pode salvar 2 bytes usando iserrem vez de iferrore 1 byte usando "SYSTEM" em vez de "NUMFILE":=IF(ISERR(INFO("SYSTEM")),"cba","abc")
Adam
8

CJam / 05AB1E , 6 bytes

"abc"R

Experimente online:

Como funciona no CJam

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

Como funciona no 05AB1E

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

Pedimos desculpas a @HyperNeutrino por roubar a maior parte de sua resposta (ainda não tenho reputação de comentar)

Python 2 , 25 bytes

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

Experimente online!

Python 3 , 25 bytes

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

Experimente online!

reffu
fonte
Umm, na verdade é <1btw.
Erik the Outgolfer
@EriktheOutgolfer Não é truthy para ambas as línguas
HyperNeutrino
Como o @notjagan sugeriu, você pode substituir printpor exit(o que é permitido pelas nossas regras) e, portanto, salvar 1 byte.
3
Você deve adicionar a segunda língua para a sua resposta (Python3 Presumo)
Zachary
@ Zachary Obrigado, eu não sabia que o problema tinha sido atualizado (o original foi apenas python 2 e pyhon 3)
reffu
8

Vim / Notepad.exe, 10 bytes

cbaabc<esc><backspace><backspace><backspace>
m-chrzan
fonte
2
O bloco de notas não é uma linguagem de programação, mas +1.
Jakob
7

JavaScript (NodeJS) e PHP, 46 bytes

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

Imprime abcem JS e cbaem PHP.

Experimente o JS online!

Experimente o PHP online! (observe que o TIO não oculta os comentários em HTML ( <!--... -->)

Justin Mariner
fonte
1
Como é <!--interpretado no Node?
Esolanging Fruit 09/08/19
@ Challenger5 É aparentemente interpretado como um comentário de uma linha, exatamente como //( fonte ). Funciona dessa maneira no JS do navegador também.
23678 Justin Mariner
6
Isso é estranho ...
Esolanging Fruit
--> blah blahé um comentário válido em algum intérprete de JavaScript, você pode apenas remover//
tsh
1
@JustinMariner eu testei no Node v8.1.3. E o comportamento definido no anexo B da especificação ES6, o que significa que todos os navegadores que suportam o ES6 devem aceitá-lo como comentário.
TSH
6

Python / Befunge, 20 18 bytes

2 bytes salvos graças a @karhell

print("abc")# ,,,@

Experimente online! para Python

Python vê print("abc")então um comentário.

Experimente online! para Befunge

Befunge, removendo todos os NOPs e comandos inúteis vê "abc",,,@o que coloca a, be cna pilha e, em seguida, imprime-(último in - first out).

Uriel
fonte
Um pouco tarde, mas você pode >:#,_@,,,@
economizar
Economize mais um em #,,<@vez disso
Jo King
5

Python 2 e Python 3, 42 bytes

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

Experimente online! (Python 2)

Experimente online! (Python 3)

Pensei em tentar algo diferente ...

totalmente humano
fonte
Eu gosto deste, não o framework mais curto, mas bastante genérico, pode ser abreviado um pouco usandotry:long;print('abc')
#
Ou melhor aindatry:cmp;print('abc')
Chris_Rands
Isso não é o que eu escrevi, parantheses () ainda necessários em torno de impressão
Chris_Rands
5

Planilhas do Excel / Google, 28 bytes

Inspirado em @TaylorScott, que usou uma função que só existe no Excel, eu encontrei uma função ainda mais curta que existe apenas no Planilhas Google. Convenientemente, ele foi projetado para retornar seqüências de caracteres:

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

Como funciona

No Planilhas Google, join([arg1], arg2, arg3,...argk)concatenará arg2 -> argk , opcionalmente usando o separador especificado em arg1 . Nesse caso, ele retorna com êxito "cba".

O Excel não tem joinfunção, então iferrorvê um problema e retorna "abc"

Adão
fonte
1
Minha primeira sempre submissão - esperança que eu estou fazendo certo ....
Adam
Solução agradável :)
Taylor Scott
4

CJam e Gaia , 8 bytes

'c'b'a]$

Experimente no CJam!

Experimente em Gaia!

Explicação

Nos dois idiomas, isso define uma lista de caracteres.

No CJam, $é uma espécie, por isso se torna abc.

Em Gaia, $junta a lista em uma sequência, dando cba.

Gato de negócios
fonte
Adicionei Gaia à lista de idiomas do golfe ; entre em contato se tiver algum erro de detalhes.
ETHproductions
@ETHproductions Parece bom para mim.
Business Cat
4

Java 8 e C, 95 bytes

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

Experimente no Java 8 - resultando em "abc".
Experimente em C - resultando em "cba".

Explicação:

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

Como você pode ver no código destacado em Java acima, a primeira linha é um comentário devido a //, e o código C é um comentário devido a /* ... */, resultando em:

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

Não tenho certeza de como habilitar corretamente o realce C, porque lang-cresulta no mesmo realce que Java. Mas //\comentaremos a próxima linha, que é o código Java, resultando em:

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

Python 2 / Python 3, 28 bytes

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

No Python 2 int(1/2*4)-1avalia -1e imprime cba. - TiO

No Python 3, ele avalia as 1impressões abc. - TiO


fonte
2
Bem-vindo à Programação Puzzles e Código Golf
Евгений Новиков
4

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

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

78 bytes, graças ao challenger5 .

58 bytes, graças ao aschepler .

56 bytes, graças ao hvd

Experimente - C ++!

Experimente - C!

Ivan Botero
fonte
1
1) Você pode recolher os dois #ifdefs para criar um único. 2) Você pode remover o espaço #include <stdio.h>. 3) Você pode mudar printf("%s",para puts(. Experimente online!
Esolanging Fruit
2
Ou sempre há o bom e velho sizeof('x')>1?"abc":"cba"truque.
aschepler
@ Challenger5 Obrigado pelo comentário
Ivan Botero
Graças @aschepler para o truque, eu fiz as alterações 58 bytes :)
Ivan Botero
1
sizeofO operando não precisa de parênteses, não é uma função.
hvd
4

R / Cubix , 20 bytes

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

R - Experimente online!

Cubix - Experimente online!

Para R, cat("abc")então abuso descarado de comentários. Para Cubix

    c a
    t (
" a b c " ) # u
@ o ; o ; o ( ;
    . .
    . .
  • "abc" Empurra a, b ad c para a pilha
  • )# Incrementar c, empurra o número de elementos na pilha
  • u Vire à direita para a direita
  • ;( Remova a contagem, diminua oc
  • o;o;o@ Saída cba e saída

Empurra o número na pilha

MickyT
fonte
2
I am strangely pleased by the way that cat( is totally ignored by Cubix.
Giuseppe
3

Python 2 e Foo , 16 bytes

print"abc"[::-1]

Python 2

print"abc"[::-1]

Experimente o Python 2 online!

Explicação

print"abc"[::-1]

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

Foo

"abc"

Experimente o Foo online!

Explicação

"abc"

"abc"               print the string "abc"
totalmente humano
fonte
3

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

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

Fissão / > <> , 11 bytes

!R"abc"ooo;

Experimente a Fissão Online

Em Fissão, uma partícula começa em Re imprime abc.

Experimente> <> Online

Em> <>, o IP inicia no canto superior esquerdo. !pula a próxima instrução e "abc"pressiona [a, b, c] na pilha. ooodepois aparece e imprime três vezes, dando cba.

Ambos os programas terminam em ;

KSmarts
fonte
3

Ly / > <> , 20 19 bytes

"abc"&&ov
;     oo<

Experimente com> <>!

Experimente com Ly!

Esses idiomas são muito semelhantes, pois Ly se baseia em> <>. No entanto, Ly não tem execução 2D e interpreta& diferente, da qual aproveitei aqui.

Os dois idiomas começarão pressionando abc para a pilha.

Para> <>, a &instrução move valores para lá e para cá do registrador. Dois em uma linha empurrarão um valor para o registrador e o levarão de volta, essencialmente um NOP.

Para Ly, &é um modificador que faz uma instrução desempenhar sua função em toda a pilha.

osignifica a mesma coisa para os dois idiomas, mas, como é modificado &em Ly, ele imprimirá a pilha inteira, produzindo abc. Em> <>, ele produzirá apenasc (como é impresso de cima para baixo)

v é um NOP em Ly, que pula e vai direto para ; , finalizando a execução. > <> o tratará como um ponteiro, enviando o IP para baixo.

Em seguida, ele atinge outra seta, enviando o IP para a esquerda. Aqui, ele encontra dois osinais, saída be a.

EDIT: salvou um byte (e corrigiu> <> travamento)

LyricLy
fonte
1
Você pode salvar um byte movendo o ;para a segunda linha. Isso também tem o benefício de que o IP <> não circula e passa pela segunda linha novamente, o que causa um erro.
Esolanging Fruit
não deveria haver um; para> <>? não levaria mais nenhum bytes, basta substituir um dos espaços
Destrutível Lemon
Que tal "abc"&&ooo;? Faz Ly travar, mas somente após a impressão "abc".
Não é uma árvore
… Ou "abc"&&o!;o<por 1 byte extra, se você quiser evitar falhas.
Não uma árvore
2

05AB1E e 2sable , 6 bytes

…CBAžR

Impressões ABC(OP disse que era permitido) em 05AB1E e CBAem 2sable, usando o fato de que 2sable era semelhante a 05AB1E, mas žRfoi adicionado a 05AB1E após o 2sable ser abandonado.

Experimente online! (05AB1E)

Experimente online! (2sable)

Oliver Ni
fonte
A especificação afirma que deve ser "abc" ou "cba". Pela minha palavra, eu diria que isso é inválido, mas posso perguntar ao OP.
HyperNeutrino
Eu perguntei ao OP e ele não respondeu. Se isso for inválido, eu o removerei.
Oliver Ni
@OliverNi Umm, se for inválido, você pode simplesmente adicionar um lbtw.
Erik the Outgolfer
2

PHP + JavaScript, 29 28 bytes

Isso funciona porque o PHP interpreta '0'(o mesmo que o número inteiro 0) como sendo falso, enquanto o JavaScript assume que é simplesmente uma string não vazia que é verdadeira.

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

Isso deve ser executado -rno PHP. Em Javascript, basta colá-lo no console.


Obrigado a Justin Mariner por me salvar 1 byte!

Ismael Miguel
fonte
Você também pode usar em "0"vez de +![]: torna-se 0(falso) no PHP e é uma string (verdade) em JS.
23630 Justin Mariner
@ JustinMariner Você está certo, mas isso é 1 byte a mais.
Ismael Miguel
1
Não é um byte mais curto? +![]?print(abc):alert('cba');->"0"?alert('cba'):print(abc);
Justin Mariner
@JustinMariner OH !!! Dessa maneira!!! Sim, é 1 byte mais curto. Obrigado!
Ismael Miguel
2

PHP / Brainf * ck, 31 bytes

usando o -r bandeira

O PHP vê die(abc)e comenta, e como o compilador perdoa, ele geraabc como uma string em vez de uma variável vazia.

Brainf * ck vê apenas os caracteres da instrução e o restante é visto como comentários.

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

Experimente online!(PHP)

Experimente online! (Brainf * ck)

Stan Strum
fonte
Para sua informação, você não precisa contar #-r
Business Cat
2

Julia e Octave / Matlab, 27 bytes

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

Na oitava, ambos 'a'e "a"representam a mesma sequência, portanto, 'a'=="a"é verdade. No entanto, em Julia, 'a'é um único personagem enquanto "a" é uma sequência de um caractere. Em Julia, "cba"é a saída.

Versão não destruída:

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

Perl / Ruby, 18 bytes

Rubi

print'abc'.reverse

prints cbacomo estamos chamando .reversena string.

Experimente online!

Perl

print'abc'.reverse

prints abcconcatenado com o resultado do reversequal, por padrão, trabalha $_vazio e, portanto, não faz diferença.

Experimente online!

Dom Hastings
fonte