Anagramlama Kodu


10

Bunu tekrar deneyelim.

Bu yarışmanın amacı, birbirlerinin anagramları olan iki kod parçası yapmaktır (ikisi aynı baytları farklı bir sırayla içermelidir) ve aşağıdaki görevleri yerine getirirler:

  • Girilen bir sayının mutlu ya da asal olup olmadığını test etmeli ve sayı ya 7ikiyse çıktı almalıdır (örneğin, çıktı almalı happy primeve 4çıktı almalıdır sad non-prime).

  • Diğeri kod boyutunu bayt cinsinden bir sözcük olarak vermelidir (60 baytlık bir program çıktı sixty, 39 baytlık bir program çıktı thirty-nine).

Kurallarda herhangi bir açıklamaya ihtiyaç duyulursa, bana söylemekten çekinmeyin.

Bu bir kod golf yarışması, bu yüzden en kısa program kazanır!


Yapmaktan biri nedir önler /*program1*/program2ve sonra program1/*program2*/? Bence yorumlara izin vermemelisin.
William Barbosa

@WilliamBarbosa Neden? Bu en uygun çözüm olmayacak.
Martin Ender

Ama aynı zamanda bazı parçaları paylaşabilir ve başkalarını paylaşamazsınız, bu da çok daha kolay hale getirir
gururlu haskeller

1
@proudhaskeller Yorumların yasaklanması bunu çözmez. Karakterleri her zaman dizeler, değişken adları veya kodun başka nedenlerle yürütülmeyen bölümlerine doldurabilirsiniz.
Martin Ender

1
FWIW, ben yok Kendi gönderme silinmiş olması gerektiğini düşünüyorum. OP ya da değil, ilginç bir cevaptı.
Dennis

Yanıtlar:


6

CJam, 80 49 48 karakter

GÜNCELLEME : Hanelerin karelerin toplamını hesaplamak için Dennis'in uygulamasından esinlenerek, daha kısa bir sürüm

Mutlu / Sad Başbakan / Başbakan Olmayan:

ri:T{Ab2f#:+}G*X="happy""sad"?STmp4*"non-prime">

Nasıl çalışır:

ri:T                                "Read input as integer and store it in T"
    {       }G*                     "Run this code block 16 times"
     Ab                             "Convert the number into base 10"
       2f#                          "Calculate square of each digit"
          :+                        "Sum all the squared digits and put the sum on stack"
X=                                  "Compare the sum after 16th iteration to 1"
  "happy""sad"?                     "If sum is 1, put `happy` to stack, otherwise `sad`"
               ST                   "Put space on stack then put the value of T on stack"
                 mp4*               "Put 4 to stack if input is prime, otherwise 0"
                     "non-prime">   "Put `non-prime` to stack and slice out first four characters if the input number is prime"

kırk sekiz

""A"forTy-eiGhT""ri:{b2#:+}*X=appsadSmp4*nnpm>"?

Bu nasıl çalışır:

""                                  "Push empty string to stack"
  A                                 "Push 10 to stack"
   "forTy-eiGhT"                    "Push `forTy-eiGhT` to stack"
                "ri:....pm>"        "Push this string to stack too"
                            ?       "Keep `forTy-eiGhT` on stack and pop the other string"

Çevrimiçi deneyin

İlk program numarayı STDIN'den okur


Orijinal 80 karakterli çözümüm

Mutlu / Sad Başbakan / Başbakan Olmayan:

r:N{1/~]{i_*T+:T;}/T_s\1=:H!X):XK<&0:T;}g;H"happy""sad"?SNimp"prime"_"non-"\+?:Y

seksen

"eigHTY""r:N{1/~]{i_*T+:T}/_s\1=:H!X):XK<&0:T}happysad?SNmp";"prim_";"non-\?:+";

4

CJam, 50 49 bayt

Mutluluk ve öncelik testi

li_{Ab2f#:+}30*(T="happy""sad"?S@mp4*"non-prime">

STDIN'den bir sayı okur. Her iki test de yalnızca 64 bit tamsayılar için çalışır.

Çevrimiçi deneyin.

Kendi uzunluğu

A"forTy-nine""l_{b2#:+}30*(=happsadS@mp4*pim>"?""

Dokuz için yazdırır .


31 baytlık geliştirme için +1 ve "dokuzluk" için.
Josiah Winslow

3

Golf Yazıları - 81

Bu program, bir sayının mutlu ve / veya asal olup olmadığını test eder.

~.:a;0.{).a\%!@+\}a*;2="""non-"if"prime"@ {`0\{48-.*+}/}9*("sad ""happy "if@@#get

Son programın bir anagramı olan bu program, "seksen bir" çıktı (bir kelime olarak bayt boyutu).

;"eighty-one"#   !""""""""%()***++-..../002489:;=@@@@\\\`aaaaadffiimnppprs{{{}}}~

Bu bir örnek olmalıdır.


2
Hm, GolfScript'te bir kod golf mücadelesi için referans bir uygulama sağlamak en iyi fikir olmayabilir. Bunun yenilmesi oldukça zor ve dolayısıyla katılımcılar için biraz cesaret kırıcı olduğuna inanıyorum.
Martin Ender

İnsanların soruyu yazdığınızı fark etmediklerini ve sizi desteklediğini görüyorum ... Martin'e tamamen katılıyorum.
gururlu haskeller

@proudhaskeller Kendi kendine cevap vermede kesinlikle yanlış bir şey yoktur.
Justin

Kendime cevap vermede veya kodda yorum yapmakta yanlış bir şey olmadığını söylüyorum.
Josiah Winslow

2
@JosiahWinslow Orada olup onunla yanlış bir şey. Sadece söylüyorum, hemen çok iyi bir çözüm gönderirseniz ilginç uzun cevapları kaçırıyor olabilirsiniz.
Martin Ender

1

J - 87 karakter

J bu konuda naif bir girişim Standart kütüphanenin hiçbir faydası yok, ama ben bunu kullanarak herhangi bir kısalır şüpheliyim.

((sad`happy{~1 e.(,[:+/@:*:,.&.":@{:)^:(1-{:e.}:)^:_);@,' ';'gtv]non-prime'}.~4+4*1&p:)
'((ad`app{~1 .(,[:+/@:*:,.&.":@{:)^:(1-{:.}:)^:_);@, ;onprm}.~4+4*1&p:)']'eighty-seven'
('(ad`app{~1 .(,[:+/@:*:,.&.:@{:)^:(1-{:.}:)^:);@, ;onprm}.~4+4*1&p:']'eighty-seven'"_)

Üstteki çizgi, bir tamsayıyı alıp mutluluğunu ve önceliğini çıktı dizesi olarak teşhis eden bir fiildir. İkinci satır, dizeyi döndüren bir ifadedir eighty-seven, üçüncüsü ise bunu yapan sabit bir işlevdir. Her ikisini de dahil ettim çünkü ikisi de mümkün oldu ve programın aksine fonksiyon cevaplarında iktidarın ne olacağını bilmediğim için ve J'nin argüman olmayan fonksiyonlar gibi bir şeyi yok - sadece bir fonksiyon kukla argüman.

Mutlulukları kontrol eden karakterlerin çoğunu kaybediyoruz. (,[:+/@:*:,.&.":@{:)bir sayının basamaklarının karelerini toplayan ana gövdedir ve (1-{:e.}:)bu sayının henüz oluşup oluşmadığının testidir. sad`happy{~1 e.bunu bir kelime sonucuna dönüştürür ve bunu dizenin önüne non-primeekleriz, sayı gerçekten asaliyse potansiyel olarak dört karakteri keseriz.

Anagramda, 'eighty-seven'görmezden geldiğimiz bir dizede olmayan tüm bitleri gizliyoruz . J'nin yeniden kullanmak için daha fazla harfi olsaydı daha iyisini yapabilirdim, ama öyle değil, o kadar iyi.


Bu iyi bir çözüm.
Josiah Winslow
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.