ইতিহাস হোমওয়ার্ক সহায়ক


12

আমার ইতিহাস পড়া এবং নোট নেওয়া, আমি সাহায্য করতে পারি না তবে এই সমস্ত দীর্ঘ তারিখগুলি লিখতে ক্লান্ত হয়ে পড়ছি –– 1784 ছয়টি পুরো পেন্সিল লিফট! jǝǝz!

আপনি দেখতে পাচ্ছেন, স্টাফ লেখার ক্ষেত্রে আমি this এই সাইটের বেশিরভাগ চ্যালেঞ্জ পোস্টার পছন্দ করি –– এইভাবে, আমি আপনাকে কিছু তারিখ সংক্ষিপ্ত করতে দয়া করে আমাকে সহায়তা করতে বলি। অবশ্যই, আপনার সমাধানটি যথাসম্ভব সংক্ষিপ্ত হতে হবে যেহেতু আমার হাত পরীক্ষার কেসগুলি লিখতে লিখতে ইতিমধ্যে ক্লান্ত ।

আমি কীভাবে একটি তারিখ সংক্ষিপ্ত করব?

ভাল মজার আপনার জিজ্ঞাসা করা উচিত। এটি মোটামুটি সহজ:

  1. আপনি যে কোনও আদেশ ( (smallest, biggest)বা (biggest, smallest)) চান তাতে ইনপুট হিসাবে দুটি পূর্ণসংখ্যা নিন ।
  2. দুটি সংখ্যার বৃহত্তর নিন এবং কেবল অল্প সংখ্যায় নয় এমন অংশটি নিন।
    উদাহরণস্বরূপ, প্রদত্ত 2010, 2017, সংক্ষিপ্ত 2017করা -7কারণ 201_একই ডিজিট-স্থান উভয় ক্ষেত্রে in
  3. ছোট সংখ্যা মুদ্রণ করুন বা ফিরে আসুন, তারপরে একটি ড্যাশ এবং তারপরে সংক্ষিপ্ততর বৃহত সংখ্যাটি প্রেরণ করুন।

উদাহরণ স্বরূপ:

Bonus brownies for you if you figure out these dates' significance :)
1505, 1516 -> 1505-16
1989, 1991 -> 1989-91
1914, 1918 -> 1914-8
1833, 1871 -> 1833-71
1000, 2000 -> 1000-2000
1776, 2017 -> 1776-2017
2016, 2016 -> 2016-

These dates lack significance :(
1234567890, 1234567891 -> 1234567890-1
600, 1600 -> 600-1600
1235, 1424 -> 1235-424
600, 6000 -> 600-6000


3
600, 6000 -> 600-6000?
কিওয়ারটি

1
@ জোনাথান অ্যালান, হ্যাঁ ঠিক আছে। ইনপুটটি কেবল অবৈজ্ঞানিক পূর্ণসংখ্যা
ড্যানিয়েল

1
@ কিওয়ার্তি, সত্যিই
ড্যানিয়েল

2
1914-8ডাব্লুডাব্লুআই। এখন আমার ব্রাউনিজ গুলো!
এরিক আউটগল্ফার

উত্তর:



4

জেলি ,  17  16 বাইট

DUµn/TṪṁ@Ṫ,j”-FṚ

একটি সম্পূর্ণ প্রোগ্রাম বছরের তালিকা নিচ্ছে from, toএবং ফলাফল মুদ্রণ।

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষার স্যুটটি দেখুন

কিভাবে?

DUµn/TṪṁ@Ṫ,j”-FṚ - Main link: list of years [from, to]    e.g [1833,1871]
D                - convert to decimals                        [[1,8,3,3],[1,8,7,1]]
 U               - upend (to cater for differing lengths)     [[3,3,8,1],[1,7,8,1]]
  µ              - monadic chain separation, call that V
    /            - reduce V with:
   n             -   not equal?                               [1,1,0,0]
     T           - truthy indices                             [1, 2]
      Ṫ          - tail                                       2
         Ṫ       - tail V (pop from & modify V)               [1,7,8,1]
       ṁ@        - mould (swap @rguments) V like that length  [1,7]
          ,      - pair that with (the modified) V            [[1,7],[[3,3,8,1]]
            ”-   - literal '-' character
           j     - join                                       [1,7,'-',[3,3,8,1]]
              F  - flatten                                    [1,7,'-',3,3,8,1]
               Ṛ - reverse                                    [1,8,3,3,'-',7,1]
                 - implicit print                             1833-71

প্রথমে আমি ভেবেছিলাম আমি এটি ছাড়িয়ে গিয়েছি ... তারপর অভিশাপ [600, 6000]হাজির। এবং মনে হয় এটি অবমূল্যায়িত হয়েছে।
এরিক আউটগল্ফার

3

জাভাস্ক্রিপ্ট ES6, 59 57 টি অক্ষর

(x,y)=>(x+'-'+y).replace(x*10>y?/^((.*).*-)\2/:/()/,"$1")

টেস্ট:

f=(x,y)=>(x+'-'+y).replace(x*10>y?/^((.*).*-)\2/:/()/,"$1")

console.log(`1505, 1516 -> 1505-16
1989, 1991 -> 1989-91
1914, 1918 -> 1914-8
1833, 1871 -> 1833-71
1000, 2000 -> 1000-2000
1776, 2017 -> 1776-2017
2016, 2016 -> 2016-
1234567890, 1234567891 -> 1234567890-1
600, 1600 -> 600-1600
1235, 1424 -> 1235-424`.split`
`.map(t => t.match(/(\d+), (\d+) -> (.*)/)).every(([m,x,y,key]) => f(x,y)===key || console.log(x,y,key,f(x,y))))
console.log(f(600,6000))


শুধু চেষ্টা (x+'-'+y)?
tsh

f (180, 1600) ->?
tsh

1
x=>y=>বাইট বাঁচাতে কারিরিং ( ) ব্যবহার করুন ।
TheLethalCoder

1

ডায়ালগ এপিএল, 29 বাইট

{⍺,'-',x/⍨⌈\~((-⍴x)↑⍕⍺)=x←⍕⍵}

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

কিভাবে?

⍺,'-' - প্রথম বছর + , -

    =x←⍕⍵ - দ্বিতীয় বছরের বিন্যাসিত তুলনা করুন

    ((-⍴x)↑⍕⍺) - বাম থেকে ফাঁকা স্থান দিয়ে প্যাড করা প্রথম বছরে

    ⌈\~ - ফলাফলটিকে তুচ্ছ করুন এবং প্রথমটির পরে সমস্ত 1 টি চিহ্নিত করুন

x/⍨ - সমস্ত চিহ্নিত অবস্থানে দ্বিতীয় বছর নিন


1

রেটিনা , 34 বাইট

(.*)((.)*),\1((?<-3>.)*)\b
$1$2-$4

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


1

পাইথন 2 , 102 বাইট

lambda s,n:`s`+'-'+[[`n`[i:]for i in range(len(`s`)+1)if `n`[:i]==`s`[:i]][-1],`n`][len(`n`)>len(`s`)]

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

আমার মনে হচ্ছে এটি করার আরও ভাল উপায় থাকতে হবে যেহেতু এটি সত্যই ভারবস বলে মনে হচ্ছে। আমরা ইনপুট হিসাবে স্ট্রিং নিতে পারি না তাই এটি কাজ করার জন্য ভেরিয়েবলের ation `মূল্যায়নের চরম অপব্যবহার।


a = 100, b = 199 "100-99" এর পরিবর্তে "100-199" প্রদান করে।
চেস ব্রাউন

@ চাসব্রাউন ডাং, আপনি ঠিক বলেছেন আমি আমার কোডটি আগের পুনরাবৃত্তিতে ফিরিয়েছি, যা এই ক্ষেত্রে যত্ন নেয় care
আর্নল্ড পামার

0

পাইথন 2, 127 বাইট

আমি এখনও এটিতে নতুন, তাই একই ভাষায় অন্য একটি উত্তর দেওয়া ঠিক আছে কিনা তা আমি জানি না। যেহেতু আমি অন্যান্য লোকের পোস্টগুলিতে মন্তব্য করতে পারি না তবুও আমি আমার সম্ভাবনাগুলি এখানে রাখি।

  • এটি পূর্ণসংখ্যা থেকে স্ট্রিংয়ে ইনপুট পরিবর্তন করার অনুমতি রয়েছে? কারণ এটি আমার প্রায় 10 বাইট সংরক্ষণ করতে পারে।
  • আর্নল্ড পারমারের উত্তরটির 1989, 1991 এ একটি ভুল হয়েছে ((আমি এটি পোস্ট করার সময়)। আপনাকে মূল্যায়ন ট্রিকটির জন্য ধন্যবাদ (এটি আমাকে একটি বাইট বাঁচিয়েছে)!
def f(s,b):
 s=`s`+'-'
 if len(`b`)>=len(s):return s+`b`
 for i in range(len(`b`)):
    if s[i]!=`b`[i]:return s+`b`[i:]
 return s

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

আমি যা করি তা হ'ল আমি উভয় বারের থেকে প্রতিটি একক অঙ্ক তুলনা করি এবং যদি বড়টি পরিবর্তিত হয় তবে আমি ছোট সংখ্যার সাথে বাকী বড়টি মুদ্রণ করি।

যদি কেউ আমাকে তৃতীয় লাইনে গল্ফটি করতে সহায়তা করতে পারে তবে আমি 30+ বাইটের মতো সঞ্চয় করতে পারি। আমি কেবল এটি 600,6000 কে হ্যান্ডল করার জন্য প্রয়োগ করেছি যেখানে অঙ্কগুলি সমান হয় তবে একই দৈর্ঘ্যের নয়।


হ্যাঁ, একাধিক ভাষায় একই প্রশ্নের উত্তর দেওয়া ঠিক আছে এবং আপনাকে স্ট্রিং হিসাবে ইনপুট নেওয়ার অনুমতি দেওয়া হচ্ছে।
জিওকাভেল

0

হাস্কেল , 143 বাইট

g x y=h(show x)(show y)
h x y=x++"-"++if length x<length y then y else foldl(\a(c,d)->if a==[]then if c==d then[]else[d]else a++[d])[](zip x y)

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

smallest biggest ইনপুট (পূর্ণসংখ্যা)

if length x<length y then yতার মানে যদি xএর চেয়ে কম সংখ্যা থাকে yতবে সাধারণ অংশটি শূন্য থাকে। অন্যথায়, আমরা yপ্রথম ভিন্ন অঙ্কের অঙ্কগুলি সঞ্চয় করি ।



0

কমন লিস্প, 120 বাইট

(lambda(s b &aux(d(#1=format()"~a"b)))(#1#()"~a-~a"s(if(<=(* s 10)b)b(subseq d(or(mismatch d(#1#()"~a"s))(length d))))))

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

সবচেয়ে ছোট, সবচেয়ে বড়

Ungolfed:

(defun f(s b &aux (d (format () "~a" b)))   ; s and b parameters, d string from s
  (format () "~a-~a" s                     ; print first number, then -, then abbreviation
      (if (<= (* s 10) b)                  ; if b is too large do not abbreviate
          b
          (subseq d (or (mismatch d (format () "~a" s)) ; else find first mismatch
                        (length d))))))    ; then extract the last part from mismatch
                                           ; or nothing if they are equal

0

সি ++, 285 271 বাইট

-14 বাইট জ্যাকারিকে ধন্যবাদ

#include<iostream>
#include<string>
#define S s.size()
#define R r.size()
using namespace std;void h(int a,int b){auto r=to_string(a),s=to_string(b);if(R>S)s=string(R-S,' ')+s;if(S>R)r=string(S-R,' ')+r;int i=0;for(;i<R;++i)if(r[i]!=s[i])break;cout<<a<<'-'<<s.substr(i);}

পরীক্ষার জন্য কোড:

std::vector<std::pair<int, int>> test = {
    {1505,1516},
    {1989,1991}, //End of the cold war
    {1914,1918}, //First world war start and end
    {1833,1871},
    {1000,2000}, //2000 = Y2K bug, 1000 is... well... Y1K bug ? :)
    {1776,2017}, //US constitution signed the 4th july, French elections & year of the C++ 17 standard
    {2016,2016}, //US elections
    {1234567890,1234567891},
    {600,1600},
    {1235,1424},
    {600,6000}
};

for (auto&a : test) {
    h(a.first, a.second);
    std::cout << '\n';
}

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