Pindah sekolah (Hari 1)


21

Tantangan Diambil dengan izin dari Kontes Tantangan Kode Universitas saya


Selama beberapa tahun sekarang, jumlah siswa di sekolah saya terus bertambah. Pertama jumlah siswa ditingkatkan oleh ruang kelas, tetapi kemudian perlu untuk mengubah beberapa ruang bagi beberapa kelompok untuk memberikan kelas di sana, seperti tempat olahraga atau, kursus terakhir ini, hingga ruang sapu.

Tahun lalu otoritas akademik mendapat anggaran untuk membangun gedung baru dan memulai pekerjaan. Akhirnya mereka selesai dan bangunan baru sudah bisa digunakan, jadi kita bisa bergerak (gedung lama akan direhabilitasi dan akan digunakan untuk fungsi lain), tetapi itu telah membuat kita setengah jalan di tengah jalan. Direktur ingin tahu apakah langkah itu akan mungkin dilakukan tanpa membelah atau bergabung dengan kelompok, atau bahwa beberapa siswa harus mengubah kelompok.

Tantangan

Mengingat jumlah siswa dari kelompok saat ini dan ruang kelas baru (kapasitas), hasilkan nilai kebenaran jika memungkinkan untuk menetapkan ruang kelas yang berbeda, dengan kapasitas yang cukup, untuk masing-masing kelompok saat ini, atau nilai falsey sebaliknya.

Uji Kasus

Input: groups of students => [10, 20, 30], classrooms capacity => [31, 12, 20]
Output: True

Input: groups of students => [10, 20, 30], classrooms capacity => [100, 200]
Output: False

Input: groups of students => [20, 10, 30], classrooms capacity => [20, 20, 50, 40]
Output: True

Input: groups => [30, 10, 30, 5, 100, 99], classrooms => [40, 20, 50, 40, 99, 99]
Output: False

Input: groups => [], classrooms => [10, 10, 10]
Output: True

Input: groups => [10, 10, 10], classrooms => []
Output: False

Input: groups => [], classrooms => []
Output: True

Input: groups => [10, 1], classrooms => [100]
Output: False

Input: groups => [10], classrooms => [100, 100]
Output: True

Input: groups => [1,2,3], classrooms => [1,1,2,3]
Output: True

Catatan

  • Anda dapat mengambil input dalam format apa pun yang masuk akal
  • Anda dapat output setiap nilai truthy / Falsey ( 1/0, True/False, dll ...)

5
g=[1,2,3], c=[1,1,2,3]
Testcase yang

Apakah Anda memiliki izin untuk mempostingnya di sini?
Adám

2
@ Adám Ya. Saya bertanya kepada guru saya (siapa yang bertanggung jawab dalam kontes) dan dia berkata tidak ada masalah. Satu-satunya hal adalah bahwa itu adalah satu tantangan setiap hari
Luis felipe De jesus Munoz

Apakah 0nilai yang valid untuk grup atau ruang kelas?
nimi

Jawaban:


14

Brachylog , 4 byte

Selalu menyenangkan melihat tantangan dan tahu bahwa brachylog akan mengalahkan semua orang. Mengambil kelas saat ini sebagai input dan ruang kelas baru sebagai output; Ini akan menghasilkan true jika menemukan cara agar sesuai dengan siswa, salah sebaliknya

p≤ᵐ⊆

Penjelasan

Kode memiliki 3 bagian yang urutannya sebenarnya tidak masalah

≤ᵐ --> projects each value to a value bigger/equal then input
⊆  --> input is a ordered subsequence of output
p  --> permutes the list so it becomes a unordered subsequence

Cobalah online!


4

Pyth, 11 byte

.AgM.t_DMQ0

Mengambil input sebagai daftar daftar, ukuran kelas pertama, ukuran kelompok kedua. Coba online di sini , atau verifikasi semua uji sekaligus di sini .

.AgM.t_DMQ0   Implicit: Q=eval(input())
      _DMQ    Sort each element of Q in reverse
    .t    0   Transpose, padding the shorter with zeroes
  gM          Element wise test if first number >= second number
.A            Are all elements truthy? Implicit print

4

Jelly , 9 byte

Mengambil ruang kelas sebagai argumen pertama dan kelompok sebagai argumen kedua.

Œ!~+Ṡ‘ḌẠ¬

Cobalah online!

Berkomentar

NB: Ini Ṡ‘ḌẠ¬terlalu lama. Tapi saya kira ini bukan pendekatan yang tepat.

Œ!~+Ṡ‘ḌẠ¬  - main link taking the classrooms and the groups e.g. [1,1,2,3], [1,2,3]
Œ!         - computes all permutations of the classrooms    -->  [..., [1,2,3,1], ...]
  ~        - bitwise NOT                                    -->  [..., [-2,-3,-4,-2], ...]
   +       - add the groups to each list; the groups fits   -->  [..., [-1,-1,-1,-2], ...]
             in a given permutation if all resulting values
             are negative
    Ṡ      - take the signs                                 -->  [..., [-1,-1,-1,-1], ...]
     ‘     - increment                                      -->  [..., [0,0,0,0], ...]
      Ḍ    - convert from decimal to integer                -->  [..., 0, ...]
       Ạ   - all truthy?                                    -->  0
        ¬  - logical NOT                                    -->  1

4

Japt , 9 byte

ñÍí§Vñn)e

Cobalah atau jalankan semua test case di TIO

ñÍí§Vñn)e     :Implicit input of arrays U=students, V=classrooms
ñ             :Sort U by
 Í            :  Subtracting each integer from 2
  í           :Interleave with
    Vñn       :  V sorted by negating each integer
   §          :  Reduce each pair by checking if the first is <= the second
       )      :End interleaving
        e     :All true?

ñÍeȧVn o

Cobalah atau jalankan semua test case di TIO

ñÍeȧVn o     :Implicit input of arrays U=students, V=classrooms
ñ             :Sort U by
 Í            :  Subtracting each integer from 2
  e           :Does every element return true
   È          :When passed through the following function
    §         :  Less than or equal to
     Vn       :  Sort V
        o     :  Pop the last element

Karena penasaran, mengapa ada built-byte tunggal untuk 2 - nIn Japt? Apa jenis kasus penggunaan yang harus dibenarkan itu menjadi 1 byte builtin?
Kevin Cruijssen

1
Pertanyaan bagus, @KevinCruijssen. Íadalah jalan pintas untuk n2<space>dan dibuat untuk digunakan dengan string, mengubahnya dari nomor basis-2 ke basis-10 (kebutuhan yang cukup umum). Namun, nmetode ini, ketika diterapkan pada angka, mengurangi angka itu dari argumen metode (default = 0). Jadi di sini, meskipun mengurangi dari 0akan cukup untuk menyortir array dalam urutan terbalik, menggunakan pintasan menghemat satu byte ñn<space>. Saya bisa juga menggunakannya ketika menyortir Vtetapi tidak akan menyimpan byte karena saya masih membutuhkan ruang, alih-alih ), untuk menutup ímetode ini.
Shaggy


3

MATL , 10 byte

yn&Y@>~!Aa

Cobalah online! Atau verifikasi semua kasus uji .

Penjelasan

Pertimbangkan input [20, 10, 30], [20, 20, 50, 40]sebagai contoh. Tumpukan ditunjukkan dari bawah ke atas.

y     % Implicit inputs. Duplicate from below
      % STACK: [20 10 30]
               [20 20 50 40]
               [20 10 30]
n     % Number of elements
      % STACK: [20 10 30]
               [20 20 50 40]
               3
&Y@   % Variations. Gives a matrix, each row is a variation
      % STACK: [20 10 30]
               [20 10 30
                20 20 40
                20 20 40
                ···
                50 40 20]
>~    % Less than? Element-wise with broadcast
      % STACK: [1 1 1
                1 1 1
                1 1 1
                ···
                1 1 0]
!     % Transpose
      % STACK: [1 1 1 ··· 0
                1 1 1 ··· 1
                1 1 1 ··· 1]
A     % All. True for columns that only contain nonzeros
      % STACK: [1 1 1 ··· 0]
a     % Any. True if the row vector contains at least a nonzero. Implicit display
      % STACK: 1


3

05AB1E , 14 12 8 byte

€{í0ζÆdP

Port of @Sok menjawab Pyth , jadi pastikan untuk menghapusnya juga!

Mengambil input sebagai daftar daftar, dengan daftar kelas sebagai item pertama dan daftar grup sebagai item kedua.

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

€{         # Sort each inner list
  í        # Reverse each inner list
   0ζ      # Zip/transpose; swapping rows/columns, with 0 as filler
     Æ     # For each pair: subtract the group from the classroom
      d    # Check if its non-negative (1 if truthy; 0 if falsey)
       P   # Check if all are truthy by taking the product
           # (and output implicitly)

Jawaban 12 byte lama:

æε{I{0ζÆdP}à

Mengambil daftar kelas terlebih dahulu, dan kemudian daftar kelompok.

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

æ             # Take the powerset of the (implicit) classroom-list,
              # resulting in a list of all possible sublists of the classrooms
 ε            # Map each classroom sublist to:
  {           #  Sort the sublist
   I{         #  Take the group-list input, and sort it as well
     0ζ       #  Transpose/zip; swapping rows/columns, with 0 as filler
       Æ      #  For each pair: subtract the group from the classroom
        d     #  Check for everything if it's non-negative (1 if truthy; 0 if falsey)
         P    #  Check if all are truthy by taking the product
            # After the map: check if any are truthy by getting the maximum
              # (and output the result implicitly)

1
Hehe Saya sangat terkejut bahwa Pyth telah mengalahkan 05AB1E karena perubahan, tetapi ternyata itu adalah algoritmenya: oP
Sok

1
@ Sok Maaf mengecewakan Anda. ; p Tapi terima kasih untuk -4 byte. : D
Kevin Cruijssen

3

C # (Visual C # Interactive Compiler) , 77 74 byte

a=>b=>a.Count==a.OrderBy(x=>-x).Zip(b.OrderBy(x=>-x),(x,y)=>x>y?0:1).Sum()

Cobalah online!

Kode yang dikomentari:

// a: student group counts
// b: classroom capacities
a=>b=>
  // compare the number of student
  // groups to...
  a.Count==
  // sort student groups descending
  a.OrderBy(x=>-x)
     // combine with classroom
     // capacities sorted descending
     .Zip(
        b.OrderBy(x=>-x),
        // the result selector 1 when
        // the classroom has enough
        // capacity, 0 when it doesn't
        (x,y)=>x<y?0:1
     )
     // add up the 1's to get the number
     // of student groups who can fit
     // in a classroom
     .Sum()

1
Saya tidak dapat menemukan satu garis yang masuk akal untuk itu. Pekerjaan yang baik!
Perwujudan Ketidaktahuan


2

Alat Bash + GNU, 68 byte

(sort -nr<<<$2|paste -d- - <(sort -nr<<<$1)|bc|grep -- -)&>/dev/null

69 byte

(paste -d- <(sort -nr<<<$2) <(sort -nr<<<$1)|bc|grep -- -)&>/dev/null

TIO

mengambil ruang siswa sebagai argumen pertama dan kedua sebagai nomor string yang dibatasi oleh baris baru mengembalikan status 1 untuk true atau 0 untuk false


2

Perl 5 -pal , 67 62 byte

@NahuelFouilleul menyimpan 5 byte dengan pengaturan ulang dan grep

$_=!grep$_>0,map$_-(sort{$b-$a}@F)[$x++],sort{$b-$a}<>=~/\d+/g

Cobalah online!

Versi 67 byte

Mengambil daftar ukuran ruang yang dipisahkan ruang pada baris pertama dan daftar ukuran ruang yang dipisahkan ruang pada baris berikutnya.



2

Gangguan Umum, 74 byte

(defun c(s r)(or(not(sort s'>))(and(sort r'>)(<=(pop s)(pop r))(c s r))))

Non-minified

(defun can-students-relocate (students rooms)
  (or (not (sort students #'>))
      (and (sort rooms #'>)
           (<= (pop students)
               (pop rooms))
           (can-students-relocate students rooms))))

Menguji

Perhatikan bahwa pengurutan secara permanen mengubah daftar, dan memunculkan kembali variabel ke elemen berikutnya.

Akibatnya ini hanya secara rekursif memeriksa bahwa kelompok siswa terbesar dapat ditampung di ruangan terbesar. Ada 3 kasus dasar:

  1. Tidak ada siswa - T kembali
  2. Siswa, tetapi tidak ada kamar - mengembalikan NIL
  3. Siswa dan kamar, tetapi kelompok siswa terbesar lebih besar dari kamar terbesar - pengembalian NIL


1

Retina 0.8.2 , 50 byte

\d+
$*
%O^`1+
%`$
,
^((1*,)(?=.*¶((?>\3?)1*\2)))*¶

Cobalah online! Tautan termasuk test suite. Membawa dua daftar grup dan kamar (test suite digunakan ;sebagai pemisah daftar). Penjelasan:

\d+
$*

Konversikan ke unary.

%O^`1+

Membalikkan setiap daftar secara terpisah.

%`$
,

Tambahkan koma ke setiap daftar.

^((1*,)(?=.*¶((?>\3?)1*\2)))*¶

Pastikan setiap angka dalam daftar pertama dapat dicocokkan dengan nomor yang sesuai dalam daftar kedua. Setiap kali \3berisi kamar yang sebelumnya cocok dan kelompok berikutnya \2karena itu harus dapat masuk ke kamar berikutnya. The (?>\3?)menangani kasus ruang pertama ketika tidak ada kamar sebelumnya belum.


1

Arang , 28 byte

W∧⌊講⌈§θ¹⌈§θ⁰UMθΦκ⁻ν⌕κ⌈κ¬⊟θ

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil daftar daftar kamar dan grup dan output -jika kamar dapat mengakomodasi grup. Penjelasan:

W∧⌊講⌈§θ¹⌈§θ⁰

Ulangi sementara grup dapat ditugaskan ke sebuah ruangan.

UMθΦκ⁻ν⌕κ⌈κ

Hapus kamar dan grup terbesar dari daftar mereka.

¬⊟θ

Pastikan tidak ada grup yang tidak terisi tersisa.


1

JavaScript, 56 byte

s=>c=>s.sort(g=(x,y)=>y-x).every((x,y)=>c.sort(g)[y]>=x)

Cobalah


Gagal untuk grup 7dan 9di kelas 8dan 10.
Neil

Terima kasih telah menunjukkannya, @Neil. Aku bertanya-tanya apakah yang telanjang tidak akan kembali menggigitku! Saya harus memutar kembali ke solusi asli saya sampai saya dapat menemukan waktu untuk mencoba lagi.
Shaggy

1

Perl 6 , 34 byte

{none [Z>] $_>>.sort(-*)>>[^.[0]]}

Cobalah online!

Mengambil input sebagai daftar dua daftar, grup dan ruang kelas, dan mengembalikan Persimpangan Tidak Ada yang dapat boolified ke true / false.

Penjelasan:

{                                }   # Anonymous code block
           $_>>.sort(-*)             # Sort both lists from largest to smallest
                        >>[^.[0]]    # Pad both lists to the length of the first list
 none                                # Are none of
      [Z>]                           # The groups larger than the assigned classroom

1

Ruby , 57 byte

->c,r{r.permutation.any?{|p|c.zip(p).all?{|a,b|b&&a<=b}}}

Cobalah online!

Dibutuhkan cuntuk kelas, runtuk kamar. Memeriksa semua permutasi kamar alih-alih menggunakan sortir, karena membalikkan biaya sortir terlalu banyak byte. Masih terlihat agak panjang ...


1

C # (Visual C # Interactive Compiler) , 105 93 91 82 81 79 77 76 74 byte

Sekarang cocok dengan skor dana!

n=>m=>{n.Sort();m.Sort();int i=m.Count-n.Count;i/=n.Any(b=>m[i++]<b)?0:1;}

Melempar kesalahan jika salah, tidak ada jika benar.

-12 byte terima kasih kepada @Destrogio!

Cobalah online!

Penjelasan

//Function taking in a list, and returning another function
//that takes in a list and doesn't return
n=>m=>{
  //Sort the student groups from smallest to largest
  n.Sort();
  //Sort the classrooms fom smallest capacity to largest
  m.Sort();
  //Initialize a variable that will function as a sort of index
  int i=m.Count-n.Count;
  //And divide that by...
  i/=
    //0 if any of the student groups...
    n.Any(b=>
      //Don't fit into the corresponding classroom and incrementing i in the process
      /*(In the case that a the amount of classrooms are less than the amount of
      student groups, an IndexOutOfRangeException is thrown)*/
      m[i++]<b)?0
    //Else divide by 1
    :1;
}


1
@Destrogio Terima kasih!
Perwujudan Ketidaktahuan

0

Java (OpenJDK 8) , 183 byte

a->{int b=a[0].length;Arrays.sort(a[0]);Arrays.sort(a[1]);if(b>a[1].length){return false;}for(int i=0;i<b;i++){if(a[0][i]>a[1][i]){return false;}}return true;}

Cobalah online!

Dengan sedikit saran bermanfaat dari Kevin Cruijssen dan hanya satu pandangan sekilas atas kode saya sendiri, saya dapat mengurangi skor saya dengan keseluruhan 9% hanya dengan mengganti tiga kata bahasa Inggris!

Java (OpenJDK 8) , 166 byte

a->{int b=a[0].length;Arrays.sort(a[0]);Arrays.sort(a[1]);if(b>a[1].length){return 0;}for(int i=0;i<b;){if(a[0][i]>a[1][i++]){return 0;}}return 1;}

Cobalah online!


Anda harus memasukkan import java.util.*;dalam byte-count Anda. Namun Anda dapat golf ke 144 byte di Java 8, atau 140 di Java 10 dengan mengganti booleandengan var.
Kevin Cruijssen

PS: Jika Anda membutuhkan true/ falsedalam kode Anda, 1>0/ 0>1adalah alternatif yang lebih pendek . :)
Kevin Cruijssen

sebenarnya, saya memang ingat untuk memasukkan 24 byte ekstra ke dalam hitungan saya! (Saya percaya Anda memberi tahu saya tentang aturan itu beberapa bulan yang lalu XD), tetapi terima kasih atas tipnya! sakit mencobanya!
X1M4L

3
Ini gagal pada test case terakhir.
Shaggy

Tentang versi 166-byte Anda: walaupun status pertanyaannya dapat Anda kembalikan 1/0dan saya kira tidak masalah dalam hal ini, harap dicatat bahwa di Jawa tidak seperti Python, JavaScript, C, dll. 1/0Biasanya tidak dianggap sebagai output kebenaran / falsey yang valid . Dan dalam komentar pertama saya, saya menyebutkan versi 144-byte . :) Meskipun, sekarang juga tidak valid karena tidak berfungsi untuk test case terakhir, seperti yang disebutkan oleh @Shaggy .
Kevin Cruijssen

0

PowerShell , 80 byte

param($s,$c)!($s|sort -d|?{$_-gt($r=$c|?{$_-notin$o}|sort|select -l 1);$o+=,$r})

Cobalah online!

Skrip uji yang kurang golf:

$f = {

param($students,$classrooms)
$x=$students|sort -Descending|where{          
    $freeRoomWithMaxCapacity = $classrooms|where{$_ -notin $occupied}|sort|select -Last 1
    $occupied += ,$freeRoomWithMaxCapacity    # append to the array
    $_ -gt $freeRoomWithMaxCapacity           # -gt means 'greater than'. It's a predicate for the 'where'
}                                             # $x contains student groups not assigned to a relevant classroom
!$x                                           # this function returns a true if $x is empty

}

@(
    ,(@(10, 20, 30), @(31, 12, 20), $true)
    ,(@(10, 20, 30), @(100, 200), $False)
    ,(@(20, 10, 30), @(20, 20, 50, 40), $True)
    ,(@(30, 10, 30, 5, 100, 99), @(40, 20, 50, 40, 99, 99), $False)
    ,(@(), @(10, 10, 10), $True)
    ,(@(10, 10, 10), @(), $False)
    ,(@(), @(), $True)
    ,(@(10, 1), @(100), $False)
    ,(@(10), @(100, 100), $True)
    ,(@(1,2,3), @(1,1,2,3), $True)
) | % {
    $students, $classrooms, $expected = $_
    $result = &$f $students $classrooms
    "$($result-eq$expected): $result"
}

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.