Przeliteruj Revu'a

16

W rzeczywistości nie zainspirowany ani przez Atalash Self Palindromes, ani przez Uogólniony kalkulator Gematria .

Biorąc pod uwagę ciąg s długości n , wypisz sekwencję Revu'a , która jest pierwszym znakiem s , pierwszymi dwoma znakami s , ... pierwszymi n –2 znakami s , pierwszymi n –1 znakami s , całe s .

Ciąg będzie składał się tylko ze znaków Unicode (dowolne kodowanie, które chcesz), które mają silną kierunkowość i znajdują się w zakresie od 0x0000 do 0xFFFF. Nie wystąpią jednak znaki sterujące kierunkowością. Wszystkie znaki w dowolnym ciągu będą miały tę samą kierunkowość.

Możesz powrócić w notacji tablicowej ["t","te","tes","test"]jako ciąg rozdzielony spacjami "t te tes test", jako tekst wielowierszowy
t
te
tes
test
, wstępnie sformatowana tablica

t
te
tes
test
lub coś podobnego. Ilości odstępów początkowych, separujących i końcowych nie są ważne, podobnie jak końcowe znaki nowej linii. Zapytaj w razie wątpliwości.


Wprowadzanie danych od prawej do lewej musi skutkować wyjściem od prawej do lewej w odpowiedniej kolejności: Wejście: "נחמן"
Wyjście: "נ נח נחמ נחמן"lub

נ
נח
נחמ
נחמן
Lub ["נ","נח","נחמ","נחמן"]. Wśród nieprawidłowe wyniki są "נחמן נחמ נח נ", "ן מן חמן נחמן"i "נחמן חמן מן ן".

Adám
źródło

Odpowiedzi:

17

Dyalog APL, 2 bajty

,\

Skumulowane zmniejszenie o konkatenat. Wypróbuj tutaj .

Formatowanie wyjścia jest ładniejsze, gdy prefiks a , ale wyraźnie pokazuje prawidłową kolejność bez.

lirtosiast
źródło
2
Dokładnie to samo rozwiązanie działa z tego samego powodu w K.
JohnE
@JohnE Czy K obsługuje Unicode?
Adám
12

JavaScript (ES6), 27 26 25 bajtów

Zaoszczędzono jeden bajt dzięki @nicael i @ MartinBüttner, jeden dzięki @Neil

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

Wykorzystuje niektóre wbudowane funkcje funkcji JS .replace. W szczególności zamiennik $`staje się wszystkim poprzedzającym dopasowaną postać. Użycie wyrażenia regularnego /.?/gzamiast /./goznacza, że ​​pasuje również do pustego łańcucha na końcu.

ETHprodukcje
źródło
Zapisałem kolejny bajt: f=x=>x.replace(/.?/g,"$")`. Dostajesz dodatkowe wiodące miejsce, ale jest to dozwolone.
Neil
@Neil Dzięki, nie miałem pojęcia, że ​​to zadziała!
ETHproductions
Ugh, zapomniałem zacytować swoje `poprawnie, ale widzę, że zrozumiałeś, co miałem na myśli.
Neil
6

Japt, 10 4 bajtów

Nie zdawałem sobie sprawy, że skumulowane zmniejszenie byłoby tak przydatne w tym przypadku. :-)

UŒ+

Dane wyjściowe w postaci tablicy, domyślnie rozdzielanej przecinkami. Jeśli nie jest to dozwolone, zamiast tego użyj tego 6-bajtowego kodu:

U¬å+ ·

Wypróbuj online!

Jak to działa

      // 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
ETHprodukcje
źródło
7
Używa wyrażenia „Wypróbuj online!” i nie link do Wypróbuj online! moralnie akceptowalny? : P
Martin Ender
3
@ MartinBüttner Użyłem tego wyrażenia w odpowiedziach Japt przez około miesiąc, zanim Dennis go opatentował. Czuję, że powinienem mieć jakieś moralne prawo do dalszego korzystania z niego: P
ETHproductions
6

Brainfuck, 40 bajtów

Moja konsola nie obsługuje znaków od prawej do lewej, ale nie sądzę, aby zadziałało: c

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

Nie golfowany:

++++++++++> # 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
]
Rrrrrr
źródło
13
Możesz opublikować je jako osobne odpowiedzi.
nicael
20
Państwo powinno zakładać je jako oddzielne odpowiedzi.
Timwi
17
Państwo musi zakładać je jako oddzielne odpowiedzi.
nicael
21
Ci BĘDZIE dodawać je jako oddzielne odpowiedzi.
Timwi
11
Ci PRZEKONANA mnie aby umieścić je jako oddzielne odpowiedzi.
YoYoYonnY
5

Siatkówka, 11 7 bajtów

.
 $`$0

Dane wyjściowe są oddzielone spacjami, z wiodącą spacją i końcowym podawaniem linii.

Wypróbuj online!

Martin Ender
źródło
Dla potomnych jest on przenośny do Perla na kolejne 5 bajtów: perl -pE 's/./$$ & \ n / g ''. (Wiem, że spóźniłem się 11 miesięcy)
Dada
4

Python, 35

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

Nie można znaleźć sposobu and/orna uproszczenie rekurencji, ponieważ []jest to fałsz.

Rozwiązanie rekurencyjne, zwraca listę ciągów.

Wypróbuj online

FryAmTheEggman
źródło
4

Prolog (SWI), 60 49 bajtów

Kod:

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

Wyjaśniono:

prefiks atom z X ustawionym na wejście, a S jako zmienna daje 1 prefiks atomu X zaczynającego się od pustego atomu.

findall pobiera wszystkie rozwiązania i umieszcza je na liście.

[_ | R] wyrzuca głowę (pusty atom) i przechowuje ogon w R.

Przykłady:

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

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

Wypróbuj online tutaj

Edycja: zapisany 11 bajtów poprzez zapisywanie jedynie ogon R .

Emigna
źródło
3

Pyth, 3

._z

Wbudowany prefiks załatwia sprawę.

Pakiet testowy

FryAmTheEggman
źródło
3

GNU Sed, 21 lat

Wynik obejmuje +1 dla -Eopcji sed:

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

Działa dla LTR, ale nie RTL - tego mi brakowało. . Właściwie to nie działa, po prostu nie RTL renderowania poprawnie w moim terminalu. Działa dobrze z IO przeglądanym w rozsądnym edytorze tekstu (np. Emacs). Działa również w Ideone:

Wypróbuj online.

Cyfrowa trauma
źródło
3

Brachylog , 5 bajtów (niekonkurencyjny)

@[@w\

Wypróbuj online!

Wyjaśnienie

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

Ciągi od prawej do lewej wydają się działać poprawnie, nawet jeśli nigdy ich nie rozważałem.

Fatalizować
źródło
Dlaczego nie konkurować?
Adám
@ Adám @[i @wzostały wdrożone koniecznie po kwietniu / maju 2016 r. Dokładną datę można znaleźć w zobowiązaniach Github, ale na pewno nie wcześniej niż przed przesłaniem tego wyzwania.
Fatalize
2

CJam, 9 bajtów

l{N2$@+}*

Wyjście jest oddzielone od linii.

Sprawdź to tutaj.

Wyjaśnienie

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.
}*
Martin Ender
źródło
Całkowicie spodziewałem się, że CJam będzie krótszy.
Timwi
@Timwi Nie ma wbudowanej funkcji „pobierz wszystkie prefiksy / sufiksy” ani funkcji wyższego rzędu do uogólnionej akumulacji, więc nawet jeśli nie jest to optymalne, wątpię, aby można ją znacznie pobić.
Martin Ender,
Ll{+_p}/;ma taką samą długość, publikuję, ponieważ nie jestem pewien, czy ktoś z większym doświadczeniem może bardziej
zagrać
2

JavaScript, 36 bajtów

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

Próbny:

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

Zasadą jest odwzorowanie i wyprowadzenie wycinka ciągu od pierwszego znaku do każdego znaku w słowie. Zaskakujące, działa to doskonale również dla ciągów RTL, nie wymaga optymalizacji.

Nicość
źródło
2

Moja konsola nie obsługuje znaków od prawej do lewej, ale nie sądzę, aby zadziałało: c

C, 74 bajty (2. pozycja)

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

Nie golfowany:

#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;
}
Rrrrrr
źródło
2

Moja konsola nie obsługuje znaków od prawej do lewej, ale nie sądzę, aby zadziałało: c

C, 105 bajtów (3. wpis)

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]);}

Nie golfowany:

#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);
    }
}
Rrrrrr
źródło
2

TI-BASIC, 18 bajtów

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

Nieprawidłowe technicznie: TI-BASIC nie obsługuje Unicode.

Nazwij to prgmAi wprowadź za pomocą Ans.

Rekursja programu byłaby krótsza, ale nie byłoby sposobu na zainicjowanie zmiennych. Dlatego wyświetlamy podciąg danych wejściowych przy każdej iteracji. Dane wejściowe nigdy nie są nadpisywane, ponieważ Disp nie zwraca wartości.

Ostatecznie program kończy się błędem po wydrukowaniu całego łańcucha.

lirtosiast
źródło
2

Python, 54 bajtów

b='';y=input()
for a in range(len(y)):b+=y[a];print(b)
Dignissimus - Spammy
źródło
2

Java 7, 95 92 bajtów

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

Poprzednia odpowiedź ( 95 bajtów ):

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

Próbowałem podejścia rekurencyjnego, ale tak naprawdę nie udało mi się go uruchomić. Być może zrobi to ktoś inny (krótszy niż pętla for).

Przypadki bez golfa i testy:

Wypróbuj tutaj.

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("נחמן"));
  }
}

Wynik:

t
te
tes
test

נ
נח
נחמ
נחמן
Kevin Cruijssen
źródło
2

Dip , 1 bajt (niekonkurujący)

E

Wyjaśnienie:

.   # Implicit input
 E  # Get prefixes
  . # Implicit print
Oliver Ni
źródło
Nigdy nie słyszałem o Dipie.
Adám
@ Adám There ....
Oliver Ni
1

MATL , 8 bajtów

Używa bieżącej wersji (8.0.0) języka / kompilatora

jtn1X"YR

Przykład

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

Wyjaśnienie

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
Luis Mendo
źródło
1

Mathematica, 29 bajtów

#<>#2&~FoldList~Characters@#&

DO ZROBIENIA: wyjaśnienie

LegionMammal978
źródło
1

𝔼𝕊𝕄𝕚𝕟, 7 znaków / 16 bajtów

ᴉⓜᵖ ᵴ˖$

Try it here (Firefox only).

Prawdopodobnie jest to gdzieś wbudowane - po prostu go nie znalazłem.

Wyjaśnienie

ᴉⓜᵖ ᵴ˖$ // implicit: ᴉ=split input, ᵴ=empty string
ᴉⓜ      // map over ᴉ
   ᵖ ᵴ˖$ // push ᵴ+=(mapped item char)
         // implicit stack output, separated by newlines
Mama Fun Roll
źródło
1

JavaScript ES6, 29 bajtów

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

To nic nie wygrywa, ale jest to proste rozwiązanie.

Mama Fun Roll
źródło
1

Pyth, 11 bajtów

Vlz=k+k@zNk

Wypróbuj to

Wyjaśnienie

(z=input)
(k="")
V        for N in Range(
lz       length of z):
=k+k@zN     k=k+z[N]
k           print(k)
Dignissimus - Spammy
źródło
1

Python, 32 bajty

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

Funkcja rekurencyjna, która generuje ciąg oddzielony spacją z wiodącą spacją.

34-bajtowy program (Python 2):

s=""
for c in input():s+=c;print s
xnor
źródło
1

V , 5 bajtów (niekonkurujące)

òÄ$xh

Wypróbuj online!

Ten język jest nowszy niż wyzwanie, co czyni tę odpowiedź niekonkurencyjną. Wyjaśnienie:

ò       " 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
DJMcMayhem
źródło
1

PowerShell v2 +, 28 bajtów

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

Pobiera dane wejściowe $args[0], rzuca je jako chartablicę, potokuje znaki w pętli |%{...}. Każda iteracja, na którą kumulujemy się $opoprzez +=obecną postać $_. To wyrażenie jest enkapsulowane w parens, więc kopia jest umieszczana w potoku. Pod koniec wykonania potok jest opróżniany, przez Write-Outputco umieszcza się nową linię między elementami.

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

PS C:\Tools\Scripts\golfing> .\spell-out-the-revua "PPCG"
P
PP
PPC
PPCG
AdmBorkBork
źródło
0

PHP, 59 bajtów

for(;$i++<mb_strlen($argn);)echo"\n".mb_substr($argn,0,$i);

Wersja online

Jörg Hülsermann
źródło