Eine Zeichenfolge verbergen

371

In dieser Herausforderung müssen Sie eine Zeichenfolge verwenden, die dem regulären Ausdruck entspricht ^[a-zA-Z]+$oder was auch immer sinnvoll ist (Sie müssen keine Groß- oder Kleinbuchstaben berücksichtigen, wenn Sie möchten) (Sie können davon ausgehen, dass die Zeichenfolge lang genug ist und für alle die richtige Struktur aufweist Operationen) und geben eine weitere Zeichenfolge aus, die ähnlich wie das Wort am Ende eines kürzlich von POTUS ( "Despite the constant negative press covfefe") veröffentlichten dadaistischen Tweets erzeugt wurde .

So verstecken Sie einen String:

Holen Sie sich zuerst die erste Klanggruppe (zusammengesetzte Terminologie).

Wie machst Du das? Gut:

  • Finde den ersten Vokal ( yist auch ein Vokal)

      v
    creation
    
  • Finden Sie danach den ersten Konsonanten

        v
    creation
    
  • Entfernen Sie den Rest der Zeichenfolge

    creat
    

Das ist deine erste Soundgruppe.

Nächster Schritt:

Holen Sie sich den letzten Konsonanten der Soundgruppe

t

und ersetzen Sie es durch die stimmhafte oder stimmlose Version. Suchen Sie dazu den Buchstaben in dieser Tabelle. Ersetzen Sie durch den angegebenen Buchstaben (der möglicherweise der gleiche Buchstabe ist).

b: p
c: g
d: t
f: v
g: k
h: h
j: j
k: g
l: l
m: m
n: n
p: b
q: q
r: r
s: z
t: d
v: f
w: w
x: x
z: s

also bekommen wir

d

Nehmen Sie dann den nächsten Vokal nach diesem Konsonanten. Sie können davon ausgehen, dass sich dieser Konsonant nicht am Ende der Zeichenfolge befindet. Verbinde diese beiden und wiederhole es dann zweimal:

didi

Verketten Sie dies mit der ersten Klanggruppe:

creatdidi

Sie haben es geschafft: Die Zeichenfolge ist verdeckt, und Sie können sie jetzt ausgeben.

Testfälle:

coverage: covfefe

example: exxaxa

programming: progkaka (the a is the first vowel after the g, even though it is not immediately after)
code: codtete

president: preszizi

Dies ist , also machen Sie bitte Ihr Programm so kurz wie möglich!

Zerstörbare Zitrone
quelle
7
"x" sollte technisch auf "gz" abgebildet werden. "qu" sollte auf "gw" abgebildet werden.
Steve Bennett
2
Dies spezifiziert ein Konzept der Verdeckung, aber ich bin der Meinung, dass ein Verweis auf Douglas Hofstadters (und Melanie Mitchells) Arbeit über String-Konversions-Analogien, z. B. in Fluid Concepts , angemessen erscheint.
Mars
59
Antworten über 140 Zeichen sollten disqualifiziert werden
Sandy Gifford
12
Leider ist dies in TrumpScript nicht möglich :(
4
@ThePlasmaRailgun Es war ein Witz, da Tweets maximal 140 Zeichen lang sein dürfen.
Esolanging Fruit

Antworten:

91

Jelly ,  58  57 Bytes

<TḢị
e€Øyµ¬TĖEÐḟḢṪ;ç¥T
ḣÇḢ⁸ÇịµḢØYiị“ßȷ%Hẹrȧq’œ?ØY¤⁾cgy;ẋ2

Ein vollständiges Programm, das eine Liste von Kleinbuchstaben akzeptiert und das Ergebnis druckt.

Probieren Sie es online!

Wie?

<TḢị - Link 1, extract first value from y not less than x: number, x; list of numbers, y
     -                                                     e.g. 5, [3,4,7]
<    - x less than vectorised across y                             [0,0,1]
 T   - truthy indices                                              [    3]
  Ḣ  - head                                                             3
   ị - index into y                                                     7

e€Øyµ¬TĖEÐḟḢṪ;ç¥T - Link 2, indices of the letters to manipulate: list of characters, w
  Øy              - vowel+ yield = "AEIOUYaeiouy"                 e.g.  "smouching" 
e€                - exists in for €ach letter in w                       001100100
    µ             - monadic chain separation, call that v
     ¬            - not vectorised across v                              110011011
      T           - truthy indices                                       12  56 89
       Ė          - enumerate                      [[1,1],[2,2],[3,5],[4,6],[5,8],[6,9]]
         Ðḟ       - filter discard if:
        E         -   elements are equal                       [[3,5],[4,6],[5,8],[6,9]]
           Ḣ      - head                                        [3,5]
            Ṫ     - tail                                           5
                T - truthy indices of v                                    34  7
               ¥  - last 2 links as a dyad
              ç   -   call last link (1) as a dyad                         7
             ;    -   concatenate                                     5,7
                  -                                    ...i.e the indexes of 'c' and 'i'

ḣÇḢ⁸ÇịµḢØYiị“ßȷ%Hẹrȧq’œ?ØY¤⁾cgy;ẋ2 - Main link: list of characters, w
                                   -                             e.g.  "smouching"
 Ç                                 - call the last link (2) as a monad    [5,7]
ḣ                                  - head to index (vectorises)      ["smouc","smouchi"]
  Ḣ                                - head                             "smouc"
                                   -   implicit print due to below leading constant chain
   ⁸                               - link's left argument, w
    Ç                              - call the last link (2) as a monad    [5,7]
     ị                             - index into w                         "ci"
      µ                            - monadic chain separation, call that p
       Ḣ                           - head p                               'c'
        ØY                         - consonant- yield = "BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz"
          i                        - first index                          22
                          ¤        - nilad followed by link(s) as a nilad:
            “ßȷ%Hẹrȧq’             -   base 250 number = 1349402632272870364
                        ØY         -   consonant- yield = "BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz"
                      œ?           -   nth permutation  = "BCDFGHJKLMNPQRSTVWXZpctvkhjglmnbqrzdfwxs"
           ị                       - index into         (special case ->) 'c'
                           ⁾cg     - literal ['c','g']
                              y    - translate (change 'c's to 'g's)      'g'
                               ;   - concatenate with the headed p        "gi"
                                ẋ2 - repeat list twice                    "gigi"
                                   - implicit print ...along with earlier = smoucgigi
Jonathan Allan
quelle
13
Das ist unglaublich ...
Klangen
Unglaubliche Arbeit.
JF es
9
Ich bin Gelee. Upvoted.
DeepS1X
6
Dies ist die seltsamste Programmiersprache, die ich je gesehen habe.
Ryan
@ Ryan es ist zum Golfen gedacht.
Esolanging Fruit
61

JavaScript (ES6), 107 103 Byte

4 Bytes gespart dank GOTO 0

s=>([,a,b,c]=s.match`(.*?[aeiouy]+(.)).*?([aeiouy])`,a+(b=(a="bcdfgszkvtgp")[11-a.search(b)]||b)+c+b+c)

Testfälle

Arnauld
quelle
6
Sie können ein paar Bytes wie s=>([,a,b,c]=s.match`(.*?[aeiouy]+(.)).*?([aeiouy])`,a+(b=(a="bcdfgszkvtgp")[11-a.search(b)]||b)+c+b+c)
folgt
@ GOTO0 Danke, aktualisiert.
Arnauld
49

Jelly , 45 39 Bytes

Øa“œṣ$b|0Ḃ’ṃ,Ṛ$yṫµfØyḢṭḢẋ2
e€ØyIi-‘ɓḣ;ç

Probieren Sie es online!

Wie es funktioniert

e€ØyIi-‘ɓḣ;ç                Main link. Argument: s (string)

  Øy                        Vowels with y; yield "AEIOUYaeiouy".
e€                          Test each character in s for membership.
    I                       Increments; compute the forward differences of the
                            resulting array of Booleans.
     i-                     Find the first index of -1.
       ‘                    Increment this index to find the index of the first
                            consonant that follows a vowel.
                            Let's call this index j.
        ɓ                   Begin a new chain. Left argument: s. Right argument: j
         ḣ                  Head; yield the first j characters of s.
           ç                Call the helper link with arguments s and j.
          ;                 Concatenate the results to both sides.
Øa“œṣ$b|0Ḃ’ṃ,Ṛ$yṫµfØyḢṭḢẋ2  Helper link. Left argument: s. Right argument: j

Øa                          Alphabet; set the return value to “abc...xyz”.
  “œṣ$b|0Ḃ’                 Yield 7787255460949942. This is a numeric literal in
                            bijective base 250. The value of each digit matches its
                            1-based index in Jelly's code page.
           ṃ                Convert 7787255460949942 to base 26, using the digts
                            a = 0, b = 1, ..., z = 25.
                            This yields "bcdfkszgvtgp".
            ,Ṛ$             Pair the result with its reverse, yielding
                            ["bcdfkszgvtgp", "pgtvgzskfdcb"].
                ṫ           Call tail with arguments s and j, yielding the j-th and
                            all following characters of s.
               y            Translate the result to the right according to the
                            mapping to the left, i.e., replace 'b' with 'p', 'c'
                            with 'g', etc. 'g' appears twice in the first string
                            of the mapping; only the first occurrence counts.
                            Let's call the resulting string r.
                 µ          Begin a new chain. Argument: r
                  fØy       Filter; remove non-vowels from r.
                     Ḣ      Head; take the first vowel.
                       Ḣ    Head; take the first character/consonant of r.
                      ṭ     Tack; append vowel to the consonant.
                        ẋ2  Repeat the resulting string twice.
Dennis
quelle
4
Entschuldigung, Kumpel. Sieht so aus, als hätten Sie den Mega-Jelly-Repräsentanten
Destructible Lemon am
tfw eine Antwort sieht zu simpel aus, ist aber in der Tat wirklich wundervoll ... simpel ist wunderschön
Erik the Outgolfer
31

CJam , 59 58 57 56 Bytes

q_{"aeiouy":V&,_T|:T^}#)/(_W>"cbdfkszgvtpg"_W%er@sV&0=+_

Probieren Sie es online!

Erläuterung

q_                   e# Read the input and copy it.
{                    e# Find the index of the first char for which the following is true:
 "aeiouy":V          e#  Push "aeiouy" and store it in V.
 &,                  e#  Check if the current char is in the vowel string (0 or 1).
 _T|:T               e#  Copy the result and OR with T (T is initially 0), storing back in T.
 ^                   e#  XOR with the original result. This will be 1 for the first 
                     e#  consonant appearing after a vowel.
}#                   e# (end find)
)/                   e# Increment the index and split the string into chunks of that size.
(                    e# Pull out the first chunk.
_W>                  e# Copy it and get the last character (the consonant).
"cbdfkszgvtpg"_W%er  e# Transliterate the consonant to voiced/voiceless alternative.
@s                   e# Bring all the other split chunks to the top and join them together.
V&0=                 e# First char of the set intersection of that and the vowels.
                     e# (i.e. the first vowel in the second half)
+                    e# Concatenate the new consonant and the vowel.
_                    e# Duplicate the result of that.
                     e# Implicit output of stack contents.
Geschäfts-Katze
quelle
2
CJam schlägt Jelly? : O (Zumindest schlägt es die Gelee-Antwort, die jeder zu stimmen scheint.)
Esolanging Fruit
29

C 219 213 206 179 175 Bytes

#define p putchar
#define q(a)for(;a strchr("aeiouy",*s);p(*s++));
f(s,c,h)char*s;{q(!)q()p(*s);p(c="pgt vkh jglmn bqrzd fwx s"[*s-98]);p(h=s[strcspn(s,"aeiouy")]);p(c);p(h);}

Probieren Sie es online!

betseg
quelle
Funktioniert * p = putchar als erste Zeile?
k_g
4
Entschuldigung disqualifiziert. Kann nicht in einen Tweet passen.
Caird Coinheringaahing
@cairdcoinheringaahing Sie Sir sind falsch (ich weiß, dass es 140 war, als Sie das geschrieben haben)
Stan Strum
1
171 Bytes
Ceilingcat
1
Etwa 12 Bytes können durch Ersetzen von #defines und der Funktion durch Präprozessor-Flags ( -D...) entfernt werden.
23

Perl 5 , 81 72 Bytes

s![aeiouy]+(.)\K.*!($1=~y/bcdfgkpstvz/pgtvkgbzdfs/r.$&x/[aeiouy]/g)x2!ge

Probieren Sie es online!

Schmutzig
quelle
Sie und ich hatten die gleiche Idee \K, aber Sie haben es 9 Bytes besser gemacht als ich. Gute Antwort!
Silvio Mayolo
18

PHP, 121 Bytes

$v=aeiouy;preg_match("#(.*?[$v]+([^$v])).*?([$v])#",$argn,$t);echo$t[1],$z=strtr($t[2].$t[3],bcdfgkpstvz,pgtvkgbzdfs),$z;

Probieren Sie es online!

Jörg Hülsermann
quelle
3
-2 Bytes:echo$t[1],$z=strtr($t[2].$t[3],bcdfgkpstvz,pgtvkgbzdfs),$z;
Titus
@Titus Ich habe nicht darüber nachgedacht. Vielen Dank
Jörg Hülsermann
warum nicht $argnin etwas kürzeres umbenennen ? $aZum Beispiel - das sind -3 Bytes
Tyler Sebastian
@ TylerSebastian Ich muss eine Eingabevariable haben, die existiert. Ja, ich kann eine Funktion erstellen, aber wenn ich es tue, erhöht sich die Bytezahl, da die drei Bytes verwendet werden
Jörg Hülsermann,
Ich habe vergessen, wie PHP Befehlszeilenargumente ausführt. Ich habe gerade gesehen, dass Sie es im Header-Abschnitt definiert haben, aber nicht erkannt haben, dass es sich um eine reservierte Variable handelt.
Tyler Sebastian
15

Pyth, 54 Bytes

L+hb?>F}RJ"aeiouy"<b2+hKtb*2+XhK"cgdsfbpvztkg")h@JKytb

Dies definiert eine Funktion y, die einen String erwartet. Probieren Sie es online aus: Test Suite

Jakube
quelle
14

Python 3, 155 139 Bytes

import re
def f(x,k='aeiouy])'):b,c,v=re.findall(f'(.*?[{k}([^{k}.*?([{k}',x)[0];return b+c+(('bcdfgkpstvz'+c)['pgtvkgbzdfs'.find(c)]+v)*2

16 Bytes dank @ovs entfernt

1 Byte dank Gábor Fekete entfernt

L3viathan
quelle
2
Sie könnten eine Variable mit dem Wert erstellen 'aeiouy]', die möglicherweise einige Bytes einspart. Sie können auch einige Zeichen aus den Ersetzungszeichenfolgen entfernen, da dieselben vorhanden sind.
Gábor Fekete
2
Ich kann die identischen Zeichen nicht aus der Ersatzzeichenfolge entfernen, da dies eine wäre IndexErrorund beim Speichern aeiouy])keine Bytes gespeichert werden.
L3viathan
2
wenn du sowas rausziehst s='aeiouy])', könntest du das gebrauchen b,c,v=re.findall('(.*?[%s([^%s.*?([%s'%(s,s,s). Es ist nicht kürzer, könnte aber zu einem Weg führen, es insgesamt zu verkürzen.
Jeremy Weirich
3
Die Verwendung von F-Strings spart 1 Byte: k='aeiouy])'undf'(.*?[{k}([^{k}.*?([{k}'
Gábor Fekete
14

Java 8, 243 236 222 Bytes

s->{String q="[a-z&&[^aeiouy]]",a=s.replaceAll("(^"+q+"*[aeiouy]+"+q+").*","$1"),b="pgtvkhjglmnbqrzdfwxs".charAt("bcdfghjklmnpqrstvwxz".indexOf(a.charAt(a.length()-1)))+s.replaceAll(a+q+"*([aeiouy]).*","$1");return a+b+b;}

Verwendet .replaceAllreguläre Ausdrücke mit Erfassungsgruppen, um die nicht gewünschten Teile herauszufiltern.

Erläuterung:

Probieren Sie es hier aus.

s->{ // Method with String parameter and String return-type
  // Temp String we use multiple times:
  String q="[a-z&&[^aeiouy]]",
   // Regex to get the first part (i.e. `creation` -> `creat` / `example` -> `ex`)
   a=s.replaceAll("(^"+q+"*[aeiouy]+"+q+").*","$1"), 
   // Get the trailing consonant and convert it
   b="pgtvkhjglmnbqrzdfwxs".charAt("bcdfghjklmnpqrstvwxz".indexOf(a.charAt(a.length()-1)))
   // Get the next vowel after the previous consonant from the input-String
    +s.replaceAll(a+q+"*([aeiouy]).*","$1");
  // Return the result:
  return a+b+b;
} // End of method
Kevin Cruijssen
quelle
13

Haskell , 143 141 138 137 136 Bytes

z h=elem h"aeiouy"
f i|(s,(m,c:x))<-span z<$>break z i,j:_<-filter z x,d<-"pgt.vkh.jglmn.bqrzd.fwx.s"!!(fromEnum c-98)=s++m++[c,d,j,d,j]

Probieren Sie es online!

Bartavelle
quelle
1
Genial! Durch Ersetzen nxmit einem Buchstaben werden 2 Byte gespart.
Tomsmeding
Wenn Sie sich zaußerhalb von deklarieren fund zu Wachen wechseln, werden letzwei weitere Bytes gespeichert: Probieren Sie es online aus!
Laikoni
2
Und zwei weitere durch Kombinieren (s,v)<-break z i,(m,c:x)<-span z vzu (s,(m,c:x))<-span z<$>break z i.
Laikoni
Könnte man sich noch mehr rasieren, indem man die öffnende Klammer neben die setzt let, danke!
Bartavelle
@Laikoni Ich verstehe nicht , den Teil über das Verschieben zaus f?
Bartavelle
10

Python, 261 260 Bytes

def c(s,t='bpcgdtfvgksz'):
 q,r,t='aeiouy',range(len(s)),t+t[::-1]
 c=[i for i in r if i>[j for j in r if s[j]in q][0]and s[i]not in q][0]
 C=([t[2*i+1]for i in range(12)if s[c]==t[i*2]]or s[c])[0]
 return s[:c+1]+(C+s[[i for i in r if i>c and s[i]in q][0]])*2

Eine nicht reguläre, nicht esoterische Lösung. Es dauerte ungefähr 20 Minuten, und eine Stunde mehr, um Golf zu spielen.

Es hat wahrscheinlich mehr Listenverständnis als die gesamte Python-Standardbibliothek, vor allem, weil ich Regex nicht kenne ...

Probieren Sie es online! (Mit Testfällen)

sagiksp
quelle
8

Ruby , 90 Bytes

->x{x[/(.*?#{$v='[aeiouy]'}+.).*?(#$v)/];$1+($1[-1].tr('bcdfgkpstvz','pgtvkgbzdfs')+$2)*2}

Probieren Sie es online!

Ungolfing es ein bisschen, wir haben etwas Äquivalent zu:

def covfefefify(x)
  v = '[aeiouy]'
  # Match x to a regular expression capturing:
  # Group 1:
  #  some characters (non-greedy)
  #  followed by some (greedy) non-zero number of vowels
  #  followed by exactly one character
  # Ungrouped:
  #  Some more (non-greedy) characters
  # Group 2
  #  Exactly one other vowel
  # By switching between greedy and non-greedy matches, we can capture longest and shortest vowel/consonant sequences without writing out all the consonants
  x[/(.*?#{v}+.).*?(#{v})/]
  # Glue it back together, replace the necessary consonants, duplicate where needed
  $1+($1[-1].tr('bcdfgkpstvz','pgtvkgbzdfs')+$2)*2
end
ymbirtt
quelle
8

Python 2, 251 246 245 239 237 234 229 211 Bytes

Erste Einreichung hier.

def f(s):
  r=c='';n=0;w='aeiouy';a='bcdfghjklmnpqrstvwxz'
  for i in s:
    if n<2:r+=i
    if n<1and i in w:n=1
    if n==1and i in a:c='pgtvkhjglmnbqrzdfwxs'[a.index(i)];n=2
    if n==2and i in w:r+=c+i+c+i;break
  return r

Probieren Sie es online!

Mitgolfer, die mir geholfen haben:

 Destructible Lemon / Wheat Wizard - 5 bytes
 Hubert Grzeskowiak - 1 byte
 musicman523 - 16 bytes
WaitndSee
quelle
2
Willkommen auf der Seite! Sie haben versucht, Tabulatoren zum Einrücken zu verwenden. Wenn Sie jeden Tabulator durch ein einzelnes Leerzeichen ersetzen, ist er funktional identisch und wird ordnungsgemäß angezeigt, anstatt als zusätzliche Bytes
Destructible Lemon
4
Während das, was Destructible Lemon sagte, korrekt ist, können Sie noch mehr Bytes in Ihrer Quelle sparen, indem Sie die erste Ebene Ihres Codes mit einem einzelnen Leerzeichen und die zweite Ebene mit einem einzelnen Tabulator einrücken Sparen Sie 5 Bytes.
Sriotchilism O'Zaic
1
Ist das Semikolon am Ende der Zeile 4 erforderlich?
Hubert Grzeskowiak
1
@WaitndSee Ich denke, Sie können einige Ihrer Bedingungen verkürzen. Erstens: Sie ändern können , not num n<1für 2 Bytes, da Sie wissen , nwird nie negativ sein. Sie können auch auf ändern n==3, n>2da Sie wissen, ndass niemals größer als sein wird 3. Sie können auch die Verwendung Python Tricks für conditionals den ersten und vorletzten noch weiter zu verkürzen: n=[n,1][i in w and n<1]; r+=[0,r][n<2]
musicman523
1
Sie können ändern , r,v,c=('',)*3zu r=v=c='', da Strings unveränderlich sind. Ich habe eine Reihe anderer cleverer Tricks ausprobiert, aber frustrierend ist, dass sie genauso lang sind. Es kann sich auch lohnen, einen Online-Test durchzuführen! Link zu deinem Beitrag
musicman523
7

Ruby , 175 141 110 Bytes

->s{s=~/(.*?#{v='[aeiouy]'}+(#{c='[^aeiouy]'}))#{c}*(#{v})/;"#$1#{($2.tr('bcdfgkpstvz','pgtvkgbzdfs')+$3)*2}"}

Probieren Sie es online!

  • 34 Bytes gespart dank Eric Duminil
  • 31 Byte gespart dank Value Ink + optimierter trArgumentationsvorschläge

Ungolfed

covfefify = -> (s) {
    from = 'bcdfgkpstvz'
    to   = 'pgtvkgbzdfs'

    vowels = "[aeiouy]"
    consonants = "[^aeiouy]"

    s.match(/(.*?#{vowels}+(#{consonants}))#{consonants}*(#{vowels})/)
    d = ($2.tr(from, to) + $3) * 2
    "#$1#{d}"
}
sudee
quelle
4
-34 Bytes mitHash[*"bpcgdtfvgkkgpbsztdvfzs".chars]
Eric Duminil
1
Da die Eingabe garantiert aus allen Buchstaben besteht, c=[^aeiou]ist sie kürzer. Haben die erste Interpolation für jede Variable zuzuordnen es gleichzeitig -2 Bytes /^(.*?${v='[aeiou]'}+(#{c='[^aeiou]})).../. Schließlich $2.tr("b-z","pgtevkhijgl-obqrzdufwxys")anstelle der Hash-Lösung.
Value Ink
Sie können 14 Bytes speichern Unterausdrücke unter Verwendung von ( \g<n>) anstelle von Interpolation, plus weitere 14 unter Verwendung von @ ValueInk der [^aeiou]Vorschlag: s=~/^(.*?([aeiouy])+([^aeiou]))\g<3>*(\g<2>)/.
Jordanien
Eigentlich hat das einen Fehler mit programming-> progkaka, den ich nicht ganz herausfinden kann.
Jordanien
@Jordan Leider \g<3>aktualisiert der Unterausdruck-Aufruf den Wert von $ 3, sodass wir diese Verknüpfung nicht verwenden können.
1.
6

Crystal, 203 194 187 186 184 163 Bytes

o=""
ARGV[v=c=0].each_char{|a|r=/#{a}/
"aeiouy"=~r&&(v=x=1)||(c=v)
o+=a if c<2||x
c>0&&(x&&break||(o+=(i="pgtvkgbqrzdfs"=~r)?"bcdfgkpqrstvz"[i]: a))}
p o+o[-2..-1]
reitermarkus
quelle
Ich denke, Sie können die c=vo+=<...>
Eltern
5

MATLAB / Octave - 159 158 Bytes

Im Folgenden wird davon ausgegangen, dass die Eingabezeichenfolge in Kleinbuchstaben geschrieben ist.

a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]

Erläuterung

  1. a = input('','s');: Ruft einen String von STDIN ab und speichert ihn in der Variablen a.
  2. m=ismember(a,'aeiouy');: Gibt ein boolesches Array zurück, das dieselbe Größe wie die Zeichenfolge hat, die abestimmt, wo sich die Vokale befinden
  3. s='pgt vkh jglmn bqrzd fwx s';Die covfefeAbbildung von Konsonanten als Zeichenfolge. Diese Zeichenfolge ist 25 Zeichen lang und lässt die Vokale weg. Die erste Position, an der sich der Vokal 'a'befinden soll, wird entfernt, während die anderen Positionen, an denen sich die Vokale befinden, mit einem Leerzeichen versehen werden. Wenn wir den ersten Konsonanten nach dem Vokal bestimmen, konvertieren wir den Konsonanten in eine Position, um auf ein Zeichen in dieser Zeichenfolge zuzugreifen und die erste Komponente des konvertierten Wortes zu bestimmen.
  4. m(1:find(m,1))=1: Setzt die erste Position des Booleschen Arrays auf die Position, an der wir den ersten Vokal als alle Vokale gefunden haben. Dies wird so sein, dass wir diese Zeichen ignorieren, wenn wir nach dem nächsten Konsonanten suchen, der auf den ersten Vokal folgt.
  5. i=find(~m,1);: Findet die erste Stelle der Zeichenkette, die nach dem ersten Vokal ein Konsonant ist.
  6. f=a(1:i): Entfernt die Zeichenkette nach dem ersten Konsonanten, der auf den Vokal folgt. Wir probieren einfach von der ersten Position der Zeichenkette bis zu diesem Punkt.
  7. d=s(f(end)-97);: Nehmen Sie das letzte Zeichen der verbleibenden Zeichenfolge und finden Sie, wo wir aus der Nachschlagezeichenfolge abtasten müssen, und erhalten Sie dieses Zeichen. Das Subtrahieren eines Zeichens und einer Zahl in MATLAB oder Octave verschmilzt zu einer Ganzzahl, indem das Zeichen in seinen ASCII-Code konvertiert wird. In diesem Fall subtrahieren wir das letzte Zeichen um das Zeichen am Anfang des Alphabets, um die Position relativ zum Anfang zu erhalten. Anstatt jedoch um b(98) zu subtrahieren, subtrahieren wir um, awährend MATLAB mit der Indizierung um 1 anstelle von 0 beginnt. 'a'Der ASCII-Code von 0 ist 97.
  8. m(1:i)=0;: Nimmt die Boolesche Maske und setzt alle Zeichen in der Eingabezeichenfolge von der ersten Position bis zum ersten Konsonanten nach einem Vokal auf false.
  9. v=a(find(m,1));: Findet den nächsten Vokal, der auf den ersten Konsonanten folgt, aus der Eingabezeichenfolge.
  10. [f d v d v]: covfefeGeben Sie unseren ied-String aus.

Beispielläufe

>> a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]
coverage

ans =

covfefe

>> a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]
example

ans =

exxaxa

>> a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]
programming

ans =

progkaka

>> a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]
code

ans =

codtete

>> a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]
president

ans =

preszizi

Probieren Sie es online!

http://www.tutorialspoint.com/execute_octave_online.php?PID=0Bw_CjBb95KQMdjROYVR0aFNrWXM

Wenn Sie oben auf die Schaltfläche Ausführen klicken, warten Sie einen Moment und geben Sie dann die gewünschte Zeichenfolge ein. Geben Sie die Zeichenfolge langsam ein, da es bei der Texteingabe zu Verzögerungen zu kommen scheint.

rayryeng
quelle
5

Clojure, 182 156 Zeichen

#(let[v #{\a\e\i\o\u\y}p(partition-by v %)[s m[c][n]](if(v(first %))(cons[]p)p)z[(or((zipmap"bcdfgkpstvz""pgtvkgbzdfs")c)c)n]](apply str(concat s m[c]z z)))

Wie es funktioniert

(partition-by v "president")

Liefert eine Folge von ((\p \r) (\e) (\s) (\i) (\d) (\e) (\n \t))

[s m [c] [n]] (if (v (first x)) (cons [] p) p)

Destructures die seq in s=(\p \r), m=(\e), c=\s, n=\i.

Oder für „Beispiel“ es ist s=[], m=(\e), c=\x, n=\a.

(apply str (concat s m [c] [(l c) n] [(l c) n]))

Gibt die Ausgabezeichenfolge zurück, indem die Teile zusammengefügt und miteinander verknüpft werden.

Und dann habe ich so viel Leerzeichen wie möglich entfernt, während ich es noch kompiliert habe.

De-uglified:

(defn covfefify [x]
  (let [vowel? #{\a\e\i\o\u\y}
        parts (partition-by vowel? x)
        [start mid [consonant] [last-vowel]] (if (vowel? (first x)) (cons [] parts) parts)
        lookup #(or ((zipmap "bcdfgkpstvz" "pgtvkgbzdfs") %) %)]
    (apply str (concat start mid [consonant] [(lookup consonant) last-vowel] [(lookup consonant) last-vowel]))))
Brian Baritonehands Gregg
quelle
Willkommen bei PPCG und tolle erste Antwort! Wir hoffen, Sie bleiben und haben Spaß daran, an weiteren Herausforderungen teilzunehmen. :-)
ETHproductions
Wenn Sie eine Funktion definieren, sollte ihr Name wahrscheinlich so kurz wie möglich sein. Sie könnten czum Beispiel einfach die Hauptfunktion aufrufen . (Wir erlauben auch anonyme Funktionen, die in vielen Sprachen kürzer sind. Ich bin mir nicht sicher, ob sie in Clojure sind.) Ich sehe jedoch, dass Sie diese Verbesserung im Inneren Ihres Codes bereits vorgenommen haben, so dass hier wahrscheinlich nicht viel geändert werden muss.
5

R, 341 Zeichen

f=function(x){g=function(x,y)el(strsplit(x,y));a=g(x,'');v=g('aeiouy','');n=letters[-c(1,5,9,15,21,25)];l=data.frame(n,g('pgtvkhjglmnbqrzdfwxs',''));y=min(match(n,a)[which(match(n,a)>min(match(v,a),na.rm=T))]);m=l[which(l$n==a[y]),2];e<-a[-c(1:y)][min(match(v,a[-c(1:y)]),na.rm=T)];paste0(paste0(a[c(1:y)],collapse=''),m,e,m,e,collapse="")}

Horrendous R Versuch, warum sind die Saiten so hart

Lesbare Version:

f = function(x) {
  g = function(x, y)el(strsplit(x, y))
  a = g(x, '')
  v = g('aeiouy', '')
  n = letters[-c(1, 5, 9, 15, 21, 25)]
  l = data.frame(n, g('pgtvkhjglmnbqrzdfwxs', ''))
  y = min(match(n, a)[which(match(n, a) > min(match(v, a), na.rm = T))])
  m = l[which(l$n == a[y]), 2]
  e <-a[-c(1:y)][min(match(v, a[-c(1:y)]), na.rm = T)]
  paste0(paste0(a[c(1:y)], collapse = ''), m, e, m, e, collapse = "")
}
Andrew Haynes
quelle
Ich glaube, Ihre Zählung ist es aus - ich zähle 340 Bytes
Taylor Scott
4

BlitzMax, 190 Bytes

s$=Input()For i=1To s.Length
f="aeiouy".Contains(s[i-1..i])If f v=i If c Exit
If v And c|f=0c=i
Next
t$="bpdtfvgkcgsz"x$=s[c-1..c]r=t.Find(x)~1If r>=0x=t[r..r+1]
x:+s[v-1..v]Print s[..c]+x+x

Nimmt ein Wort aus stdin und gibt das Ergebnis in stdout aus. Es wird angenommen, dass das Eingabewort klein geschrieben ist und mindestens einen Vokal gefolgt von einem Konsonanten enthält.

Eine lesbarere Version des Programms mit Formatierung und Variablendeklarationen:

SuperStrict
Framework BRL.StandardIO

Local s:String = Input()
Local v:Int
Local c:Int

For Local i:Int = 1 To s.Length
    Local f:Int = "aeiouy".Contains(s[i - 1..i])
    If f Then
        v = i
        If c Then Exit
    End If
    If v And c | f = 0 Then c = i
Next

Local t:String = "bpdtfvgkcgsz"
Local x:String = s[c-1..c]
Local r:Int = t.Find(x) ~ 1
If r >= 0 Then x = t[r..r + 1]
x :+ s[v - 1..v]
Print s[..c] + x + x

Wie es funktioniert:

BlitzMax verfügt über keine eingebaute Regex-Funktionalität oder ähnliches. Daher wird eine Schleife verwendet, um die Zeichen des Eingabeworts zu durchlaufen, bis ein Vokal gefolgt von einer Kette von mindestens einem Konsonanten gefunden wird. Die Variable c speichert die Position des letzten dieser Konsonanten gegenüber der des Vokals. Die Schleife prüft weiterhin, ob sich nach der Kette ein weiterer Vokal befindet. In diesem Fall wird v entsprechend aktualisiert. Dann wird der Konsonant bei c in der Zeichenfolge "bpdtfvgkcgsz" nachgeschlagen, die als Ersetzungstabelle fungiert. Wenn der Konsonant in der Tabelle an einer beliebigen Position gefunden wird, wird diese Position mit 1 XOR-verknüpft und das Zeichen an der resultierenden Position wird als Ersatz verwendet. Die XOR-Operation wandelt 0 in 1, 2 in 3, 4 in 5 usw. und umgekehrt um, so dass b mit p, d mit t usw. vertauscht wird. Schließlich ist die ursprüngliche Zeichenfolge bis c,

Beispielergebnisse:

Abdeckung covfefe

Schöpfung creatdidi

Programmieren von Progkaka

Dummheit

bla bla

FireballStarfish
quelle
Link zu Blitzmax Repo?
Destructible Lemon
@DestructibleLemon BlitzMax wurde als Sprache in erster Linie für die Entwicklung von Amateurspielen entwickelt und mit einem proprietären Compiler für Geld verkauft. Obwohl es jetzt kostenlos und von hier erhältlich ist , glaube ich, dass der Compiler immer noch nicht Open Source ist. Es gibt eine alternative Implementierung (repo hier , builds hier ), die jedoch nur die ungolfed-Version des obigen Codes ausführt, da keine "nicht strenge" Einstellung vorhanden ist, die das Weglassen von Variablendeklarationen ermöglicht.
FireballStarfish
Clevere Verwendung von XOR für Index - das werde ich wahrscheinlich eines Tages verwenden. Danke.
AI Breveleri
4

Perl, 71 Bytes

s#[aeiouy]+(.)\K.*?([aeiouy]).*#"$1$2"=~y/bcdfgkpstvz/pgtvkgbzdfs/rx2#e

Laufen Sie auch mit perl -pe. Ein paar Bytes weniger als die vorherige Perl-Lösung. Zugegeben, ich habe mich auch von dort inspirieren lassen.

SomeDude
quelle
4

05AB1E , 101 104 88 Bytes

-16 Bytes dank Okx

Ich hoffe irgendwie, dass dies effizienter gemacht werden kann.

žOÃćIsk>[DIs£¤žPså#\>]s[DIsèDžOså#\>]ŠŠ"bpcgdtfvgkhhjjkgllmmnnpbqqrrsztdvfwwxxzs"S2ôDí«ø`Šs¤sŠksŠèsŠì2׫

Probieren Sie es online!

Erläuterung

                  Argument: s
žOÃ0èk            Get index of first vowel in s
>[DIs£¤žPså#\>]   Increment index and split s until last character of substring is a consonant
s[DIsèDžOså#\>]   Increment index an get character at index in s until character is a vowel
ŠŠ                Rearrange stack
.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•S2ôDí«ø`   Prepare character substitution map
Šs                Rearrange stack
¤                 Last character of substring
sŠ                Rearrange stack (yes, again)
k                 Index of last character in substitution key list
sŠ                Rearrange stack (it won't stop)
è                 Character at index in character substitution value list
sŠ                Rearrange stack (ONE LAST TIME)
ì2׫              Prepend substitution consonant before vowel, duplcicate and concatenate with the substring from the very beginning
kalsowerus
quelle
Sie können ersetzen "bpcgdtfvgkhhjjkgllmmnnpbqqrrsztdvfwwxxzs"mit .•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•15 Byte speichern
OKX
Sie können auch ersetzen žOÃćIskmit žOÃ0èkspeichern ein weiteres Byte.
Okx
@Okx Ich denke, ich muss wirklich einige Techniken zur String-Komprimierung lernen. Vielen Dank!
Kalsowerus
@ kalsowerus Ich weiß, es ist schon eine Weile her, aber Sie können 8 Bytes aus Ihrer Antwort wie folgt Golf spielen: žOÃнk>[DIs£¤žPså#\>]©s[DIsèDžOså#\>]s\.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•S2ôDí«ø`®θkèìDJ Probieren Sie es online. Ich habe mich hauptsächlich von allen Swaps und Triple-Swaps befreit, indem ich stattdessen eine Variable verwendete. Und kann sein н, und ich habe ersetzt 2׫mit DJden gesamten Stapel miteinander zu verbinden. PS: Ich habe auch eine 55-Byte-05AB1E-Antwort mit einer anderen Technik gepostet. (Dazu gehört auch ein Link zum besseren Verständnis der Komprimierung in 05AB1E.: D)
Kevin Cruijssen
3

Kristall, 130 Bytes

c=/[aeiouy]/
x,y,z=ARGV[0].partition /[^aeiouy]*#{c}*/
k=z[0]
b=((i="pgtvkgbqrzdfs"=~/#{k}/)?"bcdfgkpqrstvz"[i]: k)+z[c]
p y+k+b*2

Wie es funktioniert

c = /[aeiouy]/

Speichern Sie einen regulären Ausdruck für die Suche nach dem ersten Vokal für c.

x, y, z = ARGV[0].partition /[^aeiouy]*#{c}*/

Teilen Sie das erste Argument in drei Teile auf {"", String bis ein Zeichen vor dem ersten Konsonanten nach dem ersten Vokal, Rest des Strings} und speichern Sie jedes der Elemente in x, y und z.

k = z[0]

Holen Sie sich das erste Zeichen, den entsprechenden Konsonanten.

i = "pgtvkgbqrzdfs" =~ /#{k}/

Holen Sie sich den Index des Konsonanten in der linken Zeichenfolge oder nil.

b = ((i = ...) ? "bcdfgkpqrstvz"[i] : k) + z[c]

Wenn dies inicht nilder Fall ist , verwenden Sie diesen Index für die zweite Zeichenfolge (eine Art Golf-Hash).

Wenn ija nil, verwenden Sie das Originalzeichen.

Als nächstes wird der erste Vokal von angehängt z.

p y + k + (b * 2)

Zum Schluss drucken Sie den ersten Teil aus dem ersten regulären Ausdruck y, dem ersten Konsonanten kund dem zweifachen der zuvor berechneten Zeichenfolge b.

Probieren Sie es online aus .

Domii
quelle
2

Lua, 164 157 Bytes

w=arg[1]
i,j,a,b=w:find('[aeiouy]+([^aeiouy]+)(.)')
print(w:sub(1,j-#a)..(('pgtvkhjglmnbqrzdfwxs'):sub(('bcdfghjklmnpqrstvwxz'):find(a:sub(1,1)))..b):rep(2))

Edit 1: 7 Bytes entfernt, indem nach einem beliebigen Zeichen nach den Konsonanten gesucht wurde (siehe Regex)

Probieren Sie es online!

Dieses Programm verwendet eine Zeichenfolge im CLI-Argument und gibt die verdeckte Version aus.

Dies ist meine erste Vorlage zu einem Code Golf! Ich habe die anderen nicht im Detail überprüft, daher habe ich möglicherweise einige allgemeine Optimierungen verpasst (und bin in einige Fallen geraten). Ich habe Lua benutzt, weil ich diese kleine Sprache immer mehr mag, und ich habe versucht, eine Regex zu finden, die meinen Bedürfnissen entspricht.

Hier ist eine übersichtlichere Version mit einer Funktion (ich wollte eine verwenden, aber die Schlüsselwörter in Lua sind zu lang!):

function covfefy(word)
  i, j, a, b = word:find('[aeiouy]+([^aeiouy]+)(.)')

  -- 'a' is one or several consonants following the first vowel, b is the first vowel after that
  -- 'i' is the index of the beginning of 'a', 'j' the index of 'b'

  cov = word:sub(1, j - #a)

  -- Look for the first letter of 'a' in the voiced/voiceless table
  f = ('pgtvkhjglmnbqrzdfwxs'):sub(('bcdfghjklmnpqrstvwxz'):find(a:sub(1, 1)))

  return cov .. (f .. b):rep(2)
end

Fühlen Sie sich frei, um ein Feedback zu geben :)

Hinweis: Wenn Sie sich fragen, ist es mit MoonScript 149 Byte lang!

Kyrio
quelle
2

JavaScript (ES5), 237 229 Byte

function(s){r=['aeiouy','bcdfgkpstvz','pgtvkgbzdfs']i=0,p=''while(p+=s[i],r[0].indexOf(s[i++])<0);while(p+=s[i],~r[0].indexOf(s[i++]));b=s[i-1];while(r[0].indexOf(s[i++])<0);c=r[1].indexOf(b)d=((~c)?r[2][c]:b)+s[i-1]return p+d+d}

Probieren Sie es online!

Wahrscheinlich nicht der Golfspieler, aber es ist ES5.

Kürzlich wurde ein Fehler behoben. Beispielausgabe:

creation->creatdidi
coverage->covfefe
example->exxaxa
programming->progkaka
code->codtete
president->preszizi
Tintenfisch
quelle
2

sed, 106 (105 + 1) Bytes

Dies wird mit dem -EFlag gesetzt, das anscheinend für ein Byte zählt.

s/([aoeuiy][^aoeuiy])[^aoeuiy]*(.).*/\1\2/
h
s/.*(..)/\1\1/
y/bcdfgkpstvz/pgtvkgbzdfs/
x
s/.$//
G
s/\n//g

Probieren Sie es online!

zgrep
quelle
2

C #, 584.581 Bytes

-3 Bytes dank Destructible Lemon

Dies ist meine erste Einsendung zu Code Golf und Stack Exchange im Allgemeinen. Ich weiß, dass C # keine großartige Golfsprache ist und dies wahrscheinlich nicht vollständig optimiert ist, aber ich wollte es versuchen: p. Irgendwelche Tipps sind willkommen!

Golf Version:

namespace System{class B{static void Main(string[]args){var s="creation";var t="aeiou";int i=0,j=0,l=s.Length;char c=' ',f=' ';for(int x=0;x++<l;){if(t.IndexOf(s[x])>=0){i=x;break;}}for(int x=i;x++<l;){if(!(t.IndexOf(s[x])>=0)){j=x;c=s[x];for(int y=x;y++<l;){if (t.IndexOf(s[y])>=0){f=s[y];goto W;}}}}W:switch(c){case'b':c='p';break;case'c':c='g';break;case'd':c='t';break;case'f':c='v';break;case'g':c='k';break;case'k':c='j';break;case'p':c='b';break;case's':c='z';break;case't':c='d';break;case'v':c='f';break;case'z':c='s';break;}Console.Write(s.Substring(0,l-i-1)+c+f+c+f);}}}

Lesbare Version:

namespace System
{
    class B
    {
        static void Main(string[] args)
        {
            var s = "creation";
            var t = "aeiou";
            int i = 0, j = 0, l = s.Length;
            char c = ' ', f = ' ';
            for (int x = 0; x++ < l; )
            {
                if (t.IndexOf(s[x]) >= 0)
                {
                    i = x; break;
                }
            }
            for (int x = i; x++ < l;)
            {
                if (!(t.IndexOf(s[x]) >= 0))
                {
                    j = x; c = s[x];
                    for (int y = x; y++ < l;)
                    {
                        if (t.IndexOf(s[y]) >= 0)
                        {
                            f = s[y];
                            break;
                        }
                    }
                }
            }
            switch (c)
            {
                case 'b': c = 'p';
                    break;
                case 'c': c = 'g';
                    break;
                case 'd': c = 't';
                    break;
                case 'f': c = 'v';
                    break;
                case 'g': c = 'k';
                    break;
                case 'k': c = 'j';
                    break;
                case 'p': c = 'b';
                    break;
                case 's': c = 'z';
                    break;
                case 't': c = 'd';
                    break;
                case 'v': c = 'f';
                    break;
                case 'z': c = 's';
                    break;
            }
            Console.Write(s.Substring(0, l - i - 1) + c + f + c + f);
        }
    }
}
Brandon Hao
quelle
1
Ich bin kein Experte, aber ich denke, Sie können die Inkrementierung dem Komparator in der for-Schleife hinzufügen x++ < l, oder so (vielleicht, l > x++wenn die erste nicht funktioniert).
Destructible Lemon
@DestructibleLemon Danke für den Tipp!
Brandon Hao
2

SmileBASIC 3, 195 Bytes

Sehr spät zu dieser Frage, aber wie könnte ich einer guten Herausforderung für SmileBASIC 3 widerstehen? Features wie das Durchlaufen einer Sequenz oder das Bearbeiten eines Strings sind nicht so robust wie andere Sprachen. Daher ist es eine Herausforderung, sie so klein wie möglich zu halten. Angenommen, Wörter sind GROSSBUCHSTABEN.

V$="AEIOUY
LINPUT W$REPEAT I=I+1UNTIL.<=INSTR(V$,W$[I-1])&&.>INSTR(V$,W$[I])J=I
WHILE.>INSTR(V$,W$[J])J=J+1WEND?LEFT$(W$,I+1)+("PGTVKHJGLMNBQRZDFWXS"[INSTR("BCDFGHJKLMNPQRSTVWXZ",W$[I])]+W$[J])*2

Detaillierte Erklärung hier!

Schnecke_
quelle
2

05AB1E , 55 Bytes

η.ΔžOSåàyžPSÅ¿à*}ÐIsKžOÃнsθU.•gÍĆdQ¸G•SDXåiÂXQÏθë\X}ìDJ

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

η                        # Suffixes of the (implicit) input
                         #  i.e. "creation" → ["c","cr","cre","crea","creat","creati","creato","creatio","creation"]
        }              # Find the first for which the following is truthy:
   žO                    #  Push vowels (including y): "aeiouy"
     S                   #  Convert it to a list of characters: ["a","e","i","o","u","y"]
      å                  #  Check for each if they're in the current (implicit) suffix
                         #   i.e. "creat" → [1,1,0,0,0,0]
       à                 #  Pop and push the max (basically check if any are truthy)
                         #   i.e. [1,1,0,0,0,0] → 1
   y                     #  Push the suffix again
    žP                   #  Push the consonants (excluding y): "bcdfghjklmnpqrstvwxz"
      S                  #  Convert to a list of characters: ["b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","z"]
       Å¿                #  Check for each if the suffix ends with it
                         #   i.e. "creat" → [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0]
         à               #  Pop and push the max (basically check if any are truthy)
                         #   i.e. [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0] → 1
   *                     #  Check if both are truthy
                         #   i.e. 1 and 1 → 1
           Ð             # Triplicate the found suffix
            I            # Push the input
             s           # Swap the top two items on the stack
                         #  i.e. stack contains now: "creat","creat","creation","creat"
K                        # Remove the suffix from the input
                         #  i.e. "creation" and "creat" → "ion"
 žOÃ                     # Only leave the vowels
                         #  i.e. "ion" → "io"
    н                    # Pop and push the first character
                         #  i.e. "io" → "i"
s                        # Swap again so the prefix is a the top of the stack again
 θ                       # Pop and push the last character
                         #  i.e. "creat" → "t"
  U                      # Pop and store it in variable `X`
   .•gÍĆdQ¸G            # Push string "bcdfkszgvtgp"
             S           # Convert to list of characters: ["b","c","d","f","k","s","z","g","v","t","g","p"]
              D          # Duplicate it
               Xåi       # If `X` is in this string:
                  Â      #  Bifurcate the list (short for Duplicate & Reverse copy)
                         #   i.e. ["b","c","d","f","k","s","z","g","v","t","g","p"]
                         #   → ["p","g","t","v","g","z","s","k","f","d","c","b"]
                   XQ    #  Check if they're equal to variable `X`
                         #   i.e. `X` = "t" → [0,0,1,0,0,0,0,0,0,0,0,0]
                     Ï   #  Only keep the truthy values
                         #   i.e. ["b","c",...,"g","p"] and [0,0,1,0,0,0,0,0,0,0,0,0]
                         #    → ["d"]
                      θ  #  Pop and push the last one
                         #   i.e. ["d"] → "d"
                 ë       # Else:
                  \      #  Discard the duplicate list from the stack
                   X     #  And push variable `X` again
                 }       # Close the if-else
                  ì      # Prepend the second character in front of the first
                         #  i.e. "d" and "i" → "di"
                   D     # Duplicate it
J                        # Join the stack together (and output implicitly)
                         #  i.e. "creat" and "di" and "di" → "creatdidi"

Sehen Sie diese 05AB1E Tipps von mir (Abschnitt Wie Strings nicht Teil des Wörterbuchs komprimieren? ) Zu verstehen , warum .•gÍĆdQ¸G•ist "bcdfkszgvtgp".

Kevin Cruijssen
quelle