Diposting dari sini .
Tantangan ini sangat "disaring" dari pertanyaan ini . Terima kasih khusus kepada @Akababa!
Dalam tugas ini, Anda harus memasukkan tanda seru di awal string dan setelah setiap karakter.
Aturan
- Akan selalu ada input string yang tidak kosong. Input tidak akan mengandung tab juga. Anda dapat berasumsi bahwa input hanya berisi karakter dan baris baru ASCII yang tidak dapat dicetak.
- Input tidak akan mengandung trailing baris baru selama bahasa Anda tidak dapat mendeteksi baris baru.
- Ini adalah kontes kode-golf ; jawaban terpendek harus menang.
Contohnya
- 4 baris baru menghasilkan 5 tanda seru yang dibatasi baris baru. Sangat sulit untuk menempatkan ini sebagai teks penurunan harga, jadi ini dinyatakan sebagai gantinya.
1 2 3 4 5 6 129591 129012 129127 129582 0
Keluaran
! 1! ! 2! ! 3! ! 4! ! 5! ! 6! ! 1! 2! 9! 5! 9! 1! ! 1! 2! 9! 0! 1! 2! ! 1! 2! 9! 1! 2! 7! ! 1! 2! 9! 5! 8! 2! ! ! 0!
asd afjoK ak: e kPrLd fOJOE; KFO KFkepjgop sgpaoj faj
Keluaran
! a! s! d! ! a! f! j! o! K! ! a! k!:! e! ! k! P! r! L! d! ! ! ! ! ! f! O! J! O! E!;! ! ! ! ! ! K! F! O! ! K! F! K! E! P! J! G! O! P! ! s! g! p! a! o! j! ! ! ! f! a! j!
Kasing uji dasar dengan hanya satu karakter:
Sebuah
Keluaran
!Sebuah!
(Pelengkapan otomatis! Hanya bercanda, tidak ada yang seperti itu.) Berisi tanda seru:
!! !! !! !! !!
Output:
!!!!! !!!!! !!!!! !!!!! !!!!!
a\n
dana
, dapatkah kita mengharuskan tidak ada baris baru yang tertinggal?Jawaban:
QuadR , 1 byte
Terima kasih kepada A__ untuk mengurangi separuh jumlah byte!
Cobalah online!
Ganti apa-apa dengan
!
sumber
Python 3 , 27 byte
Cobalah online!
Jujur, saya berharap seseorang dapat menunjukkan kepada saya cara keren untuk melakukan ini dengan jumlah byte yang lebih kecil.
sumber
!!
dalam kasus itu, itulah yang masuk akal bagi saya). Jika Anda maksudkan string\n
: ya, karena output yang benar adalah!\n!
.!\n!\n!
,. kerja bagus.Python 3 , 26 byte
Cobalah online!
sumber
Retina 0.8.2 , 2 byte
Cobalah online! Akhirnya, sebuah tantangan di mana Retina memiliki fitur bawaan!
sumber
Haskell, 18 byte
-1 byte terima kasih kepada @nimi
Cobalah online!
sumber
('!':).
menghemat satu byte.Python 2 , 27 byte
Cobalah online!
sumber
JavaScript (ES6), 19 byte
Mengambil input sebagai array karakter.
Cobalah online!
JavaScript (ES6),
2320 byteDisimpan 3 byte berkat @ShieruAsakoto
Mengambil input sebagai string.
Cobalah online!
JavaScript (ES6), 22 byte
Disarankan oleh @tjjfvi
Mengambil input sebagai string.
Cobalah online!
sumber
.replace
, 22 bytes=>[,...s,,].join`!`
R , 25 byte
Cobalah online!
Suatu fungsi yang menerima dan mengembalikan vektor karakter.
sumber
scan(,'')
, seperti tio.run/##K/r/P724NElDSUlHSVFJpzg5MU9DR11dU/O/…scan
(tetapi solusi Nick mana yang menangani, setidaknya jika Anda menampilkan output dengancat
.)8086 kode mesin, format .COM (MS-DOS 2+), 32 byte
(-1 tergantung pada emulator: lihat di bawah)
Untuk hasil terbaik redirect input standar dari file, karena mengetik memberikan output yang tampak aneh karena tidak ada buffering; juga, baris baru terlihat sedikit aneh karena disimpan sebagai
CR LF
, danCR
bagian mengacaukan output.Program ini berperilaku baik dalam emulasi MS-DOS yang sebenarnya (misalnya PCj) tetapi DOSBox tampaknya memiliki masalah dengan Ctrl + Z EOF (lihat komentar dalam daftar perakitan), jadi JANGAN mencoba memasukkan input menggunakan konsol di DOSBox kecuali jika Anda tambahkan cek ekstra!
Beberapa bit yang menarik:
Saya menghemat beberapa ruang data dengan menggunakan kembali memori yang sudah dieksekusi (
21H
dalamINT 21H
kebetulan!
)Saya hampir dapat menggunakan trik menarik yang saya temukan di halaman "The Hidden Power of BCD Instruksi" yang memungkinkan saya untuk menggunakan
AAA
daripada standarTEST
untuk dibandingkanAL
dengan 0, menghemat satu byte. Sayangnya, ini tidak sepenuhnya didokumentasikan sehingga saya tidak bisa mengandalkannya: misalnya, PCjs tidak menyesuaikan apa pun kecuali flag carry dan tambahan. :-(Kode perakitan (mode ideal TASM):
sumber
brainfuck ,
2422 byte-2 byte berkat JoKing.
Cobalah online!
sumber
Pepe , 47 byte
Cobalah online!
Penjelasan:
sumber
Labyrinth ,
19 11 109 bytesCobalah online!
Bagaimana?
Kami memasuki Labyrinth di kiri atas yang berhadapan dengan tumpukan nol ...
Untungnya kita tidak perlu menangani un-printable, jika nol-byte pertama akan membalikkan kita
,
dan bermain malapetaka.sumber
sed , 12 byte
Cobalah online!
-3 bytes terima kasih kepada Sapi Quack
sumber
s/\b\|\B/!/g
juga bekerja untuk 12 byteZsh , 32 byte
Cobalah online!
(s::)
terpecah menjadi karakter,''
menambahkan elemen kosong ke awal, dan kemudianecho -nE $c!
menggemakan masing-masing diikuti oleh!
.sumber
Perl 5 -p0,
176 byteCobalah online!
Jawaban asli saya adalah
-p
dan$_='!'.s,.,$&!,gr
. Terima kasih kepada @Nahuel Fouilleul untuk memotong 11 byte dan @Grimy untuk-p0
tipnya.sumber
-lp
memberikan output yang salah untuk\n\n\n\n
case uji (mengembalikan 4 baris yang dipisahkan!
daripada 5 yang ditentukan).-p0
berfungsi dengan benar.6502, 12 byte (13 byte jika Apple II)
6502
Kode mesin mengasumsikan bahwa sepasang lokasi nol halaman terhubung ke perangkat keras input karakter ($ FE) dan output (FF). Banyak sistem berbasis 6502 memfasilitasi I / O dengan cara ini, meskipun alamat I / O biasanya tidak berada di halaman nol.
Untuk kesederhanaan, saya menggunakan Py65 , sebuah simulator sistem komputer 6502 yang ditulis dengan Python.
Berikut ini adalah dump memori dari Py65. Anda dapat memuat kode berikut di mana saja di halaman nol sehingga tidak tumpang tindih dengan $ FE dan $ FF.
Berjalan di jendela perintah Windows, Anda dapat menempel (Ctrl + V) teks apa pun yang Anda inginkan, atau Anda cukup mengetik. Jika mengetik, tekan Ctrl + J untuk baris baru (karakter ASCII yang sama). Tekan Ctrl + C untuk mengganggu prosesor dan kembali ke command prompt Py65.
Secara alami, kode assembly lebih mudah dibaca.
Untuk kejelasan, berikut adalah kode perakitan dalam format CBA65 .
Apple II
Kode di atas mengasumsikan nol menunjukkan tidak ada input, jadi lanjutkan polling hingga nilai yang bukan nol dikembalikan.
Sebagai perbandingan, Apple I dan Apple II memberi sinyal ketersediaan karakter baru dengan menetapkan bit 7 dari alamat I / O keyboard, yang kemudian harus dihapus setelah mengambil karakter. Pada sistem tersebut, karakter I / O biasanya dilakukan dengan memanggil rutinitas monitor sistem alih-alih mengakses perangkat keras secara langsung.
Dengan memanggil RDKEY ($ FD0C) dan COUT ($ FDED), yang setara dengan Apple II di atas dapat dikodekan dalam 13 byte, dan dapat dijalankan di mana saja dalam RAM. Berikut adalah kode yang saya jalankan di Apple // e emulator, a2ix di Android 9.
Menekan Pengembalian memiliki efek yang sama dengan baris baru.
Apakah Anda memperhatikan bahwa alih-alih nilai ASCII normal # $ 21 untuk titik seru, # $ A1 digunakan sebagai gantinya? Itu karena mengirim nilai ASCII standar ke COUT menyebabkannya ditampilkan dalam "mode terbalik," hitam putih. Menampilkan ASCII dalam warna putih normal pada hitam memerlukan penambahan # $ 80 pada nilai karakter di akumulator sebelum memanggil COUT. Karena RDKEY mengembalikan karakter dengan set hi-bit, program perakitan umumnya membersihkan bit karakter untuk mendapatkan nilai ASCII sebelum menggunakannya.
sumber
Pesta , 36 byte
Cobalah online!
Ini bergantung pada baris baru yang menghentikan input untuk yang terakhir! menandai.
sumber
!
di akhir input.MarioLANG ,
9594908969 byteCobalah online!
Pertama kali mencoba MarioLANG, itu sangat menyenangkan!
Terima kasih kepada Jo King untuk -20 byte
Penjelasan:
Jadi, seperti namanya, MarioLANG dibuat untuk mengeksekusi seperti permainan Super Mario Bros. Ini beroperasi mirip dengan BF, dengan memori yang diatur dalam rekaman sel. Ada operator untuk menambah, mengurangi, mencetak (seperti ascii atau numerik) dan membaca ke dalam sel memori saat ini, dan operator untuk bergerak ke kiri atau ke kanan sepanjang pita.
Mario (penunjuk instruksi) selalu dimulai di sel kiri atas program, dengan arah gerakan yang diinginkannya diatur ke kanan. Jika Mario tidak memiliki objek seperti lantai di bawahnya (=, ", atau #), ia akan jatuh hingga mencapai objek seperti lantai. Jika Mario meninggalkan ruang program, program berakhir karena Game Over :(
Program khusus ini pada dasarnya dapat dibagi menjadi dua bagian: setup, dan loop.
Di bagian Penyetelan, kami hanya menambah sel memori pertama hingga mencapai 33 - nilai ASCII untuk "!". Cukup mudah; jika ini bisa golf, itu murni masalah bentuk. Mario mulai dari kiri atas, mengambil 10 koin, mulai jatuh ketika mengambil tanggal 11, berganti arah, lalu mengulangi. Dia mengambil 11 koin terakhir tanpa mengubah arah; ia mengakhiri bagian pengaturan di "+" paling kanan bawah.
Di bagian loop, Mario mulai dengan mencapai lift. "!" Operator membuatnya berhenti bergerak, sehingga ia tetap di lift. Di perjalanan, itu mencetak karakter ASCII yang sesuai dengan nilai sel memori saat ini (yang ini selalu 33, "!"), Kemudian beralih ke sel berikutnya dalam memori. Mario mencapai puncak dan menetapkan arahnya ke kanan. Dia jatuh, dan membaca karakter dari input sebagai nilai ASCII-nya (atau -1 jika tidak ada karakter). Kami menambah karena satu-satunya ukuran kontrol di MarioLANG adalah untuk melewatkan instruksi jika sel memori saat ini memiliki nilai 0. Jika ya, kami melewatkan mengubah arah Mario, sehingga ia akan berjalan langsung dari lantai berikutnya ke malapetaka. Jika tidak, kami menetapkan arah ke kiri; berjalan meninggalkan lantai di bawah ini menurunkan sel saat ini kembali ke nilai sebelumnya,
Versi sebelumnya (89 byte):
sumber
Perl 6 ,
1611 byteCobalah online!
Mengganti semua kecocokan dengan lebar nol dengan tanda seru. Regex kosong tidak diizinkan, jadi kami menggunakan penanda tangkap untuk menangkap apa pun sebagai gantinya
sumber
C # (Visual C # Interactive Compiler) , 28 byte
Cobalah online!
sumber
05AB1E , 4 byte
I / O sebagai daftar karakter.
Cobalah online.
Penjelasan:
sumber
Befunge-98 (PyFunge) , 7 byte
Cobalah online!
sumber
Segitiga ,
1513 byteCobalah online!
-2 byte setelah mengingat bahwa Triangular memiliki operator penghentian bersyarat.
Saya percaya ini sesingkat yang satu ini. Segitiga tidak memiliki operator perubahan arah bersyarat, tetapi sayangnya mereka bekerja secara berbeda dari kondisional lainnya. Sementara semua yang lain memeriksa apakah ToS <= 0, kondisional yang mengubah arah memeriksa ToS! = 0. Jika ini bukan masalahnya, kita akan memiliki 10 byte dalam bentuk
Bq3~#*/@<<
.Tidak Disatukan:
Versi Sebelumnya (15 byte):
sumber
SimpleTemplate , 23 byte
Ini adalah bahasa yang saya tulis, dan itu seharusnya untuk template, tetapi juga.
Seharusnya hampir cukup jelas, setelah Anda melihat kode yang tidak dikenali:
Dan sebuah penjelasan:
!
- Mencetak!
karakter literal{@each argv.0 as char}
- Putaran melalui setiap karakter, dengan nilai yang ditetapkan ke variabelchar
( opsional , variabel default adalah_
).argv.0
adalah parameter pertama yang dilewatkan kerender()
metode kompiler.{@echo char}!
- Outputchar
variabel dan!
karakter literal .Untuk versi golf, variabel default
_
digunakan sebagai gantinya.{@/}
- menutup loop ( opsional )Solusi Pure SimpleTemplate :
Menciptakan suatu fungsi
x
yang menghasilkan hasil yang sama.Anda bisa menggunakannya seperti ini:
Anda dapat mencoba semua ini di: http://sandbox.onlinephpfunctions.com/code/f6baff8d411fc8227ece81eccf05b6e7d3586bfa
Pada baris 908, Anda dapat menggunakan variabel
$golfed
,$ungolfed
dan$fn
untuk menguji semua versi.Namun, jika diizinkan untuk menggunakan array karakter, kode ini disederhanakan (20 byte):
Dan ungolfed:
Pada dasarnya, output semua item dalam array, bergabung dengan
"!"
, dikelilingi oleh literal!
.Karena keterbatasan dalam kelas kompiler, ruang tersebut wajib (dalam versi golf).
Kode ini juga sangat sulit digunakan di SimpleTemplate murni (menggunakan fungsi sebagai contoh):
The
@call
dapat memanggil fungsi yang ada di PHP, yang berarti bahwa itu bukan murni SimpleTemplate solusi.sumber
Ruby ,
1716 byteCobalah online!
Terima kasih, Nilai Tinta untuk -1 byte
sumber
gsub
.Gema , 11 karakter
Sayangnya
!
memulai komentar di Gema, jadi harus diloloskan.Contoh dijalankan:
Cobalah online!
sumber
Jelly , 5 byte
Program lengkap yang menerima string, yang mencetak hasilnya.
Cobalah online!
Bagaimana?
sumber
Japt , 4 byte
Cobalah
sumber
'
jika penggantiannya adalah nomor.Japt , 4 byte
Cobalah
Japt
-P
, 7 byteSayangnya
!
adalah karakter pendiam, mengharuskan tanda kutip.Cobalah
Tidak banyak yang bisa dijelaskan:
ï
adalah produk dani
prangko Cartesian .sumber
Perl 5 +
-p
, 11 byteCobalah online!
sumber