Noktasız bakış ve söyle dizisi


11

Giriş ve tamsayı olarak bir tamsayı alan bir program oluşturuyorsunuz ve ilk önce o sayının görünüm ve söyleme sırasına sahip olduğu her şeyi çıkarıyor .

Örneğin:

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

Kullanıcılar dizinin farklı sayılarını farklı bir şekilde görebildiği sürece, listeyi tam olarak çıkış şekliniz önemsizdir. İşte yakalama. Herhangi bir kullanıcı tanımlı değişken kullanamazsınız.

Örneğin:

  1. Kapsamlı değişkenler dahil değişken yok.
  2. İşlevleriniz olduğunda, bunların bir adı olamaz. (İstisna, diliniz bir ana işlev veya işe benzer bir şey gerektiriyorsa, bu işleve sahip olabilirsiniz.)
  3. İşlevleriniz olduğunda, adlandırılmış bağımsız değişkenleri olamaz.

Ayrıca, görünüm ve söyleme sırası ile ilgili belirli özelliklere sahip bir kütüphane kullanamazsınız ve ağa erişemezsiniz veya programınıza herhangi bir dosya veremezsiniz (ancak kendi oluşturup kullanabilir). Bu kod golf, karakterlerde en kısa kod kazanır!


1
"AŞIRI NOKTA ÖZGÜRLÜĞÜ" nedir?
Justin

1
@Quincunx Aramak zorunda kaldım: stackoverflow.com/questions/944446/…
Digital Trauma

Bu kuralı açıklayabilir misiniz When you have functions, they can not have named arguments.?
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳


3
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ Birçok dilde (J dili veya yığın gibi / ileri veya postscript gibi tabanlı diller), işlevlerin argümanı yoktur; bazı dış bağlamlara (dış kapsamdan gelen bir yığın veya bağımsız değişkenler) uygulanır.
Thomas Baruchel

Yanıtlar:


6

GolfScript (31 karakter)

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

Cevabımdan önceki bir bak ve söyle sorusuna uyarlandı . Bu, 5 karakter tasarrufu sağlayan işlevsel diller için daha az zahmetli bir kısıtlamaya sahiptir, ancak önceki soruya verilen cevapların çoğu uyarlanamadığından (işlevsel olmayan diller için çılgınca zahmetli bir kısıtlama) Mantıklı değil bir dupe olarak kapatmak için.


11

Haskell 206 Karakter

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

Grup işlevini kullanarak onları eşit şeyler gruplarına ayırır. Ardından, uzunluğu aynı anda okuyan ve onu bir öğeye ekleyen bir işlev oluşturmak için işlevlere sahip uygulamaları kullanır. Özyinelemeli bir tanım oluşturmak için bir düzeltme ve bir harita kullanır (noktasız). Ve işte gidiyorsunuz.


10

J (42 karakter)

Noktasız (örtük olarak da adlandırılır) programlama J'de doğaldır.

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

Bu bir işlev, kullanmak için kodu, bir boşluk ve giriş numarasını yazıyorsunuz. Örneğin,

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

Çıktıdaki güzel kutulara dikkat edin.

Zeyilname : İşte ilk başta kullanmak için çok utangaç olduğum bir çift "hileler", ama şimdi diğer onları ilk kullandığımı gördüm ...

  • Farklı bir "arama kuralı" ile 36 karakterlik bir sürüm: 8 yerine istediğiniz terim sayısını koyun.

    ,@:((#,{.);.1~(1,}.~:}:))&.>^:(<8)<1
    
  • Çıktıda fazladan sıfır varsa, 32 karakterlik bir sürüm:

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

7

GolfScript, 36 karakter

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

Değişkenler GolfScript'te oldukça nadiren kullanılır ve bu görevin kesinlikle bunlara ihtiyacı yoktur. Giriş stdin'de, çıkış stdout'a. Örneğin, girdi 8çıktıyı verir:

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

Daha sonra bu kodun ayrıntılı bir açıklamasını yazabilirim, ama en azından :herhangi bir yerde değişken atama operatörünü içermediği gerçeği ile hiçbir değişkeni kullanmadığını kolayca söyleyebilirsiniz .


6

Haskell, 118 karakter (80 ithalatsız)

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

6

Bash ve coreutils, 111 73 karakter

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

uniq -cdizideki bir sonraki sayıyı üretmek için ağır kaldırma yapıyor. yes, sedVe evalişleme hattının tekrarlarının gerekli sayıda oluşturun. Gerisi sadece biçimlendiriyor.

Çıktı. Adlı bir dosyaya yerleştirilir o:

$ ./looksay.sh 8
ubuntu @ ubuntu: ~ $ kedi o
1
11
21
1211
111221
312211
13112221
1113213211
$ 

4

Mathematica, 65 karakter

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

Misal:

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

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


3

J, 37 karakter

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

Bezelye Kalıbı sorusuna vermiş olduğum cevaba dayanarak . Burada kısaltma potansiyeli olabilir. Kullanımı diğer J cevabı gibidir:

   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

Ayrıca bezelye desen cevabımın ekstra sıfır sorunu var.


Ah, önceki birden fazla soru var ve bu sorudan daha fazla cevap, bulduğum sorudan hiç bir değişiklik yapmadan bu soruya kopyalanabilir. Neredeyse dupe olarak oy kullanmaya ikna oldum.
Peter Taylor

@PeterTaylor Bezelye deseni bir, diğerini oluşturmadan önce bir önceki satırdaki sayıları sıralamanız gerektiğinden biraz farklıdır.
Gareth

2

Perl 6: 63 53 karakter

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

Bak ve Söyle dizisinin ( 1,*.subst(/(\d)$0*/,{.chars~.[0]},:g)...*) tembel bir listesini oluşturun ve daha sonra kullanıcı tarafından belirtildiği kadar öğe ( [^get]yani bir dizi aboneliği ve aracıdır [0..(get-1)]) ve saybunların hepsini alın.

Tembel liste ilk önce 1 alarak çalışır, ardından her ardışık sayıyı oluşturmak için bulduğu son sayıyı alır ve aynı basamağın tüm dizilerini eşleştirildiği gibi /(\d)$0*/değiştirir ve bunları {kaç} + {hangi basamak} ile değiştirir , veya .chars~.[0].

Bu koddaki tek değişkenler $0, eşleşmenin ilk yakalanması ve çağıran $_çıplak örtülü, topikal değişkendir .methodve bunların hiçbiri kullanıcı tanımlı değildir.


1

GolfScript, 57 43 karakter

Kendi yaklaşımım. Ne yazık ki mevcut olandan daha uzun sürdü = (.

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

Stdin için örnek çıktı 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]

Alternatif sürüm 9sentinel'i dışarıda bırakır, ancak 47 karakterden daha uzundur. Daha fazla potansiyele sahip olduğundan şüpheleniyorum:

~[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
Oldukça emin değilim iiçinde i=>bir değişkendir.
Peter Taylor

1

Dyalog APL, 35 karakter

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

girdi olarak değerlendirilir. Bağlantıda tryapl.org kullanıcı girişine izin vermediği için 8 ile değiştirdim.

Adlandırılmış değişken yok ( a←1), adlandırılmış işlev yok ( f←{}), bağımsız değişken yok ( , ).

Sadece fonksiyonların bileşimi:

  • monadik operatörler — her biri:, azaltmak:, f/gidip:f⍨
  • ikili operatörler — güç:, f⍣noluştur:f∘g
  • çatallar - (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-trenler (çatal-atops) -(f g h k) ←→ (f (g h k))

Kullanılan ilkel fonksiyonlar:

  • sağ:A⊢B ←→ B
  • tersine çevirmek:⌽B
  • ilk:⊃B
  • concatenate:A,B
  • eşleşmiyor:, A≢Bsay:≢B
  • kapsam:, ⊂Bbölüm:A⊂B
  • düzleştirmek:∊B

Tryapl.org'da, ⊢1bu büyük oluşturulmuş şeyin argümanı olan izlemeyi kaldırırsanız, nasıl ayrıştırıldığına dair bir diyagram görebilirsiniz:

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

0

J 66 (G / Ç ile)

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

ES olmadan puan 43:

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

Kendinize poz vermek için komik bir soru, ilk 9 ne zaman ortaya çıkıyor?


Asla tamsayı dizi sayfasına bakmayın.
PyRulez

Tamam anladım. Öyleyse ... neden?
jpjacobs


Bir dizideki giriş ile X yerine IO sürümü güzel hile ve sonra eval çağırıyor!
Omar

Komik soruya gelince: sadece 1, 2 ve 3'ünüz olduğu açık değil mi? Yani 4 veya daha yüksek bir değer elde etmek için, önceki adımda arka arkaya dört eşit basamağa ihtiyacınız olacak, xaaaay, ama daha önce "x a's, a a's" veya "a a's, a a's".
Omar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.