Üçlü basamakları bisiklete binerek metni şaşırtmak


28

Bu zorluğun amacı, giriş metnini almak, aşağıdaki yöntemi kullanarak şifrelemek ve sonucu döndürmek için en kısa işlevi / programı yazmaktır.

Örnek olarak, dizeyi kullanacağım hello world.

İlk önce giriş metnini alın.

hello world

İkinci olarak , dizgeyi üçlü hale getirin (taban 3). Bu anahtarı kullan:

a = 000
b = 001
c = 002
d = 010
e = 011
f = 012
g = 020

...

w = 211
x = 212
y = 220
z = 221
[space] = 222

Bu tuş ile, hello worldolur 021011102102112222211112122102010aşağıda görüldüğü gibi.

 h   e   l   l   o       w   o   r   l   d
021 011 102 102 112 222 211 112 122 102 010

Üçüncü olarak , ilk rakamı sonuna kadar hareket ettirin.

021011102102112222211112122102010
becomes
210111021021122222111121221020100

Dördüncü olarak , aynı anahtarı kullanarak numarayı tekrar bir dizgeye dönüştürün.

210 111 021 021 122 222 111 121 221 020 100
 v   n   h   h   r       n   q   z   g   j

Son olarak , şifrelenmiş metni döndür.

vnhhr nqzgj

İşte bazı örnek metinler ve bunların çıktıları:

the turtle ==> dvo fh ego

python ==> uudwqn

code golf ==> hpjoytqgp

Bu kod golf olduğundan, bayt cinsinden en kısa giriş kazanır. Bazı karakterlerin küçük harf veya boşluk olmaması durumunda hatalara izin verilir. Bu benim ilk zorluğum, bu yüzden herhangi bir öneri yardımcı olmaktan daha fazlası olacaktır.

İyi şanslar!

Liderler Sıralaması:

var QUESTION_ID=54643;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),e.has_more?getAnswers():process()}})}function shouldHaveHeading(e){var a=!1,r=e.body_markdown.split("\n");try{a|=/^#/.test(e.body_markdown),a|=["-","="].indexOf(r[1][0])>-1,a&=LANGUAGE_REG.test(e.body_markdown)}catch(n){}return a}function shouldHaveScore(e){var a=!1;try{a|=SIZE_REG.test(e.body_markdown.split("\n")[0])}catch(r){}return a}function getAuthorName(e){return e.owner.display_name}function process(){answers=answers.filter(shouldHaveScore).filter(shouldHaveHeading),answers.sort(function(e,a){var r=+(e.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0],n=+(a.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0];return r-n});var e={},a=1,r=null,n=1;answers.forEach(function(s){var t=s.body_markdown.split("\n")[0],o=jQuery("#answer-template").html(),l=(t.match(NUMBER_REG)[0],(t.match(SIZE_REG)||[0])[0]),c=t.match(LANGUAGE_REG)[1],i=getAuthorName(s);l!=r&&(n=a),r=l,++a,o=o.replace("{{PLACE}}",n+".").replace("{{NAME}}",i).replace("{{LANGUAGE}}",c).replace("{{SIZE}}",l).replace("{{LINK}}",s.share_link),o=jQuery(o),jQuery("#answers").append(o),e[c]=e[c]||{lang:c,user:i,size:l,link:s.share_link}});var s=[];for(var t in e)e.hasOwnProperty(t)&&s.push(e[t]);s.sort(function(e,a){return e.lang>a.lang?1:e.lang<a.lang?-1:0});for(var o=0;o<s.length;++o){var l=jQuery("#language-template").html(),t=s[o];l=l.replace("{{LANGUAGE}}",t.lang).replace("{{NAME}}",t.user).replace("{{SIZE}}",t.size).replace("{{LINK}}",t.link),l=jQuery(l),jQuery("#languages").append(l)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",answers=[],page=1;getAnswers();var SIZE_REG=/\d+(?=[^\d&]*(?:&lt;(?:s&gt;[^&]*&lt;\/s&gt;|[^&]+&gt;)[^\d&]*)*$)/,NUMBER_REG=/\d+/,LANGUAGE_REG=/^#*\s*([^,]+)/;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"><div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table></div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table></div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody></table><table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody></table>


3
Bunun teknik olarak gizlilik olduğunu, şifreleme olmadığını unutmayın. Burada şifreleme anahtarı yok.
John Dvorak

@JanDvorak "şifre" çalışacak mı?
Kaplumbağa

@ JanDvorak'ın yorumuna dayanmak için, bunu verileri farklı bir biçimde ifade etmenin standart bir yolu olan "kodlama" olarak tanımlarım (örneğin, onaltılı kodlama veya base64 kodlama ile bir bit dizesini ifade edebilirsiniz).
apsillers

1
@JanDvorak Anlaşıldı - “kodlama” yerine ROT13 “şaşırtma” olarak adlandırmak daha muhtemel olurdu (her iki tanımı da yerine getirse bile). Muhtemelen en kesin başlık "Obfuscate text by ..."
apsillers

2
@ TheTurtle Fikir, uint64artan güçler kullanarak karakterleri büyük bir tamsayıya ( ) paketlemekti 27. Bir basamakla yer değiştirme, daha sonra bu büyük tamsayı ile çarpmaya eşdeğer olacaktır 3ve ilk basamağın diğer uçta eklenmesi basit bir ekleme olacaktır. Ancak, son "taşınmayı" (belki de bir modoperasyon aracılığıyla ) atmak gibi komplikasyonlar var ve birkaç byte ile çalışmasını sağlayamadım
Luis Mendo

Yanıtlar:


16

Pyth, 23 22 bayt

sXc.<sXz=+GdJ^UK3K1KJG

Çevrimiçi deneyin: Normal Giriş / Test Paketi

Bir bayt için @ isaacg teşekkürler.

Açıklama:

sXc.<sXz=+GdJ^UK3K1KJG
        =+Gd             append a space the G (preinitialized with the alphabet)
               K3        assign 3 to K
            J^UK K       assign all 3-digit ternary numbers 
                         [[0,0,0], [0,0,1],...,[2,2,2]] to J
      Xz  G J            translate input from G to J
     s                   sum (join all ternary numbers to one big list)
   .<             1      rotate by 1
  c                K     split into lists of size 3
 X                  JG   translate from J to G
s                        join chars to string and print

1
Aynı fikirde bulunduk. CJam'mın bir Pyth limanı yazdım, sonra aşağı indim ve cevabınızı gördüm: /
Andrea Biondo

1
Örneğin G, kullanmak yerine, genişletilmiş bir atama yaparak bir bayt kaydedebilirsiniz . N=+Gd
isaacg

@isaacg teşekkürler.
Jakube,

14

Pyth, 26 bayt

J+Gds@LJiR3c.<s.DR9xLJz1 2

Pyth Compiler / Executor'da çevrimiçi deneyin: demo | test durumları

Fikir

Tüm giriş karakterlerinin, 2. adımın belirttiği tam sayılara eşlendiğini varsayın.

Her 3 basamaklı üçlü sayı için, xyz 3 = 9x + 3y + z'ye sahibiz , bu yüzden 9'a göre modüler bölüm, bölüm x ve kalıntı 3y + z verir .

Giriş ise abc 3 def 3 ghi 3 her verimlere modüler bölme uygulanması, i + a, 3b + C, D, 3e + f, g, 3 h .

Listeyi yukarıdan bir birimden sola döndürdükten sonra, tamsayıları çiftler halinde gruplayabiliriz. Bu, (3b + c, d), (3e + f, g), (3h + i, a) listesini verir .

Buluruz Şimdi, (3y + z, a) tamsayı taban 3'ten elde ederiz 3 (3y + z) w + = 9y + 3z + = zyw w 3 .

Böylece, baz dönüşümünün çiftler listesine uygulanması bize tam olarak birleştirilmiş sola yaslanıp bir birim sola döndürmenin sonucudur bcd 3 efg 3 hia 3'ü verir .

Tek yapılması gereken sonuç tam sayılarını karakterlerle eşleştirmek.

kod

J+Gd                        Concatenate "a...z" (G) with " " (d) and save in J.
                    L z     For each character in the input(z):
                   x J        Compute its index in J.
                 R          For each index I:
               .D 9           Compute (I / 9, I % 9).
              s             Concatenate the resulting pairs.
            .<         1    Rotate the resulting list one unit to the left.
           c             2  Split it back into pairs.
         R                  For each pair:
        i 3                   Perform conversion from base 3 to integer.
      L                     For each resulting integer:
     @ J                      Select the element of J at that index.
    s                       Concatenate the resulting characters.

Yeesh, birkaç saat içinde CJam ve Pyth tarafından dövüldüm. : /
kirbyfan64sos

Vaov! Nasıl çalıştığını açıklayabilir misiniz? Merak ediyorum. :)
Kaplumbağa

@TheTurtle Cevabımı düzenledim.
Dennis,

10

Python 2, 96

s=input()
r=y=''
for c in s+s[0]:x=(ord(c)-97)%91;r+=y and chr((y%9*3+x/9-26)%91+32);y=x
print r

Dönüştüren bir karakter cbir değere xkadar x=(ord(c)-97)%9126'ya geri dönüşüm dönüştürmek için sadece uzay etkileyen modülo ile olduğu iiçin chr((i-26)%91+32)modül sadece etki ile, i=26bu alanlarda hale getirmek için.

Mevcut değere xve önceki değere dikkat ederek karakterleri dolaşıyoruz y. Biz son iki üçlü basamak kullanmak y, olarak bulunur y%9ve ilk üçlü basamak xolarak bulundu x/9. Birleştirmenin değeri şudur y%9*3+x/9. Muhtemelen bu aritmetiği yer değiştirerek 97ve sabitleyerek birleştiren bazı optimizasyonlar vardır .

Bu döngüyü yaparız, sonunda dizenin ilk karakterine geri döneriz. Ayrıca y, yhenüz başlatılmadığında ilk döngü için karakteri bastırarak, önceki bir değere yazmak için bir hazırlık döngüsü de yaparız .


8

CJam, 39 29 bayt

Bununla ilgili en güzel şey, temel dönüşüm bile kullanmamasıdır.

q'{,97>S+:XZZm*:Yere_(+3/YXer

Çevrimiçi deneyin .

Jakube'un Pyth cevabıyla aynı fikre sahip olduğumu farkettim Aslında bu CJam kodunu 25 bayt ile biten yazısını görmeden önce Pyth'e taşıdım. İlk Pyth golf'üm olduğu için sanırım fena değil.

açıklama

                              e# Z = 3
q                             e# Push input string
 '{,                          e# Push ['\0' ... 'z']
    97>                       e# Keep ['a' ... 'z']
       S+                     e# Append space
         :X                   e# Assign "a...z " to X
           ZZm*               e# Push 3rd cartesian power of [0 1 2]
                              e# i.e. all 3-digit permutations of 0, 1, 2
                              e# (in lexicographical order)
               :Y             e# Assign those permutations to Y
                 er           e# Translate input from X to Y
                   e_         e# Flatten resulting 2D array
                     (+       e# Rotate first element to the end
                       3/     e# Split back into 3-digit elements
                         YXer e# Translate from Y to X

7

CJam, 30 29 27 bayt

q'{,97>S+:Af#9fmd(+2/3fbAf=

CJam tercümanında çevrimiçi olarak deneyin .

Yaklaşım diğer cevabımdakilerle aynı , bu kodun Pyth'a bir limanı.

Nasıl çalışır

q                           e# Read from STDIN.
 '{,                        e# Push ['\0' ... 'z'].
    97>                     e# Remove the first 97 elements (['\0' - '`']).
       S+:A                 e# Append a space and save in A.
           f#               e# Find the index of each input character in A.
             9fmd           e# Apply modular division by 9 to each index.
                 (+         e# Shift out the first quotient and append it.
                   2/       e# Split into pairs.
                     3fb    e# Convert each pair from base 3 to integer.
                        Af= e# Select the corresponding elements from A.


6

Javascript (ES6), 175 bayt

Bir astar!

"Değişken vödülün aşırı kullanımı , kimse?"

güncelleme: Şimdi sadecev toplam karışıklık için, denilen değişkenleri kullanır !

6 bayt kaydettiğiniz için teşekkürler @vihan!

27 bayt kaydettiğiniz için teşekkürler @ Neil !!

v=>(([...v].map(v=>(v<"V"?53:v.charCodeAt()-70).toString(3).slice(1)).join``)+v[0]).slice(1).match(/..?.?/g).map(v=>(v=String.fromCharCode(parseInt(v,3)+97))>"z"?" ":v).join``

Anonim bir işlev tanımlar. Kullanmak için, v=işleve bir isim vermek için koddan önce ekleyin vealert(v("hello world"))


Sen kullanabilirsiniz .slice(-3)kullanabileceğiniz bu noktada 6 bayt, kurtarmak için "00"+vbaşka byte kaydedin. (Bir şablonla birleştirebilirsiniz, ancak sonuçtaki uzunluk aynıdır.)
Neil

Aslında, değerlerinizi üçe dönüştürmeden önce 27 değer ekleyerek bir sürü bayttan tasarruf edebilirsiniz; .map(v=>(v<"V"?26:v.charCodeAt()-97).toString(3)).map(v=>("000"+v).slice(v.length))sonra olur .map(v=>(v<"V"?53:v.charCodeAt()-70).toString(3).slice(1)).
Neil

@Neil Vay, bu gerçekten kodu kısaltdı! Ayrıca, sadece ara değişkeni kaldırarak gerçek bir 'tek astar' yaptı. Teşekkürler!
Jrich,

5

Julia, 149 137 bayt

Benim ilk golf!

s->(j=join;b=j([base(3,i==' '?26:i-'a',3)for i=s]);r=b[2:end]*b[1:1];j([i==26?" ":i+'a'for i=[parseint(r[i:i+2],3)for i=1:3:length(r)]]))

(kısmen) ungolfed:

f = s -> (
    # join the ternary represenations:
    b = join([base(3, i == ' ' ? 26 : i - 'a',3) for i = s]);
    # rotate:
    r = b[2:end] * b[1:1];
    # calculate the new numbers:
    n = [parseint(r[i:i+2],3) for i = 1:3:length(r)];
    # convert back to characters:
    join([i == 26 ? " " : 'a' + i for i = n])
)
assert(f("hello world") == "vnhhr nqzgj")
assert(f("the turtle")  == "dvo fh ego")
assert(f("python")      == "uudwqn")
assert(f("code golf")   == "hpjoytqgp")

Sen kullanabilirsiniz =ziyade indöngüler için ve kullanabileceğiniz b[1]yerine b[1:1]. Ayrıca kapanış parens ve ve arasında bir boşluğa ihtiyacınız yok for.
Alex A.

@AlexA. Şerefe =, ancak b[1]bir dizeye eklenemeyen bir karakter döndürür *.
kevinsa5

Doğru, unuttum.
Alex A.

@AlexA. İşin forpüf noktası şık. Ayrıca yakın bir tekliften sonra doğrudan alabilirsiniz. Ayrıştırıcının bu kadar esnek olduğunu bilmiyordum.
kevinsa5

Ayrıca, olabildiğince doğrudan bir değişmezi takip edebilir end.
Alex A.

4

Javascript (ES6), 178 , 172 , 170

p=>{p=p.replace(' ','{');c="";l=p.length;for(i=0;i<l;){c+=String.fromCharCode(((p.charCodeAt(i)-97)%9)*3+(((p.charCodeAt((++i)%l)-97)/9)|0)+97)}return c.replace('{',' ')}

Math.floor öğesini bit yönünde veya ile değiştirildi. Anonim bir işlev oluşturuldu. Doğru anlıyorsam, bu benim noobishness biraz düzeltmek (teşekkürler Dennis!) Ve bana 2 bayt aşağı almalıdır.


3

Julia, 169 166 bayt

s->(J=join;t=J(circshift(split(J([lpad(i<'a'?"222":base(3,int(i)-97),3,0)for i=s]),""),-1));J([c[j:j+2]=="222"?' ':char(parseint(c[j:j+2],3)+97)for j=1:3:length(t)]))

Ungolfed + açıklama:

function f(s::String)
    # Convert the input into a string in base 3, with space mapping to 222
    b = join([lpad(i < 'a' ? "222" : base(3, int(i) - 97), 3, 0) for i = s])

    # Split that into a vector of single digits and shift once
    p = circshift(split(b, ""), -1)

    # Join the shifted array back into a string
    t = join(p)

    # Convert groups of 3 back into characters
    c = [t[j:j+2] == "222" ? ' ' : char(parseint(t[j:j+2], 3) + 97) for j = 1:3:length(t)]

    # Return the joined string
    join(c)
end

3

Haskell, 160 bayt

a!k|Just v<-lookup k a=v
x=['a'..'z']++" "
y="012";z=mapM id[y,y,y]
m(a:u:r:i:s)=[u,r,i]:m(a:s)
m[e,a,t]=[[a,t,e]]
main=interact$map(zip z x!).m.(>>=(zip x z!))

Bu çok uzun sürüyor, ama en azından Python'u bir şekilde dövüyorum. Ve Ruby.


3

Javascript (ES6), 141 124 120 bayt

İnan ya da inanma.... :-)

(t,i=0,c=w=>(t.charCodeAt(w)-123)%91+26)=>String.fromCharCode(...[...t].map(k=>(c(i)%9*3+c(++i%t.length)/9+65|0)%91+32))

Diğer cevabımda olduğu gibi, bu isimsiz bir fonksiyondur ve kullanılmadan önce bir değişkene atanması gerekir. Burada dene:

Farklı bir teknik kullanarak önceki cevabımdan birkaç byte'ı tıraş edebileceğimi düşündüm, bu yüzden Tekgno'ya benzer biriyle başladım ve kafamı oradan çıkardım. Bazı değişkenleri fonksiyonun argüman bölümünde başlattım ve yine her şeyi bir .mapfonksiyona doldurdum . Sonra bunun String.fromCharCodedışında daha verimli olacağını fark ettim .map. Her şey söylendi ve yapıldıktan sonra, 30 45 bayttan fazla tıraş olmuştum !

Düzenleme 1:.replace xnor'ın Python çözümüne benzer bir teknik kullanarak s'den kurtularak 17 bayt kurtardı.

Tamam, belki başka bir zorluğa geçmenin zamanı gelmiştir ...


2

Python 2, 182 180 Bayt

Bu çözüm ideal değildir, çünkü yedek parça çok maliyetlidir. Bundan nasıl kaçınacağımızı bulmaya çalışıyorum.

b=lambda k:k and b(k/3)*10+k%3
s=''.join('%03d'%b(ord(x)-6-91*(x>' '))for x in input())
print`[chr(int((s[1:]+s[0])[i:i+3],3)+97)for i in range(0,len(s),3)]`[2::5].replace('{',' ')

Giriş gibidir "hello world".


Girişte istenen tırnak işaretleri için 2 bayt saymanız gerekir, değil mi?
mbomb007

@ mbomb007 Daha önce düşündüğüm şeydi, ancak birden fazla kişi bunu hesaba katmam gerekmediğini söyledi.
Kade

2

Mathematica, 162 bayt

r=Append[#->IntegerDigits[LetterNumber@#-1,3]~PadLeft~3&/@Alphabet[]," "->{2,2,2}];StringJoin[Partition[RotateLeft[Characters@#/.r//Flatten,1],3]/.(#2->#1&@@@r)]&

(Re) a RuleRakam listelerini karakterlere ve geriye dönüştürmek için a tuşunu kullanın.


2

Javascript (ES6), 179 bayt

s=>[...s+s[0]].map(q=>`00${(q<'a'?26:q.charCodeAt(0)-97).toString(3)}`.slice(-3)).join``.slice(1,-2).match(/..?.?/g).map(q=>q>221?' ':String.fromCharCode(parseInt(q,3)+97)).join``

.matchRegex için vihan'den aksesuarlar .


1

Ruby, 177

Bu each_charyöntem için en az Ruby 1.9 gerekir

l=[*('a'..'z'),' '];n=(0..26).map{|m|m=m.to_s(3).rjust 3,'0'};s='';gets.chomp.each_char{|x|s+=n[l.index x]};puts("#{s[1..-1]}#{s[0]}".scan(/.../).map{|i|i=l[n.index i]}.join '')

1

Java, 458 449 bayt

Java 8 akışını ve map()yöntemini kullanarak 10 bayt'ı tıraş edebileceğimi belirlemek beni biraz üzdü .

İşte golf versiyonu:

import org.apache.commons.lang.ArrayUtils;class A{public static void main(String[]a){int b=0;String[] c=new String[27];for(;b<27;++b)c[b]=String.format("%03d",Integer.valueOf(Integer.toString(b,3)));String d=a[0],e="abcdefghijklmnopqrstuvwxyz ",f="",g="";for(b=0;b<d.length();++b)f+=c[e.indexOf(d.substring(b,b+1))];f=f.substring(1)+f.charAt(0);for(b=0;b<f.length();b+=3)g+=e.charAt(ArrayUtils.indexOf(c,f.substring(b,b+3)));System.out.println(g);}}

İşte çok daha az sayıda golf oyunu. Okunabilir olması gerekiyor, ancak hiçbir garanti vermiyorum.

import org.apache.commons.lang.ArrayUtils;
class A {
    public static void main(String[] a) {
        int b=0;
        String[] c = new String[27];
        for (; b < 27; ++b)
            c[b] = String.format("%03d", Integer.valueOf(Integer.toString(b, 3)));
        String
            d = a[0],
            e = "abcdefghijklmnopqrstuvwxyz ",
            f = "",
            g = "";
        for (b = 0; b < d.length(); ++b)
            f += c[e.indexOf(d.substring(b, b + 1))];
        f = f.substring(1) + f.charAt(0);
        for (b = 0; b < f.length(); b += 3)
            g += e.charAt(ArrayUtils.indexOf(c, f.substring(b, b + 3)));
        System.out.println(g);
    }
}

Bu program bir komut satırı argümanı dönüştürmek için dize alır. Girişte boşluk bırakmak istiyorsanız, onu çift tırnakla çevrelemeniz gerekir.

Bunu komut satırından kullanma örneği vermek istedim, ancak bu kodu Eclipse dışında çalışmasını sağlayamadım. Java'yı komut satırından kullanmayı hiç öğrenmedim ^ _ ^; Muhtemelen bu işi çok fazla sorun yaşamadan tercih ettiğiniz IDE içinde çalıştırabilirsiniz.


ArrayUtils’i yalnızca kodun içindeki tam adı kullanan bir kez kullanırsanız, bu import ifadesinden daha kısadır. bakınız: codegolf.stackexchange.com/a/16100/10801 (bağlantılı cevabın alt yarısı)
masterX244

1

Javascript (ES6), 181 180 bayt

t=>((x=[...t].map(k=>`00${(k<'!'?26:k.charCodeAt(0)-97).toString(3)}`.slice(-3)).join``).slice(1)+x[0]).match(/.../g).map(j=>j>221?' ':String.fromCharCode(parseInt(j,3)+97)).join``

Bu isimsiz bir fonksiyondur, bu yüzden kullanılmadan önce bir isim verilmelidir. (Örneğin encrypt=t=>...) Burada deneyin:

Bunun foryerine birden fazla değişken ve döngü kullanmaya başladım .map. Daha sonra, 217 baytlık bir yere koyan algoritmayı değiştirmeden mümkün olan her şekilde golf oynadım. UndefinedFunction'ın cevabına göz attıktan sonra, onu 195'e indirmeyi başardım ve Dendrobium'un cevabının bir incelemesi 14 golf oynayarak sonuçlandı.

Bildiğim kadarıyla, daha fazla ileri gidemem ya da sonuç, Dendrobium'unkiyle neredeyse aynı olacaktır (bir karakter daha kısa olmak dışında!). Bir karakter kurtardığım yeri bulabilen var mı? :-)

Her zamanki gibi öneriler memnuniyetle kabul edilir!


Regex bahşiş için teşekkürler! For-for döngüsünün bu tek satırlık işlevde tam olarak nasıl çalışılabileceğinden emin değilim, ama yine de biraz yer kazandırabilir. İsterseniz versiyonunuzu gönderebilirsiniz.
ETHProductions

0

Matlab, 113 bayt

x=dec2base(strrep(input('','s'),' ','{')-97,3)';strrep(char(base2dec(reshape(x([2:end 1]),3,[])',3)+97)','{',' ')

Giriş stdin'den geçer.

Örnek:

>> x=dec2base(strrep(input('','s'),' ','{')-97,3)';strrep(char(base2dec(reshape(x([2:end 1]),3,[])',3)+97)','{',' ')
hello world
ans =
vnhhr nqzgj

0

Julia - 92 87 61 54 bayt

s->join(32+(3(i=[s...]%91+579)%27+i[[2:end,1]]÷9)%91)

Ungolfed:

function f(s)
  t=[s...];       # Convert the string into a char array
                      #
  i=t%91+579          # Mod 91 drops the alpha characters to sit just
                      # below space, then 579 is added as a trick,
                      # equivalent to subtracting 6 and adding 9*65
  v1=3i%27            # This shifts the bottom two ternary digits up
                      # and removes the first ternary digit
  v2=i[[2:end,19    # This shifts the first ternary digit down and
                      # removes the bottom two ternary digits. [2:end,1]
                      # rotates the array to put the first value at the end
  N=(v1+v2)%91+32     # this combines the ternary digits, then returns
                      # the values to the correct ASCII values
  j=join(N)           # join the char array back to a string
  return j
end

Hile seni karıştırabilir. 6 çıkartılması moddan sonra 'a' sıfıra hareket eder. 9 * 65 eklenmesi, değerleri ascii değerlerine geri yükleme işleminin bir parçası olan 65 ila v1 + v2 eklemeye eşdeğerdir. Sen yerini alabilir i=t%91+579ile i=t%91-6ve daha sonra değiştirmek N=(v1+v2)%91+32ile N=(v1+v2+65)%91+32aynı sonucu elde etmek için, ama bir ekstra karakter gerektirir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.