Endekslenebilir quine


14

Bu zorluğun amacı, kaynak kodunun n'inci harfini çıkaran ve n'nin programa girdi olarak verildiği bir program yapmaktır. Çoğu soru zorluğu gibi, kaynak kodunuzu bir dosya olarak okuma veya yerleşik soru işlevlerini kullanma izniniz yoktur.

Giriş

0 <= n <len (program) tamsayısı.

Çıktı

Programınızın n'inci karakteri (bayt değil).

Kazanan

Çoğu codegolf sorusu gibi, meydan okumayı çözmek için en düşük bayt sayısını kullanarak meydan okumayı kazanırsınız.

Bonuslar

-5% Programınız negatif endeksleri python stilini destekliyorsa (örn. -1, programınızın son karakteri olur). Aşağıdaki bonus ile kullanılırsa, aralıklarınız negatif endeksleri desteklemelidir.
-20% Programınız yukarıdaki gereksinimlere ek olarak girişleri (herhangi bir format) olarak destekliyorsa.
-25% Programınız her iki ikramiyeyi de tamamlarsa.

Liderler

İşte hem düzenli bir skor tablosu hem de kazananları dile göre gözden geçirmek için bir Yığın Parçacığı.

Yanıtınızın göründüğünden emin olmak için lütfen aşağıdaki Markdown şablonunu kullanarak yanıtınızı bir başlıkla başlatın:

# Language Name, N bytes

Ngönderiminizin büyüklüğü nerede . Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğu veya yorumlayıcı bayrak cezalarını ayrı olarak listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

# Perl, 43 + 2 (-p flag) = 45 bytes

Dil adını, daha sonra skor tablosu snippet'inde görünecek bir bağlantı da yapabilirsiniz:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


Kinin inşaası yasak mı?
Mego

@Mego evet, öyleler.
TheNumberOne

Bonuslar birikir mi (% 100 -% 20 -% 5 =% 75) veya çarpıyor mu (% 100 *% 80 *% 95 =% 76)?
ETHproductions

Girişlerini gerçekten okumayan programlar sayılır mı?
Neil

@ETHproductions Yığını.
TheNumberOne

Yanıtlar:


12

Pyth, 0.75

(Ayrıca bir CJam çok dilli ve muhtemelen diğer birçok dilde olur.)

0

STDIN üzerinde giriş bekliyor:

llama@llama:~$ echo 0..0 | pyth -c '0'
0

Elbette herhangi bir tek basamaklı işler. Pyth'teki en ilginç meydan okuma tam olarak değil.


1
Diğer birçok dilde de çok dil bilen olur.
Mama Fun Roll

PlatyPar'da da çalışıyor
Cyoce

1
ve Japt ve Jolf ve dolaylı çıktıya sahip hemen hemen her dil
ETHproductions

9
Ve PHP, açıkça golf için en iyi dil.
user253751

8

Javascript ES6, 31 bayt

$=_=>`$=${$};$()`[prompt()];$()

açıklama

Standart quine çerçevesi:

$=_=>`$=${$};$()`;$()

[prompt()], yani addon, sonuçta ortaya çıkan quine dizesinin girdi dizinindeki değeri alır.


6

𝔼𝕊𝕄𝕚𝕟, 9 karakter / 19 bayt

⟮ɕṡ+ᶈ0)⎖ï

Try it here (Firefox only).

Ay, 19. bayt!

0 çok çalışıyor (ve çok daha iyi), ama benim sevdiğim için çok önemsiz.

Buna ek olarak, ℹ ï,⧺ïaynı zamanda işe yarayacaktır, ancak quine işlevlerine izin verilmez.

açıklama

Standart quine çerçevesi ⟮ɕṡ+ᶈ0.

)⎖ï sonuçta ortaya çıkan quine dizesini alır ve karakteri girdi dizinine alır.


Bonus çözümü, 11,4 karakter / 25,65 bayt

⟮ᵖ…ɕṡ+ᶈ0;ôᵍï

Try it here (Firefox only).

Bu% 5 bonus almaya hak kazanıyor, ancak yine de orijinal gönderimi geçmiyor.

açıklama

Bu yığını kullanır. ᵖ…ɕṡ+ᶈ0;quine dizesinin tek tek karakterlerini yığına iter ve karakteri ôᵍïdoğrudan yığındaki giriş dizininde (pozitif veya negatif) çıkarır.


Neden bunun için henüz kodlama yapmadınız?
Addison Crump

Güncellemeler çok hızlı geliyor! Dayanamıyorum!
Mama Fun Roll

5

CJam, 12.35 bayt

{s"_~"+ri=}_~

Program 13 bayt uzunluğundadır ve × 0,95 bonus kazanır . Çevrimiçi deneyin!

Nasıl çalışır

{         }      Define a code block.
           _~    Push a copy and execute the copy.
 s               Cast the original code block to string.
  "_~"+          Append "_~".
       ri        Read an integer from STDIN.
         =       Retrieve the character at that index.

4
Tabii ki, 0biraz daha kısa olurdu ...
Dennis

4

Yakut, 53 * 0.75 = 39.75

$><<(<<2*2+?2)[eval gets]
$><<(<<2*2+?2)[eval gets]
2

2Kendi satırında bir ile sınırlandırılmış bir HEREDOC dizesi oluşturur , onu bitiştirir ( *2) ve sonra 2bir karakter değişmezi ile son halini ekler . String#[]Pozitif tamsayıları, negatif tamsayıları ve aralıkları (formdaki girdi m..n) destekleyen Ruby'nin yerleşik özelliklerini kullanarak dilimlenir . $><<çıktı. ( putsburada fazladan yer gerektirir).


Bence gets.to_iaynı şeyi yapar eval getsve daha açık olur. Tamsayı olmayan girdilerle başa çıkmayacaktı, ama yine de gerekli değil
Fon Monica'nın Davası

Normalde yaptığım şey budur, ancak bu Aralıkları yönetmek için bonus alır. (Ayrıca turing tamamlanması için varolmayan bonus).
histokrat

Ah, bunu özledim. Benim hatam.
Monica'nın Davası Fonu

3

Yakut, 38.25 bayt

a="a=%p;$><<(a%%a)[eval gets]";$><<(a%a)[eval gets]

Negatif endeksleri ve aralıkları destekleyin. Ben ikisini $><<ve evalhileyi histokrattan açıkça aldım ve kınamak hilesi başka birinin başlamasıydı, bu yüzden bu CW'yi yapacağım.


1

Python 2, 46.55 bayt

a="a=%r;print(a%%a)[input()]";print(a%a)[input()]

Negatif endeksleri destekler.


Evet, bu olumsuz göstergeleri destekler.
kedi

1

Haskell, 122 bayt

main=getLine>>= \i->putChar$(!!(read i))$p++show p where p="main=getLine>>= \\i->putChar$(!!(read i))$p++show p where p="

Ungolfed:

main=getLine>>= \i->putChar$(!!(read i))$p++show p
 where p="main=getLine>>= \\i->putChar$(!!(read i))$p++show p\n where p="

1

Befunge 93, 5 bayt

Bu güzel (çok) geç ama yine de göndereceğim:

&0g,@

1
Bu yasal IMO olmanın sınırında. Kendi kaynak kodunu bir dosya olarak okumaz, ancak kendi kaynak kodunu okur.
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.