উদ্ভট উদ্দেশ্যগুলির জন্য অদ্ভুত আনসার্টিং মেশিন


18

শুভ সন্ধ্যা গল্ফার্স!

আপনার চ্যালেঞ্জটি হ'ল সম্পূর্ণরূপে সংখ্যার ধারাবাহিক বাছাই করা।

ইনপুট

ঠিক আপনার প্রোগ্রামে 100 টি পূর্ণসংখ্যা খাওয়ানো হবে। আপনার প্রোগ্রামটি ফাইল হিসাবে অথবা স্টিডিনের মাধ্যমে ইনপুট গ্রহণ করতে পারে। প্রতিটি পূর্ণসংখ্যা একটি নিউলাইন চরিত্র দ্বারা পৃথক করা হবে।

এই 100 টি পূর্ণসংখ্যা আপনার নির্বাচিত ভাষায় স্বাক্ষরিত পূর্ণসংখ্যার সর্বনিম্ন থেকে শুরু করে সর্বাধিক মানের অবধি হবে।

কোনও সদৃশ মান থাকবে না। মানগুলি অর্ডার, অর্ডারড বা আংশিক অর্ডার করা যেতে পারে - আপনার প্রোগ্রামটি প্রতিটি কেস পরিচালনা করতে সক্ষম হবে।

আউটপুট

আউটপুট অবশ্যই 100 টি পূর্ণসংখ্যার প্রতিটি হতে হবে, সম্পূর্ণরূপে অরসেটড, প্রতিটি একটি নতুন লাইনের চরিত্র দ্বারা পৃথক। আউটপুট stdout বা একটি ফাইল হতে পারে।

সম্পূর্ণরূপে আনসোর্ট করা মানে কোনও মানই কোনও মানের সাথে সংলগ্ন নয় যা এটি তালিকাটিকে একটি ক্রম অনুসারে বাছাই করা থাকলে সংলগ্ন হবে।

স্কোর

প্রতি চরিত্রের জন্য 1 পয়েন্ট, এবং সর্বনিম্ন স্কোর জেতে। বিল্ট ইন বা লাইব্রেরি বাছাইয়ের কার্যগুলি ব্যবহার করে যে কোনও সমাধানের জন্য -100 এর বোনাস রয়েছে। এলোমেলো সংখ্যা ফাংশনে অন্তর্নির্মিত ব্যবহার না করে যে কোনও সমাধানের জন্য -20 এর বোনাস রয়েছে।

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

ফোর!


সঠিকভাবে 100 পূর্ণসংখ্যার ইনপুট রয়েছে এবং কোনও সদৃশ মান নেই ("ইনপুট" এর অধীনে দেখুন)
লোচক

ঠিক আপনি আছেন, যে স্পট না।
স্ট্রাইকয়েডস


এত চালাক সাড়া! আমি 31 অক্টোবর 8: 10-জুলুতে সংক্ষিপ্ত উত্তরটি নির্বাচন করব
lochok

উত্তর:


9

গল্ফস্ক্রিপ্ট (স্কোর 27 - 120 = -93)

~].,{{.2$<{\}*}*]}*.(;+2%n*

দ্রষ্টব্য: $এটি স্ট্যাকের কোনও উপাদানকে উল্লেখ করছে। এখানে বাছাই করা হচ্ছে, তবে এটি একটি ম্যানুয়ালি কোডেড বুদ্বুদ সাজানোর মাধ্যমে সম্পন্ন হয়েছে।

হাওয়ার্ডকে ধন্যবাদ, -90 => -92 এর জন্য; এবং ইলমারি, -92 => -93 কে অনুপ্রাণিত করেছিলেন।


এইরকম সংক্ষিপ্ত উত্তরের জন্য কৃতিত্ব, তবে (আমাকে ক্ষমা করুন, আমি গল্ফস্ক্রিপ্ট না বলে বা বুঝতে পারি না) - 100 এটি -100 বোনাস থেকে অযোগ্য ঘোষণা করবে না?
lochok

1
@ লোকোক, বিল্ট-ইন বাছাই করা ফাংশনটি $- তাই আমি উল্লেখ করেছি যে $প্রোগ্রামটিতে থাকা সারণি নয় (এটি প্রসঙ্গ নির্ভর)। প্রোগ্রামটির বেশিরভাগ অংশ (42 টির মধ্যে 28 টি) ফাংশনটি সংজ্ঞায়িত করে ^; প্রথম সংস্করণটি অন্তর্নির্মিত বাছাই করে ব্যবহার করে, কেবলমাত্র 14 টি অক্ষর।
পিটার টেলর

আহ - ঠিক আছে। স্পষ্টতার জন্য ধন্যবাদ!
lochok

1
আপনি নিম্নলিখিত আউটপুট লুপ সঙ্গে দুই অক্ষর সংরক্ষণ করতে পারেন: 2/{~p}%n*
হাওয়ার্ড

1
2/zip~+n*এবং .);\+2%n*@ হাওয়ার্ডের সংস্করণ হিসাবে একই সংখ্যক অক্ষরের জন্য কৌশলও করুন। হায়, আমি এখনও ছোট কিছু খুঁজে পেতে পরিচালিত হয়নি।
ইলমারি করোনেন

6

পাইথন -26

(94-120): নতুন, অশোধিত পদ্ধতির। উপাদানগুলি বাছাই করতে সর্বনিম্ন উপাদানগুলিকে নতুন তালিকায় পপ করতে থাকুন, তারপরে পুনরাবৃত্তি করুন:

t=l=[]
i=N=100
exec't=t+[input()];'*N+'l+=[t.pop(t.index(min(t)))];'*N+'print l[i%N];i+=3;'*N

পাইথন -13

(107-120): প্রথম পদ্ধতির: একবারে চারটি নিম্নতম উপাদান সরিয়ে দেয়, তারপরে এই চারটি অন্য ক্রমে মুদ্রণ করুন:

exec'l=[]'+'+[input()]'*100
while l:
 a,b,c,d=eval('l.pop(l.index(min(l))),'*4)
 for e in[b,d,a,c]:print e

t=l=[]এবং exec't+=[input()];'*100আপনি কয়েক অক্ষর বাঁচাতে হবে
Quasimodo

এছাড়াও, আপনি execএকাধিক লুপের জন্য একটি বিবৃতি ব্যবহার করতে পারেন ।
কাসিমোডো

@ ক্যাসিমোডো আমি এরকম কিছু চেষ্টা করেছি, তবে t=l=[]টি এবং এল পয়েন্ট দিয়ে একই বস্তুর দিকে নিয়েছি এবং এটি কার্যকর হয় না। বন্ধনী বন্ধ এড়ানো execযদিও দুর্দান্ত।
দানিরো

আপনি ব্যবহার করতে পারেন t=t+[input()];, এটি প্রতিটি সময় একটি নতুন অবজেক্ট তৈরি করে। আর তুমি এমনকি Exec বিবৃতিতে মুদ্রণ লুপ করতে পারেন: ';i+=1;print l[i*3%100]'*100
কাসিমোডো

তুমি আবার ঠিক ধন্যবাদ! এছাড়াও সরানো %3এবং পুনরাবৃত্তি এড়ানো যেমন কিছু অন্যান্য গল্ফিং যোগ করা হয়েছে 100
দানিরো

4

সি: 11 (131 - 120)

প্রোগ্রামটি স্টিডিন থেকে পড়ে এবং একটি সন্নিবেশ সাজানোর কাজটি করে, এর পরে এটি অন্যান্য সমাধানগুলির মতো অনেকগুলি এন, 50 তম সংখ্যা সহ একসাথে নবমটি প্রিন্ট করে।

main(){int*i,a[101],*j=a;while(scanf("%d",a)>0)for(i=++j;i-->a;)i[1]=*i>=*a?*i:*(i=a);while(a<(i=j-50))printf("%d\n%d\n",*i,*j--);}

3

গণিত -56 44 4 (95-120) = -25

সম্পাদনা করুন :

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

Riffle[RotateLeft[#[[All, 2]], 2], #[[All, 1]]] &
[Partition[l //. {x___, a_, b_, y___} /; b < a :> {x, b, a, y}, 2]]

হয় Sortএকটি বিল্ট-ইন না সাজানোর ফাংশন আছে?
পিটার টেলর

আপনি সঠিক! আমি বাছাইয়ের প্রতিবন্ধকতা মিস করেছি।
ডেভিডসি

আমি একটি হাতে রোলড বাছাই করেছি।
ডেভিডসি

3

জে, -63 (57-120) অক্ষর

যেহেতু অন্য প্রত্যেকে স্ব-লিখিত বাছাইয়ের পথে নামছে ...

,50(}.,.{.)($:@([-.m),~m=.]#~]=<./)^:(0<#),".[;._2[1!:1[3

কোনও এলোমেলো সংখ্যা ক্রিয়া ব্যবহার করে না, বা কোনও বিল্ট-ইন বাছাইও করে না।

ইনপুটটি বাছাই করতে একটি সাধারণ পুনরাবৃত্তির নির্বাচনের সাজ্টর ব্যবহার করে।


3

রুবি 1.9, -59

(61-120)

Recursion! এইটি আসলে আমার আগের রুবির প্রয়াসের মতো নয়, তালিকাকে তাদের মূল ক্রম নির্বিশেষে বাছাই করুন।

p *(f=->l{l[1]&&f[l-m=l.minmax]+m||[]})[$<.map &:to_i].rotate

পূর্ববর্তী প্রচেষ্টা

বুদ্ধিমান ওয়ান-লাইনার, এখন সঠিকভাবে কাজ করার জন্য বিল্টিন সাজান ব্যবহার করে:

$<.map(&:to_i).sort.each_slice(4){|a,b,c,d|p b,d,a,c}

প্রথমটি - সর্বশেষ 4 টি মানগুলি অকার্যকরভাবে করা হয়নি:

l=$<.map &:to_i
48.times{l-=p *l.minmax}
a,b,c,d=l
p b,d,a,c

1
আপনার -72 সমাধানটি তালিকা অনুসারে বাছাই শুরু হবে বলে মনে হচ্ছে, এটি কেস নয়।
হিস্টোক্র্যাট

উফ। দেখে মনে হচ্ছে আমি যখন এইটির পুনর্বিবেচনা করেছি তখন আমি পুনরায় প্রশ্নটি পুনরায় পড়িনি। অন্য কিছু নিয়ে আসার চেষ্টা করবে।
দানিরো

@ ইতিহাসবিদ যে এটি করা উচিত।
ডানিরো

1

পাইথন 2: 90 চর

n=100
s=sorted(int(raw_input())for i in range(n))
for i in range(n):print s[(4*i+4*i/n)%n]

অলস প্রচেষ্টা কিন্তু মাত্র শুরুদের জন্য


1

পাইথন 48 = (148 - 100)

from random import*
x=[input()for i in range(100)]
while any(abs(x[i]-x[i+1])>1 for i in range(99)):n=randint(1,99);x=x[n:]+x[:n]
for j in x:print j

এটি পরীক্ষা করা হয়নি কারণ এটি কোনও যুক্তিসঙ্গত পরিমাণে চালানোর গ্যারান্টিযুক্ত (বা সম্ভবত) নয়, তবে অসীম সময় প্রদত্ত তত্ত্বে কাজ করা উচিত।


1
x=map(input,['']*100)
ugoren

এবং আমি মনে করি না আপনার এমনকি অতিরিক্ত []গুলি প্রয়োজন , কেবল কোনও একক অক্ষরের স্ট্রিং।
কাজ

1

পাইথন 27 (147 - 100 - 20)

R=range
def S(L):
 for i in R(len(L)-1):
    if L[i]>L[i+1]:L[i:i+2]=[L[i+1],L[i]];S(L)
a=map(input,['']*100);S(a)
for i in R(100):print a[i/2+i%2*50]

দ্রষ্টব্য: আগের স্পেসগুলি if L[i]>...একটি ট্যাব হওয়া উচিত তবে স্পষ্টত কোনও কোড ব্লকের ফাঁকা স্থান হিসাবে প্রদর্শিত হবে।


আপনার সাথে R=range5 টি অক্ষর বাঁচাতে পারে।
স্কিলেভার

a=map(input,['']*100)
ugoren

1

পার্ল 5: 95 - 120 = -25 অক্ষর

নিম্নলিখিত কমান্ড লাইন গণনা:

perl -ne '$n=$_;splice@n,(grep{$n[$_]>$n}0..@n),0,$n}{print for map{@n[$_,$#n/2+$_+1]}0..$#n/2'

1

রুবি: -50 (70 টি চর - 120)

আমি অন্যান্য অনেক উত্তরের মতোই করেছি: পুনরাবৃত্তভাবে ইনপুট তালিকা থেকে সর্বাধিক এবং মিনিট সরিয়ে ফেলুন এবং সেগুলি আউটপুটে যুক্ত করুন। যাইহোক, আমি বুঝতে পেরেছি যে যদি মাঝের উভয় পাশের 2 নম্বরগুলি নিজেরাই ধারাবাহিকভাবে থাকে তবে আউটপুটটি ভুল হবে (কারণ আউটপুট শেষে এই 2 টি ধারাবাহিক সংখ্যা একসাথে উপস্থিত হবে)। এটি ঠিক করতে, আমি ঠিক 1 উপাদান দ্বারা "অরসোর্টড" তালিকা ঘোরান:

n=$*.map &:to_i;u=[];50.times{u+=n.minmax;n-=u.last 2};p *u.rotate(-1)

বা, ইচ্ছামত অনেক ইনপুট (আরও 4 টি অক্ষর ব্যবহার করে) নিয়ে কাজ করতে:

n=$*.map &:to_i;u=[];(u+=n.minmax;n-=u.last 2)while n.any?;p *u.rotate(-1)

দ্রষ্টব্য: কিছু কম-চর রুবি উত্তর ইতিমধ্যে পোস্ট করা হয়েছে, তবে সেই সমাধানগুলি মধ্যবর্তী সমস্যাটির সমাধান করে না (এবং / অথবা একটি সাজানো ইনপুট তালিকা ধরেছে)।


1

জে 37 - 100 = -63

({~?~@#)^:(+./@(1=|)@(2&(-/\))@/:)^:_

কোনও ধরণের ব্যবহার করে না (যদিও র‌্যাঙ্ক আপ ব্যবহার করে) এলোমেলো সংখ্যা ব্যবহার করে।

ব্যাখ্যা:

({~?~@#)             NB. Randomizes the array
^: foobar ^:_        NB. as long as
foo =: +./@(1 = |)   NB. as any 1 == absolute value of
bar =: (2&(-/\))@/:  NB. differences between adjacent ranks
foobar =: foo@bar

1

ব্র্যাচল্যাগ , 22 বাইট - 120 = -98

ṇịᵐpX¬{p≤₁s₂.&s₂p}∧Xẉᵐ

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

টিআইও লিঙ্কটিতে কেবল একশ না হয়ে আটটি পূর্ণসংখ্যার ইনপুট রয়েছে কারণ এটি এত ভয়াবহভাবে ধীর যে এটি 60 সেকেন্ডের মধ্যে আর হ্যান্ডেল করতে পারে না। এর কারণ হ'ল, অন্যান্য বিষয়গুলির মধ্যে, বাধ্যতামূলক বোনাসের জন্য কিছু সাধারণ তবে সাধারণ বাছাই করা অ্যালগরিদমকে বাস্তবায়ন করার পরিবর্তে আমি ব্রেভিটির জন্য ব্যবহার করি যা একটি ডিস্ট্রিমেন্টিক বোগোসর্টের পরিমাণ হিসাবে:p≤₁ প্রতিটি ব্যাকট্র্যাক করে যতক্ষণ না এটি পাওয়া যায় যা হ্রাস পাচ্ছে না। যদিও এর আরও বড় কারণ সম্ভবত এটি হতে পারে যে এটি আউটপুটটি সন্ধান করতে অনুরূপ ডিগ্রি নিয়োগ করে, এবং এটি প্রতিবার সাজানো সংস্করণ পুনরুদ্ধার করে ... আমি এটি 100 মাপের প্রকৃত ইনপুটটিতে পরীক্ষা করার চেষ্টা করেছি, কিন্তু আমি ঠিক কত দিন লাগবে তা নিশ্চিত নয়।

সামগ্রিক উন্নত সংস্করণ:

ব্র্যাচল্যাগ , 14 বাইট - 20 = -6

p.¬{os₂.&s₂p}∧

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

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

 .                The output is
p                 a permutation of
                  the input
  ¬{        }∧    such that it cannot be proven that
         s₂       a pair of adjacent values in
        &         the output
       .   p      is a permutation of
     s₂           a pair of adjacent values in
    o             the output sorted.

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

0

ফোর্থ (গফোর) , 79 - 120 = -21 বাইট

: f 100 0 do dup i 2 mod 4 * 2 - i + i 99 = i 0 = - 3 * + cells + @ . cr loop ;

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

প্রাচীন পুরানো ইনপুট প্রয়োজনীয়তা উপেক্ষা করুন এবং নম্বরগুলি সঞ্চিত থাকে এমন মেমরির ঠিকানা হিসাবে ইনপুট নেয়।

ব্যাখ্যা

0 থেকে 99 পর্যন্ত সমস্ত সংখ্যার মধ্য দিয়ে লুপ করুন each প্রতিটি সংখ্যার জন্য (এন):

  • যদি এন 0 হয়:
    • অ্যারে ঠিকানায় মান আউটপুট + 1
  • অন্যথায় যদি এন 99 হয়:
    • অ্যারে ঠিকানার মান 98 + আউটপুট
  • অন্যথায় যদি এন বিজোড় হয়:
    • অ্যারে ঠিকানায় মান আউটপুট করুন (n + 2)
  • অন্য (এন সম হয়):

    • অ্যারের ঠিকানায় মান আউটপুট করুন (এন - 2)
  • একটি নতুন লাইন আউটপুট

কোড ব্যাখ্যা

: f               \ start new word definition
  100 0 do        \ loop from 0 to 99
    dup           \ duplicate the array address
    i             \ place the loop index on the stack
    2 mod 4 * 2 - \ convert to 2 if it's odd and -2 if it's even
    i +           \ add the result to the the loop index
    i 99 =        \ if i = 99 place -1 on top of the stack, else place a 0
    i 0 =         \ i i = 0 place -1 on top of the stack, else place 0
    - 3 *         \ subtract previous two results from each other and multiply by 3
\ the above line is used to avoid writing if/then by instead using math to get 98 and 1
    +             \ add result to existing result from above
    cells         \ multiply by the size of a single integer in memory
    +             \ add to the array's starting address
    @ . cr        \ get the value at the calculated address, print it, then print a newline
  loop            \ end the loop
;                 \ end the word definition
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.