চামচ কথা


50

দুটি শব্দ দেওয়া হয়েছে, তাদের প্রাথমিক ব্যঞ্জনা গুচ্ছগুলিকে স্যুইচ করে তাদের চামচ করুন। সবচেয়ে কম বাইট জেতা

plaster man -> master plan
blushing crow -> crushing blow
litigating more -> mitigating lore
strong wrangler -> wrong strangler
def ghi -> ghef di
few years -> yew fears

প্রথম স্বরবর্ণের আগে উপস্থিত ব্যঞ্জনবর্ণগুলি ( aeiou) পরিবর্তন করা হয়।

ইনপুট: দুই ছোট হাতের স্ট্রিং যে বিভিন্ন ব্যঞ্জনবর্ণ দিয়ে শুরু এবং প্রতিটি একটি স্বরবর্ণ ধারণ aeiou

আউটপুট: দুটি চামচযুক্ত স্ট্রিং, সঠিক ক্রমে।

ইনপুট এবং / অথবা আউটপুট জন্য, দুটি স্ট্রিং একটি তালিকা বা পছন্দ মত, বা বিভাজক সহ একটি একক স্ট্রিং হিসাবে হতে পারে।


এটি এই পুরানো প্রশ্নের নিকটবর্তী ধূপ , তবে আমি প্রত্যাশা করছি যে একটি স্পষ্ট লিখতে হবে যা পরিষ্কার এবং আরও স্থিতিশীল যাতে পুরাতনটি ডুপ হিসাবে বন্ধ করা যায়


4
শব্দগুলি ব্যঞ্জনবর্ণ দিয়ে শুরু হয়।
xnor

21
উত্তরটি "oozing snotter"ইমো be হওয়া উচিত
প্যাট্রিক রবার্টস

3
@ পেট্রিকরোবার্টস আমি সম্মত, কিন্তু এটি চ্যালেঞ্জটিকে কিছুটা সহজ করে তুলেছে।
xnor


1
ফাস্ট লাকস এবং কয় বাটগুলিকে অংশ নিতে দেওয়া হচ্ছে না
ডেনহাম কোট

উত্তর:


50

ভিম, 18 কীস্ট্রোক

/[aeiou]<CR>dbwvnhp0P

গুরুত্বপূর্ণ কৌশলটি ভিজ্যুয়াল মোডে কোনও কিছুর উপর আটকানো আসলে ভিজ্যুয়াল নির্বাচনের পুরানো সামগ্রীগুলি পেস্ট বাফারে রাখে in


... ওহ, দুহ, এটা ভেবে দেখেনি। রাখা বন্ধ নিক্ষিপ্ত পেয়ে vসমেত হচ্ছে এবং ফিরে স্বরবর্ণ থেকে নির্বাচন করার চেষ্টা করছে।
ডুরকনব

10
নৈমিত্তিক ভিএম ব্যবহারকারী হিসাবে আমি প্রতিটি ক্রমান্বয়ে কমান্ড টাইপ করার সময় আমি অবাক হয়েই থাকি
হারুন

4
<সিআর> এর অর্থ গাড়িবহর রিটার্ন (পুরানো টাইপরাইটার শব্দ!), যা এন্টার নামেও পরিচিত
কাই কার্ভার

22

ব্রেনফাক, 238 207 বাইট

,[[<+<+>>-]++++[<-------->-]-[<<-->>-----]<<+++++[----[----[------[------>>]]]]>[>>]>,]<<++++++++[<[++++<<]<++++<[++++<<]>>[>>]>>[>>]<-]<[<<]-[<+>---]>[>.>]<[<<]<<[<<]>[>>]>[.>>]<.<[<<]>[>.>]>[>>]>[>>]>[.>>]

ইওএফটিতে ,0, 8-বিট মোড়ানো কোষ এবং সেল 0 থেকে বাম দিকে সরিয়ে নেওয়ার ক্ষমতাটি 0 এ ফিরে আসার প্রয়োজন my আমার অভিজ্ঞতা অনুসারে এগুলি সর্বাধিক সাধারণ ডিফল্ট সেটিংস।

আমি এই এক সাথে খুব খুশি। আমার প্রথম চেষ্টাটি ছিল 314 বাইট এবং এটি অবশ্যই একটি উন্নতি। :)

এটি দুটি কোষে ইনপুট থেকে প্রতিটি বাইট সংরক্ষণ করে কাজ করে; একটিতে বাইটের আসল মান সহ এবং অন্যটি নিম্নলিখিত কোডের আউটপুট সহ দেওয়া হয় (বাইটের মান - 97):

[
    ----
    [
        ----
        [
            ------
            [
                ------>>
            ]
        ]
    ]
]

চরিত্রটি যদি একটি ব্যঞ্জনবর্ণ হয় তবে এটির বাইরে শূন্য-মান না দিয়ে আসে। এটি যদি স্বর হয় তবে এটি 0 হয়ে যায় there সেখান থেকে দ্বিতীয় শব্দটি কোথা থেকে শুরু হয় এবং এটি সবকিছু ঠিকঠাকভাবে প্রিন্ট করা সন্ধান করার বিষয়।

এই প্রোগ্রামটির 238 বাইট সংস্করণ সমস্ত ইনপুট সংগ্রহের পরে স্থানের অক্ষর খুঁজে পেয়েছে। এটি একটি মাথা ব্যাথা ছিল কারণ এটি করা এমন একটি ঘর তৈরির সাথে জড়িত ছিল যেখানে আমি যেখানে লুপ করার চেষ্টা করছিলাম ঠিক সেখানে 0 রয়েছে। আমি যেভাবে সমাধান করেছি তাতে প্রথম শব্দটির প্রতিটি চরিত্র থেকে 30 এবং এর পরে প্রতিটি চরিত্র থেকে 32 বিয়োগ করার প্রভাব ছিল। কোডটির মোটামুটি বড় অংশটি এই ননসেন্সটি পরিচালনা করার জন্য উত্সর্গীকৃত ছিল।

এখন, 32 ইনপুট লুপের প্রতিটি চরিত্র থেকে বিয়োগ করা হয়েছে , যা সংক্ষিপ্ত এবং একইরকম পার্শ্ব প্রতিক্রিয়া রয়েছে যা মোকাবেলা করা সহজ। বোনাস হিসাবে, এইভাবে এটির ফলে আমার নিজের স্থানের অক্ষরটি আরও সংক্ষিপ্ত আকারে তৈরি করা সম্ভব হয়েছিল: ১ 17১ থেকে ১৩৯ বিয়োগের পরিবর্তে (উপরের স্বর সনাক্তকরণকারীর মাধ্যমে একটি স্থান চালানোর সময় আপনি কী পাবেন), লুপটি 32 যোগ করে প্রতিটি চরিত্রটি 171 কক্ষে 32 যোগ করার উপায় থেকে বেরিয়ে যায়। এটির জন্য এখানে চারটি বাইট খরচ হয় তবে এর অর্থ আমি পরে মোট ১ 17১ টি বাইট সংরক্ষণ করে (১৩৯ বিয়োগের পরিবর্তে) এর থেকে ১1১ টি বিয়োগ করতে পারি।

মন্তব্য সহ:

For every input character
,[

  Make a copy
  [<+<+>>-]

  Subtract 32 from one
  ++++[<-------->-]

  Subtract 97 from the other
  -[<<-->>-----]<<+++++

  If nonzero:
  [

    Subtract 4
    ----

    If nonzero:
    [

      Subtract 4
      ----

      If nonzero:
      [

        Subtract 6
        ------

        If nonzero:
        [

          Subtract 6
          ------>>

        ]

      ]

    ]

  ]

>[>>]>,]

Add 32 to every character and the 171 that the space left behind
<<++++++++[<[++++<<]<++++<[++++<<]>>[>>]>>[>>]<-]

Go to the space
<[<<]

Subtract 171 from (32 plus 171)
-[<+>---]

~~~~~~~~~~~~~~~

Ready to print!

~~~~~~~~~~~~~~~

Print letters from the second word until the value to the left is zero
>[>.>]

Go to the beginning of the first word
<[<<]<<[<<]

Look at cells to the left of letters in the first word until reaching a zero
>[>>]

Print the rest of the letters in the first word
>[.>>]

Print a space
<.

Go to the beginning of the first word
<[<<]

Print letters from the first word until the value to the left is zero
>[>.>]

Go to the beginning of the second word
>[>>]

Look at cells to the left of letters in the second word until reaching a zero
>[>>]

Print the rest of the letters in the second word
>[.>>]

এটি yস্বর হিসাবে গণনা করা হয়, তবে প্রশ্নটি বলে না এটি এটি নয়। ( nye cat-> ce nyat)
লুভজো

1
@ লভজো এটি সত্যই অদ্ভুত, কারণ স্বরগুলির জন্য যা কোড পরীক্ষা করে তা অবশ্যই yএকটি ব্যঞ্জনা হিসাবে বিবেচনা করে ... আমি কেন এটি করছে তা খতিয়ে দেখব।
আন্ডারগ্রাউন্ডোমোনাইল

17

vim, 23

/[aeiou]<cr>"xd0wndb0Pw"xP

আমি ভাবছি যদি এই চ্যালেঞ্জটিতে ভিএম আসলে প্রতিযোগিতামূলক হয়। সম্ভবত গল্ফিং ভাষার সাথে নয়, তবে সম্ভবত রুবি / পাইথন / পার্ল / ইত্যাদি।

/[aeiou]<cr>  Find the first vowel
"xd0          "Delete" (cut), to register "x, everything from here to BOL
w             Go to next word
n             Find next vowel
db            "Delete back" - delete from here to the beginning of the word
0             Go to BOL
P             Paste what we just "deleted" (cut) behind the cursor
w             Next word
"xP           Paste backwards from register "x

11
আমি এটি সন্নিবেশ মোডে করি, তাই না?
অ্যালেক্স এ।

5
@AlexA। ಠ_ಠ
Doorknob

@AlexA।
Sertোকানো

@AlexA। মোড Inোকান? আপনি কি সন্নিবেশ কমান্ড
ব্ল্যাকলাইট জ্বলছে

1
পুনঃটুইট এটি একটি রসিকতা ছিল কারণ আপনি যদি সন্নিবেশ মোডে থাকেন এবং আপনি সেই জিনিসটি টাইপ করেন তবে এটি কোনও আদেশ কার্যকর করবে না; আপনি এটি একটি ফাইল টাইপ করতে হবে।
অ্যালেক্স এ।

13

পাইথন, 68 63 60 বাইট

import re
lambda s:re.sub('([^aeiou]+|.+ )'*3,r'\3\2\1',s,1)

আইডিয়নে এটি অনলাইনে চেষ্টা করুন ।

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

প্যাটার্নের স্ট্রিংটি তিনবার পুনরাবৃত্তি হয় ( *3), ফলে প্যাটার্নটি তৈরি হয়

([^aeiou]+|.+ )([^aeiou]+|.+ )([^aeiou]+|.+ )

সমস্ত দৃষ্টান্তটি হয় স্বরবিহীন একটি শূন্য খালি স্ট্রিংয়ের সাথে, বা একটি ফাঁকা স্ট্রিংয়ের পরে একটি একক স্পেস অক্ষর মিলবে।

প্রথম উদাহরণটি প্রথম শব্দের শুরুতে ব্যঞ্জনবর্ণের সাথে মিলবে। যেহেতু +লোভী, তাই এটি যথাসম্ভব যথাক্রমে, যেমন প্রথম স্বর পর্যন্ত সমস্ত মিলানোর চেষ্টা করবে।

এই কারণে, দ্বিতীয় উদাহরণটি স্বরবর্ণে শুরু হবে, সুতরাং এটি প্রথম শব্দের বাকী অংশগুলির সাথে মিলবে, শব্দের পৃথক করে এমন স্থান পর্যন্ত including

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

কাঁচা স্ট্রিং \3\2\1( rপাইথনকে \3নিয়ন্ত্রণের অক্ষর ইত্যাদির বদলে প্রতিরোধ করে ) প্রথম বন্ধনের ধরণগুলির মিলগুলির ক্রমকে বিপরীত করে, অর্থাত্‍ এটি দ্বিতীয় শব্দের শুরুতে ব্যঞ্জনবর্ণগুলির সাথে তাদের প্রতিস্থাপন করে , তারপরে প্রথম স্বর থেকে সমস্ত অক্ষর প্রথম শব্দটি স্পেস পর্যন্ত এবং অবশেষে প্রথম শব্দের শুরুতে ব্যঞ্জনবর্ণগুলি।

sub( 1) -এর চূড়ান্ত যুক্তি দ্বিতীয় সফল শব্দটির বাকী অংশে অযৌক্তিক প্রতিস্থাপন এড়াতে প্রথম সফল প্রতিস্থাপনের সাথে সাথেই এটি ফিরিয়ে দেয়। এটি আবশ্যক যেহেতু প্যাটার্নটি তিন বা ততোধিক ধারাবাহিক ব্যঞ্জনের কোনও স্ট্রিংয়ের সাথে মেলে।


1
খুব দক্ষ রেগেক্সের সাথে পাইথনে রেজেক্স ম্যাজিক আনার জন্য অনুগ্রহের পক্ষ থেকে অভিনন্দন। খুব সুন্দর ব্যাখ্যা।
xnor

11

জাভাস্ক্রিপ্ট (ES6), 54 বাইট

s=>s.replace(r=/\b[^aeiou ]+/g,(_,i)=>s.match(r)[+!i])

ব্যাখ্যা

s=>
  s.replace(
    r=/\b[^aeiou ]+/g,     // r = regex to match consonants
    (_,i)=>s.match(r)[+!i] // replace consonants with the consonants from the other word
  )

পরীক্ষা

var solution = s=>s.replace(r=/\b[^aeiou ]+/g,(_,i)=>s.match(r)[+!i])
<input type="text" id="input" value="plaster man" />
<button onclick="result.textContent=solution(input.value)">Go</button>
<pre id="result"></pre>


ওহ, আমার খারাপ, আমি ভুল বুঝেছি। আমি matchবাড়ি ফিরে আসার জন্য এমডিএন ডক্সের এক ঝলক নেব
প্যাট্রিক রবার্টস

+!iকৌতুক একটা চমৎকার সমাধান। +1
ETH প্রোডাকশনগুলি

10

পাইথন 3, 108 101 99 বাইট

(রেজেক্সের কোনও ব্যবহার নেই)

এই ফাংশনটি 2 টি আর্গুমেন্টের মাধ্যমে ইনপুট প্রত্যাশা করে f('blushing','crow')। একটি টিপলে নতুন শব্দগুলি ফেরত দেয়।

S=lambda s,p="":s[0]in"aeiou"and(p,s)or S(s[1:],p+s[0])
def f(x,y):a,b=S(x);c,d=S(y);return c+b,a+d

অনেকগুলি রেগেক্স সমাধান রয়েছে, তাই আমি এমন কিছু লিখতে চেয়েছিলাম যা পাইথনের পুনরায় লাইব্রেরি ব্যবহার করে নি।

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

শুধুমাত্র জটিল অংশটি ল্যাম্বডা এক্সপ্রেশন S(সংক্ষেপের অর্থ " প্রথম স্বরটির আগে এস প্লিট")। এটি প্রদত্ত শব্দের উপরে পুনরাবৃত্তভাবে "পুনরাবৃত্তি" করে, যা একবারে একটি অক্ষরকে s(যা পুরো শব্দের সাথে শুরু হয়) শেষের দিকে p(যা খালি শুরু হয়) সরানো হয় । প্রথম স্বরটির মুখোমুখি হয়ে এটি ফিরে আসে (p,s), অর্থাৎ (উপসর্গ, প্রত্যয়)। লক্ষ্য করুন যে এটি পরামিতিগুলির সাথে তুলনা করে ভুল আদেশ!

আমি ভেবেছিলাম প্রত্যাবর্তিত আদেশটিকে উপসর্গ হিসাবে আরও জ্ঞান করা হয়েছিল, তারপরে প্রত্যয় (কারণ সাধারণত একটি উপসর্গ একটি প্রত্যয়ের আগে চলে যায়)। এই আদেশটি a,b=S(x)পড়তে কোডটিকে কিছুটা সহজ করতে পারে।

তবে ল্যাম্বদার প্যারামিটারগুলিতে আমার কাছে অর্ডার করার কোনও পছন্দ ছিল না, তাই আমি এর pআগে সংজ্ঞা দিতে পারি না s। প্রথম প্যারামিটার, s, ছিল কারণ সমগ্র শব্দ নিতে pডিফল্ট মান ছিল, এবং ডিফল্ট পরামিতি গত যান। এটি করে, আমার Sদুবার খালি স্ট্রিং দিয়ে ফাংশনটি কল করার দরকার পড়েনি এবং কয়েকটি বাইট সংরক্ষণ করা যায়। তবে, সম্ভবত এটি লম্বা এক্সপ্রেশনের মধ্যে ব্যবহৃত হওয়ায় বিপরীত ক্রমে উপসর্গ / প্রত্যয়টি ফিরিয়ে দেওয়া একটি খারাপ সিদ্ধান্ত ছিল।

ফাংশন উপর ল্যামডা মত প্রকাশের পছন্দ জন্য, এটা আরো বাইট বলতে লাগে def S(s,p=""):returnচেয়ে S=lambda s,p="":। আমি সেই পছন্দটি করতে পারি কারণ পাইথনের শর্ট সার্কিট মূল্যায়ন এবং টের্নারি অপারেটর রয়েছে। তবে আমি কীভাবে শর্ট সার্কিট ব্যবহার করেছি তা পর্যাপ্তভাবে ব্যাখ্যা করতে পারি না; এটি সম্পর্কে तर्क করা কঠিন।


এটি আমার প্রথম উত্তর। আমি আশা করি আমি এটি সঠিকভাবে করেছি এবং এটি জিততে পারে না এমন একটি সমাধান পোস্ট করার মতো মূল্য রয়েছে।

সম্পাদনা: ধন্যবাদ কমেন্টার্স: বাইট গণনাটি কিছুটা, দু'বার হ্রাস করেছে এবং অপ্রয়োজনীয় তথ্য সরিয়ে দিয়েছে। লেখার উন্নতির চেষ্টা করা হয়েছে। আশা করি কোন ভুল হয়নি।


পিপিসিজি-তে স্বাগতম, প্রথম প্রথম উত্তর :) শুধু এফআইআই, এই সাইটের বেশিরভাগ প্রোগ্রামগুলিতে অনুমানযোগ্য নতুন লাইন নেই, সুতরাং আপনাকে এটি উল্লেখ করার দরকার নেই (বিরল ক্ষেত্রে এটি যখন প্রয়োজন হয় তখনই লোকেরা এটি উল্লেখ করে)
আন্ডারগ্রাউন্ডোমোরিয়েল

3
প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! 1. আপনার ইনপুট ফর্ম্যাট সম্পর্কে চিন্তা করার দরকার নেই। চ্যালেঞ্জটি স্পষ্টভাবে বলেছে যে আপনি একটি তালিকা নিতে পারেন। ২. ট্যাগ উইকিতে উল্লিখিত খেলাপি প্রতি , আপনি গল্ফ চ্যালেঞ্জগুলির কোড বা সম্পূর্ণ প্রোগ্রাম বা ফাংশন জমা দিতে পারেন। এই বিশেষ সমস্যার জন্য, একটি ফাংশনটি 7 বাইট সংক্ষিপ্ত হওয়া উচিত।
ডেনিস

4
শেষ বাক্যটি সম্পর্কে, "আমি আশা করি [...] এমন কোনও সমাধান পোস্ট করতে পারে যা জিততে পারে না।" সেখানে অবশ্যই আছে! আমরা সবাই এখানে মজা করতে এবং অবদান রাখতে এবং একে অপরের কাছ থেকে শিখতে। নিয়মিত এক্সপ্রেশন ব্যবহার করা আরও সুস্পষ্ট সমাধান হওয়ায় আমি এই উত্তরটি বিশেষত চৌকস বলে মনে করি। খুব সুন্দর কাজ!
অ্যালেক্স এ।

একটি দুর্দান্ত প্রথম উত্তর। এটি নন-রেজেক্সের জন্য আমি যেভাবে এসেছি তার সাথে বেশ মিল। সংক্ষিপ্ত-সার্কিট যুক্ত যৌক্তিক অভিব্যক্তি ব্যবহার সম্পর্কে আপনার ভাল ধারণা ছিল এবং এগুলি কীভাবে কীভাবে করবেন সে সম্পর্কে আপনি নিজেকে ভাবতে চাইলেও এটি প্রকাশ করে যে তারা প্রকাশটি ছোট করতে পারে।
xnor

আপনি সত্যিকার অর্থেই পুনরাবৃত্ত সমাধান সমাধান করেছেন I খুব মার্জিতভাবে বাস্তবায়িত!
ওগাদে

9

সি # 6, 115 বাইট

string S(string a)=>System.Text.RegularExpressions.Regex.Replace(a,"([^aeiou]*)(.*) ([^aeiou]*)(.*)","$3$2 $1$4");

রেগেক্সের নামস্থানটি এত দীর্ঘ just


2
আমার গোশ যা ভার্জোজ।
কনর ও'ব্রায়ান

4
System.Text.RegularExpressions.Regex.Replace44 অক্ষর! +1 কারণ এটি অবশ্যই একরকম রেকর্ড হতে হবে।
স্তর নদী সেন্ট

2
... এবং এখন আপনার 44 সমস্যা আছে। ;)
ম্যাসন হুইলারের 21

9

সিজেম, 27 24 22 বাইট

2{l_{"aeiou"&}#/(N\}*o

আই / ও প্রতি লাইনে একটি শব্দ। এটি অনলাইন চেষ্টা করুন!

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

2{                 }*   Do the following twice:
  l                       Read a line from STDIN.
   _                      Push a copy.
    {"aeiou"&}#           Find the index of the first character that has a non-
                          empty intersection with the string "aeiou".
               /          Split the string into chunks of that size.
                (         Shift out the first chunk, i.e., all leading consonants.
                 N\       Swap the shifted out chunk with a linefeed.
                     o  Print the topmost stack item.

9

পার্ল, 33 বাইট

s/([^aeiou]+)(.+ )((?1))/\3\2\1/

উপরের কোডটি 32 বাইট দীর্ঘ এবং এতে -pস্যুইচ ( +1 বাইট ) প্রয়োজন।

প্রতিস্থাপনটি একটি @ ডিজিটালট্রামার রেটিনা জবাবের সাথে খুব মিল , তবে এই উত্তরটি পিসিআরই এর পুনরাবৃত্ত সাবপ্যাটার্নগুলির সুবিধা গ্রহণ করে ।

আইডিয়নে এটি অনলাইনে চেষ্টা করুন ।



8

জাভাস্ক্রিপ্ট ES6, 93 58 52 বাইট

ETHProductions ধন্যবাদ 6 বাইট সংরক্ষণ করা!

x=>x.replace(/([^aeiou]+)(.+ )([^aeiou]+)/,"$3$2$1")

এটা পরীক্ষা করো! (কেবলমাত্র ES6)


আপনি যখন এই সম্পাদনাটি তৈরি করেছেন তখন আমি আমার 58 বাইট সমাধানে পোস্টের উত্তরটি ক্লিক করতে
যাচ্ছিলাম

@ ব্যবহারকারী 81655 ওহ, দুঃখিত যে এটি এরকম ঘটেছিল।
কনর ও'ব্রায়ান

আপনার চতুর্থ ক্যাপচারিং গ্রুপ বা একেবারেই প্রয়োজন নেই $4;)
ETH প্রোডাকশনগুলি

@ এথ প্রডাকশন ওহ, হ্যাঁ! ধন্যবাদ!
কনর ও ব্রায়ান

7

সি, 255 201 199 বাইট

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

#define S(w,p)p=strpbrk(w,"aeiou")-w
#define c ;strcpy(r
#define l c+strlen(v[1])+b+1
main(int q,char**v){char r[64],S(v[1],a),S(v[2],b)c,v[2])c+b,v[1]+a);strcat(r," ")l-a,v[1])l,v[2]+b);puts(r);}

যদি প্রধান () প্রয়োজন না হয় তবে আমরা 249 বাইট সংরক্ষণ করতে পারি, 179 বাইটে পেয়ে

#define S(w,p)p=strpbrk(w,"aeiou")-w
#define c ;strcpy(r
#define l c+strlen(x)+b+1
s(char*x,char*y){char r[64],S(x,a),S(y,b)c,y)c+b, x+a);strcat(r," ")l-a,x)l,y+b);puts(r);}

Ungolfed:

void spoonerise(char* w1, char* w2)
{
    char rt[64];

    int p1 = strpbrk(w1, "aeiou")-w1;
    int p2 = strpbrk(w2, "aeiou")-w2;

    strcpy(rt, w2);
    strcpy(rt+p2, w1+p1);

    strcat(rt, " ");

    strcpy(rt+strlen(w1)+p2+1-p1, w1);
    strcpy(rt+strlen(w1)+p2+1, w2+p2);

    puts(rt);
}

সম্পাদনা: ফেয়ারসামের পরামর্শের জন্য আমি 54 বাইট সংরক্ষণ করেছি। = D:


আমি সন্ধানের পরামর্শ দিচ্ছি strpbrk
ফেয়ারসুম

+1 এটি একটি দুর্দান্ত প্রথম উত্তর। সাইটে স্বাগতম।
wizzwizz4

পুনর্নির্বাচিত @ ফার্সামের জন্য ধন্যবাদ। এবং স্বাগত @ wizzwizz4 এর জন্য ধন্যবাদ!
লিন্ড এস্যাসিনো

6

পাইথন 2, 364 352 269 251 বাইট

সম্পাদনা করুন: কুইস আমাকে 83 বাইট গল্ফ সাহায্য করার জন্য আপনাকে অনেক ধন্যবাদ!

আমাকে এই গল্ফ সাহায্য করুন! যাইহোক, কমপক্ষে আমি প্রথম পাইথন উত্তরদাতা। এবং আমি আশা করি আমি জাভা বীট করতে পারি, যদি কখনও জাভা উত্তর থাকে!

i=input()
f=l=''
A='aeiou'
for j in A:
 I=i[0];J=I.find(j)
 if ~J:
  if f:
   if f>I[0][:J]:f=I[:J];break
  else:f=I[:J]
for j in A:
 Y=i[1];J=Y.find(j)
 if ~J:
  if l:
   if l>Y[:J]:l=Y[:J];break
  else:l=Y[:J]
print I.replace(f,l,1),Y.replace(l,f,1)

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


5
একক-অক্ষর ভেরিয়েবলের বাইরে এটি গল্ফ করার চেষ্টা না করার জন্য -1
মেগো

@ মেগো আমি প্রতিশ্রুতি দিচ্ছি যে আমি সেই ASAP এ কাজ করছি। এখনই। তবে আমি একটি রেজেক্স সংস্করণে কাজ করছি।
তানমাথ

@ মেগো দয়া করে সম্পাদনা দেখুন।
তানমাথ

5

জাপট, 26 25 বাইট

ভাগ্যক্রমে, আমি কিছুদিন আগে জাপানের রেগেক্স বৈশিষ্ট্যে একটি স্বর শ্রেণি যুক্ত করেছি। দুর্ভাগ্যক্রমে, আমি একটি অ-স্বর শ্রেণি বা রেগেক্স স্ট্রিংগুলিতে ডাবল ব্যাকস্ল্যাশগুলির চারপাশের কোনও উপায় যোগ করি নি।

#¿s4 £Uf"[^\\v]+|.+
?" gX

¿কাঁচা গৃহস্থালির কাজ U + এ 0093 হতে হবে। ইনপুট একটি বহু-লাইন স্ট্রিং, একটি শব্দ / লাইন। এটি অনলাইন চেষ্টা করুন!

সম্পাদনা: আমি এখন নন-স্বর শ্রেণি \Vএবং এর সাথে একটি উপায় জুড়েছি \\(সাথে %), সুতরাং এই কোডটি এখন 21 বাইটের জন্য কাজ করে : ( এটি অনলাইনে চেষ্টা করুন )

#¿s4 £Uf"%V+|.+
?" gX

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

                     // Implicit: U = input string
#¿s4                 // Convert the char code (147) into a base-4 string "2103".
     £               // Map each char X in this string to:
      Uf"[^\\v]+|.+  //  Match each group in U of non-vowels or non-newlines,
?"                   //  with an optional trailing newline.
   gX                //  Get the item at position X in the resulting array.
                     // Implicit: output last expression

পুরানো সংস্করণ (26 বাইট):

UrA="\\b[^\\v ]+"@UfA gÂ!Y

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

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

UrA="\\b[^\\v ]+"@UfA gÂ!Y  // Implicit: U = input string
  A="\\b[^\\v ]+"           // Set variable A to this regex string, which matches
                            // a word boundary followed by one or more non-vowels.
UrA              @          // Take U and replace each match X of A and its index Y with:
                  UfA       //  Take U.match(A).
                      gÂ!Y  //  Get the item at index ~~!Y (converts 0 to 1, anything else to 0).
                            // Implicit: output last expression

আমি আশা করি মূলধারার ভাষাগুলিতে রেজিক্সগুলির জন্য একটি স্বর মেটা থাকত!
সিজে ডেনিস

4

পাইথন 3, 100 (বা 99) বাইট

import re
def f(*g):a,b=[re.split("[aeiou]",r)[0] for r in g];return b+g[0][len(a):],a+g[1][len(b):]

কয়েকটি সংস্করণ দিয়ে খেলেছে তবে এটি নীচে পেয়েছে বলে মনে হচ্ছে না। def f(g)পরিবর্তে এটি ব্যবহার করে এটি 99 বাইটে নামতে পারে তাই এটি দুটি পৃথক স্ট্রিংয়ের পরিবর্তে স্ট্রিংয়ের একটি তালিকা নেয় তবে আমি দুটি আরগ রাউকেই পছন্দ করি।

বিকল্প সমান দৈর্ঘ্য:

import re
s=re.split
def f(x,y):v="[aeiou]";a,b=s(v,x)[0],s(v,y)[0];return b+x[len(a):],a+y[len(b):]

@ ট্যানম্যাথ ব্যবহারের মতো আমি প্রতিস্থাপনের চেষ্টা করেছি, তবে আমি এর চেয়ে ছোটও পাই না। এছাড়াও, তানমথ তার "[aeiou]"পরিবর্তে বাইট ব্যবহার করে তার উত্তরটি সংক্ষিপ্ত করতে পারে "[aeiou]+"কারণ আমাদের কেবল একক দৃষ্টান্তগুলির সাথে মেলে প্রয়োজন। অবশেষে, input()পাইআই 2 এবং পাই 3 এর মধ্যে রূপান্তরিত হয়েছে বলে মনে হচ্ছে - এটি স্ট্রিনকে স্বয়ংক্রিয়ভাবে স্ট্রিং হিসাবে মূল্যায়ন করে।


1
সম্ভবত আপনি s=re.splitবিকল্প মানে ?
xnor

হ্যাঁ! স্পষ্টভাবে. এটি আমার প্রথমবারের মতো গল্ফ হয়, সুতরাং কোনও প্রতিক্রিয়া এবং পরামর্শ প্রশংসা করা হয়।
ওগাদে

1
1. প্রশ্ন স্পষ্টভাবে একটি তালিকা হিসাবে দুটি স্ট্রিং নিতে পারবেন, তাই কোন ভাল কারণ মনে করা হয় *যে *g। ২. দ্বিতীয় সংস্করণটি গল্ফ করা যায় lambda x,y,s=lambda s:re.split("[aeiou]",s)[0]:(s(y)+x[len(s(x)):],s(x)+y[len(s(y)):])
ডেনিস

ধন্যবাদ @ ডেনিস, এটি সত্যিই কার্যকর হয়েছে, দুর্দান্ত রিফ্যাক্টরিং। আকর্ষণীয় যে বন্ধনীগুলির প্রয়োজন, এবং আপনার কি দ্বিতীয় ল্যাম্বডায় আর্গ হিসাবে পাস করার দরকার নেই? যে সমাধান আমাকে 98 বাইট দেয়, একটি নেতৃস্থানীয় ইম্পোর্ট বিবৃতিটি এবং f=
ওগাদে

1
না, sএটি একটি ডিফল্ট যুক্তি, তাই আপনাকে এটি নির্দিষ্ট করতে হবে না। একটি নামহীন ল্যাম্বদা একটি গ্রহণযোগ্য জমা; f=এটা দরকারি না.
ডেনিস

4

সেড, 38 টি অক্ষর

s/([^aeiou]+)(.+ )([^aeiou]+)/\3\2\1/

রেটিনা সমাধান থেকে বর্ধিত নিয়মিত অভিব্যক্তি ব্যবহার করা ।

উপরেরটি 37 টি অক্ষর দীর্ঘ এবং এতে -rস্যুইচ (+1 অক্ষর) প্রয়োজন।

উদাহরণ:

$ cat input | tee /dev/tty | sed -r 's/([^aeiou]+)(.+ )([^aeiou]+)/\3\2\1/'
plaster man
blushing crow
litigating more
strong wrangler
def ghi
master plan
crushing blow
mitigating lore
wrong strangler
ghef di

প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম!
ডেনিস

3

সি # 6, 165 বাইট

string S(string a,string b){int i=V(a),j=V(b);return b.Remove(j)+a.Substring(i)+" "+a.Remove(i)+b.Substring(j);}int V(string s)=>s.IndexOfAny("aeiou".ToCharArray());

সম্প্রসারিত:

string S(string a,string b){
    int i=V(a),
        j=V(b);
    return b.Remove(j)+a.Substring(i)+" "+a.Remove(i)+b.Substring(j);
}
int V(string s)=>s.IndexOfAny("aeiou".ToCharArray());

এটি বেশ পুরানো, তবে -২ বাইটের জন্য "aeiou".ToCharArray()হতে পারে'a','e','i','o','u'
অজ্ঞতার

না, @ এম্বোডিমেন্টফ অজানা, IndexOfAnyএটি প্যারাম নেয় না, তাই এটি হওয়া দরকারnew[]{'a','e','i','o','u'}
হ্যান্ড-ই-ফুড

আহ, আমার ভুল, আমি ভেবেছিলাম IndexOfAnyএকটি পরম্পরার পদ্ধতি। যাইহোক, দুর্দান্ত উত্তর
অজ্ঞতার

3

𝔼𝕊𝕄𝕚𝕟, 24 অক্ষর / 42 বাইট

ïē/⟮(⁅ᶌ]+)⟯(.+ )Ⅰ/,`⑶⑵⑴`

Try it here (Firefox only).

আপনার যদি এটি বোঝার জন্য সাহায্যের প্রয়োজন হয় তবে এটি ES6 তে অনুবাদ করে

input.replace(/([^aeiou]+)(.+ )([^aeiou]+)/g,'$3$2$1')

এটি কোন ভাষায়? আমি এমনকি এর জন্য বক্স-অক্ষর পাচ্ছি।
জেসি উইলিয়ামস

@ জেসি উইলিয়ামস এটাকে ইএসমিন বলে
ইটিএইচ প্রোডাকশনস

এটি ভাল লাগবে যদি ইন্টারপ্রেটারের জাপটের মতো কিছু থাকে যেখানে এটি আপনাকে জেএস দেখায়
জেনেরিক ব্যবহারকারী

কোডটি চালিত হলে সংকলিত জেএস জেএস কনসোলে লগ হয়।
মামা ফান রোল

3

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

"$args "-replace('(.*?)([aeiou]\S+) '*2),'$3$2 $1$4'

e.g. 
PS C:\scripts\> .\Spoonerise.ps1 'blushing crow'
crushing blow

এটি চারটি ক্যাপচার গ্রুপ সহ একটি রেইজেক্স প্রতিস্থাপন; সঙ্গে:

  • স্ট্রিং গুণটি প্রসারিত করতে:
    • ('(.*?)([aeiou]\S+) '*2) প্রতি '(.*?)([aeiou]\S+) (.*?)([aeiou]\S+) '
  • "$args "তাই Regex মধ্যে চিহ্ন স্থান তা ভঙ্গ করা হবে না একটি স্ট্রিং মধ্যে বাহিনীর args অ্যারে, এবং একটি trailing স্থান যোগ করা হয়েছে।

3

জাভাস্ক্রিপ্ট (ES6), 120 107 102 101 99 92 বাইট

  • ধন্যবাদ ডাউনগোট!

প্যারামিটারগুলি যদি এর মতো কোনও বস্তু এবং পিছিয়ে থাকে: এটি অ্যাকাউন্টে নেয়:
var a = {x: "man", y:"plaster"]}

a.b=(e=>e.slice(e.search`[aeiou]`));with(a){c=b(x),d=b(y),x=x.replace(c,d);y=y.replace(d,c)}

.match(/[aeiou]/).indexহয়ে উঠতে পারে:.search`[aeiou]`
ডাউনগোট

3

পাইথন, 129 108 105 109 বাইট

এই প্রোগ্রামটি এই জাতীয় শব্দের একটি তালিকা গ্রহণ করে ["master","plan"]

সম্পাদনা : ধন্যবাদ @ উদ্বোধন

সম্পাদনা: এখন পুনরায় স্প্লিট ব্যবহার করা হয়

import re
a=re.split
c='[aeiou]+'
i,j=input()
f=a(c,i)[0]
l=a(c,j)[0]
print i.replace(f,l,1),j.replace(l,f,1)

এই উত্তরটি তাদের বেশিরভাগের মতোই রেজেক্স ব্যবহার করে।

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


নোট করুন যে একটি স্ট্রিংয়ের সমস্ত দৃষ্টান্ত str.replaceপ্রতিস্থাপন করে , তাই আপনি এটি রেখে এটি একটি প্রতিস্থাপনের মধ্যে সীমাবদ্ধ করতে চান । যাইহোক, আপনি ব্যবহার করে এবং রিবান্ডিং এবং একক অক্ষর ভেরিয়েবল দ্বারা একটি গুচ্ছ সংরক্ষণ করতে পারেন । .replace(f,l,1)i,j=input()re.findall'[^aeiou]+'
অস্থিরতা

এটি যেমন হয় তেমন কাজ করে না; এমনকি দুটি এক-বর্ণের শব্দ আপনাকে তিনটি অক্ষর দেবে এবং আপনি input()দুটি ভেরিয়েবলগুলিতে আনপ্যাক করার চেষ্টা করছেন । আপনি কি বোঝাতে চেয়েছিলেন i,j=input().split()(এবং raw_input()পাইথন 2 এ)?
ব্ল্যাকলাইট ঝকঝকে

1
@ ব্ল্যাকলাইটশায়ান শব্দটির কমপক্ষে একটি স্বর এবং একটি ব্যঞ্জনবর্ণ হওয়া দরকার। ইনপুটটি স্ট্রিংগুলির একটি তালিকা নেয় যাতে আমি প্রথম শব্দ এবং জে দ্বিতীয় হয়।
তানমাথ

@ ট্যানম্যাথ যতদূর আমি জানি যে এটি ডিফল্টরূপে অনুমোদিত, তবে আপনার সম্ভবত উত্তরের উত্তরটি কোথাও বলা উচিত যা এটি প্রয়োজন
আন্ডারগ্রাউন্ডোমোনাইল

এটি খুব বেশি প্রতিস্থাপন করে। "sass","bit" -> "babb", "sit"
xnor

3

জাভা 8, 343 বাইট

এখানে আপনার প্রথম জাভা-উত্তর রয়েছে। গল্ফিংয়ের সাথে অভিজ্ঞ এমন নয়, তাই প্রতিটি পরামর্শই প্রশংসিত!

java.util.function.Function;public class C{public static void main(String[] a){Function<String, Integer>f=s->{for(int i=0;i<s.length();++i)if("aeiou".contains(s.substring(i,i+1)))return i;return 0;};int i1=f.apply(a[0]),i2=f.apply(a[1]);System.out.println(a[1].substring(0,i2)+a[0].substring(i1)+" "+a[0].substring(0,i1)+a[1].substring(i2));}}

Ungolfed:

public class SpooneriseWords {
    public static void main(String[] args)
    {       
        Function<String, Integer> f = s -> {
            for(int i = 0; i < s.length(); ++i)
                if("aeiou".contains(s.substring(i, i + 1))) 
                    return i;
            return 0;
        };

        int i1 = f.apply(args[0]);
        int i2 = f.apply(args[1]);
        System.out.println(args[1].substring(0, i2) + args[0].substring(i1));
        System.out.println(args[0].substring(0, i1) + args[1].substring(i2));
    }
}

কি java.util.function.Function? আমি অত্যন্ত সন্দেহ করি যে এটি হওয়া দরকার, যদি না আপনি বোঝাতে চান তবে importআমদানিটি বাদ দিন কারণ আপনি কেবল একবার এটি উল্লেখ করেছেন। পরিবর্তন public class C{public static void Main(String[] a)করার জন্যinterface C{void Main(String[]a)
বিড়াল

Function<String, Integer>হোয়াইটস্পেসের প্রয়োজন নেই
বিড়াল

থেকে লুপ জন্য পরিবর্তন for(int i=0;i<s.length();++i)if("aeiou".contains(s.substring(i,i+1)))return i;করতেfor(int i=0;i++<s.length();if("aeiou".contains(s.substring(i,i+1))){return i;})
বিড়াল

i1একটি ভয়ানক, অনেক দীর্ঘতম নাম।
বিড়াল

এটি হল, আমদানিতে পরিবর্তন Function<String, Integer>করুন java.util.function.Function<String,Integer>এবং ড্রপ করুন
বিড়াল

3

অক্টাভা, 96 বাইট

অষ্টাভের ইনলাইন অ্যাসাইনমেন্ট এবং 'সূচক-যে কোনও জায়গায়' কার্যকারিতাটির জন্য ধন্যবাদ, এই পুরো জিনিসটি কেবল একটি একক, বেনাম ফাংশনের সংজ্ঞা। মূলত, আমরা কাট-অফ পয়েন্টগুলি aএবং এর মধ্যে সংরক্ষণ করার সময় স্পনারাইজড স্ট্রিংটিকে পুনর্গঠন করি b। আমি বিশেষত ইনলাইন ফাংশনটিতে খুশি f, যা কাট-অফ পয়েন্টটি খুঁজে পেয়েছে এবং পুরো ' find(ismember(a,b),1)' জিনিসটি দু'বার ব্যবহার করতে আমাকে বাধা দিয়েছে । এছাড়াও, কোন রেজেক্স :) নেই

@(p,q)[q(1:(a=(f=@(m)find(ismember(m,'aeoui'),1))(q))-1),p(b=f(q):end),32,p(1:b-1),q(a:end)];

2

টিস্ক্রিপ্ট , 27 বাইট

xg/(\w+)(.+ )(\w+)/,"$3$2$1

\wআসলে [^aeiou]


থাকুন, আপনি কি ডিফল্ট \wরেজেক্স মেটাতে পরিবর্তন করেছেন [^aeiou]? কেন?
ইটিএইচ প্রডাকশন

আমি যখন কাস্টম চর ক্লাস তৈরি করছিলাম তখন @ETH প্রোডাকশনগুলি। আমি ভুলে গিয়েছিলাম যে \wএটি ইতিমধ্যে জাভাস্ক্রিপ্ট দ্বারা ব্যবহৃত হয়েছিল। আমি শীঘ্রই এটিকে আবার পরিবর্তন করব
ডাউনগোট

2

এলিক্সির ,143 117 বাইট

s=fn w->String.split_at(w,elem(hd(Regex.run(~r/[aeiou]/,w,return: :index)),0))end
{v,w}=s.(a)
{x,y}=s.(b)
[x<>w,v<>y]

প্রথম স্বরটিতে দুটি স্ট্রিং (ক, খ) আলাদা করুন এবং ফিরে আসার জন্য নতুন স্ট্রিং তৈরি করুন।

সম্পাদনা: টিউপসগুলি elemথেকে মানগুলি পেতে আড়ম্বরপূর্ণ কলগুলির পরিবর্তে প্যাটার্ন ম্যাচিং ব্যবহার করে কয়েক বাইট বন্ধ পেয়েছে ।


2

জাভা, 147 বাইট

আমি ধরে নিচ্ছি ঠিক একটি ফাংশনও ঠিক আছে।

String s(String[]i){String r="[aeiou]",f=i[0].split(r)[0],s=i[1].split(r)[0];return s+i[0].substring(f.length())+" "+f+i[1].substring(s.length());}

split(regex)দুর্ভাগ্যক্রমে ডিলিমিটার গ্রাস করে, যার অর্থ substringপ্রত্যয় পেতে আমাকে ব্যবহার করতে হবে।


2

পাইথ, 30 28 বাইট

ইনপুট নেয় এবং দুটি শব্দের একটি তালিকা হিসাবে আউটপুট দেয়।

ACm,Kh:d"[aeiou]"3.-dKQ+V_GH

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


আমি আপনি যা খুঁজছেন মনে ACm,Kh:d"[aeiou]"3.-dKQ+V_GHAজি এবং এইচ-কে একটি দ্বি-উপাদান তালিকা নির্ধারণ করে এবং Cস্থানান্তর করে। আরও ভাল কিছু হতে পারে।
lirtosiast

2

পাইথন (কোনও রেজিক্স নেই), 85 বাইট

t=lambda s:s[1]in'aeiou'or-~t(s[1:])
lambda a,b:(b[:t(b)]+a[t(a):],a[:t(a)]+b[t(b):])

নমুনা রান:

>>> t=lambda s:s[1]in'aeiou'or-~t(s[1:])
>>> lambda a,b:(b[:t(b)]+a[t(a):],a[:t(a)]+b[t(b):])
<function <lambda> at 0x7f495e534398>
>>> _('plaster', 'man')
('master', 'plan')

tএটি একটি পুনরাবৃত্ত ফাংশন যা আর্গুমেন্টের প্রথম অক্ষরের পরে আদি স্বরবৃত্তের সূচককে গণনা করে s। যদি দ্বিতীয় s[1]বর্ণটি স্বর হয়, তবে এটির মূল্যায়ন হয় Trueযার intমূল্য রয়েছে 1। অন্যথায় এটি মুছে ফেলা প্রথম অক্ষরটির সাথে একটি পুনরাবৃত্ত কল করে এবং ফলাফল সূচকটিতে 1 যোগ করে -~(কারও পরিপূরকের দুটি যোগফল)। পরিশেষে, ফলাফলগুলি tস্পুনারিজম গণনা করার জন্য স্ট্রিং স্লাইসিংয়ের সূচক হিসাবে ব্যবহৃত হয়।


1

জিএনইউ অ্যাওক 4.0, 48 টি অক্ষর characters

split($0,a,/\<[^aeiou]+/,s)&&$0=s[2]a[2]s[1]a[3]

নমুনা রান:

bash-4.3$ for s in 'plaster man' 'blushing crow' 'litigating more' 'strong wrangler' 'def ghi'; do
>     echo -n "$s -> "
>     awk 'split($0,a,/\<[^aeiou]+/,s)&&$0=s[2]a[2]s[1]a[3]' <<< "$s"
> done
plaster man -> master plan
blushing crow -> crushing blow
litigating more -> mitigating lore
strong wrangler -> wrong strangler
def ghi -> ghef di

1

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

"$args"-replace'([^aeiou]+)(.*)\s([^aeiou]+)(.*)','$3$2 $1$4'

প্রতিটি শব্দের প্রথম অ-স্বরযুক্ত অক্ষরগুলি অদলবদল করতে রেজেক্স ব্যবহার করে

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