Tantangannya sederhana
Tulis skrip yang, ketika diberi input string, akan hash string menggunakan algoritma hashing MD2 , dan kemudian mengembalikan bilangan bulat positif atau bilangan bulat negatif berdasarkan pada karakter yang ditetapkan di bawah ini lebih umum dalam hash yang dihasilkan sebagai string heksadesimal:
01234567 - (positive)
89abcdef - (negative)
- Input akan selalu berupa string, tetapi panjangnya bisa sampai 65535
- Seluruh input, spasi putih dan semuanya, harus di-hash
- Untuk keperluan tantangan ini, bilangan bulat 0 tidak dianggap positif atau negatif (lihat hasil seri)
- Set yang lebih umum adalah karakter yang karakternya lebih umum dalam string hash heksadesimal 32 karakter
- Output Anda mungkin mengandung spasi spasi apa pun, selama karakter non-spasi tunggal adalah output yang benar atau palsu
- Jika terjadi ikatan, di mana string heksadesimal mengandung tepat 16 karakter dari setiap set, program harus menghasilkan 0
Contoh I / O
Input: "" (Empty String)
Hash: 8350e5a3e24c153df2275c9f80692773
Output: 1
Input: "The quick brown fox jumps over the lazy cog" (Without quotes)
Hash: 6b890c9292668cdbbfda00a4ebf31f05
Output: -1
Input: "m" (Without quotes)
Hash: f720d455eab8b92f03ddc7868a934417
Output: 0
Kriteria Kemenangan
Ini adalah kode-golf , byte terkecil menang!
Jawaban:
Oktaf, 35 byte
* Membutuhkan Octave versi terbaru (setidaknya 4.2).
Menghitung histcount dari string hash dengan itu pusat sampah adalah 7 dan 8 kemudian menghitung perbedaan jumlah.
sumber
Mathematica, 43 byte
Menghasilkan jumlah digit dalam
01234567
minus jumlah digit dalam89abcdef
.sumber
3E
antara 8 dan 9 dan bukan antara 7 dan 8.: |JavaScript (ES6), 731 byte
Monster ini menerapkan algoritma MD2, jadi ini memalukan. Berdasarkan js-md2 oleh Chen Yi-Cyuan.
sumber
Python 2 + Crypto ,
1089993918778 bytePython tidak memiliki bawaan bawaan untuk MD2.
Disimpan 12 byte berkat @ovs.
Disimpan 9 byte berkat @FelipeNardiBatista.
sumber
lambda s:cmp(sum((int(x,16)<8)-.5for x in MD2.new(s).hexdigest()),0)
harus mengurangi jumlah byte menjadi 93sum(x<'8'for x ......
lambda s:sum(x<'8'for x in MD2.new(s).hexdigest())-16
untuk 78. outputnya bisa berapa saja, bukan hanya-1,0,1
Java 8, 173 byte
-4 Terima kasih kepada dzaima
Terima kasih kepada Oliver, ini pada dasarnya jawabannya sekarang.
Positif untuk kebenaran. Negatif untuk kepalsuan. 0 untuk 0.
sumber
for
danif
String s="";for(byte b:bytes)h+=h.format("%02x",b);
. Juga, Anda tidak perlu menulis program penuh, tapi mencukupi lambda:a->{... return x;}
. Akhirnya for loop dapat digantikan olehint x=s.codePoints().filter(c->c>47&&c<56).count();
. Semua dalam semua, saya mendapatkan 173 untuk algoritma Anda, golfed:a->{String h="";for(byte b:java.security.MessageDigest.getInstance("MD2").digest(a.getBytes()))h+=h.format("%02x",b);return h.codePoints().filter(c->c>47&&c<56).count()-16;}
. Lebih banyak golf mungkin dilakukan, tetapi ini merupakan peningkatan jumlah byte, bukan?println
->print
danfor(char c:s.toCharArray())if("01234567".contains(""+c))x++;
->for(String c:s.split(""))if("01234567".contains(c))x++;
PHP, 50 Bytes
mencetak 1 untuk truey dan -1 untuk false dan 0 untuk tie
PHP, 58 Bytes
mencetak 1 untuk truey dan -1 untuk false dan 0 untuk tie
sumber
-0 === 0
echo 16<=>strlen(preg_filter("#[0-7]#","",hash(md2,$argn)));
harus melakukan trik tanpa byte tambahan.<?=preg_match_all("/[0-7]/",hash(md2,$argn))<=>16;
PHP, 56 byte
sumber
Jawa
137130124123 byteUji secara online!
Pada dasarnya, untuk setiap byte, kami diminta untuk memeriksa bit ke-4 dan ke-8 yang paling signifikan. Saya tidak pergi melalui representasi hex sama sekali. Jadi sepertinya wajar untuk mulai bermain dengan bit.
Nilai
<0
- nilai itu palsu, nilai>0
- nilai itu benar, nilai0
itu juga tidak benar atau salah. Kebenaran dan kepalsuan yang biasa tidak dapat diterapkan ke Jawa saat ini (karena tidak bisatrue
ataufalse
atau0
dengan aturanif(<truthy>)
), jadi saya mengambil kebebasan untuk mendeklarasikan seperti itu.Menghemat
byte
olehint
dalam deklarasi for loop.sumber
Paket Tcl + Trf , 79
Cobalah online . (Terima kasih @Dennis karena menambahkan Tcl ke TIO.)
sumber