'abc' dan 'cba'


28

Tugas Anda sederhana, tulis cuplikan kode tunggal yang ketika dieksekusi dalam satu bahasa hanya menghasilkan string 'abc'dan ketika dieksekusi dalam bahasa lain hanya menghasilkan string 'cba'. Program seharusnya tidak menerima input.

Ini adalah tantangan .


4
Saya tidak berpikir ini adalah penipuan sama sekali. Fakta bahwa string terbalik cukup berbeda dari mencetak dua string yang berbeda. Saya tidak akan (memilih untuk) membuka kembali, karena itu akan memiliki efek langsung
Luis Mendo

4
Saya memilih untuk membuka kembali posting ini, karena IMO mencetak kebalikan dari String dan String jauh berbeda dari 2 yang berbeda. Tidak ada jawaban yang dapat dimodifikasi untuk memenuhi tantangan ini. Jawaban saya sendiri menggunakan teknik simetri terbalik jika dibandingkan dengan jawaban di sana. Saya setuju dengan @LuisMendo.
Tn. Xcoder

2
Bisakah Anda mencetak ABCalih-alihabc
Oliver Ni

5
Aku memilih untuk membuka kembali, beberapa jawaban menggunakan fakta cbaadalah abcmundur; tautan , tautan , tautan , tautan , tautan , tautan , tautan , tautan , tautan
Oliver Ni

2
'ABC'dan 'CBA'ok, memimpin / membuntuti spasi / baris baru ok tapi harus sama untuk kedua output
Chris_Rands

Jawaban:



21

MATLAB / Oktaf, 41 byte

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

Dalam MATLAB randsample(2,2)memberikan vektor 2 × 1, begitu size(...,2)juga 1. Dengan demikian flipditerapkan sepanjang dimensi pertama, yang merupakan singleton, sehingga string asli 'abc'ditampilkan:

masukkan deskripsi gambar di sini

Dalam Oktaf randsample(2,2)memberikan vektor 1 × 2, begitu size(...,2)juga 2. Dengan demikian flipditerapkan sepanjang dimensi kedua, yaitu string diputar dari kiri ke kanan:

masukkan deskripsi gambar di sini


Saya pikir ini akan menjadi beberapa byte lebih pendek jika Anda menggunakan versionvarian yang kurang menarik .
Stewie Griffin

@StewieGriffin Terima kasih. Saya pikir sudah terlambat untuk berubah sekarang. Mungkin mempostingnya sendiri?
Luis Mendo

Nah, ini versi yang membosankan dari yang ini ... Juga, saya tidak punya MATLAB lagi jadi saya tidak akan bisa mengujinya.
Stewie Griffin

15

25 byte

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

Cobalah online! ( Python 2 )

Cobalah online! ( Python 3 )


-1 byte dengan menggunakan exitbukan print(meskipun ini berlaku untuk setiap jawaban seperti yang sekarang).
notjagan

@ notjagan. exitmencetak ke stderr, bukan? Tidak yakin apakah itu akan menjadi jawaban yang valid.

@ThePirateBay Keluaran ke STDERR diizinkan sesuai konsensus meta .
notjagan

Tantangannya mengatakan potongan kode dan cetak, itu tidak menggunakan aturan standar.
xnor


10

-1 byte jika saya melakukan ==0ke >0tapi itu sudah jawaban lain

Python 2 , 26 byte

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

Cobalah online!


Python 3 , 26 byte

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

Cobalah online!

1/2memberi 0(floordiv) dengan Python 2 dan 0.5(truediv) dengan Python 3. Jadi, 1/2==0berikan 1 pada Python 3 dan 0 pada Python 2 (sebenarnya, boolean, tetapi itu hanya bilangan bulat), jadi 'acbbca'[1::2] => 'cba'diberikan untuk Python 3 dan 'acbbca'[0::2] => 'abc'diberikan untuk Python 2.


10

Excel / Google Sheets, 41 28 27 24 Bytes

Rumus lembar kerja anonim yang tidak mengambil input dan output "ABC"ke sel panggilan di Excel dan "CBA"ke sel panggilan di Google Sheets

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

Di Google Sheets, M(...)adalah alias untuk dan di-autoformed ke T(...)(kependekan dari Text()). Panggilan ini mengembalikan nilai teks dari variabel yang dikirimkan "CBA",. "CBA"tidak ditangkap sebagai kesalahan, jadi "CBA"dikembalikan olehIfError(...,"ABC")

Di Excel, tidak ada M(...)fungsi, dan M(...)bukan alias dan karenanya M("CBA")mengembalikan rumus tidak ditemukan kesalahan #NAME?,. Ini ditangkap oleh IfError(...,"ABC"), yang pada gilirannya kembali "ABC".


Versi Sebelumnya, 27, 28, 41 Bytes

Lihat hasil edit untuk penjelasan

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

1
Rapi! .... Anda dapat menyimpan 2 byte dengan menggunakan iserralih-alih iferrordan 1 byte dengan menggunakan "SISTEM" alih-alih "NUMFILE":=IF(ISERR(INFO("SYSTEM")),"cba","abc")
Adam

8

CJam / 05AB1E , 6 byte

"abc"R

Cobalah online:

Cara kerjanya di CJam

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

Cara kerjanya di 05AB1E

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

8

Dengan permintaan maaf kepada @HyperNeutrino karena mencuri sebagian besar jawabannya (saya belum memiliki reputasi untuk berkomentar)

Python 2 , 25 byte

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

Cobalah online!

Python 3 , 25 byte

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

Cobalah online!


Umm itu sebenarnya <1btw.
Erik the Outgolfer

@EriktheOutgolfer Tidak itu benar untuk kedua bahasa
HyperNeutrino

Seperti yang disarankan @notjagan, Anda dapat mengganti printdengan exit(yang diizinkan oleh aturan kami) dan karenanya menghemat 1 byte.

3
Anda harus menambahkan bahasa kedua ke jawaban Anda (Python3 saya anggap)
Zacharý

@ Zacharý Terima kasih, saya tidak menyadari masalah telah diperbarui (aslinya hanya python 2 dan pyhon 3)
reffu

8

Vim / Notepad.exe, 10 byte

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

2
Notepad bukan bahasa pemrograman, tetapi +1.
Jakob

7

JavaScript (NodeJS) dan PHP, 46 byte

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

Mencetak abcdalam JS dan cbadalam PHP.

Coba JS online!

Coba PHP online! (perhatikan bahwa TIO tidak menyembunyikan komentar HTML ( <!--... -->)


1
Bagaimana cara <!--ditafsirkan dalam Node?
Buah Esolanging

@ Challenger5 Tampaknya ditafsirkan sebagai komentar satu baris, persis seperti //( sumber ). Bekerja seperti itu di browser JS juga.
Justin Mariner

6
Itu aneh ...
Buah Esolanging

--> blah blahadalah komentar yang valid dalam beberapa penerjemah JavaScript, Anda dapat menghapus//
tsh

1
@JustinMariner Saya telah menguji pada Node v8.1.3. Dan perilaku yang didefinisikan dalam spesifikasi ES6, Annex B, yang berarti semua browser yang mendukung ES6 harus menerimanya sebagai komentar.
tsh

6

Python / Befunge, 20 18 byte

2 byte disimpan berkat @karhell

print("abc")# ,,,@

Cobalah online! untuk Python

Python melihat print("abc")komentar.

Cobalah online! untuk Befunge

Di luar, menghapus semua nops dan perintah yang tidak berguna melihat "abc",,,@yang menempatkan a, bdan cpada stack dan kemudian mencetaknya (last in-first out).


Agak terlambat, tetapi Anda dapat mencukur dua byte dengan mengganti >:#,_@oleh,,,@
karhell

Simpan satu lagi dengan #,,<@bukan
Jo King

5

Python 2 dan Python 3, 42 byte

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

Cobalah online! (Python 2)

Cobalah online! (Python 3)

Kupikir aku akan mencoba sesuatu yang berbeda ...


Saya suka yang ini, bukan yang terpendek tapi cukup kerangka kerja generik, bisa disingkat sedikit dengan menggunakantry:long;print('abc')
Chris_Rands

Atau lebih baik lagitry:cmp;print('abc')
Chris_Rands


Bukan itu yang saya tulis, paranthes () masih diperlukan saat print
Chris_Rands

5

Excel / Google Sheets, 28 byte

Terinspirasi oleh @TaylorScott, yang menggunakan fungsi yang hanya ada di Excel, saya menemukan fungsi yang lebih pendek yang hanya ada di Google Sheets. Nyaman, ini dirancang untuk mengembalikan string:

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

Bagaimana itu bekerja

Di Google Sheets, join([arg1], arg2, arg3,...argk)akan menggabungkan arg2 -> argk , opsional menggunakan pemisah yang ditentukan dalam arg1 . Dalam hal ini, berhasil mengembalikan "cba."

Excel tidak memiliki joinfungsi, jadi iferrorlihat masalah dan kembalikan "abc"


1
Kiriman pertama saya - harap saya melakukannya dengan benar ....
Adam

Solusi bagus :)
Taylor Scott


4

Java 8 & C, 95 byte

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

Cobalah di Java 8 - menghasilkan "abc".
Coba di C - menghasilkan "cba".

Penjelasan:

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

Seperti yang Anda lihat dalam kode Java-highlighted di atas, baris pertama adalah komentar karena //, dan kode-C adalah komentar karena /* ... */, menghasilkan:

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

Tidak yakin cara mengaktifkan penyorotan C dengan benar, karena lang-cmenghasilkan penyorotan yang sama dengan Java .. Tetapi //\akan mengomentari baris berikutnya, yang merupakan kode Java, menghasilkan:

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

4

Python 2 / Python 3, 28 byte

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

Dalam Python 2 int(1/2*4)-1mengevaluasi -1dan mencetak cba. - TiO

Dalam Python 3 itu mengevaluasi 1cetakan abc. - TiO


2
Selamat datang di Programming Puzzles and Code Golf
Евгений Новиков

4

C dan C ++, 115 , 78 , 58 , 56 byte

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

78 byte, terima kasih kepada penantang5 .

58 byte, terima kasih kepada aschepler .

56 byte, terima kasih kepada hvd

Cobalah - C ++!

Cobalah - C!


1
1) Anda dapat menutup keduanya #ifdefuntuk membuat satu. 2) Anda dapat menghapus ruang di #include <stdio.h>. 3) Anda dapat mengubah printf("%s",ke puts(. Cobalah online!
Buah Esolanging

2
Atau selalu ada sizeof('x')>1?"abc":"cba"trik lama yang bagus .
aschepler

@ Challenger5 Terima kasih atas komentarnya
Ivan Botero

@aschepler Terima kasih atas triknya, saya telah membuat perubahan 58 byte :)
Ivan Botero

1
sizeofOperan tidak membutuhkan tanda kurung, itu bukan fungsi.
hvd

4

R / Cubix , 20 byte

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

R - Cobalah online!

Cubix - Cobalah online!

Untuk R, cat("abc")maka penyalahgunaan komentar tidak tahu malu. Untuk Cubix

    c a
    t (
" a b c " ) # u
@ o ; o ; o ( ;
    . .
    . .
  • "abc" Mendorong a, b ad c ke tumpukan
  • )# Menambah c, mendorong jumlah elemen dalam tumpukan
  • u Putar balik ke kanan
  • ;( Hapus hitungan, Mengurangi c
  • o;o;o@ Output cba dan keluar

Mendorong nomor dalam tumpukan


2
Anehnya saya senang dengan cara yang cat(benar-benar diabaikan oleh Cubix.
Giuseppe



3

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

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

3

Fission / > <> , 11 byte

!R"abc"ooo;

Coba Fission Online

Dalam Fission, sebuah partikel dimulai Rdan dicetak abc.

Coba> <> Online

Di> <>, IP dimulai di kiri atas. !lewati instruksi berikutnya, dan "abc"tekan [a, b, c] pada stack. oookemudian muncul dan mencetak tiga kali, memberi cba.

Kedua program berakhir pada ;


3

Ly / > <> , 20 19 byte

"abc"&&ov
;     oo<

Cobalah dengan> <>!

Cobalah dengan Ly!

Bahasa-bahasa ini sangat mirip, karena Ly didasarkan dari> <>. Namun, Ly tidak memiliki eksekusi 2D dan interpretasi yang &berbeda, yang saya manfaatkan di sini.

Kedua bahasa akan mulai dengan mendorong abcke tumpukan.

Untuk> <>, &instruksi memindahkan nilai ke sana kemari register. Dua berturut-turut akan mendorong nilai ke register dan kemudian langsung membawanya kembali, pada dasarnya NOP.

Untuk Ly, &adalah pengubah yang membuat instruksi melakukan fungsinya pada seluruh tumpukan.

oberarti hal yang sama untuk kedua bahasa, tetapi karena itu diubah oleh &di Ly, itu akan mencetak seluruh tumpukan, keluaran abc. Di> <>, itu hanya akan menghasilkan c(seperti yang dicetak dari atas ke bawah)

vadalah NOP di Ly, yang melompati dan langsung menuju ;, mengakhiri eksekusi. > <> Sebagai gantinya akan memperlakukannya sebagai pointer, mengirim IP ke bawah.

Kemudian klik panah lain, mengirim IP kiri. Di sini, ia bertemu dua otanda, keluaran bdan a.

EDIT: Menyimpan byte (dan memperbaiki> <> macet)


1
Anda dapat menyimpan byte dengan memindahkannya ;ke baris kedua. Ini juga memiliki keuntungan bahwa IP> <> tidak membungkus dan melewati baris kedua lagi, yang menyebabkan kesalahan.
Buah Esolanging

tidak seharusnya ada; untuk> <>? tidak akan memerlukan byte lagi, cukup ganti salah satu spasi
Destructible Lemon

Bagaimana dengan "abc"&&ooo;? Itu membuat Ly crash, tetapi hanya setelah mencetak "abc".
Bukan pohon

… Atau "abc"&&o!;o<untuk 1 byte tambahan, jika Anda ingin menghindari crash.
Bukan pohon



2

05AB1E dan 2sable , 6 byte

…CBAžR

Cetakan ABC(OP mengatakan itu diizinkan) di 05AB1E dan CBA2sable, menggunakan fakta bahwa 2sable mirip dengan 05AB1E tetapi žRditambahkan ke 05AB1E setelah 2sable ditinggalkan.

Cobalah online! (05AB1E)

Cobalah online! (2sable)


Spesifikasi menyatakan bahwa itu harus "abc" atau "cba". Dengan kata saya, saya akan mengatakan bahwa ini tidak valid, tetapi saya dapat meminta OP.
HyperNeutrino

Saya bertanya kepada OP dan dia belum menanggapi. Jika ini ternyata tidak valid, saya akan menghapusnya.
Oliver Ni

@OliverNi Umm, jika tidak valid Anda bisa menambahkan lbtw.
Erik the Outgolfer

2

PHP + JavaScript, 29 28 byte

Ini berfungsi karena PHP mengartikan '0'(sama dengan bilangan bulat 0) sebagai falsy, sementara JavaScript menganggapnya hanyalah string kosong yang benar.

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

Ini dimaksudkan untuk dijalankan dengan -rPHP. Dalam Javascript, cukup tempel di konsol.


Terima kasih kepada @Justin Mariner karena telah menyelamatkan saya 1 byte!


Anda juga bisa menggunakan "0"sebagai ganti +![]: itu menjadi 0(falsy) di PHP dan merupakan string (kebenaran) di JS.
Justin Mariner

@JustinMariner Anda benar, tapi itu 1 byte lebih lama.
Ismael Miguel

1
Bukankah lebih pendek satu byte? +![]?print(abc):alert('cba');->"0"?alert('cba'):print(abc);
Justin Mariner

@JustinMariner OH !!! Begitu !!! Ya, ini lebih pendek 1 byte. Terima kasih!
Ismael Miguel


2

Julia dan Octave / Matlab, 27 byte

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

Dalam Oktaf, keduanya 'a'dan "a"mewakili string yang sama, oleh karena 'a'=="a"itu benar. Namun, dalam Julia, 'a'adalah karakter tunggal sedangkan "a"string satu karakter. Di Julia,"cba" adalah output.

Versi tidak disatukan:

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

2

Perl / Ruby, 18 byte

Rubi

print'abc'.reverse

prints cbaseperti yang kita panggil.reverse string.

Cobalah online!

Perl

print'abc'.reverse

prints abcdigabungkan dengan hasil reverseyang secara default berfungsi$_ mana kosong dan tidak ada bedanya.

Cobalah online!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.