'abc' và 'cba'


28

Nhiệm vụ của bạn rất đơn giản, hãy viết một đoạn mã duy nhất mà khi được thực thi trong một ngôn ngữ chỉ xuất ra chuỗi 'abc'và khi được thực hiện bằng ngôn ngữ khác chỉ xuất ra chuỗi 'cba'. Chương trình sẽ không có đầu vào.

Đây là một thách thức .


4
Tôi không nghĩ đây là một bản dupe. Thực tế là chuỗi được đảo ngược là đủ khác nhau từ việc in hai chuỗi khác nhau. Tuy nhiên, tôi sẽ không (bỏ phiếu để) mở lại vì điều đó sẽ có hiệu lực ngay lập tức
Luis Mendo

4
Tôi đã bỏ phiếu để mở lại bài đăng này, vì IMO in ngược lại Chuỗi và Chuỗi khác nhau nhiều so với 2 chuỗi khác nhau. Không có câu trả lời tầm thường có thể được sửa đổi để phù hợp với thách thức này. Câu trả lời của riêng tôi sử dụng một techinque đối xứng ngược khi so sánh với các câu trả lời ở đó. Tôi đồng ý với @LuisMendo.
Ông Xcoder

2
Bạn có thể in ABCthay vìabc
Oliver Ni

5
Tôi bỏ phiếu để mở lại, một số câu trả lời sử dụng thực tế cbaabcngược; liên kết , liên kết , liên kết , liên kết , liên kết , liên kết , liên kết , liên kết , liên kết
Oliver Ni

2
'ABC''CBA'là ok, khoảng trắng hàng đầu / dấu vết / dòng mới ok nhưng phải giống nhau cho cả hai đầu ra
Chris_Rands

Câu trả lời:



21

MATLAB / Octave, 41 byte

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

Trong MATLAB randsample(2,2)cung cấp cho một vector 2 × 1, vì vậy size(...,2)1. Do đó, flipđược áp dụng dọc theo chiều thứ nhất, là một đơn, do đó, chuỗi gốc 'abc'được hiển thị:

nhập mô tả hình ảnh ở đây

Trong Octave randsample(2,2)cho một vector 1 × 2, do size(...,2)2. Do đó, flipđược áp dụng dọc theo chiều thứ hai, nghĩa là chuỗi được lật từ trái sang phải:

nhập mô tả hình ảnh ở đây


Tôi nghĩ rằng điều này sẽ ngắn hơn một vài byte nếu bạn sử dụng versionbiến thể ít thú vị hơn .
Stewie Griffin

@StewieGriffin Cảm ơn. Tôi nghĩ bây giờ đã quá muộn để thay đổi. Có thể tự đăng nó?
Luis Mendo

Không, đây là phiên bản nhàm chán của phiên bản này ... Ngoài ra, tôi không còn MATLAB nữa nên tôi sẽ không thể kiểm tra nó.
Stewie Griffin

15

-1 byte bằng cách sử dụng exitthay vì print(mặc dù điều này áp dụng cho mọi câu trả lời vào lúc này).
notjagan

@notjagan. exitin ra stderr, phải không? Không chắc chắn nếu nó sẽ là một câu trả lời hợp lệ.

@ThePirateBay Đầu ra cho STDERR được cho phép theo sự đồng thuận meta .
notjagan

Thách thức cho biết đoạn mã và in mặc dù, nó không sử dụng các quy tắc mặc định.
xnor


10

-1 byte nếu tôi thực hiện ==0 vào >0nhưng đó là đã câu trả lời khác

Python 2 , 26 byte

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

Hãy thử trực tuyến!


Python 3 , 26 byte

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

Hãy thử trực tuyến!

1/2cho 0(floordiv) trong Python 2 và 0.5(truediv) trong Python 3. Do đó, 1/2==0cho 1 trong Python 3 và 0 trong Python 2 (thực ra là booleans, nhưng đó chỉ là số nguyên), do đó, 'acbbca'[1::2] => 'cba'được đưa ra cho Python 3 và 'acbbca'[0::2] => 'abc'được cung cấp cho Python 2.


10

Excel / Google Sheets, 41 28 27 24 byte

Công thức bảng tính ẩn danh không có đầu vào và đầu ra "ABC"cho ô gọi trong Excel và "CBA"đến ô gọi trong Google Sheets

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

Trong Google Sheets, M(...)là một bí danh cho và tự động định dạng thành T(...)(viết tắt của Text()). Cuộc gọi này trả về giá trị văn bản của biến đã qua , "CBA". "CBA"không bị bắt vì lỗi, do đó "CBA"được trả vềIfError(...,"ABC")

Trong Excel, không có M(...)hàm và M(...)không phải là bí danh và do đó M("CBA")trả về công thức không tìm thấy lỗi , #NAME?. Điều này được bắt bởi IfError(...,"ABC"), mà lần lượt trở lại "ABC".


Các phiên bản trước, 27, 28, 41 Byte

Xem các chỉnh sửa để giải thích

=If(IsErr(A()),"ABC","CBA")
=If(IsErr(GT()),"ABC","CBA")
=IfError(If(Info("NUMFILE"),"ABC"),"CBA")

1
Khéo léo! .... Bạn có thể lưu 2 byte bằng cách sử dụng iserrthay vì iferrorvà 1 byte bằng cách sử dụng "HỆ THỐNG" thay vì "NUMFILE":=IF(ISERR(INFO("SYSTEM")),"cba","abc")
Adam

8

CJam / 05AB1E , 6 byte

"abc"R

Dùng thử trực tuyến:

Làm thế nào nó hoạt động trong CJam

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

Cách thức hoạt động trong 05AB1E

"abc"    Push this string
R        Reverse
         Implicitly display top of the stack

8

Với lời xin lỗi tới @HyperNeutrino vì đã đánh cắp hầu hết câu trả lời của anh ấy (tôi chưa có tiếng để bình luận)

Python 2 , 25 byte

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

Hãy thử trực tuyến!

Python 3 , 25 byte

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

Hãy thử trực tuyến!


Umm nó thực sự <1btw.
Erik the Outgolfer

@EriktheOutgolfer Không có sự thật nào cho cả hai ngôn ngữ
HyperNeutrino

Như @notjagan đề xuất, bạn có thể thay thế printbằng exit(được phép theo quy tắc của chúng tôi) và do đó tiết kiệm 1 byte.

3
Bạn nên thêm ngôn ngữ thứ hai vào câu trả lời của mình (Python3 tôi giả sử)
Zacharý

@ Zacharý Cảm ơn, tôi không nhận ra vấn đề đã được cập nhật (bản gốc chỉ là python 2 và pyhon 3)
reffu

8

Vim / Notepad.exe, 10 byte

cbaabc<esc><backspace><backspace><backspace>

2
Notepad không phải là ngôn ngữ lập trình, nhưng +1.
Jakob

7

JavaScript (NodeJS) và PHP, 46 byte

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

In abctrong JS và cbatrong PHP.

Hãy thử JS trực tuyến!

Hãy thử PHP trực tuyến! (lưu ý rằng TIO không ẩn các nhận xét HTML ( <!--... -->)


1
Làm thế nào là <!--giải thích trong Node?
Esolanging Fruit

@ Challenger5 Rõ ràng nó được hiểu là một nhận xét một dòng, chính xác như //( nguồn ). Hoạt động theo cách đó trong trình duyệt JS là tốt.
Justin Mariner

6
Điều đó thật kỳ lạ ...
Esolanging Fruit

--> blah blahlà nhận xét hợp lệ trong một số trình thông dịch JavaScript, bạn có thể xóa//
tsh

1
@JustinMariner Tôi đã thử nghiệm trên Node v8.1.3. Và hành vi được xác định trong đặc tả ES6 Phụ lục B, có nghĩa là tất cả các trình duyệt hỗ trợ ES6 nên chấp nhận nó dưới dạng nhận xét.
tsh

6

Python / Befunge, 20 18 byte

2 byte được lưu nhờ vào @karhell

print("abc")# ,,,@

Hãy thử trực tuyến! cho Python

Python thấy print("abc") sau đó một bình luận.

Hãy thử trực tuyến! cho Befunge

Befunge, loại bỏ tất cả các lệnh và các lệnh vô dụng sẽ thấy các lệnh "abc",,,@nào a, bctrên ngăn xếp và sau đó in chúng (cuối cùng vào trước ra trước).


Hơi muộn một chút, nhưng bạn có thể cạo sạch hai byte bằng cách thay thế >:#,_@bằng,,,@
karhell

#,,<@Thay vào đó hãy tiết kiệm thêm một lần nữa
Jo King

5

Python 2 và Python 3, 42 byte

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

Hãy thử trực tuyến! (Python 2)

Hãy thử trực tuyến! (Python 3)

Nghĩ rằng tôi sẽ thử một cái gì đó khác biệt ...


Tôi thích cái này, không phải là khung ngắn nhất nhưng khá chung chung, có thể rút ngắn một chút bằng cách sử dụngtry:long;print('abc')
Chris_Rands

Hoặc tốt hơn nữatry:cmp;print('abc')
Chris_Rands


Đó không phải là những gì tôi đã viết, parantheses () vẫn được yêu cầu xung quanh bản in
Chris_Rands

5

Excel / Google Sheets, 28 byte

Lấy cảm hứng từ @TaylorScott, người đã sử dụng một chức năng chỉ tồn tại trong Excel, tôi đã tìm thấy một chức năng thậm chí còn ngắn hơn chỉ tồn tại trong Google Sheets. Thuận tiện, nó được thiết kế để trả về chuỗi:

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

Làm thế nào nó hoạt động

In Google Sheets, join([arg1], arg2, arg3,...argk) will concatenate arg2 -> argk, optionally using the separator specified in arg1. In this case, it successfully returns "cba."

Excel has no join function, so iferror sees a problem and returns "abc"


1
My first ever submission - hope I am doing it right....
Adam

Nice solution :)
Taylor Scott


4

Java 8 & C, 95 bytes

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

Try it in Java 8 - resulting in "abc".
Try it in C - resulting in "cba".

Explanation:

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

As you can see in the Java-highlighted code above, the first line is a comment due to //, and the C-code is a comment due to /* ... */, resulting in:

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

Not sure how to correctly enable C-highlighting, because lang-c results in the same highlighting as Java.. But //\ will comment out the next line, which is the Java-code, resulting in:

main(){{puts("cba");}}

4

Python 2 / Python 3, 28 bytes

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

In Python 2 int(1/2*4)-1 evaluates to -1 and so prints cba. - TiO

In Python 3 it evaluates 1 so prints abc. - TiO


2
Welcome to Programming Puzzles and Code Golf
Евгений Новиков

4

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

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

78 bytes, thanks to challenger5.

58 bytes, thanks to aschepler.

56 bytes, thanks to hvd

Try it - C++!

Try it - C!


1
1) You can collapse the two #ifdefs to make a single one. 2) You can remove the space in #include <stdio.h>. 3) You can change printf("%s", to puts(. Try it online!
Esolanging Fruit

2
Or there's always the good old sizeof('x')>1?"abc":"cba" trick.
aschepler

@Challenger5 Thanks for the comment
Ivan Botero

@aschepler Thanks for the trick, i've made the changes 58 bytes :)
Ivan Botero

1
sizeof's operand does not need parentheses, it's not a function.
hvd

4

R/Cubix, 20 bytes

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

R - Try it online!

Cubix - Try it online!

For R, cat("abc") then shameless abuse of comments. For Cubix

    c a
    t (
" a b c " ) # u
@ o ; o ; o ( ;
    . .
    . .
  • "abc" Pushs a, b ad c onto the stack
  • )# Increment the c, pushs number of element in stack
  • u U-turn to the right
  • ;( Remove the count, Decrement the c
  • o;o;o@ Output cba and exit

Pushs the number on in stack


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

Fission / ><> , 11 bytes

!R"abc"ooo;

Try Fission Online

In Fission, a particle starts at R and prints abc.

Try ><> Online

In ><>, the IP starts at the top-left. ! skips the next instruction, and "abc" pushes [a,b,c] on the stack. ooo then pops and prints three times, giving cba.

Both programs end at ;


3

Ly / ><>, 20 19 bytes

"abc"&&ov
;     oo<

Try it with ><>!

Try it with Ly!

These languages are very similar, as Ly is based off ><>. However, Ly does not have 2D execution and interprets & differently, which I took advantage of here.

Both languages will start by pushing abc to the stack.

For ><>, the & instruction moves values to and fro the register. Two in a row will push a value to the register and then take it straight back, essentially a NOP.

For Ly, & is a modifier that makes an instruction perform its function on the entire stack.

o means the same thing for both languages, but since it is modified by & in Ly, it will print the whole stack, outputting abc. In ><>, it will only output c (as it is printed from the top down)

v is a NOP in Ly, which skips it and goes straight to ;, ending execution. ><> will instead treat it as a pointer, sending the IP downwards.

It then hits another arrow, sending the IP left. Here, it meets two o signs, outputting b and a.

EDIT: Saved a byte (and fixed ><> crashing)


1
You can save a byte by moving the ; to the second line. This also has the benefit that the ><> IP doesn't wrap around and go through the second line again, which causes an error.
Esolanging Fruit

shouldn't there be a ; for ><>? it wouldn't take any more bytes, just replace one of the spaces
Destructible Lemon

How about "abc"&&ooo;? It makes Ly crash, but only after printing "abc".
Not a tree

…or "abc"&&o!;o< for 1 extra byte, if you want to avoid crashing.
Not a tree



2

05AB1E and 2sable, 6 bytes

…CBAžR

Prints ABC (OP said it was allowed) in 05AB1E and CBA in 2sable, using the fact that 2sable was similar to 05AB1E but the žR was added to 05AB1E after 2sable was abandoned.

Try it online! (05AB1E)

Try it online! (2sable)


The specification states that it must be "abc" or "cba". By my word, I'd say that this is invalid, but I can ask OP.
HyperNeutrino

I asked the OP and he hasn't responded. If this turns out to be invalid, I will remove it.
Oliver Ni

@OliverNi Umm, if it's invalid you can just append a l btw.
Erik the Outgolfer

2

PHP + JavaScript, 29 28 bytes

This works because PHP interprets '0' (same as the integer number 0) as being falsy, while JavaScript assumes it is simply a non-empty string which is truthy.

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

This is meant to run with -r on PHP. In Javascript, just paste it in the console.


Thanks to @Justin Mariner for saving me 1 byte!


You could also use "0" instead of +![]: it becomes 0 (falsy) in PHP and is a string (truthy) in JS.
Justin Mariner

@JustinMariner You're right, but that's 1 byte longer.
Ismael Miguel

1
Isnt it one byte shorter? +![]?print(abc):alert('cba'); -> "0"?alert('cba'):print(abc);
Justin Mariner

@JustinMariner OH!!! That way!!! Yes, it is 1 byte shorter. Thank you!
Ismael Miguel


2

Julia and Octave/Matlab, 27 bytes

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

In Octave, both 'a' and "a" represent the same string, therefore 'a'=="a" is true. However, in Julia, 'a' is a single character while "a" is a one-character string. In Julia, "cba" is the output.

Ungolfed version:

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

2

Perl / Ruby, 18 bytes

Ruby

print'abc'.reverse

prints cba as we're calling .reverse on the string.

Try it online!

Perl

print'abc'.reverse

prints abc concatenated with the result of reverse which by default works on $_ which is empty and so makes no difference.

Try it online!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.