포인트없는 모양과 말 순서 종류의 사용자 정의 변수도 사용할 수

당신은 입력으로 정수를 취하고 그 숫자가 look and say sequence 중 첫 번째를 출력하는 프로그램을 만들고 있습니다 .

예를 들면 다음과 같습니다.

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

사용자가 다른 수의 시퀀스를 명확하게 볼 수 있다면 목록을 출력하는 정확한 방법은 중요하지 않습니다. 그래도 캐치가 있습니다. 어떤 종류의 사용자 정의 변수도 사용할 수 없습니다.

예를 들면 다음과 같습니다.

  1. 범위가 지정된 변수를 포함하여 변수가 없습니다.
  2. 기능이 있으면 이름을 가질 수 없습니다. (예를 들어, 언어에 주요 기능이 필요하거나 그와 유사한 기능이 필요한 경우 해당 기능이있을 수 있습니다.)
  3. 함수가 있으면 명명 된 인수를 가질 수 없습니다.

또한 모양과 말 순서와 관련된 특정 기능이있는 라이브러리를 사용할 수 없으며 네트워크에 액세스하거나 프로그램에 파일을 제공 할 수 없습니다 (자체 생성하여 사용할 수는 있지만). 이것은 골프입니다. 문자가 가장 짧은 코드가 승리합니다!



답변

GolfScript (31 자)

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

이전 답변과 대답에 대한 제 답변에서 발췌했습니다 . 이것은 기능 언어에 대한 덜 엄격한 제한을 가지고있어 5자를 절약 할 수 있지만 이전 질문에 대한 대부분의 답변을 조정할 수 없기 때문에 (비 기능 언어에 대한 미친듯한 제한입니다) 나는 의미가 없다고 생각합니다 속임수로 닫습니다.


답변

하스켈 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]))

그룹 기능을 사용하여 동일한 그룹으로 그룹화하여 작동합니다. 그런 다음 함수와 함께 응용 프로그램을 사용하여 길이를 동시에 읽고 요소 하나에 추가하는 함수를 작성합니다. 그것은 수정과 맵을 사용하여 재귀 적 정의를 작성합니다 (포인트 없음).


답변

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
    
  • 출력에 여분의 0이 있으면 괜찮은 32 문자 버전입니다.

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

답변

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]]

나중에이 코드에 대한 자세한 설명을 쓸 수는 있지만 최소한 변수 할당 연산자가 포함되어 있지 않으므로 변수를 사용하지 않는다는 것을 쉽게 알 수 있습니다 :.


답변

Haskell, 118 자 (수입없이 80)

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

답변

배쉬 및 코어 유틸리티, 111 73 자

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

uniq -c시퀀스에서 다음 숫자를 생성하기 위해 많은 노력을 기울이고 있습니다. yes, sedeval프로세싱 파이프 라인의 반복의 필요한 수를 생성한다. 나머지는 단지 포맷입니다.

출력은이라는 파일에 배치 o됩니다.

$ ./looksay.sh 8
우분투 @ 우분투 : ~ $ cat o
1
11
21
1211
111221
312211
13112221
1113213211
$

답변

매스 매 티카, 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}