Точкова послідовність погляду і висловлювання


11

Ви надто складете програму, яка приймає ціле число як вхідне та виводить перше, що коли-небудь було цим числом послідовності "вигляд і скажіть" .

Наприклад:

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

Точний спосіб виведення списку є неважливим, якщо користувачі можуть чітко бачити різні числа послідовності. Ось улов, хоча. Ви не можете використовувати будь-яку змінну, визначену користувачем.

Наприклад:

  1. Немає змінних, включаючи масштабовані змінні.
  2. Коли у вас є функції, вони не можуть мати ім’я. (Виняток, якщо для вашої мови потрібна основна функція або подібна до роботи, ви можете мати цю функцію.)
  3. Коли у вас є функції, вони не можуть називати аргументи.

Крім того, ви не можете використовувати бібліотеку з певними можливостями, що стосуються послідовності перегляду і висловлювання, і ви не можете отримати доступ до мережі або надати програмі будь-які файли (хоча вони можуть генерувати та використовувати власні.) Це код гольфу, так виграє найкоротший код у символах!


1
Що таке "ЕКСТРЕМНА БОЛЬНІСТЬ"?
Джастін

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 або стек / основні мови, такі як четвертий або постскрипт), функції не мають аргументу; вони поширюються на деякий зовнішній контекст (стек або аргументи, що надходять із зовнішньої області).
Томас Баручель

Відповіді:


6

GolfScript (31 знак)

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

Адаптований з моєї відповіді на попереднє запитання "перегляд" . У цьому є менш обтяжливе обмеження для функціональних мов, яке дозволяє зберегти 5 символів, але оскільки більшість відповідей на попереднє питання неможливо адаптувати (це химерно обтяжливе обмеження для нефункціональних мов), я не думаю, що це має сенс щоб закрити його як дупу.


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

Він працює за допомогою функції групи для групування їх у групи рівних речей. Потім він використовує додатки з функціями для побудови функції, яка одночасно зчитує довжину, і додає її до одних елементів. Він використовує виправлення та карту, щоб створити рекурсивне визначення (без точок.) І там ви йдете.


10

J (42 символи)

Точкове (також його називають мовчазне) програмування є природним для Дж.

,@:((#,{.);.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 char із іншою "умовою виклику": замініть 8 на кількість потрібних термінів.

    ,@:((#,{.);.1~(1,}.~:}:))&.>^:(<8)<1
    
  • І якщо з додатковими нулями на виході все нормально, ось версія 32 char:

    ,@:((#,{.);.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, sedі evalстворити необхідну кількість повторів трубопроводу для обробки. Решта - лише форматування.

Виведення розміщується у файлі під назвою o.:

$ ./looksay.sh 8
ubuntu @ ubuntu: ~ $ 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 Шаблон гороху трохи відрізняється тим, що вам доведеться сортувати числа в попередньому рядку, перш ніж створювати наступний.
Гарет

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

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

1
Я майже впевнений, що iin i=>- це змінна.
Пітер Тейлор

1

Діалог APL, 35 символів

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

оцінюється вхід. У посиланні я замінив його на 8, оскільки tryapl.org не дозволяє вводити користувача.

Ніяких названих змінних ( a←1), жодних іменованих функцій ( f←{}), аргументів ( , ).

Тільки склад функцій:

  • монадійні оператори - кожен:, зменшити:, f/комутувати:f⍨
  • діадичні оператори — power:, f⍣ncompose: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≢Bcount:≢B
  • додавати:, ⊂Bрозділ:A⊂B
  • згладити:∊B

На tryapl.org, якщо ви видалите трейлінг ⊢1, що є аргументом цієї масивної складеної речі, ви можете побачити схему того, як вона розбирається:

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

0

J 66 (з вводу / виводу)

".@(_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


Хороший трюк у версії IO заміни X на введення в рядку та виклику eval!
Омар

Щодо смішного питання: чи не зовсім ясно, що у вас є лише 1, 2 і 3? Я маю на увазі отримати 4 або вище, на попередньому кроці вам знадобиться чотири послідовні рівні цифри, xaaaay, але цього не може статися, оскільки ви б сказали подальший крок раніше, коли ви побачили "x a's, a a" або "a a's, a a's".
Омар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.