পার্সন কোডটি আনভিউজুয়ালাইজ করুন


22

ভূমিকা

পারসন্স কোড বর্ণনা করতে শুধুমাত্র একটি সহজ উপায় পিচ বৈচিত্র , সঙ্গীত এক টুকরা মধ্যে একটি নোট বেশী কিনা বা আগের তুলনায় কম।

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


বিবরণ

প্রতিটি প্রকরণটি একটি একক অক্ষর দ্বারা প্রতিনিধিত্ব করা হয়, যা নিম্নলিখিতগুলির মধ্যে একটি:

  • Rযদি নোটটি আগেরটির তুলনায় একই হয় ( " আর এপিয়্যাট" এর অর্থ দাঁড়ায় )
  • Uযদি নোটটি পূর্বেরটির চেয়ে বেশি হয় ( " ইউ পি" এর অর্থ দাঁড়ায় )
  • Dযদি নোটটি পূর্বেরটির চেয়ে কম হয় ( " ডি স্বত্বের জন্য দাঁড়িয়েছে " )

প্রাথমিক নোট হিসাবে লেখা হয় *


উদাহরণ

এখানে পার্সন কোডের একটি উদাহরণ রয়েছে ( "ওড থেকে জয়" এর শুরু ):

*RUURDDDDRUURDR

আপনি প্রকৃতপক্ষে এটি এর মতো দেখতে পারেন :

      *-*                    
     /   \                   
    *     *                  
   /       \                 
*-*         *         *-*    
             \       /   \   
              *     *     *-*
               \   /         
                *-*          

আমরা এখন থেকে একটি কনট্যুর কল করব ।

উপরোক্ত উদাহরণ দ্বারা এই জাতীয় গণনা আঁকার নিয়মগুলি স্ব-ব্যাখ্যা হিসাবে বিবেচিত হয়।



চ্যালেঞ্জ

এখন আসল চ্যালেঞ্জ।

একটি প্রোগ্রাম লিখুন যা ইনপুট হিসাবে একটি কনট্যুর দেওয়া হয়, এর সাথে সম্পর্কিত পার্সন কোড আউটপুট করে।

আপনাকে কনট্যুর আঁকতে বলা হয়নি, তবে আসলে বিপরীতে।
কনট্যুর থেকে আসল পার্সন কোডটি সন্ধান করুন।


বিধি

  • কোড গল্ফিংয়ের জন্য নিয়মাবলী প্রয়োগ
  • সংক্ষিপ্ততম প্রোগ্রামটি বাইট জয়ের সংখ্যায়
  • ইনপুটটি একটি কনট্যুর এবং আউটপুটটি একটি বৈধ পার্সন কোড হবে
  • ইনপুটটির জন্য অতিরিক্ত হোয়াইটস্পেস সম্পর্কিত বিবরণ অপ্রাসঙ্গিক, আপনার পক্ষে যা ভাল কাজ করে তা করুন
  • পূর্ববর্তী নিয়মের কারণে আপনাকে হার্ডকোড, এক উপায় বা অন্য উপায়, আউটপুট এবং / অথবা প্রোগ্রামের অতিরিক্ত অংশগুলি ব্যবহার করার অনুমতি নেই

নোট


1
সংশ্লিষ্ট: codegolf.stackexchange.com/q/58759/3808
Doorknob

সুতরাং এটি দিয়ে শুরু করা উচিত *যা কিছু করে না?
নিকেল

আপনি কি বোঝাতে চেয়েছেন? ইনপুট ঠিক কখন *? নাঃ। *আমি মনে করি এটি মুদ্রণ করা উচিত । আমি এই কর্নার কেস যুক্ত করব।
হেল্গ ফন কোচ

1
@ এনিকায়েল হ্যাঁ, এটি দিয়েই শুরু করা উচিত* । সর্বদা.
হেল্গ ফন কোচ

উত্তর:


4

পাইথ - 28 25 27 25 বাইট

2 জ্যাকেট @ জাকুবকে ধন্যবাদ জানাতে পেরেছি

s+\*@L"RDU"-VFtBxR\*%2C.z

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


1
এটি *ইনপুট হিসাবে কাজ করে না । আউটপুটটি *0ঠিক হওয়া উচিত *। একটি দুষ্ট বুনো পিছনে শূন্য হাজির।
হেল্গ ফন কোচ

@ হেলজভনকোচ ঠিক করেছেন
মালটিসেন

@ জাকুব ধন্যবাদ!
মালটিসেন

আপনি অদলবদল Uএবং Dউপায় দ্বারা। অন্যথায়, ভাল সম্পন্ন।
হেল্গ ফন কোচ

@ হেলজেভনকোফ উফ্
মালতিসেন

24

সিজেম, 21 বাইট

qN/:.e>(o2%:i"DRXU"f=

একটি অক্ষর-ভিত্তিক সর্বাধিক ক্রিয়াকলাপটিকে :ভেক্টরাইজ করে ( .) লাইনগুলি ভাজ করুন e>। যেহেতু প্রতিটি কলামে কেবলমাত্র একটি ফাঁকা অক্ষর রয়েছে তাই এটির ফলাফল হবে কারণ সমস্ত মুদ্রণযোগ্য অ-স্পেস অক্ষরের চেয়ে স্পেসের একটি ছোট ASCII কোড রয়েছে।

প্রথম তারকাচিহ্নটি আনশিফ্ট করুন এবং মুদ্রণ করুন (o, তারপরে মডিউলার ইনডেক্সিং ব্যবহারের 2%জন্য বাকি প্রতিটি চরকে মানচিত্র করুন UDR

পুরানো সমাধান (29 বাইট)

'*qN/z2%'*f#0+2ew);::-"RDU"f=

qN/ইনপুট লাইন পায়। zএই চরিত্রের ম্যাট্রিক্স স্থানান্তর করে। 2%প্রতিটি বিজোড় সারি ড্রপ। '*f#প্রতিটি সারিতে তারকাচিহ্নের সূচকটি সন্ধান করে। 0+2ew);সমস্ত ধারাবাহিক যুগের সূচক পায়। ::-তাদের পার্থক্য নির্ণয়, এবং "RDU"f=অক্ষর তাদের মানচিত্র (মডুলার ইন্ডেক্স মাধ্যমে: 0 → R, 2 → U, -2 ≡ 1 → D)। নেতৃস্থানীয় '*নক্ষত্রকে নতুন করে দেয়।

সম্পাদনা : আমি পরিবর্তিত 2ewকরার 0+2ew);কাজ CJam প্রায় হ্যান্ডলিং না ewতালিকা যা খুব ছোট উপর (ধারাবাহিক টুকরা)। এটি কোডটি ইনপুট স্ট্রিংয়ের জন্য কাজ করে *

এটি এখানে চেষ্টা করুন , বা এটি কার্য দেখুন:

              

7
এটি দেখতে সত্যিই দুর্দান্ত।
জিল শাহ

2
আমি রাজী! কোডটির জন্য +1 করুন, আমি জিআইএফের জন্য +10 করতে পারতাম।
ইটিএইচ প্রডাকশনগুলি

বিটিডাব্লু, আমি কোড দৈর্ঘ্যের স্মাইলি পছন্দ করি:-p
ইটিএইচ প্রোডাকশনস

1
আমি সম্মত, এটি দেখতে দুর্দান্ত aw *যদিও এটি ইনপুট হিসাবে কাজ করে না । RuntimeExceptionপরিবর্তে আমি একটি সুন্দর পেতে ।
হেল্গ ফন কোচ

ওহ, আমি বিবেচনা করি যে একটি সিজেএম বাগ: ত্রুটিযুক্ত না হয়ে [X]2ewফিরে []আসবে। যদিও আমি একটি workaround যোগ করব।
লিন

4

পাইথন 3, 129 108 98 86 বাইট

এটিকে গল্ফ করার বেশ কয়েকটি উপায় রয়েছে তবে আমি এটি পছন্দ করি যে আমি এটি সমস্ত এক লাইনে পেয়েছি।

সম্পাদনা: এখন ব্যবহার''.translate()

সম্পাদনা: wnnmaw অনেক ধন্যবাদ সহ

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

lambda a:'*'+"".join(('UR'[j<'/']+'D')[j>'/']for l in zip(*a)for j in l if j in'-/\\')

ইনপুট অবশ্যই স্ট্রিংগুলির একটি অ্যারে হতে হবে। উপরের উদাহরণের জন্য, এটি এমন কিছু দেখাচ্ছে:

["      *-*                    ","     /   \                   ","    *     *                  ","   /       \                 ","*-*         *         *-*    ","             \       /   \   ","              *     *     *-*","               \   /         ","                *-*          "]

Ungolfed:

def f(a):
    s = ''
    for c in zip(*a):           # transpose
        for d in c:             # for each letter in column c
            if e in "-/\\":     # if that letter is either -,/,\
                if e < '/':     # if < '/' (same as if == '-')
                    s += "R"
                elif e > '/':   # if > '/' (same as if == '\')
                    s += "D"
                else:           # if == '/'
                    s += "U"
        return "*" + s          # in the code we ''.join() it all together
                                # in this ungolfing, we add to an empty string

আমি একটি নতুন উত্তর দিতে চাই না কারণ আমি আপনার কাছ থেকে অনেক ধার নিয়েছি, তবে lambda s:'*'+"".join((('D','R')[j=='-'],'U')[j=='/']for l in zip(*s.split('\n'))for j in l if j in'\\/-')105 বাইটে ঘড়ি। মূল পার্থক্যটি অনুবাদটির পরিবর্তে একটি
দ্বিখণ্ডীয়

ধন্যবাদ @ Wnnmaw! আমি মনে করি আমি আরও গল্ফ করতে পারি!
শার্লক 9

সামনে শর্তসাপেক্ষে দুর্দান্ত গল্ফ করা, এটি সুপার চালাক!
wnnmaw

আহ! @Nnmaw টিপটির জন্য ধন্যবাদ
শেরলক 9

3

রুবি, 87 বাইট

ইনপুটটিতে ট্রেলিং স্পেসের প্রয়োজন হয় যাতে সমস্ত লাইন একই দৈর্ঘ্য হয়।

$><<?*+$<.readlines.map(&:chars).transpose.join.gsub(/./,{?-=>:R,?/=>:U,?\\=>:D}).strip

4
অবশ্যই এটি দূষিত কোড, এতে রয়েছে >:D
অ্যালেক্স এ।

3

জাপট, 38 বাইট 40 41 45 46 48

2 বাইট সংরক্ষিত হয়েছে @ ইথ প্রডাকশনগুলির জন্য ধন্যবাদ

'*+U·y £Yu ?"RUD"g1+(XrS c -47 g):P} q

যদি একটি ট্রিম কমান্ড থাকে তবে এটি কেবল 38 বাইট হবে; -; আমি যখন গল্ফিং করি তখন ব্যাখ্যা যোগ করবে। :Pপ্রোগ্রাম, মজার হতে চেষ্টা করা হয় না এটা আসলে প্রোগ্রাম অক্ষর আছে যা গুরুত্বপূর্ণ নয় উপেক্ষা করে।

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


যখন আমি দেখলাম যে কার্যত অ্যারে ট্রান্সপোজের প্রয়োজন হয় এমন একটি চ্যালেঞ্জ ছিল এবং দো এর উত্তর দিয়েছিল তখন আমি জানতাম এটি জপ হতে হবে।
ETH প্রোডাকশনস

বিটিডাব্লু, আমি এগুলিতে একটি ট্রিম ফাংশন যুক্ত করব xএবং ফাংশনগুলি ট্রান্সপোজ করব এবং yz
আবর্ত করব

আপনি এর মতো দুটি বাইট সংরক্ষণ করতে পারেন:Yu ?"RUD"g1+(XrS c -47 g):P
ETH প্রোডাকশনগুলি

@ ইথ প্রডাকশনস ধন্যবাদ, নিচে 40 বাইট নিচে!
ডাউনওয়েট

3

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

import Data.List
m '/'="U"
m '-'="R"
m '\\'="D"
m _=""
('*':).(>>=(>>=m)).transpose.lines

ব্যবহারের উদাহরণ:

*Main> ('*':).(>>=(>>=m)).transpose.lines $ "      *-*                    \n     /   \\                   \n    *     *                  \n   /       \\                 \n*-*         *         *-*    \n             \\       /   \\   \n              *     *     *-*\n               \\   /         \n                *-*          "
"*RUURDDDDRUURDR"

*Main> ('*':).(>>=(>>=m)).transpose.lines $ "*"
"*"

ইনপুট স্থানান্তর করুন এবং অক্ষরগুলি // -/ \সিঙ্গেলটন স্ট্রিং "U"/ "R"/ এর সাথে প্রতিস্থাপন করুন "D"। অন্যান্য সমস্ত অক্ষর খালি স্ট্রিং দ্বারা প্রতিস্থাপিত হয় "", যা পরে সমস্ত কিছু যুক্ত করে অদৃশ্য হয়ে যায়। অবশেষে, নক্ষত্রটি প্রিপেন্ড করুন *


2

গণিত, 103 বাইট

"*"<>(Differences@Position[Thread@Characters@StringSplit[#,"
"],"*"][[;;,2]]/.{-2->"U",0->"R",2->"D"})&

বেশ সংক্ষিপ্ত, বিবেচনা করে যে এটি একটি স্ট্রিং-প্রসেসিং চ্যালেঞ্জ।


2

জাভাস্ক্রিপ্ট (ES6) 90

একটি বেনামী ফাংশন। এটি বর্তমান লাইনে অবস্থানের পরিমাণ গ্রহণ করে চর দ্বারা ইনপুট স্ট্রিং চরটি স্ক্যান করে। এটি করে, এটি সঠিক জায়গায় এর U D Rজন্য একটি আউটপুট অ্যারে সাবসটিংটি তৈরি করে/ \ -

c=>[...c].map(c=>c>'*'?t[i++]=c>'/'?'D':c<'/'?'R':'U':c<' '?i=0:++i,t=['*'],i=0)&&t.join``

2

মতলব, 62 বাইট

r=@(s)[85-(s<14)*3-(s>59)*17,''];@(p)r(sum(p(:,2:2:end)-32))

এর জন্য ইনপুটটি একটি আয়তক্ষেত্রাকার হতে হবে (প্রতিটি সারিতে একই সংখ্যার অক্ষর)। যেমন

    ['      *-*                    ';    '     /   \                   ';    '    *     *                  ';    '   /       \                 ';    '*-*         *         *-*    ';    '             \       /   \   ';    '              *     *     *-*';    '               \   /         ';    '                *-*          '];

ব্যাখ্যা

sum(p(:,2:2:end)-32)        % exctract every second column, substract 32 (spaces->zeros) 
                            % and sum column wise (results in a vector of 3 different values)
[85-(s<14)*3-(s>59)*17,'']  % map each of the values to the corresponding value of the letter and convert back to characters
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.