ম্যাজিক ইমেল রূপান্তর! অথবা: এনএসএকে আপনার ইমেল ঠিকানা থেকে আপনার মেটাডেটা বের করতে সহায়তা করুন


17

একটি ইমেল ঠিকানা দেওয়া, সেই ইমেল ঠিকানায় প্রয়োগ হওয়া একটি রূপান্তরের ফলাফল এবং দ্বিতীয় ইমেল ঠিকানার ফলে দ্বিতীয় ইমেল ঠিকানায় প্রয়োগ করা একই রূপান্তরের আউটপুট ফিরিয়ে দেয়।

ইমেল ঠিকানাগুলির সকলের নীচের কাঠামো থাকবে:

অক্ষরযুক্ত দৈর্ঘ্যের একটি স্ট্রিং যেখানে অক্ষরযুক্ত অক্ষর রয়েছে এবং সর্বাধিক এক .(স্থানীয় অংশ), তার পরে একটি @প্রতীক এবং তারপরে ধনাত্মক দৈর্ঘ্যের একটি স্ট্রিং থাকে যা অক্ষরে অক্ষের (ডোমেন) থাকে এবং তার পরে একটি থাকে. চিহ্ন থাকে এবং ধনাত্মক দৈর্ঘ্যের চূড়ান্ত স্ট্রিং থাকে বর্ণমালা অক্ষর (টিএলডি) ধারণ করে।

এখানে অনুমোদিত চারটি রূপান্তর রয়েছে:

  • পরিচয় (কোনও পরিবর্তন নেই)। (a.b@c.d -> a.b@c.d )
  • কেবল স্থানীয় অংশে ফিরে আসা (সমস্ত কিছু আগে @ ) অবিস্মরণিত ( a.b@c.d -> a.b) ফিরিয়ে দেওয়া ।
  • উপর স্থানীয় অংশ বিভক্ত ফিরে . অর্ধেকের প্রথম প্রতীকটি যদি উপস্থিত থাকে । ( a.b@c.d -> A B)।
  • কেবলমাত্র ডোমেন ( @অ্যান্ড ফাইনালের মধ্যেকার সমস্ত কিছুই .) অশোধিত Return ( a.b@c.d -> c)।

যখন একাধিক রূপান্তর সম্ভব হয়, আপনি যে কোনও সম্ভাবনার আউটপুট দিতে পারেন। আউটপুটের শুরুতে এবং শেষে হোয়াইটস্পেসের বিষয়টি বিবেচনাধীন নয়, তবে মাঝখানে (যেমন a.bআপনি A Bসেখানে বিভক্ত হয়ে গেলে মাঝখানে কেবল একটি স্থান থাকতে হবে [এবং আউটপুটের শুরুতে এবং শেষে কোনও সংখ্যা]), তবে আপনি বিভক্ত হলে a., তারপরে Aউভয় পক্ষের যেকোন সংখ্যক স্পেসই সমস্ত গ্রহণযোগ্য।

উদাহরণ ( input | output):

john.doe@gmail.com, John Doe, phillip.maini@gmail.com         | Phillip Maini
John.Doe@gmail.com, John Doe, Phillip.Maini@gmail.com         | Phillip Maini
foo.bar@hotmail.com, foo.bar, gee.whizz@outlook.com           | gee.whizz
foo.bar@hotmail.com, foo.bar, gEe.Whizz@outlook.com           | gEe.Whizz
rodney.dangerfield@comedy.net, comedy, michael.scott@office.0 | office
.jones@x.1, Jones, a.@3.z                                     | A
.jones@x.1, .jones@x.1, a.@3.z                                | a.@3.z
.jones@x.1, .jones, a.@3.z                                    | a.
.jones@x.1, x, a.@3.z                                         | 3
.@b.c, .@b.c, 1@2.3                                           | 1@2.3
john.jones@f.f, John Jones, 1in.thehand@2inthe.bush           | 1in Thehand
chicken.soup@q.z, Chicken Soup, fab@ulou.s                    | Fab
lange@haare.0, lange, fat.so@fat.net                          | fat.so
Lange@haare.0, Lange, fat.so@fat.net                          | {fat.so, Fat So} # either acceptable
chicken@chicken.chicken, chicken, horse@pig.farm              | {horse, pig} # either acceptable

সাধারণ নিয়ম এবং ফাঁকগুলি প্রযোজ্য।


শেষ পরীক্ষার কেস "ঘোড়া" ফেরা উচিত নয়? কেন এটি পরিবর্তে "শুকর" ফিরিয়ে দিতে পারে তা আমি দেখতে পাচ্ছি না।
এরিক দি আউটগল্ফার

3
@ এরিকথ আউটগল্ফার কারণ চতুর্থ রূপান্তরটি কেবলমাত্র ডোমেনকে ফিরিয়ে দেওয়া ( @শেষ এবং চূড়ান্ত অংশ .)। যেহেতু স্থানীয় অংশ এবং ডোমেন উভয়ই তাই chickenএটি
দ্বিগুণ

ওহ, আমি এটি ভুল ব্যাখ্যা করেছিলাম।
এরিক দ্য আউটগল্ফার

আমাদের কী প্রয়োজন যে প্রাসঙ্গিক ইনপুটটি সমস্ত ক্ষেত্রে স্থানের সাথে ফর্ম্যাট করা উচিত (যেমন পরীক্ষায় যেখানে আউটপুটটি A[একটি পিছনের স্থানের সাথে রয়েছে) যে দ্বিতীয় ইনপুট Jones[শীর্ষস্থানীয় স্থানের সাথে] হবে)?
জোনাথন অ্যালান

আমি বুঝতে পারছি না কেন .jones@x.1, Jones, a.@3.zহয় A- যদি jonesমিলেছে হয় মানে ম্যাচিং অংশ প্রথম সময়সীমা এবং @ চিহ্ন মধ্যে অংশ। তবে এটির ফলে একটি খালি স্ট্রিং তৈরি হবে কারণ aএটি প্রথম সময়ের আগে এবং পরে নয়।
জেরি যেরেমিয়া 0

উত্তর:


4

জাভা 8, 254 240 236 বাইট

(a,b,c)->{String A[]=a.split("@"),C[]=c.split("@"),x="";for(String p:C[0].split("\\."))x+=(p.charAt(0)+"").toUpperCase()+p.substring(1)+" ";return a.equals(b)?c:A[0].equals(b)?C[0]:A[1].split("\\.")[0].equals(b)?C[1].split("\\.")[0]:x;}

-4 বাইটস @ লুক্স স্টিভেনসকে ধন্যবাদ

ব্যাখ্যা:

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

(a,b,c)->{                  // Method with three String parameters and String return-type
  String A[]=a.split("@"),  //  Split `a` by "@" into two parts
         C[]=c.split("@"),  //  Split `c` by "@" into two parts
         x="";              //  Temp-String
  for(String p:C[0].split("\\.")) 
                            //  Loop over the first part of `c`, split by dots
    x+=                     //   Append String `x` with:
       (p.charAt(0)+"").toUpperCase()
                            //    The first character as uppercase
       +p.substring(1)      //    + the rest of the String
       +" ";                //    + a space
                            //  End of loop (implicit / single-line body)
  return a.equals(b)?       //  If input `a` and `b` are exactly the same:
    c                       //   Return `c`
   :A[0].equals(b)?         //  Else-if the first part of `a` equals `b`:
    C[0]                    //   Return the first part of `c`
   :A[1].split("\\.)[0].equals(b)?
                            //  Else-if the domain of `a` equals `b`
    C[1].split("\\.)[0]     //   Return the domain of `c`
   :                        //  Else:
    x;                      //   Return String `x`
}                           // End of method

1
(p.charAt(0)+"").toUpperCase()পরিবর্তে ব্যবহার করে আপনি 4 বাইট ছুঁড়ে ফেলতে পারেন Character.toUpperCase(p.charAt(0))
লুক স্টিভেন্স

@ লুক্সটিভেনস ধন্যবাদ! আমার (char)(p.charAt(0)&~32)প্রথমে ছিল , কিন্তু 1in Thehandপরীক্ষার কেসের কারণে এটি কার্যকর হয়নি । তবে স্ট্রিং হিসাবে এটিকে বড় করে তোলা প্রকৃত চেয়ে কম খাটো Character.toUpperCase, তাই ধন্যবাদ!
কেভিন ক্রুইজসেন

3

হাস্কেল , 208 বাইট

import Data.Char
s c""=[]
s c a=w:f t where
 (w,t)=span(/=c)a
 f(_:y)=s c y
 f _=[]
h=head
u""=""
u(x:y)=toUpper x:y
l=h.s '@'
f x y=h[t|t<-[id,l,unwords.filter(/="").map u.s '.'.l,h.s '.'.last.s '@'],t x==y]

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

এটি দুঃখজনক যে আমাকে পুনর্নির্মাণ split( s) পুনর্নির্মাণে 59 বাইট ব্যয় করতে হয়েছিল ।

সমাধানটি রূপান্তরগুলির একটি তালিকা তৈরি করে এবং প্রথমটি প্রত্যাশিত ফলাফলের দিকে নিয়ে যায়।


সাইটে স্বাগতম! আমি হাস্কেলকে চিনি না, তবে নিউলাইনস এবং স্পেসগুলির মতো কোনও শ্বেত স্পেস অক্ষর মুছে ফেলা কি সম্ভব?
কেয়ার্ড কোইনরিঙ্গিংহিং

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

এছাড়াও অফ মোনাদস অ্যান্ড মেনে আমাদের সাথে যোগ দিতে নির্দ্বিধায় , গল্ফ করার জন্য এবং চ্যাট হাস্কেলের সাধারণ আলোচনার জন্য একটি চ্যাট রুম।
লাইকনি

3

জেলি , 40 বাইট

অগ্রক্রয়াধিকার-সংক্রান্ত ধন্যবাদ এরিক Outgolfer ব্যবহারের ব্যর্থতা ঠাহর জন্য Œtঅত: পর (শিরোনাম-কেস) এবং Œu1¦€KওভারŒtK

-1 থেকে বাইট ধন্যবাদ এরিক Outgolfer (তার পুনর্বিন্যাস ⁵⁸ç⁹¤Ŀকরার çµ⁵⁸Ŀ)


ÑṪṣ”.Ḣ
ṣ”@
ÇḢ
Çṣ”.Œu1¦€K
⁹ĿðЀ5i
çµ⁵⁸Ŀ

একটি পূর্ণ প্রোগ্রাম গ্রহণ exampleEmail, exampleOutput, realEmailএবং ফলাফল মুদ্রণ।

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

কিভাবে?

চারটি রূপান্তর সম্পাদন করে (প্লাস একজন পূর্বসূরী), প্রথম ইমেলটি থেকে উদাহরণটি প্রথম পাওয়া যায় এবং এটি দ্বিতীয় ইমেলটিতে প্রয়োগ করে:

            - Link 1, do nothing: email
            - do nothing but return the input

ÑṪṣ”.Ḣ      - Link 2, the domain: email
Ñ           - call the next link (3) as a monad (split at "@")
 Ṫ          - tail
  ṣ”.       - split at "."
     Ḣ      - head

ṣ”@         - Link 3, split at @: email
ṣ”@         - split at "@"

ÇḢ          - Link 4, local part: email
Ç           - call the last link (3) as a monad (split at "@")
 Ḣ          - head

Çṣ”.Œu1¦€K  - Link 5, name-ified: email
Ç           - call the last link (4) as a monad (get the local part)
 ṣ”.        - split at "."
       ¦€   - for €ach sparsley apply:
      1     - ...to index: 1
    Œu      - ...action: uppercase
         K  - join with space(s)

⁹ĿðЀ5i     - Link 6, index of first correct link: exampleEmail; exampleOutput
   Ѐ5      - map across (implicit range of) 5 (i.e. for each n in [1,2,3,4,5]):
  ð         -   dyadicly (i.e. with n on the right and exampleEmail on the left):
 Ŀ          -     call referenced link as a monad:
⁹           -     ...reference: chain's right argument, n
      i     - first index of exampleOutput in the resulting list

çµ⁵⁸Ŀ       - Main link: exampleEmail; exampleOutput
ç           -   call the last link (6) as a dyad (get the first "correct" link index)
 µ          - monadic chain separation (call that L)
   ⁸        - chain's left argument, L
    Ŀ       - call the link at that reference as a monad with input:
  ⁵         -   program's third input, realEmail

মন্তব্য:

  1. অনুমান ইনপুট উদাহরণ আউটপুট কঠোরভাবে আউটপুট হবে একই।

  2. "পূর্বসূরী" (লিঙ্ক 3 এর ফলাফল) এর সাথে মিলের জন্য পরীক্ষা করা হয় exampleOutputতবে এটি না মিললে মিলবে নাexampleOutput নিজেই অক্ষরগুলির তালিকার তালিকা । যেমন ইনপুট সম্ভবত উদ্ধৃত করা উচিত (পাইথন ফর্ম্যাটিং এখানে ব্যবহার করা যেতে পারে) এর ব্যাখ্যা এর সম্ভাবনা এড়াতে।



2

পাইথন 2 , 135 বাইট

s,r,x=input()
def f(x):S,D=x.split('@');return x,S,' '.join(map(str.capitalize,S.split('.'))),D.split('.')[0]
print f(x)[f(s).index(r)]

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


-3 বাইট সরানো স্ট্রিপ দ্বারা
ovs

@ ধন্যবাদ ধন্যবাদ, যাইহোক এর প্রয়োজনীয়তা অপসারণের জন্য নিয়ম পরিবর্তন করা হয়েছে
এরিক দ্য আউটগল্ফার 31:48

2

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

কারিরিং সিনট্যাক্স, যেমন উদ্বোধন করুন f('chicken.soup@q.z')('Chicken Soup')('fab@ulou.s')

x=>y=>[x=>x,s=x=>x.split`@`[0],x=>s(x).split`.`.map(w=>w&&w[0].toUpperCase()+w.slice(1)).join` `.trim(),x=>/@(.+)\./.exec(x)[1]].find(f=>f(x)==y)




1

সিজেম, 42

q~@{[_\'@/~'./0=\_'.%{(eu\+}%S*]}:T~@a#\T=

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

ব্যাখ্যা:

q~        read and evaluate the input (given as 3 quoted strings)
@         bring the first string to the top of the stack
{…}:T     define a function T that calculates the 4 transformations of a string:
  [       begin array
  _\      duplicate the string, and swap with the other copy to bring it in the array
           (1st transformation)
  '@/~    split by '@' and put the 2 pieces on the stack
  './0=   split the 2nd piece by '.' and keep the first part
           (4th transformation)
  \_      swap with the piece before '@' and duplicate it
           (2nd transformation)
  '.%     split by '.', removing the empty pieces
  {…}%    transform the array of pieces
    (eu   take out the first character and capitalize it
    \+    prepend it back to the rest
  S*      join the pieces by space
           (3rd transformation)
  ]       end array
~         execute the function on the first string
@a        bring the 2nd string to the top of the stack, and wrap it in an array
#         find the position of this string in the array of transformations
\T        bring the 3rd string to the top and call function T
=         get the transformation from the array, at the position we found before

1

পিএইচপি 7.1, 176 বাইট

<?$e=explode;[,$p,$q,$r]=$argv;echo$p==$q?$r:($e('@',$p)[0]==$q?$e('@',$r)[0]:($e('.',$e('@',$p)[1])[0]==$q?$e('.',$e('@',$r)[1])[0]:ucwords(join(' ',$e('.',$e('@',$r)[0])))));

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

পিএইচপি <7.1, 180 বাইট

7.1 অধীনে সংস্করণ পরিবর্তন করতে হবে [,$p,$q,$r]=$argvকরতে list(,$p,$q,$r)=$argv, 4 বাইট যোগ করা হয়েছে।


1

জিএনইউ সেড , 105 + 1 (আর পতাকা) = 106 বাইট

প্রথম তিনটি sকমান্ড যথাক্রমে পরিচয় , স্থানীয় অংশ এবং ডোমেন রূপান্তর পরীক্ষা করে। যদি একটি রূপান্তর মেলে, তবে এটি দ্বিতীয় ইমেল ঠিকানার সাথে প্রয়োগ করা হয় এবং sইনপুট বিন্যাসের অভাবে নিম্নলিখিত কমান্ডগুলি ব্যর্থ হবে।

s:^(.*),\1,::
s:(.*)@.*,\1,(.*)@.*:\2:
s:.*@(.*)\..*,\1,.*@(.*)\..*:\2:
s:.*,([^.]*)\.?(.*)@.*:\u\1 \u\2:

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

স্থানীয় অংশ বিভক্ত রূপান্তর (শেষ sকমান্ড) বাইট পরিপ্রেক্ষিতে, চেক সবচেয়ে ব্যয়বহুল, তাই আমি শেষে স্থাপন করেছিলেন এবং অধিকৃত মিলবে (যেহেতু অন্যান্য বেশী যে সময় দ্বারা ব্যর্থ হয়েছে), তার প্রয়োগ সরাসরি যাচ্ছে।


1

জেলি , 43 বাইট

ḢŒlṣ”.Œu1¦€K
ṣ”@Wẋ4j”@$ḷ/ÇṪṣ”.Ḣ$$4ƭ€
Çiị⁵Ǥ

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


3 সংরক্ষণের ŒtKজায়গায় কাজ করবে Œu1¦€K?
জোনাথন অ্যালান 21

... আর দরকার কী Œl?
জোনাথন অ্যালান

h আহ আমি দেখছি যে 1in.thehandএটি সঙ্গে কাজ করবে না ŒtK
জোনাথন অ্যালান

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