Garlandification


38

গারল্যান্ড ওয়ার্ডস

একটি মালা শব্দের অর্থ একটি মাল যা মালার মতো একসাথে জড়িত হতে পারে, কারণ এটি একই অক্ষর দিয়ে শেষ হয় যা এটি শুরু হয়। এই গ্রুপগুলির চিঠিগুলি ওভারল্যাপও করতে পারে!

উদাহরণস্বরূপ, undergroundএটি একটি মালা অর্ডার শব্দ 3, কারণ এটি শুরু হয় এবং একই 3 টি অক্ষর দিয়ে শেষ হয় und,। এর অর্থ এটি একসাথে জড়িত হতে পারে undergroundergrounderground...

alfalfaএকটি মালা শব্দ, খুব! এটি অর্ডার 4 It এটি শুরু হয় এবং শেষ হয় alfa। এটা একত্র তাই মত অভিমানী করা যেতে পারে: alfalfalfalfa

এমন একটি প্রক্রিয়া যা আমি মালাটিকে বলি সেখানে আপনি যখন nকোনও মালা শব্দের ক্রম নির্ধারণ করেন , আপনি মূল শব্দটি গ্রহণ করেন এবং এটিটিকে মালা nবার হিসাবে লুপ করার জন্য প্রয়োজনীয় বিভাগটি যুক্ত করেন । সুতরাং, যেহেতু onionএকটি অর্ডার 2মালা শব্দ, আপনি নিতে হবে onion, 2পেতে প্রথম অক্ষরগুলি কাটা ionএবং শেষ 2সময় যোগ করতে onionionion

উদ্দেশ্য

এমন একটি প্রোগ্রাম বা ফাংশন তৈরি করুন যা স্ট্যান্ডার্ড ইনপুট বা কোনও ফাংশন আর্গুমেন্ট থেকে ইনপুট নেয় এবং শব্দটি প্রিন্ট করে বা প্রত্যাবর্তন করে, মালা হয়।

সমস্ত শব্দ ছোট হাতের অক্ষর হবে এবং একটি শব্দের সর্বোচ্চ সম্ভাব্য ক্রম length(word) - 1

উদাহরণ I / O

"onion"       --> "onionionion"
"jackhammer"  --> "jackhammer"
"abracadabra" --> "abracadabracadabracadabracadabracadabra"
""            --> ""
"zvioz"       --> "zviozvioz"
"alfalfa"     --> "alfalfalfalfalfalfa"
"aaaa"        --> "aaaaaaa"

এটি , তাই কমপক্ষে সংখ্যা বাইট জেতে।


2
যে কোনও এন-অক্ষর শব্দের সাথে শুরু হয় একই এন অক্ষর দিয়ে শুরু হয়। সর্বাধিক আদেশ কী বিবেচনা করা উচিত?
ফেয়ারস

@ ফেয়ারসাম সর্বাধিক ক্রমটি শব্দের দৈর্ঘ্য - ১. এটি মূল পোস্টে যুক্ত করা হয়েছে।
কেদে

আমাকে কি শুধু মালা ছাপতে হবে? বা আমি সম্ভবত এটি এবং একটি ব্যতিক্রম মুদ্রণ করতে পারেন?
ডেডচেক্স

@ ডেডচেক্স কোনও ব্যতিক্রম হওয়া উচিত নয়।
কেডে

1
@ লুইস মেন্ডো এটি নির্বিচারে দীর্ঘ শব্দের জন্য কাজ করা উচিত।
কেদে

উত্তর:


12

পাইথ, 19 18 বাইট

+z*>Kf!xz>zT1zl>zK

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার জোতা

ব্যাখ্যা:

+z*>Kf!xz>zT1zl>zK   implicit: z = input string
     f      1        find the first number T >= 1, which satisfies:
         >zT            all but the first T chars of z
       xz               index of ^ in z
      !                 == 0
    K                store in K
                     the order is length(z) - K
   >K        z       the last K chars
  *                  repeated
              l>zK   len(all but the last K chars) times
+z                   insert z at the beginning

14

পাইথন, 60 বাইট

f=lambda s,i=1:s.find(s[i:])and f(s,i+1)or(len(s)-i)*s[:i]+s

ভাল জন্য আশা ছিল, কিন্তু ওহ ভাল। s.findজায়গায় জায়গায় ঝরঝরে কাজ করে not s.startswith


12

রেটিনা , 58 বাইট

.+
$0#$0
(.*)(.+)#.*\1$
$0#$1#$2-
+`\w#(\w*)-
#$1-$1
#.*-
<empty line>

প্রতিটি লাইনের নিজস্ব ফাইলে যাওয়া উচিত তবে আপনি -sপতাকা সহ একটি ফাইল হিসাবে কোড চালাতে পারেন ।

চারটি প্রতিস্থাপনের জুটি নিম্নলিখিতগুলি অনুসরণ করে:

  • সদৃশ শব্দ যাতে আমরা ওভারল্যাপগুলিও অনুসন্ধান করতে পারি।
  • orderঅক্ষরের সংখ্যায় বিভক্ত শব্দটি যুক্ত করুন ।
  • শেষ অংশ orderবার যোগ করুন।
  • আসল শব্দ এবং সর্বশেষে সংযুক্ত অংশটি রাখুন এবং সমস্ত কিছু বাদ দিন।

স্ট্রিং উদাহরণ হিসাবে বলা হয়েছে onion:

onion
onion#onion
onion#onion#on#ion-
onion#onion##ion-ionion
onionionion

10

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

g s=[b>>a|(a,b)<-map(`splitAt`s)[1..],and$zipWith(==)s b]!!0++s

পরীক্ষা:

λ: g "onion"       == "onionionion"
True
λ: g "jackhammer"  == "jackhammer"
True
λ: g "abracadabra" == "abracadabracadabracadabracadabracadabra"
True
λ: g ""            == ""
True
λ: g "zvioz"       == "zviozvioz"
True
λ: g "alfalfa"     == "alfalfalfalfalfalfa"
True
λ: g "aaaa"        == "aaaaaaa"
True

10

জাভা, 160 157 বাইট

static void g(String s){int i=s.length(),o;for(String p=s;i-->0;)if(s.endsWith(s.substring(0,i))){for(o=i;o-->0;)p+=s.substring(i);System.out.print(p);i=0;}}

ইনপুট আউটপুট:

 g("abracadabra"); --> "abracadabracadabracadabracadabracadabra"

পাঠযোগ্যতার জন্য ব্যবধানযুক্ত এবং ট্যাবড:

static void g(String s){
int i=s.length(),o;
for(String p=s;i-->0;)
    if(s.endsWith(s.substring(0,i))){
        for(o=i;o-->0;)
            p+=s.substring(i);
        System.out.print(p);
        i=0;
    }
}

পরামর্শ স্বাগত জানাই।


আমার নিজের কাছে একটি নোট হিসাবে, স্ট্রিং
অপসকে

কেন করবেন না i=0;?
ওভাররেেক্টর

@ প্রেমিকা কোথায়? আমি দৈর্ঘ্যটি ব্যবহার করার কারণটি হ'ল আমি সম্পূর্ণ স্ট্রিং চাই এবং তারপরে আমি এর কারও দিকেই যেতে চাই না, সাবস্ট্রিং সহ আমি মনে করি না যে আমি এই পদ্ধতিতে এটি ব্যবহার করা এড়াতে পারব এবং এর জন্য বাইট পেনাল্টি নেব
ডেডচেক্স

2
আমি লুপের জন্য বাইরের বাইরে ভাঙ্গা বোঝাতে চাইছিলাম।
ওভাররেেক্টর

8

সেড: 87 84 টি অক্ষর

(83 টি অক্ষর কোড + 1 অক্ষর কমান্ড লাইন বিকল্প))

h
s/(.*)./& \1/
T
s/(.+) \1.*/ \1 \1/
t
g
q
:
s/^([^ ]+)(.*)[^ ]$/\1 \1\2/
t
s/ //g

নমুনা রান:

bash-4.3$ sed -r 'h;s/(.*)./& \1/;T;s/(.+) \1.*/ \1 \1/;t;g;q;:;s/^([^ ]+)(.*)[^ ]$/\1 \1\2/;t;s/ //g' <<< 'underground'
undergroundergroundergrounderground

সেড উত্তরের স্বয়ংক্রিয় upvote ;-)। আপনার লেবেল সংজ্ঞা এবং শাখা থেকে 2 টি অক্ষর ছাড়ার জন্য এই টিপ অনুসরণ করুন
ডিজিটাল ট্রমা

চেষ্টা করা হয়েছে, তবে আমি আশঙ্কা করছি যে পরামর্শ কেবলমাত্র সেই ক্ষেত্রে রয়েছে যখন আপনার কোডের শেষের দিকে লেবেল-কম জাম্প না থাকে। [কিছুটা পরে ...] ঠিক আছে, আবার ভাবছি, কেন আমি এক সাথে একাধিক ইনপুট লাইন প্রক্রিয়া করার চেষ্টা করেছি?
manatwork

7

সিজেএম, 24 23 বাইট

q_:Q,{~)Q>Q\#!},W>~_Q>*

q_:Q                       e# Read the input, take a copy and store it in Q too
    ,{        },           e# Take the length of the input and filter [0 .. len - 1] array
      ~)                   e# Same as number * -1
        Q>                 e# Take last number characters. Call this string S
          Q\#!             e# See if Q starts with S. After the filter, we will only have
                           e# those numbers from [0 .. len - 1] array which are valid orders
                W>~        e# Take the last order number, if exists.
                   _Q>*    e# Garlandify the input order times.

এটি কিছু দিয়ে শুরু করার জন্য ..

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


5

মতলব: 97 89 82 বাইট

ফাংশন যা লুকবিহীন এবং ক্যাপচার গ্রুপের সাথে নিয়মিত প্রকাশ করে:

function t=f(s)
n=sum(regexp(s,'(.*$)(?<=^\1.+)'))-1;t=[s(repmat(1:n,1,end-n)) s];

যে sumখালি স্ট্রিং ইনপুট (ধর্মান্তরিত হ্যান্ডেল করতে প্রয়োজন হয় []মধ্যে 0)।

উদাহরণ:

> f('onion'), f('jackhammer'), f('abracadabra'), f(''), f('zvioz'), f('alfalfa'), f('aaaa')
ans =
onionionion
ans =
jackhammer
ans =
abracadabracadabracadabracadabracadabra
ans =
   Empty string: 1-by-0
ans =
zviozvioz
ans =
alfalfalfalfalfalfa
ans =
aaaaaaa

4

REGXY, 53 49 বাইট

REGXY ব্যবহার করে , একটি রেজেক্স প্রতিস্থাপন ভিত্তিক ভাষা

//$'#/
/.(.+)#\1\K/#/
a/(#).(.*#)|#.*/$'$1$2/
//a

ওভারভিউ: বেশ কয়েকটি নিয়মিত অভিব্যক্তি প্রয়োগ করা হয়। একটি উদাহরণ রান দেখতে হবে:

onion (input)
onion#onion (line 1 regex)
onion#on#ion (line 2 regex - find the repeated section and separate with #)
onionion#n#ion (line 3 regex - the length of the middle token is the garland order, remove a character and append the third token onto the original string on the left)
onionionion##ion (line 4 regex is a pointer to line 3 - repeat the previous again)
onionionion##ion (line 4 regex is a pointer to line 3 - strip everything after and including the #)

বিস্তারিত ব্যাখ্যা নীচে রেজিজেসগুলির লাইন বিভাজনের একটি লাইন রয়েছে:

//$'#/

এটি একটি রেজেক্স বিকল্প যা প্রথম খালি স্ট্রিংয়ের সাথে মেলে (অর্থাত্ স্ট্রিংয়ের শুরু) এবং ম্যাচের ডানদিকে ( $'হ্যাশ) এর পরে সবকিছু দিয়ে এটি প্রতিস্থাপন করে । উদাহরণস্বরূপ, এটি রূপান্তরিত onionহবে onion#onion

/.(.+)#\1\K/#/

এই লাইন অধ্যায় যা # (পূর্ববর্তী অবিলম্বে অক্ষরের একটি দলের জন্য তাকিয়ে ওভারল্যাপ খুঁজে বের করে (.+)) যা # ওপারে একই ( \1)। \ কে এর অর্থ কেবল 'আমি যে কোনও কিছুর সাথে মিলে গেছি তা ভুলে যাও' অর্থাত্ এটি বাস্তবে প্রতিস্থাপন করা হবে না। এটি কার্যকরভাবে, এর অর্থ আমরা ওভারল্যাপটি সন্ধানের পরে পরিবর্তিত onion#onionহয়ে পজিশনে কেবল একটি # যুক্ত করব onion#on#ion

a/(#).(.*#)|#.*/$'$1$2/

প্রারম্ভিক 'এ' হ'ল রেগেক্সের জন্য কেবল একটি লেবেল। এর পরে, আমরা প্রথম একক অক্ষর ( .) অনুসরণ করি এবং এর পরে পরবর্তী # ( .*#) পর্যন্ত সমস্ত কিছু ক্যাপচার করি । আমরা এটি ম্যাচের ডানদিকে সর্বশেষ টোকেন ($ ') এর পরে একটি # ( $1) এর পরে, দ্বিতীয় টোকেনের চেয়ে কম অক্ষর অনুসরণ করব (আমরা একে কাউন্টার হিসাবে বিবেচনা করি, এটি প্রতিটি পুনরাবৃত্তি হ্রাস করে)। # আয়ন উপর পেঁয়াজ # ক্ষেত্রে, দুই টোকেন আমরা backreference বন্ধনীর মধ্যে দেখানো হয়, এবং অধ্যায় সমগ্র Regex ম্যাচ পাইপ মধ্যে হল: onion|(#)o(n#)|ion। তারপরে আমরা (পাইপের মধ্যে) যে বিটগুলি খেলি (প্রতিস্থাপন করব ম্যাচের $'ডানদিকে সমস্ত কিছু, অর্থাৎ 'আয়ন') দিয়ে, তারপরে $ 1 (#), তারপরে $ 2 (এন #), যার অর্থ আমরা শেষ onion|(ion)(#)(n#)|ion(বন্ধনী প্রদর্শন) প্রতিস্থাপনের স্ট্রিংয়ে তিনটি টোকেন)।

যদি রেজেক্স প্রথম বিকল্পে (পাইপের আগে সমস্ত কিছু) মিলতে ব্যর্থ হয় তবে অবশ্যই আমাদের কাউন্টারের শূন্যের পরিমাণ হ্রাস পেয়েছে, যার অর্থ দ্বিতীয় টোকেনের ভিতরে কোনও অক্ষর নেই। পরিবর্তে, আমরা প্যাটার্ন দ্বিতীয় অংশ তাকান #.*,। এটি প্রথম # এর পরে সমস্ত কিছু সহজেই প্রতিস্থাপন করে $'$1$2। যেহেতু এই বিকল্পটির দ্বারা তৈরি কোনও পশ্চাদগ্রহ নেই এবং ম্যাচের ডানদিকে কিছুই নেই ( .*স্ট্রিং শেষ হওয়া পর্যন্ত ম্যাচ), তাই আমরা ম্যাচটি সমাপ্ত করে ফলাফলটি ফিরিয়ে দেব ।

//a

এটি পূর্ববর্তী লাইনের কেবলমাত্র একটি পয়েন্টার, এটি নিশ্চিত করে যে আমরা আর কোনও রেটিং মেলে না ফেলা পর্যন্ত রেজেক্স সাবস্টিটিউশন কার্যকর করি।


3

jq 1.5: 91 টি অক্ষর

(87 টি অক্ষর কোড + 4 অক্ষর কমান্ড লাইন বিকল্প।)

.+. as$t|[range(1;length)|select($t[:.]==$t[-.:])]|(max//0)as$i|[range($i)|$t[$i:]]|add

নমুনা রান:

bash-4.3$ jq -R -r -f judy.jq <<< 'underground'
undergroundergroundergrounderground

3

আরএস , 51 48 বাইট

(.+)/\1 \1
(.+)(.+) .+\1$/\1(\2)^^((^^\1_))
 .*/

এটি নিন, রেটিনা এবং বীজ !!!!! ;)

@ রেন্ডোমাকে ধন্যবাদ 3 বাইট কেটে দিন।

লাইভ ডেমো এবং পরীক্ষার কেস।

লক্ষ করুন যে jackhammerপরীক্ষার কেস নেই। ওয়েব ইন্টারফেসে ফাঁকা স্থান পরিচালনা করার ক্ষেত্রে একটি ত্রুটি রয়েছে যার কারণে এটি ভুল আউটপুট মুদ্রণ করে। অফলাইন সংস্করণ rsএটি সঠিকভাবে পরিচালনা করে।

51-বাইট সংস্করণ:

(.+)/\1 \1
^(.+)(.+) (.+)\1$/\1(\2)^^((^^\1_))
 .*/

আসল জন্য লাইভ ডেমো এবং পরীক্ষার কেস।


টুইটারে ধন্যবাদ!
kirbyfan64sos

2

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

f=s=>{for(e=i=s.length;i&&e;)s+=s.slice(--i).repeat(!(e=!s.endsWith(s.slice(0,i)))*i);return s}

ডেমো

এখনই ফায়ারফক্স:

f = s => {
  for (e = i = s.length; i && e;) s += s.slice(--i).repeat(!(e = !s.endsWith(s.slice(0, i))) * i);
  return s
}

console.log = x => X.innerHTML += x + '\n';

console.log(f('onion'));
console.log(f('jackhammer'));
console.log(f('abracadabra'));
console.log(f(''));
console.log(f('zvioz'));
console.log(f('alfalfa'));
console.log(f('aaaa'));
<pre id=X></pre>


2

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

g=(s,i=t=s.length)=>s.endsWith(c=s.slice(0,--i))?c+s.slice(i-t).repeat(i+1):g(s,i)

[আমার মূল উত্তরটি মুছে ফেলা হয়েছে, কারণ আমি এখন ES6 শিখেছি এবং এই চ্যালেঞ্জটির পুনরাবৃত্ত সমাধান সমাধান করতে আগ্রহী]

উদাহরণ

g=(s,i=t=s.length)=>s.endsWith(c=s.slice(0,--i))?c+s.slice(i-t).repeat(i+1):g(s,i)

console.log(g('onion'));
console.log(g('jackhammer'));
console.log(g('abracadabra'));
console.log(g(''));
console.log(g('zvioz'));
console.log(g('alfalfa'));
console.log(g('aaaa'));


1

কফিস্ক্রিপ্ট + ES6, 77 বাইট

আমার জাভাস্ক্রিপ্ট উত্তর হিসাবে একই পদ্ধতির।

f=(s,e=i=s.length)->s+=s[i..].repeat !(e=!s.endsWith s[...i])*i while--i&&e;s

0

সি

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv) {
    char *str   = NULL;
    char *p     = NULL;
    int len     = 0 ;
    int i       = 0;
    int j       = 0;
    int k       = 0;
    int loop    = 0;

    if (argc == 1 )
        return 0;

    str = argv[1];
    len = strlen(str);

    if (len %2) {
        loop = len/2 + 1;
    }
    else {
        loop = len/2;
    }


    p = &str[len/2];
    for (i = 0; i < loop ; i++) {
        if (str[k] == *(p++)) {
            k++;
        }
        else
            k = 0;
    }

    printf("k = %d\n", k);
    printf("%s", str);
    p = &str[k];
    for (j =0; j < k ; j++) {
        printf("%s", p);
    }
    return 0;
}

গল্ফড: 195 বাইট - জিসিসি

main(int c,char**a){
char *s=a[1],*p;int i=0,j=0,k=0,z,l=strlen(a[1]);
z=l%2?-~(l/2):l/2;p=&s[l/2];
for(;i<z;i++)k=s[k]==*(p++)?-~k:0;
printf("k=%d\n",k);puts(s);p= &s[k];
for(;j<k;j++)puts(p);}

5
প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! এই প্রশ্নটি কোড গল্ফ, সুতরাং আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি আপনার কোডটি "গল্ফ" অপ্রয়োজনীয় সাদা স্থান ইত্যাদি মুছে ফেলে, এবং তারপরে ভাষার সাথে আপনার পোস্টের শিরোনামে আপনার কোডের বাইট গণনা অন্তর্ভুক্ত করুন।
lirtosiast

1
বুঝেছি. দিকনির্দেশের জন্য আপনাকে ধন্যবাদ। আমি পরের বার এটি মনে রাখব।
আলম

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

নন intসি (এর পর্যাপ্ত পুরানো সংস্করণ) এ অন্তর্নিহিত?
মনিকা পুনরায় ইনস্টল করুন

0

গ্রোভি 75 57 55 বাইট

f={w->x=w;w.find{x-=it;!w.indexOf(x)};w+(w-x)*x.size()}

পরের দিন কীভাবে কিছু ফিরে আসতে সহায়তা করতে পারে তা আশ্চর্য

Ungolfed:

f = {w ->

//Set x equal to w
    x=w

//Loop through the characters of w until we return true
    w.find {

//set x equal to x minus the first instance of the current character, i.e.     the word minus the first character
        x-=it

//Returns the index of the first occurance of the string of chars x, when this is 0 (false) we want to return true, so negate it
        !w.indexOf(x)
    }

//When we've escaped the loop, if we've found a match return the word plus the word minus the match multiplied by the lengh of the match.
    w+(w-x)*x.size()     
}

-1

যদি কারও জেএসে কোডটি পরীক্ষা করার প্রয়োজন হয় needs দ্রষ্টব্য: আমি দক্ষতা বাড়াতে স্ট্রিংটি শেষ থেকে পেরিয়েছি:

"use strict";

var garlandify = function(inputString){
    var stringLength = inputString.length;  
    var savedString = inputString;

    for( var i=1; i<stringLength; i++ ){
         var endIndex = Math.abs(i) * -1;       
         if( inputString.startsWith( inputString.substr(endIndex) ) ){
              for( var j=1; j<=i; j++){
                  savedString += inputString.substr(i, stringLength );
              }
              console.log(savedString);         
         }  
    }
};

garlandify("onion");

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