TIL - 2024. 09.
2024. 10. 01¶
C# permutation 만들기¶
c# - Listing all permutations of a string/integer - Stack Overflow
위의 답변들 중 주어진 아이템들 중 특정한 개수만 써서 permutation을 만드는 방법에 응용할 수 있을 만한 코드는 아래 첨부한 것밖에 없었다.
static IEnumerable<IEnumerable<T>>
GetPermutations<T>(IEnumerable<T> list, int length)
{
if (length == 1) return list.Select(t => new T[] { t });
return GetPermutations(list, length - 1)
.SelectMany(t => list.Where(e => !t.Contains(e)),
(t1, t2) => t1.Concat(new T[] { t2 }));
}
// GetPermutations(Enumerable.Range(0,n),k) 같은 방법으로 사용 가능
인덱스로 쓸 숫자들로 먼저 permutation을 만든 다음 주어진 리스트에서 permutation에 들어있는 인덱스에 해당하는 아이템을 뽑아서 쓰는 방식으로 활용하면 좋을듯.
2024. 10. 02¶
c# DistinctBy¶
IEnumerable을 받아서 아이템에 특정한 함수를 먹였을때 나온 결과가 distinct하도록 거른다. 16499번: 동일한 단어 그룹화하기 (acmicpc.net) 문제를 풀때 문자열의 문자를 sort해서 결과가 같은 값들을 한 번만 count할때 활용했다.
그런데 그렇다면 특정 함수를 먹였을때 distinct하지만 아이템 자체는 서로 다른 경우에는 DistinctBy는 어떤 값을 리턴할까? 아래 실험을 보면 distinct한 값 중 첫 번째 아이템을 남기는 것으로 보인다.
string s() => Console.ReadLine();
var a = new int[int.Parse(s())].Select(_ => s());
foreach (var x in a.DistinctBy(j => string.Concat(j.OrderBy(i => i)))) Console.WriteLine(x);
// 주어진 인풋:
// 4
// cat
// dog
// god
// tca
// 리턴 값:
// cat
// dog
2024. 10. 04¶
c# winform 텍스트를 입력받아서 검색하기¶
이런 식으로 구현하면 바로 되겠구나 아이디어 잡은 정도의 의미. 실제 구현에 ToLower
쓰면 편하다는 것도 리마인드.
`item.ToLower().Contains(text_SearchTerm.Text.ToLower())`
c# winform oauth2 아이디어¶
How to implement oauth2 in C# winforms - CodeProject
큰 아이디어 참고용.
2024. 10. 05¶
2024. 10. 06¶
c# AutoCAD layout 만들기¶
다음의 내용들을 다룬다.
- layout 만들기(이름 중복 피하는 방법도 구현되어 있다.)
- viewport 크기 세팅
- plot 세팅
- 새로 만든 레이어에 zoom 적용
2024. 10. 07¶
c# setup project custom action¶
Visual Studio Installer Project - Custom Action 추가 방법 (tistory.com) 설치파일 실행시 서버와 통신하게 하는 것이 목표. 이를 위해 custom action을 어떻게 추가하는지부터 확인하고 있다.
2024. 10. 08¶
c# datetime 및 format¶
DateTime.Minute Property (System) | Microsoft Learn
Custom date and time format strings - .NET | Microsoft Learn
다음과 같이 사용 가능하다.
$"{DateTime.Now.ToString("yyMMdd-H.mm.ss")}"
2024. 10. 09¶
c# newline을 포함한 문자열¶
Interpolated string expression newline - C# feature specifications | Microsoft Learn
interpolation을 활용하면 된다.
"""c# string x = @"a b c"; """
2024. 10. 10¶
c# 부동 소수점 자릿수¶
부동 소수점 숫자 형식 - C# reference | Microsoft Learn
30490번: Battle Bots (acmicpc.net) 문제를 풀때 decimal
을 사용해야 답이 나왔다.
- float: ~6-9개 자릿수, 4바이트
- double: ~15-17개 자릿수, 8바이트
- decimal: 28-29개의 자릿수, 16바이트
2024. 10. 11¶
2024. 10. 12¶
2024. 10. 13¶
2024. 10. 14¶
c# AutoCAD 레이아웃에 있는 viewport 제거하기¶
.net - Autocad C# delete layout viewports - Stack Overflow
두 링크에 있는 내용을 합쳐서 아래와 같은 코드 작성.
using (Transaction tr = db.TransactionManager.StartTransaction())
{
Layout layout = (Layout)tr.GetObject(layoutId, OpenMode.ForWrite);
var vpIds = layout.GetViewports();
foreach (ObjectId vpId in vpIds)
{
Viewport vp = tr.GetObject(vpId, OpenMode.ForRead) as Viewport;
if (vp != null)
{
vp.UpgradeOpen();
vp.Erase();
}
}
tr.Commit();
}
2024. 10. 15¶
c# AutoCAD dimension style¶
Creating and overriding AutoCAD dimension styles using .NET - Through the Interface (keanw.com)
Dimension variable group codes
에 대해 설명되어 있다. 일부를 발췌하자면,
DIMPOST 3
DIMAPOST 4
DIMSCALE 40
DIMASZ 41
...
2024. 10. 16¶
c# 문자열에 가장 많이 등장한 문자 찾기¶
c# - Find character with most occurrences in string? - Stack Overflow
LINQ의 GroupBy
를 활용하면 된다. 15238번: Pirates (acmicpc.net) 문제를 푸는 데에 활용했다.
input.GroupBy(x => x).OrderByDescending(x => x.Count()).First().Key
2024. 10. 17¶
2024. 10. 18¶
2024. 10. 19¶
2024. 10. 20¶
2024. 10. 21¶
2024. 10. 22¶
2024. 10. 23¶
2024. 10. 24¶
2024. 10. 25¶
c# 소수점 반올림 방법들¶
Math.Round Method (System) | Microsoft Learn
만약 Math.Round
함수에 mode를 인자로 넣지 않으면 "Rounds a double-precision floating-point value to the nearest integral value, and rounds midpoint values to the nearest even number." 와 같은 방식으로 작동하므로, 0.5를 반올림했을때 1이 아닌 0이 된다. 그래서 mode값을 인자로 넣어서 무조건 위로 반올림 하도록 할 수 있는데, 아래와 같은 방식으로 사용한다.
int m = (int)Math.Round(n*.15, MidpointRounding.AwayFromZero);