মার্টিন বনাম ডেনিস - রাউন্ড 1: কার বেশি প্রতিনিধি?


33

আমি জানি "বিশ্বের সেরা দুটি কোড-গল্ফার" সম্পর্কে প্রচুর চ্যালেঞ্জ হয়েছিল, তবে এই দুটি বিষয়টি আরও কিছুটা অনন্য, যার মধ্যে দুটি জড়িত থাকার (ভবিষ্যতের) চ্যালেঞ্জগুলির একটি সিরিজের রাউন্ড 1 হ'ল ।


আপনার টাস্ক একটি প্রোগ্রাম বা ফাংশন লিখতে যে আয় দুটি ভিন্ন অ হোয়াইটস্পেস হওয়া ASCII স্ট্রিং, যিনি এই মুহূর্তে আরো খ্যাতি আছে প্রোগ্রাম, দৌড়ে মধ্যে সংশ্লিষ্ট ডেনিস ♦ এবং মার্টিন Ender ♦ । জটিল অংশটি হ'ল খ্যাতি অভিন্ন হলে (সম্ভবত না) ক্ষেত্রে সঠিক স্ট্রিং "টাই" আউটপুট করতে হবে এবং উপরে উল্লিখিত দুটি ভিন্ন নন-হোয়াইটস্পেস এএসসিআইআই স্ট্রিংগুলি "টাই" * এর চেয়ে আলাদা হওয়া উচিত ।

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

উদাহরণ:

Let the chosen string for Dennis be "D" and the chosen one for Martin Ender be "M" (should be specified)

If Dennis' rep > Martin Ender's rep => D
If it's the other way around => M
If it's a tie => tie 

গুরুত্বপূর্ণ! নীচের সমাধানগুলি পরীক্ষা করার জন্য টাইকে প্রভাবিত করার একমাত্র উদ্দেশ্যে ডেনিস ও মার্টিনের পোস্টগুলিতে ভোট দেওয়া লক্ষ্যবস্তু ভোটদান যা স্ট্যাক এক্সচেঞ্জের নেটওয়ার্ক জুড়ে নিষিদ্ধ constitu যদি আপনি এটি পরীক্ষা করতে চান যে কোনও সমাধানটি সঠিকভাবে আউটপুট হয় tieতবে এর মধ্যে আইডিগুলি এমন 2 ব্যবহারকারীদের মধ্যে পরিবর্তন করুন যা আপনি জানেন যে তারা বাঁধা থাকতে পারেন। দেখুন এই মেটা পোস্টে আরো বিস্তারিত জানার জন্য।

* আমি মনে করি যে কেউ যাই হোক না কেন এটি ব্যবহার করতে হবে


33
"... বিশ্বের সেরা দুটি কোড-গল্ফার ..." [উদ্ধৃতি-আবশ্যক]
মার্টিন এন্ডার

9
আমরা কি ধরে নিতে পারি যে তারা এই সম্প্রদায়ে সর্বদা # 1 এবং # 2 থাকবে?
ovs

7
একটি বন্ধুত্বপূর্ণ অনুস্মারক: পুরো স্ট্যাক এক্সচেঞ্জ নেটওয়ার্কে লক্ষ্যযুক্ত ভোটদান নিষিদ্ধ। মার্টিন ভোট এবং শুধু এই চ্যালেঞ্জ পরীক্ষা জমা করতে আমার পোস্ট করা হয় না অনুমোদিত।
ডেনিস

2
@ শেগি এটি দুর্দান্ত যে আপনি এই নোটটি যুক্ত করেছেন। আশা করি, জড়িত ব্যবহারকারীরা এটি করা বন্ধ করে দেবেন
মিঃ এক্সকোডার

1
শীর্ষে @ মার্টিনএেন্ডারে, সাধারণ জ্ঞান সম্পর্কিত তথ্যগুলির জন্য উদ্ধৃতিচিহ্নগুলি অপ্রয়োজনীয়।
গ্রিফন - মনিকা পুনরায়

উত্তর:


20

05AB1E , 65 64 বাইট

কোড:

•в=6{•5ôvy’ƒËŠˆ.‚‹º.ŒŒ/†š/ÿ’.w’„Ö="ˆ"’¡1èт£þ}})ZQā*O<“D M·‡“#è

05AB1E এনকোডিং ব্যবহার করে ।


ব্যাখ্যা:

•в=6{•সংখ্যাটি в=6{255 বেস থেকে বেস 10 এ রূপান্তর করে , এর ফলে 1201208478 । প্রথমার্ধ হ'ল ডেনিসের আইডি (12012) এবং দ্বিতীয়ার্ধটি মার্টিনের আইডি (8478)। নিম্নলিখিত অ্যারেটি ব্যবহার করে 5 টি টুকরো টুকরো করুন :

['12012', '08478']

ভাগ্যক্রমে, আমরা মার্টিনের আইডি থেকে নেতৃস্থানীয় শূন্যটি ছেড়ে দিতে পারি, যেহেতু এটি এখনও কাজ করবে (অগ্রণী শূন্যটি দেখার জন্য ক্লিক করার আগে লিঙ্কটি পরীক্ষা করুন)।

আমরা এখন vyএই 05AB1E কোড থেকে নিম্নলিখিত স্ট্রিংটি ব্যবহার করে এই অ্যারের মধ্য দিয়ে লুপ করব এবং তৈরি করব:

’ƒËŠˆ.‚‹º.ŒŒ/†š/ÿ’  -->  codegolf.stackexchange.com/users/ÿ

যদিও ÿপুনরাবৃত্তির বর্তমান উপাদানটি (স্ট্রিং ইন্টারপোলেশন ব্যবহার করে) এটি অনলাইনে চেষ্টা করুন!

লিঙ্কটি তৈরির পরে, লিঙ্কটি .wথেকে সমস্ত ডেটা পড়ে, ফলে বিপুল পরিমাণে পাঠ্য হয়। এ থেকে খ্যাতি স্ক্র্যাপ করতে, আমাদের স্ট্রিংয়ের উপর বিভক্ত হওয়া দরকার title="reputation"। অথবা আরো সংকুচিত সংস্করণ: ’„Ö="ˆ"’। এই স্ট্রিংয়ের টুকরোটিতে বিভক্ত করুন (সহ ¡) এবং দ্বিতীয় উপাদানটি (সহ ) পান এবং প্রথম 100 টি অক্ষর (সহ т£) রাখুন।

এখন, আমাদের স্ক্র্যাপযুক্ত পাঠ্যটি দেখতে কিছুটা এরকম দেখাচ্ছে:

>
        139,883 <span class="label-uppercase">reputation</span>
   </div>

<div class="ba

এই অংশটি সহজ, আমরা সুনামের সংখ্যাটি বজায় রাখতে অঙ্কগুলি বাদ দিয়ে অন্য কিছু সরিয়ে ফেলি, যার জন্য আমাদের একটি বিল্টিন ( þ) রয়েছে। আমরা লুপটি শেষ করি এবং সবকিছুকে একটি অ্যারেতে গুটিয়ে রাখি }})

শেষ পর্যন্ত, আমরা খ্যাতি নম্বরগুলি প্রক্রিয়া করতে যেতে পারি:

ZQā*O<“D M·‡“#è   -   On stack: an array in the format [Dennis rep, Martin rep]

Z                 # Get the maximum of the array
 Q                # Check for equality with the array
  ā*              # Multiply by it's index (1-indexed)
    O<            # Sum and decrement by 1
      “D M·‡“#    # Push the array ['D', 'M', 'tie']
              è   # Get the element on the index of the sum

যার ফলস্বরূপ হয় D, Mবা tie


2
আমি জানতাম না যে 05AB1E ইন্টারনেট API গুলি অ্যাক্সেস করতে পারে, এই উত্তরটি আমাকে বিস্মিত করে => +1
মিঃ এক্সকোডার

আপনি এবং অন্যরা কীভাবে একটি নির্দিষ্ট নম্বর পাওয়ার উপায় নিয়ে আসেন তা আমি সর্বদা পছন্দ করি। :) +1 বিটিডব্লু, এটি " দ্বিতীয় উপাদান (সহ 1è) and keep the first **100 characters** (with т£ ") পুরোপুরি কোড-ব্লকের মধ্যে রয়েছে বলে মনে হয়, বা এটি " দ্বিতীয় উপাদান (সহ )т£ হওয়া উচিত এবং প্রথম 100 টি অক্ষর (সহ ) রাখা উচিত? " আমার ধারণা একটি টাইপো, তবে যদি এটি এমন মনে করা হয় তবে আমি বিভ্রান্ত হয়ে
পড়েছি

কেভিন ক্রুইজসেন হুহ, আমি জানি না কীভাবে এটি হয়েছিল তবে এটি এখন ঠিক হয়ে গেছে। সতর্ক থাকুন জন্য ধন্যবাদ! :)
আদনান

এটি ভুল বলে মনে হচ্ছে (আমি এই ধরণের কোড কীভাবে সংশোধন করব জানি না, দুঃখিত) Dennis: 140,033,; Martin: 140,003, তবে আমি এখানে আপনার কোডটি চেষ্টা করেছি tio.run/nexus/05ab1e#@/… , এতে ফল হয় tieDপরিবর্তে এটি আউটপুট করা উচিত নয় ?
এডি

@ এডির .wওয়েব অ্যাক্সেস দরকার যা টিআইও-তে সীমাবদ্ধ (এটি নিরাপদ মোডে 05AB1E চালায়)। অফলাইন দোভাষীটিতে এটি কাজ করা উচিত।
আদনান

19

পাওয়ারশেল ভি 3 +, 147 123 119 103 101 96 বাইট

$a,$b=irm api.stackexchange.com/users/12012`;8478?site=codegolf|% I*|% r*n;$a-$b|% T*g "D;M;Tie"

নামের পরিবর্তে সত্য / মিথ্যা আউটপুট ব্যবহার করে 24 বাইট সংরক্ষণ করা হয়েছে।

চূড়ান্ত চেকগুলি পুনর্গঠন করে আরও 4 টি সংরক্ষণ করা হয়েছে।

অনুরোধ থেকে দুটি ব্যবহারকারীর কেবল নামীকরণ পেয়ে 16 টি সংরক্ষণ করা হয়েছে |% r*n, একাধিকবার ব্যবহার করা সংরক্ষণ করা হয় , এর অর্থ আমরা একটি মিলিয়ন বন্ধনী এবং দুটি অকেজো ভেরিয়েবলের মতো মুক্তি পেতে পারি।

-2 ধন্যবাদ টেসেল্লাটিংহেকলারকে - URL জন্য দুটি doublequotes পরিবর্তে একটি পালাবার গৃহস্থালির কাজ ব্যবহার করে, সরানো @অ্যারে যা অ-প্রয়োজনীয় (oopsie) ছিল থেকে

অদ্ভুত .ToStringকৌতুক ব্যবহৃত হয়েছিল যা আমি জানতাম না টেসেলেলটিংহেকলারের দ্বারা পুনরায় প্রাপ্ত হওয়া অবধি অস্তিত্ব নেই isted -5 এবং শেষ পর্যন্ত 100 এর নীচে ফিরে


সংস্করণ যা নাম দেয়:

$a,$b=irm "api.stackexchange.com/users/12012;8478?site=codegolf"|% I*
if(($c=$a|% r*n)-eq($d=$b|% r*n)){"tie"}else{@(($a|% d*),($b|% d*))[$c-lt$d]}

প্যারামিটারের নামগুলি সংক্ষিপ্ত করার কারণে এটি দেখতে বেশ অগোছালো দেখাচ্ছে।

যে কোনও জায়গায় |% r*nপ্রদর্শিত হবে আমরা পেয়ে যাচ্ছি ReputatioN, এবং |% d*এটিDisplay_name

ব্যবহারসমূহ Invoke-RestMethod(ওরফে irm) এপিআই নামে ফলাফলের ক্যোয়ারীতে, দোকানে Items(অর্জিত ব্যবহার |% I*দুটি ভেরিয়েবল মধ্যে), $a& $b, প্রতিটি প্রো গল্ফ খেলোয়াড় এর জন্য এক, ToString( |% T*g) মান এক কৌতুক ফলাফল D, Mবা Tieবিজোড় সংখ্যা হলে / এমনকি / শূন্য।


পাওয়ারশেলটি সবচেয়ে কম হবে বলে আমি আশা করিনি। +1
Rɪᴋᴇʀ

@ রিকার পাইথ সম্ভবতঃ হতেন তবে এর একটি ভয়ঙ্কর বাগ রয়েছে।
এরিক আউটগলফার

1
ভাল, আপনি জয়; কোন উপায় না আমি এখন এই মারতে যাচ্ছি!
শেগি

9
তাহলে আপনার কোডটি 103! = 9.902900716486180407546715254581773349090165822114492483005280554699... × 10^163বাইটস লম্বা ..? : পি
সম্পূর্ণরূপে

1
@ টেসেল্লাটিংহেকলার শেষ বিটের উত্তরটি পরীক্ষা করে দেখুন, আপনি এটি 100 এর নিচে পেয়েছেন! - কখনই জানতেন ToStringনা যে এর সাথে +/- সংখ্যাগুলি দিয়ে কাজ করা হয়েছিল, ভবিষ্যতের জন্য মনে রাখবে।
কলসডাব্লু

16

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

from requests import*
print cmp(*[get('http://api.stackexchange.com/users/12012;8478?%ssite=codegolf&filter=!9aK21rboZ'%s).text for s in'order=asc&',''])or'tie'

সংক্ষিপ্ত পাইথন উত্তর নয়, তবে এখন পর্যন্ত সংক্ষিপ্ততম কোনও এটি অনুমান করে না।

1মার্টিনের যদি আরও প্রতিনিধি থাকে তবে মুদ্রণ -1করি।


14

জাভাস্ক্রিপ্ট (ES6), 167 156 146 144 141 132 103 বাইট

বোকা fetchএবং এর বোকা, ব্যয়বহুল Promiseশৃঙ্খল!

অনুমান, বর্তমানে অনুমোদিত হিসাবে, ডেনিস এবং মার্টিন সর্বদা 2 শীর্ষ স্থানের ব্যবহারকারী হতে হবে। এর মূল স্তর থেকে চালানো দরকার api.stackexchange.com। যে সময়ে সর্বাধিক খ্যাতি রয়েছে তার জন্য JSON অবজেক্টযুক্ত কোনও Promiseবস্তু (যেমন এখন conকমত্য দ্বারা অনুমোদিত ) প্রদান tieকরে। যদি JSON অবজেক্টটি বৈধ আউটপুট হিসাবে বিবেচিত না হয় তবে তার জন্য 5 বাইট যুক্ত করুন .link

_=>fetch`users/?site=codegolf`.then(r=>r.json()).then(({items:[j,i]})=>j[r="reputation"]==i[r]?"tie":j)
  • 11 টি বাইট সংরক্ষণ করা কেভিনের পরামর্শে আমি linkপ্রথম অক্ষরের পরিবর্তে প্রোফাইলটি ফিরিয়ে দিচ্ছি display_name, যা একই অক্ষর দিয়ে শুরু করতে তাদের ব্যবহারকারীর নাম পরিবর্তন করে তাদের বিরুদ্ধে আরও ভাল ভবিষ্যত-প্রমাণ সরবরাহ করে!
  • 5 টি বাইট আমার অন্য সমাধানে কামোরোসো94 থেকে একটি টিপ অভিযোজিত সংরক্ষণ করেছে ।

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

f=
_=>fetch`//api.stackexchange.com/users/?site=codegolf`.then(r=>r.json()).then(({items:[j,i]})=>j[r="reputation"]==i[r]?"tie":j)
f().then(console.log)


বিকল্প

যদি এমন সময় আসে যে ডেনিস এবং মার্টিন শীর্ষে নেই এবং আমরা এখনও জানতে চাই যে তাদের মধ্যে সর্বাধিক খ্যাতি রয়েছে তবে অতিরিক্ত 10 বাইট ব্যয়ে আমাদের নীচের প্রয়োজন হবে।

_=>fetch`users/12012;8478?site=codegolf`.then(r=>r.json()).then(({items:[j,i]})=>j[r="reputation"]==i[r]?"tie":j)

2
আপনি পরিবর্তন করতে পারেন .display_name[0]থেকে .display_name, অথবা একটি এমনকি খাটো বিকল্প এখনও তাদের উভয়ের জন্য অনন্য যে: .link। ;) অথবা কেবলমাত্র পুরো JSON, তবে আমি নিশ্চিত নই যে এটি সতর্কতা-পপআপে ফিট করে।
কেভিন ক্রুইজসেন

ধন্যবাদ, @ কেভিন ক্রুইজসেন; মার্টিনের একটি স্থান রয়েছে বলে আমাকে ব্যবহারকারীর নামের একটি নির্যাস ব্যবহার করতে হয়েছিল, যা অনুমোদিত নয়। linkযদিও আমি প্রয়োজনীয় তথ্যগুলি ফিরিয়ে দিতে আমি ফিল্টার করা এপিআই কোয়েরি ব্যবহার করছি, তবে এটি ব্যবহারে ভাল চিৎকার ।
শেগি

@ কেভিন ক্রুজসেন এজেএক্স রিটার্নের সাথে কাজ করার সময় আমি পুরো এইচটিএমএল পৃষ্ঠাগুলি সতর্কতা পপআপগুলিতে ফেলে দিয়েছি। এটি এটি পরিচালনা করতে পারে।
ড্রাকো 18s 15

@ Draco18s, alertএকটি JSON অবজেক্টটি প্রদর্শন করছে, তবে এটি প্রদর্শিত হবে [object Object]
শেগি

@ শেগি সত্য, সত্য, এটি হবে।
ড্রাকো 18

9

পাইথন 3, 160 157 151 বাইট

from requests import*
a,b,*c=get('http://api.stackexchange.com/users?site=codegolf').json()['items']
r='reputation'
print(['tie',a['link']][a[r]>b[r]])

-3 বাইটস @ কেভিন ক্রুজসেনকে ধন্যবাদ thanks

আরও সুনামের সাথে ব্যবহারকারীর একটি লিঙ্ক প্রিন্ট করে

ধরে নিলেন তারা # 1 এবং # 2 এ রয়েছে


কোনও অনুমান না করে পাইথন 2, 157 বাইট :

from requests import*
a,b=get('http://api.stackexchange.com/users/8478;12012?site=codegolf').json()['items']
r='reputation'
print['tie',a['link']][a[r]>b[r]]

6

পাইথন, 226 225 221 বাইট

আমার মনে হচ্ছে এটি অনেক দীর্ঘ।

import requests as r,re
def f(i):d=re.sub('[, ]','',r.get('http://codegolf.stackexchange.com/users/'+i).text);D=d.index('"reputation">')+14;return int(d[D:d.index('<',D)])
a=f('8478')
b=f('12012')
print([a>b,'tie'][a==b])

"True"মার্টিনের ডেনিসের চেয়ে বেশি প্রতিনিধি থাকলে মুদ্রণ"False" বেশি রেপ থাকে, এবং "tie"তাদের যদি একই থাকে (তাত্ত্বিকভাবে। আমি এটি পরীক্ষা করতে পারি না: পি)।

https-> httpকেভিন ক্রুজসেনকে 1 বাইটের জন্য ধন্যবাদ! re as r, r.sub-> re, re.sub4 বাইটের জন্য @ ওওএসকে ধন্যবাদ!


আমি সম্পূর্ণরূপে নিশ্চিত নই, তবে কী এতে পরিবর্তন httpsকরা সম্ভব http? আমি জানি পিপিসিজি এখন পুরোপুরি https, তবে আপনি যখন পাইথনের HTTP তে নেভিগেট করেন তখন এটি HTTPS- এ স্বয়ংক্রিয়ভাবে নির্দেশনা দেয়, যেমন এটি ব্রাউজারে রয়েছে?
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন আহা হ্যাঁ, আমি জানি না আমি সেখানে কী ভাবছিলাম। ধন্যবাদ!
হাইপারনিউট্রিনো

1
আপনি প্রয়োজন হবে না re as Rimport requests as r,rere.sub
সবেমাত্র

@ ওভস হে, আমার আসল পদ্ধতিটি ভিন্ন ছিল ধন্যবাদ!
হাইপারনিউট্রিনো

আমি মনে করি আপনি cmpশেষ তিনটি লাইনের পরিবর্তে কিছু বাইট সংরক্ষণের জন্য ফাংশনটি ব্যবহার করতে পারেনprint['tie',0,1][cmp(f('8478'),f('12012'))]
লুভজো

6

পিএইচপি, 167 বাইট

ডেনিসের জন্য প্রিন্ট -১, মার্টিন এেন্ডারের জন্য ১। টাই টাই ক্ষেত্রে টাই

<?=($b=($t=json_decode(gzdecode(join(file('http://api.stackexchange.com/users/12012;8478?site=codegolf&order=asc'))))->items)[0]->reputation<=>$t[1]->reputation)?:tie;

4

পাইথন 2 , 228 223 204 199 বাইট

আমি এটি একটি মোবাইল হটস্পটে করেছি তাই ... এটি দুর্দান্ত নয় ... ধরে নিই তাদের দুজনেই সবসময় একই লক্ষ হাজারে থাকবে। এখনই কিছু ধরে নি। : ডি

import urllib as l,re
f=lambda i:int(re.search('n">\s*([\d,]+)',l.urlopen('http://codegolf.stackexchange.com/users/%d'%i).read()).group(1).replace(',',''))
d,m=f(12012),f(8478)
print[d>m,'Tie'][d==m]

Trueমার্টিনের চেয়ে ডেনিসের বেশি খ্যাতি থাকলে প্রিন্ট করে , Falseঅন্যথায় এবং Tieযদি তারা ... বাঁধা থাকে।


4

বাশ + জকিউ , 140 133 বাইট

w3m 'api.stackexchange.com/users/12012;8478?site=codegolf&sort=name'|jq '.items|map(.reputation)|1/(index(min)-index(max))'||echo tie

ফর্ম্যাট এবং ব্যাখ্যা করা হয়েছে

প্রথমত, আমরা ডাব্লু 3 এমআই এপিআই curl (এবং ব্যবহার --compressed, বা --comঅ-জিজিপ থেকে সংক্ষিপ্ত ) :

w3m 'api.stackexchange.com/users/12012;8478?site=codegolf&sort=name'

এটি কিছু জেএসওএন। অর্ডারটি স্থির করুন, খ্যাতির ভিত্তিতে নয়। জেকিউ তারপরে জেএসওনকে প্রক্রিয়াজাত করে, যা এটি এর জন্য তৈরি।

.items                          # take the items array
| map(.reputation)              # extract only the reputations
| 1 / 
  (index(min)-index(max))       # This checks if the bigger value is first (1) or last (-1) in array

We use 1/x above to generate an division-by-zero error when min==max, so in a tie situation. The ||echo tie in bash catches that.

Note that a warning is printed on stderr by JQ in that case, but we consider only stdout the actual result of the program ;)


1
You can use w3m instead of curl --com to save a few bytes. Also, I think it's worth mentioning that this requires jq 1.5, as jq 1.4 didn't raise an error for division by zero.
Dennis

True, thanks for the hint. W3m is exactly what I was looking for.
opatut

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