Zdefiniowałem n-ty trójskładnik jako trójskładnik, który zwraca n i ma postać:
1 ? 2 ? 3 ? n - 1 ? n : 0 : 0 : 0 # n - 1 zeroes
Napisz funkcję lub pełny program, który otrzyma dane wejściowe n, wyświetli lub zwróci n-tą trójkę. Code-Golf.
Przypadki testowe
0 #=> undefined behaviour
1 #=> 1
2 #=> 1 ? 2 : 0
3 #=> 1 ? 2 ? 3 : 0 : 0
10 #=> 1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 ? 10 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0
Tysiącletnia, jak sądzę, harmonia zen.
Odpowiedzi:
Pyth -
191817 bajtówPrzestrzenie mnie zabijają, myśląc o lepszym sposobie radzenia sobie z nimi.
Po prostu łączy liczby przez a,
" ? "
a następnie łączy drugą część.Wypróbuj online tutaj .
źródło
CJam,
1818 bajtówWypróbuj online .
Wyjaśnienie
źródło
:)
.Ruby, 31 bajtów
Test:
źródło
array * string
==array.join string
... ciekawef[0]
?irb(main):007:0> f[0] ArgumentError: negative argument from (irb):6:in * from (irb):6:in block in irb_binding from (irb):7:in [] from (irb):7 from /usr/bin/irb:11:in <main>
CJam, 19 bajtów
To dopiero początek ...
Jak to działa
Wypróbuj online tutaj
źródło
Brainfuck, 305
(Bez numeru wejściowego z STDIN, patrz edycja u dołu)
Użyłem tego pięknego algorytmu do wydrukowania liczby, która zajmuje 155 bajtów całego programu.
Działa dla danych wejściowych do 32768 (16-bitowe ograniczenie algorytmu). Nie tworzy spacji końcowych i działa
1
również jako dane wejściowe :Szybkie przejście:
Konfiguracja (97 bajtów)
Pierwsza część (181 bajtów)
Druga część (27 bajtów)
Gdyby można było zamapować 8 poleceń Brainfuck na 3 bity, program ten zająłby 114 bajtów i kolejne 3 bity
Unary, ~ 4,08 * 10 ^ 275 bajtów
Byłoby to zbyt długo, ale to jest po prostu 408452257862560239329948606295286361112603208650130608525040044700379331457759667646985586658469601803889628246410788572492437928714867190270708935427798983714797786123292750743771225096145575210320040188155473030775033228313350778616384531426430459309802833775612506568528463 zer i działa tak samo jak program brainfuck.
EDYTOWAĆ : Pomieszałem, ten program tak naprawdę nie pobiera danych od użytkownika, po prostu używa bieżącej wartości wskaźnika jako danych wejściowych. Aby móc przeanalizować liczbę, byłoby o wiele więcej i nie mogę się tym martwić.
Działa więc z wartością wprowadzoną bezpośrednio do programu (dodając n razy „+” przed programem), ale nie z STDIN
źródło
JavaScript (ES6),
4239 bajtówFunkcja zewnętrzna
f
pobiera wartość wejściową, a następnie wywołujeg
rekurencyjnie funkcję wewnętrzną, aby zbudować łańcuch od środka, używając wartości wejściowej jako wartości maksymalnej w celu przetestowania przypadku podstawowego.Nie golfowany:
źródło
Python
5655źródło
C # - 76
źródło
Haskell, 53 bajty
Jak to działa: zbuduj ciąg od wewnątrz na zewnątrz, zaczynając od pustego ciągu i przechodząc od
n
dołu do2
góry, przygotowując bieżącą liczbę i a?
oraz dodając a: 0
. Wreszcie postaw na1
pierwszy plan.Inne podejście (dzięki @Mauris jest teraz o 9 bajtów krótszy):
Haskell,
6051 bajtówJak to działa: literał,
1
po którym następuje? <x>
dla każdego<x>
w,[2..n]
a następnie stała: 0
dla każdego<x>
w[2..n]
.źródło
g n='1':((=<<[2..n])=<<[(" ? "++).show,\x->" : 0"])
(\_->" : 0")=<<[2..n]
z[2..n]>>" : 0"
Pyth, 17 bajtów
Demonstracja.
źródło
Julia,
4431 bajtówTworzy to nienazwaną funkcję, która przyjmuje liczbę całkowitą jako dane wejściowe i zwraca ciąg znaków. Aby to nazwać, nadaj mu nazwę, np
f=n->...
.Najpierw łączymy liczby całkowite od 1 do n , oddzielając każdy
?
znak spacji i jeden ciąg. Następnie dołączamy do tego ciąg" : 0"
powtórzony n -1 razy.Przykłady:
źródło
JavaScript ES7, 62 bajty
Nie wiem, czy mogę bardziej grać w golfa. Ale to dość proste rozwiązanie
Tylko Firefox:
Odpowiednik ES5:
źródło
CoffeeScript, 52 bajty
Wyjaśnienie
źródło
SWI-Prolog, 90 bajtów
Na pewno nie wygra, ale
\+ (between(1,TopBound,N),\+do_something(N))
konstrukcja jest całkiem interesująca, aby powtórzyć coś na sekwencji liczb całkowitych.źródło
Swift 145 (135 bez białych znaków)
Czy możesz uwierzyć, że część podciągów jest w rzeczywistości dłuższa niż część do wytworzenia wyrażenia.
źródło
str[1]
lubstr[0...5]
. Oczywiście możesz zrobić małe rozszerzenie, ale chciałbym, żeby standardowa bibliotekaPerl, 36 bajtów
35
znaki+1
dla-n
.Biegnij z:
źródło
Java, 71
Nie mogłem się powstrzymać po skomentowaniu odpowiedzi RCB . Oto kolejna Java (71 jak wow, kiedy Java nie jest najdłuższa!)
źródło
Jawa,
12588 bajtówOryginalny
Z ładniejszym formatowaniem i nazwami zmiennych:
Ulepszony - dzięki komentarzom Jacka Ammo poniżej:
źródło
e+=" : 0";
. Następnie możesz zapisać 1 bajt, zwiększając po i, gdy jest używany zamiast w linii forloop.for(int i=1;i<n;){s+=i+++" ? ";
Twoja instrukcja return nie będzie już wymagała dodawania spacji po nreturn s+n+e;
. Możesz także zapisać 1 bajt, używające=s
. Ponadto instrukcja if na początku nie jest konieczna, ponieważ logika pętli for i tak gwarantuje ten wynik.JavaScript (ES6), 59 bajtów
Takie samo podejście jak w mojej odpowiedzi CoffeeScript, przy pomocy ciągów szablonów.
String.prototype.repeat
kosztuje zbyt wiele postaci.Próbny
Firefox tylko na razie, ponieważ jest to ES6.
źródło
K, 36 bajtów
źródło
Python 2,
63605856Wypróbuj tutaj
Łatwe rozwiązanie: (63)
Edycja : Naprawdę chciałem wypróbować funkcję rekurencyjną. Oto on: (56)
Edycja : Czy ktoś wie, dlaczego to nie działa? Próbowałem listy z indeksem
c<n
, ale to nie działało z powodu błędu przepełnienia stosu. To samo z tym:źródło
0*
.rs , 77 bajtów
Prezentacje na żywo i przypadki testowe.
Wyjaśnienie:
Rozwiń liczbę na serię N znaków podkreślenia.
Wielokrotnie twórz zakres podkreśleń oddzielonych spacjami. Ten przykład okaże
___
się_ __ ___
.Dołącz do ostatniego zestawu znaków podkreślenia (o długości N) N-1
: 0
.Zastąp każdą grupę znaków podkreślenia ich długością, poprzedzoną przez
?
, Z WYJĄTKIEM pierwszej.Zastąp pierwszy z numerem 1.
Ze względu na format to również
0
dobrze się obsługuje : po prostu drukuje pusty ciąg.źródło
Szybki,
7975 bajtówf
jest niejawnie zadeklarowany jako funkcja z jednymInt
parametrem, który zwraca aString
Działa z
n >= 1
i ulega awarii w czasie wykonywania, gdyn == 0
. Brak końcowych białych znakówEdycja: Udało się usunąć 2 * 2 znaki, ponieważ interpolacja ciągów znaków nie zawsze jest najkrótsza
Uwaga do edycji: Ten kod trwa wieczność (nie zatrzymuje się) do kompilacji, ale na pewno tak by było, gdyby kompilator był w stanie go obsłużyć. Spójrz na wersję przed tą edycją, aby uzyskać kompilację
źródło
> <> , 32 + 3 = 35 bajtów
Zauważ, że w drugim wierszu jest spacja. +3 oznacza
-v
flagę, np. Działa jakPrzyjmowanie danych wejściowych jako punktu kodowego, takiego jak
ma 34 bajty, ale wolę powyższą wersję, ponieważ łatwiej jest ją przetestować i i tak nie wygra.
Wyjaśnienie
Trwa pseudo-rekurencja i nadużycia, więc spójrzmy.
Pierwszy wiersz drukuje
"1 ? 2 ? ... n-1 ? "
część. Stos zaczyna się od samego wejścian
, dzięki-v
flagi, i wykonujemy następujące czynności:> <> jest toroidalne, więc powyższe wykonuje się w pętli, dopóki stos nie będzie składał się z
n
góry zn-1
zerami poniżej, w tym momencie przechodzi do drugiej linii.Przy pierwszym uruchomieniu drugiego wiersza
n
instrukcja jest uruchamiana, drukującn
na górze stosu. Pozostawia to tylkon-1
zera i wykonujemy następujące czynności, również w pętli:źródło
" ? "ooo
Drukuj odwrotność „?” (Ale hej, palindromy) czy wydrukowanie odwrotności jest krótsze niż wydrukowanie samego ciągu?Scala,
78715250 bajtówźródło
Cel C, 346 bajtów
Obstawianie
0
zaint
coś lub coś negatywnego podnosi zNSRangeException
powoduoutString
powstrzymywanianil
. Powinno to działać na iOS 2.0 i nowszych oraz wielu najnowszych wersjach Mac OS X.Podział kodu:
Deklaracja funkcji standardowej w celu C.
Tworzy ciąg, do którego dane wyjściowe mają się udać
outString
, i umożliwia ich modyfikowanie. (Innymi słowy, można go odczytać i zapisać.Dodaje pierwszą część ciągu do wyniku.
Czyści początek łańcucha, aby upewnić się, że
? 1
jest zastąpiony przez1
. Uwaga: jeśli0
podano, to tutajNSRangeException
wystąpiłoby to z powodu braku indeksu1
.Dodaje drugą część łańcucha do łańcucha.
Wyrzuca ciąg z powrotem za pomocą
NSLog
i zamyka funkcję.Wynik:
Wprowadzenie
0
daje następujący dziennik awarii:1
daje to:2
daje to:7
daje to:200
daje to:źródło
C,
8478 bajtówC, mimo że nie jest najkrótszy, jako funkcja:
W imię golfa The
int
specyfikacja typu jest pozostawione offi
,f
in
dlatego, że jest to ustawienie domyślne.i
może być niezainicjowany, ponieważ jest zmienną globalną i domyślnie wynosi zero.f
nie zwraca wartości, ale powoduje to tylko ostrzeżenie.printf
nie jest#include
„d. Aby uruchomić, oto pełna wersja programu:źródło
for(printf(...);--i;)
.C, 63 bajty
Funkcja wielokrotnego użytku, przyjmuje n jako argument.
Nie golfił i skomentował (całkiem prosto):
źródło
Common Lisp, 84
Najpierw
(loop for i from 1 to (read) collect i)
generuje listę liczb całkowitych od 1 do wszystkiego, co jest wstawiane, co jest używane jako jedyny argument funkcji. Ale prawdziwą magią tego jest łańcuch kontrolny, który wygląda jak szum linii."~{~A ? ~}"
iteruje całą listę przechowywaną w pierwszym argumencie, wypisując każdą liczbę z wartością?
dla pierwszej połowy.~@*
resetuje listę argumentów do pierwszego argumentu.~{~[~;~:;0~^ ? ~]~}
powtarza nad listą, wypisując0 ?
dla każdego zużytego argumentu, ale wypisując nic, jeśli argument ma wartość 0 lub 1.źródło