Üstleri ASCII sanatına dönüştür


28

Görev

Senin görevin böyle dizeleri dönüştürmek için:

abc^d+ef^g + hijk^l - M^NO^P (Ag^+)

Bunun gibi dizgilere:

   d   g       l    N P    +
abc +ef  + hijk  - M O  (Ag )

Hangi bir yaklaşım abc d + ef g + hijk l - M , N O P (Ag + )

Kelimelerde, harflerin hemen yanındaki karakterleri, bir harf için bir karakter olan üst satıra yükseltin.

gözlük

  • Çıktıda ekstra takip eden boşluklara izin verilir.
  • Gibi hiçbir zincirlenmiş şapka işareti m^n^ogirdi olarak verilmeyecektir.
  • Bir şapka, hemen boşluk veya başka bir şapka tarafından takip edilmeyecektir.
  • Bir şapka bir boşluktan hemen önce gelmeyecektir.
  • Tüm kareler en az bir karakter ve ardından en az bir karakter olacak.
  • Giriş dizesi yalnızca yazdırılabilir ASCII karakterlerini içerecektir (U + 0020 - U + 007E)
  • İki satırlık çıkış yerine, iki satırlık bir dizinin çıktısına izin verilir.

Regex konuşanlara: giriş dizgisi bu regex ile eşleşecektir:

/^(?!.*(\^.\^|\^\^|\^ | \^))(?!\^)[ -~]*(?<!\^)$/

Liderler Sıralaması


2
@TimmyD "Girdi dizgisi sadece yazdırılabilir ASCII karakterleri içerecektir (U + 0020 - U + 007E)"
Leaky Nun

3
Neden üssünde durmak? H_2O'yu idare eden bir şey istiyorum!
Neil

1
@ Neil O zaman kendi mücadeleni yap, ben de bu yarışmayı bunun bir kopyası olarak kapatabilirim. :)
Leaky Nun

1
Örneğinize dayanarak, onların süperkürler olduğunu söyleyebilirim , zorunlu olarak üstler değil
Luis Mendo

4
Regex konuşanlar, ifadenin sıkı bir şekilde kısıtlandığı oldukça düzenli bir ülkeden geliyorlar. Önde gelen ölüm nedeni feci geri tepmedir.
David Conrad,

Yanıtlar:


19

V , 15 14 bayt

ÄÒ +òf^xxé kPj

Çevrimiçi deneyin!

Oldukça basit bir çözüm. Mükemmel V meydan!

Açıklama:

Ä                "Duplicate this current line
 Ò               "Replace this line with spaces
   +             "Move to the beginning of the next line
    ò         ò  "Recursively (The second ò is implicit):
     f^          "  Find a caret
       xx        "  Delete two characters. The second will be saved into the main register
         é       "  Insert a space
           k     "  Move up
            P    "  Paste from the main register
             j   "  Move down

Uygun şekilde, özyinelemenin nasıl çalıştığına bağlı olarak, bu her bir şapka için bir kez çalışacaktır.


2
vim bu zorluk için mükemmel bir dildir. +1
Downgoat

18

Cheddar, 77 72 67 bayt

l->l.chars.vfuse.replace("^\n"," ").lines.map(j->"%-2s"%j).turn(3)

Regex yok!

Bu cevabı seviyorum, çünkü Cheddar'ın yeteneklerinin harika bir göstergesi. Temelde Conor'un eklediği değiştirme fonksiyonu sayesinde. PR'dan dev'e hiçbir zaman yapmadı, bu yüzden değiştirme işlevi yalnızca bu dalda var (güncelleme: PR'ı yaptım ve şimdi yükleyebileceğiniz en son beta şubesinde npm install -g cheddar-lang)

Onu golf oynamak için bir yol buldum ama maalesef ürün uzunlukları aynı olmadığında bu durumun göz ardı edilmesiyle sonuçlanıyor:

["   denifednud   denifednug       denifednul    denifednuN denifednuP    denifednu+ ", "abcdenifednu +efdenifednu  + hijkdenifednu  - Mdenifednu Odenifednu  (Agdenifednu )"]

Ben regex kullanarak bayt bir sürü kurtarabilirdi ve aslında ben sadece Cheddar için Regexes yaptı ... tek sorun hiçbir regex işlevleri vardır yani: /

açıklama

l->                    // Function take input as `l`
   l.chars             // Get array of chars in input
   .vfuse              // Join with newlines
   .replace("^\n"," ") // Replace `^\n` with a space globally
   .lines              // Get the lines (see below for more details on what this returns)
   .map(j->            // Loop through each "line" `j` is arg
       "%-2s"          // C-like printf format.
                       // think of as: padRight(j, " ", 2)
                       // see below for more details
        % j            // Pass j as the string to insert
   ).turn(3)           // Turn the string 270 degrees (see below)
   .vfuse              // Vertically fuse to get result (this is not needed as we can output an array of the lines)

Daha iyi bir anlayış elde etmek için. Bunun için ne .linesdöner1^2

["1", " 2"]

.turnrotate bununla:

1
 2

içine:

 2
1

Daha net hale getirecek başka bir örnek:

1
 2
2
 2

dönüşür:

 2 2
1 2

Neden biçimlendirmek?

Ne %-2syapıyor oldukça basittir. %bir "format" başlattığımızı ya da bu noktada bu dizgeye bir değişken ekleneceğini belirtir. -dize sağ-ped anlamına gelir 2ve maksimum uzunluktur. Varsayılan olarak boşluklarla doludur. ssadece bir dize olduğunu belirtir. Ne yaptığını görmek için:

"%-2s" % "a"  == "a "
"%-2s" % " a" == " a"

2
: DI her zaman çedarı yener.
DJMcMayhem

@DrGreenEggsandIronMan: D teşekkür ederim
Downgoat

1
Cheddar turndizeleri için bir yöntem var ?
TuxCrafting,

6
-1 Bu dilin adı her zaman beni acıktırıyor.
counterclockwis 'te

@ TùxCräftîñg sadece 2B diziler için, bu yüzden satırları almak için .lines kullandım.
Downgoat

10

Perl, 21 + 1 = 22 bayt

say'';s/\^(.)/♥[A\1↓/

-pBayrakla koş . Değiştir ham ile ESCbyte ( 0x1b) ve dikey sekme ( 0x0b).

Dikey sekme, Martin Ender'in fikridir. İki bayt kurtardı! Teşekkürler.


Üstatlar son konsol istemiyle örtüşmemek için imleci başlangıçta bir satır aşağı kaydırmanız gerekmez mi?
Martin Ender

Bundan emin değildim, evet. İhtiyacım olan kadar alana sahip olduğumu varsaymıştım, ama bu biraz aldatıcı olabilir. (Genel olarak, bu tür bir sorunu çözmek için imleç hareketlerini kullanmaktan çok gurur duymuyorum, ancak akla gelen ilk şey ...)
Lynn 23

2
Bence bu iyi bir çözüm ama sonuç görsel olarak ipin istendiği şekilde basılmasından ayırt edilemez olmalı.
Martin Ender

1
Ne kadar güzel bir çözüm
Thomas Weller

7

JavaScript (ES6), 56 55 bayt

s=>[/.(\^(.))?/g,/\^.(())/g].map(r=>s.replace(r,' $2'))

Elbette kurtarmaya Regexps. Birincisi, bir şapka bulmazsa, tüm karakterleri boşluklarla değiştirir, bu durumda şapka işaretini siler ve karakteri ondan sonra tutar. (Bu karakterlerin varolduğu garantilidir.) İkincisi, her şapka ve bir sonraki karakteri bir boşlukla değiştirmenin açık olanıdır.

Düzenleme: İkinci değiştirme için değiştirme dizesini yeniden kullanmak için bir yol tasarlayan @ değiştirilen bir regexps dizisi üzerinde eşleştirilmesine izin veren lynn sayesinde 1 bayt kaydedildi.


2
s=>[/.(\^(.))?/g,/\^.(())/g].map(r=>s.replace(r,' $2'))Bir bayt daha kısa gibi görünüyor .
Lynn,

@Lynn Bu gerçekten kurnaz bir dublör!
Neil

7

Python 3, 157 101 98 85 83 74 bayt

Bu çözüm, önceki karakterin olup olmadığını izler ^, daha sonra buna göre birinci veya ikinci satıra çıkıp çıkmayacağına karar verir.

Bir dizi olarak çıktılar ['firstline', 'secondline'].

a=['']*2
l=0
for c in input():x=c=='^';a[l]+=c*x;a[~l]+=' '*x;l=x
print(a)

Kaydedilen 13 15 @LeakyNun sayesinde bayt!

@Joffan sayesinde 7 bayt kaydedildi!


1
Güzel sonlu durumlu otomat.
Sızdıran Rahibe

O olması daha iyi olurdu a=['','']ve concatenate ' 've cdoğrudan içine a[l]ve a[~l]?
Joffan

6

Python 2,73 bayt

l=['']*2;p=1
for c in input():b=c!='^';l[p]+=c*b;l[~p]+=' '*b;p=b
print l

Regex yok. Önceki karakterin olup olmadığını hatırlar ^ve geçerli karakteri buna göre üst veya alt satıra, diğerinde boşluk koyar.


4

Pyth, 17 bayt

CcsmX~Z1j;d;cQ\^2

             Q      input string
            c \^    split on '^'
   m                map for sections d:
    X      ;          insert a space at index:
     ~Z1                the old value of Z (initially 0), before setting Z to 1
                      into:
        j;d             the section joined on spaces
  s                 concatenate
 c              2   chop into groups of 2
C                   transpose

2 dizeli bir dizi döndürür. ( jOnlara bir yeni satırla katılmaya bağlıdır.)

Çevrimiçi deneyin .


1
Soyadınızın nasıl telaffuz edildiğini merak edemiyorum. : D
Lynn

4

MATL , 18 bayt

94=t1YSt~&vG*cw~Z)

Çevrimiçi deneyin!

94=    % Take input implicitly. Create logical array of the same size that contains
       % true for carets, false otherwise
t      % Push a copy of this array
1YS    % Circularly shift 1 unit to the right. This gives an array that contains true
       % for the elements right after a caret (superindices), and false for the rest 
t~     % Push a copy and negate
&v     % Concatenate vertically. This gives a 2D, 2-row array
G*     % Push the input again, multiply with broadcast. This gives a 2D array in
       % which the first row contains the superindices (characters after a caret)
       % and 0 for the rest; and the second row contains the non-superindices and
       % 0 for the superindices
c      % Convert to char
w      % Swap. Brings to top the array containing true for carets and false otherwise
~      % Negate
Z)     % Use as logical index to remove rows that contain carets. Display implicitly

4

Ruby, 47 + 1 ( -nbayrak) = 48 bayt

puts$_.gsub(/\^(.)|./){$1||" "},gsub(/\^./," ")

Öyle koş: ruby -ne 'puts$_.gsub(/\^(.)|./){$1||" "},gsub(/\^./," ")'


Ben kullanmakta 1 bayt kurtarabilir miyiz $_=$_.gsub(/\^(.)|./){$1||" "}+gsub(/\^./," ")ve -pyerine -n.
Dom Hastings,

1
@DomHastings, çalışıp çalışmadığına bakılmaksızın, kodunuzun yeni bir satırı görünmüyor ve ekleme +$/, baytları kurtarmayacağı anlamına geliyor. argümanlar arasında putsolduğunda otomatik olarak sizin için newline atıyor ,.
Value Ink,

Oh ... Kullanarak test ettim ruby -p ... <<< 'input'ama katılıyorum, eğer yeni çizgiyi kaçırıyorsa, bu iyi değil! Aslında, daha önce testlerime yeni bir satır eklenmiş olabilirdi ... İşimdeydi ama kontrol edemiyorum!
Dom Hastings,

@DomHastings Tekrar bakarsak, benim tahminime göre getsçoğu zaman izleyen yeni satırı içerir, ancak izleyen yeni satırı içermeyen bir dosyaya aktarırsanız, o zaman görünmez ve çıktı yanlış olur. . Komut satırı argümanı ise, ruby -p ... inputfileRuby getsdosyaya yönlendirdiği için kodunuzu sınayın .
Value Ink,

Anladım, çok mantıklı. Sanırım dosyadaki takip eden bir yeni satır da sorunu çözecektir. Ben hiçbir şekilde uzman bir Rubyist değilim, bu yüzden bugün biraz daha fazla şey öğrendim gibi hissediyorum. Teşekkürler!
Dom Hastings

3

Python (2), 76 68 67 Bayt

@LeakyNun sayesinde -5 bayt

@ KevinLau-notKenny sayesinde -3 Bayt

@ValueInk sayesinde -1 Bayt

-0 bytes @DrGreenEggsandIronMan sayesinde

import re
lambda i,s=re.sub:[s("(?<!\^).\^?"," ",i),s("\^."," ",i)]

Bu anonim Lambda işlevi giriş dizesini tek argümanı olarak alır ve yeni bir satırla ayrılmış iki çıktı satırını döndürür. Aramak için önce "f =" yazarak bir isim verin.

Oldukça basit regex: İlk kısım, aşağıdakileri bir boşlukla değiştirir: Herhangi bir karakter ve havuç unu veya sadece bir karakter, ancak onlardan önce hiç şapka yoksa. İkinci bölüm, dizgideki herhangi bir şapka ve karakterin arkasındaki boşluk ile değiştirilir.


@LeakyNun: Bazı nedenlerden dolayı, kütüphaneleri ithal edip etmediğimi merak ediyorum. Yorumunuzu gördüğümde şu anda bu soruyu 2. kopyalıyordum. Sen ve Kevin sayesinde!
KarlKastor

Bir byte ile çıkarabilirsinizfrom re import*
DJMcMayhem

@DrGreenEggsandIronMan Bu, tam olarak aynı bayt sayısını kullanıyor gibi görünüyor. (yukarıya bakın)
KarlKastor

Eski ithalat deyimini saklayın ve lambda i,s=re.sub:[s("(?<!\^).\^?"," ",i),s("\^."," ",i)]-1 bayt için yapın
Value Ink


2

Retina, 16 bayt

S`^
\^(.)
♥[A$1↓

Perl cevabımın bir limanı, Martin Ender tarafından işaret edildi. Değiştir ham tarafından ESCbyte ( 0x1b) ve dikey sekme ( 0x0b).


2

kabuk + TeX + catdvi, 51 43 bayt

tex '\empty$'$1'$\end'>n;catdvi *i|head -n2

texBazı güzel matematiği dizmek için kullanır ve sonra catdvibir metin gösterimi yapmak için kullanır . Head komutu aksi takdirde mevcut olan önemsizleri (sayfa numaralandırma, izleyen satırları) kaldırır.

Düzenleme: Neden uzun, doğru, şey ve /dev/nullyan etkileri görmezden gelip tek bir mektup dosyasına yazabilirsiniz yönlendirme ?


Örnek

Giriş: abc^d+ef^g + hijk^l - M^NO^P (Ag^+)

TeX çıkışı (denkleme kırpılmış): "Güzel" matematik! Son çıktı:

   d   g     l  N P   +
abc +ef +hijk -M O (Ag )

Varsayımlar: Boş dir (veya özellikle "i" ile biten adı olmayan bir dir) başlayın. Giriş, kabuk betiğine tek bir argümandır. Giriş boş bir dize değil.

Birisi bana bunun kural ihlali olup olmadığını söyler catdvi.


2

Haskell, 74 56 55 bayt

g('^':c:r)=(c,' '):g r
g(c:r)=(' ',c):g r
g x=x
unzip.g

Bir çift dizge döndürür. Kullanım örneği: unzip.g $ "abc^d+e:qf^g + hijk^l - M^NO^P: (Ag^+)"->(" d g l N P + ","abc +e:qf + hijk - M O : (Ag )")

gbirinci elemanın üst satırdaki karakter ve ikinci elemanın alt satırdaki karakter olduğu bir çift listesi yapar. unzipbir çift listeye dönüştürür.

Düzenleme: @ xnor unzip, 18 bayt kazandıran önerdi . @Likonikoni tasarruf için bir bayt daha buldu. Teşekkürler!


Bunu yapabilir misin j=unzip.g?
xnor

@xnor: oh, kendimi görmemem nasıl aptalca! Çok teşekkürler!
nimi

Bir bayt kaydetmek için g[]=[]ile değiştirebilirsiniz g x=x.
Laikoni

@Likonik: Benekliyim! Teşekkürler!
nimi,

1

Perl, 35 bayt

İçin 34 bayt kodu + 1 -p

$_=s/\^(.)|./$1||$"/ger.s/\^./ /gr

kullanım

perl -pe '$_=s/\^(.)|./$1||$"/ger.s/\^./ /gr' <<< 'abc^d+ef^g + hijk^l - M^NO^P (Ag^+)'
   d   g       l    N P    + 
abc +ef  + hijk  - M O  (Ag )

Not: Bu tam olarak daha sonra casusluk yaptığım Value Ink'in cevabıyla aynı. Bu gerçekten gerekliyse Ruby çözümüne eklemediğinden kaldırır.


1

Java 8 lambda, 132 128 112 karakter

i->{String[]r={"",""};for(char j=0,c;j<i.length();j++){c=i[j];r[0]+=c==94?i[++j]:32;r[1]+=c==94?32:c;}return r;}

Ungolfed versiyonu şöyle görünür:

public class Q86647 {

    static String[] printExponents(char[] input) {
        String[] result = {"",""};
        for (char j = 0, c; j < input.length(); j++) {
            c = input[j];
            result[0] += c == 94 ? input[++j] : 32;
            result[1] += c == 94 ? 32 : c;
        }
        return result;
    }
}

Dizi olarak çıktılar, sadece bir şapka olup olmadığını kontrol eder ve eğer öyleyse bir sonraki karakter üst sıraya konur, başka bir boşluk olur.


Güncellemeler

4 karakter kaydetmek için karakterleri ascii değerleriyle değiştirildi.

Bir karakter dizisi yerine girdi olarak kullanmak için işaret ettiği için @LeakyLun teşekkürler.

Geçiş için @KevinCruijssen Da teşekkür intetmek charbiraz daha fazla karakter kaydedin.


Bayt sayısının azaltıp azalmayacağını görmek için giriş yapmayı char[]ve kullanmayı deneyebilirsiniz for(char c:i).
Leaky Nun

Girdi olarak : i->{String[]r={"",""};for(char j=0,c;j<i.length;j++){c=i[j];r[0]+=c==94?i[++j]:32;r[1]+=c==94?32:c;}return r;}ile 110 byte'a kadar biraz golf yapabilirsiniz "abc^d+ef^g + hijk^l - M^NO^P (Ag^+)".toCharArray(). ( Bu değişikliklerin düşüncesi. )
Kevin Cruijssen

1

Hindistan Cevizi , 122 114 96 bayt

Düzenleme: 8 26 bayt Leaky Nun yardımı ile aşağı.

def e(s,l)=''==l and s or"^"==l[0]and l[1]+e(s+' ',l[2:])or' '+e(s+l[0],l[1:])
f=print..e$('\n')

Bugün öğrendiğim gibi, python üçlü bir şartlı operatöre sahip, ya da aslında ikisinden biri: <true_expr> if <condition> else <false_expr>ve <condition> and <true_expr> or <false_expr>sonuncusu bir karakter daha az.
Bir python uyumlu sürümü ideone edilebilir .


İlk girişim:

def e(s,l):
 case l:
  match['^',c]+r:return c+e(s+' ',r)
  match[c]+r:return' '+e(s+c,r)
 else:return s
f=print..e$('\n')

f("abc^d+ef^g + hijk^l - M^NO^P (Ag^+)")Parmak izi ile arama

   d   g       l    N P    +
abc +ef  + hijk  - M O  (Ag )

Hindistan cevizinde golf oynamayı isteyen var mı? Python'u, ..yukarıda kullanılan desen eşleştirme ve işlev birleştirme (ile ) gibi daha işlevsel programlama kavramları ile zenginleştirir . Hindistan cevizindeki ilk denemem olduğundan, herhangi bir ipucu memnuniyet duyardı.

Geçerli bir python kodu da geçerli hindistancevizi ve daha kısa python cevapları gönderildiği için bu kesinlikle kısaltılabilir, ancak tamamen işlevsel bir çözüm bulmaya çalıştım.


Bence x and y or zyerine üçlü operatörleri ( ) kullanabilirsiniz case.
Leaky Nun

Hatta kullanabilirsiniz s[0]=="^"yerinematch['^',c]+r in l
Çatlak Nun

@LeakyNun ben değiştirdiğinizde match['^',c]+rile s[0]=="^"daha sonra, cve rartık bağlıdırlar. Bu nasıl yardımcı olur?
Laikoni,

Sen kullanabilirsiniz s[1]yerine cve s[2:]yerine r.
Leaky Nun

o zaman şimdi üçlü kullanabilirsiniz.
Sızdıran Rahibe,

0

Dyalog APL, 34 bayt

{(0 1=⊂b/¯1⌽b){⍺\⍺/⍵}¨⊂⍵/⍨b←⍵≠'∧'}

İki satırlı iki elemanlı bir vektör döndürür

Örnek çalıştırma (öndeki engebeli insan tüketimi için iki el. Vektörü biçimlendirmek için):

      ↑{(0 1=⊂b/¯1⌽b){⍺\⍺/⍵}¨⊂⍵/⍨b←⍵≠'∧'}'abc∧d+ef∧g + hijk∧l - M∧NO∧P (Ag∧+)'
   d   g       l    N P    + 
abc +ef  + hijk  - M O  (Ag )

Hiçbir şey yapmama koduyla ilgili soruma yorumunuzu yapın: evet, koyduğunuz kod önemlidir.
haykam

0

PowerShell v2 +, 88 83 bayt

-join([char[]]$args[0]|%{if($c){$_;$b+=' '}elseif($_-94){$b+=$_;' '}$c=$_-eq94});$b

Diğerlerinden biraz daha uzun, ama biraz PowerShell büyüsü ve biraz farklı bir mantık sergiliyor.

Temelde Python cevaplarıyla aynı kavram - giriş karakter karakterini tekrar eder, öncekinin bir işaret ( $c) olup olmadığını hatırlar ve mevcut karakteri uygun noktaya koyarız. Bununla birlikte, çıktının nereye işleneceğini belirlemek için mantık ve yöntem biraz farklı ve tuple veya ayrı değişkenler olmadan - önceki karakterin bir şapka olup olmadığını test ettik ve eğer öyleyse karakteri boru hattına çıkarıp bir boşluk birleştirelim $b. Aksi halde, mevcut karakterin bir şapka olup olmadığını kontrol ederiz elseif($_-94)ve olmadığı sürece, mevcut karakteri birleştirir $bve boru hattına bir boşluk bırakırız. Son olarak, mevcut karakterin bir sonraki tur için bir şapka olup olmadığını belirledik.

Bu karakterleri boru hattından parenler -joinhalinde bir araya getiriyoruz, onları bir dize dönüştürüyoruz ve bunları bir $bboru hattında bırakıyoruz . Sonunda çıktı, arada bir yeni satır ile örtük.

Karşılaştırma için, burada @ xnor'ın Python cevabının direkt portu , 85 byte :

$a=,''*2;[char[]]$args[($l=0)]|%{$a[!$l]+="$_"*($c=$_-ne94);$a[$l]+=' '*$c;$l=!$c};$a

0

Gema, 42 41 karakter

\^?=?@set{s;$s }
?=\ @append{s;?}
\Z=\n$s

Gema girişi akış olarak işler, bu nedenle tek bir geçişte çözmek zorundasınız: ilk satır hemen işlendiği gibi yazılır, ikinci satır $ s değişkeninde toplanır, sonra sonunda çıkış elde edilir.

Örnek çalışma:

bash-4.3$ gema '\^?=?@set{s;$s };?=\ @append{s;?};\Z=\n$s' <<< 'abc^d+ef^g + hijk^l - M^NO^P (Ag^+)'
   d   g       l    N P    +  
abc +ef  + hijk  - M O  (Ag )

0

Tarçınlı Sakız, 21 bayt

0000000: 5306 6533 bd92 d1db 8899 8381 a2f8 8f8c  S.e3............
0000010: 1230 249e a1                             .0$..

Sigara rakip. Çevrimiçi deneyin.

açıklama

Ben bir regex golfçü değilim, bu yüzden muhtemelen bunu yapmanın daha iyi bir yolu var.

Dize şu şekilde açar:

S(?<!\^)[^^]& &\^&`S\^.& 

(sondaki boşluğa dikkat edin)

İlk Saşama girdi alır ve negatif bir gözbebek kullanarak, bir satırlık bir şapka olmadan önce bir şapka işareti olmayan tüm karakterleri değiştirir, daha sonra tüm kedileri siler. Sonra hemen değiştirilen giriş dizesini yeni bir satırla çıktılar ve o Saşamayı kaldırır . STDIN artık tükendiğinden ve önceki aşama herhangi bir girdi sağlamadığından, bir sonraki Saşama STDIN'in son satırını tekrar alır ve ardından ardından gelen tüm karakterleri boşluk bırakarak değiştirir ve bunun çıktısını alır.

Perl psuedo kodunda:

$first_stage_sub_1 = ($input =~ s/(?<!\^)[^^]/ /gr);
$first_stage_sub_2 = ($first_stage_sub_1 =~ s/\^//gr);
print $first_stage_sub_2, "\n";

$second_stage_sub = ($input =~ s/\^./ /gr);
print $second_stage_sub, "\n";

0

J , 28 27 bayt

0|:t#]{."0~_1-_1|.t=.'^'~:]

Çevrimiçi deneyin!

                  t=.'^'~:]    0 for ^, 1 for the rest, define t
              _1|.             Shift right, now zeroes are for superscripts         
     ]{."0~_1-                 Prepend that many spaces to each character
   t#                          Remove the rows with carets
0|:                            Transpose

Daha iyi bir yol olmalı ...

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.