Orada kırdım (makasla)


15

Meydan okuma

Bir kesme kuralını ve başka bir dizeyi tanımlayan bir dize verildiğinde, ilk dize tarafından açıklanan kuralı kullanarak parçaları ikinci dizeden kesin.

Her iki dize de harflerden a-zveya A-Zhangisini seçerseniz seçin (aynı şekilde temsil edilmeleri gerekmez). İkinci dizgenin değiştirilme şekli aşağıda açıklanmaktadır:

Algoritma

İlk dizeyi alın ve bitişik olmayan (artan) harfler arasındaki boşlukları doldurduğunuzu hayal edin =; örneğin, abcfg=> abc==fg. Ardından, iki dizeyi sıralayın ve ilk dizeden eşittir işaretinin üzerinde olmayan tüm karakterleri döndürün. Örneğin, verilen abcfgve qrstuvwgirdi olarak:

qrstuvw - Modify
abc==fg - Modifier

qrs--vw -> qrsvw

Değiştirici eşit işaretlerle doldurulduktan sonra daha kısaysa, ikinci dizedeki tüm sondaki karakterler dahil edilmelidir. Değiştirici daha uzunsa, izleyen karakterler yok sayılır.

Değiştiricinin sıralanacağı garanti edilmez.

Test Durumları

abcfg, qrstuvw -> qrsvw
abqrs, qwertyuiopasdfghjklzxcvbnm -> qwjklzxcvbnm
za, qr -> qr
azazaz, qwertyuioplkjhgfdsazxcvbnmnbvcxzasdfghjklpoiuytrewq -> qmn

Referans Uygulama (test senaryoları oluşturmak için kullanılır) -> TIO

kurallar

  • Standart Loopholes Uygula
  • Girdiyi iki dize, iki karakter listesi, bir karakter matrisi vb. Olarak alabilirsiniz (diğer makul biçimler kabul edilebilir)
  • Bir dize veya karakter listesi (veya dizeler için başka bir standart biçim) olarak çıktı alabilirsiniz
  • Bu , bu nedenle her dilde bayt cinsinden en kısa cevap kendi dili için kazanan ilan edilir. Hiçbir cevap kabul edilmeyecektir.
  • Her iki dize de boş olabilir.

Mutlu Golf!

Kevin Cruijssen'in son iki zorluğundan esinlenerek, "Orada düzelttim ( bant / ip ile )"



2
burada görmek çok yaygın bir eğilim im
L_Church

@L_Church zorlukları bazen trendleri takip eder. İki ilgili zorluk yayınlandı, bu yüzden trend boyunca devam etmeye karar verdim: DI başka bir "düzelttim" zorluğu yayınlayacaktı ama a) şeyleri daha iyi kırmayı seviyorum 2) Başka bir yaratıcı ve yeterince farklı düşünemiyorum "fikir: P
HyperNeutrino

16
Sonraki zorluk:There, I blew it up (with a segfault)
Sihirli Ahtapot Urn

Yanıtlar:


5

JavaScript (ES6), 81 80 bayt

Körili sözdiziminde girdi alır (modify)(modifier).

s=>g=([c,...a],d=i=0,x=s[k=parseInt(c,36),i+=c?d&&(k-d+26)%26:1])=>x?x+g(a,k):''

Çevrimiçi deneyin!

Yorumlananlar

s =>                       // outer function, taking the string s to modify
  g = (                    // recursive inner function g(), taking:
    [c, ...a],             //   c = current modifier character; a[] = remaining characters
    d = i = 0,             //   d = code of previous modifier character; i = pointer in s
    x = s[                 //   x = i-th character of s
      k = parseInt(c, 36), //     k = code of the current modifier character in [10..35]
      i += c ?             //     update i; if c is defined:
        d &&               //       if d = 0, let i unchanged
        (k - d + 26) % 26  //       otherwise, add the difference between k and d (mod 26)
      :                    //     else:
        1                  //       just pick the next character by adding 1
    ]                      //   end of character lookup in s
  ) =>                     //
    x ?                    // if x is defined:
      x + g(a, k)          //   append x and do a recursive call to g()
    :                      // else:
      ''                   //   stop recursion


3

05AB1E , 20 17 bayt

ćsv¹Ç¥Nè<yú«}SðÊÏ

Çevrimiçi deneyin!


Her karakter arasındaki ASCII mesafesini hesaplar, pozitifse çok boşluk bırakarak. Negatif mesafe, spesifikasyona göre 0 boşluk eklenmesiyle sonuçlanır. Bundan sonra, dize 2'deki tüm karakterleri ilk manipüle edilen dizedeki boşluklarla aynı şekilde itiyorum.


Input: [azaz,qwertyuiopasdfghjklzxcvbnm]
--------------------------------------------------------------------------------

ćs                # Remove head, swap                           | [a, zaz]
  v               # Iterate...                                  | ............
   ¹Ç¥            # Push deltas between each char of string 1   | [a,[25,-25,25,-25]]
      Nè          # Push delta at index...                      | [a, 25]
        <         # Decrement (for 1-indexed answer)            | [a, 24]
         y        # Push current char in iteration...           | [a, 24, z]
          ú       # Append b spaces to a...                     | [a, '(spaces)z']
           «      # Concat                                      | [a(spaces)z]
            }     # End loop.                                   | [a(spaces)za(spaces)z]
             SðÊ  # Split, push 1 for non-space elements.       | [Long array of 1/0]
                Ï # Push chars from 2 that aren't spaces in 1.  | ['qmn']

% 90 daha fazla boşluk kullanmadan 2-3 bayt kaybedebileceğimden eminim, ancak N dizinindeki karakterleri itiyorum.

05AB1E , 18 bayt

Ç¥ε1‚Z}ηO0¸ìʒ²g‹}è

Çevrimiçi deneyin!

Bir şey eksikmişim gibi hissediyorum ε1‚Z}, ʒ²g‹}ya da geliştirmeler görürseniz ya da 0¸ìlmk ...

Ç¥ε1‚Z}ηO0¸ìè13 yaşındaydı, ama ne zaman n > |input_2|yapılır input_2[n%|input_2|]...


İkinci sürümünüz Ç ¥ ε1M} olabilir. ¥ ʒ²g ‹} è , ancak üç sürümün hiçbiri bu girdiler için çalışmıyor gibi görünüyor.
Emigna

Yukarıdaki sürüm eklenerek düzeltilebilir IgÅ1«, ancak belki de daha iyi bir yol var mı?
Emigna

2

Stax , 15 bayt

Ç«|¢Äα•è@╟╣i`vF

Çalıştır ve hata ayıkla

Bu ascii temsilidir.

:-Z+{v0|Mt|cB]pFp
  1. İkili farklar elde edin.
  2. Sıfıra ekleyin.
  3. Her bir fark için tekrarlayın
    1. 1 çıkarın ve maksimum değeri sıfır ile alın.
    2. Bu karakterleri dizenin başından kaldırın.
    3. Dize boşsa durun.
  4. Dizenin geri kalanını yazdırın.

1
Kodun nasıl söylediğini seviyorum╟╣i
Uriel

2

Jöle , 14 bayt

OI’R¬⁸żFḣL}aḟ0

Değiştiriciyi soldaki karakter listesi ve sağda değiştirilecek karakter listesi olarak kabul eden ikili karakterler listesi.

Çevrimiçi deneyin!

Nasıl?

OI’R¬⁸żFḣL}aḟ0 - Link list of characters Modifier, list of characters InStr
               -                       e.g.  ['a','c','g','a'], ['n','m','l','k','j']
O              - ordinals of Modifier        [97,99,103,97]
 I             - incremental differences     [2,4,-6]
  ’            - decrement                   [1,3,-7]
   R           - range                       [[1],[1,2,3],[]]
    ¬          - NOT (vectorises)            [[0],[0,0,0],[]]
     ⁸         - chain's left argument, Modifier
      ż        - zip together                [['a',[0]],['c',[0,0,0]],['g',[]],['a']]
       F       - flatten                     ['a',0,'c',0,0,0,'g','a']
         L}    - length of right (InStr)     5
        ḣ      - head to index               ['a',0,'c',0,0] (if shorter or equal, no effect)
           a   - AND with InStr (vectorises) ['n',0,'l',0,0]
            ḟ0 - filter out zeros            ['n','l']

Kullanılan ¬cevabım hile. :) (teknik olarak aynı algoritmaya sahibiz, ancak daha kısa, iyi iş çıkardınız!)
Outgolfer Erik

Oh evet, hakkında yorum yapacaktım ¬, ama henüz hazır olmayan 13 baytlık bir girişimin bir cep telefonu şişman parmak direğini yaptığımı unuttum.
Jonathan Allan

2

JavaScript (ES6), 79 bayt

f=([t,...T],s,z=T[0])=>z&&s?s[0]+f(T,s.slice(t>z||(parseInt(t+z,36)-370)%37)):s

Harfler arasındaki mesafeyi hesaplamak için aynı algoritmayı kullanır. son cevap .

Test senaryoları:



2

K (ngn / k) , 27 24 25 bayt

{y[+\0,1|1_-':x,!#y]^" "}

Çevrimiçi deneyin!

{y[+\0,1|1_-':x,!#y]^" "}

{                       } function with x and y as arguments
                 #y       the length of y
                !#y       0 1 2 ... (#y)-1
              x,          x concatenated with
           -':            differences between pairs
         1_               rm extra leading item
       1|                 max between 1 and
     0,                   prepend 0
   +\                     partial sums
 y[                ]      index y with that
                    ^" "  rm spaces due to out-of-bounds indexing




1

Odun kömürü , 29 28 bayt

⭆η×ιI§⁺⭆θ⁺×0∧μ⊖⁻℅λ℅§θ⊖μ1⭆η1κ

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Orada cevabımı temel alarak teyp ile sabitledim. Açıklama:

       ⭆θ⁺×0∧μ⊖⁻℅λ℅§θ⊖μ1        Fix it with tape, but map to 1s and 0s
      ⁺                 ⭆η1     Append extra 1s just in case
⭆η                              Map over the second string
     §                     κ    Get the character from the fixed string
    I                           Cast to integer
  ×ι                            Repeat the current character that many times
                                Implicitly print

Not: Bu 28 bayt olmalıdır, ancak Andyazma sırasında kesilir.


0

Java 8, 117 bayt

a->b->{for(int i=0,j;++i<a.length;b=j>0&b.length()>=i+j?b.substring(0,i)+b.substring(i+j):b)j=a[i]+~a[i-1];return b;}

Açıklama:

Çevrimiçi deneyin.

a->b->{                   // Method with char-array + String parameters and String return
  for(int i=0,j;++i<a.length;
                          //  Loop `i` in range [1; length_of_array)
      b=                  //    After every iteration: change the String-input to:
        j>0               //     If `j` is larger than 0,
        &b.length()>=i+j? //     and the length of `b` is larger or equal to `i+j`:
         b.substring(0,i) //      Take the substring [0; i)
         +b.substring(i+j)//      + the substring [i+j; end_of_string]
        :                 //     Else:
         b)               //      Leave `b` the same
    j=a[i]+~a[i-1];       //   Set `j` to the difference between two adjacent chars - 1
  return b;}              //  Return the modified input-String
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.