无指向的说出顺序


11

您也正在制作一个程序,该程序以整数作为输入,并首先输出该数字与外观和说话顺序相同的数字

例如:

$ ./LAS
8
[1,11,21,1211,111221,312211,13112221,1113213211]

只要用户可以清楚地看到序列的不同编号,输出列表的确切方法就无关紧要。不过这里是要抓住的地方。您不能使用任何类型的用户定义变量。

例如:

  1. 没有变量,包括范围变量。
  2. 具有功能时,它们不能具有名称。(例外,如果您的语言需要主要功能或类似功能,则可以使用该功能。)
  3. 当您具有函数时,它们不能具有命名参数。

另外,您可能无法使用具有与外观和说话顺序相关的特定功能的库,并且无法访问网络,也无法为程序提供任何文件(尽管它可以生成并使用自己的文件。)这是代码高尔夫,字符中最短的代码将获胜!


1
什么是“极点自由度”?
贾斯汀


您可以解释以下规则When you have functions, they can not have named arguments.吗?
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ 2014年


3
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳在几种语言(如J语言或基于堆栈的基于语言的语言(如四行或后记))中,函数没有参数。它们适用于某些外部上下文(来自外部作用域的堆栈或参数)。
Thomas Baruchel 2014年

Answers:


6

GolfScript(31个字符)

~[]\{[1\{.2$={;\)}1if\}*].n@}*;

根据我的回答改编为先前的外观问题。这个函数对功能语言的约束不太繁琐,可以节省5个字符,但是由于无法适应上一个问题的大多数答案(对非函数语言来说,这是一个疯狂繁琐的约束),我认为这没有道理将其关闭


11

Haskell 206个字符

import Data.List
import Control.Applicative
import Data.Function
main= readLn >>= print .(flip take (map read $ fix (("1":). map (concat .(map ((++)<$>(show . length)<*>((:[]). head))). group))::[Integer]))

它通过使用分组功能将它们分组为相等的事物来工作。然后,它使用带有函数的应用程序来构建一个函数,该函数可以同时读取长度,并将其附加到一个元素上。它使用一个修复程序和一个映射来创建一个递归定义(无点)。


10

J(42个字符)

无点(也称为默认)编程在J语言中很自然。

,@:((#,{.);.1~(1,}.~:}:))&.>^:(<`((<1)"_))

那是一个函数,要使用它,您可以编写代码,空格和输入数字。例如,

   ,@:((#,{.);.1~(1,}.~:}:))&.>^:(<`((<1)"_)) 8
┌─┬───┬───┬───────┬───────────┬───────────┬───────────────┬───────────────────┐
│1│1 1│2 1│1 2 1 1│1 1 1 2 2 1│3 1 2 2 1 1│1 3 1 1 2 2 2 1│1 1 1 3 2 1 3 2 1 1│
└─┴───┴───┴───────┴───────────┴───────────┴───────────────┴───────────────────┘

注意输出中的漂亮框。

附录:这里有一些“秘籍”,我一开始不太害羞,但是现在我已经看到其他人第一次使用它们。

  • 这是一个36字符的版本,具有不同的“调用约定”:将8替换为所需的术语数。

    ,@:((#,{.);.1~(1,}.~:}:))&.>^:(<8)<1
    
  • 如果输出中有额外的零是可以的,那么这里是32个字符的版本:

    ,@:((#,{.);.1~(1,}.~:}:))^:(<8)1
    

7

GolfScript,36个字符

~([1]\{.[0\{.2$=!{0\.}*;\)\}/](;}*]`

很少在GolfScript中使用变量,并且此任务当然不需要它们。输入在stdin上,输出到stdout。例如,输入8给出输出:

[[1] [1 1] [2 1] [1 2 1 1] [1 1 1 2 2 1] [3 1 2 2 1 1] [1 3 1 1 2 2 2 1] [1 1 1 3 2 1 3 2 1 1]]

稍后我可能会对此代码进行详细说明,但是至少您可以很容易地说出它不使用任何变量,因为它在:任何地方都不包含变量赋值运算符。


6

Haskell,118个字符(80个不带进口)

import Data.List
import Control.Monad
main=readLn>>=print.flip take(iterate(ap((++).show.length)(take 1)<=<group)"1")

6

Bash和coreutils,111 73个字符

eval echo 1\|`yes 'tee -a o|fold -1|uniq -c|(tr -dc 0-9;echo)|'|sed $1q`:

uniq -c正在繁重的工作来产生序列中的下一个数字。 yessedeval创建必要数量的重复处理管道。其余的只是格式化。

输出放置在名为o。:的文件中。

$ ./looksay.sh 8
ubuntu @ ubuntu:〜$ cat o
1个
11
21
1211
111221
312211
13112221
1113213211
$ 

4

Mathematica,65个字符

FromDigits/@NestList[Flatten@Reverse[Tally/@Split@#,3]&,{1},#-1]&

例:

FromDigits/@NestList[Flatten@Reverse[Tally/@Split@#,3]&,{1},#-1]&[8]

{1,11,21,1211,111221,312211,13112221,1113213211}


3

J,37个字符

1([:,((1,2&(~:/\))(#,{.);.1]))@[&0~i.

基于我对豌豆模式问题的回答。这里可能有缩短的潜力。用法与其他J答案相同:

   1([:,((1,2&(~:/\))(#,{.);.1]))@[&0~i. 7
1 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0
2 1 0 0 0 0 0 0
1 2 1 1 0 0 0 0
1 1 1 2 2 1 0 0
3 1 2 2 1 1 0 0
1 3 1 1 2 2 2 1

我的豌豆模式答案也有额外的零问题。


嗯,之前有一个以上的问题,与我发现的问题相比,可以将所有问题的答案完全复制到该问题,而无需进行任何调整。我几乎说服了我以关闭票的形式投票。
彼得·泰勒

@PeterTaylor豌豆模式略有不同,因为您必须在创建下一行之前对前一行中的数字进行排序。
Gareth 2014年

2

Perl 6:63 53个字符

say (1,*.subst(/(\d)$0*/,{.chars~.[0]},:g)...*)[^get]

创建一个Look and Say序列的懒惰列表(1,*.subst(/(\d)$0*/,{.chars~.[0]},:g)...*),然后获取用户指定的尽可能多的元素([^get],这是一个数组下标和均值[0..(get-1)]),以及say所有这些元素。

惰性列表的工作方式是先取1,然后生成每个连续的数字,再取找到的最后一个数字/(\d)$0*/,并替换与匹配的同一数字的所有序列,然后将其替换为{多少} + {什么数字}或.chars~.[0]

这段代码中唯一的变量是$0,匹配的第一个捕获$_值以及裸.method调用的隐式主题变量,而这两个变量都不是用户定义的。


1

GolfScript,57个 43个字符

我自己的方法。最终比现有的更长(=)。

~[1 9]{.);p[{...1<^0=?.@(\@(>.,(}do 0=]}@*;

stdin的示例输出8

[1]
[1 1]
[2 1]
[1 2 1 1]
[1 1 1 2 2 1]
[3 1 2 2 1 1]
[1 3 1 1 2 2 2 1]
[1 1 1 3 2 1 3 2 1 1]

带有9哨兵的替代版本,但更长,为47个字符。我怀疑它还有更多潜力:

~[1]{.p[{...1<^.{0=?.@(\@(>1}{;,\0=0}if}do]}@*;

1

斯卡拉178

(0 to Console.in.readLine.toInt).map(i=>Function.chain(List.fill[String=>String](i)(y=>(('0',0,"")/:(y+" ")){case((a,b,c),d)=>if(d==a)(a,b+1,c)else(d,1,c+b+a)}._3.drop(2)))("1"))

1
我很确定iin i=>是一个变量。
彼得·泰勒

1

Dyalog APL,35个字符

(⊢,⊂∘∊∘((≢,⊃)¨⊃⊂⍨2≢/0,⊃)∘⌽)⍣(⎕-1)⊢1

被评估的输入。在链接中,我已将其替换为8,因为tryapl.org不允许用户输入。

没有命名变量(a←1),没有命名函数(f←{}),没有参数()。

仅功能组合:

  • 单子运算符-每个:,reduce :f/、通勤:f⍨
  • 二元运算符-幂:f⍣n,组成:f∘g
  • 叉子— (f g h)B ←→ (f B)g(h B)A(f g h)B ←→ (A f B)g(A h B)
  • 顶上(f g)B ←→ f(g B)A(f g)B ←→ f(A g B)
  • 4列火车(前叉)(f g h k) ←→ (f (g h k))

使用的原始函数:

  • 对:A⊢B ←→ B
  • 相反:⌽B
  • 第一:⊃B
  • 串联:A,B
  • 不匹配:A≢B,计数:≢B
  • 包含:⊂B,分区:A⊂B
  • 展平:∊B

在tryapl.org中,如果删除拖尾⊢1(这是这种庞大的组合事物的参数),则可以看到如何解析的示意图:

     ⍣               
   ┌─┴─┐             
 ┌─┼─┐ 7             
 ⊢ , ∘               
    ┌┴┐              
    ∘ ⌽              
 ┌──┴───┐            
 ∘    ┌─┴─┐          
┌┴┐   ¨ ┌─┼───┐      
⊂ ∊ ┌─┘ ⊃ ⍨ ┌─┼───┐  
  ┌─┼─┐ ┌─┘ 2 / ┌─┼─┐
  ≢ , ⊃ ⊂   ┌─┘ 0 , ⊃
            ≢

0

J 66(带I / O)

".@(_5}&',@((#,&:":{.);.1~1&(0})&(~:_1|.]))^:(<X)":1')@{.&.stdin''

没有IO,得分43:

NB. change the 8 for the number of numbers you'd want
,@((#,&:":{.);.1~1&(0})&(~:_1|.]))^:(<8)'1'

摆出一个有趣的问题,第一个9何时出现?


永远不要看整数序列页面。
PyRulez 2014年

好的我明白了。那...为什么呢?
jpjacobs 2014年


IO版本中的好技巧是用字符串中的输入替换X,然后调用eval!
2014年

至于有趣的问题:不是很清楚,您只有1、2和3吗?我的意思是得到4或更高的值,在上一步中,您需要连续四个相等的数字xaaaay,但这不会发生,因为您可能会说再早一步就看到了“ x a,a”或“一个,一个”。
奥马尔2014年
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.