Selam Dünya! NO tekrarı ile


27

Bu soru sorulmadan önce var olan herhangi bir programlama dilinde, Hello world!yeni bir satırın ardından gelen karakterleri çıkaran bir program (işlev değil) yazın . Programınız:

  • birden fazla karakter kullanmamalı (boşluk dahil)
  • sadece ASCII karakterlerini kullanmalı
  • Herhangi bir yerleşik kütüphaneyi kullanmamalı
  • girdi almamalı (kullanıcı, dosya, dosya adı, sistem değişkeni, internet, herhangi bir şey)
  • başka bir şey çıkarmamalı

Kazanan, 14 gün sonra en çok oy alan ve altı kurala bağlı kalan kişidir.

Altıncı kural, H9 +, HQ9 +, HQ9 + B, HQ9 ++, HQ9 + 2D, Merhaba, Merhaba +, Merhaba ++, Hexish, CHIQRSX9 + veya Füg'ü kullanamayacağınızdır. Ayrıca, bu zorluktan daha yeni uygulamalar gerektiren tüm cevaplar, rakipsiz olarak işaretlenmelidir.


Feragatname: Bu soru, Merhaba dünya! sınırlı tekrarlama ile cevapların ortaya çıkması sürecinde bilgisayarınıza veya beyninize zarar vermedi.


Eğer karakter kodlarından kaçıyorsak, "\" karakteri bir kereden fazla kullanılabilir mi?
WallyWest

4
Peki ya piet?
Victor Stafusa

@Victor "yalnızca ASCII karakterlerini kullanmalı"
Timtech

3
Harika bir bilmeceydi ve ben bunu yapmaktan zevk aldım :-).
Konrad Borowski

9
“Sadece ASCII karakterlerini kullanmalı” - ne ejderha kısıtlaması. Bu, ASCII'yi kullanmayan bütün bir dil sınıfını kaldırır.
Timwi

Yanıtlar:


33

Perl 6 (29 28 karakter)

Bu biraz sinir bozucu oldu ama sonunda bu görev için bir program yapmayı başardım. Bu işe yardımcı olduğum için teşekkürler # perl6 topluluğuna teşekkürler. İki saatimi aldı, umarım beğenirsiniz. Çıktı tamamen yeni bir satır dahil olmak üzere spesifikasyonlara bağlıdır.

say
Q[@A`DO world!]~|<HeLhg>

Dört tane ilgi çekici simge var.

  • say

    Bu argüman sonunda yeni bir satır ile çıkarır. Komuttan sonraki yeni satır boşluk değiştirme için gereklidir.

  • Q[@A`DO world!]

    Bu ilk dizedir. Q[]Ham dizgiler içindir ( r""Python'daki gibi ). Bu durumda, herhangi bir sınırlayıcıyı (veya bunlardan bir çiftini) alabilir []. Bu durumda, bunu tırnak işaretleri için kullanıyorum, ham string davranışına ihtiyacım yok.

  • ~|

    Bu, stringwise ( ~) bitwise veya ( |) operatördür.

  • <HeLhg>

    <>boşlukla ayrılmış elemanların listesini alan liste anlamıyla. Bu durumda, bir elemanı vardır ve skaler olarak kullanılır, bir dize verir.


3
Şaşırtıcı! Öğrenmeye başlamalıyım. Bazı Perl 6 sözdizimi! Sizin de yorumunuzla aynı fikirdeyim, kesinlikle eğlenceli bir problemdi!
Dom Hastings

4
Woah ... aklım başımdan
alındı


11

Perl 5.10+: 24 karakter

say+He,YZX^q(567 world!)

Tamam, bence Perl’de olduğu kadar kısa.

Perl 5.10+ özelliğini etkinleştirmek için perl -M5.010(veya yalnızca perl -E) ile çalıştırın say.


Cidden etkilendim! Ben etrafta dolaşmaya çalışırken ll
Dom Hastings

9

Golf Betiği 42 33

Ben de golf oynayabilirim, bazı kodlara ve tüm verilere aynı blokta uymak zorunda kaldığımı düşünerek ikisini sınırlamanın bir yolu olmadığını düşünüyorum. Bunun oldukça kısa bir sonuç olduğunu düşünüyorum. İlk gönderimden farklı olarak, blok kodu artık verilerin tamamen entegre bir parçasıdır, bu nedenle {1yalnızca bloğa başlayıp 1yığına koymakla kalmaz , aynı zamanda Hve benzeri tanımlayan verilerdir . Dizi oluşturma işlemi şimdi boş girdi dizgisini içeriyor; bu, boş dize ile karakter arasında yalnızca bir karakter olduğu için başlangıcı kırpmam gerekmediği anlamına geliyor; bu H, her ikinci karakteri aldığımda o karakterin kesilmesi ve boş string sonunda hiçbir şey çıkmaz.

{1wZ$Qei^Ak 3h-)ulmsogr7}.`*]2%n+

Çevrimiçi demo: http://golfscript.apphb.com/?c=ezF3WiRRZWleQWsgM2gtKXVsbXNvZ3I3fS5gKl0yJW4r

[{1$^(r iFNGDJUHv98oIMgtplbh4m}.`\*]6>2%n+

Bir kod bloğunu tanımlar. Kod bloğunun bir kopyasını yapar ve dizeye dönüştürür. Dizenin üzerinde yineleme yapmak için kod bloğunu kullanır. Her yineleme için kod, önceki karakter değerinin bir kopyasını çıkarır, geçerli karakter değeri ile x veya onu çıkarır ve sonuç 1'i çıkarır. Ardından gelen dizgede ilk 6 karakter kaldırılır ve her ikinci karakter kaldırılır. Sonunda bir satır besleme eklenir.

"r iFNGDJUHv98oIMgtplbh4m" sadece bildirilmemiş iki değişkendir, hiçbir şey yapmazlar, ancak istenen sonucu elde etmek için dikkatlice oluşturulurlar.

Çevrimiçi demo: http://golfscript.apphb.com/?c=W3sxJF4ociBpRk5HREpVSHY5OG9JTWd0cGxiaDRtfS5gXCpdNj4yJW4r



6

Befunge-98 , 34 31 bayt

f"v!dlrow
+c<>a,kb@#*98e':g05-3

Çevrimiçi deneyin!

Yinelenen karakterleri önlemek için epeyce farklı yöntemler kullanır.

İlk olarak, iki "s kullanılmasını önlemek için değişmez dizgiyi kullanırız . Bu "dünya!" Ekler yığına.

İkinci satırda sola dönersek , "Merhaba" fyapmak için ekstraya 9 ekleriz o. g5,0 ( l) hücresindeki karakteri seçtik ve çoğalttık. 'Mektubu almak için kullanılıyor e. ASCII'nin değeri 72'yi almak için 9'u 8'e çarpın H. Daha sonra her şeyi kullanarak yazdırırız ve newline'ı ( ) yeniden kullanmak için ck,yönünü çeviririz .>,a


Çok iyi ama bu zorluk virgül olmadan.
Ørjan Johansen

Oh lol, bu kolaylaştırır ... Teşekkürler @ ØrjanJohansen
Jo King

Sen iki tane var +ve d.
Ørjan Johansen

@ ØrjanJohansen ayy. şimdi düzeltilmeli
Jo King,

3

İksir , 37 bayt

IO.puts~c(He#{[?n-2,108]}\x6f world!)

Çevrimiçi deneyin!

2014'te bu zorluğun yayınlandığında geri döneceğini garanti edemem ve Elixir hala 1.0 öncesiydi (ve dolayısıyla resmi olarak “rekabet edip etmediğini”, ancak sürüm notlarına bakarken, bunun olması gerektiğini düşünüyorum. TAMAM). Her neyse, sonunda Perl dışında geleneksel bir genel dil kullanarak bu işe geçerli bir çözüm bulduğuma sevindim!

Bakış

IO.puts     #Print with trailing newline
~c(...)     #Sigil: charlist with interpolation
He          #Start of literal string...
#{...}      #Interpolated block
[?n-2,108]  #A list of codepoints for 2 'l's
\x6f        #Hex code for 'o'
world!      #...and done!

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.