7 l8r 9 এর চেয়ে বেশি? (সাতটার পরে নয় কি?)


10

এটি মোটামুটি সহজ কোড গল্ফ চ্যালেঞ্জ। আপনার প্রোগ্রাম, একটি ASCII স্ট্রিং দেওয়া, সেই স্ট্রিংটিকে দুটি স্ট্রিংতে পার্স করা, যা এটি মূল্যায়ন করবে। দ্বিতীয় স্ট্রিংটি যদি প্রথমটির চেয়ে "পরে" হয় তবে এটি একটি 1 ফিরে আসবে, যদি এটি প্রথমটির চেয়ে "আগে" হয় তবে এটি একটি -1 ফিরে আসবে, এবং যদি সেগুলি একই হয় তবে এটি 0 ফিরে আসবে To "পরে" এবং "এর আগের" এর অর্থ কী তা পরিষ্কার করুন, আসুন ASCII অক্ষর কোডগুলি একবার দেখুন। আপনার স্ট্রিংয়ের প্রতিটি চরিত্রের তুলনা করতে হবে, তাদের প্রত্যেককে একটি সংখ্যার অঙ্ক হিসাবে গণ্য করতে হবে। পরে একটি বৃহত সংখ্যা বোঝায়, একটি ছোট সংখ্যার পরে ঘটে। দুটি ইনপুট গ্রুপ পৃথক করতে স্ট্রিংগুলি হাইফেন চরিত্রের সাথে ফর্ম্যাট করা হবে।

এই উদাহরণটি একবার দেখুন:

7-9ইনপুট হিসাবে ফিরে আসা উচিত 1

7হওয়া ASCII কোডে পরিবর্তিত 55, এবং 9হওয়া ASCII কোডে পরিবর্তিত 57

হিসাবে 57সংখ্যার পরে দেখা যায় 55, 9পরে হয় 7

আরেকটি উদাহরণ:

LKzb-LKaj ইনপুট হিসাবে ফিরে আসা উচিত -1

এর জন্য এএসসিআইআই কোড সিকোয়েন্সগুলি হয় 76-75-122-98এবং76-75-97-106

এটি একটি কোড গল্ফ চ্যালেঞ্জ, এবং বাইট গণনা হ'ল এন্ট্রিগুলি কীভাবে স্কোর করা হবে।

95 টি মুদ্রণযোগ্য এএসসিআইআই অক্ষর থেকে যে কোনও ইনপুট গ্রহণযোগ্য হবে, স্পেসগুলি বাদ দিয়ে এবং ইনপুট পৃথক করা ছাড়া কোনও কিছুর জন্য হাইফেন। এছাড়াও, স্ট্রিংগুলি একই দৈর্ঘ্যের হওয়ার নিশ্চয়তা দেয় না।

শুভকামনা!

সম্পাদনা: আরও স্পষ্ট করে বলতে গেলে প্রতিটি চরিত্রকে একটি সংখ্যার মতো একটি সংখ্যার মতো আচরণ করা উচিত। উদাহরণস্বরূপ LKzb-LKaj, যদিও এর jচেয়ে পরে b, zপরে থেকে পরে aএবং এটি যেহেতু এটি আরও উল্লেখযোগ্য অঙ্ক, তাই এটি অগ্রাধিকার গ্রহণ করে। সরবরাহ করা একটি স্ট্রিং সর্বদা সর্বনিম্ন 3 টি অক্ষরযুক্ত থাকবে, এই সমস্যার ক্ষেত্র থেকে খালি স্ট্রিংগুলি সরিয়ে ফেলবে।

সম্পাদনা: আপনার সাহায্যের জন্য এখানে আরও কয়েকটি পরীক্ষার মামলা দেওয়া হল:

  • A-9 -> -1
  • 11-Z -> -1
  • 3h~J*-3h~J* -> 0
  • Xv-Y0 -> 1

1
দুটি স্ট্রিং একই দৈর্ঘ্যের গ্যারান্টিযুক্ত?
es1024

5
পরীক্ষার কেস 11-Z-> -1প্রশ্নের বর্তমান শব্দবন্ধটি দেওয়া কোনও অর্থ দেয় না। Z(90) হ'ল 1(49) এর চেয়ে বড় এবং সবচেয়ে উল্লেখযোগ্য অক্ষর। বিভিন্ন দৈর্ঘ্যের স্ট্রিংগুলি কীভাবে তুলনা করা হয় তা দয়া করে পরিষ্কার করুন।
জর্জ রিথ

2
আর কি A-AA?

2
@SamWeaver আমি বামদিকের জানি সবচেয়ে গুরুত্বপূর্ণ অঙ্ক অত: পর কেন আমার বিভ্রান্তি রয়েছে 11>Zআপনার উদাহরণ যখন 1<Z। বিভিন্ন দৈর্ঘ্যের স্ট্রিংগুলির সাথে অবশ্যই কিছু অপরিজ্ঞাত আচরণ করতে হবে বা উদাহরণটি ভুল।
জর্জ রিথ

3
পূর্বে ব্যাখ্যা করা হয়েছে: প্রতিটি স্ট্রিংকে বেস-127 সংখ্যাতে অঙ্ক হিসাবে গণ্য করতে হবে। আপনি যদি এই সিস্টেমে গণনা করেন, আপনি একটি অক্ষর দিয়ে শুরু করবেন, মুদ্রণযোগ্য অক্ষরের বাধা পর্যন্ত ~126 এ বৃদ্ধি করবেন, তারপরে প্রাথমিক সংখ্যাটি ফিরে আসার সাথে সাথে পরবর্তী অঙ্কটি একের সাথে বাড়িয়ে তুলবেন !। সর্বাধিক তাৎপর্যপূর্ণ সংখ্যার প্রতিটি বৃদ্ধি 127 দ্বারা দ্বিতীয়-সর্বাধিক-উল্লেখযোগ্য অঙ্ক বৃদ্ধির সমতুল্য
স্যাম ওয়েভার

উত্তর:


11

পাইথ - 11 বাইট

সহজ, ._সাইন পেতে এবং Cচর কোডগুলি পেতে সাইন ব্যবহার করে ।

._-F_CMcz\-

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

টেস্ট স্যুট

._               Sign of number
 -F              Fold subtraction (this finds difference of a tuple)
  _              Reverse list to get correct order of operands when subtracting
   CM            Map char, already treats strings as digits of base256 number
    c \-         Split by "-"
     z           Input

খুব সুন্দর! প্রত্যাশার মতো পারফর্ম করে।
স্যাম ওয়েভার

7

সিজেম, 12 বাইট

l'-/esfb~\-g

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

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

l   e# Read a line from STDIN.
'-/ e# Split it at spaces.
es  e# Push the current time (milliseconds since epoch).
fb  e# Consider each string as digits in base huge-number.
~\  e# Dump the results and reverse their order.
-g  e# Subtract and apply sign function.

অসাধারণ! এটি সমস্ত পরীক্ষার কেস পাস করে।
স্যাম ওয়েভার

6

জাভা, 86 118

int f(String...s){return(int)Math.signum((s=s[0].split("-"))[1].compareTo(s[0])*(s[0].length()==s[1].length()?1:-1));}  

স্ট্রিংগুলির সাথে তুলনা করার একটি খুব অদ্ভুত উপায়। দ্রুত সমাধান করা হয়েছে যাতে এটি অতিরিক্ত পরীক্ষার কেসগুলি পাস করে, পরে আরও গল্ফনেস খুঁজবে।

signumপরামর্শের জন্য মন্তব্যে ভার্টানকে ধন্যবাদ


জাভা এর তুলনা কি 1,0, -1 ফেরত দেয় না? আমি জানি এটির কোনও গ্যারান্টি নেই তবে এর কি কোনও মামলা নেই? যে ক্ষেত্রেreturn s[0].compareTo(s[1]);
ভার্টন

এটি দুর্দান্ত, তবে এটি পরীক্ষার পরীক্ষায় 11-Zফিরে আসে না, ফিরে -1আসে 1
স্যাম ওয়েভার

আহ, এই পরীক্ষাগুলির কেস যুক্ত করার আগে এটি আমার কাছে পরিষ্কার ছিল না। সংশোধন করা হয়েছে।
জিওবিটস

@ ভার্টন নো, এটি প্রথম মিল না-করার পজিশনে মানের পার্থক্যটি প্রদান করে (বা একটি এবং সমস্ত অক্ষরের মিল থাকলে দৈর্ঘ্যের পার্থক্য)। উদাহরণস্বরূপ, "A".compareTo("Z") ফেরৎ-25দুর্ভাগ্যবশত।
জিওবিটস

আপনি এই লাইন ব্যাখ্যা করতে পারেন? i = a!=b ? b-a : s[1].compareTo(s[0]);আমি এটি পেয়েছি বলে মনে হচ্ছে না ... এছাড়াও, আপনি সম্ভবত ম্যাথ.সাইনাম ব্যবহার করতে পারেন এবং নিজেকে ঘোষণা করে নিজেকে বাঁচাতে পারেন;
ভার্টন

4

পার্ল, 31 বাইট

#!/usr/bin/perl -p
/-/;$_=($`.$'^$`)cmp($'.$`^$')

30 বাইট + 1 বাইট জন্য -p। STDIN এ ইনপুট গ্রহণ করে।

ব্যাখ্যা

যখন অপারেন্ডগুলি cmpবিভিন্ন দৈর্ঘ্য, পছন্দ chickenএবং করার জন্য থাকে eggতখন এগুলি এইভাবে সংযুক্ত থাকে:

c  h  i  c  k  e  n
e  g  g  \0 \0 \0 \0

যাতে egg> chicken( \0একটি নাল বাইট)। তবে আমরা তাদের এ জাতীয়ভাবে সাজানো চাই:

c  h  i  c  k  e  n
\0 \0 \0 \0 e  g  g

যাতে chicken> egg

এই কাজের জন্য, আমরা তাদের সঙ্গে একবার কনক্যাটেনেট, chickenসামনে eggএবং একবার eggসামনে chicken:

c  h  i  c  k  e  n  e  g  g
e  g  g  c  h  i  c  k  e  n

এখন আমাদের দুটি স্ট্রিং একই দৈর্ঘ্যের, আমরা একটি এক্সওআর ব্যবহার করে শীর্ষস্থানীয় শব্দটি সরিয়ে ফেললাম:

\0 \0 \0 \0 \0 \0 \0 e  g  g
\0 \0 \0 c  h  i  c  k  e  n

এবং এখন আমরা cmpপ্রথমে কোনটি এসেছে তা খুঁজতে ব্যবহার করতে পারি । (সেখানে, আমি এটি বলেছিলাম!)


খুব চালাক- ব্রাভো!
স্যাম ওয়েভার 17

3

পাইথন 2, 88 টি অক্ষর

a=raw_input().split('-');print-cmp(*(map(ord,s.rjust(max(map(len,a)),'\0'))for s in a))

cmpযখন আপনার দুটি পৃথক দৈর্ঘ্যের স্ট্রিং রয়েছে তখন সঠিক কাজটি করে না, সুতরাং কেসটি পরিচালনা করতে আমাকে উভয়কে নাল অক্ষর (যা ordরূপান্তরিত করে 0) দিয়ে প্যাড করতে হবে । দুর্ভাগ্যক্রমে, এটি প্রায় 35 টি অক্ষর যুক্ত করেছে, প্লাস এখন এটির পরিবর্তে দুটি লাইন কারণ আমার ইনপুটটির দৈর্ঘ্য এবং এটির পুনরাবৃত্তি করতে উভয়ই প্রয়োজন।


দুর্ভাগ্যক্রমে, এটি কোনও বৈধ সমাধান নয়। নিম্নলিখিত পরীক্ষার কেস :, 1-2যা 1রিটার্ন প্রদান করা উচিত -1। চালাক কাজ যদিও।
স্যাম ওয়েভার

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

আপনার সম্পাদনাটি কেসটিকে ঠিক করে দিয়েছে তবে এখন উদাহরণটিতে ব্যর্থ হওয়ার পরিবর্তে কেসটি ব্যর্থ হয় 11-Awhich -11
স্যাম ওয়েভার

আমি দৈর্ঘ্যের জন্য আপনার নিয়ম পছন্দ করি না। আমি এটি প্রায় 35 টি অক্ষরের দামে স্থির করেছি এবং আমার মনে হয় না আমি এটি আরও ভাল করে তুলতে পারি।
অ্যালেক্স ভ্যান লিউ

1
আমি স্ট্রিংটিকে হেক্স ফর্ম্যাটে এনকোড করে তারপরে স্ট্রিংটিকে ইন্ট হিসাবে ভাগ করে নিজের চেয়ে সংক্ষিপ্ত উত্তর পেতে পেরেছি। অজগর 2 এ, এটির জন্য এটি বড় আকারের বলে মনে হয়। সুতরাং, 0 প্যাডিংয়ের আর প্রয়োজন নেই।
ডুনস

2

আর, 54 বাইট

এর জন্য প্র্যাকমা লাইব্রেরি দরকার। এটি ইনপুট স্ট্রিংটি বিভক্ত করে -। ডান স্ট্রিং ন্যায্যতা। তাদের তালিকান এবং পৃথক করে।

11-7 এর জন্য আমরা স্ট্রিং "11" এবং "7" দিয়ে শেষ করি। এর র‌্যাঙ্ক [২, ১]। পার্থক্যটি -1। 3h ~ J * -3h ~ J * এর জন্য আমরা "3h ~ J *" এবং "3h ~ J *" পাই। এর র‌্যাঙ্ক 0 [এর সাথে 1.5। 1.5] 1.5

diff(rank(pracma::strjust(scan(,'',sep='-'),"right")))

পরীক্ষার উদাহরণ

> diff(rank(pracma::strjust(scan(,'',sep='-'),"right")))
1: LKzb-LKaj
3: 
Read 2 items
[1] -1
> diff(rank(pracma::strjust(scan(,'',sep='-'),"right")))
1: A-9
3: 
Read 2 items
[1] -1
> diff(rank(pracma::strjust(scan(,'',sep='-'),"right")))
1: 11-Z
3: 
Read 2 items
[1] -1
> diff(rank(pracma::strjust(scan(,'',sep='-'),"right")))
1: 3h~J*-3h~J*
3: 
Read 2 items
[1] 0
> diff(rank(pracma::strjust(scan(,'',sep='-'),"right")))
1: Xv-Y0
3: 
Read 2 items
[1] 1

চালাক। দুর্দান্ত কাজ :)
অ্যালেক্স এ।

2

কফিস্ক্রিপ্ট, 143 140 139

f=(s)->[a,b]=((t=s.split '-').map (y)->Array((m=Math.max) 1, 1+(m ((l=(c)->c.length) t[0]),l t[1])-l y).join('\u0000')+y);`b<a?-1:(b>a?1:0)`

এখানে ফলাফলগুলি সহ একটি jsfiddle (কনসোল দেখুন)


2

PERL, 46 36 বাইট

print$2cmp$1if"@ARGV"=~/(\S+)-(\S+)/

আরজিভি তালিকাটিকে একটি স্ট্রিংয়ে রূপান্তর করে, হাইফেন দ্বারা বিভাজনকে একটি বাম এবং ডানদিকে কোনও ফাঁকা ফাঁকে ফাঁকে ফাঁকে স্থান দেয় না, তারপরে একটি সিএমপি কল দেয়।


আমি সন্দেহ করি যে আপনি অনেকগুলি স্থান এবং জায়গা থেকে মুক্তি পেতে পারেন;
মিকিটি

এর সাথে "@ARGV"=~/-/;print$`cmp$'
পালাতে

1
ব্যবহার করার জন্য ভাল ধারণা cmp, তবে স্ট্রিংয়ের দৈর্ঘ্য আলাদা হলে এটি কাজ করে না। উভয় ইনপুট এই চ্যালেঞ্জের জন্য একই মান ফেরত দেওয়া উচিত, যদিও "A" cmp "9"1 "11" cmp "Z"-1 হয়।
এইসুইটিআইস ব্ল্যাকনট

1

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

x,y=[int.from_bytes(i.encode(),"big")for i in input().split("-")];print((x<y)-(y<x))

দ্বারা স্ট্রিং ইনপুট বিভক্ত "-"। ইউনিকোড স্ট্রিংগুলিকে বাইট স্ট্রিংয়ে রূপান্তর করুন, তারপরে এই বাইট স্ট্রিংগুলি বড়-এন্ডিয়ান পূর্ণসংখ্যার হিসাবে ব্যাখ্যা করুন। শেষ পর্যন্ত তুলনা করুন - (আন) ভাগ্যক্রমে cmpপাইথন 3 এ আর উপলব্ধ নেই।

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

print -cmp(*[int(i.encode("hex"),16)for i in raw_input().split("-")]) 

আপনি printএবং এর মধ্যে স্থান সরিয়ে একটি অক্ষর শেভ করতে পারেন cmp
অ্যালেক্স ভ্যান লিউ

1

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

খুব সহজ সমাধান এবং এটি বুঝতে সহজ। স্ট্রিং দৈর্ঘ্যের তুলনা করে, তারপর স্ট্রিংগুলি লেক্সিগ্রাফিকভাবে তুলনা করুন।

এখানে চেষ্টা করুন

s,t=raw_input().split('-')
x,y=len(s),len(t)
print(x<y)*2-1if x-y else cmp(t,s)

1

perl5, 64

perl -aF- -pe '@f=map{length}@F;$_=$f[1]<=>$f[0]||$F[1]cmp$F[0]'

কমান্ডলাইন থেকে এটি চালান। যদিও এটি একটি নতুন লাইনের সাথে আরও ভাল দেখাচ্ছে তবে এটির জন্য 1 চরের দাম।

perl -laF- -pe '@f=map{length}@F;$_=$f[1]<=>$f[0]||$F[1]cmp$F[0]'

এই দীর্ঘ সংস্করণটি অমিল দৈর্ঘ্যের সঠিকভাবে পরিচালনা করে।


/-/,$_=$`cmp$'সহজ হবে, এবং আপনি -aF-কিছুটা এড়িয়ে যেতে পারেন । এছাড়াও, আমি এটিকে একটি 20 গণনা করছি (16 এর জন্য $_=$F[1]cmp$F[0]এবং 4 এর জন্য paF-, একটি ফাইলে সংরক্ষিত হয়েছে এবং এটি চালানো হয় perl -paF- file.pl)।
প্রিমো

1
যেমন আমি এরিকের উত্তরে উল্লেখ করেছি , cmpযখন দুটি স্ট্রিং আলাদা দৈর্ঘ্যের হয় তখনও কাজ করে না 11-Z
এইসুইটিআইস ব্ল্যাকনট

@ থিসসুটআইস ব্ল্যাকনট, স্থির।
hildred

খুশী হলাম। আপনি গল্ফ করতে পারেন এটি 39 দিয়ে /-/;$_=length$'<=>length$`||$' cmp$`এবং এর সাথে -p। ( $`রিজেক্স ম্যাচের আগে সমস্ত $'কিছু সঞ্চয় করে রাখে, পরে সমস্ত কিছু সঞ্চয় করে)) ব্যবহার করার জন্য mapকেবল lengthদুবার কল করার চেয়ে বেশি বাইট খরচ হয়।
এইসুইটসআইবলাকনট

0

এফ #, 53

fun s->let[|a;b|]=s="";s.Split[|'-'|]in b.CompareTo a

এটি ফর্মটিতে একটি বেনামে ফাংশন (ল্যাম্বদা) রয়েছে, সুতরাং আপনাকে এটি আটকে দিতে হবে এবং সরাসরি (বা, পাইপিং নোটেশন ব্যবহার করে) পরে প্যারামিটার সরবরাহ করতে হবে। উদাহরণস্বরূপ (এফএসআইতে):

> "7-9" |> fun s->let[|a;b|]=s="";s.Split[|'-'|]in b.CompareTo a
1
> "abc-abc" |> fun s->let[|a;b|]=s="";s.Split[|'-'|]in b.CompareTo a
0
> "LKzb-LKaj" |> fun s->let[|a;b|]=s="";s.Split[|'-'|]in b.CompareTo a
-1

0

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

f=s=>((a=s.split('-'))[1]>a[0])-(a[1]<a[0])

ভাল কাজ, কিন্তু এটি পরীক্ষার কেস 2 সম্পন্ন করে না: 11-Zফিরে -1আসা উচিত তবে এটি ফিরে আসবে 1
স্যাম ওয়েভার 21

1
@ সামউইভার প্রকৃতপক্ষে, এটি উত্তরের পরে যুক্ত হয়েছিল এবং অন্যান্য উত্তরগুলিও ভেঙে দেয়। আপনি '11'>'Z'যখন ব্যাখ্যা করতে পারবেন কেন যখন কেন '11'<'ZZ'বিভিন্ন দৈর্ঘ্যের স্ট্রিংয়ের তুলনা করতে হবে বা খালি স্ট্রিংয়ের কী মান রয়েছে সে প্রশ্নে কিছুই নেই।
জর্জ রিথ

প্রশ্নের অভিপ্রায় কখনও বদলানো হয়নি, আমি কেবল সেই পরীক্ষার কেসগুলি এবং স্পষ্টতা যুক্ত করেছি কারণ আমি বুঝতে পেরেছিলাম যে প্রথম দিকে আমি যথেষ্ট পরিষ্কার ছিলাম না। আপনি ঠিক বলেছেন যে আমি কখনই একটি খালি স্ট্রিংয়ের মান সংজ্ঞায়িত করি না এবং আমি সেই অনুসারে প্রশ্নটি আপডেট করব। এই পরীক্ষার কেসগুলি প্রশ্নের আচরণ বা লক্ষ্য পরিবর্তন করেনি, কেবল এটি স্পষ্ট করে জানিয়েছে। উদাহরণগুলি যেমন আপনি ফাংশনটির নামকরণ করেছেন কারণ প্রতিটি চরিত্রকে অবশ্যই এমন একটি সংখ্যায় স্বতন্ত্র "অঙ্ক" হিসাবে গণ্য করতে হবে যে সমস্ত মুদ্রণযোগ্য ASCII অক্ষরের সমতুল্য। প্রশ্নের এই যান্ত্রিকটি কখনই পরিবর্তিত হয়নি, কেবল আরও স্পষ্ট হয়ে উঠেছে।
স্যাম ওয়েভার

1
@ সামউইভার অপরিজ্ঞাত আচরণ থেকে সংজ্ঞায়িত করা পরিবর্তন করে এটি পরিবর্তন করে। কিছুই চরিত্র নয়। যতক্ষণ না এটি নাল চরিত্রটি, যা এটি পরিচালনা করে।
জর্জ রিথ

0

রুবি, 59 বাইট

a,b=gets.chomp.split ?-
p (b.size<=>a.size).nonzero?||b<=>a

0

05 এ বি 1 , 12 11 9 বাইট

'-¡₄ö¥0.S

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

'-¡          # Split the (implicit) input on '-'
             #  i.e. 'LKzb-LKaj' → ['LKzb','LKaj']
   ₄ö        # Convert both parts to a Base-1000 number
             #  i.e. ['LKzb','LKaj'] → [21020061037,21020036045]
     ¥       # Push the deltas (subtraction between each sub sequential pair) of the list
             #  i.e. [21020061037,21020036045] → [-24992]
      0.S    # Get the sign [1 for a>0; -1 for a<0; 0 for a==0] (and output implicitly)
             #  i.e. [-24992] → [-1]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.