Verwenden Sie Codewars Kata Lambda, um bei Null zu beginnen und die Funktion zurückzugeben? !!

Was ist Codewars Kata?

Kurz gesagt, es ist ein Dojo, in dem Sie Ihre Programmierung trainieren können Es kann die Übersee-Version von AtCoder genannt werden ~~ Nun, ich wusste nicht, wie man AtCoder benutzt, also habe ich es nicht gemacht ~~ Persönlich passt es besser zu meiner Haut als AtCoder

Auslösen

Nachdem ich diesen Artikel gelesen hatte, entschied ich mich, ihn auszuprobieren und begann vor ungefähr 3 Tagen. Ratschläge eines 19-jährigen Softwareentwickler-Mädchens

Ich versuche mindestens 5 Code Wars Kata pro Tag zu lösen. CodeWars ist Ihr bester Freund, nicht nur, wenn Sie gerade erst anfangen, sondern wenn Sie jahrelang programmiert haben! Die von CodeWars bereitgestellten Problemlösungen sind immer sehr informativ, und Sie können Ihre Syntax erheblich verbessern, indem Sie einfach durch die von anderen bereitgestellten Lösungen scrollen. Ein weiterer großer Vorteil ist, dass Ihnen bei einem Coding-Interview häufig Fragen gestellt werden, die denen von CodeWars sehr ähnlich sind.

Deshalb bin ich sofort zum Problem gegangen Aber es ist doch ein Artikel für mich Wenn Sie interessiert sind, empfehle ich Ihnen, auf Codewars Kata zuzugreifen

Frage 1

Your goal in this kata is to implement a difference function, which subtracts one list from another and returns the result.
Erstellen Sie eine Funktion, die den Inhalt einer Liste von einer anderen subtrahiert
It should remove all values from list a, which are present in list b.
Subtrahieren Sie alle Funktionen in Liste b
Beispiel)
array_diff([1,2],[1]) == [2]
If a value is present in b, all of its occurrences must be removed from the other:
Wenn b mehrere Zahlen enthält, subtrahieren Sie alle
array_diff([1,2,2,2,3],[2]) == [1,3]

Meine Antwort

def array_diff(a, b):
    return [a1 for a1 in a if a1 not in b]

Ich glaube, ich konnte ein wenig klug antworten ...?

Die Antworten anderer Leute sind übrigens ... Best Practice

def array_diff(a, b):
    return [x for x in a if x not in b]

Genau zusammen! !! !! Ich frage mich, ob ich mich am dritten Tag daran gewöhnt habe, Kata zu schreiben

Problem 2

Mach einen Diamanten! !! !! !! Ich habe die Abbildung 1, 3, 5, 7 gesehen ... Es scheint eine Funktion zu haben, Diamanten jeder Größe herzustellen

Jamie is a programmer, and James' girlfriend. She likes diamonds, and wants a diamond string from James. Since James doesn't know how to make this happen, he needs your help.

Task
You need to return a string that looks like a diamond shape when printed on the screen, using asterisk (*) characters. Trailing spaces should be removed, and every line must be terminated with a newline character (\n).

Return null/nil/None/... if the input is an even number or negative, as it is not possible to print a diamond of even or negative size.

Examples
A size 3 diamond:

 *
***
 *
...which would appear as a string of " *\n***\n *\n"

A size 5 diamond:

  *
 ***
*****
 ***
  *
...that is: " *\n ***\n*****\n ***\n *\n"

Meine Antwort

def diamond(n):
    # Make some diamonds!
    if n%2 ==0 or n <1:
        return None

    ans=''
    for i in range(1,n+1,2):
        ans += '{}{}\n'.format(' '*((n-i)//2) ,'*'*i)
    for i in range(n-2,0,-2):
        ans += '{}{}\n'.format(' '*((n-i)//2) ,'*'*i)
    return ans

Der Code ist nicht schön, aber die Ausgabe ist zu schön und ich bin zufrieden

Best Practice

def diamond(n):
    if n > 0 and n % 2 == 1:
        diamond = ""
        for i in range(n):
            diamond += " " * abs((n/2) - i)
            diamond += "*" * (n - abs((n-1) - 2 * i))
            diamond += "\n"
        return diamond
    else:
        return None

Ich benutze abs (n / 2- i) gut und lasse den Fall weg, den ich getan habe, es ist klug

später

def diamond(n):
    if not n%2 or n<1: return None
    d = [" "*i+"*"*(n-2*i)+"\n" for i in range(n/2,0,-1)]
    return ''.join(d) + "*"*n + "\n" + ''.join(d[::-1])

Machen Sie einen halben Diamanten und verwenden Sie ihn richtig, indem Sie von oben oder unten nachzeichnen Das ist auch klug

Problem 3

You have an array of numbers.
Gib eine Zeichenfolge
Your task is to sort ascending odd numbers but even numbers must be on their places.
Sortieren Sie nur ungerade Zahlen, lassen Sie gerade Zahlen so wie sie sind
Zero isn't an odd number and you don't need to move it. If you have an empty array, you need to return it.
Null ist eine gerade Zahl. Wenn es sich um ein leeres Array handelt, ist return auch ein leeres Array
Example

sort_array([5, 3, 2, 8, 1, 4]) == [1, 3, 2, 8, 5, 4]

Meine Antwort

def sort_array(ar):
    # Return a sorted array.
    odd = sorted([a for a in ar if a%2 ==1])
    even = [a for a in ar if a%2 ==0]
    
    flg = [a%2 for a in ar]
    
    ans = []
    od = 0
    ev = 0
    for i in range(len(ar)):
        if flg[i]:
            ans.append(odd[od])
            od +=1
        if not flg[i]:
            ans.append(even[ev])
            ev+=1
    return ans

Ich konnte mir keine gute Methode vorstellen, also teilte ich sie gehorsam in ungerade und gerade Teile.

Best Practice

def sort_array(arr):
  odds = sorted((x for x in arr if x%2 != 0), reverse=True)
  return [x if x%2==0 else odds.pop() for x in arr]

Nachdem ich Quoten erstellt habe, regeneriere ich das Array mit for x in arr Ist nicht "x wenn x% 2 == 0" bei gleichmäßiger Verarbeitung schwierig?

list.pop () kann das letzte Element des Arrays abrufen und löschen Mit list.pop (0) können Sie dasselbe mit dem ersten Element tun Sie können das letzte Element des ungeraden Arrays mit "else odds.pop ()" abrufen und löschen Wenn Sie es in aufsteigender Reihenfolge betrachten, indem Sie es in aufsteigender Reihenfolge betrachten ... klug

Beispiel
odds=[5,3,1]
print('get:',odds.pop(),',odd:',odds)
==> get: 1 ,odd: [5, 3]

Problem 4

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
10 oder weniger, 3,Wenn Sie Vielfache von 5, 3 auflisten,5,6,9 und Summe ist 23
Finish the solution so that it returns the sum of all the multiples of 3 or 5 below the number passed in.
Finde die Summe
Note: If the number is a multiple of both 3 and 5, only count it once.
Note:Wenn es ein Vielfaches von beidem ist, wird es einmal gezählt

Meine Antwort

def solution(number):
  return sum([x for x in range(0,number,3)]+[x for x in range(0,number,5)]) - sum([x for x in range(0,number,15)])

Das einfachste? Summe der Vielfachen von 3 + Summe der Vielfachen von 5-15 Summe der Vielfachen von 15

Best Practice

def solution(number):
    return sum(x for x in range(number) if x % 3 == 0 or x % 5 == 0)

Summe der durch 3 oder 5 teilbaren Zahlen Das ist auch einfach

Problem 5

This time we want to write calculations using functions and get the results. Let's have a look at some examples: Lass einen Kerl rechnen. Zum Beispiel ...

seven(times(five())) # must return 35
four(plus(nine())) # must return 13
eight(minus(three())) # must return 5
six(divided_by(two())) # must return 3
Requirements:

There must be a function for each number from 0 ("zero") to 9 ("nine")
There must be a function for each of the following mathematical operations: plus, minus, times, dividedBy (divided_by in Ruby and Python)
Each calculation consist of exactly one operation and two numbers
The most outer function represents the left operand, the most inner function represents the right operand
Divison should be integer division. For example, this should return 2, not 2.666666...:

--Funktionen sind 0-9

Übrigens habe ich bei der Bedienung von 7kyu einen Fehler gemacht und das Problem von 5kyu gewählt, das überwiegend schwieriger als gewöhnlich ist. Die Antwort ist ein unerträglicher Push-Code. .. .. Oh, das ist nicht lesenswert

def zero(num = 0.5): #your code here
    if num == 0.5:
        return 0    
    return clac(0,num[0],num[1])
def one(num = 0.5): #your code here
    if num == 0.5:
        return 1    
    return clac(1,num[0],num[1])
def two(num =0.5): #your code here
    if num == 0.5:
        return 2   
    return clac(2,num[0],num[1])
def three(num = 0.5): #your code here
    if num == 0.5:
        return 3   
    return clac(3,num[0],num[1])
def four(num = 0.5): #your code here
    if num == 0.5:
        return 4   
    return clac(4,num[0],num[1])
def five(num = 0.5): #your code here
    if num == 0.5:
        return 5   
    return clac(5,num[0],num[1])
def six(num = 0.5): #your code here
    if num == 0.5:
        return 6   
    return clac(6,num[0],num[1])
def seven(num = 0.5): #your code here
    if num == 0.5:
        return 7   
    return clac(7,num[0],num[1])
def eight(num = 0.5): #your code here
    if num == 0.5:
        return 8   
    return clac(8,num[0],num[1])
def nine(num = 0.5): #your code here
    if num == 0.5:
        return 9   
    return clac(9,num[0],num[1])

def plus(num): #your code here
    return [num,1]
def minus(num): #your code here
    return [num,2]
def times(num): #your code here
    return [num,3]
def divided_by(num): #your code here
    return [num,4]

def clac(a,b,operation):
    if operation ==1:
        return a + b
    if operation ==2:
        return a - b
    if operation ==3:
        return a * b
    if operation ==4:
        return a // b

Und dies ist die Best-Practice-Antwort

def zero(f = None): return 0 if not f else f(0)
def one(f = None): return 1 if not f else f(1)
def two(f = None): return 2 if not f else f(2)
def three(f = None): return 3 if not f else f(3)
def four(f = None): return 4 if not f else f(4)
def five(f = None): return 5 if not f else f(5)
def six(f = None): return 6 if not f else f(6)
def seven(f = None): return 7 if not f else f(7)
def eight(f = None): return 8 if not f else f(8)
def nine(f = None): return 9 if not f else f(9)

def plus(y): return lambda x: x+y
def minus(y): return lambda x: x-y
def times(y): return lambda  x: x*y
def divided_by(y): return lambda  x: x/y

...? ?? ?? Was für ein cooler

ich werde es lesen def zero(f = None): return 0 if not f Bisher ist es eine Grundstruktur, die ich hätte tun können, Reue (es ist peinlich, den verdammten Code zu veröffentlichen)

else f(0) ...? ?? ?? Nanikore Dies nimmt eine Funktion als Argument an. Ich wusste nicht, dass ich das schaffen könnte. Darüber hinaus mit Lambda.

def plus(y): return lambda x: x+y ... Anscheinend ist Kimo wie "Lambda"

Schauen wir uns als Beispiel langsam sieben (mal (fünf ())) an.

Erstens "sieben (mal (fünf ()))" Wird "sieben (mal (5))" sein Weiter, weil der Rückgabewert von "times (5)" "Lambda x: x + y" ist

def f(x):
 return x * 5

Wird zurückgegeben

Und da wir für diese Funktion f (7) sind, ist der Rückgabewert "35".

Ich habe lange gebraucht, um so weit zu lesen

Immerhin ist 5kyu immer noch schwierig. .. ..

Recommended Posts

Verwenden Sie Codewars Kata Lambda, um bei Null zu beginnen und die Funktion zurückzugeben? !!
Verwendung von return
Wie benutzt man Python Lambda?
Verwendung der Zip-Funktion
Wie man SWIG von waf benutzt
[Lambda] [Python] Von Lambda auf Twitter posten!
Code Wars Kata ab Null
Verwendung der Zip-Funktion von Python
Vereinfachen Sie die Verwendung der Klickfunktion von SikuliX
Verbessertes Lernen, um von null bis tief zu lernen
[TF] Verwendung von Tensorboard von Keras
[Python] Verwendung von __command__, Funktionserklärung
Ich möchte ein Glas aus Python verwenden
Von der Aufmerksamkeit von Zero Tsuku 2 zum Transformator
Zugriff auf RDS von Lambda (Python)
Lambda-Funktion zur Erstellung eines AMI-Backups (Python)
[Road to Intermediate Python] Verwenden Sie Lambda-Ausdrücke