Tuliskan Revu'a


16

Sebenarnya tidak diilhami baik oleh Atbash Self Palindromes maupun oleh Generalized Gematria Calculator .

Diberikan string s dengan panjang n , menampilkan urutan Revu'a , yang merupakan karakter pertama dari s , dua karakter pertama dari s , ... karakter pertama n –2 dari s , n pertama –1 karakter dari s , seluruh s .

String hanya akan terdiri dari karakter Unicode (enkode apa pun yang Anda inginkan) yang memiliki directionality kuat dan ditemukan dalam kisaran 0x0000 hingga 0xFFFF. Namun, karakter kontrol arah tidak akan terjadi. Semua karakter dalam string apa pun yang diberikan akan memiliki arah yang sama.

Anda dapat kembali dalam notasi array ["t","te","tes","test"], sebagai string yang dipisahkan oleh spasi "t te tes test", sebagai teks multi-baris
t
te
tes
test
, array yang diformat sebelumnya

t
te
tes
uji
, atau yang serupa. Jumlah memimpin, memisahkan, dan melacak spasi tidak penting, dan tidak ada yang mengikuti baris baru. Tanyakan apakah ragu.

Input kanan-ke-kiri harus menghasilkan output Kanan-ke-Kiri dalam urutan yang benar:
Input: "נחמן"
Output: "נ נח נחמ נחמן"atau

נ
נח
נחמ
נחמן
, atau ["נ","נח","נחמ","נחמן"]. Di antara hasil yang tidak valid "נחמן נחמ נח נ", "ן מן חמן נחמן"dan "נחמן חמן מן ן".

Jawaban:


17

Dyalog APL, 2 byte

,\

Kumulatif dikurangi dengan menyatu. Coba di sini .

Format output lebih baik ketika Anda awalan a , tetapi jelas menunjukkan urutan yang benar tanpa.


2
Solusi yang persis sama berlaku untuk alasan yang sama dalam K.
JohnE

@ JohnE Apakah K menangani Unicode?
Adám

12

JavaScript (ES6), 27 26 25 byte

Menyelamatkan satu byte terima kasih kepada @nicael dan @ MartinBüttner, satu terima kasih kepada @Neil

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

Mengambil keuntungan dari beberapa fitur built-in dari .replacefungsi JS . Secara khusus, dalam penggantian, $`menjadi segalanya sebelum karakter yang cocok. Menggunakan regex /.?/gdaripada /./gberarti itu juga cocok dengan string kosong di akhir.


Saya menyimpan byte lain: f=x=>x.replace(/.?/g,"$")`. Anda mendapatkan ruang pimpinan tambahan tetapi diizinkan
Neil

@Neil Terima kasih, saya tidak tahu itu akan berhasil!
ETHproduk

Ugh, saya lupa mengutip `saya dengan benar, tapi saya melihat Anda berhasil apa yang saya maksud.
Neil

6

Japt, 10 4 byte

Saya tidak menyadari bahwa pengurangan kumulatif akan sangat berguna dalam kasus ini. :-)

UŒ+

Output sebagai array, dipisahkan oleh koma secara default. Jika ini tidak diizinkan, gunakan kode 6-byte ini sebagai gantinya:

U¬å+ ·

Cobalah online!

Bagaimana itu bekerja

      // 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
Menggunakan frasa "Coba online!" dan tidak menautkan ke Coba online! diterima secara moral? : P
Martin Ender

3
@ MartinBüttner Saya telah menggunakan frasa itu dalam jawaban Japt sekitar sebulan sebelum Dennis mencantumkannya. Saya merasa saya harus memiliki hak moral untuk tetap menggunakannya: P
ETHproduk

6

Brainfuck, 40 byte

Konsol saya tidak mendukung karakter Kanan-ke-Kiri, tetapi saya rasa itu tidak akan berfungsi: c

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

Tidak Terkumpul:

++++++++++> # 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
Anda dapat mempostingnya sebagai jawaban terpisah.
nicael

20
Anda harus mempostingnya sebagai jawaban terpisah.
Timwi

17
Anda harus mempostingnya sebagai jawaban terpisah.
nicael

21
Anda AKAN mempostingnya sebagai jawaban terpisah.
Timwi

11
Anda meyakinkan saya untuk mempostingnya sebagai jawaban yang terpisah.
YoYoYonnY

5

Retina, 11 7 byte

.
 $`$0

Output dipisahkan oleh ruang, dengan ruang terdepan dan linefeed tambahan.

Cobalah online!


Untuk anak cucu, mudah dibawa ke Perl untuk 5 byte lagi: perl -pE 's/./$$ & \ n / g'`. (Saya terlambat 11 bulan, saya tahu)
Dada

4

Python, 35

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

Tidak dapat menemukan cara yang digunakan and/oruntuk menyederhanakan rekursi karena []kesalahan.

Solusi rekursif, mengembalikan daftar string.

Cobalah online


4

Prolog (SWI), 60 49 byte

Kode:

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

Dijelaskan:

atom_prefix dengan X diatur ke input dan S sebagai variabel memberikan 1 awalan dari atom X dimulai dengan atom kosong.

findall mendapatkan semua solusi dan memasukkannya ke dalam daftar.

[_ | R] membuang kepala (atom kosong) dan menyimpan ekor di R

Contoh:

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

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

Cobalah online di sini

Edit: disimpan 11 byte dengan hanya menyimpan ekor di R .



3

GNU Sed, 21

Skor termasuk +1 untuk -Eopsi sed:

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

Bekerja untuk LTR, tetapi tidak untuk RTL - Saya melewatkan sedikit itu. . Sebenarnya tidak berfungsi, RTL tidak melakukan rendering dengan benar di terminal saya. Ini berfungsi dengan baik dengan IO dilihat dalam editor teks yang masuk akal (misalnya emacs). Ini juga berfungsi di Ideone:

Cobalah online.


3

Brachylog , 5 byte (Tidak bersaing)

@[@w\

Cobalah online!

Penjelasan

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

Senar dari kanan ke kiri tampaknya berfungsi dengan baik, meskipun saya bahkan tidak pernah mempertimbangkannya.


Kenapa tidak bersaing?
Adám

@ Adám @[dan @wdiimplementasikan tentu setelah April / Mei 2016. Orang bisa menemukan tanggal pasti pada komitmen Github tetapi pasti tidak sebelum tantangan ini diajukan.
Fatalkan

2

CJam, 9 byte

l{N2$@+}*

Output dipisahkan linefeed.

Uji di sini.

Penjelasan

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

Saya benar-benar berharap CJam lebih pendek dari itu.
Timwi

@Timwi Tidak ada built-in "get all prefix / suffixes" atau fungsi tingkat tinggi untuk akumulasi umum, jadi bahkan jika ini tidak optimal saya ragu itu dapat dikalahkan secara signifikan.
Martin Ender

Ll{+_p}/;panjangnya sama, memposting karena saya tidak yakin jika seseorang dengan pengalaman lebih mungkin bisa bermain golf lebih banyak, dan juga mungkin memperbaiki hal tanda kutip: P
FryAmTheEggman

2

JavaScript, 36 byte

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

Prinsipnya adalah untuk memetakan dan menampilkan potongan string dari char pertama ke char setiap kata. Anehnya, ini berfungsi dengan baik untuk string RTL juga, tidak perlu optimasi.


2

Konsol saya tidak mendukung karakter Kanan-ke-Kiri, tetapi saya rasa itu tidak akan berfungsi: c

C, 74 byte (entri ke-2)

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

Tidak Terkumpul:

#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

Konsol saya tidak mendukung karakter Kanan-ke-Kiri, tetapi saya rasa itu tidak akan berfungsi: c

C, 105 byte (entri ketiga)

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

Tidak Terkumpul:

#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

Tidak valid secara teknis: TI-BASIC tidak mendukung Unicode.

Beri nama ini prgmA, dan masukan menggunakanAns .

Rekursi program akan lebih pendek, tetapi tidak akan ada cara untuk menginisialisasi variabel. Oleh karena itu, kami menampilkan substring input pada setiap iterasi. Masukan tidak pernah ditimpa, karena Disp tidak mengembalikan nilai.

Akhirnya, program berakhir dengan kesalahan setelah mencetak seluruh string.



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

Jawaban sebelumnya ( 95 byte ):

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

Saya mencoba pendekatan rekursif, tetapi saya tidak bisa melakukannya. Mungkin orang lain akan (lebih pendek dari ini untuk loop).

Kasus yang tidak disatukan & uji:

Coba di sini.

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

Keluaran:

t
te
tes
test

נ
נח
נחמ
נחמן

2

Dip , 1 byte (tidak bersaing)

E

Penjelasan:

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

Belum pernah mendengar tentang Dip.
Adám

@ Adám There ....
Oliver Ni

1

MATL , 8 byte

Menggunakan versi bahasa saat ini (8.0.0) / kompiler

jtn1X"YR

Contoh

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

Penjelasan

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 karakter / 16 byte

ᴉⓜᵖ ᵴ˖$

Try it here (Firefox only).

Mungkin ada builtin untuk ini di suatu tempat - saya hanya belum menemukannya.

Penjelasan

ᴉⓜᵖ ᵴ˖$ // 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)

Ini bukan memenangkan apa pun, tetapi ini solusi sederhana.



1

Python, 32 byte

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

Fungsi rekursif yang menghasilkan string yang dipisahkan ruang dengan ruang terdepan.

Program 34 byte (Python 2):

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

1

V , 5 byte (tidak bersaing)

òÄ$xh

Cobalah online!

Bahasa ini lebih baru daripada tantangan, menjadikan jawaban ini tidak bersaing. Penjelasan:

ò       " 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+=$_)}

Mengambil input $args[0], melemparkannya sebagai char-array, menyalurkan karakter ke dalam satu lingkaran |%{...}. Setiap iterasi, kami akumulasikan ke $omelalui +=karakter saat ini $_. Ungkapan itu diringkas dalam parens sehingga salinan ditempatkan pada pipa. Pada akhir eksekusi, pipeline disiram melalui Write-Outputyang menempatkan garis baru antar elemen.

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

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


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.