Bezcelowy wygląd i sekwencja

11

Ty też tworzysz program, który przyjmuje liczbę całkowitą jako dane wejściowe i wyjściowe jako pierwsze, niezależnie od tego, jak długo wyglądała i mówiła sekwencja .

Na przykład:

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

Dokładny sposób wyświetlania listy jest nieistotny, o ile użytkownicy wyraźnie widzą różne liczby sekwencji. Ale tutaj jest haczyk. Nie można użyć żadnej zmiennej zdefiniowanej przez użytkownika.

Na przykład:

  1. Brak zmiennych, w tym zmiennych o zasięgu.
  2. Gdy masz funkcje, nie mogą mieć nazwy. (Wyjątek, jeśli Twój język wymaga funkcji głównej lub podobnej do pracy, możesz mieć tę funkcję.)
  3. Gdy masz funkcje, nie mogą one nazywać argumentów.

Nie możesz także korzystać z biblioteki o określonych możliwościach związanych z sekwencją wyglądu i powiedzeń, nie możesz uzyskać dostępu do sieci ani dostarczyć programowi żadnych plików (chociaż może on generować i używać własnych). To jest golf golf, tak wygrywa najkrótszy kod w postaci!

PyRulez
źródło
1
Co to jest „EKSTREMALNA SWOBODA PUNKTOWA”?
Justin
1
@Quincunx Musiałem to sprawdzić: stackoverflow.com/questions/944446/...
Cyfrowa trauma
Czy możesz wyjaśnić tę zasadę When you have functions, they can not have named arguments.:?
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨d̷̰̀ĥ̷̳
3
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨d̷̰̀ĥ̷̳ W kilku językach (takich jak język J lub języki oparte na stosie / naprzód lub PostScript) funkcje nie mają argumentów; dotyczą one pewnego kontekstu zewnętrznego (stosu lub argumentów pochodzących z zakresu zewnętrznego).
Thomas Baruchel

Odpowiedzi:

6

GolfScript (31 znaków)

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

Dostosowane z mojej odpowiedzi na poprzednie pytanie typu „ spójrz i powiedz” . Ten ma mniej uciążliwe ograniczenie dla języków funkcjonalnych, co pozwala zaoszczędzić 5 znaków, ale ponieważ większość odpowiedzi na poprzednie pytanie nie może być dostosowane (jest to szalenie uciążliwe ograniczenie dla języków niefunkcjonalnych), nie sądzę, aby miało to sens aby zamknąć go jako duplikat.

Peter Taylor
źródło
11

Haskell 206 Chars

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

Działa za pomocą funkcji grupy, aby pogrupować je w grupy równych rzeczy. Następnie używa aplikacji z funkcjami, aby zbudować funkcję, która jednocześnie odczytuje długość i dołącza ją do jednego elementu. Używa poprawki i mapy, aby utworzyć definicję rekurencyjną (bez punktów.) I proszę bardzo.

PyRulez
źródło
10

J (42 znaki)

Programowanie bez użycia punktów (zwane także milczeniem) jest naturalne w J.

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

To funkcja, aby z niej skorzystać, piszesz kod, spację i numer wejściowy. Na przykład,

   ,@:((#,{.);.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│
└─┴───┴───┴───────┴───────────┴───────────┴───────────────┴───────────────────┘

Zwróć uwagę na ładne pola wyjściowe.

Dodatek : Oto kilka „cheatów”, których początkowo byłem zbyt nieśmiały, ale teraz, gdy widziałem, jak inni używają ich w pierwszej kolejności…

  • Oto wersja 36-znakowa z inną „konwencją wywoływania”: zamień 8 na żądaną liczbę terminów.

    ,@:((#,{.);.1~(1,}.~:}:))&.>^:(<8)<1
    
  • A jeśli posiadanie dodatkowych zer na wyjściu jest OK, oto wersja 32-znakowa:

    ,@:((#,{.);.1~(1,}.~:}:))^:(<8)1
    
Omar
źródło
7

GolfScript, 36 znaków

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

Zmienne są dość rzadko używane w GolfScript, a to zadanie z pewnością ich nie potrzebuje. Wejście jest ustawione na standardowe wejście, a wyjście na standardowe wyjście. Na przykład dane wejściowe 8dają dane wyjściowe:

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

Mogę później napisać szczegółowe wyjaśnienie tego kodu, ale przynajmniej łatwo można stwierdzić, że nie używa on zmiennych, ponieważ nie zawiera :nigdzie operatora przypisania zmiennych .

Ilmari Karonen
źródło
6

Haskell, 118 znaków (80 bez importu)

import Data.List
import Control.Monad
main=readLn>>=print.flip take(iterate(ap((++).show.length)(take 1)<=<group)"1")
Niklas B.
źródło
6

Bash i coreutils, 111 73 znaków

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

uniq -cwykonuje ciężkie podnoszenie, aby wygenerować kolejny numer w sekwencji. yes, sedI evalstworzyć niezbędną liczbę powtórzeń rurociągu przetwarzania. Reszta to tylko formatowanie.

Dane wyjściowe są umieszczane w pliku o nazwie o.:

$ ./looksay.sh 8
ubuntu @ ubuntu: ~ $ cat o
1
11
21
1211
111221
312211
13112221
1113213211
$ 
Cyfrowa trauma
źródło
4

Mathematica, 65 znaków

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

Przykład:

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

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

alephalpha
źródło
3

J, 37 znaków

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

Na podstawie mojej odpowiedzi na pytanie o wzór groszku . Tutaj może istnieć pewien potencjał skrócenia. Użycie jest takie samo jak dla drugiej odpowiedzi 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

Ma również problem z dodatkowymi zerami, który miał mój wzór groszku.

Gareth
źródło
Ach, jest więcej niż jedno poprzednie pytanie, a na to pytanie można skopiować więcej odpowiedzi bez żadnych drobnych poprawek niż z pytania, które znalazłem. Jestem prawie przekonany, aby zagłosować za zamknięcie jako dupe.
Peter Taylor
@PeterTaylor Jeden wzór groszku różni się nieco tym, że musisz posortować liczby w poprzednim wierszu przed utworzeniem następnego.
Gareth,
2

Perl 6: 63 53 znaków

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

Utwórz leniwą listę sekwencji Look and Say ( 1,*.subst(/(\d)$0*/,{.chars~.[0]},:g)...*), a następnie uzyskaj tyle elementów, ile określił użytkownik ( [^get]czyli indeks tablicy i środki [0..(get-1)]) i saywszystkie.

Leniwa lista działa najpierw biorąc 1, a następnie, aby wygenerować każdy kolejny numer, bierze ostatni znaleziony numer i zastępuje wszystkie sekwencje tej samej cyfry, zgodnie z dopasowaniem /(\d)$0*/, i zamienia je na {ile} + {jaka cyfra} lub .chars~.[0].

Jedynymi zmiennymi w tym kodzie są $0pierwsze przechwycenie dopasowania i domyślna $_zmienna tematyczna , którą .methodwywołują, i żadna z nich nie jest zdefiniowana przez użytkownika.

Mouq
źródło
1

GolfScript, 57 43 znaków

Moje własne podejście. Niestety skończyło się to dłużej niż istniejące = (.

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

Przykładowe dane wyjściowe dla 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]

Alternatywna wersja bez 9wartownika, ale ma ona dłużej 47 znaków. Podejrzewam, że ma większy potencjał:

~[1]{.p[{...1<^.{0=?.@(\@(>1}{;,\0=0}if}do]}@*;
Claudiu
źródło
1

Scala 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"))
Ben Reich
źródło
1
Jestem prawie pewien, że iin i=>jest zmienną.
Peter Taylor
1

Dyalog APL, 35 znaków

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

jest oceniane wejście. W linku zastąpiłem go 8, ponieważ tryapl.org nie pozwala na wprowadzanie danych przez użytkownika.

Bez nazwanych zmiennych ( a←1), bez nazwanych funkcji ( f←{}), bez argumentów ( , ).

Tylko skład funkcji:

  • operatory monadyczne - każdy:, redukcja f/:, dojazdy:f⍨
  • operatory dynamiczne — moc f⍣n:, komponuj:f∘g
  • widelce— (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 pociągi (widelce)(f g h k) ←→ (f (g h k))

Zastosowane podstawowe funkcje:

  • dobrze:A⊢B ←→ B
  • rewers:⌽B
  • pierwszy:⊃B
  • powiązać:A,B
  • nie pasuje A≢B:, policz:≢B
  • załącz:, ⊂Bpartycja:A⊂B
  • spłaszczyć:∊B

W tryapl.org, jeśli usuniesz końcowy ⊢1, który jest argumentem tej masowo skomponowanej rzeczy, możesz zobaczyć diagram tego, jak jest analizowany:

     ⍣               
   ┌─┴─┐             
 ┌─┼─┐ 7             
 ⊢ , ∘               
    ┌┴┐              
    ∘ ⌽              
 ┌──┴───┐            
 ∘    ┌─┴─┐          
┌┴┐   ¨ ┌─┼───┐      
⊂ ∊ ┌─┘ ⊃ ⍨ ┌─┼───┐  
  ┌─┼─┐ ┌─┘ 2 / ┌─┼─┐
  ≢ , ⊃ ⊂   ┌─┘ 0 , ⊃
            ≢
ngn
źródło
0

J 66 (z I / O)

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

bez we / wy, wyniki 43:

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

Śmieszne pytanie, które należy sobie zadać, kiedy pojawi się pierwsze 9?

jpjacobs
źródło
Nigdy nie patrz na stronę sekwencji liczb całkowitych.
PyRulez
Dobra, widzę. Więc ... dlaczego tak?
jpjacobs
Fajna sztuczka w wersji IO polegająca na zamianie X na dane wejściowe w łańcuchu, a następnie wywołaniu eval!
Omar
Co do zabawnego pytania: czy nie jest całkiem jasne, że masz tylko 1, 2 i 3? Mam na myśli 4 lub więcej, w poprzednim kroku potrzebujesz czterech kolejnych równych cyfr, xaaaay, ale to nie może się zdarzyć, ponieważ powiedziałbyś kolejny krok wcześniej, że widziałeś „x a, a a” lub „a a, a a”.
Omar