Çizgiyi deldiğiniz koda koyun ve hepsini sallayın


10

Bir programlama dili kullanarak, her biri ayrı ayrı çalıştırıldığında Harry Nilsson'un 1972 şarkısı olan " Coconut " a ilk ayetin farklı bir satırını veren 5 tek satırlı program yazın :

Kardeş o su parasına aldım, bir hindistan cevizi satın
o bir kireç için ödenen Kız kardeşi başka biri vardı
O Hindistan cevizi kireç koymak, o ikisi kadar onları içti
O Hindistan cevizi kireç koymak, o kadar ikisini de içti
She limonu hindistancevizi içine koy, ikisini de içti

( tam şarkı sözleri )

Son 3 satır aynı şarkı sözlerine sahiptir, bu nedenle son 3 programınız da olabilir.

5 faktöriyel veya 120 yol vardır, bu 5 tek satırlı programlar tek bir 5 satırlı programda satır başına bir düzenlenebilir. Tek satırlı programlarınızı, bu 120 kombinasyondan mümkün olduğu kadar çok sayıda için, 5 satırlı program tam olarak yukarıda göründüğü gibi tüm ayeti uygun sırayla çıkartacak şekilde optimize etmelisiniz .

Misal

En basit cevap 5 tek satırlı baskı ifadesine sahip olacak, son 3 aynı:

print('Brother bought a coconut, he bought it for a dime')
print('His sister had another one, she paid it for a lime')
print('She put the lime in the coconut, she drank them both up')
print('She put the lime in the coconut, she drank them both up')
print('She put the lime in the coconut, she drank them both up')

İlk iki tekli astar doğru yerlerinde olduğu sürece, 5 hatlı programların çıktısı doğru sırada olacak şekilde ayet olacaktır. 120 olası düzenlemeden sadece 6 tanesi bunu gerçekleştirmektedir.

puanlama

Tüm 120 vakadan en fazla çalışma vakası ile yapılan başvuru kazanır. Kravat kırıcı, en düşük kümülatif bayt sayısı olan program kümesine gider (yeni satırlar sayılmaz). Örnekte 309 bayt vardır.

ayrıntılar

  • Programlarınız kendi kaynak kodlarını okuyamayabilir. Ayrıca diğer harici dosyaları okumalı veya ağ bağlantısı gerektirmemelidir.

  • Çıkış stdout veya en yakın alternatif. İstediğiniz adla bir dosyaya da çıktı verebilirsiniz.

  • "Tek satırlı programlar", satır sonlandırıcılar dışında herhangi bir karakter içeren dizelerdir (muhtemelen yeni satırlar için endişelenmeniz gerekir).

  • Tekli gömlekleri 5 gömlekli olarak oluştururken, her bir bitişik tekli gömlek çifti arasına bir tane olmak üzere tam olarak 4 yeni satır eklemelisiniz. İsteğe bağlı olarak sondaki bir yeni satır ekleyebilirsiniz.


"Her biri farklı bir satır çıkaran 5 program yaz ..." bu imkansız değil mi?
feersum

@feersum Çizgiler farklı. Üçü aynı metne sahip.
Calvin'in Hobileri

Her biri bir mainyöntem içeren 5 sınıf içeren bir Java dosyam varsa ne olur ? O zaman programı çalıştırırken hangisi çalıştırılmalıdır?
feersum

@feersum Peki derleyiciniz ne yapıyor? Aynı dosyada birden çok sınıf olduğunda hem Java'nın ne yaptığından emin değilim main.
Calvin'in Hobileri

2
Bunu hatırlamamın yolu, "kireci kola koydukları" bir Coca-Cola reklamı ...
Joe Z.

Yanıtlar:


9

CJam, 120 geçerli permütasyon, 334 299 290 bayt

"She put the lime in the coconut, she drank them both up"N+
"Brother bought a coconut, he bought it for a dime"N+]$~
"She put the lime in the coconut, she drank them both up"N+
"His sister had another one, she paid it for a lime"N+]$~
"She put the lime in the coconut, she drank them both up"N+

Oldukça basit bir mantık:

  • Şarkının her satırını 5 programın her birine koyun
  • Her şeyi bir dizide yığına sar
  • Diziyi sıralama
  • Bir sonraki programın aynı mantığı kullanabilmesi için diziyi açın
  • Her adımda, bir dizideki kısmi şarkı sözlerimiz vardır. Neyse ki, diziyi sıralamak şarkı sözlerinin doğru sırasını verir.

GÜNCELLEME : Şarkının son satırlarında 3 benzer ve görünmesinden sonra sar-sırala-paketini aç döngüsüne ihtiyacınız olmadığı ortaya çıkıyor. Neden bu belirgin değilse açıklayabilirim :)


8

Başlangıç , 120 permütasyon, 2045 2035 bayt

9-9-9-9-9-9-9-9-9-5-97+993++09-9-9-9-9-9-9-1-8992++96+209-9-9-9-9-9-9-1-94+58992++09-9-9-9-9-9-9-1-92+95+199+409-9-9-9-9-9-9-1-58991++09-9-9-9-9-9-9-1-09-9-9-9-9-7-992++993++95+96+396+309-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-95+909-9-9-9-9-9-9-1-594+993+09-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-992++993++97+09-9-9-9-9-9-9-1-5809-4-                                                                          (9+9+9+9+9+9+9+9+9+9+6+!)
9-9-9-9-9-9-9-9-9-5-594+9409-9-9-9-9-9-9-1-109-9-9-9-9-9-9-1-99+96+609-9-9-9-9-9-9-1-992++909-9-9-9-9-9-9-1-992++87993++96+209-9-9-9-9-9-9-1-5809-9-9-9-9-9-9-1-09-9-9-9-9-7-992++993++95+96+396+309-9-9-9-9-9-9-1-109-9-9-9-9-9-9-1-992++87993++96+209-9-9-9-9-9-9-1-99+58992++96+99+09-9-9-3-                                             (9+9+9+9+9+9+9+9+9+9+6+!)
9-9-9-9-9-9-9-9-9-5-97+993++09-9-9-9-9-9-9-1-8992++96+209-9-9-9-9-9-9-1-94+58992++09-9-9-9-9-9-9-1-92+95+199+409-9-9-9-9-9-9-1-58991++09-9-9-9-9-9-9-1-09-9-9-9-9-7-992++993++95+96+396+309-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-95+909-9-9-9-9-9-9-1-594+993+09-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-992++993++97+09-9-9-9-9-9-9-1-5809-4-                                                 (9+9+9+9+9+9+9+9+9+9+6+!)
9-9-9-9-9-9-9-9-9-5-594+993+09-9-9-9-9-9-9-1-109-9-9-9-9-9-9-1-99+96+609-9-9-9-9-9-9-1-992++909-9-9-9-9-9-9-1-49197+09-9-9-9-9-9-9-1-58991++09-9-9-9-9-9-9-1-09-9-9-9-9-7-595+96+09-9-9-9-9-9-9-1-99+58992++96+95+109-9-9-9-9-9-9-1-41809-9-9-9-9-9-9-1-99+5992++991++9991++09-9-9-9-9-9-9-1-991++909-9-6-                                                           (9+9+9+9+9+9+9+9+9+9+6+!)
9-9-9-9-9-9-9-9-9-5-97+993++09-9-9-9-9-9-9-1-8992++96+209-9-9-9-9-9-9-1-94+58992++09-9-9-9-9-9-9-1-92+95+199+409-9-9-9-9-9-9-1-58991++09-9-9-9-9-9-9-1-09-9-9-9-9-7-992++993++95+96+396+309-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-95+909-9-9-9-9-9-9-1-594+993+09-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-992++993++97+09-9-9-9-9-9-9-1-5809-4-                                                                                                   (9+9+9+9+9+9+9+9+9+9+6+!)

Bu sonuçta beni Prelude ve CJam'ın bir çocuğa ihtiyaçları olduğuna ikna etti. Prelude'un çok sınırlı talimat seti olmasaydı, CJam'ı bile yenmezse, bu sunum aslında çok rekabetçi olurdu.

Temel fikir şudur:

"push line 4"               print
"push line 1"print
"push line 3"          print
"push line 2"     print
"push line 5"                    print

Prelude'da, her satır kendi yığını olan kendi “sesidir” ve bu sesler paralel olarak yürütülür. Yani, tam programda, her satır dizeyi ayrı ayrı oluşturur ve sonunda yazdırır. Ancak, baskı ifadelerinin ofsetleri nedeniyle, satırların sırası, çıktının sırası için hiç önemli değildir, çünkü yürütme yukarıdan aşağıya değil, soldan sağa doğrudur.

Şimdi, çizgiler neden bu kadar uzun? Prelude, sayıları yalnızca yığınında depolar. Ayrıca, tek seferde yalnızca tek basamaklı bir sayıyı itebilir, böylece toplama ve çıkarma işleminden daha büyük sayılar oluşturulmalıdır (ya çarpma ya da başka bir aritmetik yoktur). Kodun en büyük kısmı doğru karakter kodlarını hesaplamak ve itmektir. Bunu biraz kısaltmak için onları telafi ediyorum 96. Sonunda, yazdırmak için, yığın boşalana kadar (yani a 0ile karşılaşıldığında) döngü yapıyorum , her sayıya 96 ekleyin ve yazdırın.

Sondan ilk karaktere yazdırıldığından, dizelerin ters itildiğini unutmayın.

Bu varsayar Python yorumlayıcısı ile NUMERIC_OUTPUT = False(ki ne kadar Spec tanımlar G / Ç).

Dize yapısını oluşturmak için aşağıdaki CJam kodunu kullandım:

"Brother bought a coconut, he bought it for a dime
"W%{i96-_0<{zLa*9/:,'-*'-+0\+}{La*9/:,_,'+*W<}?}%

Son olarak, sadece eğlence için, eğer Prelude bir dizgi kavramına sahip olsaydı, bunun neden kısa olacağını düşünüyorum:

"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"N+!
"emid a rof ti thguob eh ,tunococ a thguob rehtorB"N+!
"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"N+!
"emil a rof ti diap ehs ,eno rehtona dah retsis siH"N+!
"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"N+!

Şimdi baskı ifadeleri !zaten doğru sırada, bu yüzden onları dengelemem bile gerekmiyor. Sanırım bunu bir süre uygulamaya başlayacağım.


7

Ruby, 120 geçerli permütasyon, 430 bayt

$*[1]='His sister had another one, she paid it for a lime';a||=at_exit{puts($*-[p])}
$*[0]='Brother bought a coconut, he bought it for a dime';a||=at_exit{puts($*)}
$*[2]='She put the lime in the coconut, she drank them both up';a||=at_exit{puts($*-[p])}
$*[3]='She put the lime in the coconut, she drank them both up';a||=at_exit{puts($*-[p])}
$*[4]='She put the lime in the coconut, she drank them both up';a||=at_exit{puts($*-[p])}

Herhangi bir sırayla veya ayrı ayrı çalışır. Her satır global durumu değiştirir, ardından kanca ayarlanmamışsa, programın sonunda yürütülecek bir kanca ayarlar.


Soru "5 tek hatlı program" diyor. Bu, her satırın ayrı bir programda olması gerektiği anlamına gelmez mi? Hepsi bir arada değil mi?
bacchusbeale

1
Sadece biçimlendirme meselesi. Her satır kendi programı olarak çalışır.
histokrat

6

> <> , 120 permütasyon, 703 bayt

<    /a"emid a rof ti thguob eh ,tunococ a thguob rehtorB"0a.#.!50padpacpabpaapa9pa8pa7p97p87p77p67p57p95p84p73p62p51"/////\\\\\>l0=?;o"
<   / a"emil a rof ti diap ehs ,eno rehtona dah retsis siH"09.#.!50padpacpabpaapa9pa8pa7p97p87p77p67p57p95p84p73p62p51"/////\\\\\>l0=?;o"
<  /  a"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"08.#.!50padpacpabpaapa9pa8pa7p97p87p77p67p57p95p84p73p62p51"/////\\\\\>l0=?;o"
< /   a"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"07.#.!50padpacpabpaapa9pa8pa7p97p87p77p67p57p95p84p73p62p51"/////\\\\\>l0=?;o"
</    a"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"06.#.!50padpacpabpaapa9pa8pa7p97p87p77p67p57p95p84p73p62p51"/////\\\\\>l0=?;o"

Tek satırlı kısıtlama 2D bir dil için oldukça zordu, bu yüzden .ışınlanma talimatından en iyi şekilde yararlanmanın bir yolunu bulmak zorundaydım .

Birincisi <program akışını sola yapar, etrafına sarar ve yürütür

"o;?=0l>\\\\\\/////"15p26p37p48p59p75p76p77p78p79p7ap8ap9apaapbapcapdap

Bu, ptahta şöyle görünene kadar karakter yerleştiren bir dizi (put) talimattır:

<    /<lyrics1>0a.#.!50<blah>
<   / <lyrics2>09.#.!50<blah>
<  /  <lyrics3>08.#.!50<blah>
< /   <lyrics4>07.#.!50<blah>
</    <lyrics5>06.#.!50<blah>
 /     \
  /    \
   /   \
    /  \
     / \
       >l0=?;o

#.!50Aşağıda bu kanalına 5 atlama önce, sonra tekrar sağa için program akış geri çevirir:

  • /5. sıradaki aynayı takiben, yığına itilen şarkı sözleri 5 bulunur. Sonra 6. satıra ışınlanıyoruz.
  • /6 satırındaki aynanın ardından yığına itilen şarkı sözlerini 4 bulur. Daha sonra 7. hatta ışınlanıyoruz.
  • Bölüm /7 -

Bu, sözleri 1'e basana kadar olur, bu noktada satır 10'a ışınlanırız. Bu, tüm yığını boşalana kadar basmak için bir döngüdür.

Programın yalnızca bir satırı varsa, \aynalar her şarkı sözü satırındaki ışınlanmalarla aynı işi yapar.

Program karıştırılmışsa, yukarıdaki açıklama hala geçerlidir, bu nedenle program tüm permütasyonlar için çalışır!

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.