Apakah Rep saya di Stack-Exchange Form?


16

Tempat:

Reputasi Anda ada dalam Formulir Penukaran-Stack jika itu dapat diwakili dengan mendekomposisi jumlah medali Anda (emas, perak, dan perunggu dihitung secara terpisah) menjadi basis-10 digit mereka dan bergabung dengan mereka dalam urutan tertentu, dengan beberapa peringatan.

Saat membusuk, masing-masing

  • Digit medali emas bernilai tiga digit.
  • Perak bernilai dua digit.
  • Perunggu adalah satu digit.
  • Selain itu, karena SE tidak menampilkan jenis medali jika Anda tidak memilikinya, hitungan 0 medali untuk suatu jenis tidak akan menghasilkan a [0].

Contoh:

  • [1 Gold, 2 Silvers, 3 Bronzes]akan terurai menjadi [1,1,1,2,2,3]. 321112 dan 213121 adalah dua contoh nomor bentuk-SE untuk medali-medali ini.
  • [20 Golds, 0 Silvers, 20 Bronzes]akan terurai menjadi [2,2,2,0,0,0,2,0]. 20002022 adalah nomor SE-form.
  • [11 Golds, 0 Silvers, 0 Bronzes]akan terurai menjadi [1,1,1,1,1,1]. 111111 adalah satu-satunya nomor bentuk-SE untuk ini.

Tidak akan ada yang memimpin 0 ketika mempertimbangkan nomor SE. Misalnya, dalam contoh ke-2 di atas, 00002222 -> 2222tidak akan dianggap sebagai nomor SE-form untuk [20,0,20].

Input output:

Input adalah daftar / tuple / array / apa pun dari [reputation, gold_medals, silver_medals, bronze_medals] yang semuanya merupakan bilangan bulat non-negatif. Ini adalah pesanan yang dianggap tetapi dapat diubah. Catat saja jawaban Anda jika Anda melakukannya.

Output adalah dua nilai yang konsisten untuk true dan false.

Aturan:

  • Masukan akan selalu valid
  • Anda akan selalu memiliki setidaknya 1 Rep
  • Anda tidak dapat memiliki medali sama sekali, yang seharusnya selalu kembali salah.
  • Hitungan medali tidak ada hubungannya dengan kenyataan. Memiliki beberapa ratus emas dan tidak ada perunggu baik-baik saja.
  • Ini adalah sehingga jawaban terpendek dalam byte menang.

Kasus uji:

#[Rep, Gold, Silver, Bronze] -> Output
[4, 0, 0, 4]       -> True
[1447, 0, 4, 17]   -> True
[74414, 4, 0, 17]  -> True
[4444, 4, 0, 4]    -> True
[4455, 0, 54, 0]   -> True
[5355, 5, 0, 3]    -> True
[53535, 5, 3, 0]   -> True
[4444, 0, 0, 4444] -> True
[444, 4, 0, 0]     -> True
[1234, 0, 0, 1234] -> True
[1234, 0, 0, 4321] -> True

[4444, 1, 0, 1]      -> False
[5555, 5, 0, 55]     -> False
[1234, 1, 23, 4]     -> False
[1, 0, 0, 0]         -> False
[1001001, 0, 10, 10] -> False

jadi apa sebenarnya yang dilakukan reputasi dalam konteks tantangan?
OrangeCherries

3
@OrangeCherries Secara mekanis, tidak ada. Itu mengilhami tantangan karena saya punya 1447 rep dan 4 perak, 17 perunggu pada saat penulisan.
Veskah

1
Apakah input fleksibel selain pesanan? Jadi bisakah saya misalnya mengambil daftar input [bronze, silver, gold]dan input kedua yang terpisah reputation?
Kevin Cruijssen

1
@KevinCruijssen Ya tidak apa-apa. Satu-satunya hal yang saya katakan adalah tidak diizinkan adalah mengambil input sebagai daftar daftar karakter / digit yang membentuk setiap angka.
Veskah

Apakah nilai kebenaran / kepalsuan diperbolehkan untuk output atau harus dua nilai yang konsisten?
Nick Kennedy

Jawaban:


11

05AB1E , 16 14 13 11 10 byte

∞×0KJ‚€{íË

Mengambil input medali dalam urutan [bronze, silver, gold]sebagai input pertama, danreputation sebagai input kedua.

-1 byte terima kasih kepada @Grimy .

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

           # Push an infinite positive list: [1,2,3,...]
 ×          # Repeat the values in the (implicit) input-list that many times as string
            # (since the input-list contains just 3 values, the rest of the infinite
            #  list is ignored)
  0K        # Remove all 0s (so all "0", "00" and "000")
    J       # Join the strings in the list together
           # Pair this string with the (implicit) second input
      €{í   # Sort the digits in both strings in descending order
         Ë  # And check if both are now equal
            # (after which the result is output implicitly as result)

1
3L-> untuk -1.
Grimmy

1
@Grimy Terkadang bermanfaat bahwa daftar terpotong ke yang terkecil. :) terima kasih!
Kevin Cruijssen

Ini adalah 19 byte dalam utf-8, bukan 10 byte.
Lie Ryan

@ LieRyan Anda benar, ini memang 19 byte di UTF-8. 05AB1E menggunakan (misalnya Jelly dan Arang) sebagai codepage khusus , di mana setiap 256 karakter yang diketahuinya dikodekan dalam masing-masing 1 byte. Bytes dalam versi 10-byte ini dalam heksadesimal adalah \x19\xd7\x30\x4b\x4a\x82\x80\x7b\xec\xcb: Seharusnya dimungkinkan untuk menjalankan byte heksadesimal ini dengan --osabieflag, tetapi saya tidak yakin bagaimana melakukannya dalam versi Elixir 05AB1E sepenuhnya jujur ​​(tapi saya akan meminta beberapa orang lain untuk memverifikasi dan membalas Anda dengan jawabannya).
Kevin Cruijssen

@ LieRyan Dalam versi Python 05AB1E (legacy) itu bisa dilakukan seperti ini (ini adalah program yang berbeda untuk tantangan lain tentu saja), tetapi itu harus memberi Anda ide tentang bagaimana byte hexadecimal dijalankan.
Kevin Cruijssen

7

JavaScript (ES6),  92  74 byte

Mengambil input sebagai (['gold','silver','bronze'])('rep'). Mengembalikan nilai Boolean.

b=>r=>[...b.map((n,i)=>n.repeat(+n&&3-i)).join``].sort()+''==[...r].sort()

Cobalah online!


JavaScript (ES6), 74 byte

Mengambil input sebagai (gold, silver, bronze, 'rep'). Mengembalikan nilai Boolean.

(g,s,b,r)=>(F=s=>[...s].sort()+0)(r)==F([g,g,g,s,s,b].filter(x=>x).join``)

Cobalah online!


7

MATL , 28 byte 20 byte 16 byte 13 byte

Mengembalikan 0 untuk false dan 1 untuk true. Ini pasti bisa diturunkan.

[1,3,2,1]Y"t2:7)XzVXzY@Ums0>

Turun ke 16 byte jika skor reputasi dapat diambil secara terpisah, dan urutannya adalah [perunggu, perak, emas], reputasi
Turun hingga 13 byte berkat Luis Mendo

3:Y"XzVXzY@Um

Cobalah online!




5

Japt , 14 13 12 byte

íp fn ¬á øUg

Mengambil input sebagai [rep, bronze, silver, gold]

Cobalah atau Verifikasi semua kasus uji

Sample input: U = [1447, 17, 4, 0]
íp            Repeats each value of U by it's index amount e.g. ["","17","44","000"]
  fn          Remove all falsy values when converted to a number e.g. ["17","44"]
    ¬         Concatenate e.g. "1744"
     á        All permutations e.g. ["1744","1744","1474","1447","1474","1447","7144","7144","7414","7441","7414","7441","4174","4147","4714","4741","4417","4471","4174","4147","4714","4741","4417","4471"]
      øUg     Does it contain the first item of the input? 

Saya telah mengambil beberapa tusukan pada ini dari beberapa sudut yang berbeda tetapi tidak dapat melakukan lebih baik dari 13.
Shaggy

@ Shaggy Ternyata Åitu tidak perlu, karena fnakan menghilangkan nilai pertama. Menghapus Åmembuatnya 12 byte
Perwujudan Ketidaktahuan

Ini adalah 16 byte dalam utf-8, bukan 12 byte.
Lie Ryan

@LieRyan Beberapa bahasa golf menggunakan penyandian mereka sendiri; Japt menggunakan ISO-8859-1`
Perwujudan Ketidaktahuan

@EmbodimentofIgnorance, Ah, sial, kenapa aku tidak melihatnya ?! Saya benar-benar merasa sangat tidak berlatih karena saya mengambil cuti bulan itu untuk hadiah terbuka saya untuk Japt.
Shaggy

4

Retina 0.8.2 , 45 byte

,0
,
,(\d*),(\d*),
¶$1$1$1$2$2
%O`.
^(.+)¶\1$

Cobalah online! Tautan termasuk test suite. Penjelasan:

,0
,

Hapus skor nol.

,(\d*),(\d*),
¶$1$1$1$2$2

Rentangkan skor emas dan perak, dan konversikan pemisah ke baris baru.

%O`.

Urutkan reputasi dan skor yang diperluas secara terpisah.

^(.+)¶\1$

Bandingkan digit yang diurutkan.



4

Racket, 149 107 98 byte

(λ(r b s g[h(λ x(sort(string->list(apply ~a(remq*'(0)x)))char<?))])(equal?(h r)(h b s s g g g)))

Cobalah online!

Pertama kali bermain golf di Racket, jadi masih mencari peningkatan ...

Penjelasan (dari versi asli yang lebih panjang, tetapi gagasan yang sama):

(λ(r b                              ; take rep and badges as arguments
     [g(λ(x)                        ; helper function g which takes a string
         (sort                      ; and returns the sorted
           (string->list x)         ; list of characters
           char<?))])               ; (sort by ascii code)
  (equal?                           ; compare...
    (g(~a r))                       ; g called on the rep converted to string
    (g                              ; and g called on...
      (string-join                  ; the concatenation of
        (map ~a                     ; the stringified elements of
             (append*               ; the flattened list given by
               (filter              ; the elements of the following list where
                 (λ(x)(>(car x)0))  ; the badge count is nonzero:
                 (map make-list     ; repeat the badge counts
                      '(1 2 3)b)))) ; 1, 2, and 3 times respectively
        ""))))

2

Arang , 24 byte

1F⁴F↨NχFι⊞υκFχ¿⁻№υι№θIι⎚

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil input dalam urutan rep, perunggu, perak, emas, dan output 1jika perwakilan tersebut valid. Penjelasan:

1

Anggap perwakilan tersebut valid.

F⁴F↨NχFι⊞υκ

Ulangi empat nilai input. Dorong setiap digit setiap ikali nilai di mana iindeks nilai diindeks 0. Konversi basis numerik digunakan di sini sebagai konversi 0ke array kosong.

Fχ¿⁻№υι№θIι⎚

Periksa jumlah setiap digit dalam array yang cocok dengan input pertama. Jika ada yang berbeda, bersihkan kanvas.


Ini adalah 60 byte dalam utf-8, bukan 24 byte.
Lie Ryan

@ LieRyan Saya tidak mengatakan mereka adalah byte UTF-8.
Neil

2

Jelly , 18 byte

DẋṠƊ€ẋ"3RU¤FṢ⁼⁴DṢ¤

Cobalah online!

ini agak buruk


Ini adalah 37 byte dalam utf-8, bukan 18 byte.
Lie Ryan

@LieRyan Jelly (dan banyak bahasa golf lainnya) menggunakan halaman kode mereka sendiri sehingga semua 256 kode 1-byte sesuai dengan salah satu karakter yang digunakan oleh bahasa tersebut.
HyperNeutrino


1

Perl 5 -lF , 62 byte

map{@r=sort/./g,@r if($_=<>x$_)>0}1..3;@F=sort@F;say"@r"eq"@F"

Cobalah online!

Mengambil input pada baris terpisah sebagai

reputation
bronze
silver
gold
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.