Das Interview: Die Front Nine

18

Das Interview: Die Front Nine

Dies ist die erste einer Reihe von Herausforderungen, die durch die Programmierung von Fragen zu Vorstellungsgesprächen inspiriert wurden.

Sie gehen in das Büro, in dem Ihr potenzieller zukünftiger Chef sitzt. "Komm rein und setz dich", sagt er. Sie setzen sich nervös hin und stellen sicher, dass Ihre bissige, aber professionelle Kleidung keine Falten aufweist. Er stellt Ihnen viele Fragen zu Ihrer Ausbildung, früheren Arbeitserfahrungen und so weiter. Du antwortest ihnen meistens ehrlich und fügst hier und da eine kleine Verschönerung hinzu, damit du besser klingst. Er beugt sich vor und beginnt wieder zu sprechen.

"Haben Sie jemals von Code-Golf gehört?" Warum, ja, du liebst Golf Code und machst es oft in deiner Freizeit. "Großartig. Der letzte Teil des Interviews ist eine technische Prüfung. Sie werden mit dem Schreiben von Code beauftragt, um eine Reihe von Problemen zu lösen ..." Er gibt Ihnen ein Blatt Papier. Du siehst schnell darüber hinweg. Kinderleicht. Warum fragte er nach Code Golfing?

"Sie werden basierend auf der Gesamtgröße Ihrer Lösungen für diese Probleme bewertet. Wenn Sie weniger Punkte erzielen als alle anderen Kandidaten, liegt der Job bei Ihnen." Oh. "Wie beim Golf gibt es 18 Probleme, die in zwei 9er-Sätze unterteilt sind. Sie können jede Sprache verwenden, die Sie für die Lösung verwenden möchten. Wir haben Compiler und Dolmetscher für jede Sprache, von der Sie gehört haben, und mit Sicherheit einige, die Sie haben nicht. Viel Glück! "

Die Aufgaben

Aufgabe 1: Multiplikationstabelle

Wenn Sie eine Zahl nals Eingabe angeben, geben Sie eine Multiplikationstabelle für positive ganze Zahlen im Bereich aus [1, n]. nwird im Bereich sein [1, 12]. Alle Zahlen sollten in der Tabelle linksbündig sein. Verwenden Sie das Zeichen xfür die linke obere Ecke.

Beispiele:

n=4
x   1   2   3   4
1   1   2   3   4
2   2   4   6   8
3   3   6   9   12
4   4   8   12  16

n=10
x   1   2   3   4   5   6   7   8   9   10
1   1   2   3   4   5   6   7   8   9   10
2   2   4   6   8   10  12  14  16  18  20
3   3   6   9   12  15  18  21  24  27  30
4   4   8   12  16  20  24  28  32  36  40
5   5   10  15  20  25  30  35  40  45  50
6   6   12  18  24  30  36  42  48  54  60
7   7   14  21  28  35  42  49  56  63  70
8   8   16  24  32  40  48  56  64  72  80
9   9   18  27  36  45  54  63  72  81  90
10  10  20  30  40  50  60  70  80  90  100

Schritt 2: Ordnungszahl RMS

Ausgeben des quadratischen Mittelwerts der ASCII-Ordnungszahlen bei einer gegebenen Folge von ASCII-Zeichen . Die Zeichenfolge enthält niemals ein NULL-Byte (Ordnungszahl 0).

Beispiele:

Input: The Interview: The Front Nine
Output: 95.08290393488019

Input: `1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./
Output: 91.38101204135423

Schritt 3: Projektilbewegung

Geben Sie unter Berücksichtigung der Anfangsgeschwindigkeit und des Winkels mit dem Horizont eines vom Boden abgefeuerten Projektils die horizontale Distanz aus, die es vor der Landung zurücklegen wird. Die Anfangsgeschwindigkeit wird in Metern pro Sekunde angegeben, der Winkel in Grad und die Entfernung in Metern. Nehmen Sie die Schwerkraft der Erde an ( g=9.81 m/s/s) und ignorieren Sie relativistische Effekte. Um dieses Problem zu lösen, können Sie davon ausgehen, dass die Erde flach ist (Sie müssen die Erdkrümmung bei Ihren Berechnungen nicht berücksichtigen). Der angegebene Winkel liegt im Bereich [0, 90]. Ihre Antwort sollte auf mindestens zwei Dezimalstellen genau sein (Rundung ist zulässig).

Beispiele:

velocity=50, angle=45
Result: 254.84 (rounded)

velocity=10, angle=60
Result: 8.82798576742547

Schritt 4: Etaoin Shrdlu

Bei einer Zeichenfolge mit druckbaren ASCII-Zeichen (Ordnungszahlen im Bereich [32,127]), die nicht null ist , geben Sie die Zeichenfolge aus, wobei die Zeichen nach Häufigkeit in absteigender Reihenfolge sortiert sind. Bei Stimmengleichheit aufsteigend nach ASCII-Ordnungszahl ordnen.

Beispiele:

Input: "Hello, World!"
Output: "llloo !,HWder"

Input: "Programming Puzzles and Code Golf"
Output: "    oooPPaaddeeggllmmnnrrzzCGfisu"

Schritt 5: Fibonacci-Index

Bestimmen Sie anhand einer Zahl, ob es sich um eine Fibonacci-Zahl handelt, und geben Sie, falls dies der Fall ist, den Index (beginnend mit 1) in der Sequenz aus. Wenn es sich nicht um eine Fibonacci-Zahl handelt, geben Sie 0 aus. Bei 1, die zweimal in der Folge enthalten ist, geben Sie das früheste Vorkommen aus (Index 1).

Beispiele:

Input: 1
Output: 1

Input: 144
Output: 12

Input: 4
Output: 0

Schritt 6: Anagramme

Bei drei Zeichenfolgen mit englischen Kleinbuchstaben ( [a-z]) wird eine Zeichenfolge ausgegeben, die alle Buchstaben der ersten Zeichenfolge verwendet, mit der zweiten Zeichenfolge beginnt und mit der dritten Zeichenfolge endet. Wenn eine solche Zeichenfolge nicht erstellt werden kann, geben Sie eine leere Zeichenfolge aus. Die Eingabezeichenfolgen bestehen immer aus mindestens einem Buchstaben. Die "Mitte" der Ausgabezeichenfolge (zwischen Präfix- und Postfix-Zeichenfolge) kann leer sein, wenn für die Präfix- und Postfix-Zeichenfolge alle Buchstaben in der Quellzeichenfolge verwendet werden.

Beispiele:

Input: geobits bi es
Possible output: bigtoes

Input: mariatidaltug digital trauma
Output: digitaltrauma

Input: mego go lf
Output: (empty string)

Schritt 7: Ausfüllen der Lücken

Wenn Sie eine Liste von Zeichenfolgen und ein Füllzeichen angegeben haben, geben Sie das Ergebnis aus, indem Sie alle Zeichenfolgen bis zur Länge der längsten Zeichenfolge mit dem Füllzeichen auffüllen, wobei die ursprüngliche Reihenfolge in diesem Fall aufsteigend nach der ursprünglichen Länge der Zeichenfolgen sortiert bleibt einer Krawatte. Sie sollten in der Lage sein, Listen beliebiger endlicher Länge zu verarbeiten, die Zeichenfolgen beliebiger endlicher Länge enthalten und nur durch Speicherbeschränkungen begrenzt sind.

Beispiele:

Input: ["hello","world","this","is","a","test"], 'x'
Output: ["axxxx","isxxx","thisx","testx","hello","world"]

Input: ["I'm","a","lumberjack","and","I'm","okay"], '!'
Output: ["a!!!!!!!!!","I'm!!!!!!!","and!!!!!!!","I'm!!!!!!!","okay!!!!!!","lumberjack"]

Schritt 8: Änderung vornehmen

Geben Sie bei einer Zahl im Bereich [0.01,0.99]die Anzahl jeder der 4 US-Standardmünzen aus, die zur Darstellung dieses Werts verwendet werden sollen, sodass die Gesamtzahl der Münzen minimiert wird. Die Eingabe hat immer genau 2 Nachkommastellen.

Münzwertreferenz:

Penny: 0.01, Nickel: 0.05, Dime: 0.10, Quarter: 0.25

Beispiele:

Input: 0.75
Output: [0,0,0,3]

Input: 0.23
Output: 3 pennies, 0 nickels, 2 dimes, 0 quarters

Schritt 9: Bereiche zusammenführen

Ausgehend von einer endlichen Liste von 2 Tupeln mit Ganzzahlen, die Bereiche darstellen, geben Sie das Ergebnis der Zusammenführung aller überlappenden oder benachbarten Bereiche aus. Alle Bereiche haben mindestens die Länge 1 und der Startwert liegt immer unter dem Endwert. Die Reihenfolge der Ausgabe spielt keine Rolle.

Beispiele:

Input: (2,3), (4,5), (6,9), (0,7)
Output: (0,9)

Input: (-3,4), (2,5), (-10,-4)
Output (-10,-4), (-3,5)

Input: (2,3), (5,6), (6,8)
Output: (5,8), (2,3)

Regeln

  • Das ist , also gewinnt die kürzeste Antwort (in Bytes).
  • Ihre Punktzahl ist die Summe der Byte-Zählungen für alle Ihre Lösungen.
  • Standardlücken sind verboten.
  • Die Ein- und Ausgabe kann auf jede Art und Weise erfolgen, die für Ihre Sprache als Standard gilt.
  • Sie können vollständige Programme oder Funktionen für jede Herausforderung schreiben und zwischen den beiden Herausforderungen wechseln.
  • Sie müssen für alle Herausforderungen dieselbe Sprache verwenden. Wenn Versionsunterschiede so bedeutend sind, dass sie in der Regel als separate Einträge in Herausforderungen betrachtet werden, müssen Sie durchgehend dieselbe Version verwenden. Wenn Sie beispielsweise Python verwenden, müssen Sie für alle Herausforderungen entweder Python 2 oder Python 3 verwenden.
  • Sie müssen alle Herausforderungen lösen. Antworten, die nur einen Teil der Herausforderungen lösen, gelten als nicht wettbewerbsfähig.
  • Sie können integrierte Sprachen oder Standardbibliotheken verwenden.

Bestenliste

Das Stapel-Snippet am Ende dieses Beitrags generiert die Rangliste aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamtrangliste.

Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:

## Language Name, N bytes

Wo Nist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:

## Perl, 43 + 2 (-p flag) = 45 bytes

Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes

Mego
quelle
Dürfen wir in Aufgabe 1 Zahlen in wissenschaftlicher Notation ausgeben?
FUZxxl,
1
Obwohl ich gerne ein solches Interview hätte, bezweifle ich, dass es den Leuten gut steht. wie auch immer. weiterhin viel
spaß
Müssen wir Ergebnisse drucken oder können wir sie von Funktionen zurückgeben? Wenn letzteres zulässig ist, können wir für Aufgabe 1 eine Matrix oder ähnliches zurückgeben?
Alex A.
Aufgabe 8 scheint zwei Ausgabeformate zu haben. Können wir nur das erste verwenden?
Aditsu
1
Ich stimme dafür, diese Frage als "Off-Topic" zu schließen, da es sich um eine mehrteilige Herausforderung mit unzureichender Interaktion zwischen den Teilen handelt
Uhr

Antworten:

8

Pyth, 155 153 149 142 141 131 130 Bytes

4 Bytes dank @FryAmTheEggman

1, 5 und 4 Bytes dank @Jakube

  1. 24 Bytes :J+1SQp\xtjmsm.[`*dk\ 4JJ

Konstruieren Sie die Multiplikationstabelle aus der Liste [1, 1, 2, 3, ...]. Geben Sie +1SQdann a aus xund entfernen Sie das erste Zeichen.

  1. 10 Bytes :@.Om^Cd2z2

Einfach.

  1. 18 Bytes :c*.t.tyvw7Z*QQ9.81

Verwendet die Formel sin(2 theta) * v^2/a, wo thetaist der Winkel, vist die Anfangsgeschwindigkeit und aist9.81

  1. 7 Bytes :o_/zNSz

Einfach.

  1. 15 Bytes :hxeM.u,eNsNQU2Q

Generieren Sie Fibonacci-Paare, ermitteln Sie den Index der Eingabe und fügen Sie einen hinzu.

  1. 14 Bytes :IqSzSJj.-zsQQJ

Verwenden Sie die bagwise Subtraktion, um das Präfix und Suffix aus dem Wort zu entfernen, und setzen Sie den Rest des Wortes in die Mitte. Wenn das Ergebnis davon keine Permutation der Eingabe ist, drucken Sie sie nicht aus.

  1. 8 Bytes :C.tolNQz

Nach Länge sortieren. Gefüllte transponieren. Nochmal transponieren.

  1. 18 Bytes :Jsttz/L~%Jd[25T5 1

Die Anzahl der ausgegebenen Münzen ist in der Reihenfolge [quarters, dimes, nickels, pennies].

Entfernen Sie die ersten 2 Zeichen der Eingabe und wandeln Sie sie in int um, um Cent zu erhalten. Speichern in J. Ordnen Sie für jede Nummer din der Liste [25, 10, 5, 1]nachträglich den Wert J%dzu Jund generieren Sie dann den Wert /Jdmit dem ursprünglichen Wert von J. Drucken.

  1. 16 Bytes :C-M.p,JS{srMQhMJ

Verwandle die Tupel in Bereiche, kombiniere sie zu einer Liste, dedupliziere und sortiere sie. Speichern Sie dies in J. Form J, hMJund hMJ, Jgegebenen hMJwird Jmit jedem Element von 1. Führen Subtraktion in beiden Fällen erhöht. Ersteres sind die unteren Enden der Bereiche, letzteres sind die oberen Enden. Transponiere sie paarweise und drucke sie aus.

isaacg
quelle
6

CJam, 223 Bytes

Aufgabe 1, 35 Bytes

ri_)_,0Xt2m*::*0'xt:s@s,2+f{Se]}/N*

Probieren Sie es online aus.

Aufgabe 2, 12 Bytes

q_:i:mh\,mq/

Probieren Sie es online aus.

Aufgabe 3, 27 Bytes

rd180/P*_mc\ms]rdf*~4.905/*

Probieren Sie es online aus.

Aufgabe 4, 12 Bytes

q$e`{0=~}$e~

Probieren Sie es online aus.

Aufgabe 5, 17 Bytes

XXri:R{_2$+}*]R#)

Probieren Sie es online aus.

Aufgabe 6, 25 Bytes

re!_rf#:!.*r:S;{N+SN+#)}=

Probieren Sie es online aus.

Aufgabe 7, 19 Bytes

{:C;{,}$_W=,f{Ce]}}

Probieren Sie es online aus.

Task 8, 33 Bytes

A4m*{:+}$r2>i:R;{[X5A25].*:+R=}=p

Probieren Sie es online aus.

Task 9, 43 Bytes

{{~1$-,f+}%:|$__,(%a\2ew{:-W<},+e_$2/2,f.+}

Probieren Sie es online aus.

Dennis
quelle
4

Haskell, 650 Bytes

Aufgabe 1, 88 Bytes:

f n="x   "++unlines(map(take 4.(++"   ").show=<<)$[1..n]:map(\a->a:map(a*)[1..n])[1..n])

Aufgabe 2, 76 Bytes:

g s=sqrt(sum(map(fromIntegral.(^2).fromEnum)s)/sum(s>>[1]))

Aufgabe 3, 28 Bytes

v?a=v*v/9.81*sin(2*a*pi/180)

Aufgabe 4, 60 Bytes:

import Data.List
i x=concat$sortOn((0-).length)$group$sort x

Task 5, 64 Bytes

j=(%zip[0..]z);x%((i,h):t)|x<h=0|x==h=i|1<2=x%t;z=scanl(+)0(1:z)

Task 6, 93 Bytes

import Data.List
k a b c|q b a&&q c a=b++((a\\b)\\c)++c|1<2="";q=(.sort).isSubsequenceOf.sort

Task 7, 81 Bytes

import Data.List
s!f=map(take(maximum$map r s).(++cycle[f]))(sortOn r s);r=length

Task 8, 73 Bytes

m x=floor(x*100)#[25,10,5,1];x#[]=[];x#(h:t)|(d,m)<-divMod x h=(m#t)++[d]

Aufgabe 9, 87 Bytes (eine schamlose Kopie der Antwort von @ MtnViewMark von einer ähnlichen Herausforderung)

n i=foldr(&)[]i;p@(a,b)&(q@(c,d):r)|b<c=p:q&r|a>d=q:p&r|1<3=(min a c,max b d)&r;p&_=[p]
nimi
quelle
2

Mathematica 10.3, 465 Bytes

All dies sind anonyme Funktionen. Vielen Dank auch an Martin für die Hilfe beim Golfen, da ich ein Noob bei Mathematica bin.

Task 1, 69 Bytes

Grid@Join[{Join[{"x"},r=Range@#]},Flatten/@({r,Outer[1##&,r,r]}\[Transpose])]&

\[Transpose] ist das 3 Byte "transponieren" Symbol.

Aufgabe 2, 13 Bytes

Mean[#^2]^.5&

oder

√Mean[#^2]&

(√ ist 3 Bytes). Das RootMeanSquareeingebaute ist nicht ganz kurz genug ...

Aufgabe 3, 18 Bytes

Sin[2#2°]#/9.81#&

Aufgabe 4, 57 Bytes

""<>SortBy[c=Characters@#,{-c~Count~#&,ToCharacterCode}]&

Aufgabe 5, 33 Bytes

Tr@Position[Fibonacci@Range@#,#]&

oder

Tr[Fibonacci@Range@#~Position~#]&

oder

Tr[Fibonacci~Array~#~Position~#]&

Task 6, 178 Bytes (hat derzeit einen Fehler)

({s,a,b}=Characters@{##};q=If[#2~SubsetQ~#,List@@(Plus@@#-Plus@@#2),{}]&;i=If[#!={},##]&;x=i[q[s,a],{}];y=If[x!={},i[q[x,b],{},Null],Null];Echo[If[y!=Null,""<>Join@{a,y,b},""]])&

Weniger golfen:

({s,a,b}=Characters@{##};
q=If[#2~SubsetQ~#,List@@(Plus@@#-Plus@@#2),{}]&;
i=If[#!={},##]&;
x=i[q[s,a],{}];
y=If[x!={},i[q[x,b],{},Null],Null];
Echo[If[y!=Null,""<>Join@{a,y,b},""]])&

Saitenmanipulation ist schrecklich ...

Aufgabe 7, 39 Bytes

#~SortBy~StringLength~StringPadRight~#1

Task 8, 46 Bytes

FrobeniusSolve[{1,5,10,25},100#]~MinimalBy~Tr&

oder

{.1,.5,.10,.25}~FrobeniusSolve~#~MinimalBy~Tr&

Task 9, 12 Bytes

Interval@##&

An den Konstruktor übergebene Intervalle werden automatisch zusammengefasst. Schlag das.

mbomb007
quelle