Kayıp Numaraları Yazdır


16

Lost TV dizisinin büyük bir hayranı olarak, her zaman bölümlerde tekrarlanan sayı dizisinden meraklandım. Bu sayılar:

4,8,15,16,23,42 (A104101)

Herhangi bir programlama dilini kullanarak bu sayıların çıktısını veren bir kod yazın.

puanlama:

  • En kısa cevap kazanır

  • Çıktıda başka rakam veya harf bulunmamalıdır. Ayırıcı olarak başka bir karakter kullanabilirsiniz, hatta ayırıcı bile kullanamazsınız.

  • Aynı sayının rakamlarını ayıramazsınız. 48_15162342 geçerli bir yanıt, ancak değil.481_5162342

  • Siparişe saygı duymalısınız.

  • Kodunuz sekanstan herhangi bir sayı içermiyorsa, puanınızı% 30 azaltın. Bu kural, rakamları ayrı ayrı girmenize izin verir. Örneğin:

    abcde1fg5h
    

    Geçerli bir aday çünkü cevap sayısını içermiyor , sadece rakamlarını içeriyor . Ancak, herhangi bir veya bonusu geçersiz kılacaktır.1548

  • Kod hiç rakam içermiyorsa, puanınızı% 50 azaltın. Gibi diğer karakterler , veya ³ hala bu bonus için geçerlidir.¹²³



2
Belirsiz ilgili: Henüz kayboldun mu?
Dennis

1
Onları bu sırayla yazdırmamız gerekiyor mu?
Titus

6
İleride başvurmak için restricted-sourceburada kullanılabilecek bir etiketimiz var: Çoğu cevap bariz çözümlerden kaçınsa da, rakamların kullanılması tamamen yasak olsaydı, meydan okuma biraz daha ilginç olurdu.
Arnauld

Yanıtlar:


31

Kayıp , 29 27/2 = 13,5 bayt

%?\>>>>>>>>>>
>>\"*"@"

Çevrimiçi deneyin! veya deterministik olduğunu doğrulayın

Kullanılacak doğru dil gibi görünüyordu.

Açıklama:

Kayıp işaretçi başlatan bir 2D dildir yerde giderek, herhangi bir yönde. Bu genellikle işaretçinin bir bölüme erken girip girmediğini birçok kez kontrol eder.

...>>>>>>>>>>  These arrows filter all pointers that appear on the top line
.............  Or going vertically


%............  This flips the flag so that the program can end
.............  This stops premature termination

.?\..........  Clear the stack by skipping if a value popped from the stack is positive
.............  When the stack is empty, the \ directs the pointer down

.............  The \ directs the pointer right
..\"*"..  The string literal pushes all the Lost values to the stack

..\..........  The @ terminates the program if the % flag is switched
>>\........@.  Otherwise it clears the stack and repeats

.............  The quote here is to prevent the pointer getting stuck
............"  This happens when the pointer starts between the other quotes

11

Jöle , 7/2 = 3,5 bayt

“ƲÞIȥ’Ḥ

Sayıları ayırıcı olmadan, yani 4815162342 tamsayısını yazdırır .

Çevrimiçi deneyin!

Nasıl çalışır

“ƲÞIȥ’iki yönlü temel-250 tamsayı değişmezidir.
Ʋ, Þ, IVe ȥ(1-bazlı) endeksleri olan 154 , 21 ,74 , ve171 de tam sayı kodlayan, böylece Jelly kod sayfa2503154+250221+25074+171=2407581171 .

Son olarak, (unhalve) tamsayıyı ikiye katlar ve 22407581171=4815162342 .

Katlama gereklidir, çünkü çıkışın kodlanması doğrudan “¡9)Ƙ[’bir basamak içerir.


9

Neim , 6 5 bayt, 3 2.5 puan

Jσς§A

Açıklama:

J     Push 48
 σ    Push 15
  ς   Push 16
   §  Push 23
    A Push 42
      Implicitly join the contents 
      of the stack together and print

Çevrimiçi deneyin!


6

05AB1E , skor: 10 9 7 bayt / 2 = 3,5

•‘o]Ê•·

Çevrimiçi deneyin.

Veya 7 bayt alternatifi :

•’µ[%•R

Çevrimiçi deneyin.

Her ikisi de tamsayıyı çıktılar 4815162342.

Açıklama:

•‘o]Ê•     # Compressed integer 2407581171
      ·    # Doubled

•’µ[%•     # Compressed integer 2432615184
      R    # Reversed

Neden •‘o]Ê•olduğunu 2407581171ve •’µ[%•olduğunu anlamak için bu 05AB1E ucuma bakın ( Büyük tamsayılar nasıl sıkıştırılır? Bölümü )2432615184 .


Eski 9 bayt listesini çıkış cevaplarsanız [4,8,15,16,23,42]:

•ΓƒÇ²•т;в

@Emigna sayesinde -1 bayt (ve dolayısıyla -0,5 puan) .

Diğer 05AB1E yanıtından daha uzun , ancak bu [4,8,15,16,23,42]tamsayı yerine liste çıktısı verir 4815162342.

Çevrimiçi deneyin.

Açıklama:

•ΓƒÇ²•       # Compressed integer 1301916192
      т;     # Integer 50 (100 halved)
        в    # Convert the first integer to Base-50 (arbitrary): [4,8,15,16,23,42]

Neden •ΓƒÇ²•olduğunu 1301916192ve •ΓƒÇ²•50вolduğunu anlamak için bu 05AB1E benim ucu ( büyük tamsayı nasıl sıkıştırılır ? Ve tamsayı listeleri nasıl sıkıştırılır? ) Bölümlerine bakın[4,8,15,16,23,42] .


1
Senaryo sonrası numaralar bonus için iyi olduğundan 4.5•ΓƒÇ²•т;в için olabilir .
Emigna

@Emigna Ah, güzel! Teşekkürler.
Kevin Cruijssen

6

JavaScript (ES7), 34/2 = 17 bayt

_=>eval(atob`NjUwNTgxMDErNDEqKjY`)

Çevrimiçi deneyin!

Bu "65058101+41**6", base-64'te kodlandıktan sonra herhangi bir rakam içermeyen ifadenin kodunu çözer ve değerlendirir .

65058101+416=65058101+4750104241=4815162342


JavaScript (ES6), 13 bayt

Sıkıcı bariz çözüm.

_=>4815162342

Çevrimiçi deneyin!


6

Python 3 , 25 bayt, 12.5 puan

print(*map(ord,'ዏٗ*'))

Çevrimiçi deneyin!

By (髒, ⿰ 馬 葬), 𧨦 (謚, ⿰ 言 ⿱⿵ 八一 皿) maliyeti 4 bayt, ancak U + 0657 sadece 2 bayt maliyeti ...


Python 3 , 29 bayt, 14.5 puan

print(ord('𩦦')*ord('湡'))

Çevrimiçi deneyin!

Dirty "kirli" anlamına gelen var değişken karakteridir. 湡 bir nehrin adıdır. Ve bildiğim gibi bu soru ile ilgili hiçbir şey yok.


Ayırıcı kurallarını sordum ve 4815 162342geçerli kılan herhangi bir ayırıcıyı kullanabiliriz . Böylece print(*map(ord,'ዏ𧨦'))1,5 puan kazandırır :) ( print(*map(ord,'밗'))2 puan kazandırır ancak geçersiz olarak belirtilir).
Jonathan Allan


4

Java 8, skor: 12 11.9 (17 baytın% 70'i)

v->767*6277917L+3

@RickHitchcock sayesinde -0.1 puanı .

Çevrimiçi deneyin.

Açıklama:

v->               // Method with empty unused parameter and long return-type
  767             //  767
     *6277917L    //  multiplied by 6277917 (as long)
              +3  //  And then 3 is added

Puanlı eski cevap: 12 (24 baytın% 50'si):

v->(long)''*'Ⓥ'*'䧶'

Yazdırılamaz bir karakter içeriyor 0x1B.

Çevrimiçi deneyin.

Açıklama:

v->                   // Method with empty unused parameter and long return-type
  (long)              //  Cast the character (and therefore the result) to a long
        ''            //  27
           *'Ⓥ'       //  Multiplied by 9419
                *'䧶'  //  Multiplied by 18934

Java'da karakterler, unicode değerlerini tutan tam sayılara otomatik olarak kutulandırılabilir. Ne yazık ki, karakterler için desteklenen maksimum unicode olduğunu 65,535ben çarpın sadece iki karakter kullanın (beklenen bölmek büyük iki sayı beri edemez, böylece 4,815,162,342vardır 56,802ve 84,771nerede, 84,771ne yazık ki üst sınırı aşıyor 65,535.
Buna ek olarak, maksimum boyutu beri int32 2 -1 ( 2,147,483,647) ve sonuç 4,815,162,342bundan daha büyükse, long64 2 -1 ( 9,223,372,036,854,775,807) ' e kadar taşıyabilecek açık bir yayın gereklidir.


Sıkıcı cevap, hiçbir bonus olmadan 14 bayt olurdu :

v->4815162341L

Çevrimiçi deneyin.


1
Bunu beğendim. Java olduğu için oldukça kısa :)
Emigna

@Emigna Teşekkürler. Oyuncuyu gerektirmesi çok kötü longve çok büyük unicode karakterleri desteklemiyor. Bahsedilen bu iki kısıtlama olmasaydı, sadece v->'𩦦'*'湡'(15 bayt, skor 7.5) yeterli olurdu. Ama yine de çok kısa. :) Her ne kadar Java'nın çok fazla olsa da, kod golfü (duhh ..) açısından birçok zayıflığı olsa da, rakamları kullanmamıza izin vermediğimiz için karakterlerle hesaplamak onun güçlü yanlarından biridir. Benim bu benzer cevabımda da oldukça faydalı oldu .
Kevin Cruijssen

1
11,9 bayt: v->767*6277917L+3
Rick Hitchcock

3
@RickHitchcock 0,1 bayt tasarruf gördüğümüz her gün değil. ;)
Arnauld

@RickHitchcock Teşekkürler! Ve Arnauld'un yukarıdaki yorumuna katılıyorum . : D
Kevin Cruijssen

4

R, 18x0.7 = 12.6 puan

cat(9*2*267509019)

Oldukça kendi kendini açıklayıcı, sadece söz konusu rakamlardan kaçınarak bazı aritmetik yapıyor.


4

7 , 10 bayt, 27 karakter

115160723426754314105574033

Çevrimiçi deneyin!

Bu programın disk üzerinde paketlenmiş temsili ( xxdformat):

00000000: 269c 3a71 6f63 308b 7c0d                 &.:qoc0.|.

açıklama

Bu sayı dizisini daha önce, sayıları düzenli aralıklarla yazdırmak ve çok eski bir dil kullanmayı gerektirerek ilginç hale getirmek için Otomatik Tasarruf Dünyasında gördük. Daha yeni diller, bu zorluğu ilginç kılan kendi bükülmelerine sahip olabilir.(Evet, bu paragraf ve aslında bu cevabı yazmaya başlamamın nedeni, ilgili tüm zorlukların kenar çubuğunda birlikte görünmesini sağlamanın etkili bir yoludur; normalde insanlar yorum kullanarak bunu yaparlar, ancak yeterli temsilcim yok .)

Unutulmaması gereken ilk şey, 7'nin tamamen rakamlardan oluşmasıdır, bu yüzden burada bonusların gitmesi olası değildir (programı bir sekizli dizisi olarak görüyorsanız, hiçbiri orijinal sayıların ASCII temsillerine karşılık gelmez) , bu nedenle bonusu talep edebilirsiniz). Bir sonraki nokta, 7'nin belirli bir veri parçası üretmesi muhtemel komut dizisini yeniden oluşturma komutlarına sahip olmasıdır; Kayıp sayıları yorumlayabilir miyiz4815162342 7 programın bir bölümü olarak ?

Cevap "tam olarak değil". En sorunlu kısmı ikinci sayıdır 8. 7 program sekizli olarak yazılmıştır; 8 gibi bir sayı yoktur. Bu nedenle dizenin en başından farklı yazdırılması gerekecektir.

Bu nedenle programın temeli 7 "Merhaba dünya" programına dayanmaktadır:

5431410557403
543141055          string literal
         7         separate data from code
          4        rearrange stack: {program's source}, empty element, {literal}
           0       escape {the literal}, appending it to {the empty element}
            3      output {the escaped literal}, pop {the program's source}

kaçan değişmez alan aşağıdaki gibi yorumlanan alana özgü bir dilde olmalıdır:

5                  output format: US-TTY using pairs of digits in the string
 43                select character set: digits and common symbols
   14              "4"
     10            "8"
       55          forget the set output format

Bundan sonra 3, kalan yığın elemanını çıktılayan (ve kalan yığın yığınından dolayı çıkış yapan) bir ekstra gelir . Bu öğe programın başında belirtilir ve eşleşmeyen 6(bir kapanış parantezi gibi çalışır) önlemek için doğrudan veri olarak yazmak yerine kodu kullanarak oluştururuz. ( 7Programın başında, burada alakalı olan iki zımni karakter bulunduğunu unutmayın ):

{77}115160723426
 7                 empty stack element
  7 11516          append "1151"
         0         append "6"
          723246   append "2324"

Bu, aşağıdaki değişmez değeri üretir:

115162324
1                  set output format: literally as octal
 15162324          "15162324"

yazdırılır.


Bazı oldukça iyi cevaplar göndermesine rağmen, itibarınız olmadığı garip geliyor. Sadece topluluk yanıtları göndermenin ardındaki nedeninizi okudum ve sizi bu konuda tamamen destekliyorum, ancak yorum yapamamak bazen sinir bozucu olmalı:(
Jo King

@JoKing: Aslında bu soruya bir cevap göndermem için ilham verdi ve beklediğimden çok daha ilginç olduğu ortaya çıktı. Sanırım bu benim hipotezim için daha fazla kanıt, eğer şöhret aramıyorsanız, katkılarınız site için aksi halde daha faydalı olur. (Aslında, 11 üne kalıcı olarak sıkışmaktan duyduğum en büyük hayal kırıklığı
Meta'da düzenlemeler öneremem


3

MASM 8088 Montaj kaynağı, (93 bayt -% 50) = 46,5 bayt

Kaynakta sayı veya sıra kullanma:

MOV AH,'P'-'G'
LEA DX,L
INT '!'
RET
T EQU '-'-'+'
L DW 'ph'/T,'jb'/T,'lb'/T,'fd'/T,'dh'/T,'$'

Çıktı:

A>LOST.COM
4815162342

2

Kömür , 13 bayt / 2 = 6.5

IETPIHA.⁻⁸⁸℅ι

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Dizenin ASCII kodlarını TPIHA.88'den çıkararak dizeye döküm yaparak çalışır.


2

Aheui (esotop) , 45 bayt (15 karakter) * 0.5 = 22.5 puan

반밤밪박밭빠따받발따밣뱣히망어

Çevrimiçi deneyin!


Açıklama:

Ayrıca bakınız; Aheui Referansı ( İngilizce )

Aheui program starts with default stack '아'(or none)

반: push 2, move cursor right by 1(→).
밤: push 4, →
밪: push 3, →
박: push 2, →
밭: push 4, →
빠: dup, →
따: pop 2, push mul result(16).
받: push 3, →
발: push 5, →
따: pop 2, push mul result(15).
밣: push 8, →
뱣: push 4, move cursor right by 2(→→).
히: end.
망: pop 1, print, → (if stack is empty, move cursor left by 1.)
어: move cursor left by 1(←).

Yığın (veya kuyruk) boşsa ㅁ (yazdırma talimatı) imleci ters yönde hareket ettirdiğine dikkat edin.




2

naz , 46 bayt, puan 32.2

2a2a1o2m1o7s1o5m1o2s2s1o6m1o2s2s1o1a1o1a1o2s1o

Her basamağı 4815162342teker teker çıktılar .


1

JavaScript, 143 bayt (nasıl gol atacağından emin değilim)

(g=`${2*2}`)=>g.repeat(6).replace(/(.)/g,(m,p,i,k='')=>
  (k=m*[g-3,g-2,g,g,+g+2,g*3-1][i]
  ,RegExp(`${g-2}|${g}`).test(i)?k-1:i==+g+1?k-(g/2):k))

Çevrimiçi deneyin!

Altı 4' ile başlayın , çarpın, toplayın, çıkartın, çıkartın, 4çıktıyı elde edin.


2
Tamam, bonusu almaya çalışıyordunuz, ancak bu boyuttaki bir kodla telafi etmedi. Neden sadece '4815162342' değil?
Eduardo Hoefel

@EduardoHoefel "puan" veya "bonus" sistemi toplamak değil, bonus almaya çalışmadım, sadece çıkışta gerekli sayıların hiçbirini kullanmaya çalıştım. Kod, sayıların hiçbirini kodlamadan sayıları çıkarır. Sayı 4toplama, çıkarma, çarpma ve sayısı indeksi ile, 4bir dizi (ya da dizisi) içinde gerekli numaraları elde etmek için kullanılabilir.
guest271314

skorunuz 143*0.7=100.1
Jo King

1

PHP, 35/2 = 17,5

<?=zzzzzzzzzzzzzzz^NVBVKOVKLVHIVNH;

dijital bir yaklaşım: 40 * .7 = 28

<?=2+2,_,5+3,_,17-2,_,17-1,_,17+6,_,7*6;

rakam yok, karakter dizisi yok: 68/2 = 34

<?=$p++,!$p++,$p+=$p,_,$p+=$p,_,~-$q=$p+$p,_,$q,_,--$p+$q,_,$p*~-$p;

Onları çevrimiçi deneyin .


1
Veya sadece 14 bayt <?=4815162342;
Jo King

1
OP, sınırlayıcıları yok edip edemeyeceğimize cevap vermedi; ama evet. Neden sadece 10 bayt: 4815162342. Veya <?=~+ 10 yazdırılamaz -> 15/2 = 7.5
Titus

1

JavaScript (SpiderMonkey), 67 bayt / 2 = 33,5 60 bayt / 2 = 30 58 bayt / 2 = 29 48 bayt / 2 = 24

-7 bayt / 3.5 , -2 bayt / 1JoKing izniyle, -10 bayt / 5 izniyle @tsh

print(a=-~-~-~-~[],a+=a,b=a+~-a,a+a,a+b,--b+b+b)

Çevrimiçi deneyin!


1
print(a=-~-~-~-~[],a+=a,b=a+~-a,a+a,a+b,--b+b+b)
tsh

2
Veya sadece print(4815162342)17 bayt için
Jo King



1

Boşluk , skor: 49 41 bayt / 2 = 20,5

[S S S T    S S S T T   T   T   T   S S S S S S S T T   S S S T S T T   T   T   T   S S T   T   S N
_Push_4815162342][T N
S T _Print_number]

Harfler S(boşluk), T(sekme) ve N(yeni satır) yalnızca vurgulama olarak eklendi.
[..._some_action]yalnızca açıklama olarak eklendi.

Çevrimiçi deneyin (yalnızca ham alanlar, sekmeler ve yeni satırlarla).

Sözde kod:

Integer i = 4815162342
Print i as number to STDOUT

Açıklama:

Boşlukta, bir sayı aşağıdaki gibi itilir:

  • S: Yığın Manipülasyonunu Etkinleştir
  • S: İtme sayısı
  • S/ T: Sırasıyla pozitif / negatif
  • Bazıları T/ Sardından tekli N: İkili olarak ondalık, burada T1 ve S0

Bundan sonra sadece aşağıdakilerle yazdırılır TNST:

  • TN: G / Ç'yi etkinleştir
  • S: Yığının üstünü çıktılar
  • T: Sayı olarak

Sadece sayının kendisini fazladan çarpma ve basmalı tamsayı yönergelerine sahip olmaktan daha mı uzun?
Jo King

@JoKing Genellikle vii5ard çevrimiçi Whitespace derleyicisini kullanıyorum , çünkü soldaki komutları vurgulayıp gösteriyor. Ama görünüşe göre, Java tamsayılarına benzer şekilde çalışır, çünkü maksimum 32 bittir ve bunun üzerindeki negatiflere sarılır .. Yani sayı bir seferde itilmek için çok büyüktü. Numarayı içeri ittiğimdeTIO'daki ittiğimde iyi çalışıyor, şimdi anlıyorum.
Kevin Cruijssen

1

F #, 45 bayt = 22.5 puan

Sadece forrakamları basan değirmen döngüsü:

for c in"DHOPWj"do printf"%d"(int c-int '@')

Yukarıdaki, yürütülebilir bir dosyaya derlenebilen eksiksiz bir programdır.

Bir REPL'de (okuma-değerlendirme-yazdırma döngüsü), örneğin FSI (F # Etkileşimli), REPL değerlendirilen ifadenin bir temsilini çıkaracağından aşağıdaki daha kısa sürüm çalışacaktır; 35 bayt = 17.5 puan var:

[for c in"DHOPWj"->int c-int '@'];;

1

Pyke , 3 puan

77 91 f8 86 98 06

Burada deneyin!

Birinci bayt, yüksek biti olmayan bir bayt ayarlanana kadar taban 128'de okunacak sinyalleri verir.

Son olarak, 32 sonuçtan çıkarılır (tarihsel nedenlerden dolayı).

Bu, çok az miktarda alanda büyük sayıların üretilmesine izin verir


1

MathGolf , 7 bayt * 0.5 = 3.5

ÿ≤┼ÇÅ$∞

Çevrimiçi deneyin!

açıklama

Bu kodun henüz TIO'da çalışmadığını unutmayın. Son zamanlarda MathGolf üzerinde, $operatör ekleme de dahil olmak üzere bazı değişiklikler yaptım . TIO'ya çekildikten sonra orada çalıştırabilirsiniz, o zaman bu cevaba bir güncelleme yapacağım. Terminalde mükemmel çalışır

ÿ≤┼ÇÅ     Push "≤┼ÇÅ"
     $    pop(a), push ord(a) (pushes 2407581171)
      ∞   pop a, push 2*a

MathGolf'un 4 uzunluğa kadar dizeler oluşturmak için 1 bayt değişmez değerleri olduğu gerçeğini kullanıyorum. Bir sayıyı bir taban 256 dizesinden dönüştürmek istersem, iki tane kullanmam gerekirdi "ve dize 5 olurdu karakter. Bu şekilde, 2 bayt tasarruf ettim, ama sonunda iki katına çıkarma operatörüne sahip olarak bir bayt kaybettim.



1

Python 3 , 44 38 19 18,5 bayt

@Jo King sayesinde -6 bayt @oufla
sayesinde% 50
bayt @Dennis sayesinde % 50 bonus -1 bayt'ı işaret etti

for i in'밗ɯ*':print(ord(i),end='')

Çevrimiçi deneyin!



1

Befunge-98 (FBBI) , 15 bayt / 2 = 7.5 puan

"*H/!k-"*.*+..@

Çevrimiçi deneyin!

Açıklama:

Önce '* + H /! K- (42, 72, 47, 33, 107, 45) karakterlerinin ASCII değerlerini bu sıraya yığına itin. Sonra hesapla4815=45107 ve 1623=3347+72ve çıktı.

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.