তুমি কোথা থেকে এসেছ?


9

ইন্টারকল একটি দুর্দান্ত ভাষা, তবে অন্য লোকের কোড বোঝা সর্বদা সহজ নয়। এটি বিশেষত ক্ষেত্রে যদি তারা COME FROM বিবৃতি ব্যবহার করে।

আন্তঃব্যক্তিকতা হয়

চ্যালেঞ্জ সংজ্ঞা

  1. এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা কোনও ইন্টারকাল প্রোগ্রামের উত্স কোডটিকে পাঠ্য / ডেটা স্ট্রিম হিসাবে গ্রহণ করে। আপনি যদি কোনও ফাংশন লিখেন তবে আপনাকে ফাংশনটি কল করার জন্য একটি প্রোগ্রাম সরবরাহ করার পরামর্শ দেওয়া হয়, তবে এটি আপনার স্কোরের জন্য গণনা করবে না।
  2. নিম্নলিখিত নির্দেশাবলী অনুসারে ফাংশন আউটপুটটি প্রোগ্রামের জাম্পগুলির একটি পাঠ্য / ডেটা স্ট্রিম হবে। আউটপুট নেই মুদ্রিত করা প্রয়োজন, কিন্তু এটি একটি টেক্সট, না স্ট্রিং একটি অ্যারে (উদাহরণস্বরূপ) করা প্রয়োজন হয় না।
  3. আউটপুট প্রতিটি লাইন বিবৃতি গঠিত হবে যা আসবে FROM থেকে আসা এবং তার COME FROM বিবৃতিটির লাইন নম্বর, দ্বারা পৃথক করা ->। একটি উদাহরণ:

    (310)   DO .4 <- .3 -> 55
    
  4. আপনি উত্স কোডের এই লাইনগুলি ছাঁটাতে পারেন, তবে এটি প্রয়োজন হয় না।

  5. পরীক্ষার কেসগুলি কেবল অবিচ্ছিন্ন লেবেলগুলি (যেমন, পূর্ণসংখ্যার লেবেল) নিয়ে গঠিত।
  6. আউটপুটটি অবশ্যই বিবৃতিগুলির সোর্স কোড অর্ডার অনুসারে বাছাই করতে হবে যা তাদের লেবেল নয়, অথবা বিবৃতি বা তাদের লেবেল থেকে COME ক্রম হবে।
  7. একই লেবেল থেকে একাধিক বিবৃতি আসার পক্ষে এটি সম্ভব। এই জাতীয় ক্ষেত্রে COME FROM লাইন নম্বরগুলি অবশ্যই বাছাই করতে হবে এবং কমা দ্বারা আলাদা করতে হবে।
  8. কোনও বিবৃতি নিজেই থেকে আসা সম্ভব।
  9. একটি আগত বিবৃতি একটি নোট বিবৃতি দিয়ে উপসর্গযুক্ত হতে পারে। এই জাতীয় ক্ষেত্রে লাইন নম্বর অবশ্যই বর্গাকার বন্ধনীতে আবৃত করা উচিত।
  10. COME FROM শব্দটি একটি মন্তব্যে উপস্থিত হতে পারে এবং অবশ্যই তা উপেক্ষা করা উচিত। আপনাকে ফাইলটি পুরোপুরি বিশ্লেষণ করার দরকার নেই: সেগুলি যদি একটি লেবেল অনুসরণ করে (প্রথম বন্ধনীতে একটি সংখ্যা) থাকে তবে আপনি ধরে নিতে পারেন এটি একটি বাস্তব বিবৃতি।

স্কোরিং

প্রবেশকারীরা তাদের প্রোগ্রাম বা ফাংশনের চরিত্রের দৈর্ঘ্য দ্বারা স্কোর করা হবে ।

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

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

rot13.i

(10) PLEASE DON'T GIVE UP -> 87
(33) DON'T GIVE UP -> 92

primes.i

(15)    DO (13) NEXT -> 26
(16)    DO .12 <- .1 -> 6
(23)    DO (21) NEXT -> 3

unlambda.i

(7202)  DO RETRIEVE .203+,202 -> 75
(4202)  DO ,202SUB.201.202#7 <- ,201SUB.201.202#7 -> 108
(6202)  DO ,201SUB.201.202#7 <- ,202SUB.201.202#7 -> 117
(4203)  DO READ OUT ,201SUB.201.202#7 -> 133
(4302)  DO .302 <- .2 -> 181
(5410)  DO ,400SUB#124 <- #4 $ #17 -> 293
(3410)  PLEASE (4410) NEXT -> 288
(5402)  DO (412) NEXT -> 328
(4412)  PLEASE (3412) NEXT -> 334
(3423)  DO FORGET #2 -> 375
(4404)  DO RETRIEVE .311+.312 -> 411
(5404)  PLEASE DO (414) NEXT -> 430
(4434)  DO FORGET #1 -> 441
(3454)  DO (103) NEXT -> 451
(5502)  DO .512 <- .312 -> 520
(8503)  PLEASE RETRIEVE .311+.312 -> 621
(7503)  DO (302) NEXT -> 515
(3622)  DO (302) NEXT -> 514
(603)   PLEASE FORGET #2 -> 622

pass.i

(10)    DO  NOTHING -> 5, 11
(20)    PLEASE  (100) NEXT -> 6
(30)    PLEASE  (200) NEXT -> 12
(103)   DO  (104) NEXT -> 27
(104)   DO  (105) NEXT -> 19
(1) DO  (2) NEXT -> 36
(2) DO  (105) NEXT -> 194
(202)   DO NOT  .2 <- #2 AGAIN -> [196]
(203)   DO  (204) NEXT -> 167
(204)   DO  (205) NEXT -> 159

continuation.i

(8201)  DO NOTHING -> 165, 271
(8202)  PLEASE NOTE Fork threads, one dormant, one alive -> 53, 58
(8211)  DO COME FROM (8211) -> 60
(8216)  DO NOTHING -> 71
(8215)  DO NOTHING -> 68
(8217)  DO COME FROM (8217) AGAIN -> 118
(8299)  DO COME FROM (8299) AGAIN -> 141
(8274)  DO (8273) NEXT ONCE -> 158
(8259)  PLEASE DO NOTHING -> 166
(8276)  DO COME FROM (8276) AGAIN -> 199
(8278)  PLEASE DO COME FROM (8278) AGAIN -> 237

2
এটি আমাকে অবাক করে দেয় যে কেউ এখনও কটন আইড জো রেফারেন্স করেনি :-)।
mınxomaτ

22
INTERCAL is a wonderful languageআপত্তিকর ভাষার জন্য নিম্নমানের
315

আপনি কি নিশ্চিত যে আপনি অক্ষরের দৈর্ঘ্যে স্কোর করতে চান? চ্যালেঞ্জগুলি এখানে সাধারণত বাইট দৈর্ঘ্যের দ্বারা স্কোর করা হয়।
14:15

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

আমরা কি ধরে নিতে পারি যে লেবেলটি একটি লাইনের শুরুতে রয়েছে? ^(\d+)লেবেল ধরে যে এমন ?
orlp

উত্তর:


2

জাভাস্ক্রিপ্ট, 232 বাইট

function c(d){for(var l,o,f,c,p=/^.(\d+).+?$/gm,a=/(T\s+)?C.{7}M .(\d+)/g,r='';l=p.exec(d);)for(f=0;o=a.exec(d);)o[2]==l[1]&&(c=d.slice(0,o.index).split('\n').length,r+=f++?', ':'\n'+l[0]+' -> ',r+=o[1]?'['+c+']':c);return r.trim()}

সাথে ডাকা হবে

var data = require( 'fs' ).readFileSync( process.argv[2] ).toString();
console.log( c( data ) );

ব্যাখ্যা

function c(d){
    for(
        // Initialise variables
        var l,o,f,c,p=/^.(\d+).+?$/gm,a=/(T\s+)?C.{7}M .(\d+)/g,r='';
        // Find lines beginning with a label
        l=p.exec(d);)
            for(
                // Reset a have-we-output-this-line flag
                f=0;
                // Find CALL FROM statements
                o=a.exec(d);)
                    // Filter to CALL FROM statements which have the current line
                    o[2]==l[1]&&(
                        // Calculate the line number of this CALL FROM statement
                        c=d.slice(0,o.index).split('\n').length,
                        // Concat the output for this line
                        r+=f++?', ':'\n'+l[0]+' -> ',r+=o[1]?'['+c+']':c);
    // Trim an initial new line
    return r.trim()}

1
এখানে সবচেয়ে বড় ফোটা লাইন নম্বর গণনা করা, কিন্তু চ্যালেঞ্জ লেখক হিসাবে আমি ভেবেছিলাম আমি এটি হারাতে চেষ্টা করার সহজ প্রচেষ্টা হিসাবে ছেড়ে চলেছি।
কৌতূহলীনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.