Countdown
Ihr Ziel für diese Code-Golf-Herausforderung ist es, die Zahlen herunterzuzählen und in der Zwischenzeit zu recyceln . Lassen Sie mich erklären.
Zuerst liest Ihre Anwendung eine Zahl, entweder als Programmargument oder mit stdin. Als nächstes müssen Sie einfach wie folgt herunterzählen:
10 9 8 7 6
(in absteigender Reihenfolge)
Aber warte, da ist noch mehr!
Recycling
Es gibt Situationen, in denen wir jede Nummer drucken können, aber nicht jede Nummer auflisten, wir können recyceln! Lassen Sie mich ein kurzes Beispiel geben:
Input: 110
Output: 11091081071061051041031021010099... etc
Recycled: 10 1
Wir haben jetzt noch alle Zahlen aufgeführt, 110, 109, 108, aber wir haben eine 0 und eine 1 recycelt .
Ein anderes Beispiel:
Input: 9900
Output: 9900989989897989698959894... etc
Recycled: 9 98
Code-Golf-Herausforderung
- Lesen Sie eine Zahl (Argument oder stdin)
- Geben Sie den Countdown in absteigender Reihenfolge aus, während Sie alle möglichen Zahlen (zu stdout oder file) recyceln.
- Stoppen Sie, wenn Sie 1 erreichen ODER sobald Sie 0 bis 9 recycelt haben (was auch immer zuerst passiert)
Einfaches Beispiel (bis 1 erreicht ist):
Input: 15
Output: 15141312110987654321
(Notice the 110 instead of 1110)
Erweitertes Beispiel (alle recycelt):
Input: 110
Output: 110910810710610510410310210100998979695949392919089887868584838281807978776757473727170696867665646362616059585756554535251504948474645443424140393837363534332313029282726252423221
Recycled: 10 9 8 7 6 5 4 3 2
(We've recycled all 0-9)
Antworten:
T-SQL -
291277267217199191166158153145142128117Nachdem ich dies auf eine neue Art und Weise angegangen war, schaffte ich es, auf 145 (142 nach ein paar kleinen Änderungen) zu kommen, nicht zu schäbig. Das bedeutet, dass ich möglicherweise um Silber oder Bronze konkurrieren kann. ^^
Dadurch wird keine Liste gedruckt, sondern die Ergebnisse ausgewählt. Die Frage enthielt niemals Einzelheiten zur Ausgabe, daher sollte dies in Ordnung sein. Dies hat immer noch das gleiche Limit von 100 für die Eingabe, zum Teil, weil ich die Tatsache missbrauche, dass jeder 11. Term unter 100 ein Zeichen verliert, und zum Teil, weil die Standardrekursionsgrenze von 100 für allgemeine Tabellenausdrücke gilt.
quelle
Python 143
147Einzug der ersten Ebene ist Leerzeichen, zweite Ebene ist Tabulatorzeichen.
quelle
p=o=''
Zeichensicherungen : Fügen Sie der Funktion optionale Parameter hinzu. Sie verwenden können ,*
fürand
inn and r<1023
oder vielleicht sogarr<1023*n
;while x-1:
kann einen Raum als rasierenwhile~-x
. Es kann auch kürzer sein, einen Satz von Ziffern anstelle einer Bitmaske zu verwenden, um zu speichern, welche Ziffern verwendet wurden.Haskell,
154149147145128120119117 BytesDas Hinzufügen bei der Recycling-Prüfung hat viele Charaktere gekostet ... seufz
Erinnerte sich ein wenig daran, welche Ziffern noch nicht recycelt wurden und hörte auf, wenn die Liste leer ist. Dann wurde ein bisschen mehr Golf gespielt, indem explizite Rekursionen und ein paar weitere Tricks angewendet wurden.
Beispielausgabe:
quelle
Python 2:
119117Markieren Sie dies als Community-Wiki, da es sich nur um eine Golfversion von Wills Antwort handelt .
quelle
d=s,={''}
Arbeit?d=s,={''}
ist äquivalent zud={''}; s,={''}
.s,={''}
Verwendet das Entpacken von Sequenzen, eine Funktion, die häufiger in Anweisungen wie verwendeta, b = (b, a)
wird. Sie können sie jedoch auch verwenden, um das einzige Element aus einer Sequenz mit nur einem Element zu extrahieren.len(d)%11*n
, obwohl es so aussieht, als würde es mit Ihnen über eine Exec-Schleife gehen.set()
als eine Einzelelementmenge zu erstellen{x}
. Flornquake initialisiert es also mit einem Füllelement und prüft, ob es alle zehn Ziffern enthält, indem es feststellt, ob es elf Elemente enthält. Da die leere Zeichenfolge initialisiert werden musss
, dient sie als Füllelement und kombiniert diese Initialisierungen, um Zeichen zu sparen.len(d)%11*n
wäre nett gewesen. :)Ruby,
145139130 BytesÄhnlich wie bei Will, außer dass ich keine Bitmaske verwende, sondern stattdessen eine Reihe nicht verwendeter Ziffern. Die Eingabe erfolgt über STDIN.
Es gibt eine alternative Version, die
while
anstelle von verwendet wird.times
Was auch immer ich versuche, die Anzahl der Bytes ist dieselbe:quelle
CJam,
8077655754 ZeichenWahrscheinlich gar nicht optimiert, abernach vielen Optimierungen und Debugging ist hier die direkte Umsetzung meiner ES6-Antwort in CJam:Probieren Sie es hier online aus . Die Funktion nimmt die Nummer als STDIN und gibt den recycelten Countdown aus, der nach Abschluss des Recyclings unterbrochen wird.
Ich werde versuchen, weiter Golf zu spielen.
Wie es funktioniert:
Die Grundidee ist, dass für jede Countdown-Nummer C überprüft wird, ob die ersten H-Stellen den letzten H-Stellen der resultierenden Zeichenfolge entsprechen, wobei H von der Anzahl der Stellen in C bis 0 reicht
quelle
JavaScript ES6,
149146 ZeichenSolch wortreiche, viele Charaktere, wow.
Führen Sie es in der neuesten Firefox-Webkonsole aus.
Nach dem Ausführen wird eine Methode erstellt,
C
die Sie wie folgt verwenden könnenUPDATE : Manchmal ist plain old
return
kürzer als das Schließen der Pfeilfunktion :)quelle