Bagian yang sederhana: Diberikan string input yang hanya berisi karakter ASCII yang dapat dicetak (spasi - tilde), hitung jumlah kemunculan setiap karakter dan kembalikan hasilnya pada format yang sesuai. Hasil untuk string a%hda7a
harus sesuatu seperti: a:3, %:1, h:1, 7:1, d:1
. Penyortiran tidak perlu, pembatas dan format adalah opsional tetapi harus mudah dipahami angka mana yang sesuai dengan karakter mana. Anda tidak boleh memasukkan karakter yang tidak ada dalam string input ( a:3, b:0, c:0, d:1, ...
tidak OK).
Tantangan nyata:
Ubah setiap karakter dalam kode Anda menjadi angka biner 8-bit (atau 16-bit jika Anda menggunakan UTF-16 atau yang serupa), dan sebutkan setiap karakter mulai dari 0
.
Untuk setiap karakter ( i
adalah pencacah), yang i%7
-bit 1 harus menjadi 1
. Bit diberi nomor dari kanan. Semua bit lain bisa menjadi apa pun yang Anda inginkan.
Mari kita gunakan kode berikut sebagai contoh:
[f]-xif)#f
Mengubah ini ke biner kita mendapatkan array di bawah ini. Angka pertama (mewakili [
memiliki 1
di posisi ke-0, sehingga yang satu itu OK. Angka kedua (mewakili f
memiliki 1
di posisi ke-1, sehingga yang itu juga OK. Lanjutkan seperti ini, dan Anda akan melihat bahwa kode di atas valid.
C 76543210 Nomor bit - -------- ---------- [0101101 1 0 - OK f 011001 1 0 1 - OK ] 01011 1 01 2 - OK - 0010 1 101 3 - OK x 011 1 1000 4 - OK i 01 1 01001 5 - OK f 0 1 100110 6 - OK ) 0010100 1 0 - OK # 001000 1 1 1 - Oke f 01100 1 10 2 - OK
Jika kita mengubah kode menjadi: ]f[-xif)#f
kita akan mendapatkan awal urutan berikut:
C 76543210 Bit number
- -------- ----------
] 01011101 0 <- OK
f 01100110 1 <- OK
[ 01011011 2 <- Not OK
- 00101101 3 <- OK
Seperti yang kita lihat, karakter ketiga [
tidak ada 1
di posisi ke-2 (diindeks nol), dan oleh karena itu kode ini tidak valid.
Kasus uji:
Input:
This is a string containing some symbols: ".#!".#&/#
Output:
! " # & / : T a b c e g h i l m n o r s t y .
7 1 2 3 1 1 1 1 2 1 1 1 2 1 5 1 2 4 3 1 6 2 1 2
Format output yang masuk akal adalah OK (apa pun yang paling nyaman bagi Anda). Misalnya Anda dapat memiliki: :7, !:1, ":2, #:3, &:1, /:1, T:1, a:2 ...
atau [ ,7][!,1][",2][#,3][&,1]...
. Outputnya dengan cara standar apa saja (kembali dari fungsi, dicetak ke STDOUT dll.)
1i
modulus 7
.
Ini adalah kode-golf , jadi kode terpendek dalam byte akan memenangkan ref .
sumber
n%7
th> pastie.org/pastes/10985263/text00001010
. Ini bisa bermanfaat juga! :)Jawaban:
Pyke,
16 byteCoba di sini!
Setengah dari kode ini hanyalah tanpa ...
sumber
'abc'==['a','b','c']
, jadi mungkin juga di Pyke ...?Pyth,
1287 byte-1 byte terima kasih kepada @Loovjo
representasi biner
Coba di sini
sumber
13
untuk111
terlihat aneh, tetapi tidak bisa disalahpahami (tidak ada karakter tunggal13
yang digunakan 1 kali), jadi ini benar-benar valid!Befunge-93, 150 byte
Cobalah online!
Saya mulai dengan menulis ini sebagai program Befunge biasa, yang saya main golf sebanyak mungkin. Saya kemudian menambahkan padding untuk memastikan berbagai karakter dalam program hanya muncul di posisi yang diizinkan. Padding ini bergantung pada fakta bahwa perintah yang tidak didukung diabaikan di Befunge-93, jadi saya hanya perlu urutan karakter yang tidak digunakan yang bit-bitnya sejajar dengan posisi yang diperlukan (urutan yang saya gunakan adalah
={}{}{}
).Bit yang rumit adalah bahwa berbagai cabang di antara garis perlu berbaris dengan benar (misalnya
v
panah dalam satu baris, harus sejajar dengan<
panah di bawahnya). Ini semakin rumit oleh fakta bahwa perintah jembatan (#
) tidak dapat dipisahkan dari panah percabangan yang berdekatan. Awalnya saya mencoba membuat padding secara sistematis, tetapi pada akhirnya itu sebagian besar merupakan proses manual.Karena ukuran program saya tidak akan mencantumkan analisis karakter lengkap, tetapi ini adalah contoh dari awal dan akhir:
Istirahat baris diperlakukan sebagai karakter baris baru, sehingga akan berada di posisi 1 atau 3.
sumber
MATL , 17 byte
Menampilkan hitungan, lalu karakter terkait, semua baris-baru dipisahkan. Kesulitan terbesar adalah
@
yang0b01000000
; Saya harap saya dapat menemukan cara untuk hidup tanpa itu.Cobalah online!
Penjelasan:
MATL, 15 byte (keluaran yang dipertanyakan)
Jika hanya membiarkan dua vektor baris di tumpukan diizinkan (perilaku seperti fungsi sesuai dengan postingan Meta ini ), kita bisa turun ke
Tapi di sini, outputnya tidak tertata dengan rapi.
sumber
D
,Gu
pada akhir program), dan saya tidak yakin apakah versi 15-byte cukup berbeda.CJam, 14 byte
Coba di sini.
Spasi sebelum
@
dans
sesudahnya adalah karakter pengisi yang dimasukkan untuk membuat kode ASCII sesuai dengan pola yang diperlukan: spasi tidak melakukan apa-apa, dan yangs
benar mengubah string menjadi string. Selain itu, ini adalah implementasi tugas tantangan yang cukup sederhana dan mudah:Untuk input
foobar123
, kode ini di-output[['f 1] ['o 2] ['b 1] ['a 1] ['r 1] ['1 2] ['2 2] ['3 1]]
. Jika hanya mencetak hitungan pada satu baris dan karakter yang sesuai pada yang lain, seperti pada:dianggap sebagai format output yang dapat diterima, maka
]z
dapat dihilangkan untuk menyimpan dua byte, dengan total 12 byte . Ya, kode yang diperpendek masih akan melewati persyaratan pola bit.Ps. Saya juga menulis pemeriksa kode sumber sederhana untuk tantangan ini. Diberikan satu baris kode sebagai input, pertama-tama akan menggemakan baris itu dan kemudian mencetak baris yang sama dengan setiap karakter diganti dengan bit ASCII ( n % 7) -nya. Jika baris kedua adalah semua, input valid.
sumber
Jelly , 6 byte dalam codepage Jelly
Cobalah online!
Ini adalah fungsi yang mengembalikan daftar (karakter, jumlah) pasangan. (Jelly mewakili daftar seperti teks, misalnya jika dikirim ke output standar, dengan menggabungkan elemen-elemen, itulah sebabnya Anda harus memperlakukan ini sebagai fungsi daripada program yang lengkap. ( Berikut program yang sama dengan beberapa kode yang ditambahkan ke panggil fungsi dan kemudian cetak struktur internal ke output standar, membuktikan bahwa output dalam format yang jelas.)
Representasi dan penjelasan biner:
Dapat dilihat bahwa karakter kedua, ketiga, dan keempat membatalkan satu sama lain dan hanya ada untuk mempertahankan pola bit yang kita butuhkan.
Œr
terlalu nyaman, meskipun, dan padding program sehingga kita dapat menggunakannya mungkin memberi kita program yang lebih pendek daripada mencoba memecahkan masalah tanpa builtin mau.sumber