転校(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/0True/False、など...)

5
推奨されるテストケース:g=[1,2,3], c=[1,1,2,3]
TFeld

ここに投稿する許可はありますか?
アダム

2
@Adámはい。私は先生(コンテストの担当者)に尋ねましたが、彼は問題はないと言いました。唯一のことは、それが毎日1つの課題であることです
ルイスフェリペデジェススムニョス

0グループや教室に有効な値はありますか?
nimi

回答:


14

Brachylog、4バイト

チャレンジを見て、brachylogがすべての人を打ち負かすことを知っていることは常に素晴らしいことです。現在のクラスを入力として、新しい教室を出力として使用します。学生に適合する方法が見つかった場合はtrue、それ以外の場合はfalseを出力します

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

リストのリストとして入力を受け取り、最初に教室のサイズ、2番目にグループのサイズ。ここでオンライン試すか、ここですべてのテストケースを一度に確認してください

.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バイト

教室を最初の引数とし、グループを2番目の引数とします。

Œ!~+Ṡ‘ḌẠ¬

オンラインでお試しください!

コメント済み

注意:これṠ‘ḌẠ¬は長すぎます。しかし、とにかくこれは正しいアプローチではないと思います。

Œ!~+Ṡ‘ḌẠ¬  - 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バイトの組み込みであることを正当化するには、どのようなユースケースが必要ですか?
ケビンクルーッセン

1
良い質問です、@ KevinCruijssen。Íは、n2<space>文字列で使用するためのショートカットであり、文字列で使用するために作成され、ベース2からベース10の数値に変換されます(かなり一般的な必要性)。ただし、nメソッドを数値に適用すると、メソッドの引数からその数値が減算されます(デフォルト= 0)。そのため、ここでは0、配列を逆の順序で並べ替えるにはから差し引くだけで十分ですが、ショートカットを使用するとを1バイト節約できますñ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

05AB1E14 12 8 バイト

€{í0ζÆdP

@SokのPyth回答のポートなので、必ず彼も賛成してください!

入力をリストのリストとして取得し、教室リストを最初の項目として、グループリストを2番目の項目として使用します。

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

€{         # 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
Hehe私は、Pythが変更のために05AB1Eを破ったことを嬉しく思いましたが、結局はアルゴリズムだったことがわかりました:oP
Sok

1
@Sok失望させてすみません。; pしかし、-4バイトありがとう。:D
ケビンクルーッセン

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

Bash + 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

改行で区切られた文字列番号として、学生部屋を最初と2番目の引数として受け取り、trueの場合は終了ステータス1、falseの場合は0を返します



2

Common Lisp、74バイト

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

縮小されていない

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

試して

ソートはリストを永続的に変更し、popは変数を次の要素に再バインドすることに注意してください。

実際には、これは、最大の学生グループが最大の部屋に収まることを単に再帰的にチェックします。3つのベースケースがあります。

  1. 生徒なし-Tを返す
  2. 学生はいるが部屋はない-NILを返す
  3. 学生と部屋、ただし最大の部屋より大きい最大の学生グループ-NILを返す


1

Retina 0.8.2、50バイト

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

オンラインでお試しください!リンクにはテストスイートが含まれます。グループと部屋の2つのリストを取ります(テストスイートは;リストの区切りとして使用します)。説明:

\d+
$*

単項に変換します。

%O^`1+

各リストを個別に逆ソートします。

%`$
,

各リストにコンマを追加します。

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

最初のリストの各番号が、2番目のリストの適切な番号と一致することを確認してください。毎回\3、以前に一致した部屋が含まれている\2ため、次のグループは次の部屋に収まる必要があります。(?>\3?)ハンドル以前の部屋がまだ存在しない最初の部屋の場合。


1

、28バイト

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

オンラインでお試しください!リンクは、コードの詳細バージョンです。部屋とグループのリストのリストを取得し-、部屋がグループに対応できる場合に出力します。説明:

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

グループを部屋に割り当てることができる間、繰り返します。

UMθΦκ⁻ν⌕κ⌈κ

リストから最大の部屋とグループを削除します。

¬⊟θ

割り当てられていないグループが残っていないことを確認します。


1

JavaScript、56バイト

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

それを試してみてください


グループのために失敗した79のクラスで810
ニール

それを指摘してくれてありがとう、@ Neil。私は裸の種類がお尻で私を噛むために戻って来ないのだろうかと思いました!再試行する時間が見つかるまで、元のソリューションにロールバックする必要があります。
シャギー

1

Perl 6、34バイト

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

オンラインでお試しください!

グループと教室の2つのリストのリストとして入力を受け取り、true / falseにブール化できるNone Junctionを返します。

説明:

{                                }   # 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バイト

ダナのスコアと一致するようになりました!

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

falseの場合はエラーをスローし、trueの場合は何もスローしません。

@Destrogioのおかげで-12バイト!

オンラインでお試しください!

説明

//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ありがとう!
無知の具現化

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からの少し役立つアドバイスと、自分のコードをもう一度見ただけで、3つの英語の単語を置き換えるだけで、スコアを全体で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.*;バイトカウントに含める必要があります。ただし、をに置き換えることにより、Java 8では144バイト、Java 10では140 バイトにゴルフできますbooleanvar
ケビンクルーッセン

PS:あなたが必要な場合はtrue/ falseあなたのコードでは、1>0/ 0>1短い選択肢です。:)
ケビンクルーッセン

実際、余分な24バイトをカウントに含めることを忘れませんでした!(XDの数か月前にそのルールを知らせてくれたと思います)が、ヒントをありがとう!病気を試してみてください!
X1M4L

3
これは最後のテストケースに失敗します。
シャギー

166バイトバージョンについて:返される可能性のある質問の状態ですが1/0、この場合は問題ありませんが、JavaではPython、JavaScript、Cなどと異なり、1/0通常、有効な真実/偽の出力とは見なされないことに注意してください。そして、私の最初のコメントで、144バイトのバージョンについて言及しました。:)しかし、@ Shaggyで述べられているように、最後のテストケースでは機能しないため、これも無効になりました
ケビンクルーッセン

0

PowerShell、80バイト

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

オンラインでお試しください!

ゴルフの少ないテストスクリプト:

$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.