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


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


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 )


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


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

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

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!


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>

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


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


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


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"


1
Minha primeira sempre submissão - esperança que eu estou fazendo certo ....
Adam

Solução agradável :)
Taylor Scott


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

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


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!


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


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



3

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

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


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)


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)


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!


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

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

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!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.