Разобрать Реву'а

16

На самом деле не вдохновлен ни Atbash Self Palindromes, ни обобщенным калькулятором гематрии .

Учитывая , строка ев длины п Вывести последовательность Revu'a , который является первым символом S , первые два символа S , ... первые п -2 символы с , первым п -1 символов с , вся с .

Строка будет состоять только из символов Unicode (любой кодировки), которые имеют сильную направленность и находятся в диапазоне от 0x0000 до 0xFFFF. Тем не менее, никаких символов управления направленностью не будет. Все символы в любой заданной строке будут иметь одинаковую направленность.

Вы можете вернуть в нотации массива ["t","te","tes","test"], в виде строки "t te tes test", разделенной пробелами , в виде многострочного текста
t
te
tes
test
, предварительно отформатированный массив

T
тэ
тес
тестовое задание
или что-нибудь подобное. Количество начальных, разделительных и конечных интервалов не имеет значения, равно как и конечный перевод строки. Спросите, если сомневаетесь.

Ввод справа налево должен приводить к выводу справа налево в правильном порядке:
Вход: "נחמן"
Выход: "נ נח נחמ נחמן"или

נ
נח
נחמ
נחמן
или ["נ","נח","נחמ","נחמן"]. Среди недействительных результатов "נחמן נחמ נח נ", "ן מן חמן נחמן"и "נחמן חמן מן ן".

Адам
источник

Ответы:

17

Дьялог АПЛ, 2 байта

,\

Кумулятивное уменьшение по конкатенации. Попробуй это здесь .

Форматирование вывода лучше, когда вы префикс a , но он четко показывает правильный порядок без.

lirtosiast
источник
2
Точно такое же решение работает по той же причине в K.
JohnE
@JohnE K обрабатывает Unicode?
Адам
12

JavaScript (ES6), 27 26 25 байт

Сохранено один байт благодаря @nicael и @ MartinBüttner, одно благодаря @Neil

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

Использует некоторые встроенные функции функции JS .replace. В частности, при замене $`становится все , что предшествует сопоставляемому символу. Использование регулярного выражения, /.?/gа не /./gозначает, что оно также соответствует пустой строке в конце.

ETHproductions
источник
Я сохранил еще один байт: f=x=>x.replace(/.?/g,"$")`. Вы получаете дополнительный начальный пробел, но это разрешено.
Нил
@Neil Спасибо, я понятия не имел, что сработает!
ETHproductions
Тьфу, я забыл процитировать мои слова "правильно", но я вижу, ты понял, что я имел в виду.
Нил
6

Japt, 10 4 байта

Я не понимал, что кумулятивное снижение было бы так полезно в этом случае. :-)

UŒ+

Выводится как массив, по умолчанию разделенный запятыми. Если это не разрешено, используйте вместо этого 6-байтовый код:

U¬å+ ·

Попробуйте онлайн!

Как это устроено

      // 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
ETHproductions
источник
7
Использует фразу "Попробуйте онлайн!" и не ссылки на Попробуйте онлайн! морально приемлемо? : P
Мартин Эндер
3
@ MartinBüttner Я использовал эту фразу в ответах на Japt около месяца, прежде чем Деннис сделал ее торговой маркой. Я чувствую, что у меня должно быть какое-то моральное право продолжать его использовать: P
ETHproductions
6

Brainfuck, 40 байт

Моя консоль не поддерживает символы справа налево, но я не думаю, что она будет работать: 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
]
YoYoYonnY
источник
13
Вы можете опубликовать их как отдельные ответы.
Никель
20
Вы должны опубликовать их как отдельные ответы.
Тимви
17
Вы должны опубликовать их как отдельные ответы.
Никель
21
Вы БУДЕТЕ размещать их как отдельные ответы.
Тимви
11
Вы убедили меня опубликовать их как отдельные ответы.
YoYoYonnY
5

Сетчатка, 11 7 байт

.
 $`$0

Вывод разделен пробелом, с начальным пробелом и завершающим переводом строки.

Попробуйте онлайн!

Мартин Эндер
источник
Для потомков он переносим в Perl еще на 5 байтов: perl -pE 's/./$$ & \ n / g'`. (Я опоздал на 11 месяцев, я знаю)
Дада
4

Python, 35

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

Не удалось найти способ использования and/orдля упрощения рекурсии, потому что[] это ложь.

Рекурсивное решение, возвращает список строк.

Попробуйте онлайн

FryAmTheEggman
источник
4

Пролог (SWI), 60 49 байтов

Код:

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

Разъяснение:

atom_prefix с X, установленным на input, и S в качестве переменной, дает 1 префикс атома X, начиная с пустого атома.

findall получает все решения и помещает их в список.

[_ | R] выбрасывает голову (пустой атом) и сохраняет хвост в R

Примеры:

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

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

Попробуйте онлайн здесь

Редактирование: сохранено 11 байт лишь хранить хвост R .

Emigna
источник
3

GNU Sed, 21

Оценка включает +1 для -Eопции для sed:

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

Работает для LTR, но не для RTL - я пропустил этот бит. , На самом деле это делает работу, то RTL просто не правильно рендеринг в моем терминале. Он отлично работает при просмотре ввода-вывода в разумном текстовом редакторе (например, emacs). Это также работает в Ideone:

Попробуйте онлайн.

Цифровая травма
источник
3

Брахилог , 5 байт (неконкурирующий)

@[@w\

Попробуйте онлайн!

объяснение

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

Right-to-left strings seem to work properly, even though I never even considered them.

Fatalize
источник
Why non-competing?
Adám
@Adám @[ and @w were implemented necessarily after April/May 2016. One could find the exact date on the Github commits but it surely isn't before this challenge was submitted.
Fatalize
2

CJam, 9 bytes

l{N2$@+}*

Output is linefeed-separated.

Test it here.

Explanation

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
источник
I totally expected CJam to be shorter than that.
Timwi
@Timwi There is neither a "get all prefixes/suffixes" built-in nor a higher-order function for generalised accumulation, so even if this isn't optimal I doubt it can be beaten significantly.
Martin Ender
Ll{+_p}/; is same length, posting because I'm not sure if someone with more experience might be able to golf it more, and also maybe fix the quotes thing :P
FryAmTheEggman
2

JavaScript, 36 bytes

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

The principle is to map and output the slice of string from the first char to the every char in the word. Surprisingly, this works perfectly for the RTL strings too, no optimization needed.

nicael
источник
2

My console doesn't support Right-to-Left characters, but I don't think it will work :c

C, 74 bytes (2nd entry)

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;
}
YoYoYonnY
источник
2

My console doesn't support Right-to-Left characters, but I don't think it will work :c

C, 105 bytes (3th entry)

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);
    }
}
YoYoYonnY
источник
2

TI-BASIC, 18 bytes

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

Not technically valid: TI-BASIC doesn't support Unicode.

Name this prgmA, and input using Ans.

Program recursion would be shorter, but there would be no way to initialize the variables. Therefore, we display a substring of the input at each iteration. The input is never overwritten, since Disp doesn't return a value.

Eventually, the program terminates with an error after printing the whole string.

lirtosiast
источник
2

Python, 54 Bytes

b='';y=input()
for a in range(len(y)):b+=y[a];print(b)
Dignissimus - Spammy
источник
2

Java 7, 95 92 bytes

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

Previous answer (95 bytes):

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

I tried a recursive approach, but I couldn't really get it to work. Perhaps someone else will (shorter than this for-loop).

Ungolfed & test cases:

Try it here.

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

Output:

t
te
tes
test

נ
נח
נחמ
נחמן
Kevin Cruijssen
источник
2

Dip, 1 byte (non-competing)

E

Explanation:

.   # Implicit input
 E  # Get prefixes
  . # Implicit print
Oliver Ni
источник
Never heard of Dip.
Adám
@Adám There....
Oliver Ni
1

MATL, 8 bytes

Uses current version (8.0.0) of language/compiler

jtn1X"YR

Example

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

Explanation

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
источник
1

Mathematica, 29 bytes

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

TODO: explanation

LegionMammal978
источник
1

𝔼𝕊𝕄𝕚𝕟, 7 chars / 16 bytes

ᴉⓜᵖ ᵴ˖$

Try it here (Firefox only).

There's probably a builtin for this somewhere - I just haven't found it.

Explanation

ᴉⓜᵖ ᵴ˖$ // implicit: ᴉ=split input, ᵴ=empty string
ᴉⓜ      // map over ᴉ
   ᵖ ᵴ˖$ // push ᵴ+=(mapped item char)
         // implicit stack output, separated by newlines
Mama Fun Roll
источник
1

Javascript ES6, 29 bytes

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

This ain't winning anything, but it's a simple solution.

Mama Fun Roll
источник
1

Pyth, 11 Bytes

Vlz=k+k@zNk

Try It Out

Explanation

(z=input)
(k="")
V        for N in Range(
lz       length of z):
=k+k@zN     k=k+z[N]
k           print(k)
Dignissimus - Spammy
источник
1

Python, 32 bytes

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

Recursive function that outputs a space-separated string with a leading space.

A 34-byte program (Python 2):

s=""
for c in input():s+=c;print s
xnor
источник
1

V, 5 bytes (non-competing)

òÄ$xh

Try it online!

This language is newer than the challenge, making this answer non-competing. Explanation:

ò       " 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
источник
1

PowerShell v2+, 28 bytes

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

Takes input $args[0], casts it as a char-array, pipes the characters into a loop |%{...}. Each iteration, we accumulate onto $o via += the current character $_. That expression is encapsulated in parens so a copy is placed on the pipeline. At end of execution, the pipeline is flushed via Write-Output which puts a newline between elements.

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

PS C:\Tools\Scripts\golfing> .\spell-out-the-revua "PPCG"
P
PP
PPC
PPCG
AdmBorkBork
источник