Utilisez codewars kata lambda pour partir de zéro pour renvoyer la fonction? !!

Qu'est-ce que codewars kata

En un mot, c'est un dojo où vous pouvez entraîner votre programmation Il peut être appelé la version d'outre-mer d'AtCoder ~~ Eh bien, je ne savais pas comment utiliser AtCoder, donc je ne l'ai pas fait ~~ Personnellement, cela convient mieux à ma peau qu'AtCoder

Déclencheur

Après avoir lu cet article, j'ai décidé de l'essayer et j'ai commencé il y a environ 3 jours. Conseils d'une jeune développeur de logiciels de 19 ans

J'essaye de résoudre au moins 5 Code Wars Kata par jour. CodeWars est votre meilleur ami, non seulement lorsque vous débutez, mais aussi lorsque vous codez depuis des années! Les solutions aux problèmes fournies par CodeWars sont toujours très informatives et vous pouvez grandement améliorer votre syntaxe simplement en faisant défiler les solutions fournies par d'autres. Un autre gros avantage est que lorsque vous vous rendez à une entrevue de codage, on vous pose souvent des questions très similaires à celles que pose CodeWars.

C'est pourquoi je suis allé au problème immédiatement Mais après tout c'est un article pour moi Si vous êtes intéressé, je vous recommande d'accéder aux kata codewars

question 1

Your goal in this kata is to implement a difference function, which subtracts one list from another and returns the result.
Créer une fonction qui soustrait le contenu d'une liste d'une autre
It should remove all values from list a, which are present in list b.
Soustrayez toutes les fonctions de la liste b
Exemple)
array_diff([1,2],[1]) == [2]
If a value is present in b, all of its occurrences must be removed from the other:
S'il y a plusieurs nombres dans b, soustrayez-les tous
array_diff([1,2,2,2,3],[2]) == [1,3]

Ma réponse

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

Je pense que j'ai pu répondre un peu intelligemment ...?

Au fait, les réponses des autres sont ... Best Practice

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

Exactement ensemble! !! !! Je me demande si je me suis habitué à écrire des kata le troisième jour

Problème 2

Faites un diamant! !! !! !! J'ai vu le chiffre 1, 3, 5, 7 ... Il semble avoir une fonction pour faire des diamants de chaque taille

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"

Ma réponse

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

Le code n'est pas beau, mais le rendu est trop beau et j'en suis satisfait

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

J'utilise bien les abdominaux (n / 2- i) et en omettant le cas que j'ai fait, c'est intelligent

plus tard

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])

Faites un demi-diamant et utilisez-le correctement en traçant du haut ou du bas C'est aussi intelligent

Problème 3

You have an array of numbers.
Donner une ficelle
Your task is to sort ascending odd numbers but even numbers must be on their places.
Trier uniquement les nombres impairs, laisser les nombres pairs tels quels
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.
Zéro est un nombre pair, s'il s'agit d'un tableau vide, return est également un tableau vide
Example

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

Ma réponse

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

Je ne pouvais pas penser à une bonne méthode, alors je l'ai docilement divisée en parties impaires et paires.

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]

Après avoir créé les cotes, je régénère le tableau avec for x in arr «X if x% 2 == 0» n'est-il pas difficile avec un traitement uniforme?

list.pop () peut récupérer et supprimer le dernier élément du tableau Avec list.pop (0), vous pouvez faire de même avec le premier élément ʻElse odds.pop () `peut récupérer et supprimer le dernier élément du tableau impair En le mettant dans l'instruction for, si vous le regardez un par un dans l'ordre croissant ... intelligent

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

Problème 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 ou moins, 3,Si vous indiquez des multiples de 5, 3,5,6,9 et la somme est 23
Finish the solution so that it returns the sum of all the multiples of 3 or 5 below the number passed in.
Trouvez la somme
Note: If the number is a multiple of both 3 and 5, only count it once.
Note:S'il s'agit d'un multiple de l'un ou l'autre, il sera compté une fois

Ma réponse

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)])

Le plus simple? Somme des multiples de 3 + Somme des multiples de 5-15 Somme des multiples de 15

Best Practice

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

Somme des nombres divisible par 3 ou 5 C'est aussi simple

Problème 5

This time we want to write calculations using functions and get the results. Let's have a look at some examples: Faites un gars pour calculer. Par exemple ...

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...:

Au fait, j'ai commis une erreur dans le fonctionnement de 7kyu et j'ai choisi le problème de 5kyu qui est extrêmement plus difficile que d'habitude. La réponse est un code push insupportable. .. .. Oh, cela ne vaut pas la peine d'être lu

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

Et c'est la meilleure solution

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

...? ?? ?? Quel cool

Je vais le lire def zero(f = None): return 0 if not f Jusqu'ici, c'est une structure de base que j'aurais dû pouvoir faire, des remords (c'est embarrassant de publier le putain de code)

else f(0) ...? ?? ?? Nanikore Cela prend une fonction comme argument. Je ne savais pas que je pouvais faire ça. De plus, en utilisant lambda.

def plus(y): return lambda x: x+y ... Apparemment, Kimo est comme lambda

Jetons un regard lent à «sept (fois (cinq ()))» à titre d'exemple.

Premièrement, sept (fois (cinq ())) Sera sept (fois (5)) Ensuite, parce que la valeur de retour de times (5) est lambda x: x + y

def f(x):
 return x * 5

Sera retourné

Et puisque nous sommes f (7) pour cette fonction, la valeur de retour sera «35».

Il m'a fallu beaucoup de temps pour lire jusqu'ici

Après tout, 5kyu est toujours difficile. .. ..

Recommended Posts

Utilisez codewars kata lambda pour partir de zéro pour renvoyer la fonction? !!
Comment utiliser le retour
Comment utiliser Python lambda
Comment utiliser la fonction zip
Comment utiliser SWIG de WAF
[Lambda] [Python] Publier sur Twitter depuis Lambda!
Code wars kata à partir de zéro
Comment utiliser la fonction zip de python
Faciliter l'utilisation de la fonction clic de SikuliX
Apprentissage amélioré pour apprendre de zéro à profond
[TF] Comment utiliser Tensorboard de Keras
[python] Comment utiliser __command__, explication des fonctions
Je veux utiliser jar de python
De l'attention de Zero Tsuku 2 au transformateur
Comment accéder à RDS depuis Lambda (python)
Fonction Lambda pour effectuer une sauvegarde AMI (python)
[Route vers Python intermédiaire] Utiliser des expressions lambda