Numer wejściowy; Numer linii wyjściowej

18

Code Golf

Całkowicie prawdziwa historia: jestem wykonawcą pracującym na stronie internetowej www. Sky.Net i jednym z naszych zadań jest stworzenie samoświadomego programu lub czegoś takiego, nie wiem, czy tak naprawdę nie słuchałem szefa. W każdym razie, aby uczynić nasz kod bardziej samoświadomym, potrzebujemy IT, aby wiedzieć, jaki kod znajduje się na każdym numerze linii.


Wyzwanie

Utwórz program lub funkcję, która pobiera dane wejściowe ni zwraca kod wspomnianego programu lub funkcji w trybie online n.


Zasady

➊ Twój program lub funkcja musi mieć co najmniej 4 linie. Każda linia musi być unikalna.

May Możesz założyć, że wejście zawsze będzie dodatnią liczbą całkowitą większą lub równą 1 i mniejszą lub równą liczbie linii w twoim programie / funkcji.

➌ Pierwszy wiersz w programie / funkcji to wiersz 1, a nie wiersz 0.

➍ Nie można uzyskać dostępu do pliku, w którym znajduje się program. (Jeśli ktoś musi zapytać „Czy to nie jest technicznie łamanie zasady nr 4”; prawdopodobnie tak jest)

➎ Linie nie mogą być puste (obejmuje spację, jeśli spacje nic nie robią w twoim języku)

➏ Linie nie mogą być // komentarzami (/ * dowolnego stylu <!)


Jest to wyzwanie podobne do
To jest , więc wygrywa zgłoszenie z najmniejszą liczbą bajtów!

Albert Renshaw
źródło
Daj nam kontynuować tę dyskusję w czacie .
Conor O'Brien
1
Chciałbym zobaczyć, jak to się robi za 99 :)
Jonathan Allan
2
@JonathanAllan Możesz natknąć się na problem polegający na tym, że nie każda linia jest wyjątkowa
MildlyMilquetoast
„Linie nie mogą być komentarzami, ale wydaje mi się, że skuteczne no-opy są OK” (ale szczerze mówiąc, czasami trudno powiedzieć, czy wiersz powinien być liczony jako no-op, czy nie; na przykład moja odpowiedź Ruby ma tylko wiersz nawias klamrowy do końca lambda)
Wartość tuszu
Może być lepszy tytuł „Numer wejściowy; Linia wyjściowa z tym numerem linii”? Lub nawet „Wiersz wyjściowy według numeru”.
Paŭlo Ebermann

Odpowiedzi:

16

Vim, 7 bajtów

1
2
3
4

Wypróbuj online!

O ile wiem, jest to zgodne ze wszystkimi zasadami. W vimie domyślnie pusty program wypisuje wszystkie dane wejściowe. Od

<N><CR>

Jest noop, nic nie zmienia tekstu wejściowego, a ponieważ każde wejście pasuje do pożądanego wyniku, to samo podejście działa z dowolną liczbą wierszy.

DJMcMayhem
źródło
2
Będzie działał w innych językach - pierwszy dodatek: Pyth
Jonathan Allan
Czekaj bajty? Vim jest mierzony za pomocą klawiszy.
Pavel
@JonathanAllan Wygląda na to, że Pyth jest źle skonfigurowany na TIO. Jeśli spojrzysz na wynik debugowania, zobaczysz, że faktycznie uruchamiany kod jest rzeczą w polu argumentu, a nie rzeczą w polu kodu. Tak właśnie wygląda uruchomienie tego kodu.
isaacg
1
@Pavel tylko w redaktorach golfowych
Martin Ender
2
Działa to również w Brachylog
Fatalize
9

Rubin, 71 70 66 bajtów

Wypróbuj online!

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

Tryb „Cheating”: 7 + 1 = 8 bajtów

Wymaga -pflagi dla +1 bajtu. Dosłownie kopia V odpowiedź . Drukuje wprowadzoną liczbę; cały program jest po prostu bezoperacyjny.

1
2
3
4
Wartość tuszu
źródło
Co ma -pzrobić?
Pavel
@Pavel Powoduje, że program wczytuje każdy wiersz STDIN do $_, uruchamia zawartość programu, a następnie drukuje zawartość screena $_(powtarzając w wierszu STDIN). Ponieważ program nic nie robi, jest to po prostu Unix cat, ale oznacza to, że każde wejście od 1-4 wyświetli zawartość linii, ponieważ każda linia jest dosłownie numerem linii.
Wartość tuszu
@Pavel, aby uzyskać więcej informacji, patrz robm.me.uk/ruby/2013/11/20/ruby-enp.html
Wartość tuszu
Podoba mi się twoja odpowiedź na oszukiwanie. Perl również ma -p, ale 1\n2\n3\n4nie jest prawidłowym programem Perla.
ThisSuitIsBlackNot
7

Haskell, 69 59 bajtów

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

Oparty na standardowej Quine Haskell. Pierwsze wyrażenie (rozłożone na pierwsze trzy wiersze) to nienazwana funkcja, która wybiera n-ty wiersz z łańcucha quinified s( s++show s). +2 bajty do uczynienia indeksowania opartym na 1 (imho niepotrzebna reguła).

Aby wypróbować online! wersja Muszę nazwać funkcję, która dodaje 4 bajty.

nimi
źródło
Czy to złamanie przepisu 6? :)
Albert Renshaw
Indeksowanie linii nie powinno być oparte na 0, reguły wyraźnie wymagają indeksowania 1.
Wartość tuszu
@AlbertRenshaw: naprawiono
nimi
@ValueInk: naprawiono
nimi
@nimi lol, „ rozwiązania ” takie jak ten skłoniły mnie do zrobienia tego konkursu popularności haha. Niemniej jednak dobra robota!
Albert Renshaw
5

PowerShell , 184 172 bajty

$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]

Wypróbuj online!

Wyjaśnienie

Zaczyna się od utworzenia tablicy $vw pierwszym wierszu. W tym samym wierszu ustawiony jest pierwszy ( 0th) element 0, a przecinek ,kontynuuje definicję.

Następny wiersz ustawia następny element ( 1) tablicy na ciąg znaków reprezentujący zawartość pierwszego wiersza skryptu, dzięki czemu $v[1]zwraca pierwszy wiersz.

Trzeci wiersz najpierw ustawia trzeci element tablicy (indeks 2) na ciąg znaków reprezentujący drugi wiersz skryptu, a następnie w tym samym wierszu ustawia czwarty element (indeks 3) za pomocą fragmentu kodu używającego operatora formatu ( -f) do zamiany niektóre wystąpienia pojedynczych cytatów ([char]39 ) i ciąg formatu szablonu w sobie, aby odtworzyć całość trzeciego wiersza.

Wiersz 4 w zasadzie robi to samo, ale także kończy tworzenie tablicy, a następnie indeksuje ją za pomocą dostarczonego argumentu.

briantist
źródło
4

Python 2, 104 73 67 bajtów

Dziękujemy Jonathanowi Allanowi za uratowanie 6 bajtów!

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

Edycja: Ta sama liczba bajtów, ale bardziej podoba mi się to rozwiązanie

Wypróbuj online!

Wersja Rubinowa Value Ink w języku Python .

Starsza odpowiedź (67 bajtów):

1
s=\
['print s[-input()]or s', 0, 's=\\', 1]
print s[-input()]or s
ćpun matematyki
źródło
Oszczędź 6, pozbywając się n: TIO
Jonathan Allan
@ovs wymaganie wyzwania wymaga jednak minimum 4 wierszy kodu źródłowego: V
Wartość tuszu
2

CJam , 19 18 17 bajtów

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

Wypróbuj online!

Oparty na standardowej CJam-quine. {...}_~Uruchamia ...w bloku się na stosie (w tym przypadku także 1poniżej). Następnie wykonujemy:

'_'~  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.
Martin Ender
źródło
To jest piękne. Podobnie jak zakończenie uśmiechniętej twarzy logiki (= haha
Albert Renshaw
1

PHP, 261 bajtów

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

Wypróbuj online !!

Zakodowany ciąg to:

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;
Boskość
źródło
Ciekawy! Jakie są zakodowane ciągi?
Albert Renshaw
1
@Albert Renshaw Zredagowałem go, aby dodać zdekodowaną wersję ciągu.
Divcy
0

Perl, 52 bajty

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

To prosta odmiana klasycznego quine

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

„Ładowność” to split na nowej linii, a poprawna linia jest wybierana przez indeksowanie do wynikowej listy.

Perl, 49 48 bajtów (niekonkurencyjny)

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

38 bajtów dla kodu (z wyłączeniem shebang, ale włącznie -d:A) plus 10 bajtów dla nazwy pliku, która musi być Devel/A.pm. DevelKatalog musi być @INC.

Z technicznego punktu widzenia narusza to zasadę nr 4, ponieważ -d:Apowoduje dwukrotne parsowanie pliku, więc jest to rozwiązanie niekonkurujące.

Używa haka debugera, aby uzyskać dostęp do linii pliku, który perl przechowuje w @{"_<$filename"}tablicy w czasie kompilacji.

ThisSuitIsBlackNot
źródło