โรงเรียนย้ายออก (วันที่ 1)


21

ท้าทายถ่ายโดยได้รับอนุญาตจากการประกวดรหัสมหาวิทยาลัยของฉัน


หลายปีที่ผ่านมาจำนวนนักเรียนในโรงเรียนของฉันเพิ่มขึ้นอย่างต่อเนื่อง อันดับแรกจำนวนนักเรียนเพิ่มขึ้นในห้องเรียน แต่จากนั้นจำเป็นต้องแปลงพื้นที่บางส่วนสำหรับบางกลุ่มเพื่อให้มีห้องเรียนเช่นห้องออกกำลังกายหรือหลักสูตรสุดท้ายนี้ถึงห้องไม้กวาด

เมื่อปีที่แล้วหน่วยงานวิชาการมีงบประมาณในการสร้างอาคารใหม่และเริ่มทำงาน ในที่สุดพวกเขาก็เสร็จแล้วและสามารถใช้อาคารใหม่ได้แล้วดังนั้นเราจึงสามารถย้ายได้ (อาคารเก่าจะได้รับการฟื้นฟูและจะใช้สำหรับฟังก์ชั่นอื่น) แต่มันทำให้เราผ่านไปครึ่งทาง ผู้กำกับต้องการทราบว่าการย้ายจะเป็นไปได้โดยไม่แยกหรือเข้าร่วมกลุ่มหรือว่านักเรียนบางคนต้องเปลี่ยนกลุ่ม

ท้าทาย

กำหนดจำนวนนักเรียนของกลุ่มปัจจุบันและห้องเรียนใหม่ (ความจุ) ส่งออกค่าความจริงถ้าเป็นไปได้ที่จะกำหนดห้องเรียนที่แตกต่างกันด้วยความจุที่เพียงพอให้กับแต่ละกลุ่มปัจจุบันหรือค่าความเท็จเป็นอย่างอื่น

กรณีทดสอบ

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

หมายเหตุ

  • คุณสามารถรับอินพุตในรูปแบบที่เหมาะสม
  • คุณสามารถส่งออกใด ๆ ค่า Truthy / Falsey ( 1/0, True/Falseฯลฯ ... )

5
testcase ที่แนะนำ:g=[1,2,3], c=[1,1,2,3]
TFeld

คุณได้รับอนุญาตให้โพสต์ไว้ที่นี่หรือไม่?
Adám

2
@ Adámใช่ ฉันถามครูของฉัน (ใครเป็นผู้รับผิดชอบการแข่งขัน) และเขาบอกว่าไม่มีปัญหา สิ่งเดียวคือมันเป็นสิ่งที่ท้าทายในแต่ละวัน
Luis felipe De jesus Munoz

เป็น0ค่าที่ถูกต้องสำหรับกลุ่มหรือห้องเรียน?
nimi

1
@Shaggy ความผิดพลาดใด ๆ/ ความจริงค่า
Luis felipe De jesus Munoz

คำตอบ:


14

Brachylogขนาด 4 ไบต์

เป็นเรื่องที่ดีเสมอที่ได้เห็นความท้าทายและรู้ว่า brachylog จะเอาชนะทุกคนได้ ใช้คลาสปัจจุบันเป็นอินพุตและห้องเรียนใหม่เป็นเอาต์พุต มันจะออกจริงถ้าพบวิธีที่จะให้พอดีกับนักเรียนที่เป็นเท็จอย่างอื่น

p≤ᵐ⊆

คำอธิบาย

รหัสมี 3 ส่วนโดยที่การสั่งซื้อนั้นไม่สำคัญ

≤ᵐ --> 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

ลองออนไลน์!


4

Pyth, 11 ไบต์

.AgM.t_DMQ0

ใช้อินพุตเป็นรายการของรายการขนาดห้องเรียนก่อนขนาดกลุ่มที่สอง ลองออนไลน์ได้ที่นี่หรือตรวจสอบทุกกรณีการทดสอบในครั้งเดียวที่นี่

.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

เยลลี่ขนาด 9 ไบต์

นำห้องเรียนเป็นอาร์กิวเมนต์แรกและกลุ่มเป็นอาร์กิวเมนต์ที่สอง

Œ!~+Ṡ‘ḌẠ¬

ลองออนไลน์!

แสดงความคิดเห็น

NB: Ṡ‘ḌẠ¬มันยาวเกินไป แต่ฉันสงสัยว่านี่ไม่ใช่วิธีที่ถูกต้องอยู่ดี

Œ!~+Ṡ‘ḌẠ¬  - 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 ไบต์

ñÍí§Vñn)e

ลองใช้หรือเรียกใช้กรณีทดสอบทั้งหมดใน 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

ลองใช้หรือเรียกใช้กรณีทดสอบทั้งหมดใน 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

ทำไมความอยากรู้อยากเห็นของ2 - nIn Japt ถึงมีไบต์เดียว? กรณีการใช้งานประเภทใดที่ต้องพิสูจน์ว่ามันเป็นบิวด์อิน 1 ไบต์
Kevin Cruijssen

1
เป็นคำถามที่ดี @KevinCruijssen Íเป็นทางลัดสำหรับn2<space>และถูกสร้างขึ้นเพื่อใช้กับสตริงโดยแปลงจากเลขฐาน 2 เป็นเลขฐาน 10 (เป็นความต้องการทั่วไป) อย่างไรก็ตามnเมธอดเมื่อใช้กับตัวเลขให้ลบตัวเลขนั้นออกจากอาร์กิวเมนต์ของเมธอด (default = 0) ดังนั้นที่นี่แม้จะลบจากจะพอเพียงสำหรับการเรียงลำดับอาร์เรย์ย้อนลำดับโดยใช้ทางลัดช่วยฉันไบต์มากกว่า0 ñn<space>ฉันสามารถใช้มันได้เมื่อเรียงลำดับVแต่มันจะไม่ได้บันทึกไบต์ใด ๆ เนื่องจากฉันยังต้องการพื้นที่ว่างแทนการ)ปิดíวิธี
ขนด


3

MATL 10 ไบต์

yn&Y@>~!Aa

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย

พิจารณาปัจจัยการผลิต[20, 10, 30], [20, 20, 50, 40]เป็นตัวอย่าง สแต็คแสดงให้เห็นจากล่างขึ้นบน

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 ไบต์

€{í0ζÆdP

คำตอบของพอร์ตของ@Sok Pyth ดังนั้นอย่าลืมโหวตเขาเช่นกัน!

ใช้อินพุตเป็นรายการโดยใช้รายการในห้องเรียนเป็นรายการแรกและรายการกลุ่มเป็นรายการที่สอง

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย:

€{         # 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)

คำตอบเก่า 12 ไบต์:

æε{I{0ζÆdP}à

นำรายชื่อห้องเรียนเป็นอันดับแรกจากนั้นเลือกรายชื่อกลุ่ม

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย:

æ             # 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
ฉันรู้สึกประหลาดใจเป็นสุขที่ Pyth ได้ตี 05AB1E เพื่อการเปลี่ยนแปลง แต่กลับกลายเป็นว่าเป็นอัลกอริทึมหลังจากทั้งหมด: oP
Sok

1
@Sok ขออภัยที่ทำให้คุณผิดหวัง ; p แต่ขอบคุณสำหรับ -4 ไบต์ : D
Kevin Cruijssen

3

C # (Visual C # Interactive Compiler) , 77 74 ไบต์

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

ลองออนไลน์!

รหัสความคิดเห็น:

// 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
ฉันไม่สามารถหาหนึ่งซับที่เหมาะสมสำหรับมัน งานที่ดี!
ศูนย์รวมแห่งความไม่รู้


2

เครื่องมือทุบตี + GNU ขนาด 68 ไบต์

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

69 ไบต์

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

TIO

ใช้ห้องพักนักเรียนเป็นอาร์กิวเมนต์ตัวแรกและตัวที่สองเป็นตัวเลขสตริงคั่นด้วย newline ส่งคืนสถานะออก 1 สำหรับจริงหรือ 0 สำหรับเท็จ


2

Perl 5 -pal , 67 62 ไบต์

@NahuelFouilleul บันทึก 5 ไบต์ด้วยการจัดเรียงใหม่และ grep

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

ลองออนไลน์!

รุ่น 67 ไบต์

นำรายการพื้นที่ที่แยกออกจากกันของขนาดชั้นเรียนในบรรทัดแรกและรายการที่แยกพื้นที่ด้วยขนาดห้องถัดไป



2

Lisp ทั่วไป, 74 ไบต์

(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))))

ทดสอบมัน

โปรดทราบว่าการเรียงลำดับจะกลายพันธุ์รายการอย่างถาวรและป๊อปเชื่อมโยงตัวแปรไปยังองค์ประกอบถัดไป

ด้วยเหตุนี้จึงตรวจสอบซ้ำว่ากลุ่มนักเรียนที่ใหญ่ที่สุดสามารถเข้าห้องที่ใหญ่ที่สุดได้ มี 3 กรณีฐาน:

  1. ไม่มีนักเรียน - คืน T
  2. นักเรียน แต่ไม่มีห้อง - ส่งคืน NIL
  3. นักเรียนและห้อง แต่กลุ่มนักเรียนที่ใหญ่ที่สุดใหญ่กว่าห้องที่ใหญ่ที่สุด - ส่งคืน NIL


1

เรติน่า 0.8.2 , 50 ไบต์

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

ลองออนไลน์! การเชื่อมโยงรวมถึงชุดทดสอบ ใช้รายการกลุ่มและห้องสองรายการ (ชุดทดสอบใช้;เป็นตัวคั่นรายการ) คำอธิบาย:

\d+
$*

แปลงเป็นเอก

%O^`1+

เรียงลำดับย้อนกลับแต่ละรายการแยกกัน

%`$
,

เพิ่มเครื่องหมายจุลภาคต่อท้ายแต่ละรายการ

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

ตรวจสอบว่าแต่ละหมายเลขในรายการแรกสามารถจับคู่กับหมายเลขที่เหมาะสมในรายการที่สอง แต่ละครั้งจะ\3มีห้องที่จับคู่ก่อนหน้านี้และกลุ่มถัดไป\2จึงจำเป็นต้องสามารถใส่เข้าไปในห้องถัดไปได้ (?>\3?)จับกรณีของห้องแรกเมื่อไม่มีห้องก่อนหน้านี้เลย


1

ถ่าน 28 ไบต์

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

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด ใช้รายการของห้องและกลุ่มและเอาท์พุท-ถ้าห้องสามารถรองรับกลุ่ม คำอธิบาย:

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

ทำซ้ำในขณะที่กลุ่มสามารถกำหนดให้กับห้อง

UMθΦκ⁻ν⌕κ⌈κ

ลบห้องและกลุ่มที่ใหญ่ที่สุดออกจากรายการ

¬⊟θ

ตรวจสอบว่าไม่มีกลุ่มที่ไม่ได้ถูกจัดสรรเหลืออยู่


1

จาวาสคริปต์, 56 ไบต์

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

ลองมัน


ล้มเหลวสำหรับกลุ่ม7และ9ในชั้นเรียนของและ8 10
Neil

ขอบคุณที่ชี้ให้เห็นว่า @Neil ฉันสงสัยว่ารูปแบบเปลือยจะไม่กลับมากัดฉันในตูด! ฉันจะต้องย้อนกลับไปที่โซลูชันดั้งเดิมของฉันจนกว่าฉันจะหาเวลาลองได้อีกครั้ง
Shaggy

1

Perl 6 , 34 ไบต์

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

ลองออนไลน์!

รับอินพุตเป็นรายการของสองรายการกลุ่มและห้องเรียนและส่งคืน None Junction ที่สามารถทำ boolified เป็น true / false

คำอธิบาย:

{                                }   # 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

ทับทิม , 57 ไบต์

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

ลองออนไลน์!

ใช้เวลาcเรียนrสำหรับห้องพัก ตรวจสอบการเรียงสับเปลี่ยนของห้องทั้งหมดแทนที่จะใช้การเรียงลำดับเนื่องจากการเรียงลำดับย้อนกลับมีค่าใช้จ่ายมากเกินไป ยังดูค่อนข้างยาว ...


1

C # (Visual C # Interactive Compiler) , 105 93 91 82 81 79 77 76 74 74 ไบต์

ตอนนี้ตรงกับคะแนนของ Dana!

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

โยนข้อผิดพลาดถ้าเป็นเท็จไม่มีอะไรจะเป็นจริง

-12 ไบต์ขอบคุณ @Destrogio!

ลองออนไลน์!

คำอธิบาย

//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;
}



0

Java (OpenJDK 8) , 183 ไบต์

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;}

ลองออนไลน์!

ด้วยคำแนะนำที่เป็นประโยชน์เล็กน้อยจาก Kevin Cruijssenและเพียงแค่เหลือบมองรหัสของฉันอีกครั้งฉันสามารถลดคะแนนของฉันลง 9% เพียงแค่เปลี่ยนคำภาษาอังกฤษสามคำ!

Java (OpenJDK 8) , 166 ไบต์

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;}

ลองออนไลน์!


คุณจะต้องรวมimport java.util.*;จำนวนไบต์ของคุณ แต่คุณสามารถกอล์ฟไปยัง144 ไบต์ในชวา 8 หรือ 140 ในชวา 10 โดยการแทนที่ด้วยboolean var
Kevin Cruijssen

PS: ถ้าคุณไม่ต้องการtrue/ falseในรหัสของคุณ1>0/0>1ทางเลือกที่สั้นกว่า :)
Kevin Cruijssen

จริง ๆ แล้วฉันจำได้ว่าต้องรวม 24 ไบต์พิเศษไว้ในการนับของฉัน (ฉันเชื่อว่ามันเป็นคุณแจ้งว่ากฎเดือนที่ผ่านมา XD) แต่ขอบคุณสำหรับเคล็ดลับ! ไม่ให้มันยิง!
X1M4L

3
กรณีนี้ล้มเหลวในการทดสอบครั้งสุดท้าย
ปุย

เกี่ยวกับรุ่น 166 ไบต์ของคุณ: แม้ว่ารัฐคำถามที่คุณสามารถกลับมา1/0และผมคิดว่ามันอย่างดีในกรณีนี้โปรดทราบว่าในชวาแตกต่างจากงูหลาม, JavaScript, C, ฯลฯ1/0มักจะไม่ได้รับการพิจารณาเป็นที่ถูกต้อง truthy / falsey เอาท์พุท และในความคิดเห็นแรกของฉันฉันกล่าวถึง144 ไบต์รุ่น :) แม้ว่ามันตอนนี้ยังไม่ถูกต้องเพราะมันไม่ได้ผลสำหรับกรณีทดสอบที่ผ่านมาดังกล่าวโดย@Shaggy
Kevin Cruijssen

0

PowerShell , 80 ไบต์

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

ลองออนไลน์!

สคริปต์ทดสอบ golfed น้อย:

$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"
}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.