তোমার তো এক দিনের লাইন!


15

এমন কোনও প্রোগ্রাম লিখুন যা এটি চালিয়ে যাওয়া একটানা দিনগুলির উপর নজর রাখে।

মধ্যরাতে দিনটি পুনরায় সেট করা হয় (কম্পিউটারটি যে কম্পিউটারে প্রোগ্রামটি চালিত হয় তার স্থানীয় সময়)।

যদি কোনও দিন থাকে যে প্রোগ্রামটি চালিত হচ্ছে না, তবে কাউন্টারটি শূন্যে পুনরায় সেট করা হবে।

যতবার প্রোগ্রাম চালানো হয়, কাউন্টারটি যদি একদিন আগে প্রোগ্রামটি চালানো হয় তবে এটি একদিন বাড়ানো উচিত। এর অর্থ হ'ল প্রথমবারের মতো প্রোগ্রামটি চালানো হচ্ছে, এটি বলা উচিত, "আপনার 1 দিনের একটি ধারা আছে!"

প্রোগ্রামটির আউটপুটটি ফর্মটিতে রয়েছে: You have a [streak_length] day streak!

আপনাকে বাহ্যিকভাবে ডেটা সঞ্চয় করার বা সোর্স কোডটি choice আপনার পছন্দ অনুসারে সংশোধন করার অনুমতি দেওয়া হচ্ছে।

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোড!


এটি কি স্থানীয় সময় হতে হবে? বা এটি কি কোনও সময় অঞ্চল হতে পারে?
Rɪᴋᴇʀ

@ ইস্টারলিআইর্ক, দিনটি স্থানীয় সময় মধ্যরাতে পুনরায় সেট করা।
ড্যানিয়েল

সুতরাং এটি স্থানীয় হতে হবে কোথা থেকে কম্পিউটার? অথবা কমপক্ষে ওয়াহ্ট টাইমজোন কমপুটিয়ারটি চালু রয়েছে। এটি নির্বিশেষে ইউটিসি ব্যবহার করতে পারে না?
Rɪᴋᴇʀ

@ ইস্টারলিআইর্ক, এটি কম্পিউটারের টাইম জোন হতে হবে
ড্যানিয়েল

আহ ঠিক আছে. স্পষ্ট করার জন্য ধন্যবাদ।
Rɪᴋᴇʀ

উত্তর:


4

ব্যাশ, 92, 90, 82 বাইট

Golfed

grep `date -d-1day -I` h||>h
date -I>>h
echo You have a `uniq h|wc -l` day streak!

সম্পাদনাগুলি

  • ফাইলটি কেটে ফেলার পরিবর্তে, কেটে ফেলুন, -8 বাইট;
  • প্রতিস্থাপন -ডাস্ট স্টার্ট দিয়ে ! -নির্মেট 2 বাইট সংরক্ষণ করুন।

কিভাবে এটা কাজ করে !

প্রতিবার আপনি লঞ্চ এটা ফাইলে বর্তমান তারিখ সঙ্গে একটি লাইন যোগ করতে হবে , যেমন:

2017-02-03
2017-02-04
2017-02-05
2017-02-05

এরপরে এটি uniqসদৃশগুলি (যেমন একাধিক লঞ্চগুলি একই দিনের মধ্যে) ফিল্টার আউট করতে ব্যবহার করবে এবং রেখাটির দৈর্ঘ্য পেতে লাইনগুলি গণনা করবে ।

uniq h|wc -l

একটি পুনরায় সেট করার জন্য কষ , এটা 'গতকাল' জন্য grep হবে , এবং এটি অগ্রভাগ ছাঁটিয়া যদি খুঁজে পাওয়া যায়নি।

grep `date -d-1day -I` h||>h

5

বাশ, 102 বাইট

find ! -newerat 0-1day -delete
touch -a a
echo You have a $((1+(`stat -c %X-%Y a`)/86400)) day streak!

সতর্কতা, না না কোনো ফোল্ডার আপনার পছন্দের চালানো। এটি কার্যকরী ডিরেক্টরিতে শেষ দিন অ্যাক্সেস না করা কোনও ফাইল মুছে দেয়।

aঅ্যাক্সেস করা / সংশোধিত টাইমস্ট্যাম্পগুলি ব্যবহার করে ডেটা সঞ্চয় করতে একটি ফাইল ব্যবহার করে।


2

গোরুবি, 85 বাইট

দোভাষী সংকেত দিয়ে চালান -rdate

c,t=0,Dae.y
op t.ts,?w
dw{c+=1;t=t.p;Fil.f t.ts}
s"You have a #{c} day streak!"

এটি প্রতিটি দিনের জন্য নতুন ফাইল সংরক্ষণের মাধ্যমে কাজ করে যার উপর এটি চাওয়া হয়, তারপরে ধারাবাহিক ফাইলের সংখ্যাটিকে পিছনের দিকে গণনা করে লাইনটির দৈর্ঘ্য অর্জন করতে। এটি কখনও ফাইলগুলি মুছে দেয় না, সুতরাং এটি শেষ পর্যন্ত খুব, খুব, খুব, খুব, খুব দীর্ঘ সময়ের পরে, আপনার হার্ড ড্রাইভটি একবারে কয়েক মুষ্টি বাইট পূরণ করবে।

এটির একটি অদম্য সংস্করণ এখানে:

streak, current_date = 0, Date.today
open(current_date.to_s, 'w')
while File.file?(current_date.to_s)
    streak += 1
    current_date = current_date.prev_day;
end
puts "You have a #{streak} day streak!"

1

পাইথন 3, 213 বাইট

import time
t=time.time()
try:
 r=open("a").read().split(":")
 open("a","w").write((str(int(r[0])+1)+":"+t)if(t>float(r[1])+86400)and(t<float(r[1])+172800)else("1:"+str(t)))
except:open("a","w").write("1:"+str(t))

1

বাশ + কোর্টিলস, 120 97 বাইট

read d n<f;c=`date -d0 +%s`;echo $c $[c>d?c>d+86399?n=1:++n:n]>f;echo You have a $n day streak!

উপরের ব্যাশ লাইনের এটিতে 95 বাইট রয়েছে।

এফ নামে পরিচিত একটি দ্বিতীয় ফাইল রয়েছে যেখানে কেবল একটি একক অক্ষর রয়েছে:

0

(প্রোগ্রামটি চ লিখেছে)

সুতরাং আমি মনে করি মোট বাইটের সংখ্যা 97 হিসাবে স্কোর করা উচিত (বাশ ফাইলের সামগ্রীর জন্য 95 বাইট, বাহ্যিক ফাইলের সামগ্রীর জন্য 1 বাইট এবং 1 বাইট কারণ প্রোগ্রাম ব্যতীত অন্য 1 ফাইল ব্যবহৃত হয়) scored এটি মাল্টি-ফাইল প্রোগ্রামগুলির জন্য গণনা বাইটের উপর ভিত্তি করে ।

দ্রষ্টব্য: @ পোষ্টকে ধন্যবাদ জানাতে ধন্যবাদ যে আমি পোস্ট করেছি এটির পূর্বের উত্তরটি ছিল আজেবাজে; আমি সমস্যাটি পুরোপুরি ভুলভাবে পড়েছি। (এটি একটি আলাদা উত্তর হিসাবে পোস্ট করা হয়েছিল, যা আমি মুছে ফেলেছি))


0

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

(date -f 'd')>>z
gc z|gu|%{$c=(1,++$c)[($d=date $_)-eq$n]
$n=$d+1D}
"You have a $c day streak!"

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

ব্যাখ্যা

আমি বর্তমান তারিখটি (সংক্ষিপ্ত তারিখের ফর্ম্যাটে) কোনও ফাইলের (নামযুক্ত z) লিখে লিখে শুরু করি । >>যথারীতি কাজ করে; সংযোজন, কিন্তু এটি বিদ্যমান না থাকলে তৈরি করে।

এরপরে, আমি ফাইল লাইনের লিখিত বিষয়গুলি Get-Content( gc), পাইপ দিয়ে Get-Unique( gu) দিয়ে লাইন দিয়ে পড়ি কারণ একই তারিখ থেকে একাধিক এন্ট্রি থাকতে পারে, তারপরে পাইপ দিয়েForEach-Object ( %)।

লুপে, আমি 0প্রথম উপাদানটির মান সহ 2 টি উপাদান অ্যারে এবং দ্বিতীয় উপাদানের $c( +1) এর বর্তমান মান তৈরি করি । ব্যবহারের ++$cফলে আমাকে এ জাতীয় কিছু মোড়ানো এড়াতে সহায়তা করে$c+1 বন্ধনীগুলির ।

তারপরে আমি একটি বুলিয়ান তুলনা সহ দুটি উপাদান অ্যারেতে সূচক করি, যা এর 0জন্য $falseবা এর সাথে 1মিলিত হবে $true। তুলনার মধ্যে, আমি ফাইলের বর্তমান লাইন থেকে পড়ার তারিখ থেকে তৈরি $dএকটি [datetime]অবজেক্টকে বরাদ্দ করছি । সেই অবজেক্টটির সাথে তুলনা হয় $n, যা প্রথম রানে এখনও নির্ধারিত হয়নি, সুতরাং এটি কখনও মিলবে না এবং $cসূচনা করা হবে 1, যেহেতু সূচকের মান নির্ধারিত হচ্ছে $c

পরবর্তী, বর্তমান $nতারিখের সময় 1অবজেক্টে যোগ করে পরবর্তী প্রত্যাশিত তারিখের সাথে পপুলেশন করা হয়। এখানে মূল কীটির 1Dঅর্থ এটি [decimal]আক্ষরিক। কোনও কারণে আপনি যখন একটিতে পূর্ণসংখ্যার সংখ্যা যুক্ত করেন [datetime], এটি টিক্স হিসাবে ব্যাখ্যা করা হয় তবে আপনি যখন ভাসমান পয়েন্ট সংখ্যা যুক্ত করেন, সেগুলি দিন হিসাবে ব্যাখ্যা করা হয়। সুতরাং $nএটি পরবর্তী পুনরাবৃত্তির জন্য পপুলেট করে।

এর প্রভাবটি হ'ল প্রতিটি তারিখ "পরবর্তী" তারিখের সাথে মেলে না এমন প্রতিবার কাউন্টারটি রিসেট হয়ে যায় (যা আগের তারিখের সাথে আরও 1 দিন)।

অবশেষে বার্তাটি আউটপুট।

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