হ্যালো ওয়ার্ল্ড যা ত্রুটিগুলি পরিচালনা করে


9

নিম্নলিখিত কার্যকারিতা সহ একটি প্রোগ্রাম বা ফাংশন লিখুন:

  • প্রোগ্রাম / ফাংশনটি প্রথমে Hello, world!স্ট্যান্ডার্ড আউটপুট স্ট্রিমটিতে লেখার চেষ্টা করে । (এই চ্যালেঞ্জের জন্য অন্য কোনও আউটপুট গ্রহণযোগ্য নয়, কারণ প্রোগ্রামের তুচ্ছ আচরণের চেয়ে আই / ও-তে ফোকাস অনেক বেশি)) এটি সফল হয়েছে কিনা তার উপর নির্ভর করে:
    • যদি এটি আউটপুট দেওয়ার ক্ষেত্রে সফল হয় Hello, world!তবে প্রোগ্রাম / ফাংশনটি কোনও আচরণ ছাড়াই প্রস্থান করে।
    • যদি কোনও ত্রুটির কারণে এটি সঠিক আউটপুট উত্পাদন করতে ব্যর্থ হয় তবে প্রোগ্রাম / ফাংশনটি Error writing "Hello, world!"স্ট্যান্ডার্ডকে ত্রুটি প্রবাহে লেখার চেষ্টা করে । (এই চ্যালেঞ্জের উদ্দেশ্যে, ত্রুটিটি পরিচালনা করার জন্য আপনাকে ত্রুটি পরিচালনা করার দরকার নেই don't)

ব্যাখ্যা

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

  • আউটপুট উত্পাদন করার সময়, আপনি যদি চান তবে একটি একক ট্রেলিং নিউলাইনও উত্পাদন করতে পারেন, তবে এটি করা বাধ্যতামূলক নয়।

  • "স্ট্যান্ডার্ড আউটপুটটিতে ত্রুটি লেখার সংজ্ঞা" যা আপনার প্রোগ্রাম প্রয়োগ করে অবশ্যই কমপক্ষে নিম্নলিখিত কেসগুলিকে ত্রুটি হিসাবে বিবেচনা করবে:

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

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

    • স্ট্যান্ডার্ড আউটপুট একটি টার্মিনালের সাথে সংযোগ স্থাপন করে এবং Hello, world!অনস্ক্রিনে প্রদর্শিত হয়।
    • স্ট্যান্ডার্ড আউটপুট একটি ফাইলের সাথে সংযোগ স্থাপন Hello, world!করে এবং ফাইলটিতে লিখিত হয়।

    আউটপুট ত্রুটি হিসাবে কী গণনা করা হয়েছে তার বিশদটি আপনি চয়ন করতে পারেন, যতক্ষণ না এটি উপরের নিয়মের সাথে সামঞ্জস্য থাকে।

  • আপনার প্রোগ্রাম / ফাংশন উপরে তালিকাভুক্ত ত্রুটি পরিস্থিতিগুলির কোনওটির মুখোমুখি হয়ে ক্র্যাশ হওয়া উচিত নয়। আপনি কোন বহির্গমন কোডটি ব্যবহার করবেন এটি আপনার বিষয়।

  • আপনার প্রোগ্রাম / ক্রিয়াকলাপটি স্ট্যান্ডার্ড ত্রুটি প্রবাহে সম্মুখীন হওয়া ত্রুটির প্রকৃতি বর্ণনা করতে পারে না; এটি কেবল উপরে উল্লিখিত স্ট্রিং মুদ্রণ করা উচিত। স্ট্যান্ডার্ড ত্রুটির বহিরাগত আউটপুট (উদাহরণস্বরূপ সংকলক সতর্কতা) কেবলমাত্র আইনী যদি তা ত্রুটিযুক্ত হয় বা না হয় তা নির্বিশেষে শর্তহীনভাবে উত্পাদিত হয়।

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

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

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

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

bashলিনাক্স ব্যবহার করে উপরের প্রতিটি ত্রুটি শর্তের অনুকরণ করার একটি উপায় এখানে রয়েছে (আপনাকে লিনাক্স ব্যবহার করতে হবে না তবে এটি পরীক্ষা করার পক্ষে এটি সম্ভবত সহজতম পদ্ধতি):

your_program_here >&-           # nonexistent stdout
your_program_here > /dev/full   # out of disk space
mkfifo test  # note: change "test" to a filename that isn't in use
true < test &
your_program_here > test        # connecting to a program that doesn't want input
rm test      # clean up the FIFO we used earlier

প্রথম দুটি টেস্টকেস হ'ল ডিটারমিনিস্টিক। শেষটি নয় (এটি একটি জাতি শর্তের উপর নির্ভর করে); পরীক্ষার উদ্দেশ্যে, আমি আপনার প্রোগ্রামটি শুরু করার সাথে সাথে ত্রুটিটি প্রকাশ করার উপায়ের সাথে জাতিটির অবস্থাটি ঠিক করা হয়েছে কিনা তা নিশ্চিত করার জন্য প্রকৃত আউটপুটটিকে স্ট্যান্ডার্ড আউটপুটে যোগ করার পরামর্শ দিচ্ছি।

বিজয় শর্ত

এটা একটা চ্যালেঞ্জ, তাই খাটো আরও ভাল। (প্রায়) সর্বদা হিসাবে, আমরা বাইটে প্রোগ্রামটির দৈর্ঘ্যটি পরিমাপ করছি।


1
আপনি কি জানেন যে উইন্ডোজে এটি পরীক্ষা করার কোনও উপায় আছে কিনা? আমি প্রথম মাপদণ্ড পরীক্ষা করতে পারি, তবে ডিস্ক পূর্ণ হওয়ার বিষয়ে অংশটি নয় ...
স্টিভি গ্রিফিন

দৌড়ের অবস্থা কমাতে, আপনি কি ব্যবহার করতে পারবেন sleep 1 < test; (sleep 2; your_program_here) > test?
নীল

উত্তর:


6

বাশ , 71 60 বাইট

h=Hello,\ world!
(echo $h)2>&-||echo Error writing \"$h\">&2

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

কিভাবে এটা কাজ করে

Hello, world!ভেরিয়েবল এইচ এ সংরক্ষণ করার পরে , আমরা নিম্নলিখিতটি করি।

প্রথমে STDOUT এ (echo $h)2>&-মুদ্রণের চেষ্টা করুন Hello, world!2>&-ত্রুটি বার্তা প্রতিধ্বনি প্রদর্শন প্রতিরোধ করার জন্য প্রয়োজনীয় : লেখার ত্রুটি: লেখার ক্ষেত্রে ব্যর্থ হওয়ার ক্ষেত্রে ফাইল ফাইলের খারাপ বর্ণনা । যেহেতু একটি নামযুক্ত পাইপে লিখতে যে ইনপুট গ্রহণ করে না তা বাশ প্রোগ্রামকে সিগন্যাল 13 (সিগপাইপ) দিয়ে হত্যা করবে, তাই আমরা সাব-শেল () তে কমান্ডটি কার্যকর করি (...), সুতরাং কেবল সাবশেলটি মারা যাবে।

অবশেষে, যদি STDOUT এ মুদ্রণ ব্যর্থ হয় তবে সাব-শেল একটি শূন্য-না-থাকা স্থিতি কোড (সাইনপাইপের জন্য 141, জেনেরিক ত্রুটির জন্য 1) দিয়ে প্রস্থান করবে, সুতরাং echo Error writing \"$h\">&2STDERR এ পছন্দসই বার্তাটি মুদ্রণ করবে।




1

সি (জিসিসি) , 87 86 বাইট

f(){signal(13,1);write(1-puts("Hello, world!"),"Error writing \"Hello, world!\"",29);}

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

Ungolfed

#include <signal.h>
#include <stdio.h>
#include <unistd.h>

void f(void)
{
    signal(SIGPIPE, SIG_IGN); // Works (and is required) on TIO. YMMV
    int fd = (puts("Hello, world!")) < 0 ? 2 : -13;
    write(fd, "Error writing \"Hello, world!\"", 29);
}

কীভাবে জানবেন কী রিটার্ন রাখে? এখানে বলা হয়েছে ঠিক আছে তবে এটি = = 0 ...
রোজলুপি

putsকোনও ত্রুটির ক্ষেত্রে লেখা বাইট বা -1 লিখিত হয়েছে , সুতরাং এটি 14 (হ্যালো ওয়ার্ল্ড প্লাস নিউলাইন) বা -1 প্রদান করে । (এটি প্ল্যাটফর্ম-নির্দিষ্ট হতে পারে, তবে এটি গ্লিবিকের সাথে এটির আচরণ করে))
ডেনিস

কে ও আর 2 বলছে এটি ত্রুটি হলে ইওএফ [-1 স্পষ্টতই] ফেরত দেয়; বা মান ঠিক না থাকলে নেতিবাচক নয়
রোজলুপি

1
পিপিসিগুলিতে, ভাষাগুলি তাদের প্রয়োগের মাধ্যমে সংজ্ঞায়িত করা হয়, এবং জিসিসি / গ্লিবসি যেমন বলেছিল ঠিক তেমন আচরণ করে।
ডেনিস

আমি পুরাতন বইটি পছন্দ করি
রোজলুপি

1

পাওয়ারশেল, 80 বাইট

try{echo($h="Hello, World!") -ea 4}catch{$host.ui|% *rL* "Error writing ""$h"""}

ব্যাখ্যা:

try{
    #Attempt to 'echo' (write output) the string, and assign it to $h
    #Make sure the 'error action' is set to '4' to make it a terminating error.
    echo($h="Hello, World!") -ea 4
} catch { 
    #Use the "WriteErrorLine" function in $host.ui to stderr
    $host.ui|% *rL* "Error writing ""$h"""
}

এটি যখন ত্রুটি হয় তখন এটি চেষ্টা করার চেষ্টা করে না তবে এটি অবশ্যই কাজ করা উচিত।


ত্রুটি বার্তাটি STDERR এ লেখা উচিত । প্রথম লেখার প্রচেষ্টা চলাকালীন কোনও ত্রুটি ঘটলে এটি STDOUT এ লেখা সম্ভব নয়।
ডেনিস

@ ডেনিস তার জন্য ধন্যবাদ, সেখানে আপডেট হওয়া, প্রশ্নটি পুরোপুরি পড়েনি।
কলসডু

আফিকাট পাওয়ারশেল কেবল মারাত্মক ব্যতিক্রমগুলি ধরে, তাই আপনার প্রয়োজন Write-Host -ErrorAction Stopবা এর মতো কিছু হবে। এছাড়াও, throwপ্রিন্টটি যে প্রিন্ট করা উচিত তা বাদ দিয়ে অতিরিক্ত ডিবাগিং ইনগ্রোমেশন তৈরি করে, যার উপায় দ্বারা এইচডাব্লু স্ট্রিংয়ের চারপাশে একটি ছোট হাতের ডাব্লু এবং ডাবল উদ্ধৃতি থাকা উচিত ।
ডেনিস

@ ডেনিস অতিরিক্ত ডিবাগ তথ্য আমাকে চুরমার করেছে, উত্তর এখনই আপডেট হয়েছে updated
কলসডু

1

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

try{(l=console).log(a="Hello, world!")}catch(e){l.error('Error writing '+a)}

নোট করুন যে আউটপুটটি আপনার আউটপুট করা উচিত 'Hello, world!'তা হ'ল যা আপনি ব্যবহার করেন তার চেয়ে এক বাইট বেশি longer এছাড়াও, আমি মনে করি aকলটির অভ্যন্তরে console.logসংক্ষিপ্তকরণটি সংক্ষিপ্ত হবে (1 বি) এবং সেমিকোলনটি অপসারণের পরে l.log(a)অন্য একটি বাইট সংরক্ষণ করবে।
লুক

@ লুক ধন্যবাদ, এটি বেশ বড় ভুল ছিল!
ম্যাথু রোহ

1
try{(l=console).log(a="Hello, world!")}catch(e){l.error('Error writing '+a)}76 বাইট জন্য। প্রথমে, consoleবরাদ্দ করা হয় l, তারপরে "Hello, world!'নিযুক্ত করা হয় aএবং তারপরে এটি কার্যকর করা হয়।
লুক

0

পার্ল 5, 51 বাইট

প্রয়োজন -M5.01, যা বিনামূল্যে

say$h="Hello, world!"or die"Error writing \"$h\"$/"

স্ট্রবেরি পার্ল 5.24.0 তে প্রোগ্রামটি যেমন হয় তেমন চালিত করে (স্ট্যান্ডার্ড আউটপুটে মুদ্রিত) এবং চালিত করে

print f $h="Hello, world!"or die"Error writing \"$h\"$/"

(স্ট্যান্ডার্ড ত্রুটিতে মুদ্রিত)। স্ট্রবেরি ব্যবহার করে অন্যান্য ত্রুটিগুলি কীভাবে পরীক্ষা করতে হয় তা আমি জানি না, তবে সেগুলি হ্যান্ডেল করা উচিত ...।


আমি যতদূর বলতে পারি, এটি কাজ করে না। tio.run/nexus/bash#jY3NDoIwEITvfYq1IXCiiD83ys3Ei2/… (স্ট্রিংটিতে একটি কমাও অনুপস্থিত))
ডেনিস

আপনি যে পৃষ্ঠায় লিঙ্ক করেছেন সেই পৃষ্ঠাটি কী তৈরি করতে হবে তা আমি জানি না; আপনি দয়া করে ব্যাখ্যা করতে পারেন? এছাড়াও, নোট করুন যে স্ক্রিপ্টটি কেবল একটি OS এ কাজ করা উচিত। এবং আমি কমা যোগ করব; ধন্যবাদ।
msh210

আউটপুট অন্যের পরে প্রদর্শন Hello, world!করা উচিত === 1 ===এবং কিছু নয়। ডিবাগ অন্যের পরে === 1 ===এবং Error writing "Hello, world!"পরে কিছুই প্রদর্শন করা উচিত । আমি সচেতন যে আপনার প্রোগ্রাম টিআইওতে কাজ করতে হবে না , তবে print f...আসল প্রোগ্রামটি না করে যখন উদ্দেশ্য ত্রুটি বার্তাগুলি দেখায়।
ডেনিস

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

একটি পরিবর্তনশীল স্ট্রিংটি স্টোর করার ধারণার জন্য ডেনিসকে টুপি-রচনা (যদিও আমি এটি এটি না দেখলে আমি সম্ভবত এটি ভেবে দেখতাম)।
msh210

0

রেক্সএক্স, 111 106 বাইট

signal on notready
a='Hello, world!'
_=lineout(,a)
exit
notready:_=lineout('stderr','Error writing "'a'"')

প্রোগ্রামটি সেখানে স্ট্যাডার নামে একটি স্ট্রিম থাকার উপর নির্ভর করে। আইবিএম সিস্টেমে সম্ভবত এটি হবে না।


0

সি, 77 বাইট

f(a){a="Error writing \"Hello, world!\"";write(1,a+15,13)-13&&write(2,a,29);}

কল জন্য

main(){f(1); return 0;}

আপনি কোন প্ল্যাটফর্মে এটি পরীক্ষা করেছেন? কোনও ভাঙা পাইপের মুখোমুখি হলে এটি লিনাক্সে কাজ করে না।
ডেনিস

0

আর , 91 বাইট

s="Hello, world!"
tryCatch(cat(s),error=function(e)cat('Error writing "','"',file=2,sep=s))

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

cat(s,file=12)পরিবর্তে এটি চালিয়ে আমি এটিকে ত্রুটিযুক্ত করার চেষ্টা করেছি cat(s)এবং এটি স্ট্যান্ডারকে সঠিক পাঠ্যটি প্রিন্ট করে। invalid connectionঅন্যথায় এটি একটি ত্রুটি।


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