var QUESTION_ID=92598,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/92598/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Odpowiedzi:
Python, 32 bajty
Anonimowa funkcja lambda. Biorąc pod uwagę liczbę całkowitą x zapisuje "- ~" abs (x) razy i usuwa pierwszy znak, jeśli x jest ujemny, wówczas zero jest dodawane na końcu.
źródło
n
w miejscux
i'
zamiast"
:)JavaScript (ES6),
3331 bajtówRekurencja <wbudowane <pętle (przynajmniej w tym przypadku). Zasadniczo nie docenia danych wejściowych:
~
do łańcucha;-
do łańcucha;Wykorzystuje ten wzór:
źródło
Pyth,
141312 bajtów-2 bajty dzięki @StevenH.
pakiet testowy
Postanowiłem wypróbować Pyth, więc przetłumaczyłem na to moją odpowiedź w języku Python . Każda pomoc mile widziana!
Wyjaśnienie:
źródło
>0
zamiast<Q0
tW>0Q_+0sm"~-
_<>0Q+0sm"~-
Mam nadzieję, że nic mi nie jest, gdy dodam to do mojego rozwiązania.C, 46 bajtów
W przeciwieństwie do większości (wszystkich?) Innych odpowiedzi, ta wypisuje operatorów
~
i-
jeden po drugim.źródło
05AB1E ,
1413 bajtówWyjaśnienie
Wypróbuj online!
źródło
Retina,
1917 bajtówZamień liczbę na unarską, na końcu zero. Wymień każdy
1
z-~
. Usuń podwójne ujemne, jeśli takie istnieje.Wypróbuj online
Wszystkie przypadki testowe naraz (nieznacznie zmodyfikowany program do obsługi wielu przypadków testowych)
źródło
Perl
38 35 33(23 + 1 za -p) 24-13 dzięki Dadzie
źródło
-p
zamiast-r
. Możesz także pozbyć się tych ostatnich nawiasów i średników:if$h<0
wystarczy.$h<0&&s;.;
zamiasts/.// if $h<0
. (-p
Dodaje;
na końcu kodu, więc nie ma potrzeby ostatni;
zs;.;;
I.a if b
Odpowiada w przybliżeniub && a
, ale w tym przypadku to zaoszczędzić jeden bajt, ponieważ można usunąć przestrzeń);
.Dyalog APL , 18 bajtów
'0',⍨
znak zero dołączony do0∘>
negatywność (tj. 1 dla liczb poniżej 0; 0 dla zera i więcej)↓
spadł z'-~'⍴⍨
ciąg „~ -” cyklicznie przekształcany na długość2×
dwa razy|
wartość bezwzględna+
plus0∘<
dodatni (tj. 1 dla liczb powyżej 0)Wypróbuj APL online!
źródło
Haskell, 41 bajtów
f n=['-'|n>0]++(tail$[1..abs n]>>"-~")++"0"
Dzięki nim za 3 bajty
źródło
tail
zawodzi zan=0
. Zamiast tego możesz użyćdrop 1
.f n|n<0=tail.f$abs n|x<-[1..n]>>"-~"=x++"0"
....|n<0=tail$f(-n)|...
.V , 21 bajtów
Wypróbuj online!
V ma bardzo ograniczoną obsługę liczb i faktycznie nie ma pojęcia liczb ujemnych. Oznacza to, że w celu obsługi negatywów (lub nawet 0) musimy zastosować pewne hackerskie obejścia.
Wyjaśnienie:
źródło
JavaScript (ES6),
3937 bajtówZaoszczędź 2 bajty dzięki @Neil
źródło
Galaretka , 10 bajtów
To jest pełny program. Wypróbuj online!
Jak to działa
źródło
Java 7,
9579 bajtów79 bajtów:
Nie golfowany:
Stara wersja (95 bajtów):Stosowanie:
Wypróbuj tutaj!
Wynik:
źródło
Rubinowy, 34 bajty
źródło
EXCEL:
5533 bajtówDane wejściowe mają postać umieszczenia liczby w komórce A1. Formuła może iść wszędzie poza A1.
źródło
T-SQL, 87 bajtów
x*x+1
Stan w podciągu jest wystarczająca, ponieważx^2+1>=2*abs(x)
dla wszystkichx
.Jak zwykle w SQL, dane wejściowe są przechowywane w tabeli:
źródło
CJam ,
1814 bajtówInspiracją dla odpowiedzi Emigny było zaoszczędzenie 4 bajtów.
Wypróbuj online! (Jako zestaw testów oddzielony od linii).
Wyjaśnienie
źródło
Vim - 31 klawiszy
Pierwszy vim golf, często brakowało mnóstwa rzeczy.
źródło
:s/^-
zamiast:s/-\~/\~-
iD
zamiastd$
<C-a>
a następnie usunięciem dwóch znaków na końcu.0i
nie działa?0
przesuwa kursor do pierwszego znaku w bieżącym wierszu. Możesz jednak użyć 0 jako liczby w V.Matlab, 61 bajtów
źródło
Pyke,
1413 bajtówWypróbuj tutaj!
źródło
Perl 6 , 25 bajtów
Wyjaśnienie:
źródło
Galaretka,
1412 bajtów-2 bajty dzięki @Dennis (zwraca 0 zamiast konkatenacji „0”, dzięki czemu jest to pełny program tylko).
Przetestuj w TryItOnline
W jaki sposób?
źródło
> <>, 18 + 3 = 22 bajtów
Wypróbuj online! +3 bajty, aby
-v
flaga zainicjowała stos za pomocą wejścia. Jeśli założenie, że STDIN jest pusty, jest w porządku, to następujący bajt jest krótszy:Program przesuwa wejście
n
tak długo, jak to konieczne, aż osiągnie 0, po czym wyskakuje błąd.źródło
Oktawa, 51 bajtów
Najpierw rażąco kopiując podejście Matlaba przez @pajonk, a następnie modyfikując niektóre szczegóły, przepisując jako „produkt zewnętrzny” między wektorem jedynek a znakami „- ~” i nadużywając indeksowania w locie (lub co to może być o nazwie) pozwala nam zaoszczędzić trochę bajtów. Nadal boli mnie lekko, że nie mogę uzyskać wyrażenia indeksu zajmującego mniej bajtów.
Oktawa pozwala na indeksowanie (i1) (i2) lub nawet (...) (i1) (i2), gdzie Matlab chciałby, abyśmy przechowywali zmienne pomiędzy indeksowaniami.
jest zdecydowanie za długi, aby opisać „najpierw pomiń, jeśli”. Musi być lepszy sposób.
źródło
PseudoD ,
688579521 bajtówWyjaśnić:
źródło
adquirir e``fijar p a Escribir
)?PHP, 61 bajtów
źródło
PHP, 58 bajtów
źródło
Labirynt , 25 bajtów
Wypróbuj online!
Wyjaśnienie
Naprawdę podoba mi się przepływ sterowania w tym. Adres IP przebiega przez cyfrę 8 (a właściwie ∞, jak sądzę) przez kod, aby powoli zmniejszać liczbę wprowadzanych danych
0
podczas drukowania odpowiednich znaków.Kod zaczyna się w lewym górnym rogu od prawej. W
`
tej chwili nic nie robi.?
odczytuje dane wejściowe i+
dodaje je do ukrytego zera poniżej. Oczywiście to też nic nie robi, ale kiedy ponownie?
przejdziemy przez ten kod, wypchniemy zero (ponieważ jesteśmy przy EOF), a+
następnie pozbędziemy się tego zera.Następnie
#
przesuwa głębokość stosu, po prostu upewniając się, że wartość dodatnia na stosie powoduje, że IP skręca na południe i;
odrzuca go ponownie."
Jest no-op i działa jako głównej gałęzi kodu. Można wyróżnić trzy przypadki:Jeśli bieżąca wartość jest dodatnia, IP skręca w prawo (na zachód) i kończy jedną rundę lewej pętli:
Jeśli bieżąca wartość jest ujemna, adres IP skręca w lewo (wschód) i uruchamiany jest następujący kod:
Zauważ, że te dwa będą się na przemian (ponieważ oba zmieniają znak wejścia), dopóki wartość wejściowa nie zostanie zmniejszona do zera. W tym momencie...
!
a następnie skręca na zachód w kierunku@
.!
wypisuje0
i@
kończy program.źródło
GolfScript ,
302420 bajtów~."-~"\abs*\0<{(;}*0
Wejście:
-5
Wynik:
-5 = ~-~-~-~-~0
Wyjaśnienie
Wypróbuj online!
źródło
2 =
, tylko-~-~0
.{(;}*0
zamiast{(;}{}if 0
.