গারবে সেই স্ট্রিং!


20

ইনপুট হিসাবে একটি স্ট্রিং দেওয়া হয়েছে, স্ট্রিংয়ের এক বা একাধিক রূপ যেমন আউটপুট দেয়:

  • কোনও চরিত্র এটির আসল অবস্থানে নেই
  • কোনও অক্ষর এমন কোনও চরিত্রের সংলগ্ন নয় যা এটি মূলত সংলগ্ন ছিল

আপনি ধরে নিতে পারেন যে প্রদত্ত স্ট্রিংয়ের জন্য এটি সর্বদা সম্ভব হবে এবং কেবলমাত্র একক ক্ষেত্রে বর্ণানুক্রমিক অক্ষর থাকবে ( [a-z]বা [A-Z]যদি আপনি পছন্দ করেন)

নোট করুন যে একই চরিত্রের সদৃশগুলি অনন্য হিসাবে বিবেচিত হবে না।

উদাহরণস্বরূপ, ইনপুট প্রদত্ত programming, আউটপুটটিতে m7 তম বা 8 ম অক্ষর থাকতে পারে gএবং চতুর্থ বা 11 তম অক্ষর (1 সূচকযুক্ত) থাকতে পারে না

উদাহরণ:

স্ট্রিং নিন abcdef

নিম্নলিখিতটি একটি বৈধ আউটপুট হবে: daecfb

তবে নিম্নলিখিত অবৈধ বলে হবে: fdbcaeএই উদাহরণ হিসাবে cএবং bএখনও সংলগ্ন হয়।

অন্তিক এছাড়াও গোপন, যার অর্থ আপনি যেত না fdbecaযেমন fএবং aএখনও সংলগ্ন হয়।

Testcases:

নোট করুন প্রদত্ত ইনপুটগুলির জন্য এগুলি একমাত্র বৈধ আউটপুট নয়

হিসাবে লিখিত input -> output:

helowi -> ioewhl
mayube -> euabmy
stephens -> nhseespt
aabcdeffghij -> dbfhjfigaeca

স্কোরিং:

এই তাই অল্পসংখ্যক পরিষেবা বাইট প্রতিটি ভাষার মধ্যে জিতেছে!


No character is adjacent to a character that it was originally adjacent to। অর্ডার সংলগ্নতার জন্য গুরুত্বপূর্ণ নয়? সুতরাং ইনপুট "abcd" এর কোথাও "আব" থাকতে পারে না, এবং কোথাও "বা" থাকতে পারে না?
DrZ214

@ DrZ214 এটি সঠিক
স্কিডসদেব

উত্তর:


5

জেলি , 24 23 বাইট

ẋ2ṡ2Ṣ€
dzǤœ&¬ɓ³=Sȯ
ẊÇ¿

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

জেলিতে আমার ভয়ঙ্কর হওয়ার কারণে অত্যন্ত দীর্ঘ, তবে এটি অবশেষে কাজ করে, কমপক্ষে ... এখনও গল্ফিংয়ের প্রক্রিয়াধীন।

link that generates a list of sorted adjacent pairs:
ẋ2            duplicate argument ("abc" -> "abcabc")
  ṡ2          slices of 2 (-> "ab","bc","ca","ab","bc")
    Ṣ€        sort each

link that tests for invalid permutations:
Ç             get sorted adjacent pairs of argument
 ³Ç¤          do the same for the original input
    œ&        set intersection, then...
      ¬       ...inverse; i.e. do they have no elements in common
       ɓ   ȯ  logical OR the result of that with...
        ³=    elementwise equality with original input, and...
          S   ...sum; i.e. are some characters in the same position

main link:
Ẋ             shuffle the input list
  ¿           while
 Ç            the result of the previous link is truthy


এই জেলি জন্য সত্যিই দীর্ঘ হতে পারে, কিন্তু তার অত্যন্ত ছোট অন্য সব কিছুর জন্য (এবং 05AB1E সম্ভাব্য ব্যতিক্রম কয়েক অন্যান্য উন্মাদ golfing ভাষার সঙ্গে।)
Gryphon - পুনর্বহাল মনিকা

হ্যাঁ এটি অত্যন্ত ছোট, আমি জেলিও এই গল্ফভাবে এটি করার আশা করিনি, এমনকি 05AB1E এর ভুল সমাধান যা মূল চর অবস্থানটি যাচাই করে না 45 বাইট ছিল
স্কিডদেব

জেলি দ্বারা দূষিত আরও একটি মোড আছে। দুঃখজনক.
23 এএম শায়খাগুলি coinheringaahing

3

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

from itertools import*
x=input()
g=lambda m:set(zip(m*2,(m*2)[1:]))
for l in permutations(x):
 if not((g(l)|g(l[::-1]))&(g(x)|g(x[::-1]))or any(a==b for a,b in zip(x,l))):print`l`[2::5]

এটি অনলাইন চেষ্টা করুন!
সমস্ত বৈধ স্ট্রিং মুদ্রণ


পরীক্ষিত mayube, stephensএবং helowi, সকলের জন্য কাজ করছে বলে মনে হচ্ছে 3. যদিও আরও কিছু নিবিড় পরীক্ষা করার জন্য আমাকে একটি আউটপুট বৈধকরণকারী তৈরি করতে হবে
স্কিডেদেব

সময় নির্ধারণ করা হয়েছে aabcdeffghij, তবে এর অর্থ এটি কার্যকর হয় না, কেবলমাত্র এই
ইনপুটটির

আমার মেশিনে "আবদদেফগিজ" চালাতে দীর্ঘ সময় লাগে। এখনও পর্যন্ত> 2 মিনিট এটি দেখতে একাধিক অনুক্রমের প্রিন্টের মতো দেখায়, যা অনুমান অনুসারে নয়।
চার্লস

রড - আপনি এর সাথে কিছু বাইট সংরক্ষণ করতে পারেনprint next(l for l in permutations(x) if not((g(l)|g(l[::-1]))&(g(x)|g(x[::-1]))or any(a==b for a,b in zip(x,l))))
চার্লস

@ নোটহাট চার্লস আপনি `l`[2::5]= /
রড

3

পিএইচপি> = 7.1, 147 বাইট

for($a=$argn,$r="^$a[-1].*$a[0]$",$k=0;$v=$a[$k];)$r.="|^.{{$k}}$v|$v".($l=$a[$k++-1])."|$l$v";for(;preg_match("#$r#",$s=str_shuffle($a)););echo$s;

পিএইচপি স্যান্ডবক্স অনলাইন

পিএইচপি> = 7.1, 184 বাইট

রিজেক্স উপায়ের পরিবর্তে লেভেনস্টাইন দূরত্ব ব্যবহার করুন

for($a=$argn;$v=$a[$k];$r[]=$l.$v)$r[]=$v.($l=$a[$k++-1]);for(;!$t&&$s=str_shuffle($a);)for($t=1,$i=0;$v=$s[$i];$t*=$v!=$a[$i++])foreach($r as$x)$t*=levenshtein($x,$s[$i-1].$v);echo$s;

পিএইচপি স্যান্ডবক্স অনলাইন

পিএইচপি , 217 বাইট

7.1 এর অধীনে সংস্করণ

for($l=strlen($a=$argn),$r=$a[$k=0].$a[$l-1]."|".$a[$l-1]."$a[0]|^{$a[$l-1]}.*$a[0]$";$v=$a[$k];!$k?:$r.="|$v".$a[$k-1],++$k<$l?$r.="|$v".$a[$k]:0)$r.="|^.{{$k}}$v";for(;preg_match("#$r#",$s=str_shuffle($a)););echo$s;

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


ওহে আমার it
শ্বর

কেন এটি কাজ করবে না? আমি প্রতিটি সম্ভাব্য রেইগেক্স তৈরি করি। যদি এটি মেলে না তবে স্ট্রিংটি এটি মেলে না
জার্গ হালসারম্যান

অপেক্ষা করুন, ব্যর্থ হলে helowi, আউটপুট ioewlh, iএবং hসংলগ্ন হয়
Skidsdev

@ মাইউব ঠিক আছে যে এখন শেষ
কেসটি

হ্যাঁ,
ওপিতে

3

ব্র্যাচল্যাগ , 21 বাইট

p.jP;?z≠ᵐ&j¬{s₂p~s}P∧

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

ব্যাখ্যা

আমি সত্যিই p.;?z≠ᵐ&j¬{s₂p~s~j}2 বাইট কমের জন্য কাজ করতে চাইতাম , তবে এটি ~jযথেষ্ট স্মার্ট নয় ...

p.jP;?z≠ᵐ&j¬{s₂p~s}P∧  Input is a string, say ? = "asdfgha"
p                      Take a permutation of ?, say "sfagadh".
 .                     It is the output.
  j                    Concatenate it to itself: "sfagadhsfagadh"
   P                   Call that string P.
    ;?                 Pair P with the input: ["sfagadhsfagadh","asdfgha"]
      z                Zip, repeating elements of the longer string:
                        [["s","a"],["f","s"],["a","d"],...,["a","g"],["d","h"],["h","a"]]
       ≠ᵐ              Each pair must have different elements.
         &             Start new predicate
          j            Concatenate ? to itself: "asdfghaasdfgha"
           ¬{     }    The following cannot be satisfied:
             s₂        Take a substring of length 2
               p       and permute it.
                ~s     It is a substring of
                   P   P.
                    ∧  Do not unify P with the output.

2

পিএইচপি 7.1, 136 131 বাইট

জর্গের সমাধান দ্বারা অনুপ্রাণিত :

for($a=$argn;$c=$a[$k];)$r.="|$c".($d=$a[$k-1])."|$d$c|^.{".+$k++."}$c";while(preg_match("#$a$r#",($s=str_shuffle($a)).$s));echo$s;

পাইপ হিসাবে চালান -rবা এটি অনলাইনে পরীক্ষা করুন । (নিশ্চিত করুন যে পিএইচপি সংস্করণ 7.1 বা তার বেশি বাছাই করা হয়েছে)

পিএইচপি 7.1 প্রয়োজন; পুরোনো পিএইচপি জন্য 14 বাইট যোগ করুন: প্রতিস্থাপন $k-1সঙ্গে ($k?:strlen($a))-1;
(দুই পিএইচপি <5.3 জন্য আরো বাইট: $k?$k-1:strlen($a)-1)

ভাঙ্গন

# A: loop through input to collect sub-expressions
for($a=$argn;$c=$a[$k];)
    $r.="|$c".($d=$a[$k-1])     # 1. pair of characters
        ."|$d$c"                # 2. reversed pair
        ."|^.{".+$k++."}$c";    # 3. $c is at k-th position
# B: shuffle input until regex does not match the result
while(preg_match("#$a$r#",($s=str_shuffle($a)).$s));    # (input as dummy sub-expression)
# C: print result
echo$s;

@ জার্গহলসারম্যান আরও অনেক কিছু;)
টাইটাস

@ জার্গহলসারম্যান র‌্যাপিং কেসটি প্রথম পুনরাবৃত্তিতে ( $c=$a[$k=0], $d=$a[$k-1]) মাধ্যমে পরিচালনা করা হয় $s.$s
তিতাস

ঠিক আছে দুর্দান্ত কৌশল
Jörg Hülsermann

1

পিএইচপি 7.1, 187 185 172 178 143 বাইট

do for($r=str_shuffle($s=$argn),$p=$i=0;$c=$s[$i];$p+=($c==$z)+preg_match("#$a|$b#",$s.$s))$b=strrev($a=$r[$i-1].$z=$r[$i++]);while($p);echo$r;

পাইপ হিসাবে চালান -rবা এটি অনলাইনে পরীক্ষা করুন । (নিশ্চিত করুন যে পিএইচপি সংস্করণ 7.1.0 বা তার বেশি বাছাই করা হয়েছে!)

ভাঙ্গন

do
    for($r=str_shuffle($s=$argn),   # 2. shuffle input
        $p=$i=0;$c=$s[$i];          # 3. loop through input
        $p+=($c==$z)                        # 2. set $p if char is at old position
            +preg_match("#$a|$b#",$s.$s)    #    or if adjacency occurs in input
    )
        $b=strrev($a=$r[$i-1].$z=$r[$i++]); # 1. concat current with previous character
while($p);                          # 1. loop until $p is falsy
echo$r;                             # 4. print

ইনপুটের ব্যর্থ mayube, আউটপুট yeuamb, mএবং aসংলগ্ন হয়
Skidsdev

1
এছাড়াও আপনার অনলাইন টেস্টার খুব ভাল বলে মনে হচ্ছে না, প্রতিটি টেস্টকেস আমি 3 সেকেন্ডের পরেই টাইমআউট চেষ্টা করেছি
স্কিডেদেব

@ মাইউব আমি উল্লেখ করতে ভুলে গেছি: পিএইচপি সংস্করণ 7.1
টিটাস

1

রুবি, 110 97 102 বাইট

->s{x=s.chars
t=s*2
x.shuffle!while s.size.times.any?{|i|a,b=(x*2)[i,2];a==s[i]||t[a+b]||t[b+a]}
x*''}

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


এটি "মোড়ানো" সংলগ্নতার নিয়ম অনুসরণ করে না; উদাহরণস্বরূপ, আমি 3594817062আপনার টিআইও লিঙ্কে একটি আউটপুট হিসাবে পেয়েছি ।
ডোরকনবব

@ ডুরকনব ঠিক করা হয়েছে!
ডানিরো

1

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

f=x=>(h=[...x].sort(_=>Math.random(z=0)-.5)).some(y=>y==x[z]||(x+x).match(y+(q=h[++z]||h[0])+'|'+q+y))?f(x):h.join``

f=x=>(h=[...x].sort(_=>Math.random(z=0)-.5)).some(y=>y==x[z]||(x+x).match(y+(q=h[++z]||h[0])+'|'+q+y))?f(x):h.join``

console.log (f('abcdef'));


1

স্ট্যাক্স , 23 21 বাইট

å╘┤‼¬½P¥ë└w↕⌐î◘E{╟u!Ö

চালান এবং অনলাইন ডিবাগ!

2 বাইট সংরক্ষণ করার জন্য @ রিসার্সিভের জন্য ধন্যবাদ।

চালাতে খুব দীর্ঘ সময় নেয় T আরও যুক্তিসঙ্গত / সম্ভাব্য সংস্করণটি (মাত্র 2 বাইট দীর্ঘ)

Ç≡╨áiS║çdèû.#-Gî☺└╨◙σφ+

চালান এবং অনলাইন ডিবাগ!

ব্যাখ্যা

ব্যাখ্যা করার জন্য আনপ্যাক করা সংস্করণ ব্যবহার করে।

w|Nc_:=nGyG|*{E-!f+}ch+2B
w                            Loop anything before `}` while
 |N                          Next permutation (starting from the input)
   c_:=                      Index where the current array has the same element as the input (*)
                   }ch+2B    Define a block that finds all contiguous pairs in current string, including the pair `[last element, first element]`
       nG                    Apply the defined block to current string                         
         yG                  Do the same for the input
           |*                Outer product, contains pairs (which themselves are pairs) constructed from the last two array.
             {   f           Only keep pairs
              E-!            whose two elements have the same set of characters
                  +          Prepend the array at step (*).
                             This is used as the condition for the while loop

খুশী হলাম। আপনি ব্যবহার করে করতে পারেন এমন একটি উন্নতি আছে G। আপনি {...}X!...x!একই ব্লকটি দু'বার কার্যকর করার জন্য করছেন । সাধারণভাবে, আপনি এই যেমন পুনর্লিখন করতে G...G সঙ্গে }... প্রোগ্রাম শেষে মত, এই
পুনরাবৃত্তি

ধন্যবাদ. আমি দেখেছি আপনি ব্যবহার Gপ্রতিস্থাপন পর এক বাইট সংরক্ষণ করতে অন্য একটা পোস্টে {...}*সঙ্গে D...। আমার ধারণা আমি এখনও এটির জন্য খুব
অভ্যস্ত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.