Випишіть 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.