포인트없는 모양과 말 순서


11

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

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

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

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

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

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

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


1
"EXTREME POINT FREENESS"는 무엇입니까?
Justin

1
@Quincunx 나는 그것을 찾아야했다 : stackoverflow.com/questions/944446/…
Digital Trauma

이 규칙을 설명 할 수 있습니까 When you have functions, they can not have named arguments.?
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳


3
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ 여러 언어 (J 언어 또는 스택 / 기반 언어와 같은 언어 또는 포스트 스크립트와 같은)에서는 함수에 인수가 없습니다. 그것들은 일부 외부 컨텍스트 (외부 범위에서 오는 스택 또는 인수)에 적용됩니다.
Thomas Baruchel

답변:


6

GolfScript (31 자)

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

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


11

하스켈 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
    
  • 출력에 여분의 0이 있으면 괜찮은 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

배쉬 및 코어 유틸리티, 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
$ 

4

매스 매 티카, 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 Pea 패턴은 다음 줄을 만들기 전에 이전 줄의 숫자를 정렬해야한다는 점에서 약간 다릅니다.
Gareth

2

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*/대체하고 { number of } + {what digit}로 바꿉니다. 또는 .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

입력으로 평가됩니다. 링크에서 tryapl.org는 사용자 입력을 허용하지 않기 때문에 8로 대체했습니다.

명명 된 변수 ( a←1), 명명 된 함수 ( f←{}), 인수 ( , ) 없음

기능 구성 만 :

  • 모나드 연산자 — 각각 : , 감소 : 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)
  • atops— (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

그래 알았어. 그럼 ... 왜 그래?
jpjacobs


X를 문자열의 입력으로 바꾸고 eval을 호출하는 IO 버전의 좋은 트릭!
Omar

재미있는 질문에 관해서는 : 1, 2 및 3 만 가지고 있다는 것이 분명하지 않습니까? 전 단계에서 4 이상의 연속 된 자릿수 xaaaay가 필요하지만 x_ay, a 's 또는 "a, a"입니다.
Omar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.