আগের চেয়ে বেশি দেরী!


12

আপনার প্রোগ্রাম / ফাংশন ইত্যাদিতে 2 ইনপুট লাগবে। প্রথমটি আমার দলে কে এবং কখন এসেছিল তার তালিকা হবে। উদাহরণ:

Kevin 13:02  
Ruby 5  
Sam 3  
Lisa 6  
Bob 12  

ওটার মানে কি? এর অর্থ হ'ল কেভিন আমার পার্টিতে প্রথম এসেছেন (১৩:০২, ২৪ ঘন্টা সময়), তারপরে রুবি ৫ মিনিট পরে, স্যাম 3 মিনিট পরে, লিসা 6 মিনিট পরে, এবং শেষ বব 12 মিনিট পরে।

দ্বিতীয় ইনপুটটি যখন আমার পার্টি শুরু হবে। উদাহরণ:

13:15

(24 ঘন্টা সময়)। আপনার আউটপুটটি অবশ্যই দেরী হওয়া লোকদের তালিকা হতে হবে (ঠিক সময়ে সময়ে যে কেউ ঠিক আছে।) উদাহরণ গণনা (কেবল উদাহরণস্বরূপ, এগুলি আউটপুট দেবেন না)

Kevin 13:02
Ruby 13:07
Sam 13:10
Lisa 13:16
Bob 13:28

লিসা এবং বব এর পরে এসেছিল 13:15, সুতরাং এই প্রোগ্রামটি "লিসা, বব" প্রিন্ট করা উচিত।

ইনপুট অনুমান

  • ইনপুট 1 সর্বদা একটি নাম (রেজেক্স [A-Z][a-z]*), তারপরে একটি স্থান, তারপরে hours:minutesপ্রথম লাইনে ফর্মের 24 ঘন্টা সময় , তারপরে একটি নাম, একটি স্থান এবং পরের লাইনে একটি ধনাত্মক পূর্ণসংখ্যার (মিনিটের পরে সংখ্যা) থাকবে । সর্বদা কমপক্ষে 1 লাইন থাকবে।
  • আপনি চাইলে লাইন ব্রেকের পরিবর্তে অন্য কোনও অক্ষরের সাথে ইনপুট 1 নিতে পারেন।
  • ইনপুট 2 ফর্ম্যাটে থাকবে hours:minutes
  • আপনি চাইলে আপনার ইনপুটগুলি কোনও অক্ষর দ্বারা পৃথক করা একটি স্ট্রিং হিসাবে নিতে পারেন। এটি alচ্ছিক।
  • ডে ক্রসওভার সম্পর্কে চিন্তা করবেন না। আমার দলগুলোর পরে আর হয় না 23:59

আউটপুট বিধি

  • আউটপুট একটি ফাংশন রিটার্ন মান বা একটি স্ট্রিং যা STDIN, কোনও ফাইল ইত্যাদিতে প্রতিধ্বনিত হতে পারে ইত্যাদি হতে পারে আপনাকে অবশ্যই একটি স্ট্রিং বা অ্যারে / তালিকা ফেরত দিতে হবে।
    • আপনি যদি কোনও স্ট্রিং ফিরিয়ে দেন তবে অবশ্যই এটি অবশ্যই প্রতিটি দেরী হওয়া উচিত (অর্ডার কোনও বিষয় নয়), কোনও অ-বর্ণমালা সংক্রান্ত সীমানার দ্বারা পৃথক।
    • আপনি যদি অ্যারে / তালিকাটি ফেরত দেন তবে অবশ্যই দেরী হওয়া প্রত্যেকের একটি তালিকা হতে হবে।

2
কঠোর ইনপুট ফর্ম্যাট কি প্রয়োজনীয়? উদাহরণস্বরূপ, প্রথম ইনপুটটি তালিকার একটি তালিকা হতে পারে, প্রতিটি দুটি ডাটা আইটেমযুক্ত "লাইন" হতে পারে?
জোনাথন অ্যালান

"ইনপুট 1 সর্বদা একটি নাম থাকবে (regex [A-Z][a-z]*)" এটি কি নাম খালি থাকতে পারে তা বোঝায়?
হাইপারনিউট্রিনো

2
আমি ধরে নিয়েছি আপনার অর্থ হ্যাঁ "হ্যাঁ কঠোর ইনপুট ফর্ম্যাটটি প্রয়োজনীয়"।
জোনাথন অ্যালান

2
কঠোর ইনপুট ফর্ম্যাটটি এই চ্যালেঞ্জটিকে কম আকর্ষণীয় করে
লুইস মেন্ডো

3
"আমার দলগুলি 11:59 এর পরে আর হয় না" " মানে 23:59?
tsh

উত্তর:


3

এমএটিএল , 31 বাইট

jYb1L&)1&)XUYs1440/0whwYO+jYO>)

প্রথম ইনপুটটি লাইন ব্রেকের পরিবর্তে স্থান ব্যবহার করে (চ্যালেঞ্জের দ্বারা অনুমোদিত)।

আউটপুট বিভাজক হিসাবে লাইন বিরতি ব্যবহার করে।

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

j       % Input first string
Yb      % Split at spaces. Gives cell array of strings
1L&)    % Separate into subarrays with odd and even indices. Odd are names, even
        % are time and increments in minutes
1&)     % Separate the subarray of even indices into first entry and remaining
        % entries. The first is a string representing the time of first arrival,
        % the rest are strings representing increments in minutes
XU      % Convert strings representing increments into the actual numbers
Ys      % Cumulative sum
1440/   % Divide by 1440 (number of minutes in a day)
0wh     % Prepend a 0
w       % Swap. Bring the string with time of first arrival to the top
YO      % Convert to serial date number. Fractional part indicates time
+       % Add. This gives all arrivals as serial date numbers
j       % Input second string
YO      % Convert to serial date number
>       % Less than?, element-wise
)       % Index: select the names for which the comparison gave true
        % Implicitly display

6

জাভাস্ক্রিপ্ট (ES6), 98 97 বাইট

নীলকে ধন্যবাদ 1 বাইট সংরক্ষিত

সিনট্যাক্স কারি lকরার জন্য অতিথিদের তালিকা এবং পার্টির সময় hনেয় (l)(h)। তালিকায় একটি চলমান লাইন ব্রেক ব্রেক আশা করে। নামের মতো একটি স্থান-বিভাজিত তালিকা প্রদান করেLisa Bob

l=>h=>l.replace(/(.* )(.*)\n/g,(_,a,b)=>(t-=T(b))<0?a:'',t=(T=h=>eval(h.replace(/:/,'*60+')))(h))

ফর্ম্যাট এবং মন্তব্য

l => h =>                         // given a list of guests l and a party time h
  l.replace(                      // for each guest in l:
    /(.* )(.*)\n/g,               //   extract the name a and arrival time b
    (_, a, b) =>                  //   subtract the arrival time from the time counter
      (t -= T(b)) < 0 ?           //   if the result is negative:
        a                         //     the guest is late: keep the name
      :                           //   else:
        '',                       //     the guest is on time: remove this entry
    t = (                         //   initialize the time counter t
      T = h =>                    //   define T():
        eval(                     //     a function that takes either a time
          h.replace(/:/, '*60+')  //     in hh:mm format or an amount of minutes
        )                         //     and returns an amount of minutes   
    )(h)                          //   call it with the party time
  )                               // end of replace()

ডেমো

let f =

l=>h=>l.replace(/(.* )(.*)\n/g,(_,a,b)=>(t-=T(b))<0?a:'',t=(T=h=>eval(h.replace(/:/,'*60+')))(h))

console.log(f(`Kevin 13:02
Ruby 5
Sam 3
Lisa 6
Bob 12
`)('13:15'))


চতুর সমাধান! +1 টি। খনি তো অনেক দূরে ....... :(
অর্জুন

(.*) (.*)\nকাজ করে না ?
নীল

@ নিল ডিফল্টরূপে লোভী হওয়ায় প্রথমটি (.*)পুরো লাইনের সাথে মিলবে।
আর্নৌল্ড

তাহলে স্পেস মিলবে কী?
নীল

@ নীল ওহ, দুঃখিত, আপনি ঠিক বলেছেন।
আরনৌল্ড

6

পিএইচপি, 118 98 95 91 বাইট

while($n=$argv[++$i])$i&1?$p=$n:($t=($f=strtotime)($n)?:$t+60*$n)<=$f(end($argv))?:print$p;

কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয় (আপনি যদি এটি পছন্দ করেন তবে স্পেস দ্বারা পৃথক করা রেখা হিসাবে এটি ব্যাখ্যা করতে পারেন); সীমানা ছাড়াই নাম মুদ্রণ করে। এটি দিয়ে চালান -rবা এটি অনলাইনে পরীক্ষা করুন

সম্পাদনা 1: সরাসরি মুদ্রণের সাথে 20 টি বাইট সংরক্ষণ করা হয়েছে
2: ডিলিমিটার
সম্পাদনা সরিয়ে 3 বাইট সংরক্ষণ করা হয়েছে 3: প্লেইন ইন্টিজারগুলি শোষণ করে 4 টি বাইট সংরক্ষণের কোনও বৈধ তারিখ নেইstrtotime

ভাঙ্গন

while($n=$argv[++$i])       # loop through arguments, skip [0]
    $i&1                        # if index is odd   
    ?   $p=$n                   # then assign name to $p
    :   ($t=                    # else $t =
        ($f=strtotime)($n)          # if $n is a valid time, parse it
        ?:$t+60*$n                  # else add $n minutes to current $t
        )<=$f(end($argv))           # if $t <= parsed party start
        ?                           # then do nothing
        :print$p;                   # else print name


5

জাভাস্ক্রিপ্ট ES6, 185 বাইট

l=>t=>l.split`
`.map(p=>p.split` `).map((p,i,a)=>[p[0],i?d(a[0][1])+a.slice(1,i+1).reduce((a,p)=>a+=+p[1],0)*6e4:(d=x=>Date.parse(`2017T${x}`))(p[1])]).filter(p=>p[1]>d(t)).map(p=>p[0])

এটি অনলাইন চেষ্টা করুন!

const f = l=>t=>l.split`
`.map(p=>p.split` `).map((p,i,a)=>[p[0],i?d(a[0][1])+a.slice(1,i+1).reduce((a,p)=>a+=+p[1],0)*6e4:(d=x=>Date.parse(`2017T${x}`))(p[1])]).filter(p=>p[1]>d(t)).map(p=>p[0])


console.log(f('Kevin 13:02\nRuby 5\nSam 3\nLisa 6\nBob 12')('13:15'))


যতদূর আমি স্পেক থেকে বলতে পারি ইনপুট ফর্মটি আরও কঠোর হতে পারে।
জোনাথন অ্যালান

আমি মনে করি এটি এখন ঠিক আছে।
বুলেটগুলি

হ্যাঁ - আমি ইনপুট কঠোরতার বিষয়েও জিজ্ঞাসা করেছি।
জোনাথন অ্যালান

... আসলে আপনার ইনপুটটিতে সময়গুলি রয়েছে, এটি অফসেটগুলি হওয়া উচিত নয়f('Kevin 13:02\nRuby 5\nSam 3...
জোনাথন অ্যালান

1
@ জোনাথান অ্যালান ধন্যবাদ এখন বুঝতে পেরেছি.
বুলেটগুলি

4

পাওয়ারশেল , 215 196 180 বাইট

param($a,$b)$x,[array]$a=$a-split',';$z=@{};$i,$j=-split$x;$z[$i]=($y=date $j);0..($a.count-1)|%{$i,$j=-split$a[$_];$z[$i]=($y=$y|% *es $j)};($z|% *or|?{$_.value-gt(date $b)}).Name

এটি অনলাইন চেষ্টা করুন!

এর মোটামুটি 1/3 হ'ল ইনপুট পার্সিং, সুতরাং আমি আরও কতটা গল্ফ করতে পারি তা নিশ্চিত নই।

ইনপুট লাগে $aনাম এবং বার / মিনিট সময় কমা দ্বারা আলাদা করা স্ট্রিং হিসেবে, এবং $bযেমন hh:mmএকটি স্ট্রিং হিসাবে। প্রথমত, আমরা -split $aউপর ,, প্রথম ফলাফলের সংরক্ষণ $xএবং মধ্যে অবশিষ্ট $a, একটি সুনির্দিষ্ট পুনরায় কাস্টের সাথে $aএকটি হিসাবে array(তাই যে লুপ পরে সঠিকভাবে কাজ করে)। আমরা আমাদের hashtable আরম্ভ $z, সেট $iএবং $jহতে $x -splitহোয়াইটস্পেস, এবং সেট $z[$i]হতে dateএর $j(মধ্যে সঞ্চিত$y পরে ব্যবহার করার জন্য)।

তারপর অবশিষ্ট মাধ্যমে লুপ আমরা $a। প্রতিটি পুনরাবৃত্তি, আমরা অনুরূপ করি - -splitহোয়াইটস্পেসের স্ট্রিং, যথাযথ $zসূচকটি সেট করে যা বর্তমানে আমরা যেখানে রয়েছি তার বাইরে আরও অনেক বেশি মিনিট সেট করে । এর পরিবর্তে কিছু বাইট সংরক্ষণ করার জন্য এটি সংক্ষিপ্ত সম্পত্তি নামের ট্রিক ব্যবহার |% *es $jকরে .AddMinutes($j)

পরিশেষে, আমরা .GetEnumerator()আমাদের hashtable এর (আবার কৌতুক ব্যবহার করে), এবং Where-Objectএকটি যাদের এন্ট্রি নির্বাচন valueযে -greater tহান $b(অর্থাত, তারা পক্ষের কাছে দেরি)। এরপরে আমরা এরগুলির কেবলমাত্র নির্বাচন করি .Name। আউটপুট একটি অন্তর্নিহিত অ্যারে হিসাবে, যা ডিফল্ট Write-Outputমধ্যে নতুন লাইন সন্নিবেশ করে।

আমাকে [অ্যারে] একটি জিনিস বলে মনে করিয়ে দেওয়ার জন্য ব্রেন্টিস্টকে একগুচ্ছ ধন্যবাদ রক্ষা করেছে। সংক্ষিপ্ত সম্পত্তি নামের টিপের জন্য আরও একটি গুচ্ছ।


আমি স্বীকার করি যে আমি এটির নূন্যতম পড়া এবং পরীক্ষা করেছি, তবে, আপনি কেবল পারেন না$x,[array]$a=$a-split',' ?
ব্রিটিশবাদী

1
@ ব্রিটিশবাদী হ্যাঁ, ধন্যবাদ আমি একাধিক অ্যাসাইনমেন্টে কমা-অপারেটরটি ব্যবহার করার উপায় অনুসন্ধান করার চেষ্টা করে চলেছি, এবং এটি ঠিক কাজ করছে না। আমি পুরোপুরি ভুলে গিয়েছিলাম যে [array]এটি একটি বৈধ কাস্ট। হা হা। খুব গল্ফিং, আমার ধারণা।
অ্যাডমবর্কবার্ক

আমি মোবাইলে আছি তাই পরীক্ষা করা শক্ত হবে তবে আমি মনে করি GetEnumeratorএবং পদ্ধতি সিনট্যাক্সের AddMinutesজন্য ভাল প্রার্থী%
ব্রিটিশবাদী

@ ব্রায়ান্টিস্ট ইয়েপ অন্য 16 কে বাঁচায় Thanks ধন্যবাদ!
অ্যাডমবর্কবার্ক

4

পাইথন 2 , 140,148, 144 বাইট

t,h,n=map(str.split,input().replace(':','').split(';')),100,0
for a,v in t[:-1]:
 n+=int(v)
 if n%h/60:n=n/h*h+n%h%60+h
 if`n`>t[-1][0]:print a,

এটি অনলাইন চেষ্টা করুন!

ছক পূরণ করা:

'Kevin 13:02;Ruby 5;Sam 3;Lisa 6;Bob 12;13:15'

মিনিটের ওভারফ্লো সঠিকভাবে পরিচালনা করে না: 'Kevin 13:47;Ruby 5;Sam 3;Lisa 6;Bob 12;14:00'লিসা এবং বব এখনও দেরিতে হলেও, কিছুই প্রিন্ট করে না।
L3viathan

1
ও আচ্ছা. একটা ত্রুটি ছিল! ঠিক কর. আপনাকে ধন্যবাদ!
কীর্তন প্রভাকরণ


3

সিজেম, 66 54 58 54 51 49 46 বাইট

{{':/60b}:K~)rSrKs++q+S/2/z~:i[{1$+}*]2$+$@#>}

ইনপুট 1 STDIN এর মাধ্যমে দেওয়া হয়, ইনপুট 2 স্ট্যাকের স্ট্রিং হিসাবে দেওয়া হয়। আউটপুট স্ট্যাকের একটি অ্যারে। ইনপুট 1 এর জন্য পৃথককারী একটি স্থান, যেমন Kevin 13:02 Ruby 5 Sam 3 Lisa 6 Bob 12

স্ট্যাক ট্রেস:

         e# Stack:               | "13:15"
{        e# Define K and run it:
  ':/    e#   Split on colon:    | ["13" "15"]
  60b    e#   From base 60:      | 795
}:K~     e# End def
)        e# Increment:           | 796
r        e# Read token:          | 796 "Kevin"
S        e# Push space:          | 796 "Kevin" " "
r        e# Read another token:  | 796 "Kevin" " " "13:02"
K        e# K()                  | 796 "Kevin" " " 782
s        e# Convert to string:   | 796 "Kevin" " " "782"
++       e# Add together:        | 796 "Kevin 782"
q        e# Read rest of input:  | 796 "Kevin 782" " Ruby 5 Sam 3 Lisa 6 Bob 12"
+        e# Add together:        | 796 "Kevin 782 Ruby 5 Sam 3 Lisa 6 Bob 12"
S/       e# Split on spaces:     | 796 ["Kevin" "782" "Ruby" "5" "Sam" "3" "Lisa" "6" "Bob" "12"]
2/       e# Group by 2:          | 796 [["Kevin" "782"] ["Ruby" "5"] ["Sam" "3"] ["Lisa" "6"] ["Bob" "12"]]
z        e# Transpose:           | 796 [["Kevin" "Ruby" "Sam" "Lisa" "Bob"] ["782" "5" "3" "6" "12"]]
~        e# Unpack:              | 796 ["Kevin" "Ruby" "Sam" "Lisa" "Bob"] ["782" "5" "3" "6" "12"]
:i       e# Convert all to int:  | 796 ["Kevin" "Ruby" "Sam" "Lisa" "Bob"] [782 5 3 6 12]
[{1$+}*] e# Accumulate:          | 796 ["Kevin" "Ruby" "Sam" "Lisa" "Bob"] [782 787 790 796 808]
2$       e# Copy back element:   | 796 ["Kevin" "Ruby" "Sam" "Lisa" "Bob"] [782 787 790 796 808] 796
+        e# Add into array:      | 796 ["Kevin" "Ruby" "Sam" "Lisa" "Bob"] [782 787 790 796 808 796]
$        e# Sort:                | 796 ["Kevin" "Ruby" "Sam" "Lisa" "Bob"] [782 787 790 796 796 808]
#        e# Find index:          | ["Kevin" "Ruby" "Sam" "Lisa" "Bob"] 3
>        e# Slice:               | ["Lisa" "Bob"]

ব্যাখ্যা:

  • প্রক্রিয়াটি Kএকটি সময় hh:mmএবং একটি সংখ্যার মধ্যে রূপান্তর করে যা মধ্যরাত থেকে কত মিনিট তা উপস্থাপন করে।
  • আমরা প্রথম ব্যক্তিটি পড়ি এবং কে (তাদের সময়) দিয়ে তাদের সময়টি প্রতিস্থাপন করি। এরপরে আমরা এটি ইনপুটটির সামনের অংশে যুক্ত করব।
  • এরপরে আমরা নামের তালিকা এবং সময়ের তালিকা পেতে কিছু স্ট্রিং অপারেশনগুলি প্রিফর্ম করি [782 5 3 6 12]
  • এই তালিকাটি জড়ো করে আমরা পেয়েছি [782 787 790 796 808], যা প্রত্যেককে আসার সময় দেয়।
  • কারা দেরী হয়েছে তার সর্বাধিকতম উপায় হ'ল অ্যারেতে শুরু করার সময়টি সন্নিবেশ করা এবং তারপরে যেখানে এটি হওয়া উচিত তা পুনরায় সাজান। এরপরে আমরা এটি কোথায় রেখেছি তা নির্ধারণের জন্য সূচকটি খুঁজে পাই এবং তারপরে সেই সূচী থেকে নামের তালিকাটি টুকরো টুকরো করে ফেলি।

2

জাভাস্ক্রিপ্ট, 285 283 বাইট

সিনট্যাক্স কারি iকরার জন্য অতিথিদের তালিকা এবং পার্টির সময় pনেয় (i)(p)। কমা দ্বারা বিচ্ছিন্ন নামের তালিকা যেমন ফিরে আসে Lisa,Bob

i=>p=>{n=i.split`
`,a=new Date(0,0,0,...n[0].split` `[1].split`:`),y=new Date(0,0,0,...p.split`:`),t=[a];w=a;n.slice(1).map((j,k,l)=>{h=l[k].split` `[1]*6e4;t.push(new Date(w.getTime()+h));w=new Date(w.getTime()+h)});return n.filter((j,k,l)=>t[k]>y).map(j=>j.split` `[0]).join()}

আমি জানি এটি বেশ লম্বা এবং বর্তমানে ন্যূনতম ব্যবধানে শেষ স্থানে রয়েছে, তবে এটিই আমি সামনে আসতে পেরেছিলাম।

f=i=>p=>{n=i.split`
`,a=new Date(0,0,0,...n[0].split` `[1].split`:`),y=new Date(0,0,0,...p.split`:`),t=[a];w=a;n.slice(1).map((j,k,l)=>{h=l[k].split` `[1]*6e4;t.push(new Date(w.getTime()+h));w=new Date(w.getTime()+h)});return n.filter((j,k,l)=>t[k]>y).map(j=>j.split` `[0]).join()}

console.log(f(`Kevin 13:02
Ruby 5
Sam 3
Lisa 6
Bob 12
`)('13:15'))


2

সি # , 269 267 বাইট


Golfed

(l,t)=>{var h=System.DateTime.MinValue;var s=System.DateTime.ParseExact(t,"HH:mm",null);var o="";foreach(var p in l.Split('\n')){var i=p.Split(' ');h=h.Ticks<1?System.DateTime.ParseExact(i[1],"HH:mm",null):h.AddMinutes(int.Parse(i[1]));if(h>s)o+=i[0]+" ";}return o;};

Ungolfed

( l, t ) => {
   var h = System.DateTime.MinValue;
   var s = System.DateTime.ParseExact( t, "HH:mm", null );
   var o = "";

   foreach( var p in l.Split( '\n' ) ) {
      var i = p.Split( ' ' );

      h = h.Ticks < 1
         ? System.DateTime.ParseExact( i[ 1 ], "HH:mm", null )
         : h.AddMinutes( int.Parse( i[ 1 ] ) );

      if( h > s )
         o += i[ 0 ] + " ";
   }

   return o;
};

অসম্পূর্ণ পাঠযোগ্য

( l, t ) => {
   // var to check the time of arrival
   var h = System.DateTime.MinValue;

   // var to store the start time of the party
   var s = System.DateTime.ParseExact( t, "HH:mm", null );

   // var with the names of those who arrived late
   var o = "";

   // Cycle through which line
   foreach( var p in l.Split( '\n' ) ) {
      // Split the name and time
      var i = p.Split( ' ' );

      // Check if the time of arrival still has the initial value
      h = h.Ticks < 1

         // If so, grab the time of the first person
         //   Expects to have a time format of 'hh:mm'
         ? System.DateTime.ParseExact( i[ 1 ], "HH:mm", null )

         // Otherwise, add the difference to the var
         : h.AddMinutes( int.Parse( i[ 1 ] ) );

      // Check if the current time is later than the party start time
      if( h > s )

         // If so, add the name to the list
         o += i[ 0 ] + " ";
   }

   // Return the names of the persons who arrived late
   return o;
};

সম্পূর্ণ কোড

using System;
using System.Collections.Generic;

namespace Namespace {
   class Program {
      static void Main( String[] args ) {
         Func<String, String, String> f = ( l, t ) => {
            var h = System.DateTime.MinValue;
            var s = System.DateTime.ParseExact( t, "HH:mm", null );
            var o = "";

            foreach( var p in l.Split( '\n' ) ) {
               var i = p.Split( ' ' );

               h = h.Ticks < 1
                  ? System.DateTime.ParseExact( i[ 1 ], "HH:mm", null )
                  : h.AddMinutes( int.Parse( i[ 1 ] ) );

               if( h > s )
                  o += i[ 0 ] + " ";
            }

            return o;
         };

         List<KeyValuePair<String, String>>
            testCases = new List<KeyValuePair<String, String>> {
               new KeyValuePair<String, String>(
                  "Kevin 13:02\nRuby 5\nSam 3\nLisa 6\nBob 12",
                  "13:15"
               ),
               new KeyValuePair<String, String>(
                  "Kevin 13:15\nRuby 5\nSam 3\nLisa 6\nBob 12",
                  "13:15"
               ),
            };

         foreach( KeyValuePair<String, String> testCase in testCases ) {
            Console.WriteLine( $" Input:\n{testCase.Key}\n\n{testCase.Value}\n\nOutput:\n{f( testCase.Key, testCase.Value )}\n" );
         }

         Console.ReadLine();
      }
   }
}

রিলিজ


মন্তব্য

  • আউটপুট ফর্ম্যাট: স্থানগুলি দ্বারা পৃথক করা নামগুলি আউটপুট করে

আপনি একটি using D=System.DateTime;নির্দেশ যোগ করে কয়েকটি বাইট সংরক্ষণ করতে পারেন ( varগুলি প্রতিস্থাপন করতে ভুলবেন না !) এই কোডটি সম্পূর্ণরূপে দ্ব্যর্থহীন (যেমন (string l,string f)) তৈরি করতে আপনার ল্যাম্বডা পরামিতিগুলির জন্য সত্যই প্রকারের সরবরাহ করা উচিত । আমিও মনে হয় সামান্য বাগ সংশোধন করা হয়, আপনি প্রয়োজন h>sবদলে h>=s(1byte সংরক্ষণ!) অনুযায়ী "(যে কেউ ঠিক সময়মত জরিমানা।)"। আপনি কি করতে পারেন h.Ticks<1? আপনি DateTimeব্যবহারের চেয়ে খুব কম দামের সন্ধান করতে পারেন DateTime.Minতবে আমি এখানে সম্পূর্ণ নিদর্শনগুলি পরীক্ষা করে দেখিনি। ব্যবহারের ধারা সহ, ==D.Minএছাড়াও কাজ করা উচিত।
ভিজ্যুয়ালমেলন

ব্যবহার সম্পর্কে আমার সন্দেহ হয় আমি এটির সাথে ল্যাম্বডা এক্সপ্রেশনটি এখনও টানতে পারি। আমি নিশ্চিত যে আমি এটিকে মিড-কোডে যুক্ত করতে পারছি না । সুস্পষ্ট ল্যাম্বদা টাইপগুলি এমন একটি জিনিস যা আমি মানুষকে এটি করতে দেখিনি, এবং আমি এটি নিয়ে গিয়েছিলাম - এটি যদি অবৈধ হয় তবে তাই বলুন, এমনকি মোডগুলিও কিছু বলেনি, সম্ভবত এটি ঠিক আছে ?. h>sআমি এটা করব। h.Ticks<1এবং এটিও।
auhmaan

আমি নিশ্চিত usingsএবং ল্যাম্বডাস সহ আমি নিশ্চিত , আমি মেটাতে এগুলি স্পষ্ট করে বলার মতো কিছুই পাই না, তবে এই প্রশ্নটি দৃ strongly়ভাবে প্রস্তাব দেয় যে এটি অনুমোদিত। এখানে একটি যুক্তিসঙ্গত sensক্যমত্য রয়েছে যে সুস্পষ্ট প্যারামিটার ধরণের প্রয়োজন হওয়া উচিত (আমার যুক্ত করা উচিত যে আমি দৃly় পক্ষে আছি)। যাইহোক, মোডগুলি এসই দৃষ্টিকোণ থেকে জিনিসগুলি নাগরিক রাখার জন্য রয়েছে, পিপিসিগির নিজস্ব নিয়মগুলি প্রয়োগ করে না।
ভিজ্যুয়েলমেলন

আমি এর বিপক্ষে usings, বেশিরভাগ কারণেই আমি তখন অনুভব করি যে এটির একটি সম্পূর্ণ কোডের প্রয়োজন হবে, তাই আমি বলেছিলাম যে আমি সন্দেহ করি যে আমি সমাধান হিসাবে কোনও ফাংশনটি বন্ধ করতে পারি - সম্ভবত দুটি ব্লক যুক্ত করতে হবে, একটির জন্য usingএবং অন্যটির জন্য একটি লাম্বদা ফাংশন? Func<...> f = ...;System.Func<...> f = ...;
Sensকমত্য

আপনি string sযদি ল্যাম্বডাস এবং ইউএসিং না মিশ্রিত করেন তবে সুনির্দিষ্ট ফাংশন (কেবল সি # 7 (?? আমি মনে করতে পারছি না) সিনট্যাক্স যুক্ত করা ভাল) হতে পারে।
ভিজুয়ালমেলন

2

সিজেম , 43 41 বাইট

q~':/60b:Y;Sf/()':/60b+a\+{)iT+:TY>{;}|}%

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

q~        e# Read and eval all input.

':/       e# Split the start time on colons.
60b       e# Convert the result from base 60, to get the start time in minutes.
:Y;       e# Store this time in variable Y, and discard it from the stack.

Sf/       e# Split each string in the guest list on spaces.
(         e# Pull out the first guest from the list.
)         e# Pull out the time from the guest.
':/60b+   e# Convert the time to a number of minutes (same way as before), then add it back
          e#   to the guest.
a\+       e# Add the guest back to the start of the guest list.

          e# At this point, the first guest has his/her arrival time in minutes, and everyone
          e#  else still has their original number.

{         e# Apply this block to each guest:
 )i       e#  Pull out the number and cast it to an integer.
 T+       e#  Add the value of variable T to it (T is initially 0).
 :T       e#  Store the result back into T.
 Y>{;}|   e#  If the resulting number of minutes is not after the start time, delete the 
          e#    guest's name.
}%        e# (end of block)

          e# Implicit output.

2

লুয়া, 211 206 বাইট

আমার জন্য বছরের প্রথম কোডগল্ফটি এখনও গল্ফযোগ্য হওয়া উচিত।

সম্পাদনা করুন: এর জন্য একটি শর্টহ্যান্ড ব্যবহার করে 5 বাইট সংরক্ষণ করা হয়েছে string.match

function f(l,T)m=T.match
r=function(X)return
m(X,"^%d+")*3600+60*m(X,"%d+$")end
T=r(T)z={}y=0
for i=1,#l do
h=m(l[i],"%d.*")h=i>1 and y+h*60or r(h)y=h
z[#z+1]=h>T and m(l[i],"%u%l*")or nil
end return z end

ব্যাখ্যা

function f(l,T)                         -- declare the function f(list,partyTime)
  r=function(X)                         -- declare a function r that convert hh:mm in seconds
    return X:match("^%d+")*3600         -- return the sum of seconds the hours
          +60*X:match("%d+$")           -- and in the seconds
  end                                   
  T=r(T)                                -- convert the partyTime in seconds
  z={}                                  -- create the shameList for late partygoers
  y=0                                   -- y will keep us updated on the second count
  for i=1,#l                            -- iterate over l
  do                                    
    h=l[i]:match("%d.*")                -- h is a shorthand for the time of arrival
    h=i>1                               -- if we're on the second line at least
        and y+h*60                      -- update h with the time of arrival in second
      or r(h)                           -- else use r()(for the first partygoer only)
    y=h                                 -- update our reference for adding time
    z[#z+1]=h>T                         -- if the last partygoer was late
                and l[i]:match("%u%l*") -- add its name to the shameList
              or nil                    -- else, don't do anything
  end                                   
  return z                              -- return the shameList
end                                 

আপনি যদি এই কোডটি চেষ্টা করতে চান তবে নীচের স্নিপেটটি ব্যবহার করতে পারেন

function f(l,T)r=function(X)return
X:match("^%d+")*3600+60*X:match("%d+$")end
T=r(T)z={}y=0
for i=1,#l do
h=l[i]:match("%d.*")h=i>1 and y+h*60or r(h)y=h
z[#z+1]=h>T and l[i]:match("%u%l*")or nil
end return z end

retour = f({"Kevin 13:02","Ruby 5","Sam 3","Lisa 6","Bob 12"},"13:15")
for i=1,#retour
do
  print(retour[i])
end

2

জাভা, 346 304 284 275 বাইট

  • -9 বাইটস, @ কেভিন ক্রুজসেনকে ধন্যবাদ
void g(int m,String[]n,String[]a,int M){for(int i=0;i<n.length;i++)if((M+=i>0?p(a[i]):0)>m)System.out.print(n[i]);}
int p(String n){return new Short(n);}
int h(String t){return p(t.split(":")[0])*60+p(t.split(":")[1]);}
void f(String[]n,String[]a,String b){g(h(b),n,a,h(a[0]));}

বিস্তারিত লাইভ

public static void g(int m, String[] n, String[] a, int M)
{
    for(int i = 0; i < n.length; i++)
    {
        if((M += i>0 ? p(a[i]) : 0) > m)
        {
            System.out.println(n[i]);
        }
    } 
}

public static int p(String n)
{
    return Integer.parseInt(n);
}

public static int h(String t)
{
    return p(t.split(":")[0])*60+p(t.split(":")[1]);
}

public static void f(String[] n, String[] a, String b)
{
    g(h(b),n,a,h(a[0]));
}

1
চমৎকার গল্ফিং (জাভা জন্য) আপনার String[] n,এবং এর মধ্যে স্থান দরকার String[] a?
programmer5000

@ প্রোগ্রামার ৫০০০ নং, আমি ঘন্টাগুলি পরিবর্তনশীলও সরিয়ে দিয়েছি এবং সেগুলি মিনিট হিসাবে জমেছি।
খালেদ.কে

1
আপনি প্রতিস্থাপন করতে পারেন Integer.parseInt(n)সঙ্গে new Short(n)। এবং চ্যালেঞ্জের মন্তব্যের ভিত্তিতে LisaBobএটিও একটি বৈধ আউটপুট, যাতে আপনি এতে পরিবর্তন করতে printlnপারেন print
কেভিন ক্রুইজসেন

1

ব্যাচ, 163 বাইট

@set/pp=
@set/ap=%p::=*60+%
:l
@set g=
@set/pg=
@if "%g%"=="" exit/b
@set t=%g:* =%
@set/ap-=%t::=*60+%
@for %%g in (%g%)do @(if %p% lss 0 echo %%g)&goto l

STDIN এ ইনপুট নেয়। প্রথম লাইনে পার্টির শুরুর সময়, তারপরে অতিথির তালিকা। এইচএইচ: মিমিটিকে কয়েক মিনিটে রূপান্তর করতে @ আরনল্ডের কৌশলটি ব্যবহার করুন।

এর জন্য ব্যাচের পছন্দের ইনপুটটি কমান্ড-লাইন প্যারামিটারগুলির একটি সিরিজ হিসাবে হবে (পার্টির সময় দিয়ে শুরু হওয়া, তারপরে প্রতিটি অতিথি এবং পৃথক যুক্তি হিসাবে সময়)। এটি কেবল 129 বাইট লাগবে:

@set p=%1
@set/ap=%p::=*60+%
:l
@set t=%3
@set/ap-=%t::=*60+%
@if %p% lss 0 echo %2
@shift
@shift
@if not "%2"=="" goto l


1

পাওয়ারশেল, 170 বাইট

select-string '(?m)^((\w*) )?((\d\d):)?(\d?\d)$'-a|% matches|%{,$_.groups[2,4,5].value}|%{}{$b+=($c=60*$_[1]+$_[2]);$a+=,@{n=$_[0];t=$b}}{$a|? n|? t -gt $c|% n}

এটি অনলাইন চেষ্টা করুন!


আগের চেয়ে বেশি দেরী!
programmer5000

আমি আজ বিশ্রামে রয়েছি তাই কিছু মজা করার জন্য কিছুটা সময়
কাটিয়েছি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.