টার্নারি- যদি রূপান্তরকারী


18

জাভা /। নেট / সি / জাভাস্ক্রিপ্ট / ইত্যাদিতে। আপনি যদি বিবৃতিগুলি সংক্ষিপ্ত করতে টার্নারি-আইফএস ব্যবহার করতে পারেন।

উদাহরণস্বরূপ (জাভাতে):

// there is a String `s` and an int `i`
if(i<0)s="Neg";else if(i>0)s="Pos";else s="Neut";

একটি ত্রৈমাসিক দিয়ে সংক্ষিপ্ত করা যায়-যদি হয়:

s=i<0?"Neg":i>0?"Pos":"Neut";

চ্যালেঞ্জ:

ইনপুট: একটি নিয়মিত if-অন্যথায় (নেস্টিং সহ সম্ভব) যা একটি একক ভেরিয়েবল সেট করে।

আউটপুট: রূপান্তরিত ত্রৈমাসিক- if।

চ্যালেঞ্জ বিধি:

  • আপনি যদি ধরে নিতে পারেন তবে সমস্ত ক্ষেত্রে বন্ধনী ছাড়াই সম্ভব সম্ভব (সুতরাং প্রতিটি যদি / অন্যথায় যদি / অন্য কোনও ব্লকের একটি দেহ থাকে)।
  • আপনি ধরে নিতে পারেন যে কোনও স্থান (ট্যাবস) বা নতুন-লাইন থাকবে না, প্রতিটিের পরে একক স্থান বাদে else(অন্তর্ভুক্ত else if)।
  • আপনি ধরে নিতে পারেন যে পরিবর্তনশীল নামগুলি সর্বদা একটি একক ছোট হাতের অক্ষর ( [a-z]) থাকে।
  • ভেরিয়েবলগুলিতে দেওয়া মানগুলি এর মধ্যে একটি হতে পারে:
    • স্ট্রিংস, যা ডাবল উদ্ধৃতি দ্বারা বেষ্টিত করা হবে (অর্থাত (স্পেস / ট্যাব / নতুন-লাইন ছাড়া) "Test", "SomeString", "Example_string", ইত্যাদি)। আপনি ধরে নিতে পারেন যে স্ট্রিংগুলিতে কখনই সাবস্ট্রিংগুলি থাকবে না ifবা elseএটিতে স্পেস, ট্যাব, নিউলাইনস, (পালানো) ডাবল-কোট বা অক্ষর থাকবে না =। এটিতে অক্ষরগুলি থাকতে পারে তবে ><(){}[];?:!&|এটি মুদ্রণযোগ্য ASCII পরিসরে থাকবে ( ['!' (33), '~' (126)])।
    • পূর্ণসংখ্যার (অর্থাত 0, 123, -55, ইত্যাদি)
    • ডেসিমেল (অর্থাত 0.0, 0.123, -55.55, ইত্যাদি)
  • মানগুলি কখনও মিশ্রিত হবে না। সুতরাং নির্ধারিত সমস্ত ভেরিয়েবলগুলি পূর্ণসংখ্যা হয় এবং কিছুগুলি পূর্ণসংখ্যা হয় না এবং কিছু স্ট্রিং হয়।
  • প্রথম বন্ধনী মধ্যে অবস্থার নিম্নলিখিত অক্ষরগুলি ধারণ করতে পারে =<>!+-/*%&|[], a-z, 0-9। আপনি ধরে নিতে পারেন যে কোনও অভ্যন্তরীণ প্রথম বন্ধনী থাকবে না এবং আপনি ধরে নিতে পারেন যে কোনওরকম (বিভ্রান্তিকর) ক্ষেত্র একের বেশি ব্যবহৃত হবে না (যেমন if(if<0))।
  • আপনি ধরে নিতে পারেন যে এর i*=10পরিবর্তে আর কোনও শর্ট-কাট থাকবে না i=i*10
  • আপনার ঝুঁকির elseকেসগুলি হ্যান্ডেল করতে হবে না , তাই সবগুলি ifএকটি দিয়ে তৈরি করা যায় else। অর্থাৎ if(a)if(b)r=0;else r=1;কোনও সম্ভাব্য ইনপুট-কেস নয়। if(a)if(b)r=0;else r=1;else r=2;বা if(a&&b)r=0;else if(a&&!b)r=1;else r=-1;হয়।
  • I / O নমনীয়। ইনপুট এবং আউটপুট স্ট্রিং, অক্ষরের তালিকা, এসটিডিআইএন থেকে পাঠানো, আউটপুট থেকে STDOUT এ ইত্যাদি হতে পারে আপনার কল।
  • সমস্ত অঞ্চলগুলির একটি সঠিক সাহচর্য থাকবে, বেশিরভাগ ভাষায় স্ট্যান্ডার্ড হিসাবে ( তবে পিএইচপি উদাহরণ হিসাবে নয় )।

সাধারণ নিয়ম:

  • এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।
    কোড-গল্ফ ভাষাগুলি আপনাকে নন-কোডগলফিং ভাষার সাথে উত্তর পোস্ট করতে নিরুৎসাহিত করবেন না। 'যে কোনও' প্রোগ্রামিং ভাষার পক্ষে যতটা সম্ভব সংক্ষিপ্ত উত্তর নিয়ে আসার চেষ্টা করুন।
  • স্ট্যান্ডার্ড নিয়মগুলি আপনার উত্তরের জন্য প্রযোজ্য , সুতরাং আপনাকে সঠিক পরামিতি এবং রিটার্ন-টাইপ, সম্পূর্ণ প্রোগ্রাম সহ STDIN / STDOUT, ফাংশন / পদ্ধতি ব্যবহারের অনুমতি দেওয়া হবে। আপনার কল
  • ডিফল্ট লুফোলগুলি নিষিদ্ধ।
  • যদি সম্ভব হয় তবে আপনার কোডের জন্য একটি পরীক্ষার সাথে একটি লিঙ্ক যুক্ত করুন।
  • এছাড়াও, দয়া করে একটি ব্যাখ্যা যুক্ত করুন।

পরীক্ষার কেস:

Input:   if(i<0)s="Neg";else if(i>0)s="Pos";else s="Neut";
Output:  s=i<0?"Neg":i>0?"Pos":"Neut";

Input:   if(i%2<1)r=10;else r=20;
Output:  r=i%2<1?10:20;

Input:   if(n<10)if(m<0)i=0;else i=10;else if(m<0)i=-1;else i=1;
Output:  i=n<10?m<0?0:10:m<0?-1:1;

Input:   if(i==1)i=0.0;else i=0.25;
Output:  i=i==1?0.0:0.25;

Input:   if(!a)if(b)r=0;else r=1;else r=2;
Output:  r=!a?b?0:1:2;

Input:   if(a)if(b)r=0;else r=1;else if(c)r=2;else r=3;
Output:  r=a?b?0:1:c?2:3;

Input:   if(a&&b)r=0;else if(a&&!b)r=1;else r=-1;
Output:  r=a&&b?0:a&&!b?1:-1;

Input:   if(i[0]>0)if(j>0)if(q>0)r="q";else r="j";else r="i";else r="other";
Output:  r=i[0]>0?j>0?q>0?"q":"j":"i":"other";

Input:   if(i>0)r="i";else if(j>0)r="j";else if(q>0)r="q";else r="other";
Output:  r=i>0?"i":j>0?"j":q>0?"q":"other";

Input:   if(a>0)if(a<2)x="one";else if(a<3)x="two";else if(a<4)x="three";else x="other";else x="other";
Output:  x=a>0?a<2?"one":a<3?"two":a<4?"three":"other":"other";

Input:   if(b[0]<=b[1])q=5;else if(b[0]==null)q=0;else q=-10;
Output:  q=b[0]<=b[1]?5:b[0]==null?0:-10;

প্রযুক্তিগতভাবে, এফ # if ... then ... elseএ টেরিনারি অপারেটর। সুতরাং আপনি যদি লিখুন let result = if 10 > 100 then 99 else -99তাহলে মান resultহবে -99
Ciaran_McCarthy

1
@ কায়ারান_ম্যাকার্থি আমি প্রত্যাশা করব যে বেশিরভাগের ক্ষেত্রে এটিই হবে, যদি না ডিফল্ট হিসাবে শর্তাধীন অভিব্যক্তিযুক্ত সমস্ত কার্যকরী ঝুঁকির ভাষা না থাকে। ক্লোজার, স্কেলা এবং হাস্কেল একই।
কারসিজেনিকেট

@ ওশ উফ .. কাজের এক দিন পরে সন্ধ্যার পরে আমার পরীক্ষার কেসগুলি যুক্ত করা উচিত নয় ... স্থির।
কেভিন ক্রুইজসেন

2
জাভাস্ক্রিপ্ট সংক্ষেপক বন্ধ সংকলক এই সমস্ত টেস্টকেসে দুর্দান্ত কাজ করে। যা প্রদত্ত ইনপুটগুলি গ্রহণ করার সময় কেবল প্রত্যাশিত আউটপুট তৈরি করে। তবে মনে হচ্ছে এটি উত্তর হিসাবে দাবি করতে পারি না। সুতরাং আমি এখানে মন্তব্য করতে চাই।
tsh

উত্তর:


5

রেটিনা 0.8.2 , 32 বাইট

+r`if.(.*?)\)(.=)
$2$1?
;.{6}=
:

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

r`if.(.*?)\)(.=)
$2$1?

ifশর্তের আগে অ্যাসাইনমেন্টটি সরানো এবং একটি যোগ করে একটি অ্যাসাইনমেন্টের সাথে সাথেই হ্যান্ডেল করুন ?। অ্যাসাইনমেন্টের সবচেয়ে কাছেরটি যদি আমরা পাই তবে তা নিশ্চিত করার জন্য মঞ্চটি ডান থেকে বামে মিলছে, এবং আমাদের ভুলের সাথে \)মিলছে না তা নিশ্চিত elseকরে।

+

নেস্টেড এসগুলির যত্ন নেওয়ার জন্য মঞ্চটি পুনরাবৃত্তি করুন if

;.{6}=
:

কোন অবশিষ্ট অ্যাসাইনমেন্ট elseগুলি তাই ;else ?=একটি সঙ্গে প্রতিস্থাপন :


@ নোহেলহোফ এটি নির্দেশ করার জন্য ধন্যবাদ; আমি ভেবেছিলাম আমি সেখানে বাইট গল্ফ করছি কারণ এটি পরীক্ষার ক্ষেত্রে কাজ করে।
নীল

6

পাইথন 2 , 126 121 120 114 100 বাইট

lambda s:findall(' (.=)',s)[0]+sub('if.(.*?)\)(.=)?',r'\1?',sub('.{5} (.=)?',':',s))
from re import*

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


সংরক্ষিত:

  • -১ বাইট, কেভিন ক্রুইজসেনকে ধন্যবাদ

@ কেভিন ক্রুজসেন ধন্যবাদ :)
টিফিল্ড

1
আমদানির আগে ফাংশন সংজ্ঞা কেন?
স্কাইলার

@ স্কিলার এটি আসলে কিছু যায় আসে না, তবে হেডারে এইভাবে অ্যাসাইনমেন্টটি রাখা সহজ
জো কিং

6

পার্ল 5- পি, 50 49 48 বাইট

s/if.(.*?)\)(.=)/\2\1?/g;s/.if./?/g;s/;.{6}=/:/g

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

48 বাইট সংস্করণ নীল রেটিনা উত্তর দ্বারা অনুপ্রাণিত হয়।

ব্যাখ্যা

# Replace "if(e1)if(e2)x=" with "x=e1)if(e2?"
s/if.(.*?)\)(.=)/\2\1?/g;
# Replace ")if(" with "?"
s/.if./?/g;
# Replace ";else x=" with ":"
s/;.{6}=/:/g

ওল্ড 49 বাইট সমাধান

s/.{5} (.=)?/:/g;s/if.(.*?)\)(.=)?/\1?/g;$_=$2.$_

3

রুবি , 72 71 বাইট

->s{$a=$2while s.gsub!(/if.(.*?)\)(.=)?(.*?);\w* (.=)?/,'\1?\3:');$a+s}

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


হয় ;elseবা একটি বাইট সংরক্ষণ করা else যেতে পারে .{5}
কেভিন ক্রুজসেন

1
ধন্যবাদ, আমি একই প্রভাবের সাথে আলাদা কিছু পেয়েছি।
জিবি

3

জাভা (জেডিকে) , 119 116 বাইট

প্রায় পুরোপুরি খাঁটি রেইগেক্স সমাধান, কাটা এবং অন্যান্য উত্তরগুলির একটি থেকে কিছুটা পরিবর্তন হয়েছে।

-3 বাইটস কেভিনের আরও কয়েকটি রেজেক্স ট্র্যাবেরিকে ধন্যবাদ

s->s.replaceAll(".*(.=).*","$1$0").replaceAll("if.(.*?)\\)","$1?").replaceAll("([ ?]).=","$1").replace(";else ",":")

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

ব্যাখ্যা

s->                                         // Lambda function taking a String
   s.replaceAll(".*(.=).*","$1$0")          // Find assigned variable and append to start of String
    .replaceAll("if.(.*?)\\)","$1?")        // Replace any 'if' statements with their condition
                                            // followed by '?'
    .replaceAll("([? ]).=","$1")            // Remove all assignments after a '?' or space
    .replace(";else ",":");                 // Simple replace (no regex) to remove 'else' statements

1
আমি ".*(.=).*","$1$0"আপনি ব্যবহার করেছি, এটা 1 বাইট চেয়ে খাটো "^(.*)(.=)","$2$1"আমি মন ছিল। :) যাইহোক, আপনি এতে 2 বাইট পরিবর্তন if\\(করতে if.এবং একটি অতিরিক্ত বাইট পরিবর্তন (\\?| )করতে পারেন ([? ])এটি অনলাইনে 116 বাইট ব্যবহার করে দেখুন
কেভিন ক্রুজসেন

@ কেভিন ক্রুজসেন চিয়ার্স! আমি রেজিটাকে নিচে নামানোর চেষ্টা করে এতক্ষণ ব্যয় করেছি, বিশ্বাস করতে পারছি না যে আমি মিস করেছি!
লুক স্টিভেনস

3

কাকোনে ভি2018.09.04 , 43 38 37 বাইট

xs\w=(?!=)<ret>d<a-h>Psif.<ret>df);r?xs;else<space><ret>c:<esc>

ব্যাখ্যা:

ভাক দ্বারা অনুপ্রাণিত কাকউন একাধিক নির্বাচন ভিত্তিক, মডেল সম্পাদক।

  1. x পুরো লাইনটি নির্বাচন করুন

  2. s... <ret>নিয়মিত অভিব্যক্তি দিয়ে নির্বাচনটি ফিল্টার করুন \w=(?!=), যা সমস্ত পরিবর্তনশীল অ্যাসাইনমেন্টের সাথে মেলে এবং ==তুলনা মেলে না

  3. d প্রতিটি নির্বাচন মুছুন এবং এর বিষয়বস্তু ডিফল্ট রেজিস্টারে রাখুন

  4. <a-h> সমস্ত লাইনে তাদের লাইনের শুরুতে প্রসারিত করুন

  5. P প্রতিটি নির্বাচনের আগে ডিফল্ট রেজিস্টারের সামগ্রীটি পেস্ট করুন

  6. s... <ret>নিয়মিত অভিব্যক্তি দিয়ে নির্বাচনটি ফিল্টার করুনif.

  7. d প্রতিটি নির্বাচন মুছুন

  8. f প্রতিটি নির্বাচন পরের দিকে প্রসারিত করুন )

  9. ; প্রতিটি নির্বাচনকে তার কার্সারে কমিয়ে দিন

  10. r প্রতিটি নির্বাচনের প্রতিটি চরিত্রের সাথে প্রতিস্থাপন করুন ?

  11. x পুরো লাইনটি নির্বাচন করুন

  12. s... এর <ret>সাথে নির্বাচন ফিল্টার করুন;else<space>

  13. c... <esc>প্রতিটি নির্বাচন সাফ করুন এবং এর সাথে প্রতিস্থাপন করুন:

একটি পরীক্ষার ক্ষেত্রে কোড অ্যানিমেশন:

কোড ইন অ্যাকশন


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

1
@ কেভিন ক্রুজসেন আমি পরীক্ষার একটি মামলার একটি জিআইএফ যুক্ত করেছি। এটি তাদের সকলের জন্য কাজ করে তবে জিআইএফগুলি তৈরি করা তুচ্ছ নয়।
ভেলাস

আমার কাছ থেকে ব্যাখ্যা এবং gif, +1 জন্য ধন্যবাদ। :) একটি নতুন ভাষা সম্পর্কে জানতে সর্বদা চমৎকার।
কেভিন ক্রুইজসেন


1

জাভাস্ক্রিপ্ট (নোড.জেএস) , 80 বাইট

s=>(p=s.replace(/(?:if.(.*?)\)|;.*? )(.=)?/g,(_,t,v)=>(V=v||V,t)?t+'?':':'),V+p)

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

কেভিন ক্রুইজসেনকে ধন্যবাদ, 2 বাইট সংরক্ষণ করা হয়েছে।


if\(2 বাইট সংরক্ষণ করতে if.এবং ;else হতে পারে;.{5}
কেভিন ক্রুইজসেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.