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 "נחמן חמן מן ן".

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.


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.


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

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
]

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!


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


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 .



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.


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.


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.
}*

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.


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

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

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.



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

נ
נח
נחמ
נחמן


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


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

1

JavaScript ES6, 29 bajtów

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

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



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

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

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.