Saya pikir tidak ada cukup pertanyaan mudah di sini yang bisa dicoba oleh pemula!
Tantangannya: Diberikan string input acak 1 dan 0 seperti:
10101110101010010100010001010110101001010
Tulis kode terpendek yang menghasilkan invers bit-wise seperti:
01010001010101101011101110101001010110101
=&'0'
bekerja untuk jumlah byte yang sama.GolfScript , 5 byte
Cobalah online.
Bagaimana itu bekerja
GolfScript membaca seluruh input dari STDIN dan menempatkannya di tumpukan sebagai string.
{}%
menelusuri semua karakter dalam string dan mengeksekusi blok kode untuk semuanya.1^
menghitung AT atau karakter eksklusif dari kode ASCII dengan 1. “0” sesuai dengan kode ASCII 48, “1” ke kode ASCII 49.Sejak
48 ^ 1 = 49
dan49 ^ 1 = 48
, ini mengubah 0 menjadi 1 dan 1 menjadi 0.Setelah selesai, GolfScript mencetak string yang dimodifikasi.
sumber
CJam - 4
Ini untuk setiap karakter dengan 1.
Tidak seperti jawaban CJam lainnya, saya tidak menganggap input sudah ada di stack.
Cobalah di http://cjam.aditsu.net/
sumber
f
.kode mesin x86 pada DOS -
141311 byteYa, memang jadi lebih pendek lagi! Setelah menulis solusi untuk tantangan yang tidak terkait , saya perhatikan bahwa trik yang sama dapat diterapkan bahkan di sini. Jadi di sini kita mulai:
Majelis yang dikomentari:
Solusi sebelumnya - 13 byte
Saya pikir tidak jauh lebih pendek dari ini.Sebenarnya, itu benar! Terima kasih kepada @ninjalj karena telah mengurangi satu byte lagi.Versi ini memiliki fitur interaktivitas lanjutan ™ - setelah menjalankannya dari baris perintah, ia mengeluarkan karakter "terbalik" selama Anda menulis digit input (yang tidak digaungkan); untuk keluar, cukup lakukan Ctrl-C.
Tidak seperti solusi sebelumnya, ini memiliki beberapa masalah dalam menjalankan DosBox - karena DosBox tidak mendukung Ctrl-C dengan benar , Anda terpaksa menutup jendela DosBox jika Anda ingin keluar. Dalam VM dengan DOS 6.0, sebagai gantinya, itu berjalan seperti yang dimaksudkan.
Sumber NASM:
Solusi lama -
272522 byteIni menerima inputnya dari baris perintah; berjalan dengan lancar sebagai file .COM di DosBox.
Input NASM:
sumber
xchg dx,ax
lebih pendek 1 byte darimov dl,al
Bash + coreutils, 8 byte
Mengambil input dari STDIN.
Atau
sed, 8 byte
sumber
y 01 10
tr
...CJam , 4 byte
Mengasumsikan string asli sudah ada di tumpukan. Mencetak string yang dimodifikasi.
Cobalah online dengan menempelkan Kode berikut :
Bagaimana itu bekerja
:~
mengevaluasi setiap karakter string, yaitu, menggantikan karakter 0 dengan integer 0.:!
menghitung TIDAK logis dari setiap integer. Ini mengubah 0 menjadi 1 dan 1 menjadi 0.sumber
Brainfuck (
7071)Penjelasan:
sumber
a
untuk11
.PHP - 19 byte
Ya, tidak benar-benar asli, kurasa!
sumber
Pancake Stack , 532 bytes
Diasumsikan input diakhiri oleh karakter nol. Strateginya adalah sebagai berikut:
1
dari itu.0
(menghasilkan1
jika kita punya0
, atau0
jika kita punya1
)0
untuk itusumber
C: 29
Cobalah online di sini .
Terima kasih telah menunjukkan trik XOR, Dennis.
sumber
i(char*s){while(*s)*s++^=1;}
while
denganfor
hasil diam dengan panjang 28 karakter.Python 2.7 - 34 *
Oh, betapa ini yang pertama menyebalkan. Cukup jelek, ini. 63 karakter.
Yang ini sedikit lebih baik tapi tetap tidak mewah. 44 karakter.
Sejak
int(x) and 1
kembaliint(x)
jika bukan 0 dan sebaliknya False. Solusinya dapat dikurangi menjadi 36 karakter.Sejak
join()
mengambil generator, tanda kurung dapat dilepas. 32 karakter.Dan backticks bisa digunakan sebagai gantinya
str()
Dikurangi menjadi 44 dari 34 berkat pointer dari @TheRare
Menemukan komplemen seseorang sulit di python karena
bin(-int)
mengembalikan -0bxxx karenanya di atas.sumber
(int(x) and 1) == int(x)
'' == False
dan'hi' == True
''.join(`1-int(x)`for x in'')
repr(x)
untuk x <maxint sama denganstr(x)
Perl, 9 karakter
Karakter ke-9 adalah bendera 'p'
Pemakaian:
sumber
y/10/01/
tetapi satu karakter lebih pendek karena tidak memerlukan flagJavascript ( ES6 ) 36
sumber
s
,s.replace(/./g,x=>x^1)
adalah 22 karakter.p=prompt(p().replace(/./g,x=>x^1))
(p=prompt)(p().replace(/./g,x=>x^1))
dan itu panjangnya sama.Labirin , 6 byte
(Labyrinth lebih baru dari tantangan ini, jadi jawaban ini tidak bersaing - bukankah itu menang ...)
Kode ini mengasumsikan bahwa STDIN hanya berisi digit (khususnya, tidak ada baris baru).
Pointer instruksi (IP) dimulai di sudut kiri atas ke kanan. Sementara ada angka untuk membacanya akan berputar dalam lingkaran yang ketat melalui blok 2x2 sebelah kiri:
1
tekan 1,,
baca satu digit,$
XOR dengan 1 untuk beralih bit terakhir,.
cetak hasilnya. IP mengambil loop ini karena bagian atas tumpukan positif setelah XOR, sehingga akan berbelok ke kanan. Saat kami menekan EOF, sebagai gantinya,
kembali-1
. Kemudian XOR akan menghasilkan-2
dan dengan nilai negatif ini IP mengambil belok kiri ke@
dan program berakhir.Solusi ini harus optimal untuk Labyrinth: Anda perlu
,
dan.
untuk I / O loop dan@
untuk mengakhiri program. Anda memerlukan setidaknya dua karakter (di sini1
dan$
) untuk mengganti bit terakhir. Dan Anda memerlukan setidaknya satu baris baru untuk satu loop yang dapat diakhiri.Kecuali ... jika kita mengabaikan STDERR, yaitu mengizinkan penghentian dengan kesalahan kita dapat menyimpan
@
dan kita juga tidak perlu cara untuk beralih di antara dua jalur. Kami terus membaca dan mencetak sampai kami tidak sengaja mencoba mencetak nilai negatif-2
. Ini memungkinkan untuk setidaknya dua solusi 5-byte:sumber
Ruby: 23
sumber
Kode Mesin Turing, 32 byte (1 status - 3 warna)
Menggunakan sintaks tabel aturan yang diperlukan oleh simulator TM online ini. Dipinjam dari posting yang saya buat ke blog pengguna Googology Wiki saya beberapa bulan yang lalu.
Anda juga dapat menguji ini menggunakan implementasi java ini.
sumber
Python 2.x - 44 byte
Mengapa membuatnya rumit, atau menggunakan beberapa variabel curang?
sumber
print''.join('1-int(x)'for x in'input()')
. Saya tidak bisa mendapatkan backticks dalam kode komentar sehingga menggantikannya dengan '.`a\`b`
->a`b
.R, 27 karakter
Pemakaian:
sumber
APL (Dyalog Unicode) , 7 byte SBCS
Program lengkap. Anjurkan stdin.
Cobalah online!
⍞
stdin cepat⍎¨
jalankan setiap karakter~
logis TIDAK⍕¨
memformat setiap karakter sebagai teks∊
ϵ daftar (ratakan)sumber
PHP> 5,4 - 37 karakter
$s
adalah inputTry it online
sumber
<kbd>
tag yang cerdik .TI-BASIC, 7 byte
Ini adalah fungsi yang mengambil string biner (melalui
Ans
) sebagai input dan mengembalikan output sebagai string terbalik (tidak terbalik), seperti yang ditentukan. Untuk bantuan lebih lanjut, Anda dapat membaca aplikasi daftar melaluinot(
wiki TI-BASIC. Saya menggunakan versi kompilasi karena lebih kecil:Dalam hex:
Penjelasan
»*r
- Ambil input fungsi sebagai string dan konversikan ke daftar>
- Pipa diberikan daftar ke operator selanjutnyaÕ¸r
- Kembalikan kebalikan dari daftarsumber
»*r>Õ¸r
?expr(Ans:Returnnot(Ans
; 2. Karena string tidak dipisahkan oleh koma, dan itu tidak dimulai dengan a{
, itu akan mengevaluasi ke bilangan bulat seperti 1000010011, bukan daftar; 3.Return
tidak berfungsi seperti yang Anda tulis; 4. Ini memberikan output sebagai daftar, bukan string.Haskell, 22 byte
Saya terkejut dengan kurangnya solusi Haskell untuk tantangan ini, jadi inilah satu. Ini mengevaluasi ke fungsi yang mengambil string dan mengembalikan kebalikannya.
Penjelasan
Tidak ada yang mewah di sini.
sumber
Melewati 93, 25 byte
Dengan asumsi tumpukan kosong dan EOF keduanya baca -1.
0
mendorong \ 0 sebagai terminator nol>~1+:#v_
adalah loop input, berbunyi ascii, menambahkan 1, memeriksa EOF + 1 = 0,^ -1<
lain mengurangi 1 dan meninggalkan nilai ascii yang didorong pada tumpukan.$>:#,_@
menjatuhkan salinan tambahan nol di atas tumpukan, lalu mencetak string biner dari atas ke bawahJika tumpukan kosong bertuliskan 0, simpan 2 byte dengan
Versi sekitar 15 byte dimungkinkan menggunakan algoritma yang sama ini jika EOF = 0, tetapi saya tidak memiliki implementasi yang mudah untuk diuji.
sumber
Javascript ES6, 26 karakter
sumber
Befunge-98 (PyFunge) , 7 byte
Untuk setiap karakter,
c
dalam input, ia mencetak karakter dengan nilai ascii94 - c
, di mana 94 adalah nilai '0' + '1', atau 'a'Cobalah online!
sumber
Python3, 39
Methinks Python bukan bahasa terbaik untuk ini. :)
Jika Anda ingin memiliki baris baru setelah keluaran, berikut ini adalah alternatif 43 karakter:
sumber
end=''
hanya,
kehendak :) - kecuali jika Anda peduli tidak ada spasiprint
membutuhkan penyesuaianend
parameter untuk menekan baris baru di akhir setiap cetak. Juga, menurut spesifikasi OP, saya pikir saya peduli tidak ada spasi. :) Terima kasih atas komentarnya!J - 11 karakter
Nilai Boolean dalam J direpresentasikan sebagai integer
0
dan1
, yang tentu saja juga merupakan indeks yang valid ke dalam array (dalam hal ini, array 2 karakter'01'
)sumber
C #, 131 byte
Sedikit terlambat ke pesta, tapi ini milikku. :)
sumber
MATLAB, 13 byte
Setelah menjalankan hal di atas, cukup panggil fungsi dengan string input Anda untuk mendapatkan string terbalik. Misalnya menjalankan:
cetakan:
sumber
BotEngine , 4x8 = 32
Tidak berkompetisi karena bahasa sudah mengeposkan pertanyaan.
Dengan menyoroti:
sumber