Beschreibung
Hier ist ein sehr abergläubischer Hotelaufzug in Shanghai:
Es vermeidet die Zahl 13, weil dreizehn in der westlichen Welt Pech haben, und es vermeidet die Ziffer 4, weil vier in Teilen Asiens Pech haben. Was wäre, wenn dieses Hotel größer wäre?
Lesen Sie eine positive gerade Ganzzahl n
aus STDIN, die die Anzahl der Stockwerke darstellt, und drucken Sie, wie das Schaltflächenlayout für STDOUT: aussehen würde -1
, gefolgt von den nächsten n-1
positiven Ganzzahlen, die ungleich 13 sind und keine Ziffer 4 enthalten. Ordnen Sie diese an Zahlen in zwei Spalten, wie im obigen Bild: Drucken Sie zwei Stockwerksnummern pro Zeile, die durch einen horizontalen Tabulator getrennt sind, so dass das Lesen der Zeilen in umgekehrter Reihenfolge von links nach rechts die Reihenfolge in aufsteigender Reihenfolge ergibt. (Optional können Sie auch ein abschließendes Zeilenumbruchzeichen drucken.)
Testfälle
Für die Eingabe 14
sollte die Ausgabe wie im obigen Bild aussehen:
15 16
11 12
9 10
7 8
5 6
2 3
-1 1
Dabei ist das Leerzeichen in jeder Zeile ein einzelnes horizontales Tabulatorzeichen.
Für die Eingabe 2
sollten Sie drucken -1 1
.
Für die Eingabe 100
sollten Sie drucken:
120 121
118 119
116 117
113 115
111 112
109 110
107 108
105 106
102 103
100 101
98 99
96 97
93 95
91 92
89 90
87 88
85 86
82 83
80 81
78 79
76 77
73 75
71 72
69 70
67 68
65 66
62 63
60 61
58 59
56 57
53 55
51 52
39 50
37 38
35 36
32 33
30 31
28 29
26 27
23 25
21 22
19 20
17 18
15 16
11 12
9 10
7 8
5 6
2 3
-1 1
Tor
Das ist Code-Golf . Kürzeste Antwort in Bytes gewinnt.
Antworten:
Pyth, 27 Bytes
Probieren Sie es hier online aus .
Ruft die
.f
erstenQ-1
Zahlen ab, die dem Filter entsprechen!=13
und4
nicht in der Zeichenfolgendarstellung der Zahl enthalten sind. Dann geht es voran-1
, schneidet in zwei Hälften , verbindet jedes durch Tabulatoren (C9
) und verbindet sich durch Zeilenumbrüche.quelle
Bash + gemeinsame Utensilien, 51
seq
Generiert aufsteigende Ganzzahlen von 1 bis N mit einer zusätzlichen 9-stelligen voran - mehr als genug für eine 64-Bit-Ganzzahleingabesed
filtert die unglücklichen Böden und Einsätze-1
vor Zeile 1 herausrs
Formt in zwei durch Tabulatoren getrennte Spalten umsed
stoppt nach N / 2 Zeilentac
Kehrt die Ausgabezeilenreihenfolge umquelle
sed $[$1/2]q
Afterrs
mit demsed $1q
Before. Ich denke, das macht es auch POSIX-Shell-kompatibel.1
nicht ausreichen, um zu kompensieren, dass nur 0,9 ^ n der Eingaben durchgelassen werden (Zahlen, die nicht4
get sparser und sparser enthalten, wenn die Anzahl der Ziffern zunimmt). Sobald Sie jedoch mehr als ein paar Hundert Millionen Stockwerke in Ihrem Hotel haben, haben Sie wahrscheinlich andere Probleme, wie z. B. die Klempnerarbeiten aufrechtzuerhalten und Personalwechsel zu organisieren.$[]
Arithmetik ohnehin auf diesen Bereich beschränkt . Ich denke, dies ist eine vernünftige Einschränkung, da in der Frage keine explizite Erwähnung einer Arithmetik mit willkürlicher Genauigkeit erfolgt. Egal, ich stelle jetzt ein9
vor1
, nur um auf der sicheren Seite zu sein.JavaScript ES6,
236234233210195188 BytesHabe dank usandfriends eine Menge Bytes gespart!
Verwendet die
function*
für Generatoren. Wahrscheinlich ein kürzerer Weg, aber es hat Spaß gemacht. Viel Spaß. Ich wette, es kann Golf gespielt werden. Diese seltsamen Whitespace-Dinge sind Tabs.quelle
z=+prompt(i=x=0,l=[]);
==>z=prompt(i=x=0,l=[]);
(-1 Byte).join
Mit Tabulator und ersetzen Sie Leerzeichen in/-?\d+ \d+/g
mit Tabulator, entfernen.map(x=>x.replace(/ /,"\t"))
(sollte 23 Bytes speichern).filter(x=>x!=".0")
==>.filter(x=>+x)
(-5 Bytes).filter(..)
Teil! Versuchen Siel.push(a);
==>+a&&l.push(a);
(-15 Bytes)C 282 Bytes
Formatiert:
Eigenschaften :
Es können bis zu 2095984 Stockwerke berechnet werden. Wenn jedes Stockwerk
19.5m
(inkl. Decke) hoch ist, ist dieses Gebäude lang genug, um um den Äquator gewickelt zu werden!2095984*19.5=40871688m=~40000km=one 'lap' around the planet
.quelle
while
kann konvertiert werdenfor
und dies ermöglicht es Ihnen, einige geschweifte Klammern fallen zu lassen.t/=10
ist ein Byte kürzer alst=t/10
. Addiere 1 zu c in deinerfor
Schleife, um ein paar Bytes zu speichern ->a[c+1]
wirda[c]
, während alle anderen Zahlen die gleiche Länge haben. Ich würde auch zweiprintf
s in der Schleife miteinander kombinieren und wieder geschweifte Klammern fallen lassen.Julia,
134132 BytesDas komische Leerzeichen darin ist eine wörtliche Lasche. Wie Conor O'Brien feststellte, ist dies ein Byte kürzer als dies der Fall ist
\t
.Ungolfed:
quelle
Python 2,
120 -110 Bytesquelle
i-13
anstelle voni!=13
JavaScript, 116
122Bearbeiten Gespeichert 6 Bytes thx @Neil
Einfache Array-Lösung - nicht einmal mit ES6
Versuchen Sie es mit einem beliebigen Browser
quelle
!/4/.test(v)
.' '
anstelle von'\t'
(Literal Tab)Python 2 , 94 Bytes
Probieren Sie es online!
Die Zeichenfolge enthält ein Tabulatorzeichen, das von SE nicht gerendert wird (danke an Sp3000 für den Vorschlag, es zu verwenden und ein Byte zu speichern).
Testet Böden
c
ab dem Boden,-1
bis die Quoten
der Böden erreicht ist. Prüft für jede Etage, ob sie weder ein4
noch gleich0
oder enthält13
. In diesem Fall wird es dem Aufzugsstring vorangestellts
und das Kontingent verringertn
.Mit einem Trick bei der Formatierung von Zeichenfolgen werden die beiden Stockwerke pro Spalte in der richtigen Reihenfolge angezeigt, wenn sie vorangestellt werden. Jede neue Zeile wird wie folgt vorbereitet
'%d\t%%d\n'
: Wenn zwei Etagen der Reihe nach ausgetauscht werden, befindet sich die erste links und die zweite rechts. Zum Beispiel,quelle
\t
. Ah, die Tage bevor TIO existierte.C # 296 Bytes
Ungolfed:
Verwendete Golf-Tricks:
j+""
Anstatt vonj.ToString()
namespace System.Collections.Generic
damit wir nicht nur aufList<T>
den Namespace zugreifen , sondern ihn implizitSystem
ohne weitere Qualifizierung verwenden könnenusing
innerhalb des Namespace , so dass wir schreiben könnenusing Linq;
stattusing System.Linq;
.Insert(0,j)
ist kürzer als die Verwendung.Add(j)
und spätere Anwendung.Reverse()
Es ist bedauerlich, dass das
using Linq;
notwendig ist, da es nur für.Zip
das Schreiben benötigt wird , aber esLinq.Enumerable.Zip()
ist länger.quelle
Ruby 2.3,
8483 Zeichen(82 Zeichen Code + 1 Zeichen Befehlszeilenoption)
Probelauf:
Ruby,
9392 Zeichen(91 Zeichen Code + 1 Zeichen Befehlszeilenoption)
Probelauf:
quelle
Lua, 169 Bytes
Ziemlich einfach, stellen wir zuerst eine Tabelle zusammen, die mit allen Schaltflächenwerten gefüllt ist. Dann iterieren wir rückwärts und drucken jeweils zwei Werte oder nichts, wenn der zweite Wert nicht existiert.
quelle
Mathematica, 105 Bytes
Ersetzen Sie das
\t
durch ein tatsächliches Tabulatorzeichen.quelle
Brachylog , 105 Bytes
Wäre mit CLPFD-Unterstützung viel kürzer gewesen, hier muss ich iterativ ganze Zahlen im ersten Unterprädikat ausprobieren.
Die vorstehende neue Zeile
"w,?bb:2&}
ist obligatorisch. Dies ist die neue Zeile, die zwischen den einzelnen Zeilen gedruckt wird.quelle
C #,
277343Dies ist nur eine Funktion. Ich bin neu in C #. Die Erhöhung sollte für 40-49 gültig sein und
using
s einschließenUngolfed als vollständiges Laufprogramm:
Erklärt
Ich erstelle zwei Listen und wechsle zwischen dem Drücken, Umkehren, Durchlaufen und Greifen der anderen nach Index.
quelle
if(s==1)
durchif(s)
(automatischePython 3, 155 Bytes
Ich denke, das Auflisten, Umkehren und Selbstzippen des Flurnummerngenerators war
s()
vielleicht zu schlau für sich, aber andere haben bereits die Alternative gewählt (zwei Elemente gleichzeitig poppen ), ganz zu schweigen von der Verwendung von Python 2, mit dem Bytes gespart werden zu einigen wichtigen Punkten.Die kürzere, aber schon bessere Alternative benötigt 140 Bytes.
quelle
(0!=n!=13)!=('4'in str(n))
sind 5 Bytes kürzer alsnot(n in(0,13)or'4'in str(n))
.Japt, 42 Bytes
Die vier Leerzeichen sollten ein tatsächliches Tabulatorzeichen sein. Probieren Sie es online!
Wie es funktioniert
quelle
Lua, 141 Bytes
Ungolfed
Probieren Sie es online aus (Sie müssen oben auf "Ausführen" und dann unten auf das Terminal klicken, bevor Sie Eingaben eingeben. Ich suche nach einer besseren Möglichkeit, lua online mit stdin und stdout zu testen.)
quelle
05AB1E ,
252322 Bytes-1 Byte dank nur @ ASCII
Probieren Sie es online!
Erläuterung
quelle
0 13ª
Teil ein bisschen besser zu machen. Vielen Dank!ʒ4å_}
auf4мïê
. PS: basierend auf Ihrem früheren Kommentar:0 13ª
hätte es¾13ª
auch sein können.C ++ 11,
259258203202195194 Bytes1 Byte weniger, dank der Idee von Conor O'Brien, stattdessen die wörtliche Tabulatur zu verwenden
\t
.UPD 2: 55 Bytes mit verbesserter Logik und Komma-Missbrauch gestrichen.
UPD 3: Ein weiteres Byte weniger dank ceilingcat.
UPD 4: 7 Bytes mit freundlicher Genehmigung von ceilingcat.
UPD 5: und ein weiteres Byte von ceilingcat.
Ich bin froh, alle Includes installiert zu haben UND die C- und C # -Lösungen noch zu übertreffen.
Ungolfed:
quelle
iostream
enthältstring
, so können Sie das zweite Include für einen großen Rückgang der Bytecount überspringen :)Java, 333 Bytes
Fügt einem Stapel zulässige Bodennummern hinzu und entfernt sie dann wieder, um sie zu drucken.
Ich habe mit einem IntStream herumgespielt, aber mit all den Importen war dieser kleiner.
quelle
Scala 147
quelle
Python 3, 117 Bytes
Geänderte Version des Python 2-Posts, um der Python 3-Spezifikation zu entsprechen.
quelle
PowerShell, 106
107ByteUngolfed
Beispiel
quelle
Haskell 202 Bytes
Ich bin haskell anfänger ...
quelle
by2
indem Sie einen Namen mit 1 Zeichen verwenden und neu anordnen: Verwenden Sie die letzte Zeile wie sie ist und danachb x = [x]
.Javascript ES6 114 Bytes
Verwendungszweck
f (100);
quelle
Perl 6 , 73 Bytes
Nimmt eine gerade Anzahl von Stockwerken an, da die Problemstellung dies ebenfalls anzunehmen scheint und mindestens ein anderer Lösungsansatz für ungerade Anzahl von Stockwerken vorgesehen ist. Fügen Sie
,:partial
als zweites Argumentrotor
neun weitere Bytes hinzu, um eine ungerade Anzahl von Stockwerken zu unterstützen.quelle
Gelee , 20 Bytes
Probieren Sie es online!
Wie?
quelle
JavaScript (ES6),
151146Hab das gemacht, bevor ich gemerkt habe, dass edc65 bereits ein kürzeres gemacht hat. Naja!
quelle
R , 106 Bytes
Probieren Sie es online!
c("\t","\n")
. Wie vorgeschlagen durch Conor O'Brien, eine wörtliche Registerkarte verwenden , anstatt\t
für -1 Byte.quelle
APL (Dyalog) , 34 Bytes
Probieren Sie es online!
quelle