Đánh vần Revu'a


16

Trên thực tế không lấy cảm hứng từ Atbash Self Palindromes cũng như General General Gematria Calculator .

Cho một xâu s có độ dài n , đầu ra các chuỗi Revu'a , đó là ký tự đầu tiên của s , hai ký tự đầu tiên của s , ... là người đầu tiên n -2 nhân vật của s , là người đầu tiên n -1 nhân vật của s , toàn bộ s .

Chuỗi sẽ chỉ bao gồm các ký tự Unicode (bất kỳ mã hóa nào bạn muốn) có tính định hướng mạnh và được tìm thấy trong phạm vi 0x0000 đến 0xFFFF. Tuy nhiên, không có nhân vật điều khiển hướng sẽ xảy ra. Tất cả các ký tự trong bất kỳ chuỗi đã cho sẽ có cùng hướng.

Bạn có thể trả về ký hiệu mảng ["t","te","tes","test"], dưới dạng một chuỗi được phân tách bằng dấu cách "t te tes test", dưới dạng văn bản nhiều dòng
t
te
tes
test
, một mảng được định dạng trước

t
te
tes
kiểm tra
, hoặc bất cứ điều gì tương tự. Số lượng khoảng cách hàng đầu, phân tách và dấu vết không quan trọng và cũng không phải là dòng mới. Hỏi nếu nghi ngờ.

Đầu vào từ phải sang trái phải dẫn đến đầu ra từ phải sang trái theo đúng thứ tự:
Đầu vào: "נחמן"
Đầu ra: "נ נח נחמ נחמן"hoặc

נ
נח
נחמ
נחמן
hoặc ["נ","נח","נחמ","נחמן"]. Trong số kết quả không hợp lệ là "נחמן נחמ נח נ", "ן מן חמן נחמן", và "נחמן חמן מן ן".

Câu trả lời:


17

APL Dyalog, 2 byte

,\

Tích lũy giảm bằng cách ghép. Hãy thử nó ở đây .

Định dạng của đầu ra đẹp hơn khi bạn thêm tiền tố a , nhưng nó hiển thị rõ thứ tự chính xác mà không có.


2
Chính xác thì cùng một giải pháp hoạt động vì cùng một lý do trong K.
JohnE

@JohnE K có xử lý Unicode không?
Adám

12

JavaScript (ES6), 27 26 25 byte

Đã lưu một byte nhờ @nicael và @ MartinBüttner, một cảm ơn @Neil

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

Tận dụng một số tính năng tích hợp của .replacechức năng của JS . Cụ thể, trong sự thay thế, $`trở thành mọi thứ trước nhân vật phù hợp. Sử dụng regex /.?/gchứ không /./gcó nghĩa là nó cũng khớp với chuỗi trống ở cuối.


Tôi đã lưu một byte khác: f=x=>x.replace(/.?/g,"$")`. Bạn có thêm một không gian hàng đầu nhưng điều đó được cho phép
Neil

@Neil Cảm ơn, tôi không có manh mối nào sẽ hoạt động!
Sản phẩm ETH

Ugh, tôi đã quên trích dẫn `đúng, nhưng tôi thấy bạn đã hiểu ý tôi.
Neil

6

Japt, 10 4 byte

Tôi đã không nhận ra rằng việc giảm tích lũy sẽ rất hữu ích trong trường hợp này. :-)

UŒ+

Đầu ra dưới dạng một mảng, được phân tách bằng dấu phẩy theo mặc định. Nếu điều này không được phép, thay vào đó hãy sử dụng mã 6 byte này:

U¬å+ ·

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

      // 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
Đang sử dụng cụm từ "Dùng thử trực tuyến!" và không liên kết để dùng thử trực tuyến! chấp nhận đạo đức? : P
Martin Ender

3
@ MartinBüttner Tôi đã sử dụng cụm từ đó trong các câu trả lời của Japt trong khoảng một tháng trước khi Dennis đăng ký nhãn hiệu đó. Tôi cảm thấy mình nên có một số quyền đạo đức để tiếp tục sử dụng nó: P
Sản phẩm ETH

6

Brainfuck, 40 byte

Bảng điều khiển của tôi không hỗ trợ các ký tự từ phải sang trái, nhưng tôi không nghĩ nó sẽ hoạt động: c

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

Ung dung:

++++++++++> # 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
Bạn có thể đăng chúng dưới dạng câu trả lời riêng biệt.
nicael

20
Bạn nên đăng chúng dưới dạng câu trả lời riêng biệt.
Timwi

17
Bạn phải đăng chúng dưới dạng câu trả lời riêng biệt.
nicael

21
Bạn S post đăng chúng dưới dạng câu trả lời riêng biệt.
Timwi

11
Bạn đã thuyết phục tôi để gửi cho họ như câu trả lời riêng biệt.
YoYoYonnY

5

Võng mạc, 11 7 byte

.
 $`$0

Đầu ra được phân tách bằng dấu cách, với một khoảng trắng ở đầu và một dòng cấp dữ liệu.

Hãy thử trực tuyến!


Đối với hậu thế, nó có thể di chuyển tới Perl để có thêm 5 byte: perl -pE 's/./$$ & \ n / g'`. (Tôi trễ 11 tháng, tôi biết)
Dada

4

Con trăn, 35

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

Không thể tìm ra cách sử dụng and/orđể đơn giản hóa đệ quy vì sai []lệch.

Giải pháp đệ quy, trả về một danh sách các chuỗi.

Dùng thử trực tuyến


4

Prolog (SWI), 60 49 byte

Mã số:

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

Giải thích:

atom_prefix với X được đặt thành đầu vào và S là một biến cho 1 tiền tố của nguyên tử X bắt đầu bằng nguyên tử trống.

findall nhận được tất cả các giải pháp và đưa chúng vào một danh sách.

[_ | R] vứt bỏ đầu (nguyên tử trống) và lưu đuôi ở R

Ví dụ:

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

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

Dùng thử trực tuyến tại đây

Chỉnh sửa: lưu 11 byte chỉ lưu trữ các đuôi trong R .



3

GNU Sed, 21

Điểm bao gồm +1 cho -Etùy chọn để sed:

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

Hoạt động cho LTR, nhưng không phải RTL - Tôi đã bỏ lỡ bit đó. . Trên thực tế nó không làm việc, RTL chỉ không hiển thị chính xác trong thiết bị đầu cuối của tôi. Nó hoạt động tốt với IO được xem trong trình soạn thảo văn bản hợp lý (ví dụ: emacs). Nó cũng hoạt động trong Ideone:

Hãy thử trực tuyến.


3

Brachylog , 5 byte (Không cạnh tranh)

@[@w\

Hãy thử trực tuyến!

Giải trình

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

Các chuỗi từ phải sang trái dường như hoạt động đúng, mặc dù tôi thậm chí không bao giờ xem xét chúng.


Tại sao không cạnh tranh?
Adám

@ Adám @[@wđược triển khai nhất thiết sau tháng 4 / tháng 5 năm 2016. Người ta có thể tìm thấy ngày chính xác trên các cam kết của Github nhưng chắc chắn không phải trước khi thử thách này được gửi.
Gây tử vong

2

CJam, 9 byte

l{N2$@+}*

Đầu ra được phân tách theo dòng.

Kiểm tra nó ở đây.

Giải trình

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

Tôi hoàn toàn mong đợi CJam sẽ ngắn hơn thế.
Timwi

@Timwi Không có chức năng "lấy tất cả tiền tố / hậu tố" tích hợp hay chức năng bậc cao để tích lũy tổng quát, vì vậy ngay cả khi điều này không tối ưu, tôi nghi ngờ nó có thể bị đánh bại đáng kể.
Martin Ender

Ll{+_p}/;có cùng độ dài, đăng bởi vì tôi không chắc ai đó có nhiều kinh nghiệm hơn có thể chơi golf nhiều hơn không, và cũng có thể sửa điều trích dẫn: P
FryAmTheEggman

2

JavaScript, 36 byte

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

Bản giới thiệu:

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

Nguyên tắc là ánh xạ và xuất ra các chuỗi của chuỗi từ char đầu tiên đến mọi char trong từ. Đáng ngạc nhiên, điều này cũng hoạt động hoàn hảo cho các chuỗi RTL, không cần tối ưu hóa.


2

Bảng điều khiển của tôi không hỗ trợ các ký tự từ phải sang trái, nhưng tôi không nghĩ nó sẽ hoạt động: c

C, 74 byte (mục thứ 2)

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

Ung dung:

#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

Bảng điều khiển của tôi không hỗ trợ các ký tự từ phải sang trái, nhưng tôi không nghĩ nó sẽ hoạt động: c

C, 105 byte (mục thứ 3)

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

Ung dung:

#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 byte

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

Không hợp lệ về mặt kỹ thuật: TI-BASIC không hỗ trợ Unicode.

Đặt tên này prgmAvà nhập bằngAns .

Đệ quy chương trình sẽ ngắn hơn, nhưng sẽ không có cách nào để khởi tạo các biến. Do đó, chúng tôi hiển thị một chuỗi con của đầu vào ở mỗi lần lặp. Đầu vào không bao giờ được ghi đè, vì Disp không trả về giá trị.

Cuối cùng, chương trình chấm dứt với một lỗi sau khi in toàn bộ chuỗi.



2

Java 7, 95 92 byte

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

Câu trả lời trước ( 95 byte ):

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

Tôi đã thử một cách tiếp cận đệ quy, nhưng tôi thực sự không thể làm cho nó hoạt động được. Có lẽ người khác sẽ (ngắn hơn for-loop này).

Các trường hợp bất ngờ & thử nghiệm:

Hãy thử nó ở đây.

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

Đầu ra:

t
te
tes
test

נ
נח
נחמ
נחמן

2

Nhúng , 1 byte (không cạnh tranh)

E

Giải trình:

.   # Implicit input
 E  # Get prefixes
  . # Implicit print

Chưa bao giờ nghe nói về Dip.
Adám

@ Adám Có ....
Oliver Ni

1

MATL , 8 byte

Sử dụng phiên bản hiện tại (8.0.0) của ngôn ngữ / trình biên dịch

jtn1X"YR

Thí dụ

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

Giải trình

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 ký tự / 16 byte

ᴉⓜᵖ ᵴ˖$

Try it here (Firefox only).

Có lẽ có một bản dựng sẵn cho cái này ở đâu đó - tôi chỉ không tìm thấy nó.

Giải trình

ᴉⓜᵖ ᵴ˖$ // implicit: ᴉ=split input, ᵴ=empty string
ᴉⓜ      // map over ᴉ
   ᵖ ᵴ˖$ // push ᵴ+=(mapped item char)
         // implicit stack output, separated by newlines

1

Javascript ES6, 29 byte

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

Điều này không chiến thắng bất cứ điều gì, nhưng đó là một giải pháp đơn giản.



1

Python, 32 byte

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

Hàm đệ quy đưa ra một chuỗi được phân tách bằng dấu cách với một khoảng trắng ở đầu.

Một chương trình 34 byte (Python 2):

s=""
for c in input():s+=c;print s

1

V , 5 byte (không cạnh tranh)

òÄ$xh

Hãy thử trực tuyến!

Ngôn ngữ này mới hơn thách thức, khiến câu trả lời này không cạnh tranh. Giải trình:

ò       " 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 byte

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

Đưa đầu vào $args[0], biến nó thành một char-array, chuyển các ký tự thành một vòng lặp |%{...}. Mỗi lần lặp, chúng tôi tích lũy $othông qua +=nhân vật hiện tại $_. Biểu thức đó được gói gọn trong parens để một bản sao được đặt trên đường ống. Khi kết thúc thực hiện, đường ống được tuôn ra thông qua Write-Outputđó đặt một dòng mới giữa các phần tử.

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

PS C:\Tools\Scripts\golfing> .\spell-out-the-revua "PPCG"
P
PP
PPC
PPCG


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.