Noktaları döndür


46

Tanıtımları

2 × n Boole matrisi, dört karakterden oluşan bir dize olarak gösterilebilir . ':. Dize bir "üst sıraya" ve "alt sıraya" sahiptir, 1'leri temsil eden noktalar ve 0'ları temsil eden boş alanlar. Örneğin, 2 × 6 matris

1 0 1 0 0 1
0 0 0 1 0 1

olarak temsil edilebilir ' '. :. Göreviniz bu "sıkıştırılmış formda" bir matris almak ve girişlerini bir taşıma bandı gibi bir adım saat yönünde döndürmektir.

Giriş

Girişiniz, karakterlerin üzerinde tek bir dizedir . ':. Uzunluğunun en az 2 olması garanti edilir.

Çıktı

Çıktınız giriş dizgisi olacaktır, ancak her nokta saat yönünde bir adım döndürülmüş şekilde. Daha açık bir şekilde, üst sıradaki noktalar, aşağı doğru hareket eden en sağdaki hariç, sağa bir yerde daha fazla yer açar. Alt sıradaki noktalar, yukarı hareket eden en soldaki hariç, bir adım sola hareket eder. Özel olarak, çıktı dizgisi orijinal ile aynı uzunluğa sahip olmalı ve boşluk önemlidir.

Örnek

:..:'.2 × 6 matrisine karşılık gelen giriş dizesini düşünün.

1 0 0 1 1 0
1 1 1 1 0 1

Bu matrisin döndürülmüş versiyonu

1 1 0 0 1 1
1 1 1 0 1 0

hangi dize karşılık gelir ::. :'.

Kurallar ve puanlama

Tam bir program veya bir fonksiyon yazabilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklar izin verilmez. Girdi ve çıkışın tırnak işaretleri arasında olup olmadığına karar verebilirsiniz ve sondaki bir satırsonu da her ikisinde de kabul edilebilir.

Test durumları

Bu test durumları çift tırnak içine alınır.

"  " -> "  "
" ." -> ". "
". " -> "' "
"' " -> " '"
" '" -> " ."
": " -> "''"
"''" -> " :"
":." -> ":'"
":.'" -> ":'."
"..." -> ":. "
": :" -> "':."
"':." -> ".:'"
".:'" -> ": :"
"    " -> "    "
"::::" -> "::::"
":..:'." -> "::. :'"
" :  .:'" -> ". '.. :"
": ''. :" -> "'' :'.."
"........" -> ":...... "
"::::    " -> ":::''   "
"    ::::" -> "   ..:::"
" : : : : " -> ". : : : '"
".'.'.'.'.'" -> "'.'.'.'.'."
".. ::  '.' :." -> ": ..'' .' :.'"
".'  '.::  :.'. . ::.'  '. . .::'  :.'." -> "' ' .:.''..'.'. ..:' ' .'. ...'''..'.'"

Yanıtlar:


11

JavaScript (ES6), 100 97 93 bayt

@ Edc65 sayesinde 4 bayt kaydedildi

s=>s.replace(/./g,(c,i)=>" '.:"[(i?q>' '&q!=".":c>"'")+(q=c,s[++i]?s[i]>"'":c>' '&c!=".")*2])

Nasıl çalışır

Bu, mevcut olandan önce ve sonra karakterlerde bazı hesaplamalar yaparak eklememiz gereken karaktere karar verir. Topladığımız:

  • İlk karakter buysa ve altta bir nokta varsa, 2;
  • Aksi halde, üstünde bir nokta varsa, 2.
  • Eğer son karakter ise ve üstünde bir nokta varsa, 1;
  • Aksi halde, sonraki nokta altta bir noktaya sahipse, 1.

Bu, bir alan için 0'a, 1 için ', 2 için .ve 3 için güzel bir şekilde toplanır :.

Test pasajı


Aferin. 4 s=>s.replace(/./g,(c,i)=>" '.:"[(i?q>' '&q!=".":c>"'")+(q=c,s[++i]?s[i]>"'":c>' '&c!=".")*2])tasarruf edin : (2 parçayı çevirin böylece ı, daha az regexp ve daha basit bir test, daha düşük q c) kaydedin
edc65

@ edc65 Tahmininiz için teşekkürler!
ETHProductions

9

Perl, 70 69 64 63 61 60 bayt

İçin +2 içerir -lp

STDIN'deki giriş dizesiyle çalıştırın, örn.

perl -lp rotatedots.pl <<< ":..:'."

rotatedots.pl:

y/'.:/02/r=~/./;y/.':/01/;$_=$'.2*chop|$&/2 .$_;y;0-3; '.:

açıklama

y/'.:/02/r                                        Construct bottom row but
                                                  with 2's instead of 1's
                                                  Return constructed value
                                                  (for now assume space
                                                  becomes 0 too)
          =~/./                                   Match first digit on bottom
                                                  row into $&. $' contains
                                                  the rest of the bottom row
                y/.':/01/                         Convert $_ to top row
                                                  (again assume space
                                                  becomes 0 too)
                             $'.2*chop            Remove last digit from
                                                  the top row, multiply by 2
                                                  and append to bottom row
                                       $&/2 .$_   Divide removed digit by
                                                  2 and prepend it to the
                                                  top row
                          $_=         |           "or" the top and bottom
                                                  row together. The ASCII
                                                  values of 0,1,2,3 have
                                                  00,01,10,11 as their last
                                                  two bits.

y;0-3; '.:                  Convert the smashed together top and bottom rows
                            to the corresponding representation characters.
                            Drop the final ; since it is provided by -p
                            (after a newline which doesn't matter here)

Boşluk yukarıdaki kodda dönüştürülmez. Hesaplamalar için /2ve *2gibi davranacak ve olacak 0. Diğer pozisyonlarda "veya" nin bir parçası olacaktır, ancak 1 bitlik alan bir bitin bir alt kümesidir 0ve 0herhangi bir rakamla aynı veya aynı çizgiyle aynı etkiye sahip olacaktır . Sadece içinde bulunduğu veya boşluk bıraktığı karakter boşluk olmak yerine boşluk bırakmaya devam eder 0. Ama bu 0zaten sorun değil, yine de uzaya geri dönüşmüş olacaktı.


8

Retina , 66

  • @Daavko sayesinde 2 bayt kurtarıldı
  • @Randomra sayesinde 4 bayt kurtarıldı
:
1e
\.
1f
'
0e

0f
T`h`Rh` ^ |.. $
(). (\ D)
$ 2 $ 1
e1
:
e0
'
f0

f1
.

açıklama

Girişle başlayarak:

: ''. :

İlk 4 aşama , sırasıyla 1/ efor true ve 0/ ffor false komutunu kullanarak üst / alt satırlar için matrisi oluşturur . Üst ve alt sıralar birbirine geçmiştir. Bu, şöyle bir dize verecektir:

e1f0e0e0f1f0e1

Bununla birlikte, bu 4 aşama aynı zamanda harflerin ve rakamların sırasını tersine çevirerek alt sırayı 1 sola doğru etkili bir şekilde hareket ettirir:

1e0f0e0e1f0f1e

Tİlk ve son karakterler için ransliteration sahne tersine çevirir hex rakam sadece yani değiştirir 0-9a-file f-a9-0. Bu, sol alt karakteri üst satıra, sağ üst karakteri de alt satıra taşıma etkiye sahiptir:

ee0f0e0e1f0f11

Ardından bir sonraki aşama, her harf basamaklı çifti değiştirir, böylece üst sıra 1 sağa kaydırılır. Önceden bu böyle bir şeydi (\D)(\d), (.)(\d)çünkü ikameler her zaman soldan sağa gerçekleştiğinden ve son iki hane bununla hatalı bir şekilde eşleşmeyecekti, çünkü sonda iki basamak zaten değiştirilmiş olacaktı. Matris şimdi gerektiği şekilde tamamen döndürüldü:

e0e0f0e1e0f1f1

Son 4 aşama daha sonra orijinal formata döner:

'' :'..

Çevrimiçi deneyin.

Tüm testcases satıra bir , milave Thattı her bir giriş hattı ayrı bir tedavi sağlamak için.


7

Jelly, 32 30 29 bayt

,Ṛe€"“':“.:”µṪ€;"ṚU1¦ZḄị“'.: 

Sondaki boşluğa dikkat edin. Çevrimiçi deneyin! veya tüm test durumlarını doğrulayın .

Arka fon

Giriş dizesini (örneğin :..:'.) ve tersini dikkate alarak başlarız .

:..:'.
.':..:

Üst satırdaki her karakter için ':, ait olup olmadığını ve alt satırın her karakteri için ait olup olmadığını kontrol ederiz .:. Bu 2B Boolean dizisini verir

100110
101111

Bu sorudan matris, ters alt satır ile.

Her satırın son Booleanını kaldırır, satırların sırasını tersine çevirir, Booleanları orijinal sıralarına göre hazırlar ve son olarak üst sırayı tersine çeviririz.

100110    10011    10111    010111    111010
101111    10111    10011    110011    110011

Bu, döndürülen matrisi sorudan verir.

Son olarak, '.:uygun karakterleri elde etmek için her Boolean sütununun bir ikili sayı ve dizin içerdiğini düşünüyoruz .

332031    ::. :'

Nasıl çalışır

,Ṛe€"“':“.:”µṪ€;"ṚU1¦ZḄ‘ị“'.:   Main link. Argument: S (string)

 Ṛ                              Reverse S.
,                               Form a pair of S and S reversed.
     “':“.:”                    Yield ["':" ".:"].
  e€"                           For each character in S / S reversed, check if it
                                is an element of "':" / ".:".
                                Yield the corresponding 2D array of Booleans.

            µ                   Begin a new, monadic chain.
                                Argument: A (2D array of Booleans)
             Ṫ€                 Pop the last Boolean of each list.
                 Ṛ              Yield the reversed array of popped list.
               ;"               Prepend the popped items to the popped lists.
                  U1¦           Reverse the first list.
                     Z          Zip to turn top and bottom rows into pairs.
                      Ḅ         Convert each pair from base 2 to integer.
                        “'.:    Yield "'.: ".
                       ị        Retrieve the characters at the corr. indices.

5

Pyth, 38 36

L,hb_ebsXCyc2.>syCXzJ" .':"K.DR2T1KJ

Jakube sayesinde 2 bayt!

Burada deneyin veya Test Suite'i çalıştırın .

Açıklama:

L,hb_eb         ##  Redefine the function y to take two lists
                ##  and return them but with the second one reversed
                ##  Uses W to apply a function only if it's first argument is truthy
XzJ" .':"K.DR2T ##  Does a translation from the string " .':" to
                ##  .DR2T which is [0,1,2,3...,9] mapped to divmod by 2
                ##  (which is [0,0],[0,1],[1,0],[1,1], then some extra, unused values)
                ##  we also store the string and the list for later use in J and K
.>syC ... 1     ##  zip the lists to get the bits on top and below as two separate lists
                ##  apply the function y from before, flatten and rotate right by 1
Cyc2            ##  split the list into 2 equal parts again, then apply y and zip again
sX ... KJ       ##  apply the list to string transformation from above but in reverse
                ##  then flatten into a string

Görünüşe göre çok karmaşık bir şekilde yaptım ^^ Bir açıklama ekler misiniz?
Denker

1
@DenkerAffe Bir tane eklemenin ortasındaydı :) Eklendi!
FryAmTheEggman 10:16

Seninle aynı yaklaşımı yaptım. Fark ettiğim iki şey: bu lambda L,hb_ebbir bayt daha kısa ve .DR2Taynı zamanda Kartezyen ürün ve birkaç çift daha yaratıyor, ancak rakam ve rakam olarak değil, yer tasarrufu sağlıyor.
Jakube

@Jakube teşekkürler, bu .Dnumara gerçekten harika!
FryAmTheEggman 11:16

5

Python 3, 145 141 130 bayt

def f(s):a=[i in"':"for i in s]+[i in".:"for i in s][::-1];return''.join(" '.:"[i+2*j]for i,j in zip([a[-1]]+a,a[-2:len(s)-2:-1]))

açıklama

Golf edilen çözüm şu zip özelliğini kullanır: zip('ABCD', 'xy') --> Ax By bu nedenle zip(a[:l],a[l:]), yerine koyulabilir zip(a,a[l:])ve tanımını kaldırabilir.l

def f(s):
 l=len(s)-1
 #                ┌───── unfold input string :  123  -> 123456
 #                │                             654
 #  ──────────────┴──────────────────────────────
 a=[i in"':"for i in s]+[i in".:"for i in s][::-1]
 # ─────────┬─────────   ────────────┬───────────
 #          │                        └──── generate the second row and reverse it
 #          └─────────── generate the first row 

 return''.join(" '.:"[i+2*j]for i,j in zip([a[-1]]+a[:l],a[l:-1][::-1]))
 #             ──────┬──────           ─┬    ────────────┬───────────
 #                   │                  │                └──── rotate and create first/second new row :  123456  -> 612345  -> 612
 #                   │                  │                                                                                      543
 #                   │                  └ group pair of the first and second row : 612 -> (6,5),(1,4),(2,3)
 #                   │                                                             543
 #                   └─────────── replace pair by symbol 

Sonuçlar

>>> f(".'  '.::  :.'. . ::.'  '. . .::'  :.'.")
"' ' .:.''..'.'. ..:' ' .'. ...'''..'.'"
>>> f(".....''''''")
":...  '''':"

Son üç satırı tek bir satıra, noktalı virgüllerle ayırarak bir kaç bayttan tasarruf edebilirsiniz.
mbomb007

4

Pyth, 66 bayt

KlQJ.nCm@[,1Z,Z1,ZZ,1 1)%Cd5Qjkm@" .':"id2Ccs[:JKhK<JtK>JhK:JtKK)K

Burada dene!

açıklama

Bu 3 bölüme ayrılabilir:

  • Girişi, bir ve sıfırlardan oluşan düz bir diziye dönüştürün.
  • Rotasyon yap.
  • Tekrar ASCII'ye dönüştürün.

Girişi dönüştürme

Bu oldukça önemsiz. Her karakter şu şekilde eşleştirilir:

  -> (0,0)
. -> (0,1)
'-> (1,0)
: -> (1,0)

Birincisi bir boşluk.
Matrisin 2 sırasını elde etmek için transpoze ettiğimiz 2-trollerin bir listesini alırız, bu daha sonra düzleşir.

kod

KlQJ.nCm @ [, 1Z, Z1, ZZ, 11)% Cd5Q # Q = giriş

KlQ # K matrisin genişliğini kaydeder (daha sonra kullanılır)
       m Q # her karakterin haritasını d
                        % Cd5 # d modulo 5'in ASCII kodu
        @ [, 1Z, Z1, ZZ, 1 1) # bunu bir arama listesine dizin olarak kullanın
   J.nC #, transpoze, düzleştir ve J'ye ata

Döndürme

Matrisin içinde düz dizi Jve matrisin genişliğinde var K. Dönme şöyle tanımlanabilir:

J[K] + J[:K-1] + J[K+1:] + J[K-1]

kod

s [: JKhKJhK: JtKK) # J = yassı dizi, K = matrisin genişliği

s [) # Bu listedeki tüm sonuçları Concat
  : JKhK # J [K]
       JhK # J [K + 1:]
               : JtKK # J [K-1]

Geri dönüştür

jkm @ ". ':" id2Cc [) K # [) = yukarıdaki adımın sonuç listesi

              c [) K # 2 satıra doğrar
             2 tuples geri almak için C # devrik
  m # Her 2-parçayı d eşleyin
          id2 #, d'yi ikili olarak yorumlar ve ondalık basamağa dönüştürür
   @ ". ':" # doğru karakteri bulmak için dizini bir arama dizisine dizini olarak kullanın
jk # bir dizeye katılın


3

Python 3, 166 154 153 150 146 138 137 135 132 127 bayt

Düzenleme: Ben kullanımını Ödünç aldığım zipgelen Erwan Python cevap işlevi sonunda. ve [::-1]kendi bükülme hareketimi koyduğum halde tersine çevirme düşünceleri . Görünüşe göre, ters çevrmeler benim işlevim için iyi bir fikir değildi. Daha formatfazla golf oynamak için kullanımımı değiştirdim . Doğrudan golf oynamak için taşındı ave bdoğrudan içine zipdalma (unungolfing değişmeden kalır, çünkü ayrılması ave baçıklamamdaki karışıklıktan kaçınmak için yararlıdır)

Düzenleme: Müzik Aralığı Çözücü mücadelesinde xnor tarafından bu yanıttan ödünç (some number)>>(n)&(2**something-1)alınmıştır . Olan dağınıklığı Ben iki dizilerini kullanarak verir çıkarlar sevmiyorum ama muhtemelen daha iyi golfed edilebilir ve .zip(*[divmod(et cetera, 2) for i in input()])tv

t,v=zip(*[divmod(708>>2*(ord(i)%5)&3,2)for i in input()])
print("".join(" '.:"[i+j*2]for i,j in zip((v[0],*t),(*v[1:],t[-1]))))

Ungolfed:

def rotate_dots(s):
    # dots to 2 by len(s) matrix of 0s and 1s (but transposed)
    t = []
    v = []
    for i in s:
        m = divmod(708 >> 2*(ord(i)%5) & 3, 2)
            # ord(i)%5 of each char in . :' is in range(1,5)
            # so 708>>2 * ord & 3 puts all length-2 01-strings as a number in range(0,4)
            # e.g. ord(":") % 5 == 58 % 5 == 3
            # 708 >> 2*3 & 3 == 0b1011000100 >> 6 & 3 == 0b1011 == 11
            # divmod(11 & 3, 2) == divmod(3, 2) == (1, 1)
            # so, ":" -> (1, 1)
        t.append(m[0])
        v.append(m[1])

    # transposing the matrix and doing the rotations
    a = (v[0], *t)          # a tuple of the first char of the second row 
                            # and every char of the first row except the last char
    b = (v[1:], t[-1])      # and a tuple of every char of the second row except the first
                            # and the last char of the first row

    # matrix to dots
    z = ""
    for i, j in zip(a, b):
        z += " '.:"[i + j*2]    # since the dots are binary
                                # we take " '.:"[their binary value]
    return z

2

Ruby, 166 163 bayt

->s{a=s.tr(f=" .':",t='0-3').chars.map{|x|sprintf('%02b',x).chars}.transpose;a[1]+=[a[0].pop];a[0]=[a[1].shift]+a[0];a.transpose.map{|x|x.join.to_i 2}.join.tr t,f}

Yuck ... transposeçok uzun.

Burada kullanılan püf noktaları:

  • sprintf('%02b',x)dönüştürün "0", "1", "2", "3"içine "00", "01", "10", ve "11"sırasıyla. Şaşırtıcı bir şekilde, ikinci bağımsız etmez değil önce bir tamsayı dönüştürülebilir gerekir.

  • Rotasyon, a[1].push a[0].pop;a[0].unshift a[1].shift;en azından biraz zekice olduğunu düşündüğüm (Ruby'de çok ayrıntılı değilse) ile yapılır. Simetri zaten, estetik açıdan güzel: P


Biraz golf oynamayı önerebilir miyim? ->s{a=s.tr(f=" .':",'001').chars;b=s.tr(f,'0101').chars;b<<a.pop;([b.shift]+a).zip(b).map{|x|x.join.to_i 2}.join.tr'0-3',f}
Manat çalışması

Sonunda effect etkisini yaptı. Bütün sabah bunu arıyordum: .map{|x|x.join.to_i 2}.join.tr'0-3',f.map{|x|f[x.join.to_i 2]}*''
manatwork

2

Javascript ES6 125 bayt

q=>(n=[...q].map(a=>(S=` .':`).indexOf(a))).map((a,i)=>(i?n[i-1]&2:n[0]&1&&2)|((I=n[i+1])>-1?I&1:n[i]&2&&1)).map(a=>S[a]).join``

Her karakteri iki basamaklı ikili bir eşdeğerde eşlerim

 : becomes 3   11
 ' becomes 2   10
 . becomes 1   01
   becomes 0   00

ve onların diğerinin üstünde olduklarını düşünüyorum.

3212021 becomes
1101010
1010001

Bunu n'ye sakladım

N'nin her bir karakteri (0-3) için, sağ komşunun en düşük sıra bitine sol komşunun en yüksek sıra bitini ekleyerek onun komşularını kontrol ederim. eğer i == 0 (ilk karakter) Sol komşunun yüksek dereceli biti yerine kendi düşük dereceli biti kullanıyorum.

eğer n [i + 1]> - 1 ise 0,1,2,3 olur, bu yüzden yanlış olduğunda son elemente çarparız.

Bu olduğunda, sağ komşunun alt biti yerine karakterin kendi en yüksek sipariş biti kullanıyorum

o geri harita .':arazi ve birlikte o dizi geri katılmak


2

MATL , 40 39 bayt

' ''.:'tjw4#mqBGnXKq:QKEh1Kq:K+hv!)XBQ)

Çevrimiçi deneyin! Bağlantılı versiyonu olan vtarafından repaced &vBu cevap yayınlanmıştır sonra çünkü dilde değişiklikler nedeniyle, .

' ''.:'               % pattern string. Will indexed into, twice: first for reading 
                      % the input and then for generating the ouput
t                     % duplicate this string
j                     % input string
w                     % swap
4#m                   % index of ocurrences of input chars in the pattern string
qB                    % subtract 1 and convert to binay. Gives 2-row logical array
GnXKq:QKEh1Kq:K+hv!   % (painfully) build two-column index for rotation
)                     % index into logical array to perform the rotation
XBQ                   % transform each row into 1, 2, 3 or 4
)                     % index into patter string. Implicitly display

1

JavaScript, 311 bayt

Muhtemelen çok geliştirilebilir:

a=(s=prompt()).length-1;o=s[0]==":"||s[0]=="."?s[1]==":"||s[1]=="."?":":"'":s[1]==":"||s[1]=="."?".":" ";for(i=1;i<a;i++)o+=s[i-1]=="'"||s[i-1]==":"?s[i+1]=="."||s[i+1]==":"?":":"'":s[i+1]=="."||s[i+1]==":"?".":" ";alert(o+=s[a]==":"||s[a]=="'"?s[a-1]==":"||s[a-1]=="'"?":":"'":s[a-1]==":"||s[a-1]=="'"?".":" ")

Belki bir şeyler ayarlamak için s[i-1]? Bu bazı baytları kurtarabilir.
Rɪᴋᴇʀ

İle aynı s[i+1].
Rɪᴋᴇʀ

1
ES6 ok işlevlerini ve bir arama yapmayı deneyin, <bunun yerine kullanmak ==birkaç bayttan tasarruf etmenizi sağlayabilir. Ayrıca ödeme isteyebilirsiniz JS Golf için İpuçları ve ES6 golf için İpuçları
Downgoat

1
@Downgoat <Bunun yerine nasıl kullanabilirsiniz==
Jens Renders

1

JavaScript (ES6), 237 210 204 188 182 178 bayt

188 bayt revizyonunda 16 bayttan tasarruf etmek için @Downgoat’a kredi verin

Güncelleme: Bir beyin dalgam vardı ve ilk operasyonu iki ayrı çağrı yerine stek bir mapçağrıya indirdim

s=>(r=" .':",a=[],s=[...s].map(c=>(t=('00'+r.indexOf(c).toString(2)).slice(-2),a.push(t[0]),t[1])),a.splice(0,0,s.shift()),s.push(a.pop()),a.map((v,i)=>r[+('0b'+v+s[i])]).join``)

Güzel Baskı ve Açıklama

s => (
  r = " .':", // Map of characters to their (numerical) binary representations (e.g. r[0b10] = "'")
  a = [],     // extra array needed
  // Spread `s` into an array
  s = [...s].map(c => (
    // Map each character to a `0`-padded string representation of a binary number, storing in `t`
    t = ('00' + r.indexOf(c).toString(2)).slice(-2)),
    // Put the first character of `t` into `a`
    a.push(t[0]),
    // Keep the second character for `s`
    t[1]
  )),
  // Put the first character of `s` in the first index of `a`
  a.splice(0,0,s.shift()),
  // Append the last character of `a` to `s`
  s.push(a.pop(),
  // Rejoin the characters, alternating from `a` to `s`, representing the rotated matrix, and map them back to their string representation
  // Use implicit conversion of a binary number string using +'0b<num>'
  a.map((v,i) => r[+('0b' + v + s[i])]).join``
)

1
yapar: s=>(r=" .':",a=[],s=[...s].map(c=>('00'+r.indexOf(c).toString(2)).slice(-2)).map(n=>(a.push(n[0]),n[1]),a.splice(0,0,s.shift()),s.push(a.pop()),a.map((v,i)=>r[parseInt(v+s[i],2)]).join``)çalışır?
Downgoat

Bunu daha önce yanıtlamadığım için üzgünüm, bildirimi görmedim - geliştirici araçlarım bana "yasadışı bir karakter" istisnası
veriyor

Belirttiğiniz gibi çalışmasını sağladım - görünüşe göre kopyaladığımda, tarayıcı geliştirici araçlarında görünmeyen bazı ekstra görünmez karakterler vardı.
RevanProdigalKnightMarka

1

Perl, 144 142 137 131 bayt

y/.':/1-3/;s/./sprintf'%02b ',$&/ge;@a=/\b\d/g;@b=(/\d\b/g,pop@a);@a=(shift@b,@a);say map{substr" .':",oct"0b$a[$_]$b[$_]",1}0..@a

-nBayrak için bayt eklendi .

Ruby cevabımla hemen hemen aynı algoritma , sadece daha kısa, çünkü ... Perl.

y/.':/1-3/;                         # transliterate [ .':] to [0123]
s/./sprintf'%02b ',$&/ge;           # convert each digit to 2-digit binary
@a=/\b\d/g;                         # grab the 1st digit of each pair
@b=(/\d\b/g,                        # 2nd digit of each pair
pop@a);                             # push the last element of a to b
@a=(shift@b,@a);                    # unshift the first element of b to a
say                                 # output...
map{                                # map over indices of a/b
substr" .':",oct"0b$a[$_]$b[$_]",1  # convert back from binary, find right char
}0..@a                              # @a is length of a

Obnoxiously, @a=(shift@b,@a)daha kısa unshift@a,shift@b.

Ne yazık ki, bunlar aynı uzunluktadır:

y/ .':/0-3/;s/./sprintf'%02b ',$&/ge;
s/./sprintf'%02b ',index" .':",$&/ge;

Ton Hospel'e 5 bayt, msh210 bayt için teşekkürler !


Eğer kullanabilir miyim ..@ayerine ..$#a? (Belki oct0 ölür ya da bir şey verir. Ben daha önce denemedim.)
msh210

Boşluğu 0'a dönüştürmeye gerek yok, zaten sprint için 0 olarak değerlendirecek. Ayrıca regex'te parantezden kurtulun. Eğer yakalama yapılmazsa, maçın tamamı, A//g
Ton Hospel

@ msh210 Bu gerçekten işe yarıyor; Teşekkürler!
Doorknob

@TonHospel Teşekkürler, bunları cevaba dahil etti (açıkçası sizinki hala mayımı tamamen sudan çekiyor).
Doorknob

Bu sprintfçok uzun. map$_%2,/./gve map$_/2|0,//gneredeyse daha kısa (denenmemiş) olmak zorunda
Ton Hospel

0

Python 3, 294 287 283 bayt

Waaayyyyyy çok uzun, ama bazı baytların golfünü deneyeceğim:

z=input()
x=len(z)
M=[0,1,2,3]
for Q in M:z=z.replace(":'. "[Q],"11100100"[Q*2:Q*2+2])
a=[]
b=[]
for X in range(x):a+=[z[X*2]];b+=[z[X*2+1]]
b=b[1:]+[a.pop()]
c=[b[0]]+a
z=""
for X in range(len(c)):
 y=c[X]+b[X]
 for Q in M:y=y.replace("11100100"[Q*2:Q*2+2],":'. "[Q])
 z+=y
print(z)

0

Lua, 139 bayt

print(((...):gsub(".",{[" "]="NN@",["."]="YN@",["'"]="NY@",[":"]="YY@"}):gsub("(.)@(.?)","%2%1"):gsub("..",{NN=" ",NY=".",YN="'",YY=":"})))

Kullanımı:

$ lua conveyor.lua ".'  '.::  :.'. . ::.'  '. . .::'  :.'."
' ' .:.''..'.'. ..:' ' .'. ...'''..'.'
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.