Saya membalikkan kode sumber, Anda meniadakan output!

39

Tugas Anda, jika Anda ingin menerimanya, adalah menulis program yang menghasilkan angka bukan nol (bisa bilangan bulat atau mengambang). Bagian yang sulit adalah jika saya membalikkan kode sumber Anda, hasilnya harus bilangan bulat asli yang dinegasikan.

Aturan

  • Anda harus membangun program lengkap . Artinya, output Anda harus dicetak ke STDOUT.

  • Kedua angka tersebut harus dalam basis 10 (mengeluarkannya di basis lain atau dengan notasi ilmiah dilarang).

  • Mengeluarkan angka-angka dengan spasi tambahan / spasi terkemuka diizinkan.

  • Ini adalah kode-golf, jadi kode terpendek (asli) di setiap bahasa menang!

  • Berlaku celah default.

Contoh

Katakanlah kode sumber Anda ABCdan output yang sesuai adalah 4. Jika saya menulis CBAdan menjalankannya, hasilnya harus -4.

Sangat Radioaktif
sumber
6
Jika kita bisa membalikkan pada level bit daripada level byte, satu byte -(0x45 = 0b00101101) bekerja di Jelly - -menghasilkan -1 karena mendefinisikan literal -1, sementara (0xB4 = 0b10110100) menghasilkan 1 karena ia melakukan logika tidak dari input implisit nol. (Tentu saja berfungsi juga: p)
Jonathan Allan
@TwilightSparkle Apakah "memiliki input kosong yang tidak digunakan" berarti kita dapat mengandalkan fungsi input segera mencapai EOF?
Borka223
1
@ Borka223 Tidak, Anda mungkin tidak.
HighlyRadioactive
@ Joopy Menyalin. Saya akan menghapus itu.
HighlyRadioactive

Jawaban:

28

JavaScript (V8) , 19 byte

print(1)//)1-(tnirp

Cobalah online!


hampir identik dengan ...

C # (Visual C # Interactive Compiler) , 19 byte

Print(1)//)1-(tnirP

Cobalah online!

(terima kasih kepada @someone untuk menunjukkannya)


masih hampir sama di ...

Lua , 19 byte

print(1)--)1-(tnirp

Cobalah online!


tapi lebih pendek ...

Python 2 , 15 byte

print 1#1-tnirp

Cobalah online!


Bahkan lebih pendek di PHP, karena memiliki alat cetak ajaib ini: <?=...

PHP , 12 byte

<?=1;#;1-=?<

Cobalah online!


Bahkan lebih pendek di Ruby, karena Anda bisa inspectdaripada mencetak

Ruby , 8 byte

p 1#1- p

Cobalah online!

Arnauld
sumber
Juga C # Interaktif Print(1)//)-1(tnirP,. ( Coba online! )
kata ganti saya adalah monicareinstate
Untuk C #, program terpendek kemungkinan juga merupakan program sepele:class A{static void Main(){System.Console.Write(1);}}//}};)1-(etirW.elosnoC.metsyS{)(niaM diov citats{A ssalc
LegionMammal978
Bukan bahasa pemrograman, tetapi Anda bisa melakukannya 1<!--!<1-(9 byte) dengan HTML, yang akan menjadi -1<!--!<1ketika dibalik. Jawabannya persis sama dengan jawaban Anda.
Ismael Miguel
Kebanyakan sama di Lua:print(1)--)1-(tnirp
val mengatakan Reinstate Monica
12

/// , 4 byte

9/9-

Keluaran 9.

Cobalah online!

Terbalik:

-9/9

Keluaran -9.

Cobalah online!

Semuanya sebelum /dicetak, sedangkan sisanya diabaikan (tidak banyak menggunakan garis miring sehingga saya tidak tahu persis apa yang terjadi, tetapi tidak menghasilkan apa-apa).

Stephen
sumber
2
+1 untuk menggunakan Slash. Yang /memulai proses membaca pola, dan dengan demikian, karakter setelah itu dibaca ke dalam pola, bukan di-output.
HighlyRadioactive
2
Saya datang dengan /\-//1-dan berpikir saya pintar. : D
Tanner Swett
10

Klein 011, 5 byte

1-
@/

Cobalah online!

Terbalik

/@
-1

Cobalah online!

Ini mengambil keuntungan dari topologi unik Klein, khususnya bidang proyektif nyata. (Meskipun secara individual setiap jawaban hanya membutuhkan botol Klein).

Wisaya Gandum
sumber
10

Spasi , 21 byte

S S S T N
T   N
S T N
N
N
T   S N
T   N
T   T   S S 

Surat S(spasi), T(tab), danN (baris baru) ditambahkan hanya sebagai penyorotan.

Output 1/ -1.

Cobalah online atau coba online terbalik (dengan spasi, tab, dan baris baru saja).

Penjelasan:

Memanfaatkan Program Keluar dibangun menjadi palindrome pendek NNN.
Program reguler akan:

SSSTN  # Push 1 to the stack
TNST   # Pop and print the top of the stack as number
NNN    # Exit the program, making everything after it no-ops

Program sebaliknya akan:

SSTTN  # Push -1 to the stack
TNST   # Pop and print the top of the stack as number
NNN    # Exit the program, making everything after it no-ops

Penjelasan tambahan kecil tentang mendorong nomor:

  • Pertama S : Aktifkan Manipulasi Stack
  • Kedua S : Dorong nomor ke tumpukan
  • S atau T : Positif / negatif masing-masing
  • Beberapa S/ Tdiikuti oleh trailing N: angka dalam biner, di mana S=0danT=1

Yaitu SSTTSTSNmendorong -10.

Kevin Cruijssen
sumber
7

T-SQL, 16 byte

--Forwards:
PRINT 4--4-TNIRP

--Backwards:
PRINT-4--4 TNIRP

Dipetik 4 karena 1 terlalu sering digunakan :)

BradC
sumber
1
Jika Anda penasaran, jawaban untuk MySQL adalah select 1#1-tceles(17 byte). Anda dapat memeriksa hasilnya di sqlfiddle.com/#!9/9eecb/107825 .
Ismael Miguel
7

Japt , 2 byte

Setiap bilangan bulat digit >0dapat digunakan di tempat 2seperti dapat A-G, H, I, Jatau L( 10-16, 32, 64, -1& 100, masing-masing).

n2

Uji itu | Terbalik

The nMetode bila diterapkan ke integer, mengurangi bahwa bilangan bulat dari argumen berlalu untuk itu, yang defaultnya 0. Saat dijalankan, nmetode sedang dijalankan pada input pertama implisit, yang juga default untuk 0.

Atau, gmetode ini dapat digunakan sebagai ganti n, yang memberikan tanda hasil pengurangan argumennya dari integer yang diterapkannya.

Shaggy
sumber
7

Haskell tanpa komentar, 41 byte

Maju cetak 1+ baris baru:

main=print$!1
niam=main
"1-"!$rtStup=niam

Cobalah online!

Cetak terbalik -1tanpa baris baru (yang dapat ditambahkan dengan biaya 2 byte):

main=putStr$!"-1"
niam=main
1!$tnirp=niam

Cobalah online!

  • Baris pertama dari setiap program mencetak angka.
    • Untuk -1output string digunakan untuk menghindari tanda kurung.
    • Menggunakan $!(aplikasi ketat) alih-alih spasi memungkinkan garis yang dibalik menjadi definisi yang valid dari operator !$( $tidak akan dilakukan karena redefinisi akan memutus penggunaan).
  • Garis tengah memastikan hal itu niam ditentukan untuk baris terakhir.
  • Baris terakhir adalah definisi dari operator !$, yang tidak digunakan tetapi perlu mengurai dan mengetik centang dengan benar.
Ørjan Johansen
sumber
7

PHP , 15 13 byte

Versi PHP tanpa penyalahgunaan komentar. ohceadalah konstanta yang tidak terdefinisi, sehingga akan sama dengan nilai string namanya. Akibatnya, ini akan mencoba mencetak +1-'ohce'atau -1+'ohce'ketika terbalik. Karena 'ohce'merupakan nilai non-numerik, 0 akan digunakan sebagai gantinya dalam operasi aritmatika dan hanya 1atau -1akan dicetak.

;echo+1-ohce;

Cobalah online!

Cobalah online!

Night2
sumber
Itu pintar. Bagus!
AdmBorkBork
1
Sobat, sedihnya aku sampai pada jawaban yang sama sepertimu, terlambat 3 jam :( Milikilah dukunganku.
Ismael Miguel
6

Jelly , 2 byte

NC

Cobalah online!

Negatif, menghasilkan 0, lalu Complement, menghasilkan 1-0= 1.


CN

Cobalah online! Complement, menghasilkan 1-0= 1. Negatif, menghasilkan -1.

AdmBorkBork
sumber
6

Cubix , 7 6 5 byte

@)O(@

Coba di sini
Terbalik

Penjelasan

Kubus:

  @
) O ( @
  .

Membuka gulungan aliran kontrol, kami mengeksekusi )O(@, yang mana kenaikan, keluaran, penurunan, dan keluar.

Terbalik dan berbentuk kubus:

  @
( O ) @
  .

Membuka gulungan aliran kontrol, kami mengeksekusi (O)@ , yang mengalami penurunan, keluaran, peningkatan, dan keluar.

Versi sebelumnya

@O(.)O@

Coba di sini
Terbalik

Tidak sesingkat, tapi menyenangkan secara estetika.

Mnemonik
sumber
bagus, cara meletakkannya di kubus ukuran 1!
Giuseppe
3
@)O(@selama 5 byte dan pemulihan simetri :)
MickyT
5

Pesona Rise , 4 byte

1@Z1

Cobalah online! Coba Terbalik!

Saya tidak dapat menemukan cara untuk menggunakan kembali 1perintah, bahkan dengan mengorbankan satu atau dua byte.

1@ɩ juga berfungsi, tetapi jumlah byte yang sama.

Draco18s
sumber
Mengapa input? Pertanyaannya mengatakan program Anda tidak boleh menerima input.
HighlyRadioactive
@TwilightSparkle Saya salah membaca dan sudah memperbaikinya
Draco18s
Ya saya mengerti. Pintar.
HighlyRadioactive
5

Stack Cats -mn , 4 byte

:-:_

Cobalah online! Dalam catatan kaki saya sudah memasukkan semua solusi 4-byte lainnya. (Stack Cats mengabaikan semuanya setelah linefeed pertama.)

Coba yang sebaliknya!

Penjelasan

The -nbergantian bendera pada output numerik (dan masukan, tapi kami tidak punya), dan -mbendera biasanya hanya kenyamanan golf yang memungkinkan Anda menghindari bagian berlebihan dari kode sumber. Ini karena setiap program Stack Cats perlu memiliki simetri cermin. Dengan -mbendera, Anda hanya memberikannya setengah pertama (ditambah karakter sentral). Jadi program sebenarnya di sini adalah:

:-:_:-:

Seperti yang Anda lihat di tautan TIO pertama, ada satu ton solusi 4-byte, tetapi saya memilih yang ini karena kesederhanaannya. Stack Cats adalah berbasis tumpukan, dan program ini hanya menggunakan tumpukan awal. Karena kami tidak memiliki input apa pun, input ini berisi satu -1(penanda EOF) di atas sumur nol tanpa batas. Tiga perintah dalam program memiliki arti berikut:

:   Swap the top two stack elements.
-   Negate the top stack element (i.e. multiply by -1).
_   Pop a. Peek b. Push b-a.

Jadi di sini adalah bagaimana program memodifikasi tumpukan (status dan perintah terhuyung-huyung untuk menunjukkan bagaimana setiap perintah mengubah tumpukan dari satu negara ke yang berikutnya):

   :   -   :   _   :   -   :

-1   0   0  -1   1   0   0   1
 0  -1  -1   0   0   1   1   0
 0   0   0   0   0   0   0   0
 …   …   …   …   …   …   …   …

Ternyata, satu-satunya perintah yang benar-benar melakukan apa pun di sini adalah _yang mengubah penanda EOF kita menjadi a 1. Output pada akhir program adalah implisit, dan penanda EOF adalah opsional, jadi ini hanya mencetak1 kita dapatkan.

Sekarang jika kita membalikkan kode sumber, karena mirroring implisit, program yang sebenarnya menjadi:

_:-:-:_

Ini melakukan sesuatu yang sangat berbeda:

   _   :   -   :   -   :   _

-1   1   0   0   1  -1   0  -1
 0   0   1   1   0   0  -1  -1
 0   0   0   0   0   0   0   0
 …   …   …   …   …   …   …   …

Kali ini bagian bawah tumpukan adalah masih -1jadi itu bertindak sebagai penanda EOF dan hanya-1 di atas itu akan dicetak.

...

Sekarang dengan semua yang dikatakan, karena Stack Cats memiliki hubungan yang unik dengan kode pembalikan, saya merasa menggunakan -msedikit curang. Biasanya hanya dimaksudkan untuk menyimpan byte dengan menghilangkan bagian kode sumber yang berlebihan, tetapi di sini sebenarnya membuat tantangannya jauh lebih mudah dan bahkan program lengkapnya lebih pendek. Ini karena membalikkan program penuh hanya akan mengubah program jika berisi <>[], yang juga berarti bahwa program tersebut akhirnya menggunakan banyak tumpukan (Stack Cats sebenarnya memiliki rekaman tumpukan, di mana semua kecuali yang awal hanya diisi dengan nol untuk memulai). Selanjutnya, membalikkannya kemudian hanya menukar pasangan <>dan [], yang masih membuat eksekusi simetris. Satu-satunya cara untuk memecahkan simetri itu adalah dengan menggunakannyaI yang tidak -]atau-[atau tidak tergantung pada tanda bagian atas tumpukan. Begitu...


Stack Cats -n , 11 byte

*|]I*:*I[|*

Cobalah online! Footer lagi mencakup semua alternatif lain pada jumlah byte yang sama. Beberapa output 1 / -1 dan beberapa output 2 / -2 seperti yang ditunjukkan setelah setiap program. Saya memilih yang ini untuk menjelaskan secara acak sebagai salah satu yang menghasilkan 2.

Coba yang sebaliknya!

Penjelasan

Seperti yang saya katakan, ini sedikit lebih lama. Bahkan jika kita memang menggunakan-m notasi untuk ini, itu akan berbobot 6 byte daripada 4 di atas.

Perintah yang digunakan saat ini:

*   Toggle the least significant bit of the top of the stack.
|   Reverse the longest non-zero of prefix on this stack.
[]  Move one stack to the left/right and take the top of the current stack with you.
I   If the top of the stack is positive, -], if it's negative, -[, otherwise do nothing.
:   Swap the top two stack elements.

Program pertama hanya menggunakan dua tumpukan. Itu agak berantakan untuk dilakukan dalam seni ASCII, tetapi saya akan mencoba yang terbaik. Kurung kotak menunjukkan di mana tumpukan kepala kaset aktif, dan saya akan menempatkan perintah di antara setiap pasangan negara tumpukan.

  [-1]
…   0   0   …
    0   0
    …   …

      *

  [-2]
…   0   0   …
    0   0
    …   …

      | (does nothing)
      ]

      [-2]
…   0   0   …
    0   0
    …   …

      I

   [2]
…   0   0   …
    0   0
    …   …

      *

   [3]
…   0   0   …
    0   0
    …   …

      :

   [0]
…   3   0   …
    0   0
    …   …

      *

   [1]
…   3   0   …
    0   0
    …   …

      I

      [-1]
…   3   0   …
    0   0
    …   …

      [

  [-1]
…   3   0   …
    0   0
    …   …

      |

  [ 3]
…  -1   0   …
    0   0
    …   …

      *

  [ 2]
…  -1   0   …
    0   0
    …   …

Sekarang -1bertindak sebagai penanda EOF dan2 dicetak.

Program lainnya sama sampai [. Ini masih hampir sama sampai kedua I. Kami secara teknis akan berada di tumpukan yang berbeda, tetapi tanpa nilai pada mereka, mereka semua tidak bisa dibedakan. Tetapi kemudian perbedaan antara I[dan I]akhirnya penting:

    *|[I*:*I

      [-1]
…   3   0   0   …
    0   0   0
    …   …   …

        ]

          [-1]
…   3   0   0   …
    0   0   0
    …   …   …

        | (does nothing)
        *

          [-2]
…   3   0   0   …
    0   0   0
    …   …   …

Dan kali ini, kami tidak memiliki penanda EOF, tetapi program masih menampilkan -2.

Martin Ender
sumber
4

Zsh , 12 byte

<<<2 # 2-<<<

Cobalah online!

Maju dasar, komentar, metode terbalik.


Jika I / O kurang restriktif, maka solusi 11 byte yang lebih menarik dimungkinkan berkat Zsh yang mendukung kode pengembalian negatif:

return -127

Terbalik, 721- nruterkeluar dengan kode 127(perintah tidak ditemukan). exit -127tidak dapat digunakan, itu akan dilemparkan ke u8. Cobalah online!

Fungsi Gamma
sumber
4

CJam , 3 byte

W;1

Cobalah online!

Bagaimana mereka bekerja

Versi normal:

W    e# Push -1
;    e# Delete
1    e# Push 1
     e# Implicit display

Versi terbalik: Anda mendapatkan ide.

Luis Mendo
sumber
4

MATL , 3 byte

Nqv

Cobalah online!

Bagaimana mereka bekerja

Normal:

N   % Push number of elements in the stack: 0
q   % Subtract 1: gives -1
v   % Concatenate stack contents vertically: leaves -1 as is
    % Implicit display stack contents

Terbalik:

v   % Concatenate stack contents vertically: gives the empty array, []
q   % Subtract 1: leaves [] as is
N   % Push number of elements in the stack: 1
    % Implicit display. [] is not displayed
Luis Mendo
sumber
4

Hexagony , 5 byte

1!@!(

Cobalah online!

Setiap program yang valid harus:

  • Memiliki perintah penghentian ( @atau: ). Yang terakhir hanya berbeda untuk yang pertama ketika ada perintah gerakan penunjuk memori. Juga perintah ini tidak boleh di byte pertama atau terakhir.
  • Memiliki perintah keluaran. ( !,; juga mungkin tetapi mungkin akan membutuhkan lebih banyak byte)
  • Memiliki perintah manipulasi memori.

Karena itu, program 2 byte jelas tidak mungkin. Program 3-byte tidak dimungkinkan karena byte kedua harus menjadi perintah terminasi, dan byte pertama tidak boleh berupa perintah manipulasi mirror / IP, oleh karena itu hanya 1 byte yang dapat dieksekusi.

Saya pikir program 4-byte tidak mungkin. Program semacam itu harus memiliki bentuk a@bcdengan kisi heksagonal

 Forward:       | Backward:
                | 
  c b           |   a @
 @ a .          |  b c .
  . .           |   . .

Oleh karena itu aharus menjadi perintah pengalihan IP. Namun tidak mungkin untuk menghasilkan angka positif dan negatif dengan hanya 1 perintah manipulasi memori.

pengguna202729
sumber
+1 untuk bukti optimalitas dalam jawaban yang sepele
Jo King
3

Java 5 atau 6, 127 67 byte

enum A{A;{System.out.print(9);}}//}};)9-(tnirp.tuo.metsyS{;A{A mune

Output 9/ -9.

Tidak ada kompiler online, karena Java 5 atau 6 tidak tersedia di mana pun.

Namun Anda dapat mencoba 127 byte ini setara Java 8:
Cobalah online atau coba online terbalik .

Penjelasan:

enum A{                              // Create an enum
 A;                                  //  With a mandatory value
 {                                   //  And in a separate instance code-block:
  System.out.print(9);}}             //   Print 9 to STDOUT
//}};)9-(tnirp.tuo.metsyS{;A{A mune  // Comment and thus a no-op

Java 5 dan 6 memiliki bug yang memungkinkan Anda untuk membuat blok kode di dalam enum untuk melakukan sesuatu, meskipun tidak ada metode utama wajib program. Ini akan menghasilkan kesalahan:

java.lang.NoSuchMethodError:
Pengecualian utama di utas "main"

Tetapi akan tetap menampilkan apa yang ingin kita STDOUT dulu, jadi kita bisa mengabaikannya .

Kevin Cruijssen
sumber
3

Golang , 109 byte

package main;import "fmt";func main(){fmt.Println(1)}//})1(nltnirP.tmf{)(niam cnuf;"tmf" tropmi;niam egakcap

Dan kebalikannya:

package main;import "fmt";func main(){fmt.Println(-1)}//})1(nltnirP.tmf{)(niam cnuf;"tmf" tropmi;niam egakcap

Cobalah online!

TheMrMittens
sumber
2
Saya tidak tahu Go, tetapi tampaknya Anda dapat menghapus beberapa byte. The Printlnbisa Print, dan import "fmt";tidak membutuhkan ruang: import"fmt";. :)
Kevin Cruijssen
3

Retina , 6 byte

-`<
-

Cetakan 1.

Cobalah online!



-
<`-

Cetakan -1.

Cobalah online!

Penjelasan: 1

-`<
-

Ini ... tidak melakukan apa-apa. Karena `, ini adalah pengganti dari <ke- (dengan konfigurasi- , yang tidak melakukan apa-apa), tetapi inputnya kosong, sehingga outputnya juga kosong.


Dan tahap kedua ini cocok dengan regex kosong terhadap input kosong dan menghitung jumlah kecocokan, yaitu 1. Output tersirat.

Penjelasan: -1


-

Kali ini kami mengganti regex kosong dengan -. Ini memang mengubah input kosong menjadi satu- .

<`-

Di sini, konfigurasi benar-benar melakukan sesuatu: <mencetak input stage sebelum mengeksekusi stage, jadi kami mencetak -. Kemudian -menghitung tanda hubung dalam input tahap yang lagi-lagi 1. Karena output implisit, ini mencetak 1setelah -, memberi kita -1seperti yang diperlukan.

Martin Ender
sumber
3

TEX(MathJax), 4byte

1%1-

KodeHasilMeneruskan:1% 1-1Ke belakang:-1% 1-1

Nat
sumber
3

brainfuck , 156 byte

+++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++

Cobalah online! / Maju / mundur verifikasi di Bash

Mencetak -1ke depan dan \n1ke belakang.

Meskipun hampir sepele, saya percaya ini adalah solusi optimal untuk output tetap khusus ini.

Bukti:

  • Program tidak dapat memiliki [atau ].

    Karena itu program harus memiliki formulir <A> . <B> . <C>.

  • Masing ,- masing dapat diganti dengan jumlah yang cukup <tanpa menambah jumlah +atau -.

  • Masing +- masing hanya berguna dalam program maju atau mundur, tidak pernah keduanya.

    Bukti: + pada bagian A jelas hanya berguna dalam program penerusan, dan+ di bagian C jelas hanya berguna di program backward.

    Sebutkan shift(P)= jumlah <dalam P - jumlah >dalam program P. Pertimbangkan <B> = <D> + <E>, +di tengah berguna dalam program maju shift(E) = 0, juga berguna dalam program mundur shift(D) = 0. Namun jika shift(D) = shift(E) = 0kemudian program yang Bdijalankan baik maju atau mundur akan menambah nilai tetap ke sel saat ini sebelum mencetak kedua kalinya, yang tidak dapat terjadi karena itu ord('1') - ord('\n') != ord('1') - ord('-').

Oleh karena itu program membutuhkan setidaknya ord('-')+ord('1')+ord('\n')+ord('1') = 153 +s, 2 .s, dan setidaknya a < >atau ,karena shift(B) != 0.

pengguna202729
sumber