Revu'aを綴る


16

実際にAtbash Self PalindromesGeneralized Gematria Calculatorのどちらにも触発されていません

ストリング所与長さのN、出力Revu'aシーケンスの最初の文字であり、Sの最初の2つの文字S、...第nは -2の文字S、最初のn -1文字、全体

文字列は、強い指向性を持ち、0x0000〜0xFFFFの範囲にあるUnicode(必要なエンコード)文字のみで構成されます。ただし、方向性制御文字は発生しません。任意の文字列のすべての文字は同じ方向性を持ちます。

["t","te","tes","test"]スペースで区切られた文字列"t te tes test"、複数行のテキスト
t
te
tes
test
、事前にフォーマットされた配列として配列表記で返すことができます

t
て
テス
テスト
、または同様のもの。先頭、区切り、末尾のスペースの量は重要ではなく、末尾の改行も重要ではありません。疑問がある場合は尋ねます。

右から左への入力は、正しい順序で右から左への出力になる必要があります。
入力:"נחמן"
出力:"נ נח נחמ נחמן"または

נ
נח
נחמ
נחמן
、または["נ","נח","נחמ","נחמן"]。無効な結果の中には"נחמן נחמ נח נ""ן מן חמן נחמן"、と"נחמן חמן מן ן"

回答:



12

JavaScript(ES6)、27 26 25バイト

@nicaelと@MartinBüttnerのおかげで1バイト、@ Neilのおかげで1バイト節約

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デニスが商標登録する前の約1か月間、Japtの回答でそのフレーズを使用していました。私はそれを使い続ける道徳的な権利を持っているべきだと思う:P
ETHproductions

6

Brainfuck、40バイト

私のコンソールはRight-to-Leftの文字をサポートしていませんが、動作するとは思いません: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
それらを個別の回答として投稿できます。
ニカエル

20
個別の回答として投稿する必要があります。
ティムウィ

17
個別の回答として投稿する必要あります。
ニカエル

21
あなたはWILL別の答えとしてそれらを投稿してください。
ティムウィ

11
あなたはそれらを別々の回答として投稿することを確信しました。
YoYoYonnY


4

Python、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).

説明:

Xが入力に設定され、Sが変数として設定されたatom_prefixは、空のアトムで始まるアトムXの 1つのプレフィックスを提供します。

findallはすべてのソリューションを取得し、それらをリストに入れます。

[_ | R]は頭(空のアトム)を捨て、尾をRに格納します

例:

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

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

こちらからオンラインでお試しください

編集:Rにテールを保存するだけで11バイトを節約しました。



3

GNU Sed、21

スコアには-E、sedオプションの+1が含まれます。

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

LTRには機能しますが、RTLには機能しません-私はそのビットを逃しました。。実際に動作しますが、RTLは端末で正しくレンダリングされませんでした。賢明なテキストエディター(emacsなど)で表示されるIOで正常に動作します。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で@[あり、@w2016年4月/ 5月以降に必ず実装されました。Githubのコミットで正確な日付を見つけることはできましたが、このチャレンジが送信される前ではありません。
16年

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}/;経験が豊富な人がもっとゴルフできるかどうかわからないので、同じ長さで投稿し、引用符を修正するかもしれません: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

私のコンソールはRight-to-Leftの文字をサポートしていませんが、動作するとは思いません:c

C、74バイト(2番目のエントリ)

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

ゴルフをしていない:

#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

私のコンソールはRight-to-Leftの文字をサポートしていませんが、動作するとは思いません: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]);}

ゴルフをしていない:

#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をサポートしていません。

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

再帰的なアプローチを試みましたが、実際に動作させることができませんでした。おそらく他の誰かが(このforループよりも短い)でしょう。

未ゴルフ&テストケース:

ここで試してみてください。

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).

おそらくどこかにこのための組み込みがあります-私はそれを見つけていません。

説明

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



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介し+=て累積し$_ます。その式は括弧でカプセル化されているため、コピーがパイプラインに配置されます。実行が終了すると、パイプラインがフラッシュされ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.