Numara giriniz; Çıktı satırı numarası


18

Code Golf

Tamamen gerçek bir arka plan: www. Sky.Net ve görevlerimizden biri kendinden haberdar bir program ya da başka bir şey yaratmak için, gerçekten patronu dinlemediğimi bilmiyorum. Her neyse, kodumuzu daha bilinçli hale getirmek için , her satır numarasında hangi kodun olduğunu bilmek için BT'ye ihtiyacımız var .


Meydan okuma

Girdiyi alan nve söz konusu programın veya işlevin kodunu çevrimiçi olarak döndüren bir program veya işlev oluşturun n.


kurallar

Program Programınız veya işleviniz en az 4 satır uzunluğunda olmalıdır. Her satır benzersiz olmalıdır.

The Girdinin her zaman 1'den büyük veya ona eşit ve programınız / işlevinizdeki satır sayısına eşit veya daha küçük bir pozitif tamsayı olacağını varsayabilirsiniz.

Program Programınızdaki / fonksiyonunuzdaki ilk satır, satır 0'dır, satır 0'dır.

➍ Programınızın bulunduğu dosyaya erişemezsiniz. (Birisi "Bu teknik olarak kırma kuralı # 4 değil mi?" Diye sormak zorundaysa; muhtemelen

➎ Satırlar boş bırakılamaz (boşluklar dilinizde hiçbir şey yapmazsa boşluk içerir)

➏ Satırlar olamaz // yorum (/ * herhangi bir <! - stil)


Bu bir benzeri bir meydan okuma
Bu , bu yüzden en az bayt ile gönderme kazanır!



1
Bunun 99'da yapıldığını görmek istiyorum :)
Jonathan Allan


"Satırlar yorum olamaz, ancak etkili op-op'ların iyi olduğunu düşünüyorum" (ama dürüst olmak gerekirse, bazen bir satırın op-no olarak sayılıp sayılmayacağını söylemek zor; örneğin, Ruby yanıtım son satırın sadece bir lambda'yı bitirmek için kıvırcık dirsek)
Value Ink

Başlık daha iyi olabilir "Giriş numarası; Bu satır numarası ile çıkış satırı"? Hatta "Sayı satır satır".
Paŭlo Ebermann

Yanıtlar:


16

Vim, 7 bayt

1
2
3
4

Çevrimiçi deneyin!

Anlayabildiğim kadarıyla, bu tüm kurallara uygundur. Varsayılan olarak vim'de boş program tüm girdileri yazdırır. Dan beri

<N><CR>

Noop, hiçbir şey giriş metnini değiştirmez ve her giriş istenen çıktıyla eşleştiğinden, aynı yaklaşım herhangi bir sayıda satırla çalışır.


2
Diğer dillerde çalışacak - ilk ek: Pyth
Jonathan Allan

Bekle, bayt? Vim tuş vuruşlarında ölçülür.
Pavel

@JonathanAllan Pyth, TIO'da yanlış yapılandırılmış gibi görünüyor. Hata ayıklama çıktısına bakarsanız, gerçekten çalıştırılmakta olan kodun, kod alanındaki şey değil, bağımsız değişken alanındaki şey olduğunu görebilirsiniz. Bu kodu çalıştırmak aslında böyle görünüyor.
isaacg


2
Bu aynı zamanda Brachylog'da da çalışır
Fatalize

9

Yakut, 71 70 66 bayt

Çevrimiçi deneyin!

->n{
k=["}", "k[-n]%%k.inspect", "k=%s", "->n{"]
k[-n]%k.inspect
}

"Hile" Modu: 7 + 1 = 8 bayt

-p+1 bayt için bayrak gerektirir . Kelimenin tam anlamıyla V cevabının bir kopyası . Girilen sayıyı yazdırır; programın tamamı etkin bir şekilde işlemez.

1
2
3
4

Ne yapar -p?
Pavel

@Pavel Programın her bir STDIN satırını okumasına $_, program içeriğini çalıştırmasına ve ardından içeriğini $_ekrana yazdırmasına neden olur (her STDIN satırı için yinelenir ). Program hiçbir şey yapmadığından, pratik olarak sadece Unix'tir cat, ancak bu, 1-4'ten gelen her girdinin satırın içeriğini çıkaracağı anlamına gelir, çünkü her satır kelimenin tam anlamıyla satır numarasıdır.
Değer Mürekkebi

@Pavel daha fazla bilgi için bkz. Robm.me.uk/ruby/2013/11/20/ruby-enp.html
Value Ink

"Hile" cevabını seviyorum. Perl de geçerli -p, ancak 1\n2\n3\n4geçerli bir Perl programı değil.
ThisSuitIsBlackNot

7

Haskell, 69 59 bayt

(lines(s++show
 s)
 !!)
s="\n(lines(s++show\n s)\n !!)\ns="

Standart Haskell quine dayanmaktadır. İlk ifade (ilk üç satıra yayılmış), n. Satırı quinified dizesinden s( s++show s) alan adsız bir işlevdir . İndekslemeyi 1 tabanlı yapmak için +2 bayt (gereksiz bir kural imho).

Bir İçin Online deneyin! sürüm 4 bayt ekleyen işlevi adlandırmak zorunda.


Bu kural 6'yı çiğniyor mu? :)
Albert Renshaw

Satır indekslemesinin 0 tabanlı olması gerekmez, kurallar açıkça 1 indeksleme gerektirir.
Değer Mürekkebi

AlbertRenshaw: sabit
nimi

@ValueInk: sabit
nimi

@nimi lol, " çözümler " bu yüzden bu popülerlik yarışması yapmak için cazip hale haha. Yine de, iyi çalışmalar!
Albert Renshaw

5

PowerShell , 184172 bayt

$v=0,
'$v=0,',
"'`$v=0',",(($q='"{0}`$v=0{0},",(($q={0}{1}{0})-f([char]39),$q)')-f([char]39),$q),
(($z='(($z={0}{1}{0})-f([char]39),$z;$v[$args]')-f([char]39),$z);$v[$args]

Çevrimiçi deneyin!

açıklama

$vİlk satırda bir dizi oluşturarak başlar . Aynı satırda, ilk ( 0th) eleman olarak ayarlanır 0ve virgül ,tanımına devam eder.

Sonraki satır 1, dizinin sonraki öğesini ( ) komut dosyasının ilk satırının içeriğini temsil eden bir dizeye ayarlar , böylece $v[1]ilk satırı döndürür.

3. satır ilk olarak dizinin (dizin 2) 3. öğesini komut dosyasının 2. satırını temsil eden bir dizeye ayarlar, ardından aynı satırda , değiştirmek 3için format operatörünü ( -f) kullanan bir quine snippet'i kullanarak 4. elemanı (dizin ) ayarlar. [char]393. satırın tamamını yeniden oluşturmak için tek tırnak ( ) ve biçim şablonu dizesinin belirli örnekleri kendi içine.

Satır 4 temel olarak aynı şeyi yapar, ancak dizinin oluşturulmasını da sonlandırır ve daha sonra verilen bağımsız değişkeni kullanarak dizini dizine ekler.


4

Python 2, 104 73 67 bayt

Jonathan Allan'a 6 bayt kazandığı için teşekkürler!

s=\
['print s[input()]or s', 's=\\', 0, 'exec s[', '0]']
exec s[
0]

Düzenleme: Aynı bayt sayısı, ancak bu çözümü daha iyi seviyorum

Çevrimiçi deneyin!

Value Ink's Ruby yanıtının Python sürümü .

Eski yanıt (67 bayt):

1
s=\
['print s[-input()]or s', 0, 's=\\', 1]
print s[-input()]or s

Kurtulmak 6 Kurtar n: TIO
Jonathan Allan

@ovs meydan okuma gereksinimi en az 4 satır kaynak kodu gerektirir: V
Değer Mürekkep

2

CJam , 19 18 17 bayt

1
{'_'~]ri(=}
_
~

Çevrimiçi deneyin!

Standart CJam-quine temel alınmıştır. {...}_~Çalışan ...yığında blok kendisi (ve bu durumda, aynı zamanda 1aşağıda). Sonra yaparız:

'_'~  e# Push the third and fourth line.
]     e# Wrap all four lines in a list.
ri    e# Read input and convert to integer.
(=    e# Use as index into the lines.

Bu güzel. Ayrıca mantığın gülen yüzünün bitmesi gibi (= haha
Albert Renshaw

1

PHP, 261 bayt

<?php function f($l){
$a="aWYoJGw9PTEpJG09Ijw/cGhwIGZ1bmN0aW9uIGYoXCRsKXsiO2lmKCRsPT0yKSRtPSJcJGE9XCIkYVwiOyI7aWYoJGw9PTMpJG09IlwkYj1cIiR";
$b="iXCI7IjtpZigkbD09NCkkbT0iZXZhbChiYXNlNjRfZGVjb2RlKFwkYS5cJGIpKTt9Pz4iO2VjaG8gJG07";
eval(base64_decode($a.$b));}?>

Çevrimiçi deneyin !!

Kodlanan dize:

if($l==1)$m="<?php function f(\$l){";
if($l==2)$m="\$a=\"$a\";
if($l==3)$m="\$b=\"$b\";
if($l==4)$m="eval(base64_decode(\$a.\$b));}?>";
echo $m;

İlginç! Kodlanmış dizeler nelerdir?
Albert Renshaw

1
@ Albert Renshaw Dize kodunu çözülmüş halini eklemek için düzenledim.
Divcy

0

Perl, 52 bayt

$_=q{print+(split/
/,"\$_=q{$_};
eval")[<>-1]};
eval

Bu klasik kine üzerinde basit bir varyasyon

$_=q{print"\$_=q{$_};eval"};eval

"Yük" split satır sonlarındadır ve sonuçta oluşan listeye indekslenerek doğru satır seçilir.

Perl, 49 48 bayt (rekabetsiz)

#!/usr/bin/perl -d:A
sub DB'DB{
print${"_<$0"}[<>]}
1

Kod için 38 bayt (shebang hariç ancak dahil -d:A) artı dosya adı için 10 bayt olmalıdır Devel/A.pm. DevelDizin olmalıdır@INC .

Teknik olarak, bu Kural # 4'ü ihlal ediyor çünkü -d:A dosyanın iki kez ayrıştırılmasına neden olur, bu yüzden rakip olmayan bir çözümdür.

Derleme zamanında dizide saklanan dosyanın satırlarına erişmek için bir hata ayıklayıcı kancası kullanır @{"_<$filename"}.

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.