สะกด Revu'a


16

ที่จริงไม่ได้รับแรงบันดาลใจจากค่าAtbash เอง Palindromesหรือโดยทั่วไป Gematria เครื่องคิดเลข

รับสตริง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
อาเรย์ที่จัดรูปแบบไว้ล่วงหน้า

เสื้อ
เต้
TES
ทดสอบ
หรืออะไรก็ตามที่คล้ายกัน จำนวนของการเว้นวรรคนำหน้าการแยกและการติดตามไม่สำคัญและไม่ขึ้นบรรทัดใหม่ ถามถ้ามีข้อสงสัย

อินพุตจากขวาไปซ้ายจะต้องส่งออกเป็นเอาต์พุตจากขวาไปซ้ายตามลำดับที่ถูกต้อง:
อินพุต: "נחמן"
เอาต์พุต: "נ נח נחמ נחמן"หรือ

נ
נח
נחמ
נחמן
["נ","נח","נחמ","נחמן"]หรือ ในผลลัพธ์ที่ไม่ถูกต้อง"נחמן נחמ נח נ", และ"ן מן חמן נחמן""נחמן חמן מן ן"

คำตอบ:


17

Dyalog APL, 2 ไบต์

,\

ลดการสะสมโดยการต่อ ลองมันนี่

การจัดรูปแบบของผลลัพธ์จะดีกว่าเมื่อคุณใส่คำนำหน้า aแต่จะแสดงลำดับที่ถูกต้องอย่างชัดเจนโดยไม่ต้อง


2
วิธีการแก้ปัญหาเดียวกันทำงานได้ด้วยเหตุผลเดียวกันใน K.
JohnE

@JohnE K จัดการกับ Unicode หรือไม่?
อดัม

12

JavaScript (ES6), 27 26 25 ไบต์

บันทึกหนึ่งไบต์ด้วย @nicael และ @ MartinBüttnerหนึ่งขอบคุณ @Neil

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

ใช้ประโยชน์จากฟีเจอร์ในตัวของ.replaceฟังก์ชั่นของ JS โดยเฉพาะอย่างยิ่งในการเปลี่ยน$`จะกลายเป็นทุกอย่างที่นำหน้าตัวละครที่ตรงกัน ใช้ regex /.?/gมากกว่า/./gหมายความว่ามันตรงกับสตริงว่างที่ท้าย


ฉันบันทึกไบต์อื่น: f=x=>x.replace(/.?/g,"$")`. คุณได้รับพื้นที่ชั้นนำพิเศษ แต่ได้รับอนุญาต
Neil

@ Neil ขอบคุณฉันไม่มีเงื่อนงำที่จะทำงาน!
ETHproductions

อืมฉันลืมอ้างคำพูดของฉันอย่างถูกต้อง แต่ฉันเห็นคุณทำงานตามที่ฉันต้องการ
Neil

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
Martin Ender

3
@ MartinBüttnerฉันจะใช้วลีนั้นในคำตอบ Japt ประมาณหนึ่งเดือนก่อนที่ Dennis จะทำการค้า ฉันรู้สึกว่าฉันควรมีสิทธิทางศีลธรรมที่จะใช้มันต่อไป: 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
]

13
คุณสามารถโพสต์ไว้เป็นคำตอบแยกต่างหาก
nicael

20
คุณควรโพสต์พวกเขาเป็นคำตอบแยกต่างหาก
Timwi

17
คุณต้องโพสต์ไว้เป็นคำตอบแยกต่างหาก
nicael

21
คุณจะโพสต์ไว้เป็นคำตอบแยกต่างหาก
Timwi

11
คุณเชื่อผมที่จะโพสต์ให้เป็นคำตอบที่แยกต่างหาก
YoYoYonnY

5

Retina, 11 7 ไบต์

.
 $`$0

เอาท์พุทเป็นช่องว่างคั่นด้วยพื้นที่ชั้นนำและ linefeed ต่อท้าย

ลองออนไลน์!


สำหรับคนรุ่นหลังมันเป็นแบบพกพาสำหรับ Perl อีก 5 ไบต์: perl -pE 's/./$$ & \ n / g'` (ฉัน 11 เดือนสายฉันรู้)
Dada

4

Python 35

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

ไม่พบวิธีใช้and/orเพื่อทำให้การเรียกซ้ำง่ายขึ้นเพราะ[]เป็นเท็จ

โซลูชันแบบเรียกซ้ำส่งคืนรายการสตริง

ลองออนไลน์


4

Prolog (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

Brachylog 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

@Timwi ไม่มี "รับค่านำหน้า / ส่วนต่อท้ายทั้งหมด" ในตัวหรือฟังก์ชั่นลำดับสูงกว่าสำหรับการสะสมทั่วไปดังนั้นแม้ว่านี่จะไม่ใช่วิธีที่ดีที่สุดฉันสงสัยว่ามันจะถูกตีอย่างมีนัยสำคัญ
Martin Ender

Ll{+_p}/;มีความยาวเท่ากันการโพสต์เพราะฉันไม่แน่ใจว่าคนที่มีประสบการณ์มากกว่านี้จะสามารถตีกอล์ฟได้มากกว่านี้หรือไม่และอาจแก้ไขคำพูด: P
FryAmTheEggman

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

คอนโซลของฉันไม่รองรับอักขระจากขวาไปซ้าย แต่ฉันไม่คิดว่ามันจะใช้งานได้: c

C, 74 ไบต์ (รายการที่สอง)

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

คอนโซลของฉันไม่รองรับอักขระจากขวาไปซ้าย แต่ฉันไม่คิดว่ามันจะใช้งานได้: c

C, 105 ไบต์ (รายการที่ 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]);}

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 ไบต์

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

ไม่ถูกต้องทางเทคนิค: TI-BASIC ไม่รองรับ Unicode

ชื่อนี้และข้อมูลการใช้prgmAAns

การเรียกใช้โปรแกรมซ้ำจะสั้นลง แต่จะไม่มีวิธีในการเริ่มต้นตัวแปร ดังนั้นเราจะแสดงซับสตริงของอินพุตในแต่ละการวนซ้ำ อินพุตไม่ถูกเขียนทับเนื่องจาก 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

𝔼𝕊𝕄𝕚𝕟, 7 ตัวอักษร / 16 ไบต์

ᴉⓜᵖ ᵴ˖$

Try it here (Firefox only).

อาจมี builtin สำหรับที่นี่ - ฉันไม่ได้พบมัน

คำอธิบาย

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

1

Javascript ES6, 29 ไบต์

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

นี่ไม่ใช่สิ่งที่ชนะ แต่มันเป็นทางออกที่ง่าย



1

Python ขนาด 32 ไบต์

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

ฟังก์ชั่นวนซ้ำที่แสดงเอาต์พุตสตริงที่คั่นด้วยช่องว่างด้วยช่องว่างนำหน้า

โปรแกรมขนาด 34 ไบต์ (Python 2):

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

1

V , 5 ไบต์ (ไม่แข่งขัน)

òÄ$xh

ลองออนไลน์!

ภาษานี้ใหม่กว่าความท้าทายทำให้คำตอบนี้ไม่ใช่การแข่งขัน คำอธิบาย:

ò       " 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 ไบต์

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

จะเข้า$args[0]ดุจเป็นchar-array |%{...}ท่อตัวละครเข้าไปในห่วง แต่ละซ้ำเราสะสมบน$oผ่านทางตัวละครปัจจุบัน+= $_นิพจน์นั้นถูกห่อหุ้มด้วย parens ดังนั้นจึงมีการวางสำเนาไว้บนไพพ์ไลน์ เมื่อสิ้นสุดการประมวลผลไพพ์ไลน์จะถูกล้างผ่านWrite-Outputซึ่งทำให้บรรทัดใหม่ระหว่างองค์ประกอบ

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

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


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.