Quat। কুইন + বিড়াল


22

একটি কোয়াট একটি এবং জনপ্রিয় ইসলং বিড়াল প্রোগ্রামের সংমিশ্রণ ।

চ্যালেঞ্জ

চ্যালেঞ্জ হ'ল একটি স্ট্যান্ডার্ড বিড়াল প্রোগ্রাম লিখুন। ব্যবহারকারীর ইনপুট যাই থাকুক না কেন, প্রোগ্রামটি স্টপআউটে ইনপুট প্রতিধ্বনিত করবে।
যাইহোক, যখন ইনপুটটির দৈর্ঘ্য 0 এর চেয়ে বেশি এবং 4 এর একাধিক হয়, প্রোগ্রামটির নিজস্ব উত্স কোড আউটপুট করা উচিত। কোয়াট পর্তুগিজ কোয়াট্রো থেকে এসেছে , যা ' ফোর ' অনুবাদ করে।

বিধি

  • স্ট্যান্ডার্ড লুফোলস প্রযোজ্য
  • আপনি কোনও ফাইল থেকে উত্স কোডটি পড়তে পারেন না
  • একটি খালি ইনপুট একটি খালি আউটপুট উত্পাদন করা উচিত

বোনাস

যদি আপনার ইনপুট দৈর্ঘ্য 4 এর একাধিক হয় তবে আপনি কুইন length/4বার মুদ্রণ করে 25% বোনাস উপার্জন করতে পারবেন । যদি আপনি ফাঁকা জায়গাগুলির দ্বারা আউটপুট পৃথক করে থাকেন তবে আরও 5% বোনাস (কোনও স্থানের অনুমতি নেই)।

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

নিম্নলিখিত পরীক্ষার কেসগুলি প্রোগ্রামের জন্য প্রয়োগ হয় in%4=0?cat:self(সত্যিকারের ভাষা নয়)।

<empty input> -> <empty output>
input -> input
1234 -> in%4=0?cat:self
12345678 -> in%4=0?cat:self 0% বোনাস
12345678 -> in%4=0?cat:selfin%4=0?cat:self 25% বোনাস
12345678 -> in%4=0?cat:self in%4=0?cat:self 30% বোনাস

স্কোরিং

এটি । বাইটস মধ্যে সংক্ষিপ্ত কোড।


ইনপুটটিতে একাধিক লাইন থাকতে পারে?
LegionMammal978

@ লিজিওনম্যামাল ৯78 Of \nঅবশ্যই, নতুন লাইন চরিত্রটি হোক,
ইনপুটটির

ঠিক আছে, এটি আমার ভাষায় কেবল ইনপুটটিকে জটিল করে তোলে, যা অবশ্যই একবারে এক লাইন পড়তে হবে।
LegionMammal978

কুইন্সের জন্য বিল্ট-ইনগুলি অনুমোদিত? (দেখুন: সিরিয়াসলি )
অ্যাডিসন ক্রম্প

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

উত্তর:


8

সিজেএম, 23 * 0.75 = 17.25 বাইট

স্ট্যান্ডার্ড জেনারেলাইজড কুইন ...

{`"_~"+q:Q,4md@@*Q\?}_~

অথবা

{`"_~"+q_,4md@@]:\*?}_~

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

{`"_~"+  e# Generalised quine framework. Leaves the source code on the stack.
  q:Q    e# Read input and store it in Q.
  ,      e# Get its length.
  4md    e# Divmod 4.
  @      e# Pull up the source code.
  @      e# Pull up the div.
  *      e# Repeat the source code that many times.
  Q\     e# Push the input and swap it below the repeated source.
  ?      e# Pick the right output based on the modulo.
}_~

অন্যান্য সংস্করণ স্ট্যাক-রোটেশন ট্রিক ব্যবহার করে ভেরিয়েবলের ব্যবহার এড়ানো হয় ]:\


4

গুরুতরভাবে, 8 9 বাইট

Q,ó;l4@%I

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

(খালি ইনপুট পরীক্ষা করতে ইনপুট বাক্সে একবার প্রবেশ করুন Hit

প্রথম বোনাসটি 12 বাইট (16 * .75) এ করা যেতে পারে:

Q,ó;l;4@\(*)4@%I

ব্যাখ্যা:

Q                   Push program source to stack
 ,ó                 Push input string, and terminate if it's empty
   ;l               Push length of input
     4@%            Take the length mod 4.
        I           Pick the next stack element (input) if nonzero,
                    else the next next (program source)

যেহেতু কিছু লোক অন্তর্নির্মিতভাবে সিরিয়াসির কুইনিংয়ের ব্যবহার পছন্দ করে না, তাই আমি এই 22 বাইট সংস্করণ সরবরাহ করি যা Qরেফারেন্সের জন্য ব্যবহার করে না :

`è";ƒ"(+,ó;l4@%I`;ƒ

যদি আপনি এই লোকগুলির মধ্যে একজন হন তবে এটির (এখনের জন্য) নির্দিষ্ট সংস্করণটি বিবেচনা করুন এবং তারপরে কুইনে অন্তর্নির্মিত ব্যবহার সম্পর্কে একটি মেটা থ্রেড শুরু করুন।


6
একটি quine চ্যালেঞ্জ, আমি বিশ্বাস করি আপনি প্রোগ্রাম উৎস পড়তে পারে না।
কনর ও'ব্রায়েন

3
নির্দেশাবলী বলে যে আপনি এটি কোনও ফাইল থেকে পড়তে পারবেন না। কিউ একটি অন্তর্নির্মিত কমান্ড যা খালি হলে উত্সটিকে স্ট্যাকের দিকে ঠেলে দেয়। আমি মনে করি এটি "ভাষার শক্তিতে খেলতে" এর অধীনে চলে আসে
কুইন্টোপিয়া

4
আমি মনে করি একটি বিল্ট-ইন কুইনিং ফাংশন সোর্স কোডটি পড়ে। এটি দ্বিপদী সহগ চ্যালেঞ্জের জন্য বিল্ট-ইন ব্যবহার করার মতো, যখন চ্যালেঞ্জটি "কোনও অন্তর্নির্মিত ফ্যাক্টরিওরিজ" না বলে বলে।
মার্টিন এন্ডার

4
প্রশ্নটি কোনও ফাইল থেকে প্রোগ্রামের উত্সটি প্রযুক্তিগতভাবে পড়েন না - এটি র‌্যামে রয়েছে, দোভাষী দ্বারা সঞ্চিত। যেহেতু নিয়মটি বিশেষত "একটি ফাইল থেকে" উল্লেখ করেছে, এটি বৈধ হওয়া উচিত।
মেগো

3
এইচকিউ 9 + এবং ইসমাইলের মারিও গল্ফ সহ অন্তর্নির্মিত কুইন অপারেটরগুলির সাথে পূর্ববর্তী কোনও ভাষার চেয়ে কেন এটি বেশি জনপ্রিয় তা আমি সত্যিই বুঝতে পারি না। তবে কোনও ক্ষেত্রেই আপনার প্রোগ্রামটি খালি ইনপুটটির জন্য সঠিকভাবে কাজ করছে বলে মনে হচ্ছে না।
মার্টিন এন্ডার

2

পাইথ, 33 * .75 = 24.75

?%lz4z*/lz4jN*2]"?%lz4z*/lz4jN*2]

পরীক্ষা স্যুট

জোড় ব্যবহার করে স্ট্যান্ডার্ড পাইথ কুইন। এটি অনলাইন ইন্টারপ্রেটারে কেবল সত্যিকারের কুইন, যা চূড়ান্তভাবে নতুন লাইনে যুক্ত করে না।

39 * .7 = 27.3 এর স্কোরটিতে চূড়ান্ত বোনাসের ফলাফল পাওয়া:

?%lz4zjd*/lz4]jN*2]"?%lz4zjd*/lz4]jN*2]

2

ভিটসি , 18 17 বাইট

এত কাছেYus। আমি এখন কুইনারে অন্তর্নির্মিতদের মধ্যে জিতেছি! সিরিয়াসলি তাকান

zl4M([&'rd3*8\}]Z
z                 Grab ALL THE INPUT! :D
 l4M([         ]  If the input is a multiple of four, do the stuff in brackets.
      &           Generate a new stack and move to it.
       'rd3*      Standard quine.
            8\}   Push the bottom 8 items of the stack to the top.
                Z Output the current stack.

বোনাসগুলি পাওয়ার পরে আমার কোনও কারণ নেই - তারা আরও অনেকগুলি বাইট চক করবে।

প্রতারণামূলক কুইন সংস্করণ, 12 বাইট:

zl4M([&iG`]Z
zl4M([&   ]Z  Same as above.
       i      Push -1.
        G     Get the name of the file with this index of use (-1 is self)
         `    Read the file with the given name and push its contents to the stack.

G` শান্ত! এটি একটি সাধারণ Qকমান্ডের চেয়ে বেশি বৈধ বলে মনে হচ্ছে ।
কনোর ও'ব্রায়েন

এটির ক্ষেত্রে I / O ফাইল কীভাবে দরকার তা দেখে আমার কাছে কম আইনী মনে হয়।
কুইন্টোপিয়া

@ CᴏɴᴏʀO'Bʀɪᴇɴ কুইন্টোপিয়া ঠিক আছে - কারণ আমি ফাইলের রেফারেন্স পেয়েছি তার মানে এই নয় যে এটি আরও ভাল। : পি
অ্যাডিসন ক্রম্প

2

ইমাস লিস্প (323 * 0.75 = 242.25)

((lambda (s) (let* ((a (read-string "")) (l (string-bytes a))) (if (> (% l 4) 0) (message a) (dotimes (v (/ l 4)) (prin1 (list s (list (quote quote) s))))))) (quote (lambda (s) (let* ((a (read-string "")) (l (string-bytes a))) (if (> (% l 4) 0) (message a) (dotimes (v (/ l 4)) (prin1 (list s (list (quote quote) s)))))))))

উত্স কোডটি নিজের মধ্যে ইনপুট হিসাবে দিতে এটি লিস্পের উদ্ধৃতি মেকানিক ব্যবহার করে।

পুরানো প্রতারণা সংস্করণ

:; exec emacs -Q -script $0
(find-file(nth 2 command-line-args))(set'b(buffer-string))(set's(read-string""))(set'l(string-bytes s))(if(>(% l 4)0)(message s)(dotimes(v(/ l 4))(message"%s"b)))

Ungolfed:

:; exec emacs -Q -script $0
(find-file(nth 2 command-line-args)) ; open self
(set'b(buffer-string))               ; read own code to string
(set's(read-string""))               ; read input
(set'l(string-bytes s))              ; length of input
(if(>(% l 4)0)                       ; l % 4 > 0 ?
    (message s)                      ; output input
  (dotimes(v(/ l 4))                 ; (implicit else) repeat l/4 times
    (message"%s"b)))                 ; output own code

2
এটি কি এই নিয়ম লঙ্ঘন করে না যে "আপনি কোনও ফাইল থেকে উত্স কোডটি না পড়তে পারেন"?
এইসুইটসস ব্ল্যাকনট

@ এটিসুইটস ব্ল্যাক আপনি ঠিক বলেছেন না ... ধারণা করুন আমাকে এলিস্পে প্রতারণামূলক একটি কুইনের সন্ধান করতে হবে
লর্ড

1

জাভাস্ক্রিপ্ট, 57 56 72 বাইট * 0.75 = 54

একটি বাইট সঞ্চয় করার জন্য @ নীলকে ধন্যবাদ!

(f=_=>alert(!(p=prompt())||(l=p.length)%4?p:`(f=${f})()`.repeat(l/4)))()

আমি যে সংক্ষিপ্ততম সমাধানটি খুঁজে পেতে পারি তা বেশ সোজা-এগিয়ে ছিল।

সুতরাং, এখানে একটি দম্পতি বোনাস (আরও আকর্ষণীয়) সমাধান:

জাভাস্ক্রিপ্ট, 82 81 বাইট * 0.75 = 60.75

f=_=>{try{p=prompt();a=`f=${f};f()`.repeat(p.length/4)}catch(e){a=p}alert(a)};f()

এই এক নির্যাতনের repeatএকটি ব্যতিক্রম নিক্ষেপ যদি একটি অ-পূর্ণসংখ্যা গৃহীত এর কার্যকারিতা।

জাভাস্ক্রিপ্ট, 83 বাইট * 0.70 = 58.1

(f=_=>alert((a=(p=prompt()).split(/.{4}/)).pop()?p:a.fill(`(f=${f})()`).join` `))()

এই শেষটি অবশ্যই রেগেক্স ব্যবহার করে প্রতি চারটি অক্ষরে ইনপুট বিভক্ত করে আমার প্রিয় /.{4}/। স্ট্রিংয়ের শেষে যদি কোনও অক্ষর বাকী থাকে যখন আমরা pop, এটি 4 দ্বারা বিভাজ্য নয়, তাই ইনপুটটি সতর্ক করুন। অন্যথায়, popঅ্যারের দৈর্ঘ্য এক দ্বারা হ্রাস পেয়েছে, সুতরাং এই মুহুর্তে অ্যারের দৈর্ঘ্য ইনপুট দৈর্ঘ্যের সমান / ৪. এই ক্ষেত্রে, কেবল fillএটি কোয়াইন এবং joinস্পেস সহ।


আমি মনে করি আপনি শর্তটি উল্টিয়ে একটি বাইট সংরক্ষণ করতে পারেন; পরিবর্তন &&করার জন্য ||, একটি করা !আগে (p=prompt()), অপসারণ <1এবং সরানো pভেতরে থাকতে হবে ?:
নীল

1

পার্ল, 68 65 * 0.75 = 48.75 বাইট

perl -e'$_=q{print+($l=($~=<>)=~y///c)%4?$~:"\$_=q{$_};eval"x($l/4)};eval'

অনলাইন পরীক্ষার স্যুটটি এখানে দেখুন।

ভেঙ্গে পড়া

perl -e'
    $_=q{                      # store source code in $_
        print+(
            $l=($~=<>)=~ y///c # read STDIN into $~, assign length to $l
        )%4 ?                  # if length is a multiple of 4
             $~ :              # print $~
             "\$_=q{$_};eval"  # otherwise, print source code
             x($l/4)           # length/4 times
    };
    eval'                      # eval $_ to execute its contents

0

গণিত, 229 বাইট

($RecursionLimit = Infinity; WriteString[$Output, If[Mod[StringLength[a = (If[(a = InputString[]) === EndOfFile, "", StringJoin["\n", a, #0[]]] & )[]], 4] == 1, ToString[#0, InputForm][], If[a == "", "", StringDrop[a, 1]]]]) & []

শ্বেত স্পেসের সমস্তই InputFormপ্রোগ্রামটির আসল কোডটির সাথে মিলে যায়।


0

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

$=(_=prompt())=>_.length%4?_:`$=${$};$()`;$()

আমার 21-বাইট ব্লিং কুইনের সম্প্রসারণ। আশা করি মিশ্রণ promptএবং ফাংশন আউটপুট অনুমোদিত is


0

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

f=(i,l=i.length)=>l%4?i:("f="+f).repeat(l/4)
  • +44 বাইট
  • -25% বোনাস

অন্যান্য সমাধান:

44 36 বাইট

f=(i,l=i.length)=>l%4?i:("f="+f).repeat(!!l)

f=(i,l=i.length)=>l%4?i:l?("f="+f):i

38.5 বাইট

f=(i,l=i.length)=>l%4?i:Array(l/4).fill("f="+f).join` `
  • +55 বাইট
  • -25% বোনাস
  • -5% বোনাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.