সংক্ষিপ্ততম মিনিড ফাংশন


24

Minmod ফাংশন পরিচিত একটি বৈকল্পিক মিনিট , যা আংশিক ডিফারেনশিয়াল সমীকরণ জন্য ঢাল সীমিত উচ্চ রিসোলিউশনের স্কিম উপস্থিত হয়। Slালুগুলির মধ্যে আপেক্ষিক চিহ্নগুলির যত্ন নেওয়ার সময় বেশ কয়েকটি opালু দেওয়া, এটি সর্বাগ্রে slালুটি বের করে।

ফাংশনটি প্যারামিটারগুলির একটি স্বেচ্ছাসেবী সংখ্যা নেয়। তারপরে মিনিমড (এক্স 1 , এক্স 2 , ..., এক্স এন ) হিসাবে সংজ্ঞায়িত করা হয়েছে:

  • মিনিট (এক্স 1 , এক্স 2 , ..., এক্স এন ) , সমস্ত এক্স যদি আমি কঠোরভাবে ইতিবাচক হয়
  • সর্বাধিক (x 1 , x 2 , ..., এক্স এন ) , সমস্ত x যদি আমি কঠোরভাবে নেতিবাচক হয়
  • 0 , অন্যথায়।

আমরা কেবল পূর্ণসংখ্যার ইনপুটগুলি বিবেচনা করব, কারণ এটি বাস্তবায়নে আসলেই প্রভাব ফেলবে না এবং কয়েকটি (রহস্যমূলক) ভাষার ক্ষেত্রে আরও অন্তর্ভুক্ত হওয়া উচিত।

একটি প্রোগ্রাম বা ফাংশন, যা লাগে লিখুন এন (জন্য স্বাক্ষরিত পূর্ণসংখ্যার এন> 0 stdin, argv বা ফাংশন যুক্তি মাধ্যমে), এবং আয় বা কপি করে প্রিন্ট (stdout- এ) ফলাফলের (যদি করে একটি variadic ফাংশন চেয়ে বেশি সুবিধাজনক আপনি একটি অ্যারের ব্যবহার করতে পারেন) এর minmod (ক, খ)

আপনার অবশ্যই বিল্ট-ইন মিনিট বা সর্বাধিক ফাংশন ব্যবহার করবেন না (এবং প্রকৃতপক্ষে কোনও বিল্ট-ইন মিনমড নয়, যদি আপনি এটি আসলে খুঁজে পেতে পারেন)। এছাড়াও, নির্দিষ্ট অল্প সংখ্যক আইটেম (5 এর চেয়ে কম) বাছাই করা ছাড়া আপনার কোনও বিল্ট-ইন বাছাই করা ফাংশন ব্যবহার করা উচিত নয় ।

যদি আপনার ভাষায় স্বাক্ষরিত প্রকার না থাকে তবে আপনি স্বাক্ষরবিহীন প্রকারটি ব্যবহার করতে পারেন এবং এটি দুটির পরিপূরক হিসাবে ব্যাখ্যা করতে পারেন । যেমন যদি আপনার ভাষায় শুধুমাত্র স্বাক্ষরবিহীন বাইট ব্যবহার করে, আপনি ব্যবহার করতে পারেন 255জন্য দাঁড়ানো -1এবং 128জন্য দাঁড়ানো -128, ইত্যাদি

এটি কোড গল্ফ, তাই সংক্ষিপ্ত উত্তরটি (বাইটে) জেতে।

পরীক্ষার মামলা

Input          Output

2              2
-3             -3
0              0
3 -5           0
2 4 1          1
0 1 2          0
-1 1 2         0
-4 -2 -3 -2    -2
-5 0 -1        0
1 0 -1         0

লিডারবোর্ড

নিম্নলিখিত স্ট্যাক স্নিপেট একটি নিয়মিত লিডারবোর্ড এবং ভাষার দ্বারা বিজয়ীদের একটি সংক্ষিপ্ত বিবরণ উভয়ই উত্পন্ন করে। সুতরাং আপনার পছন্দের ভাষা আপনাকে পুরো চ্যালেঞ্জ জিততে না দিলে, কেন দ্বিতীয় তালিকার কোনও স্থান ছিনিয়ে নেওয়ার চেষ্টা করবেন না?

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

# Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

# Ruby, <s>104</s> <s>101</s> 96 bytes


1
প্রতিটি ভাষায়
কয়টি

1
@ প্রবৃদ্ধসেকিলার হুম, আমি পছন্দ করি যে স্নিপেটের পূর্ণ স্ক্রিনটি না খোলায় বর্তমানে দুটি টেবিল একে অপরের পাশে ফিট করে - আমি মনে করি যদি আমি অন্য কলাম যুক্ত করি তবে এটি কিছুটা ক্র্যামড হবে। আপনার মন্তব্যটি যদি আমার চেয়ে উল্লেখযোগ্য পরিমাণে আরও বেশি অগ্রগতি পায় তবে আমি কী করতে পারি তা আমি দেখতে পাচ্ছি। ;)
মার্টিন এন্ডার

1
@ অপ্টিমাইজার আমি স্থির করেছিলাম যে বিধিগুলির পূর্ববর্তী সংস্করণটি আমার উদ্দেশ্যটির চেয়ে মানুষের উত্তরগুলির সৃজনশীলতাকে আরও বেশি ক্ষতি করছে। তদ্ব্যতীত, আমি যেভাবে যাইহোক নিয়ম পরিবর্তনের আগে যে উত্তরে নেতৃত্ব দিয়েছিল তার উত্তরে একটি পুরস্কার প্রদান করতে যাচ্ছিলাম তাই আমি মনে করি না যে প্রতিনিধি হিসাবে কোনও ক্ষতি হয়েছে কিনা। (হ্যাঁ, আমি সম্মত হই যে নিয়ম পরিবর্তনগুলি এত ভাল ধারণা নয়, তবে আমি বুঝতে পেরেছিলাম যে এটি এক্ষেত্রে এটি উপযুক্ত হবে))
মার্টিন এন্ডার

1
@ মার্টিনবাটনার - আমি এখন নতুন উত্তরগুলিতে কোনও সৃজনশীলতা দেখছি না। এটি সবই জোড় জোড় করে মিনিমডে নেমে এসেছে। সৃজনশীলতা xnor এর উত্তরগুলিতে বা মিগের দৃষ্টিভঙ্গিতে ছিল যার ভিত্তিতে আরও অনেক উত্তর প্রভাবিত হয়।
অপ্টিমাইজার 11

2
@ অপ্টিমাইজার, এটি কোনও উত্তরই পুরানোটির মতো ঠিক সৃজনশীল কিনা এটি অনিচ্ছাকৃত বন্দর কিনা তা বলা সর্বদা সম্ভব নয়।
পিটার টেলর

উত্তর:


13

গল্ফস্ক্রিপ্ট, 10 9 বাইট

~{0]$1=}*

বিন্যাসে স্টিডিন থেকে ইনপুট গ্রহণ করে [-4 -2 -3 -2]

এটি অন্তর্নির্মিত বাছাইয়ের ফাংশনটি ব্যবহার $করে তবে প্রতিবার এটি প্রয়োগ করা হলে এটি 3 টি উপাদানের অ্যারেতে থাকে, যা অনুমোদিত which

অনলাইন ডেমো


দুর্দান্ত, আমাদের উত্তরগুলি 1 সেকেন্ডেরও কম দূরে, যার অর্থ আমার উত্তরটি সবচেয়ে কম ব্যবহৃত হত। ;)
টিমটেক

1
+1, এটি আমার সমাধানের চেয়ে ছোট এবং স্মার্ট। (গীত। যদি কেউ সন্দেহ করে তবে হ্যাঁ, এই সমাধানটি সঠিক, এবং এটি অন্তর্ভুক্তির দ্বারা প্রমাণ করা মোটামুটি সহজ Peter পিটারের কোডটি বার বার পূর্ববর্তী মিনিমাম মান, পরবর্তী ইনপুট মান এবং শূন্যের মধ্যবর্তী গণনা করে; একটি পরীক্ষা করে সম্ভাব্য কেসগুলি দেখায় যে এটি প্রকৃতপক্ষে নতুন মিনিমাম মান দেয়))
ইলমারি করোনেন

কী ... ভাল,
ঝুঁকির

24

গণিত, 19 বাইট

Median[#~Riffle~0]&

মার্টিন বাটনারকে কোড এবং গল্ফিং ধন্যবাদ।

এটি একটি নামবিহীন খাঁটি ফাংশন যা ইনপুট হিসাবে পূর্ণসংখ্যার একটি তালিকা গ্রহণ করে। এটি পছন্দ করুন

Median[#~Riffle~0]&[{-2, -3, -2, -4}]

বা একইভাবে ভেরিয়েবলে সংরক্ষণ করা হয়।

কোডটি প্রথমে ইনপুট তালিকার প্রতিটি দুটি উপাদানের মধ্যে একটি শূন্য ছিটিয়ে দেয় যা উপাদানগুলির n-1মধ্যে শূন্যগুলি সন্নিবেশ nকরে। তারপরে, উত্তরটি তৈরি করতে মিডিয়ান লাগে।

এটি মিনি-মোড দেয় কারণ এটি প্রতিটি কেস পরিচালনা করে:

  1. সমস্ত সংখ্যা ধনাত্মক, এক্ষেত্রে শূন্যগুলি তাদের নীচে এবং মিডিয়ানটি সর্বনিম্ন ধনাত্মক সংখ্যা।

  2. সমস্ত সংখ্যা negativeণাত্মক, এক্ষেত্রে শূন্যগুলি তাদের উপরে এবং মিডিয়ানটি সর্বনিম্ন নেতিবাচক সংখ্যা।

  3. ইতিবাচক এবং negativeণাত্মক সংখ্যা উভয়ই রয়েছে, এবং মধ্যম উপাদানটি একটি শূন্য।

যদি গাণিতিক রৈখিক-সময় নির্বাচন অ্যালগরিদম ব্যবহার করে এর মধ্যমা প্রয়োগ করে , তবে এটি ও (এন)।


11

হাস্কেল, 62 61 39 38 37 বাইট

f s=last[x|x<-0:s,and[x*x<=x*y|y<-s]]

@ Zgarb এর উত্তর *, যেমন, থেকে ধার করা কিছু তুলনা যাদু ব্যবহার করে x*x<=x*y

x*x<=x*yশুধুমাত্র যখন সত্য xএবং yএকই চিহ্ন আছে এবং yএর পরম মান বড়। মনে রাখবেন যে যখন xহয় 0এটা সবসময় সত্য।

আমরা নির্ধারণ করে xফলাফলের iff এটি অন্তর্ভুক্ত করা হয় s, এবং যে সব জন্য yমধ্যে s xএকই প্রতীক হিসেবে রয়েছেy এবং পরম মান ছোট। যদি কোনও মান sএই সংজ্ঞাটি সন্তুষ্ট না করে তবে 0ফলাফল।

f তারপরে অনুসন্ধান করে কাজ করে s এটি সন্তুষ্ট করতে কোনও উপাদান এবং 0এটি একটি ডিফল্ট হিসাবে ব্যবহার করে ।

* যদিও আমি এটি ব্যবহার করছি সে কারণে তিনি এটি ব্যবহার করেননি, এবং আসলে তিনি এখনই এটিকে পরিত্রাণ পেয়েছেন


হাস্কেলকে এই গল্ফযোগ্য হতে বিরল (এবং, হাস্যকরভাবে, এখনও পঠনযোগ্য)। ভাল লাগবে।
ইসিয়া মিডোস


6

পাইথন 2, 53

lambda l:reduce(lambda a,b:sorted([a,b,0])[1],l,l[0])

ধারণাটি হ'ল reduceদুটি ইনপুট মিনিট-মোড অনুসন্ধানকারীকে একটি ইনপুট nরূপান্তর করতে। অন্যান্য উত্তরগুলি যে এটি ব্যবহার করে আমি স্বাধীনভাবে এটি নিয়ে এসেছি। কেবল পাইথন 2 সমর্থন করেreduce

দ্বি-ইনপুট সমাধানটি কেবল দুটি সংখ্যা এবং শূন্যের মাঝারি সন্ধান করে। মধ্যমাটি ব্যবহারের আরও সরাসরি উপায়ে আমার গণিতের উত্তরটি দেখুন ।

কম গল্ফড:

def f(l):
 A=l[0]
 for x in l:A=sorted([a,b,0])[1]
 return A

পাইথন 2 এবং পাইথন 3 একটি প্রকল্পিত সংমিশ্রণ পাইথন 3 এবং থেকে তারকাচিহ্নিত নিয়োগ দিয়ে একটি অক্ষর খাটো, হবে input()এবং printপাইথন 2 থেকে।

#Not real code!
A,*l=input()
for x in l:A=sorted([A,x,0])[1]
print A

পুরানো কোড, বাছাই ছাড়াই:

lambda l:reduce(lambda a,b:[a,b][a*a>b*b]*(a*b>0),l,l[0])

এইচএম, হ্যাঁ, আমি এর মধ্যে সেই পার্শ্ব-প্রতিক্রিয়াটি লক্ষ্য করেছি, তবে আমার মনে হচ্ছে এখনই এটি ঠিক করতে খুব দেরি হয়ে গেছে। ম্যাথামেটিকার Medianযদিও একটি বিল্ট-ইন রয়েছে ।
মার্টিন এন্ডার

আপনার পরবর্তী পদ্ধতিটি এখন বৈধ।
মার্টিন এন্ডার

6

মার্বেলস, 210 বাইট

@0
00
]]\\&002
/\..//&0@0
00..02
MMMMMM//\\
:M
}0}1}0}1}0}1}0}2..}2
^7^7||||&0&1&4<3&0=2{>
EqalLteq{0{<{<<2&1--
&2..&3..}100..&2\/{>
>0&6=0&4&5&6..\/
&3..&5\/{<{0
\/..\/
:|
}000}0
&0Subt
{0&1
}0{0
^7
=0&1
&0
\/

এখানে তিনটি বোর্ড ব্যবহৃত হয়।

|বোর্ড ( Abপাঠযোগ্য সংস্করণে) (, নয়তো পাস মার্বেল বা শূন্য বিয়োগ পাস মার্বেল ফিরে হিসাবে Marbelous সমস্ত গাণিতিক স্বাক্ষরবিহীন হয়) একটি মার্বেল পরম মান সময় লাগে।

Mবোর্ড (Minabs খুঁজে বের করে এবং বাম পারেন প্রথম বা দ্বিতীয় মার্বেল পাস (যেটা একটি ছোট পরম মান আছে), এবং যদি একটি ভিন্ন স্বাক্ষরিত মার্বেল পাস করা হয়েছে থেকে প্রস্থান করার জন্য আউটপুট পাঠযোগ্য সংস্করণে)।

Mবোর্ড এছাড়াও মার্বেল নিম্নগামী পরিবর্তে leftward এটা ঝুলিতে প্রকাশ একবার stdin থেকে শেষ অক্ষর পেয়েছে।

Mবোর্ড যেকোনো দেওয়া সময়ে সমস্ত পরীক্ষিত মূল্যবোধের minmod সঞ্চয় করতে যেমন যা পরে ফিরে deflected হয় মান leftward সংরক্ষিত করা, রিলিজ প্রধান বোর্ড ব্যবহার করা হয়।

ট্র্যাশবিনগুলি ( \/) কেবলমাত্র সিঙ্ক্রোনাইজারের অধীনে রাখা হয়েছিল যা অন্যথায় STDIN- এ মুদ্রিত হবে।

ইনপুট / আউটপুট STDIN / STDOUT ব্যবহার করে। উভয়ই 8-বিট মানগুলির সাথে চুক্তি করে (আপনি যদি + 0x30 এবং + 0x38, STDIN- এ স্থান 08দিতে চান)।

গ্রন্থাগারগুলি এবং নলাকার বোর্ড উভয়ই প্রয়োজনীয়। দশমিক সংখ্যার হিসাবে আউটপুট দেখার প্রস্তাব দেওয়া হয় (নোট করুন এটি মিনিমড ফলাফলের স্বাক্ষরিত মানটি প্রদর্শন করে)।

এটি এখানে পরীক্ষা করুন।

নোট: মানবিক বান্ধব ইনপুট / আউটপুট জন্য, যোগ Dpপ্রধান বোর্ড (আগে শেষ লাইন অধীনে :M,) প্রতিস্থাপন ]]সঙ্গে Rd, এবং নীচে নিম্নলিখিত যোগ করুন:

:Rd
}0}0}0
]]]]]]{>
-O-O-O
-O-O-O
*A
Plus
\\*A
..Plus
..{0
:*A
}0}0
<<<<
<<
<<
Plus
{0

এটি কেবল আউটপুটটিকে 3 দশমিক অঙ্কে পরিবর্তন করে। তেমনি, এই পরিবর্তনগুলির সাথে ইনপুটটির জন্য প্রতি সংখ্যা অনুসারে 3 দশমিক অঙ্কের একটি স্থান পৃথকীকরণের তালিকা প্রয়োজন।

পঠনযোগ্য সংস্করণ:

বোর্ড ছবি


5

হাস্কেল, 83 40 39 বাইট

এটি সম্ভবত সবচেয়ে সংক্ষিপ্ততম হাস্কেল সমাধান নয় (এবং অবশ্যই এখানে অন্যদের পরাজিত করবে না), তবে এটি একটি শুরু। সম্পাদনা: এখন 50% এরও বেশি খাটো! সম্পাদনা 2: এক বাইট কম ...

a#b|a*b<0=0|a*a<b*b=a|1<2=b
m=foldr1(#)

বাইনারি অপারেটরের দ্বারা এটি কেবল একটি সরল ভাঁজ (বা হ্রাস করুন, যেমন বাইনারি অপারেটর) , এবং এর #মধ্যককে গণনা করে । যদিও নিয়মগুলি এখন আমাকে ছোট তালিকাগুলি বাছাইয়ের অনুমতি দেবে, এটির জন্য হাস্কেলের একটি আমদানি প্রয়োজন এবং এর ফলে উচ্চতর বাইট গণনা ( 49 বাইট, তবে 31 আমদানি ছাড়াই) হয়:ab0

import Data.List
a#b=sort[a,b,0]!!1
m=foldr1(#)

\a-> (signum a,a)signum>>=(,)ফাংশন মোনাড উদাহরণ ব্যবহার করার মতোই । ("
হাসকেলে

টিপটির জন্য ধন্যবাদ, কিন্তু এখন এটি চালাচ্ছে। :)
জাগারব

@ জাগারব আহ ঠিক আছে
অপ্টিমাইজার

5

টিআইএস -100, 696 526 বাইট

@1
MOV UP ACC
SAV
ADD 999
JEZ A
SWP
MOV 1 ANY
MOV ACC ANY
JRO -7
A:MOV 12 ANY
@5
S:JRO UP
MOV UP ACC
JLZ A
JEZ B
MOV 1 DOWN
JMP B
A:MOV 7 DOWN
NEG
B:MOV 1 RIGHT
MOV ACC RIGHT
MOV ACC RIGHT
JMP S
MOV 14 DOWN
MOV 9 RIGHT
@6
MOV 999 ACC
L:JRO LEFT
SAV
SUB ANY
JGZ A
MOV ANY NIL
SWP
JMP L
A:MOV ANY ACC
JMP L
MOV ACC ANY
@9
S:JRO UP
JEZ A
SUB 1
JEZ A
JMP X
A:MOV 1 ACC
JMP S
JEZ B
SUB 2
JEZ B
X:MOV 6 ACC
JMP S
B:MOV 2 ACC
JMP S
MOV ACC ANY
@10
MOV LEFT ACC
ADD 1
JRO ACC
JRO 6
MOV UP ANY
MOV UP ACC
NEG
MOV ACC ANY
!NOP
MOV 0 ANY

ক্রমটি শেষ হয়ে যাওয়ার আশা করে -999। টিআইএস -100 এই প্রশ্নের চেয়ে নতুন তবে এটি এখানে যেমন হয় তেমন পছন্দ করে না।

নোড 9 আমরা সবাই ইতিবাচক, সমস্ত নেতিবাচক বা মিশ্র কিনা তা নজর রাখে। নোড 5 এবং 6 সমস্ত ইনপুট সংখ্যার পরম মানের সর্বনিম্ন সন্ধান করতে কাজ করে। নোড 10 এর পরে নোড 9 এর অবস্থার উপর নির্ভর করে সর্বনিম্ন, সর্বনিম্ন অবহেলিত বা 0 টি নির্বাচন করে।

এখানে চিত্র বর্ণনা লিখুন


আমি টিআইওর জন্য একটি টিআইএস এমুলেটর কার্যকর করেছি, তাই আপনি এখন অনলাইনে চেষ্টা
ফিলারেক্স

4

সিজেএম, 20 বাইট (বা 10 বাইট)

q~{]__~z\z<=\~*0>*}*

@ Xnor এর পদ্ধতির ব্যবহার করে অ্যারে থেকে একবারে 2 সংখ্যার মিনিমড গণনা হ্রাস করুন।

এটি :zকাজ করলে 19 বাইট হত


সংক্ষিপ্ত অ্যারেগুলিতে প্রকারের নতুন নিয়ম ব্যবহার করে:

q~{0]$1=}*

যা @ পিটারের উত্তরের ঠিক সমান


পূর্ববর্তী 26 বাইট asnwer:

q~_{g}%_|:+\(z\{za+_~>=}/*

এটি আরও গল্ফ করা যেতে পারে ...

ইনপুট (STDIN এর মাধ্যমে) এর মতো পূর্ণসংখ্যা অ্যারে:

[-4 -2 -3 -2]

এবং আউটপুট হ'ল ইনপুট অ্যারের মিনিমোড

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

যদি কেবল :gএবং :zকাজ করা হয় তবে এটি 4 বাইট সংক্ষিপ্ত হত।


25 বাইট: q~_{g}%_|:+\{z\za+_~>=}**
জিমি 23013

একক int অ্যারে ব্যর্থ। আমি এটিও চেষ্টা করেছিলাম :)
অপ্টিমাইজার 17

যদিও সেখানে একটি 26 বাইট সমাধান রয়েছে। তার জন্য ধন্যবাদ :)
অপ্টিমাইজার 17

4

জাভা, 84 বাইট

এটি সমস্ত গৌরবে জাভা। গল্ফস্ক্রিপ্টকে 900% এর কিছু বেশি ফ্যাক্টর দ্বারা বিট করে।

int f(int[]a){int b=a[0],c;for(int d:a)b=(c=d<0?-1:1)*b<0?0:d*c<b*c?d:b;return b;}

ক্লাসে আবৃত:

public class MinModGolfed{

    public static void main(String[] args){
        int[] numbers = new int[args.length];
        for (int i = 0; i < args.length; i++){
            numbers[i] = Integer.parseInt(args[i]);
        }
        System.out.println(new MinModGolfed().f(numbers));
    }

    int f(int[]a){int b=a[0],c;for(int d:a)b=(c=d<0?-1:1)*b<0?0:d*c<b*c?d:b;return b;}

}

মন্তব্য সহ প্রসারিত:

public class MinModExpandedGolfed{

    public static void main(String[] args){
        int[] numbers = new int[args.length];
        for (int i = 0; i < args.length; i++){
            numbers[i] = Integer.parseInt(args[i]);
        }
        System.out.println(new MinModExpandedGolfed().f(numbers));
    }

    int f(int[]a){                  //a is the input numbers
        int b=a[0],c;             //b is the best number found so far.
        for(int d:a)               //Iterate over a with current element as d.
            b=(c=d<0?-1:1)         //c is equal to the sign of d.
                    *b<0?
                        0:          //If b has opposite sign of d, b = 0.
                        d*c<b*c?d:b;//If the absolute value of d is less than b, b = d. 
        return b;
    }

}

দ্রষ্টব্য: জাভা 8 ব্যবহার করে এটি উন্নত করা যেতে পারে।

দ্রষ্টব্য: জাভা 8-তে উন্নতি করার প্রচেষ্টা ব্যর্থ হয়েছে।


আমার এখনও অনেক কিছু শেখার আছে। +1 টি।
রোডল্ফো ডায়াস

4

জে, 20 12 বাইট

যুক্তি হিসাবে তালিকা গ্রহণ ফাংশন। গল্ফস্ক্রিপ্ট / সিজেএম / যাই হোক না কেন থেকে চুরি হয়ে গেছে।

(1{0/:~@,,)/

এর minmod xএবং yমধ্যমা আছে (সাজানোর /:~ও মাধ্যমিক নেওয়া 1{) তিন আইটেমটি তালিকার 0,x,y। সংলগ্ন উপাদানগুলির মধ্যে এই মিনিমডটি নিয়ে তালিকাটি ( জে পার্লেন্সে ভাঁজ করে) হ্রাস করুন ।

আরপিএল-এ ব্যবহৃত In (জে তার নেতিবাচক চিহ্নটি বানান _।)

   (1{0/:~@,,)/ _4 _2 _3 _2
_2
   f =: (1{0/:~@,,)/    NB. give it a name
   f 1 1 2
1
   f 0 1 2
0
   f _1 1 2
0

প্রাচীন আবর্জনা, আগে আমি লক্ষ্য সংক্ষিপ্ত প্রকারের অনুমোদিত: 0:`<.`>.@.(*@]*0<*))/এর minmod xএবং y0 ( 0:যদি 0 থেকে বেশি হয় বা গুণফল সমান) xএবংy , অন্যথায় এটা মিনিটের জন্য (নয় <.) অথবা MAX ( >.) মধ্যে xএবং yনিদর্শন উপর নির্ভর করে । পুরো তালিকা জুড়ে এটি ভাঁজ করুন।


4

টিআই-বেসিক, 19 বাইট

বিন্যাসে ইনপুট ধরে {-2,4,3}

এক্সনরের উত্তরের অনুরূপ কাজ করে:

Input L₁              get user input into the L1 array
dim(L₁)2-1→dim(L₁     get the length of the array; multiply by 2 and subtract 1
                      make this the new length (new elements always default to 0)
median(L₁             calculate and return (since it's the last line) median of new array

3
কোড আকারের গণনা করার আকর্ষণীয় উপায় ...
Ypnypn


আমার কোড, পাশাপাশি median(augment(Ans,0ΔList(Ansকেবল আটটি বাইটে, মাত্রার একের তালিকায় ব্যর্থ। If variance(Ans:augment(Ans,0ΔList(Ans:median(Ansতোমার চেয়ে লম্বা যদি কেবল টিআই-বেসিক খালি তালিকাগুলি সমর্থন করে ...
লিটারোসিয়াস্ট

তুমি ঠিক. দেখে মনে হচ্ছে এটি 12 থেকে 15 বাইটের মধ্যে আমার কোডের আকারটিকে বাধা দেয়।
টিমটেক

আমি আপনি ঠিক অনুমান. সেখানে +4 বাইট।
টিমটেক

3

পাইথন 2, 82 79 71 69 61 বাইট

lambda l:reduce(lambda G,H:[H,G][(G>H)^(G>0)]*(G*H>0),l,l[0])

এটা আমার pyth উত্তর, যার দ্বারা অনুপ্রাণিত হয় বন্ধ ভিত্তি করে মিগ এর উত্তর।


পুরানো উত্তর:

l=input()
m=l[0]
k=1-2*(m<0)
for i in l:m=[m,i][m>i*k]
print(k*m>0)*m

এটি একটি দীর্ঘ দীর্ঘ উত্তর। আমার মনে হচ্ছে 2 টি ভেরিয়েবল থাকা অপচয় হ'ল ...? আমি সঠিক ছিলাম...? পর? ; p &


3

KDB / Q, ফাংশন বডি সংজ্ঞা জন্য 43 টি অক্ষর characters

পূর্ববর্তী পোস্টগুলি থেকে দুর্দান্ত ধারণা ধন্যবাদ:

f:{$[all 1_0<(*':)x;{$[<[x*x;y*y];x;y]}/[x];0]}

তালিকাভুক্তি ব্যবহার করে একক সংখ্যা লিখুন

f[enlist 2]
f[enlist 0]
f[enlist -2]
f[2 4 1]
f[0 1 2]
f[1 0 2]
f[-1 1 2]
f[-4 -2 -3 -2]
f[-5 0 -1]
f[-5 -0 -1]
f[1 0 -1]

আমি নিশ্চিত যে কোনও কিউ গুরু আরও সংক্ষিপ্ত আকারে আসতে পারেন।


সম্ভবত কিছু {asc[0,x,y]1}/?
অ্যালগরিদমশর্ক

3

পাইথ, 25 22 20 12

uhtS[0GH)QhQ

সম্ভবত উপন্যাস নয়, মূল: পি


প্রাক-বাছাই অনুমোদিত

u*?Gx>GH>G0H>*GHZQhQ

Pyth

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

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

ব্যাখ্যা:

Q=eval(input)         : implicit
u                QhQ  : print reduce(lambda G,H: ..., Q, Q[0])
 *          >*GHZ     : ... * (G*H>0)
  ?G       H          : G if ... else H
    x>GH>G0           : G>H xor G>0

দরকার নেই tQQএছাড়াও কাজ করবে
অপ্টিমাইজার

একদম ঠিক! আমি আরও মনে করি যে আমি এর ?জন্য একটি মুছে ফেলতে পারি *...
FryAmTheEggman

3

সি #, 101 বাইট

কোড গল্ফিং এবং একটি সুন্দর গল্ফিং প্রতিকূল ভাষায় আমার প্রথম চেষ্টা। হ্রাস ( Aggregateলিনকিউতে) এর ভিত্তিতে এবং মিগের জাভাস্ক্রিপ্ট উত্তরের সাথে খুব মিল । এর মতো চালানো যায় (new System.Linq.M()).m(new[] {1, 2, 3})। সমস্ত পরীক্ষার ক্ষেত্রে পাস করে তবে খালি ইনপুট অ্যারেগুলি পরিচালনা করে না।

namespace System.Linq{class M{public int m(int[]i){return i.Aggregate((a,b)=>a*b>0?a*a<b*b?a:b:0);}}}

1
খালি ইনপুট হ্যান্ডেল করার দরকার নেই, কারণ আমি এমনকি সেই ক্ষেত্রে ফাংশনটি সংজ্ঞায়িতও করি নি।
মার্টিন ইন্ডার


2

গেম মেকার ল্যাঙ্গুয়েজ, 489 বাইট

গেম মেকার ল্যাঙ্গুয়েজ সম্পর্কে

অ্যারে রিফ্লস (শূন্যগুলি সংযোজন করা হয়েছে) এবং মিডিয়ানটিকে ফিরিয়ে দেয় (আমার অন্যান্য উত্তরের মতো)

i=0a=argument0
while(variable_local_array_get(a,i))i++
for(j=0;j++;j<i-1)a[j+i]=0var i,j,d,m=0d=ds_list_create()if variable_local_exists(a){if variable_local_array_get(a,0){for(i=0;i<32000;i++){if variable_local_array_get(a,i)=0break
ds_list_add(d,variable_local_array_get(a,i))}ds_list_sort(d,0)i=ds_list_find_value(d,ds_list_size(d) div 2)j=ds_list_find_value(d,(ds_list_size(d) div 2)-1)m=ds_list_find_value(ds,ds_list_size(d) mod 2)ds_list_destroy(d)}if m return (i+j)/2return i
break}

@ মার্টিনব্যাটনার প্রথম ২.৫ লাইন রিফলটি সম্পাদন করে এবং বাকীটি মধ্যমকে খুঁজে বের করে। 32000হিসাবে সফ্টওয়্যার দ্বারা সীমাবদ্ধ অ্যারের সর্বোচ্চ আকার।
টিমটেক

@ মার্টিনবাটনার হ্যাঁ, মধ্যভাগের মধ্যে পুরো তালিকাটি বাছাই করা হয়নি।
টিমটেক

@ মার্টিনব্যাটনার এটি প্রতিটি পুনরাবৃত্তির অনুসারে বাছাই করা হয় ... তাই 3
টিমটেক

ও আচ্ছা. এই কোডটি এমন শব্দযুক্ত ভাষার জন্য আশ্চর্যরকমভাবে পড়া শক্ত। ^^
মার্টিন এন্ডার

@ মার্টিনব্যাটনার গল্ফিংয়ের জন্য এটি বেশ ভাল (খুব শিথিল বাক্য গঠন) তবে এতে অনেকগুলি স্ট্যান্ডার্ড বিল্ট-ইন ফাংশন নেই (এটি হয় খেলা নকশা প্রতি ভিত্তিক)।
টিমটেক

2

জাভা, 353 304 124 বাইট

বিশ্বের সবচেয়ে খারাপ গল্ফারের সাথে কোড গল্ফের জন্য সবচেয়ে খারাপ ভাষা একসাথে রাখুন এবং আপনি পান ...

int m(int[]a){int m=a[0];if(m<0)for(int i:a){m=(i>m)?i:m;m=(i>0)?0:m;}else for(int i:a){m=(i<m)?i:m;m=(i<0)?0:m;}return m;}}

এটি উনগল্ফ এবং আপনি পাবেন:

int m(int[] a) {
    int m = a[0];
    if (m < 0) {
        for (int i : a) {
            m = (i > m) ? i : m;
            m = (i > 0) ? 0 : m;
        }
    } else {
        for (int i : a) {
            m = (i < m) ? i : m;
            m = (i < 0) ? 0 : m;
        }
    }
    return m;
}

এটি এমন একটি ফাংশন (যদি এটি খুব জঘন্য স্পষ্ট না হয়) যা সংখ্যার একটি অ্যারে গ্রহণ করে এবং এর মানগুলি প্রক্রিয়া করে, মিনিমড মানটি ফেরত দেয়।

আমার একাকীকরণের পুরানো নীচেও অন্তর্ভুক্ত রয়েছে, যা পুরো প্রোগ্রাম - বরাবরের মতো।

class M{public static void main(String[]a){java.util.Scanner s=new java.util.Scanner(System.in);int n,m=0;try{m=s.nextInt();if(m<0)while(true){n=s.nextInt();m=(n>m)?n:m;m=(n>0)?0:m;}else while(true){n=s.nextInt();m=(n<m)?n:m;m=(n<0)?0:m;}}catch(java.util.InputMismatchException e){System.out.print(m);}}}

এটি উনগল্ফ এবং আপনি পাবেন:

class M {

    public static void main(String[] a) {
        java.util.Scanner s = new java.util.Scanner(System.in);
        int n = 0, m = 0;
        try {
            m = s.nextInt();
            if (m < 0) {
                do {
                    n = s.nextInt();
                    m = (n > m) ? n : m;
                    m = (n > 0) ? 0 : m;
                } while (true);
            } else {
                do {
                    n = s.nextInt();
                    m = (n < m) ? n : m;
                    m = (n < 0) ? 0 : m;
                } while (true);
            }
        } catch (java.util.InputMismatchException e) {
            System.out.print(m);
        }
    }
}

অসীম সংখ্যা প্রাপ্ত করে, নন-মানটি প্রবেশ করানো বন্ধ হয়ে যায়, মিনমন মানটি উপস্থাপন করে।


আপনার কোডটি প্রথম মানটিকে প্রত্যাখ্যান করে বলে মনে হচ্ছে, সুতরাং এটি উদাহরণ হিসাবে ভুল উত্তর দেবে 1 2 3। আপনি উপেক্ষা করছেন বলে মনে হয় যে আপনি একটি ফাংশন লিখতে পারেন যা স্টাডিন থেকে পড়া প্রোগ্রামের চেয়ে তার তর্কগুলি প্রসেস করে।
পিটার টেলর 16

@ পিটারটেলর নির্বোধ, আমার প্রথম প্রবৃত্তি সর্বদা একটি সম্পূর্ণ প্রোগ্রাম লিখতে হয় এমনকি যদি বলা হয় যে এটি কোনও ফাংশন হতে পারে। এই বাগ সম্পর্কে, স্পষ্টতই আমি এটির যথেষ্ট পরীক্ষা করিনি, ইঁদুর। এটি এখনই সংশোধন করার চেষ্টা করবে - এবং কেবলমাত্র একটি ফাংশন সংস্করণও তৈরি করবে ...
রোডলফো ডায়াস

2

আর, 20 টি অক্ষর

আর কোডগল্ফের পক্ষে সাধারণত ভাল হয় না তবে আমি এটি আমার কাজের জন্য ব্যবহার করি তাই আমি চেষ্টা করতে চাই। আমি চেষ্টা করার আগে, আমি জানতাম না যে আর এমন নোংরা সিনট্যাক্স গ্রহণ করতে রাজি! :-) ৫২ টি চর :

if((q=summary(x))[6]<0)q[6]else if(q[1]>0)q[1]else 0

তারপরে আমি অন্যান্য উত্তরগুলি দেখেছি আমি @ xnor এর জেনিয়াল মিডিয়ান ট্রিকটি চেষ্টা করেছি, যা দুর্দান্ত!

median(c(x-x,x)[-1])

আপনার প্রথম সংস্করণটি কীভাবে কাজ করবে? কি করে summary? হয় q[1]এবং q[6]সর্বনিম্ন ও সর্বোচ্চ যথাক্রমে? সেক্ষেত্রে এটি বৈধ নয়, কারণ আপনি অন্তর্নির্মিত মিনিট / সর্বোচ্চ ব্যবহার করতে পারবেন না।
মার্টিন এন্ডার

@ মার্টিনব্যাটনার এটি মূলত কোয়ান্টাইলের ভেক্টর এবং একটি গড় সরবরাহ করে। 1 এবং 6 0 এবং 1 কোয়ান্টাইল হয়। আমি আপনার বিধি অনুসারে অন্তর্নির্মিত মিনিট / সর্বাধিক ফাংশনটি ব্যবহার করিনি।
টমাস

2

পাইথন, 52

আমি এখনও দু'টি থাকা খারাপ বলে অনুভব করতে সাহায্য করতে পারি না lambda। এই ফাংশনটি একটি তালিকা গ্রহণ করে এবং তারপরে ফলাফল যুক্ত একটি উপাদান উপাদান তালিকা দেয়।

f=lambda a:a[1:]and[sorted([a.pop(),0]+f(a))[1]]or a

আশা করা যায়, এটি এক-মৌলিক তালিকার ফলাফলের জন্য প্রচুর পরিমাণে অপরাধ ঘটাবে না।


1

মতলব / অক্টোব, 26

এটি মূলত কেবল একটি অনুবাদ xnor দ্বারা গণিতের উত্তরের । এটি ইনপুট ভেক্টরের দৈর্ঘ্যের চেয়ে কম একটি জিরো যুক্ত করে কাজ করে। মনে রাখবেন যে আরও একটি যুক্ত করা কার্যকর হবে না, তার পর থেকে ফলাফল সর্বদা 0 হবে। এই সমাধানের -4 অক্ষরের জন্য মার্টিনব্যাটনারকে ধন্যবাদ =)

@(x)median([x,0*x(2:end)])

@ মার্টিনবাটনার আপনি একেবারে ঠিক বলেছেন। আমি এখন এটি পরিবর্তন করেছি: প্রোগ্রামটি ইনপুটটির চেয়ে এক শূন্য কম সংযোজন করবে। এই উপায়ে এটি নিশ্চিত করা হয় যে আমাদের কাছে সর্বদা একটি অদ্ভুত সংখ্যক উপাদান রয়েছে এবং মিডিয়ানরা বাকী অংশগুলির যত্ন নেয়।
flawr

বা আপনার পূর্ববর্তী সমাধান থেকে সর্বশেষ 0 টি পপ করুন।
অপ্টিমাইজার 13

@ মার্টিনবাটনার ধন্যবাদ, অবশ্যই এটি আরও ভাল। @ অপ্টিমাইজার আপনি কীভাবে এটি করবেন?
flawr

আমার কোন ধারণা নাই. আমি ভেবেছিলাম একটি উপায় কেবল শেষ উপাদান বন্ধ পপ, ভালো কিছু হতে হবে @(x)median([0*x,x](2:end))। যদিও মনে হয় এটি এখনকার মতো একই বাইটস।
অপ্টিমাইজার 14

@ অপ্টিমাইজার আমি ইতিমধ্যে ভেবেছিলাম যে আমি মতলব এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্যটি মিস করেছি =) এটি খুব খারাপ যে আপনার প্রস্তাবিত স্বরলিপিটি কাজ করে না, এটি কখনও কখনও সত্যই কার্যকর হবে!
flawr

1

পাইথন, 72 60 বাইট

এটি আমিই প্রথম সমাধানটি ভেবেছিলাম এবং এটি বেশ নির্বোধ। দ্বিতীয়ার্ধটি মূলত কোডের প্রথমার্ধের একটি সদৃশ, তবে কীভাবে এটি পাতলা যায় তা আমি নিশ্চিত ছিলাম না। আমি ভাবছি এটি ব্যবহার করে যদি ছোট করা যায় eval...

সম্পাদনা করুন: ল্যাম্বডাসকে বোঝার জন্য পরিবর্তন করা হয়েছে।

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

lambda l:min(l)*all(x>0for x in l)+max(l)*all(x<0for x in l)

এটি কেবল 4 টি চর বেশি, তবে এসপি 3000 টিআইপি ব্যবহার করে এখনও দেখার মতো ।

lambda l:eval("+m%s%s(l)*all(x%s0for x in l)"*2%tuple("ax<in>"))

1

জাভাস্ক্রিপ্ট, 63

a=>a.reduce((p,c)=>p<0?c<0?Math.max(p,c):0:c>0?Math.min(p,c):0)

আরও পঠনযোগ্য সংস্করণ:

function (arr) {
    return arr.reduce(function (p, c) {
        if (p < 0) {
            if (c < 0) {
                return Math.max(p, c);
            } else {
                return 0;
            }
        } else {
            if (c > 0) {
                return Math.min(p, c);
            } else {
                return 0;
            }
        }
    });
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.