Revu'a heceleyin


16

Aslında değil tarafından ne ilham atbaş Öz palindromes ne de tarafından Genelleştirilmiş Gematria Hesap .

Bir dizi verilen s uzunluğunun N , çıkış Revu'a sekansı ilk karakteri, s , ilk iki karakter s , ... ilk N -2 karakter s , birinci n -1 karakter s , tüm s .

Dize yalnızca Unicode (herhangi bir kodlama istediğiniz) sahip karakterler oluşacak güçlü yönünü yönlülüğe sahip ve 0x0000 ila 0xFFFF aralığında bulunan . Ancak, yön kontrolü karakterleri oluşmaz. Herhangi bir dizgideki tüm karakterler aynı yöne sahip olacaktır.

Dizi gösterimi ["t","te","tes","test"]olarak, boşlukla ayrılmış dize olarak "t te tes test", çok satırlı metin olarak dönebilirsiniz
t
te
tes
test
, önceden biçimlendirilmiş bir dizi

t
te
tes
Ölçek
veya benzeri bir şey. Satır aralığı, ayırma ve sondaki boşluk miktarları önemli değildir ve ikisi de sondaki satır sonu değildir. Emin değilseniz sorun.

Sağdan Sola giriş doğru şekilde Sağdan Sola çıktı ile sonuçlanmalıdır:
Giriş: "נחמן"
Çıkış: "נ נח נחמ נחמן"veya

נ
נח
נחמ
נחמן
, veya ["נ","נח","נחמ","נחמן"]. Arasında geçersiz sonuçlarıdır "נחמן נחמ נח נ", "ן מן חמן נחמן"ve "נחמן חמן מן ן".

Yanıtlar:


17

Dyalog APL, 2 bayt

,\

Birleştirerek birikimli azaltma. Burada deneyin .

A önekini kullandığınızda çıktının biçimlendirmesi daha iyi olur , ancak doğru sırayı açıkça gösterir.


2
Aynı çözüm K'de de aynı nedenden ötürü işe yarıyor
JohnE

@JohnE K Unicode kullanıyor mu?
Adám

12

JavaScript (ES6), 27 26 25 bayt

@Nicael ve @ MartinBüttner sayesinde bir bayt, @Neil sayesinde bir bayt kaydedildi

x=>x.replace(/.?/g,"$` ")

JS işlevinin bazı yerleşik özelliklerinden yararlanır .replace. Özellikle, $`yedekte, eşleşen karakterden önceki her şey olur. Normal ifade /.?/gyerine regex kullanmak, /./gsonunda boş dizeyle de eşleşir.


Başka bir bayt kurtardım: f=x=>x.replace(/.?/g,"$")`. Ekstra bir lider alan elde edersiniz ama buna izin verilir
Neil

@Neil Teşekkürler, işe yarayacak hiçbir fikrim yoktu!
ETHproductions

Ugh, `` düzgün bir şekilde alıntı yapmayı unuttum, ama ne demek istediğimi anladığını görüyorum.
Neil

6

Japt, 10 4 bayt

Kümülatif bir azalmanın bu durumda çok yararlı olacağını fark etmedim. :-)

UŒ+

Varsayılan olarak virgülle ayrılmış bir dizi olarak çıktılar. Buna izin verilmiyorsa, bu 6 baytlık kodu kullanın:

U¬å+ ·

Çevrimiçi deneyin!

Nasıl çalışır

      // Implicit: U = input string
U¬    // Split U into chars.
  å+  // Cumulative reduce: loop through each item in the array, concatenating it to the total.
      // ["t","e","s","t"] => ["t","te","tes","test"].
      // Implicit: output last expression

7
"Çevrimiçi deneyin!" İfadesini kullanıyor. ve çevrimiçi deneyin! ahlaki olarak kabul edilebilir mi? : P
Martin Ender

3
@ MartinBüttner Dennis'in ticari markasından önce yaklaşık bir aydır Japt cevaplarında bu cümleyi kullanıyordum. Kullanmaya devam etmek için bazı ahlaki hakkım olması gerektiğini hissediyorum: P
ETHproductions

6

Brainfuck, 40 bayt

Konsolum Sağdan Sola karakterleri desteklemiyor, ancak çalışacağını sanmıyorum: c

++++++++++>,[>,]<[<]>[[<+>-]<[<]>[.>]>]

Ungolfed:

++++++++++> # Store 10 (Newline)
,[>,]       # Store input
<[<]>       # Goto first character
[           # While next character
  [<+>-]    # Copy character to the left
  <[<]>     # Goto first character
  [.>]      # Print all charaters
  >         # Go to next character
]

13
Onları ayrı cevaplar olarak gönderebilirsiniz.
nicael

20
Sen olmalıdır ayrı cevaplar olarak göndermeden.
Timwi

17
Sen gerekir ayrı cevaplar olarak göndermeden.
nicael

21
Sen OLACAK ayrı cevaplar olarak göndermeden.
Timwi

11
Sen İKNA ayrı cevaplar olarak göndermek için beni.
YoYoYonnY

5

Retina, 11 7 bayt

.
 $`$0

Çıktı, boşlukla ayrılır, önde gelen boşluk ve izleyen satır besleme ile.

Çevrimiçi deneyin!


Posterity için, 5 bayt daha Perl'e taşınabilir: perl -pE 's/./$$ & \ n / g'`. (11 ay geç kaldım, biliyorum)
Dada

4

Python, 35

f=lambda s:f(s[:-1])+[s]if s else[]

Sahte olduğu and/oriçin özyinelemeyi basitleştirmek için kullanmanın bir yolu []bulunamadı.

Özyinelemeli çözüm, dizelerin bir listesini döndürür.

Çevrimiçi deneyin


4

Prolog (SWI), 60 49 bayt

Kod:

p(X):-findall(S,atom_prefix(X,S),[_|R]),write(R).

Açıklaması:

atom_prefix ile X giriş ve set S bir değişken olarak atomu 1 önek veren X boş atomuyla başlayarak.

findall tüm çözümleri alır ve listeye koyar.

[_ | R] başı atıyor (boş atom) ve kuyruğu R

Örnekler:

p('נחמן').
[נ, נח, נחמ, נחמן]

p('test').
[t, te, tes, test]

Buradan çevrimiçi deneyin

Düzenleme: sadece kuyruğu R'de saklayarak 11 bayt kaydetti .



3

GNU Sed, 21

Puan, -Esed seçeneği için +1 içerir :

:
s/^(\S+)\S/\1 &/
t

LTR için çalışıyor, ancak RTL için değil - O biti kaçırdım. . Aslında yaptığı işi, RTL sadece benim terminali doğru render değildi. Makul bir metin düzenleyicide görüntülenen IO ile iyi çalışır (örn. Emacs). Ideone'de de çalışır:

Çevrimiçi deneyin.


3

Brachylog , 5 bayt (Rakip değil)

@[@w\

Çevrimiçi deneyin!

açıklama

@[       Take a prefix of the input
  @w     Write this prefix to STDOUT followed by a linebreak
    \    False: try another prefix

Sağdan sola dizeler, onları hiç düşünmememe rağmen düzgün çalışıyor gibi görünüyor.


Neden rekabet etmiyor?
Adam

@ Adám @[ve @wmutlaka Nisan / Mayıs 2016'dan sonra uygulandı. Github taahhütlerinde kesin tarihi bulabiliriz, ancak bu meydan okuma gönderilmeden önce kesinlikle değildir.
01'de ölümcül

2

CJam, 9 bayt

l{N2$@+}*

Çıktı satır besleme ile ayrılmıştır.

Burada test edin.

açıklama

l     e# Read input.
{     e# Fold this block over the input, which is effectively a foreach-loop which skips
      e# the first character...
  N   e#   Push a linefeed.
  2$  e#   Copy the previous string.
  @   e#   Pull up the current character.
  +   e#   Concatenate.
}*

CJam'in bundan daha kısa olmasını bekliyordum.
Timwi

@Timwi Ne bir "tüm önekleri / son ekleri olsun" yerleşik ne de genel birikim için üst düzey bir işlevi vardır, bu yüzden bu optimal olmasa bile önemli ölçüde dövülebilir şüpheliyim.
Martin Ender

Ll{+_p}/;aynı uzunluktadır, çünkü daha fazla deneyime sahip birinin daha fazla golf oynayabileceğinden emin değilim ve ayrıca tırnakları düzeltebilir: P
FryAmTheEggman 8:30 '

2

JavaScript, 36 bayt

x=>[...x].map((c,i)=>x.slice(0,i+1))

Demo:

a=x=>[...x].map((c,i)=>x.slice(0,i+1));
document.write(
  a("test")+"<br>"+
  a("נחמן")
)

İlke, ilk karakterden sözcükteki her karaktere dize dilimini haritalamak ve çıktısını almaktır. Şaşırtıcı bir şekilde, bu RTL dizeleri için de mükemmel çalışıyor, optimizasyona gerek yok.


2

Konsolum Sağdan Sola karakterleri desteklemiyor, ancak çalışacağını sanmıyorum: c

C, 74 bayt (2. giriş)

char m[2<<9];i;main(){do{m[i]=getchar();printf("%s ",m);}while(m[i++]>0);}

Ungolfed:

#include <stdio.h>

// char, because `printf("%s", str);` expects a array of characters.
char str[2<<9];
int  str_len = 0;
int main(void) {
    do {
        str[str_len]=getchar();
        printf("%s ", str);
    } while(m[i++]>0);
    return 0;
}

2

Konsolum Sağdan Sola karakterleri desteklemiyor, ancak çalışacağını sanmıyorum: c

C, 105 bayt (3. giriş)

m[2<<9];i;j;k;main(){while((m[i++]=getchar())<0);for(;j<i;j++,putchar(10))for(k=0;k<j;k++)putchar(m[k]);}

Ungolfed:

#include <stdio.h>

int str[2<<9];
int str_len = 0;
int main(void) {
    do {
        str[str_len] = getchar();
    } while(str[str_len++] != EOF);
    int i;
    for(i=0; i<str_len; i++) {
        int j;
        for(j=0; j<i; j++) {
          putchar(str[j]);
        }
        putchar(10);
    }
}

2

TI-BASIC, 18 bayt

For(X,1,10^(9
Disp sub(Ans,1,X
End

Teknik olarak geçerli değil: TI-BASIC Unicode'u desteklemiyor.

Bunu adlandırın prgmAve kullanarak giriş yapınAns .

Program özyineleme daha kısa olacaktır, ancak değişkenleri başlatmanın bir yolu olmayacaktır. Bu nedenle, her yinelemede girdinin bir alt dizesini görüntüleriz. Disp hiçbir değer döndürmediği için girişin üzerine yazılmaz.

Sonunda, program tüm dizeyi yazdırdıktan sonra bir hata ile sona erer.



2

Java 7, 95 92 bayt

String d(String a){for(int i=a.length();i-->0;a=a.substring(0,i)+(i>0?"\n":"")+a);return a;}

Önceki yanıt ( 95 bayt ):

String c(String s){String r="";for(int i=0;++i<=s.length();r+=s.substring(0,i)+"\n");return r;}

Özyinelemeli bir yaklaşım denedim, ama işe yaramadı. Belki başka biri (bu döngüden daha kısa) olacaktır.

Test edilmemiş ve test durumları:

Burada deneyin.

class M{
  static String d(String a){
    for(int i = a.length(); i-- > 0; a = a.substring(0, i) + (i > 0 ? "\n" : "") + a);
    return a;
  }

  public static void main(String[] a){
    System.out.println(c("test"));
    System.out.println();
    System.out.println(c("נחמן"));
  }
}

Çıktı:

t
te
tes
test

נ
נח
נחמ
נחמן

2

Dip , 1 bayt (rakip olmayan)

E

Açıklama:

.   # Implicit input
 E  # Get prefixes
  . # Implicit print

Dip'i hiç duymadım.
0:17

@ Adám There ....
Oliver Ni

1

Matl , 8 bayt

Dilin / derleyicinin geçerli sürümünü (8.0.0) kullanır

jtn1X"YR

Misal

>> matl
 > jtn1X"YR
 >
> test
t
te
tes
test

açıklama

j           % input string
tn          % duplicate and get length, say "N"
1X"         % repeat string N times vertically. Gives a char matrix
YR          % lower triangular part of matrix. Implicitly print


1

𝔼𝕊𝕄𝕚𝕟, 7 karakter / 16 bayt

ᴉⓜᵖ ᵴ˖$

Try it here (Firefox only).

Muhtemelen bunun için bir yer var - onu bulamadım.

açıklama

ᴉⓜᵖ ᵴ˖$ // implicit: ᴉ=split input, ᵴ=empty string
ᴉⓜ      // map over ᴉ
   ᵖ ᵴ˖$ // push ᵴ+=(mapped item char)
         // implicit stack output, separated by newlines

1

Javascript ES6, 29 bayt

(a,b='')=>[...a].map(x=>b+=x)

Bu hiçbir şey kazanmıyor, ama basit bir çözüm.



1

Python, 32 bayt

f=lambda s:s and f(s[:-1])+" "+s

Önde gelen boşlukla boşlukla ayrılmış bir dize çıktısı yineleyen işlev.

34 baytlık bir program (Python 2):

s=""
for c in input():s+=c;print s

1

V , 5 bayt (rakip olmayan)

òÄ$xh

Çevrimiçi deneyin!

Bu dil, meydan okumadan daha yenidir ve bu yanıtı rakipsiz kılmaktadır. Açıklama:

ò       " Recursively:
 Ä      "   Duplicate this line
  $     "   Move to the end of this line
   x    "   Delete one character
    h   "   Move one character to the right, which will throw an error when the line is one character long

1

PowerShell v2 +, 28 bayt

[char[]]$args[0]|%{($o+=$_)}

Girdi alır $args[0], bir chardizi olarak atar , karakterleri bir döngüye dönüştürür |%{...}. Her bir yineleme, mevcut karakter $oile birikir . Bu ifade parens içinde kapsüllenir, böylece boru hattına bir kopya yerleştirilir. Yürütme sonunda, boru hattı, elemanlar arasında bir satırsonu yerleştiren yıkanır .+=$_Write-Output

PS C:\Tools\Scripts\golfing> .\spell-out-the-revua "נחמן"
נ
נח
נחמ
נחמן

PS C:\Tools\Scripts\golfing> .\spell-out-the-revua "PPCG"
P
PP
PPC
PPCG


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.