Випишіть Revu'a


16

Насправді не надихається ані Atbash Self Palindromes, ані Генералізований калькулятор гематрії .

Давши рядок s довжиною n , виведіть послідовність Revu'a , що є першим символом s , перші два символи s , ... перші n –2 символи s , перші n –1 символів s , цілий s .

Рядок складається лише з символів Unicode (будь-яке кодування, яке ви хочете), які мають сильну спрямованість і знаходяться в діапазоні від 0x0000 до 0xFFFF. Однак ніяких символів контролю спрямованості не відбудеться. Усі символи в будь-якому даному рядку матимуть однакову спрямованість.

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

т
те
тест
тест
або щось подібне. Кількість проміжних, відокремлювальних та кінцевих інтервалів не важлива, і жодна з них не є проміжною лінією. Запитайте, якщо сумніваєтесь.

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

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

Відповіді:


17

Діалог APL, 2 байти

,\

Сукупне зменшення конкатенатом. Спробуйте тут .

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


2
Точно те саме рішення працює з тієї ж причини в К.
JohnE

@JohnE Чи K обробляє Unicode?
Адам

12

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

Збережено один байт завдяки @nicael та @ MartinBüttner, по одному завдяки @Neil

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

Скористається деякими вбудованими особливостями функції JS .replace. Зокрема, в заміну $`стає все, що передує зібраному символу. Використовуючи регулярний вираз, /.?/gа не /./gозначає, він також відповідає порожньому рядку в кінці.


Я врятував ще один байт: 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

7
Використовує фразу "Спробуйте в Інтернеті!" і не посилаючись на Спробуйте в Інтернеті! морально прийнятний? : P
Мартін Ендер

3
@ MartinBüttner Я використовував цю фразу у відповідях Japt близько місяця, перш ніж Денніс захищав її. Я вважаю, що я повинен мати якесь моральне право продовжувати користуватися ним: P
ETHproductions

6

Brainfuck, 40 байт

Моя консоль не підтримує символи праворуч ліворуч, але я не думаю, що вона спрацює: c

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

Безголівки:

++++++++++> # 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
Ви можете розмістити їх як окремі відповіді.
nicael

20
Ви повинні розмістити їх як окремі відповіді.
Тімві

17
Ви повинні розмістити їх як окремі відповіді.
nicael

21
Ви подасте їх як окремі відповіді.
Тімві

11
Ви МОЄТЕ СПОБРОБИТИ мене, щоб розмістити їх як окремі відповіді.
YoYoYonnY

5

Сітківка, 11 7 байт

.
 $`$0

Вихід є розділеним космосом, з провідним простором і зворотним каналом.

Спробуйте в Інтернеті!


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

4

Пітона, 35

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

Не вдалося знайти спосіб використання and/orдля спрощення рекурсії, оскільки []це хибність.

Рекурсивне рішення, повертає список рядків.

Спробуйте в Інтернеті


4

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

Код:

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

Пояснили:

atom_prefix з X, встановленим на вхід, а S як змінна дає 1 префікс атома X, починаючи з порожнього атома.

findall отримує всі рішення та вносить їх у список.

[_ | R] відкидає голову (порожній атом) і зберігає хвіст у R

Приклади:

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

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

Спробуйте його онлайн тут

Редагування: збережено 11 байт лише зберігати хвіст R .



3

GNU Sed, 21

Оцінка включає +1 за -Eваріант сідання:

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

Працює для LTR, але не для RTL - я пропустив цей біт. . На насправді це робить роботу, то RTL просто не правильно рендеринг в моєму терміналі. Він чудово працює, якщо IO переглядається в розумному текстовому редакторі (наприклад, 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

Праві наліво рядки, здається, працюють належним чином, хоча я їх навіть ніколи не вважав.


Чому не змагаються?
Адам

@ Adám @[і @wбули запроваджені обов'язково після квітня / травня 2016 року. Можна було знайти точну дату в Github-зобов’язаннях, але це, безумовно, ще не було до подання цього виклику.
Фаталізувати

2

CJam, 9 байт

l{N2$@+}*

Вихідні дані відокремлюються між собою.

Тестуйте це тут.

Пояснення

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 буде коротшим за це.
Тімві

@Timwi Не існує ні вбудованої "отримати всі префікси / суфікси", ні функції вищого порядку для генералізованого накопичення, тому навіть якщо це не оптимально, я сумніваюся, що це може бути значно побитий.
Мартін Ендер

Ll{+_p}/;такої ж довжини, розміщую повідомлення, тому що я не впевнений, чи може хтось із більшим досвідом міг би більше
пограти

2

JavaScript, 36 байт

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

Демонстрація:

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

Принцип полягає у зіставленні та виведенні фрагмента рядка від першого символу до кожного символу слова. Дивно, але це чудово працює і для рядків RTL. Оптимізація не потрібна.


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

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

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.

Назвіть це ім’я prgmAта введіть, використовуючи Ans.

Рекурсія програми була б коротшою, але не було б ініціалізації змінних. Тому ми відображаємо підрядку вводу при кожній ітерації. Вхід ніколи не перезаписується, оскільки Disp не повертає значення.

Врешті-решт програма закінчується помилкою після друку всього рядка.



2

Java 7, 95 92 байт

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

Попередня відповідь ( 95 байт ):

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

Я спробував рекурсивний підхід, але реально не міг змусити його працювати. Можливо, хтось інший зробить (коротший, ніж цей цикл).

Невикористані та тестові справи:

Спробуйте тут.

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

Вихід:

t
te
tes
test

נ
נח
נחמ
נחמן


1

MATL , 8 байт

Використовує поточну версію (8.0.0) мови / компілятора

jtn1X"YR

Приклад

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

Пояснення

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 символів / 16 байт

ᴉⓜᵖ ᵴ˖$

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

1

Javascript ES6, 29 bytes

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

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



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

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

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.