পিছনে রসায়ন ক্লাস


15

ভূমিকা

আমি রসায়নে প্রথম যে জিনিস শিখেছি তার মধ্যে একটি ছিল অ্যালকানেসের জ্বলনের সূত্রটি। সবচেয়ে মৌলিক উদাহরণ ছিল: 2CH4 + 4O2 > 4H2O + 2CO2নোট করুন যে সমীকরণটি 2 দিয়ে প্রতিটি গুণফলকে ভাগ করে সরল করা যেতে পারে, আমরা পেয়ে যাব CH4 + 2O2 > 2H2O + CO2জিনিসগুলি সহজ করার জন্য, আমরা এই পদক্ষেপটি উপেক্ষা করতে যাচ্ছি

আপনি দেখতে পাচ্ছেন যে কোনও অ্যালকেনের দহন সহ, অক্সিজেন ব্যবহৃত হয়। প্রতিক্রিয়ার পরে, কেবল সিও 2 এবং এইচ 2 ও তৈরি করা হয়।

কাজটি:

একটি সম্পূর্ণ প্রোগ্রাম দিন যা STDIN বা নিকটতম সম্ভাব্য সমতুল্য থেকে ইনপুট নেয় এবং STDOUT বা নিকটতম সম্ভাব্য সমতুল্য ব্যবহার করে মোট প্রতিক্রিয়া আউটপুট করে।

ইনপুট সবসময় আকারে হতে হবে C(n)H(2n+2)সঙ্গে, n > 0। এগুলি কয়েকটি উদাহরণ ইনপুটস:

CH4
C2H6
C3H8
C4H10
C5H12
C6H14

etc.

একটি দরকারী টিপ:

প্রতিটি অ্যালকেনের দহন প্রতিক্রিয়ায় একটি স্ট্যান্ডার্ড প্যাটার্ন থাকে:

2C(n)H(2n+2) + (3n+1)O2 > (2n+2)H2O + (2n)CO2

যেমন

C4H10দেয় নিম্নলিখিত সমীকরণ: 2C(4)H(2*4+2) + (3*4+1)O2 > (2*4+2)H2O + (2*4)CO2। সমস্ত কিছু গণনা করার পরে, আমরা এই চূড়ান্ত সমীকরণটি পাই:2C4H10 + 13O2 > 10H2O + 8CO2

উদাহরণ:

input:  CH4
output: 2CH4 + 4O2 > 4H2O + 2CO2

input:  C3H8
output: 2C3H8 + 10O2 > 8H2O + 6CO2

input:  C4H10
output: 2C4H10 + 13O2 > 10H2O + 8CO2

input:  C12H26
output: 2C12H26 + 37O2 > 26H2O + 24CO2

নিয়মাবলী:

  • আপনার একটি সম্পূর্ণ প্রোগ্রাম সরবরাহ করা দরকার।
  • আপনার প্রোগ্রামটি STDIN, অথবা সম্ভব না হলে নিকটতম সমমানের কাছ থেকে ইনপুট নেওয়া দরকার।
  • আপনার প্রোগ্রামটি STDOUT ব্যবহার করে আউটপুট প্রয়োজন, বা সম্ভব না হলে নিকটতম সমতুল্য।
  • মনে রাখবেন যে পাঠযোগ্যতা বাড়াতে উদাহরণগুলির জন্য আমি স্পেস ব্যবহার করেছি, এগুলি প্রয়োজনীয় নয়2CH4 + 4O2 > 4H2O + 2CO2এবং 2CH4+4O2>4H2O+2CO2উভয়ই বৈধ আউটপুট। তবে, যদি আপনি আউটপুটের জন্য নিয়মিতভাবে স্পেস ব্যবহার করেন তবে আপনি একটি -10% বোনাস পাবেন
  • এটি , তাই কমপক্ষে বাইটের সাথে প্রোগ্রামটি জয়ী!

সম্পূর্ণ ভিন্ন তবে সম্পর্কিত: আলকানসের লুইস কাঠামোগুলি আঁকানো
চার্লস

সুতরাং আমরা ধরে নিতে পারি যে ইনপুটটি সঠিক সূত্র হবে?
তানমাথ

@ ট্যানম্যাথ, হ্যাঁ, আপনাকে অবৈধ সূত্রগুলি নিয়ে চিন্তা করতে হবে না
আদনান

"ধারাবাহিকভাবে স্পেস ব্যবহার করুন" - ধারাবাহিকভাবে 0 স্পেস গণনা ব্যবহার করবেন?
মেগো

1
@ মেগো, না। 0 টি স্পেস ব্যবহার করে মোটেও স্পেস ব্যবহার করা হয় না, সুতরাং বিধিটি প্রয়োগ হয় না
আদনান

উত্তর:



7

পাইথন 3, 86 * 0.9 = 77.4 বাইট

s=input()
N=int(s.split('H')[1])
print("2%s + %dO2 > %dH20 + %dCO2"%(s,N*1.5-2,N,N-2))

চায়ের সংখ্যা H's বদলে সংখ্যা C' ইনপুট থেকে s। এটি বিশেষ-কেসিং এড়ায় CH4এবং শর্তাবলী আউটপুট এক্সপ্রেশন সহজতর করে N=2n+2

আউটপুটটিতে স্ট্রিং ফর্ম্যাটিংয়ের মাধ্যমে প্যারামিটারগুলি প্লাগ ইন করা আছে। প্রথম যোগফলটি কেবল ইনপুট স্ট্রিং, এবং বাকীগুলি গণনা করা নম্বরগুলি প্লাগ করে Note নোট করুন N*1.5-2(একই হিসাবে N*3/2-2) একটি ভাসা দেয় তবে স্ট্রিং ফর্ম্যাটিং এটিকে একটি ইনটে রূপান্তর করে।


4

জাভা, 0.9 * 202 = 181.8 বাইট

কখনও কখনও আমি ভাবছি আমি জাভা দিয়ে নিজেকে আঘাত করছি কিনা।

20 টি বাইট ভাল শেভ করার জন্য @ টিএনটি এবং @ টিফিল্ডকে ধন্যবাদ!

শ্রেণি এ {পাবলিক স্ট্যাটিক অকার্যকর প্রধান (স্ট্রিং [] ক) ring স্ট্রিং এস = এ [0]। সাবস্ট্রিং (1, এ [0] () 0)? S: "1"); System.out.printf ("2% s +% dO2>% dH2O +% dCO2", একটি [0], 3 * এন + 1,2 * এন + 2 , 2 * ঢ);}}

বেশ সহজ. মূলত, আমি থেকে ইনপুট কাটা Cকরতে H, এবং যে সাবস্ট্রিং পেতে। যদি এটি কিছুই না হয়, আমি একটি সেট n। তা না হলে, আমি এটা মধ্যে সংখ্যা সেট Cএবং H। নিম্নলিখিত কোডগুলি কেবল এটি প্রিন্ট করে এবং এটি সঠিক স্বরলিপি দেয়।

Ungolfed:

শ্রেণীকক্ষে{
    পাবলিক স্ট্যাটিক শূন্য মূল (স্ট্রিং [] এ) {
         স্ট্রিং এস = এ [0]। সাবস্ট্রিং (1, এ [0]। ইনডেক্সফ ("এইচ"));
         লং এন = লং.পার্সলং ((s.leth ()> 0)? s: "1");
         System.out.printf ("2% s +% dO2>% dH2O +% dCO2", এ [0], 3 * এন + 1,2 * এন + 2,2 * এন);
    }
}

2
উত্তম উত্তর, তবে আপনাকে অবশ্যই STDIN ব্যবহার করতে হবে এবং কমান্ড লাইন আরগগুলি নয়। যদিও আপনি এটির printfপরিবর্তে এটি ব্যবহার করে সংক্ষিপ্ত করতে পারতেন +(-11 আমি যদি সঠিকভাবে গণনা করি তবে আপনার কাঁচা স্কোর থেকে)।
টিএনটি

আমাকে বলা হয়েছে যে কমান্ড লাইন আর্গুমেন্টগুলি ব্যবহার করা STDIN এর একটি গ্রহণযোগ্য বিকল্প। এছাড়াও, আপনি কীভাবে আমার ব্যবহারের অর্থ বোঝাতে চেয়েছিলেন তা স্পষ্ট করে বলতে পারেন printf? (এটির উপর একটি সামান্য সূক্ষ্ম, আগে এটি ব্যবহার করেন নি:: ডি)
অ্যাডিসন ক্রম্প

printfথেকে মেকানিক্স ব্যবহার করে java.util.Formatter। আপনার মুদ্রণ বিবৃতিতে "% d" এর মতো মুদ্রণের জন্য একটি স্ট্রিং থাকতে পারে এবং এর পরে কিছু মান বা পরিবর্তনশীল যা পরিবর্তে মুদ্রণ করা হবে। উদাহরণস্বরূপ , আপনার মুদ্রণের জন্য প্রচুর ভেরিয়েবল রয়েছে এমন পরিস্থিতিতে এটি কার্যকর হতে পারে ।
টিএনটি

এবং STDIN এর জায়গায় কমান্ড লাইন আর্গুমেন্ট গ্রহণযোগ্য তা আমার কাছে নতুন (এবং বরং সহায়ক) সংবাদ। :)
টিএনটি

1
@ ভোটটোক্লোস হ্যাঁ, আপনি জাভা দিয়ে নিজেকে আঘাত করছেন।
ক্রিটসি লিথোস

4

পাইথন 2, 122 91 * 0.9 = 81.9 বাইট

i=input()
n=2*int(i[1:i.find('H')]or 1)
print'2%s + %dO2 > %dH2O + %dCO2'%(i,n*3/2+1,n+2,n)

3

জাভাস্ক্রিপ্ট ES6, 63 * .9 = 56.7 বাইট

_=>`2${_} + ${$=_.split`H`[1],$*1.5-2}O2 > ${$}H2O + ${$-2}CO2`

আমার ইএসমিন উত্তরের মতো।


3

পাইথ, 69 বাইট * 0.9 = 62 63 * 0.9 = 57 56 * 0.9 = 50 53 * 0.9 = 48 বাইট

Js>z+xz\H1s[\2z%" + %dO2 > %dH2O + %dCO2"[-*1.5J2J-J2

এটি ঠিক এক্সনরের উত্তরের মতো, যেখানে আমি এইচ মান ব্যবহার করি। একটি পরিবর্তনশীল জে অণুর আণবিক সূত্রে এইচ এর পরিমাণ সংরক্ষণ করতে ব্যবহৃত হয়।

এখানে চেষ্টা করুন


আপনি স্পেসিংয়ে ছয়টি বাইট ব্যয় করেছেন, তবে বোনাস থেকে মাত্র পাঁচ বাইট উপার্জন করেছেন, সুতরাং এটি মূল্যবান নয়।
lirtosiast

2

জাভাস্ক্রিপ্ট ES6, 96 * 0.9 = 86.4

f=s=>`2C${(n=(s.match(/\d+(?!.*\d)/)[0]-2))>2?n/2:''}H${n+2} + ${1.5*n+1}O2 > ${n+2}H2O + ${n}CO2`

2

সিজেম, 45 44 বাইট

2r_'H/1=[i_((_2/1$+)@@]"+%dO2>%dH2O+%dCO2"e%

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

বিশেষ কেসিং এড়ানোর জন্য CH4, আমি প্রথমে প্রথম সংখ্যাটি ব্যবহার করি না, এবং কেবলমাত্র পরে নম্বরটি বের করি H। এটির মান দেয় 2n+2। অবশিষ্ট মানগুলি তার উপর ভিত্তি করে গণনা করা হয় এবং ফর্ম্যাট করা হয়।

ব্যাখ্যা:

2       Push leading 2 for output.
r       Get input.
_'H/    Copy and split at 'H.
1=      Take second part after split, this is 2n+2.
[       Start list.
  i       Convert string value to integer.
  _((     Copy and decrement twice, giving 2n.
  _2/     Copy and divide by 2, giving n.
  1$      Copy the 2n to the top.
  +       Add, to get 3n.
  )       Increment, giving 3n+1. We now have 2n+2, 2n, 3n+1 on stack.
  @@      Rotate top 3 entries twice, to get 3n+1, 2n+2, 2n.
]       Close list.
"+%dO2>%dH2O+%dCO2"
        Format string for output.
e%      "printf" operator.

2r_[[~]W=_2/(3*)\_2-]"+%dO2>%dH2O+%dCO2"e%একটি বাইট সংরক্ষণ করে।
ডেনিস

2

পার্ল, (84 + 1) * 0.9 = 76.5

( -nপতাকা সহ দৌড়ানোর জন্য +1 চর )

আমার প্রথম পার্ল গল্ফ!

@x=(1,m/C(\d)/g);$n=$x[$#x];say"2$_ + ".(3*$n+1)."O2 > ".(($n*=2)+2)."H20 + ${n}CO2"

এটি গুরুত্বপূর্ণ যে এসটিডিইনটিতে একটি পেছনের নতুন লাইন থাকে না। ব্যবহারের উদাহরণ:

llama@llama:...code/perl/ppcg64412chemistry$ printf CH4 | perl -n chemistry.pl
2CH4 + 4O2 > 4H20 + 2CO2

Ungolfed পর:

#!/usr/bin/perl
use 5.10.0;

$_ = 'C3H8';
my @x = (1, m/C(\d)/g);
my $n = $x[$#x];
say "2$_ + ".(3*$n+1)."O2 > ".(($n*=2)+2)."H20 + ${n}CO2";

রেখাগুলি

my @x = (1, m/C(\d)/g);
my $n = $x[$#x];

এখানে মোটামুটি আকর্ষণীয়। $#x'শেষ জনবহুল সূচক "প্রতিনিধিত্ব করে @x(এবং দঃপূঃ এর সিনট্যাক্স হাইলাইটিং মনে করে এটি একটি মন্তব্য কারণ এটা বোবা থাকবে), তাই $x[$#x]এর দখল অংশ নির্বাচন হবে C(\d)Regex যদি এটি বিদ্যমান, অথবা 1অন্যথায়। (পার্ল এটি বিবেচনা করে না যে এটি ব্যতীত অন্য সমস্ত ক্ষেত্রে স্ট্রিং হয়ে 1যাবে; আপনি পার্লে স্ট্রিংগুলিতে সংখ্যার অপারেটর ব্যবহার করতে পারেন))


1

জেএস, 118 (106) বাইট

x=prompt();y=x.replace("CH","C1H").match(/\d{1,}/g)[0];alert(2+x+" + "+(3*y+1)+"O2 > "+(2*y+2)+"H2O + "+(2*y)+"CO2");

1

𝔼𝕊𝕄𝕚𝕟, 51 * .9 = 45.9 চর / 64 * .9 = 57.6 বাইট

a=ïČ`H”[1],`2⦃ï} + ⦃a*1.5-2}O2 > ⦃a}H2O + ⦃a-2}CO2`

Try it here (Firefox only).

ব্যাখ্যা

a=ïČ`H”[1],      // split input along H to get 2n+2
`  2⦃ï}          // 2C(n)H(2n+2) – this is the same as 2[input alkane's formula]
   + ⦃a*1.5-2}O2 // + 2(3n+1)O2
   > ⦃a}H2O      // > (2n+2)H2O
   + ⦃a-2}CO2    // + (2n)O2
`                // implicitly output the template string above

যে আমার উত্তরকে হ্রাস করেছে, আমি দয়া করে একটি ব্যাখ্যা পেতে পারি?
মামা ফান রোল

1

পাইথন, 0.9 * 195 = 175 0.9 * 190 = 171 0.9 * 148 = 133 বাইট

i=raw_input()
O=3*int(i[1:i.find('H')]or 1)+1;C=2*int(i[1:i.find('H')]or 1);print"2"+i+" + "+`O`+"O2"+" > "+i[i.find('H')+1:]+"H2O"+ " + "+`C`+"CO2"

এখানে চেষ্টা করুন


আপনার printএবং একটি "চরিত্রের মধ্যে কোনও স্থানের প্রয়োজন নেই এবং CO2ভেরিয়েবলটিকে ছোট কিছু হিসাবে নামকরণ করা যেতে পারে :)
আন্ডারগ্রাউন্ডোমোরিয়েল

@undegundmonorail ধন্যবাদ
তানমাথ

যেহেতু i[1]হয় "H"বা অঙ্কের গ্যারান্টিযুক্ত তাই আপনি অন্য একটি বাইট সংরক্ষণ করতে পারেন if i[1]>"9"(বা "9"অন্য কোনও চরিত্রের সাথে এসসিও মান দিয়ে 58 থেকে 71 এর মধ্যে প্রতিস্থাপন করতে পারেন )
আন্ডারগ্রাউন্ডোমোরিয়েল

1

এফ #, 113

let s=stdin.ReadLine()
float s.[1+s.IndexOf 'H'..]|>fun f->printf"2%s + %gO2 > %gH2O + %gCO2"s<|f*1.5-2.<|f<|f-2.

1

ম্যাটল্যাব, 96 * 0.9 = 86.4 বাইট

s=input('');i=[sscanf(s,'C%dH'),1];n=i(1);fprintf('%s + %dO2 > %dH2O + %dCO2',s,3*n+1,2*n+2,2*n)

মোটামুটি স্ব বর্ণনামূলক। একটি ইনপুট স্ট্রিং নেয় (এটিকে উদ্ধৃতি চিহ্নগুলিতে মোড়ানো প্রয়োজন যাতে ম্যাটল্যাব এটি চালানোর চেষ্টা না করে!)। তারপরে ইনপুটটিতে সি এবং এইচ এর মধ্যে সংখ্যাটি দশমিক হিসাবে রূপান্তর করে। 1 মানটি স্ক্যানফের আউটপুটে একটি অ্যারের হিসাবে যুক্ত করা হয় যাতে ক্ষেত্রেCH4n সি এবং এইচ এর মধ্যে কোনও সংখ্যা না থাকলে আমরা যখন অ্যারেতে প্রথম সূচকটি বের করি তখন আমরা 1 পেয়ে যাই তবে কেবল ফাঁকা স্থানগুলি দিয়ে মুদ্রণ করা হবে case প্রশ্নের সূত্র অনুসরণ।

এটি এখানে অনলাইন দোভাষী ব্যবহার করে অক্টাভের সাথেও কাজ করা উচিত ।


1

সি ++, 160 * 0.9 = 144 বাইট

#include<iostream>
int main(){int n=1,t;std::cin.get();std::cin>>n;t=2*n;printf("2C");n-1&&printf("%i",n);printf("H%i + %iO2 > %iH2O + %iCO2",t+2,t+n+1,t+2,t);}

আমি আরও কিছুটা আশা করেছিলাম। প্রথমে চর পড়ে এবং তা বাতিল করে, তারপরে ইনট পড়ে এবং ফলাফলটি আউটপুট করে। সমস্যা আছেn ১ হওয়ার it আমি এটির আউটপুট দেওয়ার ছোট উপায়ের কথা ভাবতে পারি না।

Ungolfed

#include <iostream>
int main()
{
    int n = 1, t;
    std::cin.get();
    std::cin >> n;
    t = 2 * n;
    printf("2C");
    n - 1 && printf("%i", n);
    printf("H%i + %iO2 > %iH2O + %iCO2", t + 2, t + n + 1, t + 2, t);
}

1

Clojure / ClojureScript, 98 * 0.9 = 88.2 বাইট

#(let[n(max 1(int((re-find #"C(.*)H"%)1)))m(* 2 n)](str "2"%" + "(inc(* 3 n))"O2 > "(+ 2 m)"H2O + "m"CO2"))

একটি বেনামী ফাংশন তৈরি করে। গিয়ে এটি ব্যবহার করে দেখুন এখানে এবং প্রবেশের (def f #(let...)), তারপর (f "C3H8")


1

এক্সেল, 123 * 0.9 = 110.7 বাইট

=="2"&A1&" + "&(3*MID(A1,FIND("H",A1)+1,9)/2-2)&"O2 > "&MID(A1,FIND("H",A1)+1,9)&"H2O + "&(MID(A1,FIND("H",A1)+1,9)-2)&"CO2"

আমরা সিএইচ 4 ইনপুট সি 1 এইচ 4 হিসাবে নিতে পারলে 122 * 0.9 = 109.8 বাইটে হ্রাস করা যায়

="2"&A1&" + "&3*MID(A1,2,FIND("H",A1)-2)+1&"O2"&" > "&MID(A1,FIND("H",A1)+1,9)&"H2O + "&(MID(A1,FIND("H",A1)+1,9)-2)&"CO2"

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