讲解Revu'a


16

其实不是没有灵感阿特巴希密码自回文也不由广义GEMATRIA计算器

如果给定字符串š长度的Ñ,输出Revu'a序列,这是第一个字符小号,中前两个字符小号,...第一Ñ -2字符小号,第一Ñ -1的字符小号,整个小号

该字符串将仅包含方向性强且范围在0x0000到0xFFFF之间的Unicode(所需的任何编码)字符。但是,不会出现方向控制字符。任何给定字符串中的所有字符将具有相同的方向性。

您可以数组符号的形式返回["t","te","tes","test"],以空格分隔的字符串"t te tes test",以多行文本的形式返回
t
te
tes
test
(预格式化的数组)的形式返回

Ť
te
特斯
测试
或类似的内容。前导,分隔和尾随空格的数量并不重要,尾随换行符也不重要。询问是否有疑问。

从右至左输入必须以正确的顺序产生从右至左输出:
输入:"נחמן"
输出:"נ נח נחמ נחמן"

נ
נח
נחמ
נחמן
["נ","נח","נחמ","נחמן"]。在无效的结果是"נחמן נחמ נח נ""ן מן חמן נחמן""נחמן חמן מן ן"

Answers:


17

Dyalog APL,2个字节

,\

累计减少并置。在这里尝试。

当您为a加上前缀时,输出的格式会更好,但是如果没有,它可以清楚地显示正确的顺序。


2
一模一样的解决方案适用于在K.同样的原因
强尼

@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,"$“)`你得到一个额外的前导空格但这是允许的。
尼尔

@尼尔,谢谢,我没有任何线索!
ETHproductions 2016年

gh,我忘了正确引用我的`,但是我看到你明白了我的意思。
尼尔

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在Dennis为其注册商标之前,我一直在Japt答案中使用该短语大约一个月。我觉得我应该有一些道德权利继续使用它:P
ETHproductions 2016年

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
应该将它们作为单独的答案发布。
Timwi'1

17
必须将它们作为单独的答案发布。
nicael

21
将把它们作为单独的答案发布。
Timwi'1

11
说服我将它们发布为单独的答案。
YoYoYonnY

5

视网膜,11 7字节

.
 $`$0

输出以空格分隔,前导空格和尾随换行符。

在线尝试!


为了后代,它可移植到Perl以获得另外5个字节:perl -pE 's/./$$&\ n / g'`。(我知道我迟到了11个月)
达达

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_prefixX设定为输入和小号作为变量给出了原子的1个前缀X开始与空原子。

findall获取所有解决方案并将它们放在列表中。

[_ | R]丢掉头(空原子)并将尾巴存储在R中

例子:

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

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

在这里在线尝试

编辑:仅通过将尾部存储在R中来保存11个字节。



3

GNU Sed,21岁

分数包括+1,可供-E选择:

:
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 @[@w必须在2016年4月/ 5月之后实施。有人可以在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'1

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

取消高尔夫:

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

取消高尔夫:

#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

נ
נח
נחמ
נחמן

2

Dip,1个字节(无竞争)

E

说明:

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

从未听说过浸。
亚当

@AdámThere ....
奥利弗·倪

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

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数组,将字符传递到循环中|%{...}。每次迭代,我们$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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.